1// Copyright (c) 2011 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 "chrome/browser/autofill/autofill_common_test.h"
6
7#include "base/utf_string_conversions.h"
8#include "chrome/browser/autofill/autofill_profile.h"
9#include "chrome/browser/autofill/credit_card.h"
10#include "chrome/browser/password_manager/encryptor.h"
11#include "chrome/browser/prefs/pref_service.h"
12#include "chrome/browser/profiles/profile.h"
13#include "chrome/common/pref_names.h"
14#include "webkit/glue/form_field.h"
15
16namespace autofill_test {
17
18void CreateTestFormField(const char* label,
19                         const char* name,
20                         const char* value,
21                         const char* type,
22                         webkit_glue::FormField* field) {
23  *field = webkit_glue::FormField(ASCIIToUTF16(label), ASCIIToUTF16(name),
24                                  ASCIIToUTF16(value), ASCIIToUTF16(type), 0,
25                                  false);
26}
27
28inline void check_and_set(
29    FormGroup* profile, AutofillFieldType type, const char* value) {
30  if (value)
31    profile->SetInfo(type, ASCIIToUTF16(value));
32}
33
34void SetProfileInfo(AutofillProfile* profile,
35    const char* first_name, const char* middle_name,
36    const char* last_name, const char* email, const char* company,
37    const char* address1, const char* address2, const char* city,
38    const char* state, const char* zipcode, const char* country,
39    const char* phone, const char* fax) {
40  check_and_set(profile, NAME_FIRST, first_name);
41  check_and_set(profile, NAME_MIDDLE, middle_name);
42  check_and_set(profile, NAME_LAST, last_name);
43  check_and_set(profile, EMAIL_ADDRESS, email);
44  check_and_set(profile, COMPANY_NAME, company);
45  check_and_set(profile, ADDRESS_HOME_LINE1, address1);
46  check_and_set(profile, ADDRESS_HOME_LINE2, address2);
47  check_and_set(profile, ADDRESS_HOME_CITY, city);
48  check_and_set(profile, ADDRESS_HOME_STATE, state);
49  check_and_set(profile, ADDRESS_HOME_ZIP, zipcode);
50  check_and_set(profile, ADDRESS_HOME_COUNTRY, country);
51  check_and_set(profile, PHONE_HOME_WHOLE_NUMBER, phone);
52  check_and_set(profile, PHONE_FAX_WHOLE_NUMBER, fax);
53}
54
55void SetProfileInfoWithGuid(AutofillProfile* profile,
56    const char* guid, const char* first_name, const char* middle_name,
57    const char* last_name, const char* email, const char* company,
58    const char* address1, const char* address2, const char* city,
59    const char* state, const char* zipcode, const char* country,
60    const char* phone, const char* fax) {
61  if (guid)
62    profile->set_guid(guid);
63  SetProfileInfo(profile, first_name, middle_name, last_name, email,
64                 company, address1, address2, city, state, zipcode, country,
65                 phone, fax);
66}
67
68void SetCreditCardInfo(CreditCard* credit_card,
69    const char* name_on_card, const char* card_number,
70    const char* expiration_month, const char* expiration_year) {
71  check_and_set(credit_card, CREDIT_CARD_NAME, name_on_card);
72  check_and_set(credit_card, CREDIT_CARD_NUMBER, card_number);
73  check_and_set(credit_card, CREDIT_CARD_EXP_MONTH, expiration_month);
74  check_and_set(credit_card, CREDIT_CARD_EXP_4_DIGIT_YEAR, expiration_year);
75}
76
77void DisableSystemServices(Profile* profile) {
78  // Use a mock Keychain rather than the OS one to store credit card data.
79#if defined(OS_MACOSX)
80  Encryptor::UseMockKeychain(true);
81#endif
82
83  // Disable auxiliary profiles for unit testing.  These reach out to system
84  // services on the Mac.
85  if (profile) {
86    profile->GetPrefs()->SetBoolean(prefs::kAutofillAuxiliaryProfilesEnabled,
87                                    false);
88  }
89}
90
91}  // namespace autofill_test
92