1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/autofill/core/browser/autofill_test_utils.h" 6 7 #include "base/guid.h" 8 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service_factory.h" 10 #include "base/prefs/testing_pref_store.h" 11 #include "base/strings/utf_string_conversions.h" 12 #include "components/autofill/core/browser/autofill_manager.h" 13 #include "components/autofill/core/browser/autofill_profile.h" 14 #include "components/autofill/core/browser/credit_card.h" 15 #include "components/autofill/core/browser/field_types.h" 16 #include "components/autofill/core/common/autofill_pref_names.h" 17 #include "components/autofill/core/common/form_data.h" 18 #include "components/autofill/core/common/form_field_data.h" 19 #include "components/user_prefs/pref_registry_syncable.h" 20 #include "components/user_prefs/user_prefs.h" 21 #include "components/webdata/encryptor/encryptor.h" 22 #include "content/public/browser/browser_context.h" 23 24 namespace autofill { 25 namespace test { 26 27 namespace { 28 29 const char kSettingsOrigin[] = "Chrome settings"; 30 31 } // namespace 32 33 scoped_ptr<PrefService> PrefServiceForTesting() { 34 scoped_refptr<user_prefs::PrefRegistrySyncable> registry( 35 new user_prefs::PrefRegistrySyncable()); 36 AutofillManager::RegisterProfilePrefs(registry.get()); 37 base::PrefServiceFactory factory; 38 factory.set_user_prefs(make_scoped_refptr(new TestingPrefStore())); 39 return factory.Create(registry.get()); 40 } 41 42 void CreateTestFormField(const char* label, 43 const char* name, 44 const char* value, 45 const char* type, 46 FormFieldData* field) { 47 field->label = ASCIIToUTF16(label); 48 field->name = ASCIIToUTF16(name); 49 field->value = ASCIIToUTF16(value); 50 field->form_control_type = type; 51 } 52 53 void CreateTestAddressFormData(FormData* form) { 54 form->name = ASCIIToUTF16("MyForm"); 55 form->method = ASCIIToUTF16("POST"); 56 form->origin = GURL("http://myform.com/form.html"); 57 form->action = GURL("http://myform.com/submit.html"); 58 form->user_submitted = true; 59 60 FormFieldData field; 61 test::CreateTestFormField("First Name", "firstname", "", "text", &field); 62 form->fields.push_back(field); 63 test::CreateTestFormField("Middle Name", "middlename", "", "text", &field); 64 form->fields.push_back(field); 65 test::CreateTestFormField("Last Name", "lastname", "", "text", &field); 66 form->fields.push_back(field); 67 test::CreateTestFormField("Address Line 1", "addr1", "", "text", &field); 68 form->fields.push_back(field); 69 test::CreateTestFormField("Address Line 2", "addr2", "", "text", &field); 70 form->fields.push_back(field); 71 test::CreateTestFormField("City", "city", "", "text", &field); 72 form->fields.push_back(field); 73 test::CreateTestFormField("State", "state", "", "text", &field); 74 form->fields.push_back(field); 75 test::CreateTestFormField("Postal Code", "zipcode", "", "text", &field); 76 form->fields.push_back(field); 77 test::CreateTestFormField("Country", "country", "", "text", &field); 78 form->fields.push_back(field); 79 test::CreateTestFormField("Phone Number", "phonenumber", "", "tel", &field); 80 form->fields.push_back(field); 81 test::CreateTestFormField("Email", "email", "", "email", &field); 82 form->fields.push_back(field); 83 } 84 85 inline void check_and_set( 86 FormGroup* profile, ServerFieldType type, const char* value) { 87 if (value) 88 profile->SetRawInfo(type, UTF8ToUTF16(value)); 89 } 90 91 AutofillProfile GetFullProfile() { 92 AutofillProfile profile(base::GenerateGUID(), "http://www.example.com/"); 93 SetProfileInfo(&profile, 94 "John", 95 "H.", 96 "Doe", 97 "johndoe (at) hades.com", 98 "Underworld", 99 "666 Erebus St.", 100 "Apt 8", 101 "Elysium", "CA", 102 "91111", 103 "US", 104 "16502111111"); 105 return profile; 106 } 107 108 AutofillProfile GetFullProfile2() { 109 AutofillProfile profile(base::GenerateGUID(), "https://www.example.com/"); 110 SetProfileInfo(&profile, 111 "Jane", 112 "A.", 113 "Smith", 114 "jsmith (at) example.com", 115 "ACME", 116 "123 Main Street", 117 "Unit 1", 118 "Greensdale", "MI", 119 "48838", 120 "US", 121 "13105557889"); 122 return profile; 123 } 124 125 AutofillProfile GetVerifiedProfile() { 126 AutofillProfile profile(GetFullProfile()); 127 profile.set_origin(kSettingsOrigin); 128 return profile; 129 } 130 131 AutofillProfile GetVerifiedProfile2() { 132 AutofillProfile profile(GetFullProfile2()); 133 profile.set_origin(kSettingsOrigin); 134 return profile; 135 } 136 137 CreditCard GetCreditCard() { 138 CreditCard credit_card(base::GenerateGUID(), "http://www.example.com"); 139 SetCreditCardInfo( 140 &credit_card, "Test User", "4111111111111111" /* Visa */, "11", "2017"); 141 return credit_card; 142 } 143 144 CreditCard GetCreditCard2() { 145 CreditCard credit_card(base::GenerateGUID(), "https://www.example.com"); 146 SetCreditCardInfo( 147 &credit_card, "Someone Else", "378282246310005" /* AmEx */, "07", "2019"); 148 return credit_card; 149 } 150 151 CreditCard GetVerifiedCreditCard() { 152 CreditCard credit_card(GetCreditCard()); 153 credit_card.set_origin(kSettingsOrigin); 154 return credit_card; 155 } 156 157 CreditCard GetVerifiedCreditCard2() { 158 CreditCard credit_card(GetCreditCard2()); 159 credit_card.set_origin(kSettingsOrigin); 160 return credit_card; 161 } 162 163 void SetProfileInfo(AutofillProfile* profile, 164 const char* first_name, const char* middle_name, 165 const char* last_name, const char* email, const char* company, 166 const char* address1, const char* address2, const char* city, 167 const char* state, const char* zipcode, const char* country, 168 const char* phone) { 169 check_and_set(profile, NAME_FIRST, first_name); 170 check_and_set(profile, NAME_MIDDLE, middle_name); 171 check_and_set(profile, NAME_LAST, last_name); 172 check_and_set(profile, EMAIL_ADDRESS, email); 173 check_and_set(profile, COMPANY_NAME, company); 174 check_and_set(profile, ADDRESS_HOME_LINE1, address1); 175 check_and_set(profile, ADDRESS_HOME_LINE2, address2); 176 check_and_set(profile, ADDRESS_HOME_CITY, city); 177 check_and_set(profile, ADDRESS_HOME_STATE, state); 178 check_and_set(profile, ADDRESS_HOME_ZIP, zipcode); 179 check_and_set(profile, ADDRESS_HOME_COUNTRY, country); 180 check_and_set(profile, PHONE_HOME_WHOLE_NUMBER, phone); 181 } 182 183 void SetProfileInfoWithGuid(AutofillProfile* profile, 184 const char* guid, const char* first_name, const char* middle_name, 185 const char* last_name, const char* email, const char* company, 186 const char* address1, const char* address2, const char* city, 187 const char* state, const char* zipcode, const char* country, 188 const char* phone) { 189 if (guid) 190 profile->set_guid(guid); 191 SetProfileInfo(profile, first_name, middle_name, last_name, email, 192 company, address1, address2, city, state, zipcode, country, 193 phone); 194 } 195 196 void SetCreditCardInfo(CreditCard* credit_card, 197 const char* name_on_card, const char* card_number, 198 const char* expiration_month, const char* expiration_year) { 199 check_and_set(credit_card, CREDIT_CARD_NAME, name_on_card); 200 check_and_set(credit_card, CREDIT_CARD_NUMBER, card_number); 201 check_and_set(credit_card, CREDIT_CARD_EXP_MONTH, expiration_month); 202 check_and_set(credit_card, CREDIT_CARD_EXP_4_DIGIT_YEAR, expiration_year); 203 } 204 205 void DisableSystemServices(content::BrowserContext* browser_context) { 206 // Use a mock Keychain rather than the OS one to store credit card data. 207 #if defined(OS_MACOSX) 208 Encryptor::UseMockKeychain(true); 209 #endif 210 211 // Disable auxiliary profiles for unit testing. These reach out to system 212 // services on the Mac. 213 if (browser_context) { 214 user_prefs::UserPrefs::Get(browser_context)->SetBoolean( 215 prefs::kAutofillAuxiliaryProfilesEnabled, false); 216 } 217 } 218 219 } // namespace test 220 } // namespace autofill 221