1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <algorithm>
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/format_macros.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/message_loop/message_loop.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/run_loop.h"
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/tuple.h"
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autocomplete_history_manager.h"
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager.h"
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_metrics.h"
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h"
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/autofill_test_utils.h"
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h"
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h"
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/autofill/core/browser/popup_item_ids.h"
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/autofill/core/browser/test_autofill_client.h"
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/test_autofill_driver.h"
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/test_autofill_external_delegate.h"
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/autofill/core/browser/webdata/autofill_webdata_service.h"
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/common/autofill_pref_names.h"
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_data.h"
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h"
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "grit/components_strings.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h"
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16;
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UTF8ToUTF16;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef PersonalDataManager::GUIDPair GUIDPair;
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kDefaultPageID = 137;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestPersonalDataManager : public PersonalDataManager {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TestPersonalDataManager() : PersonalDataManager("en-US") {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CreateTestAutofillProfiles(&web_profiles_);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CreateTestCreditCards(&credit_cards_);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  using PersonalDataManager::set_database;
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  using PersonalDataManager::SetPrefService;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  MOCK_METHOD1(SaveImportedProfile, std::string(const AutofillProfile&));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* GetProfileWithGUID(const char* guid) {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (std::vector<AutofillProfile *>::iterator it = web_profiles_.begin();
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         it != web_profiles_.end(); ++it) {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!(*it)->guid().compare(guid))
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return *it;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreditCard* GetCreditCardWithGUID(const char* guid) {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (std::vector<CreditCard *>::iterator it = credit_cards_.begin();
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         it != credit_cards_.end(); ++it){
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!(*it)->guid().compare(guid))
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return *it;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddProfile(AutofillProfile* profile) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_profiles_.push_back(profile);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddCreditCard(CreditCard* credit_card) {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_cards_.push_back(credit_card);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void RemoveByGUID(const std::string& guid) OVERRIDE {
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CreditCard* credit_card = GetCreditCardWithGUID(guid.c_str());
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (credit_card) {
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      credit_cards_.erase(
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          std::find(credit_cards_.begin(), credit_cards_.end(), credit_card));
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    AutofillProfile* profile = GetProfileWithGUID(guid.c_str());
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (profile) {
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_profiles_.erase(
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          std::find(web_profiles_.begin(), web_profiles_.end(), profile));
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Do nothing (auxiliary profiles will be created in
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // CreateTestAuxiliaryProfile).
110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void LoadAuxiliaryProfiles(bool record_metrics) const OVERRIDE {}
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ClearAutofillProfiles() {
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    web_profiles_.clear();
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ClearCreditCards() {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_cards_.clear();
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CreateTestAuxiliaryProfiles() {
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CreateTestAutofillProfiles(&auxiliary_profiles_);
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateTestCreditCardsYearAndMonth(const char* year, const char* month) {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ClearCreditCards();
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CreditCard* credit_card = new CreditCard;
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::SetCreditCardInfo(credit_card, "Miku Hatsune",
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            "4234567890654321", // Visa
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            month, year);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_card->set_guid("00000000-0000-0000-0000-000000000007");
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_cards_.push_back(credit_card);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateTestAutofillProfiles(ScopedVector<AutofillProfile>* profiles) {
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutofillProfile* profile = new AutofillProfile;
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::SetProfileInfo(profile, "Elvis", "Aaron",
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         "Presley", "theking@gmail.com", "RCA",
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         "3734 Elvis Presley Blvd.", "Apt. 10",
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         "Memphis", "Tennessee", "38116", "US",
141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         "12345678901");
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile->set_guid("00000000-0000-0000-0000-000000000001");
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profiles->push_back(profile);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile = new AutofillProfile;
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::SetProfileInfo(profile, "Charles", "Hardin",
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         "Holley", "buddy@gmail.com", "Decca",
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         "123 Apple St.", "unit 6", "Lubbock",
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                         "Texas", "79401", "US", "23456789012");
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile->set_guid("00000000-0000-0000-0000-000000000002");
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profiles->push_back(profile);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile = new AutofillProfile;
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::SetProfileInfo(
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        profile, "", "", "", "", "", "", "", "", "", "", "", "");
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profile->set_guid("00000000-0000-0000-0000-000000000003");
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    profiles->push_back(profile);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CreateTestCreditCards(ScopedVector<CreditCard>* credit_cards) {
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CreditCard* credit_card = new CreditCard;
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::SetCreditCardInfo(credit_card, "Elvis Presley",
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            "4234 5678 9012 3456",  // Visa
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            "04", "2012");
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_card->set_guid("00000000-0000-0000-0000-000000000004");
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_cards->push_back(credit_card);
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_card = new CreditCard;
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::SetCreditCardInfo(credit_card, "Buddy Holly",
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            "5187654321098765",  // Mastercard
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            "10", "2014");
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_card->set_guid("00000000-0000-0000-0000-000000000005");
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_cards->push_back(credit_card);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_card = new CreditCard;
174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::SetCreditCardInfo(credit_card, "", "", "", "");
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_card->set_guid("00000000-0000-0000-0000-000000000006");
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    credit_cards->push_back(credit_card);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestPersonalDataManager);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Populates |form| with data corresponding to a simple credit card form.
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note that this actually appends fields to the form data, which can be useful
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for building up more complex test forms.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreateTestCreditCardFormData(FormData* form,
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  bool is_https,
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  bool use_month_type) {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form->name = ASCIIToUTF16("MyForm");
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (is_https) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form->origin = GURL("https://myform.com/form.html");
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form->action = GURL("https://myform.com/submit.html");
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form->origin = GURL("http://myform.com/form.html");
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form->action = GURL("http://myform.com/submit.html");
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form->user_submitted = true;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form->fields.push_back(field);
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form->fields.push_back(field);
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (use_month_type) {
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::CreateTestFormField(
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "Expiration Date", "ccmonth", "", "month", &field);
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form->fields.push_back(field);
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::CreateTestFormField("Expiration Date", "ccmonth", "", "text", &field);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form->fields.push_back(field);
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::CreateTestFormField("", "ccyear", "", "text", &field);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form->fields.push_back(field);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledField(const char* expected_label,
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const char* expected_name,
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const char* expected_value,
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const char* expected_form_control_type,
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const FormFieldData& field) {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SCOPED_TRACE(expected_label);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(UTF8ToUTF16(expected_label), field.label);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(UTF8ToUTF16(expected_name), field.name);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(UTF8ToUTF16(expected_value), field.value);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_form_control_type, field.form_control_type);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that the |filled_form| has been filled with the given data.
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies address fields if |has_address_fields| is true, and verifies
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// credit card fields if |has_credit_card_fields| is true. Verifies both if both
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are true. |use_month_type| is used for credit card input month type.
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledForm(int page_id,
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const FormData& filled_form,
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      int expected_page_id,
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* first,
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* middle,
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* last,
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* address1,
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* address2,
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* city,
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* state,
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* postal_code,
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* country,
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* phone,
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* email,
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* name_on_card,
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* card_number,
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* expiration_month,
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const char* expiration_year,
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      bool has_address_fields,
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      bool has_credit_card_fields,
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      bool use_month_type) {
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The number of fields in the address and credit card forms created above.
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t kAddressFormSize = 11;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t kCreditCardFormSize = use_month_type ? 3 : 4;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(expected_page_id, page_id);
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ASCIIToUTF16("MyForm"), filled_form.name);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_credit_card_fields) {
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(GURL("https://myform.com/form.html"), filled_form.origin);
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(GURL("https://myform.com/submit.html"), filled_form.action);
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(GURL("http://myform.com/form.html"), filled_form.origin);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(GURL("http://myform.com/submit.html"), filled_form.action);
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(filled_form.user_submitted);
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  size_t form_size = 0;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_address_fields)
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form_size += kAddressFormSize;
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_credit_card_fields)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form_size += kCreditCardFormSize;
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(form_size, filled_form.fields.size());
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_address_fields) {
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("First Name", "firstname", first, "text",
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[0]);
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Middle Name", "middlename", middle, "text",
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[1]);
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Last Name", "lastname", last, "text",
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[2]);
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Address Line 1", "addr1", address1, "text",
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[3]);
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Address Line 2", "addr2", address2, "text",
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[4]);
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("City", "city", city, "text",
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[5]);
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("State", "state", state, "text",
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[6]);
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Postal Code", "zipcode", postal_code, "text",
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[7]);
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Country", "country", country, "text",
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[8]);
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Phone Number", "phonenumber", phone, "tel",
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[9]);
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Email", "email", email, "email",
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[10]);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_credit_card_fields) {
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t offset = has_address_fields? kAddressFormSize : 0;
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Name on Card", "nameoncard", name_on_card, "text",
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[offset + 0]);
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("Card Number", "cardnumber", card_number, "text",
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      filled_form.fields[offset + 1]);
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (use_month_type) {
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string exp_year = expiration_year;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string exp_month = expiration_month;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::string date;
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!exp_year.empty() && !exp_month.empty())
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        date = exp_year + "-" + exp_month;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ExpectFilledField("Expiration Date", "ccmonth", date.c_str(), "month",
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        filled_form.fields[offset + 2]);
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    } else {
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ExpectFilledField("Expiration Date", "ccmonth", expiration_month, "text",
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        filled_form.fields[offset + 2]);
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ExpectFilledField("", "ccyear", expiration_year, "text",
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        filled_form.fields[offset + 3]);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledAddressFormElvis(int page_id,
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  const FormData& filled_form,
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  int expected_page_id,
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  bool has_credit_card_fields) {
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectFilledForm(page_id, filled_form, expected_page_id, "Elvis", "Aaron",
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "Presley", "3734 Elvis Presley Blvd.", "Apt. 10", "Memphis",
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "Tennessee", "38116", "United States", "12345678901",
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "theking@gmail.com", "", "", "", "", true,
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   has_credit_card_fields, false);
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledCreditCardFormElvis(int page_id,
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const FormData& filled_form,
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     int expected_page_id,
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     bool has_address_fields) {
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectFilledForm(page_id, filled_form, expected_page_id,
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "", "", "", "", "", "", "", "", "", "", "",
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "Elvis Presley", "4234567890123456", "04", "2012",
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   has_address_fields, true, false);
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledCreditCardYearMonthWithYearMonth(int page_id,
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                  const FormData& filled_form,
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                  int expected_page_id,
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                  bool has_address_fields,
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                  const char* year,
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                  const char* month) {
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ExpectFilledForm(page_id, filled_form, expected_page_id,
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "", "", "", "", "", "", "", "", "", "", "",
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   "Miku Hatsune", "4234567890654321", month, year,
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   has_address_fields, true, true);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
356eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MockAutocompleteHistoryManager : public AutocompleteHistoryManager {
357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
358f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  MockAutocompleteHistoryManager(AutofillDriver* driver, AutofillClient* client)
359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      : AutocompleteHistoryManager(driver, client) {}
360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  MOCK_METHOD1(OnFormSubmitted, void(const FormData& form));
362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
363eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
364eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MockAutocompleteHistoryManager);
365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MockAutofillDriver : public TestAutofillDriver {
368eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
369a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  MockAutofillDriver() {}
370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Mock methods to enable testability.
372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MOCK_METHOD3(SendFormDataToRenderer, void(int query_id,
373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                            RendererFormDataAction action,
374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                            const FormData& data));
375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
377eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MockAutofillDriver);
378eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
379eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestAutofillManager : public AutofillManager {
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  TestAutofillManager(AutofillDriver* driver,
383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      autofill::AutofillClient* client,
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      TestPersonalDataManager* personal_data)
385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      : AutofillManager(driver, client, personal_data),
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        personal_data_(personal_data),
387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        autofill_enabled_(true) {}
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~TestAutofillManager() {}
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsAutofillEnabled() const OVERRIDE { return autofill_enabled_; }
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_autofill_enabled(bool autofill_enabled) {
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_enabled_ = autofill_enabled;
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_expected_submitted_field_types(
3973240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch      const std::vector<ServerFieldTypeSet>& expected_types) {
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected_submitted_field_types_ = expected_types;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UploadFormDataAsyncCallback(
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const FormStructure* submitted_form,
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::TimeTicks& load_time,
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::TimeTicks& interaction_time,
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const base::TimeTicks& submission_time) OVERRIDE {
406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    run_loop_->Quit();
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // If we have expected field types set, make sure they match.
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!expected_submitted_field_types_.empty()) {
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_EQ(expected_submitted_field_types_.size(),
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                submitted_form->field_count());
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      for (size_t i = 0; i < expected_submitted_field_types_.size(); ++i) {
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        SCOPED_TRACE(
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            base::StringPrintf(
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                "Field %d with value %s", static_cast<int>(i),
4165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                base::UTF16ToUTF8(submitted_form->field(i)->value).c_str()));
4173240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch        const ServerFieldTypeSet& possible_types =
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            submitted_form->field(i)->possible_types();
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        EXPECT_EQ(expected_submitted_field_types_[i].size(),
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  possible_types.size());
4213240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch        for (ServerFieldTypeSet::const_iterator it =
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 expected_submitted_field_types_[i].begin();
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)             it != expected_submitted_field_types_[i].end(); ++it) {
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          EXPECT_TRUE(possible_types.count(*it))
425bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch              << "Expected type: " << AutofillType(*it).ToString();
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AutofillManager::UploadFormDataAsyncCallback(submitted_form,
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 load_time,
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 interaction_time,
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                 submission_time);
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Resets the run loop so that it can wait for an asynchronous form
437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // submission to complete.
438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void ResetRunLoop() { run_loop_.reset(new base::RunLoop()); }
439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Wait for the asynchronous OnFormSubmitted() call to complete.
441a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void WaitForAsyncFormSubmit() { run_loop_->Run(); }
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UploadFormData(const FormStructure& submitted_form) OVERRIDE {
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    submitted_form_signature_ = submitted_form.FormSignature();
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const std::string GetSubmittedFormSignature() {
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return submitted_form_signature_;
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* GetProfileWithGUID(const char* guid) {
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return personal_data_->GetProfileWithGUID(guid);
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreditCard* GetCreditCardWithGUID(const char* guid) {
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return personal_data_->GetCreditCardWithGUID(guid);
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddProfile(AutofillProfile* profile) {
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    personal_data_->AddProfile(profile);
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddCreditCard(CreditCard* credit_card) {
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    personal_data_->AddCreditCard(credit_card);
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetPackedCreditCardID(int credit_card_id) {
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string credit_card_guid =
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        base::StringPrintf("00000000-0000-0000-0000-%012d", credit_card_id);
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PackGUIDs(GUIDPair(credit_card_guid, 0), GUIDPair(std::string(), 0));
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddSeenForm(FormStructure* form) {
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form_structures()->push_back(form);
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ClearFormStructures() {
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    form_structures()->clear();
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Weak reference.
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestPersonalDataManager* personal_data_;
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool autofill_enabled_;
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
488a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<base::RunLoop> run_loop_;
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string submitted_form_signature_;
4913240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  std::vector<ServerFieldTypeSet> expected_submitted_field_types_;
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestAutofillManager);
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass TestAutofillExternalDelegate : public AutofillExternalDelegate {
4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public:
498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  explicit TestAutofillExternalDelegate(AutofillManager* autofill_manager,
4997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                        AutofillDriver* autofill_driver)
500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      : AutofillExternalDelegate(autofill_manager, autofill_driver),
5017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        on_query_seen_(false),
5027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        on_suggestions_returned_seen_(false) {}
5037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual ~TestAutofillExternalDelegate() {}
5047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnQuery(int query_id,
5067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                       const FormData& form,
5077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                       const FormFieldData& field,
5087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                       const gfx::RectF& bounds,
5097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                       bool display_warning) OVERRIDE {
5107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    on_query_seen_ = true;
5117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    on_suggestions_returned_seen_ = false;
5127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
5137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnSuggestionsReturned(
5157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      int query_id,
5167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::vector<base::string16>& autofill_values,
5177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::vector<base::string16>& autofill_labels,
5187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::vector<base::string16>& autofill_icons,
5197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      const std::vector<int>& autofill_unique_ids) OVERRIDE {
5207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    on_suggestions_returned_seen_ = true;
5217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    query_id_ = query_id;
5237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    autofill_values_ = autofill_values;
5247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    autofill_labels_ = autofill_labels;
5257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    autofill_icons_ = autofill_icons;
5267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    autofill_unique_ids_ = autofill_unique_ids;
5277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
5287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void CheckSuggestions(int expected_page_id,
5307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                        size_t expected_num_suggestions,
5317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                        const base::string16 expected_values[],
5327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                        const base::string16 expected_labels[],
5337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                        const base::string16 expected_icons[],
5347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                        const int expected_unique_ids[]) {
5357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    // Ensure that these results are from the most recent query.
5367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    EXPECT_TRUE(on_suggestions_returned_seen_);
5377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    EXPECT_EQ(expected_page_id, query_id_);
5397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    ASSERT_EQ(expected_num_suggestions, autofill_values_.size());
5407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    ASSERT_EQ(expected_num_suggestions, autofill_labels_.size());
5417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    ASSERT_EQ(expected_num_suggestions, autofill_icons_.size());
5427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    ASSERT_EQ(expected_num_suggestions, autofill_unique_ids_.size());
5437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    for (size_t i = 0; i < expected_num_suggestions; ++i) {
5447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      SCOPED_TRACE(base::StringPrintf("i: %" PRIuS, i));
5457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      EXPECT_EQ(expected_values[i], autofill_values_[i]);
5467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      EXPECT_EQ(expected_labels[i], autofill_labels_[i]);
5477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      EXPECT_EQ(expected_icons[i], autofill_icons_[i]);
5487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      EXPECT_EQ(expected_unique_ids[i], autofill_unique_ids_[i]);
5497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    }
5507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
5517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool on_query_seen() const {
5537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return on_query_seen_;
5547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
5557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool on_suggestions_returned_seen() const {
5577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return on_suggestions_returned_seen_;
5587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
5597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private:
5617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Records if OnQuery has been called yet.
5627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool on_query_seen_;
5637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Records if OnSuggestionsReturned has been called after the most recent
5657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // call to OnQuery.
5667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  bool on_suggestions_returned_seen_;
5677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // The query id of the most recent Autofill query.
5697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  int query_id_;
5707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // The results returned by the most recent Autofill query.
5727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::vector<base::string16> autofill_values_;
5737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::vector<base::string16> autofill_labels_;
5747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::vector<base::string16> autofill_icons_;
5757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  std::vector<int> autofill_unique_ids_;
5767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(TestAutofillExternalDelegate);
5787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch};
5797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
582a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class AutofillManagerTest : public testing::Test {
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
585f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    autofill_client_.SetPrefs(test::PrefServiceForTesting());
586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    personal_data_.set_database(autofill_client_.GetDatabase());
587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    personal_data_.SetPrefService(autofill_client_.GetPrefs());
588a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    autofill_driver_.reset(new MockAutofillDriver());
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    autofill_manager_.reset(new TestAutofillManager(
590f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        autofill_driver_.get(), &autofill_client_, &personal_data_));
5917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
5927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    external_delegate_.reset(new TestAutofillExternalDelegate(
5937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        autofill_manager_.get(),
5947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        autofill_driver_.get()));
5957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    autofill_manager_->SetExternalDelegate(external_delegate_.get());
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Order of destruction is important as AutofillManager relies on
600a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    // PersonalDataManager to be around when it gets destroyed.
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    autofill_manager_.reset();
6027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    autofill_driver_.reset();
603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Remove the AutofillWebDataService so TestPersonalDataManager does not
605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // need to care about removing self as an observer in destruction.
606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    personal_data_.set_database(scoped_refptr<AutofillWebDataService>(NULL));
607a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    personal_data_.SetPrefService(NULL);
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetAutofillSuggestions(int query_id,
6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const FormData& form,
6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const FormFieldData& field) {
6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->OnQueryFormFieldAutofill(query_id,
6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                form,
6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                field,
6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                gfx::Rect(),
6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                false);
6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void GetAutofillSuggestions(const FormData& form,
6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              const FormFieldData& field) {
6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetAutofillSuggestions(kDefaultPageID, form, field);
6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void AutocompleteSuggestionsReturned(
626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::vector<base::string16>& result) {
627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    autofill_manager_->autocomplete_history_manager_->SendSuggestions(&result);
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FormsSeen(const std::vector<FormData>& forms) {
631cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    autofill_manager_->OnFormsSeen(forms, base::TimeTicks());
6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FormSubmitted(const FormData& form) {
635a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    autofill_manager_->ResetRunLoop();
6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (autofill_manager_->OnFormSubmitted(form, base::TimeTicks::Now()))
6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      autofill_manager_->WaitForAsyncFormSubmit();
6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void FillAutofillFormData(int query_id,
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const FormData& form,
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            const FormFieldData& field,
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int unique_id) {
644a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    autofill_manager_->FillOrPreviewForm(
645a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        AutofillDriver::FORM_DATA_ACTION_FILL, query_id, form, field,
646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        unique_id);
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
649eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Calls |autofill_manager_->OnFillAutofillFormData()| with the specified
650eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // input parameters after setting up the expectation that the mock driver's
651eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // |SendFormDataToRenderer()| method will be called and saving the parameters
652eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // of that call into the |response_query_id| and |response_data| output
653eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // parameters.
654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void FillAutofillFormDataAndSaveResults(int input_query_id,
655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                          const FormData& input_form,
656eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                          const FormFieldData& input_field,
657eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                          int unique_id,
658eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                          int* response_query_id,
659eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                          FormData* response_data) {
660a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    EXPECT_CALL(*autofill_driver_, SendFormDataToRenderer(_, _, _)).
661eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        WillOnce((DoAll(testing::SaveArg<0>(response_query_id),
662a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                        testing::SaveArg<2>(response_data))));
663eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FillAutofillFormData(input_query_id, input_form, input_field, unique_id);
664eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
665eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int PackGUIDs(const GUIDPair& cc_guid, const GUIDPair& profile_guid) const {
6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return autofill_manager_->PackGUIDs(cc_guid, profile_guid);
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
671a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::MessageLoop message_loop_;
672f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  TestAutofillClient autofill_client_;
673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<MockAutofillDriver> autofill_driver_;
6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TestAutofillManager> autofill_manager_;
6757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<TestAutofillExternalDelegate> external_delegate_;
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestPersonalDataManager personal_data_;
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestFormStructure : public FormStructure {
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit TestFormStructure(const FormData& form)
68258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      : FormStructure(form) {}
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestFormStructure() {}
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6853240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  void SetFieldTypes(const std::vector<ServerFieldType>& heuristic_types,
6863240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch                     const std::vector<ServerFieldType>& server_types) {
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(field_count(), heuristic_types.size());
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_EQ(field_count(), server_types.size());
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t i = 0; i < field_count(); ++i) {
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AutofillField* form_field = field(i);
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASSERT_TRUE(form_field);
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      form_field->set_heuristic_type(heuristic_types[i]);
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      form_field->set_server_type(server_types[i]);
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    UpdateAutofillCount();
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(TestFormStructure);
7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return all address profile suggestions when all form fields are
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty.
7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsEmptyValue) {
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
709eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
718c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
721c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis"),
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Charles")
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inferred labels include full first relevant field, which in this case is
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the address line 1.
727c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("3734 Elvis Presley Blvd."),
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("123 Apple St.")
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
731c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16(), base::string16()};
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1, 2};
7337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
7347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
7357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return only matching address profile suggestions when the
7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// selected form field has been partially filled out.
7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsMatchCharacter) {
7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
743eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("First Name", "firstname", "E", "text",&field);
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {ASCIIToUTF16("Elvis")};
757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {ASCIIToUTF16("3734 Elvis Presley Blvd.")};
758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16()};
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1};
7607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
7617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
7627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return no suggestions when the form has no relevant fields.
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsUnknownFields) {
7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.name = ASCIIToUTF16("MyForm");
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.origin = GURL("http://myform.com/form.html");
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.action = GURL("http://myform.com/submit.html");
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.user_submitted = true;
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
775c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Username", "username", "", "text",&field);
7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Password", "password", "", "password",&field);
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
779c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Quest", "quest", "", "quest", &field);
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Color", "color", "", "text", &field);
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
7887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we cull duplicate profile suggestions.
7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsWithDuplicates) {
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
795eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a duplicate profile.
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* duplicate_profile =
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new AutofillProfile(
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          *(autofill_manager_->GetProfileWithGUID(
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              "00000000-0000-0000-0000-000000000001")));
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddProfile(duplicate_profile);
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
811c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
814c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis"),
8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Charles")
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
818c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("3734 Elvis Presley Blvd."),
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("123 Apple St.")
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
822c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16(), base::string16()};
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1, 2};
8247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
8257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
8267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return no suggestions when autofill is disabled.
8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsAutofillDisabledByUser) {
8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
833eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Disable Autofill.
8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->set_autofill_enabled(false);
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
8427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return all credit card profile suggestions when all form fields
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are empty.
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsEmptyValue) {
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field = form.fields[1];
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
859c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
862c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("************3456"),
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("************8765")
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
8666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::string16 expected_labels[] = { ASCIIToUTF16("04/12"),
8676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                       ASCIIToUTF16("10/14")};
868c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {
869eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kVisaCard),
870eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kMasterCard)
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {
8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(4),
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(5)
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
8767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
8777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
8787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return only matching credit card profile suggestions when the
8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// selected form field has been partially filled out.
8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsMatchCharacter) {
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
891c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Card Number", "cardnumber", "4", "text", &field);
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
896c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
899c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {ASCIIToUTF16("************3456")};
9006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::string16 expected_labels[] = {ASCIIToUTF16("04/12")};
901eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected_icons[] = {ASCIIToUTF16(kVisaCard)};
9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {autofill_manager_->GetPackedCreditCardID(4)};
9037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
9047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
9057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return credit card profile suggestions when the selected form
9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// field is not the credit card number field.
9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsNonCCNumber) {
9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
922c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
925c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis Presley"),
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Buddy Holly")
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
929c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = { ASCIIToUTF16("*3456"),
930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       ASCIIToUTF16("*8765") };
931c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {
932eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kVisaCard),
933eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kMasterCard)
9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {
9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(4),
9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(5)
9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
9397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
9407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
9417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return a warning explaining that credit card profile suggestions
9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are unavailable when the form is not https.
9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsNonHTTPS) {
9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, false, false);
9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
961c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_INSECURE_CONNECTION)
9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
964c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {base::string16()};
965c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16()};
9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {-1};
9677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
9687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
9697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now add some Autocomplete suggestions. We should show the autocomplete
9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // suggestions and the warning.
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(kPageID2, form, field);
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> suggestions;
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggestions.push_back(ASCIIToUTF16("Jay"));
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggestions.push_back(ASCIIToUTF16("Jason"));
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteSuggestionsReturned(suggestions);
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values2[] = {
9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_INSECURE_CONNECTION),
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Jay"),
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Jason")
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
986c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels2[] = { base::string16(), base::string16(),
987c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                        base::string16() };
988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons2[] = { base::string16(), base::string16(),
989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       base::string16() };
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids2[] = {-1, 0, 0};
9917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
9927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPageID2, arraysize(expected_values2), expected_values2,
9937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels2, expected_icons2, expected_unique_ids2);
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clear the test credit cards and try again -- we shouldn't return a warning.
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.ClearCreditCards();
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
9987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return all credit card suggestions in the case that two cards
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// have the same obfuscated number.
10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsRepeatedObfuscatedNumber) {
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a credit card with the same obfuscated number as Elvis's.
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |credit_card| will be owned by the mock PersonalDataManager.
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreditCard* credit_card = new CreditCard;
1007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::SetCreditCardInfo(credit_card, "Elvis Presley",
1008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          "5231567890123456",  // Mastercard
10096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                          "05", "2012");
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  credit_card->set_guid("00000000-0000-0000-0000-000000000007");
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddCreditCard(credit_card);
10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field = form.fields[1];
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1024c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1027c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("************3456"),
10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("************8765"),
10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("************3456")
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1032c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {
10336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ASCIIToUTF16("04/12"),
10346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ASCIIToUTF16("10/14"),
10356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    ASCIIToUTF16("05/12"),
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1037c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {
1038eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kVisaCard),
1039eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kMasterCard),
1040eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kMasterCard)
10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(4),
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(5),
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(7)
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
10477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
10487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
10497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return profile and credit card suggestions for combined forms.
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetAddressAndCreditCardSuggestions) {
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1056eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field = form.fields[0];
10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1066c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right address suggestions to the external delegate.
1069c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis"),
10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Charles")
10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1073c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("3734 Elvis Presley Blvd."),
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("123 Apple St.")
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1077c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16(), base::string16()};
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1, 2};
10797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
10807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
10817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
1084c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field);
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(kPageID2, form, field);
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1089c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the credit card suggestions to the external delegate.
1092c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values2[] = {
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("************3456"),
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("************8765")
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
10966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  base::string16 expected_labels2[] = { ASCIIToUTF16("04/12"),
10976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                        ASCIIToUTF16("10/14")};
1098c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons2[] = {
1099eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kVisaCard),
1100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16(kMasterCard)
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids2[] = {
11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(4),
11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    autofill_manager_->GetPackedCreditCardID(5)
11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
11067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
11077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPageID2, arraysize(expected_values2), expected_values2,
11087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels2, expected_icons2, expected_unique_ids2);
11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that for non-https forms with both address and credit card fields, we
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only return address suggestions. Instead of credit card suggestions, we
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should return a warning explaining that credit card profile suggestions are
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unavailable when the form is not https.
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetAddressAndCreditCardSuggestionsNonHttps) {
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, false, false);
11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field = form.fields[0];
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right suggestions to the external delegate.
1131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis"),
11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Charles")
11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("3734 Elvis Presley Blvd."),
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("123 Apple St.")
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16(), base::string16()};
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1, 2};
11417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
11427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
11437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field);
11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(kPageID2, form, field);
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values2[] = {
11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_INSECURE_CONNECTION)
11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels2[] = {base::string16()};
1158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons2[] = {base::string16()};
11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids2[] = {-1};
11607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
11617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kPageID2, arraysize(expected_values2), expected_values2,
11627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels2, expected_icons2, expected_unique_ids2);
11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clear the test credit cards and try again -- we shouldn't return a warning.
11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.ClearCreditCards();
11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
11677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen());
11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly combine autofill and autocomplete suggestions.
11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCombinedAutofillAndAutocompleteSuggestions) {
11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add some Autocomplete suggestions.
11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> suggestions;
11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggestions.push_back(ASCIIToUTF16("Jay"));
11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This suggestion is a duplicate, and should be trimmed.
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggestions.push_back(ASCIIToUTF16("Elvis"));
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggestions.push_back(ASCIIToUTF16("Jason"));
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteSuggestionsReturned(suggestions);
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis"),
11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Charles"),
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Jay"),
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Jason")
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {
11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("3734 Elvis Presley Blvd."),
11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("123 Apple St."),
1200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16(),
1201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16()
12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = { base::string16(), base::string16(),
1204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      base::string16(), base::string16()};
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1, 2, 0, 0};
12067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
12077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
12087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return autocomplete-like suggestions when trying to autofill
12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// already filled forms.
12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsWhenFormIsAutofilled) {
12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Mark one of the fields as filled.
12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields[2].is_autofilled = true;
12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
12265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis"),
12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Charles")
12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {base::string16(), base::string16()};
1235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16(), base::string16()};
12365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1, 2};
12377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
12387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
12397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that nothing breaks when there are autocomplete suggestions but no
12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// autofill suggestions.
12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsForAutocompleteOnly) {
12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
1249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Some Field", "somefield", "", "text", &field);
12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add some Autocomplete suggestions.
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> suggestions;
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggestions.push_back(ASCIIToUTF16("one"));
12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  suggestions.push_back(ASCIIToUTF16("two"));
12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutocompleteSuggestionsReturned(suggestions);
12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("one"),
12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("two")
12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {base::string16(), base::string16()};
1269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = {base::string16(), base::string16()};
12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {0, 0};
12717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
12727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
12737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we do not return duplicate values drawn from multiple profiles when
12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// filling an already filled field.
12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsWithDuplicateValues) {
12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |profile| will be owned by the mock PersonalDataManager.
12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* profile = new AutofillProfile;
1287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::SetProfileInfo(
1288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      profile, "Elvis", "", "", "", "", "", "", "", "", "", "", "");
12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile->set_guid("00000000-0000-0000-0000-000000000101");
12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddProfile(profile);
12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData& field = form.fields[0];
12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.is_autofilled = true;
12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.value = ASCIIToUTF16("Elvis");
12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = { ASCIIToUTF16("Elvis") };
1303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = { base::string16() };
1304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = { base::string16() };
13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = { 1 };
13067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
13077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
13087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that a non-default value is suggested for multi-valued profile, on an
13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unfilled form.
13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsForMultiValuedProfileUnfilled) {
13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |profile| will be owned by the mock PersonalDataManager.
13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* profile = new AutofillProfile;
1322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::SetProfileInfo(profile, "Elvis", "", "Presley", "me@x.com", "",
1323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       "", "", "", "", "", "", "");
13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile->set_guid("00000000-0000-0000-0000-000000000101");
1325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> multi_values(2);
1326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[0] = ASCIIToUTF16("Elvis");
1327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[1] = ASCIIToUTF16("Elena");
1328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawMultiInfo(NAME_FIRST, multi_values);
1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[0] = ASCIIToUTF16("Presley");
1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[1] = ASCIIToUTF16("Love");
1331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawMultiInfo(NAME_LAST, multi_values);
13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.ClearAutofillProfiles();
13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddProfile(profile);
13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Get the first name field.
13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Start out with "E", hoping for either "Elvis" or "Elena.
13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FormFieldData& field = form.fields[0];
13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.value = ASCIIToUTF16("E");
13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.is_autofilled = false;
13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetAutofillSuggestions(form, field);
13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Trigger the |Send|.
1344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    AutocompleteSuggestionsReturned(std::vector<base::string16>());
13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    // Test that we sent the right values to the external delegate.
1347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16 expected_values[] = {
13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("Elvis"),
13495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("Elena")
13505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16 expected_labels[] = {
13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("me@x.com"),
13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ASCIIToUTF16("me@x.com")
13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
1355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16 expected_icons[] = { base::string16(), base::string16() };
13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int expected_unique_ids[] = { 1, 2 };
13577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    external_delegate_->CheckSuggestions(
13587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        kDefaultPageID, arraysize(expected_values), expected_values,
13597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        expected_labels, expected_icons, expected_unique_ids);
13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Get the first name field.
13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // This time, start out with "Ele", hoping for "Elena".
13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FormFieldData& field = form.fields[0];
13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.value = ASCIIToUTF16("Ele");
13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.is_autofilled = false;
13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GetAutofillSuggestions(form, field);
13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Trigger the |Send|.
1371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    AutocompleteSuggestionsReturned(std::vector<base::string16>());
13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    // Test that we sent the right values to the external delegate.
1374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16 expected_values[] = { ASCIIToUTF16("Elena") };
1375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16 expected_labels[] = { ASCIIToUTF16("me@x.com") };
1376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::string16 expected_icons[] = { base::string16() };
13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int expected_unique_ids[] = { 2 };
13787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    external_delegate_->CheckSuggestions(
13797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        kDefaultPageID, arraysize(expected_values), expected_values,
13807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        expected_labels, expected_icons, expected_unique_ids);
13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that all values are suggested for multi-valued profile, on a filled
13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// form.  This is the per-field "override" case.
13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsForMultiValuedProfileFilled) {
13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
13885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |profile| will be owned by the mock PersonalDataManager.
13945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* profile = new AutofillProfile;
13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile->set_guid("00000000-0000-0000-0000-000000000102");
1396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> multi_values(3);
1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[0] = ASCIIToUTF16("Travis");
1398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[1] = ASCIIToUTF16("Cynthia");
1399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[2] = ASCIIToUTF16("Zac");
1400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawMultiInfo(NAME_FIRST, multi_values);
1401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[0] = ASCIIToUTF16("Smith");
1402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[1] = ASCIIToUTF16("Love");
1403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  multi_values[2] = ASCIIToUTF16("Mango");
1404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawMultiInfo(NAME_LAST, multi_values);
14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddProfile(profile);
14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get the first name field.  And start out with "Travis", hoping for all the
14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // multi-valued variants as suggestions.
14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData& field = form.fields[0];
14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.value = ASCIIToUTF16("Travis");
14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.is_autofilled = true;
14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Trigger the |Send|.
1415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Travis"),
14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Cynthia"),
14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Zac")
14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = { base::string16(), base::string16(),
1424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                       base::string16() };
1425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = { base::string16(), base::string16(),
1426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      base::string16() };
14275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = { 1, 2, 3 };
14287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
14297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
14307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsFancyPhone) {
14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
14375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* profile = new AutofillProfile;
14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile->set_guid("00000000-0000-0000-0000-000000000103");
1442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetInfo(AutofillType(NAME_FULL), ASCIIToUTF16("Natty Bumppo"),
1443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                   "en-US");
1444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawInfo(PHONE_HOME_WHOLE_NUMBER,
1445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                      ASCIIToUTF16("1800PRAIRIE"));
14465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddProfile(profile);
14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[9];
14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);
14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No suggestions provided, so send an empty vector as the results.
14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This triggers the combined message send.
1453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AutocompleteSuggestionsReturned(std::vector<base::string16>());
14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Test that we sent the right values to the external delegate.
1456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_values[] = {
14575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("12345678901"),
14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("23456789012"),
14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("18007724743"),  // 1800PRAIRIE
14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inferred labels include full first relevant field, which in this case is
14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the address line 1.
1463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_labels[] = {
14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Elvis Aaron Presley"),
14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Charles Hardin Holley"),
14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASCIIToUTF16("Natty Bumppo"),
14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::string16 expected_icons[] = { base::string16(), base::string16(),
1469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                      base::string16()};
14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int expected_unique_ids[] = {1, 2, 3};
14717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
14727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
14737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
14761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(AutofillManagerTest, GetProfileSuggestionsForPhonePrefixOrSuffix) {
14771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Set up our form data.
14781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FormData form;
14791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  form.name = ASCIIToUTF16("MyForm");
14801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  form.origin = GURL("http://myform.com/form.html");
14811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  form.action = GURL("http://myform.com/submit.html");
14821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  form.user_submitted = true;
14831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
14841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  struct {
14851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const char* const label;
14861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const char* const name;
14871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    size_t max_length;
14881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    const char* const autocomplete_attribute;
14891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  } test_fields[] = {{"country code", "country_code", 1, "tel-country-code"},
14901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     {"area code", "area_code", 3, "tel-area-code"},
14911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     {"phone", "phone_prefix", 3, "tel-local-prefix"},
14921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     {"-", "phone_suffix", 4, "tel-local-suffix"},
14931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     {"Phone Extension", "ext", 5, "tel-extension"}};
14941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
14951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FormFieldData field;
14961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_fields); ++i) {
14971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    test::CreateTestFormField(
14981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        test_fields[i].label, test_fields[i].name, "", "text", &field);
14991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    field.max_length = test_fields[i].max_length;
15001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    field.autocomplete_attribute = std::string();
15011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    form.fields.push_back(field);
15021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
15031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
15041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<FormData> forms(1, form);
15051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FormsSeen(forms);
15061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
15071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AutofillProfile* profile = new AutofillProfile;
15081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  profile->set_guid("00000000-0000-0000-0000-000000000104");
15091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<base::string16> multi_values(2);
15101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  multi_values[0] = ASCIIToUTF16("1800FLOWERS");
15111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  multi_values[1] = ASCIIToUTF16("14158889999");
15121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
15131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  profile->SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, multi_values);
15141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  personal_data_.ClearAutofillProfiles();
15151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  autofill_manager_->AddProfile(profile);
15161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
15171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const FormFieldData& phone_prefix = form.fields[2];
15181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetAutofillSuggestions(form, phone_prefix);
15191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AutocompleteSuggestionsReturned(std::vector<base::string16>());
15201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Test that we sent the right prefix values to the external delegate.
15211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 expected_prefix_values[] = {ASCIIToUTF16("356"),
15221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                             ASCIIToUTF16("888")};
15231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 expected_prefix_labels[] = {ASCIIToUTF16("1"),
15241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                             ASCIIToUTF16("1")};
15251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 expected_prefix_icons[] = {base::string16(), base::string16()};
15261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  int expected_unique_ids[] = {1, 2};
15271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  external_delegate_->CheckSuggestions(kDefaultPageID,
15281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       arraysize(expected_prefix_values),
15291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_prefix_values,
15301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_prefix_labels,
15311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_prefix_icons,
15321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_unique_ids);
15331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
15341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const FormFieldData& phone_suffix = form.fields[3];
15351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  GetAutofillSuggestions(form, phone_suffix);
15361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AutocompleteSuggestionsReturned(std::vector<base::string16>());
15371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Test that we sent the right suffix values to the external delegate.
15381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 expected_suffix_values[] = {ASCIIToUTF16("9377"),
15391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                             ASCIIToUTF16("9999")};
15401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 expected_suffix_labels[] = {ASCIIToUTF16("1"),
15411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                             ASCIIToUTF16("1")};
15421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 expected_suffix_icons[] = {base::string16(), base::string16()};
15431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  external_delegate_->CheckSuggestions(kDefaultPageID,
15441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       arraysize(expected_suffix_values),
15451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_suffix_values,
15461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_suffix_labels,
15471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_suffix_icons,
15481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                       expected_unique_ids);
15491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
15501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill an address form.
15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressForm) {
15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
15585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
15605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1561eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1563eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
1564eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
1565eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledAddressFormElvis(
1566eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
15692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that we correctly fill an address form from an auxiliary profile.
15702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressFormFromAuxiliaryProfile) {
15712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  personal_data_.ClearAutofillProfiles();
157246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_MACOSX) && !defined(OS_IOS)
1573f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  autofill_client_.GetPrefs()->SetBoolean(
157446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      ::autofill::prefs::kAutofillUseMacAddressBook, true);
157546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
1576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  autofill_client_.GetPrefs()->SetBoolean(
1577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      ::autofill::prefs::kAutofillAuxiliaryProfilesEnabled, true);
157846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif  // defined(OS_MACOSX) && !defined(OS_IOS)
157946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
15802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  personal_data_.CreateTestAuxiliaryProfiles();
15812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set up our form data.
15832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FormData form;
1584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<FormData> forms(1, form);
15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FormsSeen(forms);
15872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
15892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GUIDPair empty(std::string(), 0);
1590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
1593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
1594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledAddressFormElvis(
1595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
15962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
15972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form.
15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardForm) {
16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000004", 0);
16075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1610eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(),
1611eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid, empty), &response_page_id, &response_data);
1612eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledCreditCardFormElvis(
1613eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type.
16175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1. year empty, month empty
16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormNoYearNoMonth) {
16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Same as the SetUp(), but generate 4 credit cards with year month
16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // combination.
16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.CreateTestCreditCardsYearAndMonth("", "");
16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, true);
16255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
16275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000007", 0);
16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1632eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(),
1633eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid, empty), &response_page_id, &response_data);
1634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data,
16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kDefaultPageID, false, "", "");
16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type.
16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2. year empty, month non-empty
16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormNoYearMonth) {
16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Same as the SetUp(), but generate 4 credit cards with year month
16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // combination.
16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.CreateTestCreditCardsYearAndMonth("", "04");
16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, true);
16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000007", 0);
16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1653eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(),
1656eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid, empty), &response_page_id, &response_data);
1657eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data,
16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kDefaultPageID, false, "", "04");
16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type.
16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3. year non-empty, month empty
16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormYearNoMonth) {
16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Same as the SetUp(), but generate 4 credit cards with year month
16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // combination.
16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.CreateTestCreditCardsYearAndMonth("2012", "");
16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, true);
16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
16715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
16725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000007", 0);
16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1675eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1677eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(),
1678eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid, empty), &response_page_id, &response_data);
1679eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data,
16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kDefaultPageID, false, "2012", "");
16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type.
16845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4. year non-empty, month empty
16855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormYearMonth) {
16865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Same as the SetUp(), but generate 4 credit cards with year month
16875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // combination.
16885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.ClearCreditCards();
16895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  personal_data_.CreateTestCreditCardsYearAndMonth("2012", "04");
16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, true);
16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
16955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000007", 0);
16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1698eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1699eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1700eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(),
1701eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid, empty), &response_page_id, &response_data);
1702eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data,
17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kDefaultPageID, false, "2012", "04");
17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a combined address and credit card form.
17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressAndCreditCardForm) {
17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1710eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
17115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
17125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
17145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First fill the address data.
17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1718eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1719eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Address");
1722eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
1723eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        PackGUIDs(empty, guid), &response_page_id, &response_data);
1724eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledAddressFormElvis(
1725eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        response_page_id, response_data, kDefaultPageID, true);
17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now fill the credit card data.
17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid2("00000000-0000-0000-0000-000000000004", 0);
1731eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
1733eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields.back(),
1734eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        PackGUIDs(guid2, empty), &response_page_id, &response_data);
17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Credit card");
1736eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledCreditCardFormElvis(
1737eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        response_page_id, response_data, kPageID2, true);
17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a form that has multiple logical sections, e.g.
17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// both a billing and a shipping address.
17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillFormWithMultipleSections) {
17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1746eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t kAddressFormSize = form.fields.size();
1748eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = kAddressFormSize; i < form.fields.size(); ++i) {
17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Make sure the fields have distinct names.
17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form.fields[i].name = form.fields[i].name + ASCIIToUTF16("_");
17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
17555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the first section.
17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1759eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1760eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1761eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
1762eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Address 1");
17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The second address section should be empty.
1766eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASSERT_EQ(response_data.fields.size(), 2*kAddressFormSize);
17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t i = kAddressFormSize; i < form.fields.size(); ++i) {
1768eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      EXPECT_EQ(base::string16(), response_data.fields[i].value);
17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The first address section should be filled with Elvis's data.
1772eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    response_data.fields.resize(kAddressFormSize);
1773eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledAddressFormElvis(
1774eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        response_page_id, response_data, kDefaultPageID, false);
17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the second section, with the initiating field somewhere in the middle
17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // of the section.
17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid2("00000000-0000-0000-0000-000000000001", 0);
17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_LT(9U, kAddressFormSize);
1782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
1783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(
1784eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      kPageID2, form, form.fields[kAddressFormSize + 9],
1785eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid2), &response_page_id, &response_data);
17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Address 2");
1788eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASSERT_EQ(response_data.fields.size(), form.fields.size());
17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The first address section should be empty.
1791eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASSERT_EQ(response_data.fields.size(), 2*kAddressFormSize);
17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t i = 0; i < kAddressFormSize; ++i) {
1793eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      EXPECT_EQ(base::string16(), response_data.fields[i].value);
17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The second address section should be filled with Elvis's data.
1797eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FormData secondSection = response_data;
17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    secondSection.fields.erase(secondSection.fields.begin(),
17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               secondSection.fields.begin() + kAddressFormSize);
18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    for (size_t i = 0; i < kAddressFormSize; ++i) {
18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // Restore the expected field names.
1802c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::string16 name = secondSection.fields[i].name;
1803c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::string16 original_name = name.substr(0, name.size() - 1);
18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      secondSection.fields[i].name = original_name;
18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1806eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledAddressFormElvis(
1807eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        response_page_id, secondSection, kPageID2, false);
18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a form that has author-specified sections, which
18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// might not match our expected section breakdown.
18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillFormWithAuthorSpecifiedSections) {
18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create a form with a billing section and an unnamed section, interleaved.
18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The billing section includes both address and credit card fields.
18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.name = ASCIIToUTF16("MyForm");
18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.origin = GURL("https://myform.com/form.html");
18195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.action = GURL("https://myform.com/submit.html");
18205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.user_submitted = true;
18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
18235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "country", "", "text", &field);
18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "section-billing country";
18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "firstname", "", "text", &field);
18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "given-name";
18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1832c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "lastname", "", "text", &field);
18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "family-name";
18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1836c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "address", "", "text", &field);
1837a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  field.autocomplete_attribute = "section-billing address-line1";
18385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1840c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "city", "", "text", &field);
18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "section-billing locality";
18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1844c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "state", "", "text", &field);
18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "section-billing region";
18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1848c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "zip", "", "text", &field);
18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "section-billing postal-code";
18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1852c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "ccname", "", "text", &field);
18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "section-billing cc-name";
18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1856c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "ccnumber", "", "text", &field);
18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "section-billing cc-number";
18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1860c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "ccexp", "", "text", &field);
18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "section-billing cc-exp";
18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1864c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "email", "", "text", &field);
18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.autocomplete_attribute = "email";
18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the unnamed section.
18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1874eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1875eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1876eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[1],
1877eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Unnamed section");
1880eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(kDefaultPageID, response_page_id);
1881eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(ASCIIToUTF16("MyForm"), response_data.name);
1882eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(GURL("https://myform.com/form.html"), response_data.origin);
1883eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(GURL("https://myform.com/submit.html"), response_data.action);
1884eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_TRUE(response_data.user_submitted);
1885eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASSERT_EQ(11U, response_data.fields.size());
1886eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1887eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "country", "", "text", response_data.fields[0]);
1888eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "firstname", "Elvis", "text",
1889eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[1]);
1890eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "lastname", "Presley", "text",
1891eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[2]);
1892eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "address", "", "text", response_data.fields[3]);
1893eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "city", "", "text", response_data.fields[4]);
1894eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "state", "", "text", response_data.fields[5]);
1895eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "zip", "", "text", response_data.fields[6]);
1896eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccname", "", "text", response_data.fields[7]);
1897eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccnumber", "", "text", response_data.fields[8]);
1898eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccexp", "", "text", response_data.fields[9]);
18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("", "email", "theking@gmail.com", "text",
1900eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[10]);
19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the address portion of the billing section.
19045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid2("00000000-0000-0000-0000-000000000001", 0);
1906eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
1907eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields[0],
1908eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid2), &response_page_id, &response_data);
19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Billing address");
1911eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(kPageID2, response_page_id);
1912eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(ASCIIToUTF16("MyForm"), response_data.name);
1913eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(GURL("https://myform.com/form.html"), response_data.origin);
1914eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(GURL("https://myform.com/submit.html"), response_data.action);
1915eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_TRUE(response_data.user_submitted);
1916eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASSERT_EQ(11U, response_data.fields.size());
19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1918ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch    ExpectFilledField("", "country", "US", "text",
1919eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[0]);
1920eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "firstname", "", "text", response_data.fields[1]);
1921eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "lastname", "", "text", response_data.fields[2]);
19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("", "address", "3734 Elvis Presley Blvd.", "text",
1923eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[3]);
1924eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "city", "Memphis", "text", response_data.fields[4]);
1925eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "state", "Tennessee", "text",
1926eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[5]);
1927eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "zip", "38116", "text", response_data.fields[6]);
1928eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccname", "", "text", response_data.fields[7]);
1929eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccnumber", "", "text", response_data.fields[8]);
1930eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccexp", "", "text", response_data.fields[9]);
1931eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "email", "", "text", response_data.fields[10]);
19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the credit card portion of the billing section.
19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID3 = 3;
19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid3("00000000-0000-0000-0000-000000000004", 0);
1937eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
1938eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(
1939eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      kPageID3, form, form.fields[form.fields.size() - 2],
1940eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid3, empty), &response_page_id, &response_data);
19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Credit card");
1943eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(kPageID3, response_page_id);
1944eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(ASCIIToUTF16("MyForm"), response_data.name);
1945eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(GURL("https://myform.com/form.html"), response_data.origin);
1946eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_EQ(GURL("https://myform.com/submit.html"), response_data.action);
1947eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    EXPECT_TRUE(response_data.user_submitted);
1948eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASSERT_EQ(11U, response_data.fields.size());
1949eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1950eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "country", "", "text", response_data.fields[0]);
1951eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "firstname", "", "text", response_data.fields[1]);
1952eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "lastname", "", "text", response_data.fields[2]);
1953eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "address", "", "text", response_data.fields[3]);
1954eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "city", "", "text", response_data.fields[4]);
1955eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "state", "", "text", response_data.fields[5]);
1956eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "zip", "", "text", response_data.fields[6]);
1957eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccname", "Elvis Presley", "text",
1958eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[7]);
19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExpectFilledField("", "ccnumber", "4234567890123456", "text",
1960eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                      response_data.fields[8]);
1961eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "ccexp", "04/2012", "text", response_data.fields[9]);
1962eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledField("", "email", "", "text", response_data.fields[10]);
19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a form that has a single logical section with
19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// multiple email address fields.
19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillFormWithMultipleEmails) {
19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
1971eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
1973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Confirm email", "email2", "", "text", &field);
19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the form.
19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
1982eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
1983eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
1984eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
1985eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The second email address should be filled.
1988eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("theking@gmail.com"),
1989eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch            response_data.fields.back().value);
19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The remainder of the form should be filled as usual.
1992eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_data.fields.pop_back();
1993eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledAddressFormElvis(
1994eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a previously auto-filled form.
19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAutofilledForm) {
19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2001eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Mark one of the address fields as autofilled.
20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields[4].is_autofilled = true;
20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreateTestCreditCardFormData(&form, true, false);
20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // First fill the address data.
20095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
20105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
2011eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2012eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
2013eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(),
2014eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
20155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
20165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Address");
2017eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledForm(response_page_id, response_data, kDefaultPageID,
20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "Elvis", "", "", "", "", "", "", "", "", "", "", "", "",
20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "", "", true, true, false);
20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now fill the credit card data.
20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid2("00000000-0000-0000-0000-000000000004", 0);
2025eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
2026eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields.back(),
2027eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid2, empty), &response_page_id, &response_data);
20285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
20295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Credit card 1");
2030eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledCreditCardFormElvis(
2031eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        response_page_id, response_data, kPageID2, true);
20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now set the credit card fields to also be auto-filled, and try again to
20355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // fill the credit card data
20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (std::vector<FormFieldData>::iterator iter = form.fields.begin();
20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       iter != form.fields.end();
20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       ++iter) {
20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    iter->is_autofilled = true;
20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID3 = 3;
2043eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
2044eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kPageID3, form, *form.fields.rbegin(),
2045eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(guid2, empty), &response_page_id, &response_data);
20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Credit card 2");
2048eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledForm(response_page_id, response_data, kPageID3,
20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "", "", "", "", "", "", "", "", "", "", "", "", "", "",
20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "2012", true, true, false);
20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill an address form with a non-default variant for a
20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// multi-valued field.
20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressFormWithVariantType) {
20575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
20585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2059eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a name variant to the Elvis profile.
20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* profile = autofill_manager_->GetProfileWithGUID(
20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "00000000-0000-0000-0000-000000000001");
20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2067c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> name_variants;
2068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.push_back(ASCIIToUTF16("Some"));
2069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.push_back(profile->GetRawInfo(NAME_FIRST));
2070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawMultiInfo(NAME_FIRST, name_variants);
2071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.clear();
2073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.push_back(ASCIIToUTF16("Other"));
2074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.push_back(profile->GetRawInfo(NAME_MIDDLE));
2075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawMultiInfo(NAME_MIDDLE, name_variants);
2076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
2077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.clear();
2078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.push_back(ASCIIToUTF16("Guy"));
2079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  name_variants.push_back(profile->GetRawInfo(NAME_LAST));
2080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  profile->SetRawMultiInfo(NAME_LAST, name_variants);
20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid(profile->guid(), 1);
20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
2084eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2085eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data1;
2086eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
2087eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data1);
20885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Valid variant");
2090eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledAddressFormElvis(
2091eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        response_page_id, response_data1, kDefaultPageID, false);
20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try filling with a variant that doesn't exist.  The fields to which this
20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // variant would normally apply should not be filled.
20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPageID2 = 2;
20975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid2(profile->guid(), 2);
2098eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
2099eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data2;
2100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields[0],
2101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid2), &response_page_id, &response_data2);
21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SCOPED_TRACE("Invalid variant");
2104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExpectFilledForm(response_page_id, response_data2, kPageID2, "", "", "",
21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "3734 Elvis Presley Blvd.", "Apt. 10", "Memphis",
21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "Tennessee", "38116", "United States", "12345678901",
21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     "theking@gmail.com", "", "", "", "", true, false, false);
21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a phone number split across multiple fields.
21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillPhoneNumber) {
21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In one form, rely on the maxlength attribute to imply phone number parts.
21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // In the other form, rely on the autocompletetype attribute.
21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form_with_maxlength;
21165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form_with_maxlength.name = ASCIIToUTF16("MyMaxlengthPhoneForm");
21175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form_with_maxlength.origin = GURL("http://myform.com/phone_form.html");
21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form_with_maxlength.action = GURL("http://myform.com/phone_submit.html");
21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form_with_maxlength.user_submitted = true;
21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form_with_autocompletetype = form_with_maxlength;
21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form_with_autocompletetype.name = ASCIIToUTF16("MyAutocompletetypePhoneForm");
21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct {
21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* label;
21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* name;
21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    size_t max_length;
21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* autocomplete_attribute;
21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } test_fields[] = {
21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "country code", "country_code", 1, "tel-country-code" },
21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "area code", "area_code", 3, "tel-area-code" },
21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "phone", "phone_prefix", 3, "tel-local-prefix" },
21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "-", "phone_suffix", 4, "tel-local-suffix" },
21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { "Phone Extension", "ext", 3, "tel-extension" }
21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const size_t default_max_length = field.max_length;
21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_fields); ++i) {
2139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test::CreateTestFormField(
21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        test_fields[i].label, test_fields[i].name, "", "text", &field);
21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.max_length = test_fields[i].max_length;
21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.autocomplete_attribute = std::string();
21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form_with_maxlength.fields.push_back(field);
21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.max_length = default_max_length;
21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    field.autocomplete_attribute = test_fields[i].autocomplete_attribute;
21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    form_with_autocompletetype.fields.push_back(field);
21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms;
21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  forms.push_back(form_with_maxlength);
21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  forms.push_back(form_with_autocompletetype);
21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We should be able to fill prefix and suffix fields for US numbers.
21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* work_profile = autofill_manager_->GetProfileWithGUID(
21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "00000000-0000-0000-0000-000000000002");
21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(work_profile != NULL);
21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  work_profile->SetRawInfo(PHONE_HOME_WHOLE_NUMBER,
21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           ASCIIToUTF16("16505554567"));
21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid(work_profile->guid(), 0);
21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int page_id = 1;
2165eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data1;
2167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(page_id, form_with_maxlength,
2168eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      *form_with_maxlength.fields.begin(),
2169eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data1);
2170eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(1, response_page_id);
2171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(5U, response_data1.fields.size());
2173eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("1"), response_data1.fields[0].value);
2174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("650"), response_data1.fields[1].value);
2175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("555"), response_data1.fields[2].value);
2176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("4567"), response_data1.fields[3].value);
2177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(base::string16(), response_data1.fields[4].value);
21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_id = 2;
2180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
2181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data2;
2182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(page_id, form_with_autocompletetype,
2183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      *form_with_autocompletetype.fields.begin(),
2184eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data2);
2185eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(2, response_page_id);
2186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(5U, response_data2.fields.size());
2188eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("1"), response_data2.fields[0].value);
2189eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("650"), response_data2.fields[1].value);
2190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("555"), response_data2.fields[2].value);
2191eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("4567"), response_data2.fields[3].value);
2192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(base::string16(), response_data2.fields[4].value);
21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We should not be able to fill prefix and suffix fields for international
21955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // numbers.
21962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  work_profile->SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("GB"));
21975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  work_profile->SetRawInfo(PHONE_HOME_WHOLE_NUMBER,
21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           ASCIIToUTF16("447700954321"));
21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_id = 3;
2200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
2201eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data3;
2202eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(page_id, form_with_maxlength,
2203eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      *form_with_maxlength.fields.begin(),
2204eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data3);
2205eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(3, response_page_id);
2206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2207eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(5U, response_data3.fields.size());
2208eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("44"), response_data3.fields[0].value);
2209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("7700"), response_data3.fields[1].value);
2210eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("954321"), response_data3.fields[2].value);
2211eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("954321"), response_data3.fields[3].value);
2212eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(base::string16(), response_data3.fields[4].value);
22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_id = 4;
2215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
2216eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data4;
2217eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(page_id, form_with_autocompletetype,
2218eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      *form_with_autocompletetype.fields.begin(),
2219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data4);
2220eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(4, response_page_id);
2221eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2222eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(5U, response_data4.fields.size());
2223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("44"), response_data4.fields[0].value);
2224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("7700"), response_data4.fields[1].value);
2225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("954321"), response_data4.fields[2].value);
2226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("954321"), response_data4.fields[3].value);
2227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(base::string16(), response_data4.fields[4].value);
22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // We should fill all phone fields with the same phone number variant.
2230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  std::vector<base::string16> phone_variants;
22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  phone_variants.push_back(ASCIIToUTF16("16505554567"));
22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  phone_variants.push_back(ASCIIToUTF16("18887771234"));
22332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  work_profile->SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US"));
22342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  work_profile->SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, phone_variants);
22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  page_id = 5;
2237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_page_id = 0;
2238eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data5;
22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair variant_guid(work_profile->guid(), 1);
2240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(page_id, form_with_maxlength,
2241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      *form_with_maxlength.fields.begin(),
2242eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, variant_guid), &response_page_id, &response_data5);
2243eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(5, response_page_id);
2244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2245eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_EQ(5U, response_data5.fields.size());
2246eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("1"), response_data5.fields[0].value);
2247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("888"), response_data5.fields[1].value);
2248eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("777"), response_data5.fields[2].value);
2249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(ASCIIToUTF16("1234"), response_data5.fields[3].value);
2250eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_EQ(base::string16(), response_data5.fields[4].value);
22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can still fill a form when a field has been removed from it.
22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormChangesRemoveField) {
22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a field -- we'll remove it again later.
22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
2261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("Some", "field", "", "text", &field);
22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.insert(form.fields.begin() + 3, field);
22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now, after the call to |FormsSeen|, we remove the field before filling.
22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.erase(form.fields.begin() + 3);
22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
22715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
2272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
2274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
2275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
2276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledAddressFormElvis(
2277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
22785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
22795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can still fill a form when a field has been added to it.
22815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormChangesAddField) {
22825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The offset of the phone field in the address form.
22835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const int kPhoneFieldOffset = 9;
22845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
22865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
22885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove the phone field -- we'll add it back later.
22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormFieldData>::iterator pos =
22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      form.fields.begin() + kPhoneFieldOffset;
22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field = *pos;
22935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pos = form.fields.erase(pos);
22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
22975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Now, after the call to |FormsSeen|, we restore the field before filling.
22995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.insert(pos, field);
23005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
23025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
2303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
2305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
2306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
2307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledAddressFormElvis(
2308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
23095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we are able to save form data when forms are submitted.
23125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmitted) {
23135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
23145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
23165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
23175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
23185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the form.
23205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
23215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
2322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
2324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
2325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
2326eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledAddressFormElvis(
2327eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate form submission. We should call into the PDM to try to save the
23305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // filled data.
23315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(1);
2332eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormSubmitted(response_data);
2333eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
2334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test that when Autocomplete is enabled and Autofill is disabled,
2336eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// form submissions are still received by AutocompleteHistoryManager.
2337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(AutofillManagerTest, FormSubmittedAutocompleteEnabled) {
2338f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  TestAutofillClient client;
2339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  autofill_manager_.reset(
2340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      new TestAutofillManager(autofill_driver_.get(), &client, NULL));
2341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  autofill_manager_->set_autofill_enabled(false);
2342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<MockAutocompleteHistoryManager> autocomplete_history_manager;
2343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  autocomplete_history_manager.reset(
2344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      new MockAutocompleteHistoryManager(autofill_driver_.get(), &client));
2345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  autofill_manager_->autocomplete_history_manager_ =
2346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      autocomplete_history_manager.Pass();
2347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Set up our form data.
2349eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData form;
2350eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
2351eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  MockAutocompleteHistoryManager* m = static_cast<
2352eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      MockAutocompleteHistoryManager*>(
2353eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          autofill_manager_->autocomplete_history_manager_.get());
2354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_CALL(*m,
2355eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch              OnFormSubmitted(_)).Times(1);
2356eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormSubmitted(form);
2357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
2358eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2359eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test that when Autocomplete is enabled and Autofill is disabled,
2360eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Autocomplete suggestions are still received.
2361eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(AutofillManagerTest, AutocompleteSuggestionsWhenAutofillDisabled) {
2362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  TestAutofillClient client;
2363f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  autofill_manager_.reset(
2364f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      new TestAutofillManager(autofill_driver_.get(), &client, NULL));
2365eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  autofill_manager_->set_autofill_enabled(false);
23667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  autofill_manager_->SetExternalDelegate(external_delegate_.get());
2367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2368eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Set up our form data.
2369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData form;
2370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
2371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::vector<FormData> forms(1, form);
2372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormsSeen(forms);
2373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const FormFieldData& field = form.fields[0];
2374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GetAutofillSuggestions(form, field);
2375eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Add some Autocomplete suggestions. We should return the autocomplete
2377eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // suggestions, these will be culled by the renderer.
2378eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::vector<base::string16> suggestions;
2379eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  suggestions.push_back(ASCIIToUTF16("Jay"));
2380eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  suggestions.push_back(ASCIIToUTF16("Jason"));
2381eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AutocompleteSuggestionsReturned(suggestions);
2382eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2383eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected_values[] = {
2384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16("Jay"),
2385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ASCIIToUTF16("Jason")
2386eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  };
2387eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected_labels[] = { base::string16(), base::string16()};
2388eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::string16 expected_icons[] = { base::string16(), base::string16()};
2389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int expected_unique_ids[] = {0, 0};
23907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  external_delegate_->CheckSuggestions(
23917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      kDefaultPageID, arraysize(expected_values), expected_values,
23927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      expected_labels, expected_icons, expected_unique_ids);
23935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
23945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we are able to save form data when forms are submitted and we only
23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// have server data for the field types.
23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmittedServerTypes) {
23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
24015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate having seen this form on page load.
24035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |form_structure| will be owned by |autofill_manager_|.
24045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestFormStructure* form_structure = new TestFormStructure(form);
24055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillMetrics metrics_logger;  // ignored
24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form_structure->DetermineHeuristicTypes(metrics_logger);
24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clear the heuristic types, and instead set the appropriate server types.
24093240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  std::vector<ServerFieldType> heuristic_types, server_types;
24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (size_t i = 0; i < form.fields.size(); ++i) {
24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    heuristic_types.push_back(UNKNOWN_TYPE);
2412bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch    server_types.push_back(form_structure->field(i)->heuristic_type());
24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form_structure->SetFieldTypes(heuristic_types, server_types);
24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddSeenForm(form_structure);
24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the form.
24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
24195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
2420eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
2422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0],
2423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
2424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ExpectFilledAddressFormElvis(
2425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      response_page_id, response_data, kDefaultPageID, false);
24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate form submission. We should call into the PDM to try to save the
24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // filled data.
24295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(1);
2430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormSubmitted(response_data);
24315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the form signature for an uploaded form always matches the form
24345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// signature from the query.
24355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmittedWithDifferentFields) {
24365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
24375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2438eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
24395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
24405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
24415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Cache the expected form signature.
244358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string signature = FormStructure(form).FormSignature();
24445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Change the structure of the form prior to submission.
24465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Websites would typically invoke JavaScript either on page load or on form
24475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // submit to achieve this.
24485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.pop_back();
24495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field = form.fields[3];
24505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields[3] = form.fields[7];
24515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields[7] = field;
24525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate form submission.
24545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormSubmitted(form);
24555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(signature, autofill_manager_->GetSubmittedFormSignature());
24565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we do not save form data when submitted fields contain default
24595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// values.
24605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmittedWithDefaultValues) {
24615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set up our form data.
24625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
24645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields[3].value = ASCIIToUTF16("Enter your address");
24655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Convert the state field to a <select> popup, to make sure that we only
24675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // reject default values for text fields.
24685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(form.fields[6].name == ASCIIToUTF16("state"));
24695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields[6].form_control_type = "select-one";
24705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields[6].value = ASCIIToUTF16("Tennessee");
24715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
24735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
24745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Fill the form.
24765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid("00000000-0000-0000-0000-000000000001", 0);
24775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
2478eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  int response_page_id = 0;
2479eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormData response_data;
2480eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[3],
2481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      PackGUIDs(empty, guid), &response_page_id, &response_data);
24825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate form submission.  We should call into the PDM to try to save the
24845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // filled data.
24855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(1);
2486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormSubmitted(response_data);
24875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set the address field's value back to the default value.
2489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  response_data.fields[3].value = ASCIIToUTF16("Enter your address");
24905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Simulate form submission.  We should not call into the PDM to try to save
24925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the filled data, since the filled form is effectively missing an address.
24935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(0);
2494eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FormSubmitted(response_data);
24955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Checks that resetting the auxiliary profile enabled preference does the right
24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thing on all platforms.
24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, AuxiliaryProfilesReset) {
2500f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  PrefService* prefs = autofill_client_.GetPrefs();
25016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_MACOSX)
25026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Auxiliary profiles is implemented on Mac only.
250346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // OSX: This preference exists for legacy reasons. It is no longer used.
2504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(
2505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled));
250646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  prefs->SetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled,
250746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                    false);
2508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  prefs->ClearPref(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled);
2509c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(
2510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled));
25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
2512c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(
2513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled));
2514c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  prefs->SetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled, true);
2515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  prefs->ClearPref(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled);
2516c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(
2517c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled));
25186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // defined(OS_MACOSX)
25195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload) {
25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
25235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.name = ASCIIToUTF16("MyForm");
25245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.origin = GURL("http://myform.com/form.html");
25255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.action = GURL("http://myform.com/submit.html");
25265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.user_submitted = true;
25275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25283240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  std::vector<ServerFieldTypeSet> expected_types;
25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These fields should all match.
25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
25323240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  ServerFieldTypeSet types;
2533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "1", "Elvis", "text", &field);
25345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(NAME_FIRST);
25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2539c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "2", "Aaron", "text", &field);
25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(NAME_MIDDLE);
25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "3", "A", "text", &field);
25465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(NAME_MIDDLE_INITIAL);
25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "4", "Presley", "text", &field);
25525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(NAME_LAST);
25545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "5", "Elvis Presley", "text", &field);
25585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(CREDIT_CARD_NAME);
25605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2563c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "6", "Elvis Aaron Presley", "text",
25645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     &field);
25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(NAME_FULL);
25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "7", "theking@gmail.com", "email",
25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     &field);
25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(EMAIL_ADDRESS);
25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2577c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "8", "RCA", "text", &field);
25785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(COMPANY_NAME);
25805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2583c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "9", "3734 Elvis Presley Blvd.",
25845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     "text", &field);
25855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(ADDRESS_HOME_LINE1);
25875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "10", "Apt. 10", "text", &field);
25915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(ADDRESS_HOME_LINE2);
25935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "11", "Memphis", "text", &field);
25975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
25985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(ADDRESS_HOME_CITY);
25995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2602c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "12", "Tennessee", "text", &field);
26035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(ADDRESS_HOME_STATE);
26055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "13", "38116", "text", &field);
26095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(ADDRESS_HOME_ZIP);
26115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "14", "USA", "text", &field);
26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(ADDRESS_HOME_COUNTRY);
26175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "15", "United States", "text", &field);
26215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(ADDRESS_HOME_COUNTRY);
26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2626c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "16", "+1 (234) 567-8901", "text",
26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     &field);
26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(PHONE_HOME_WHOLE_NUMBER);
26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2633c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "17", "2345678901", "text", &field);
26345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(PHONE_HOME_CITY_AND_NUMBER);
26365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2639c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "18", "1", "text", &field);
26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(PHONE_HOME_COUNTRY_CODE);
26425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "19", "234", "text", &field);
26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(PHONE_HOME_CITY_CODE);
26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "20", "5678901", "text", &field);
26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(PHONE_HOME_NUMBER);
26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2657c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "21", "567", "text", &field);
26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(PHONE_HOME_NUMBER);
26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "22", "8901", "text", &field);
26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(PHONE_HOME_NUMBER);
26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "23", "4234-5678-9012-3456", "text",
26705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     &field);
26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(CREDIT_CARD_NUMBER);
26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "24", "04", "text", &field);
26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(CREDIT_CARD_EXP_MONTH);
26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "25", "April", "text", &field);
26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(CREDIT_CARD_EXP_MONTH);
26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "26", "2012", "text", &field);
26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(CREDIT_CARD_EXP_4_DIGIT_YEAR);
26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2694c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "27", "12", "text", &field);
26955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
26965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(CREDIT_CARD_EXP_2_DIGIT_YEAR);
26975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
26985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
26995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2700c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "28", "04/2012", "text", &field);
27015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR);
27035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure that we trim whitespace properly.
2707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "29", "", "text", &field);
27085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(EMPTY_TYPE);
27105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "30", " ", "text", &field);
27145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(EMPTY_TYPE);
27165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2719c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "31", " Elvis", "text", &field);
27205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(NAME_FIRST);
27225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "32", "Elvis ", "text", &field);
27265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(NAME_FIRST);
27285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These fields should not match, as they differ by case.
2732c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "33", "elvis", "text", &field);
27335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "34", "3734 Elvis Presley BLVD",
27395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     "text", &field);
27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
27455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These fields should not match, as they are unsupported variants.
2746c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "35", "Elvis Aaron", "text", &field);
27475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "36", "Mr. Presley", "text", &field);
27535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "37", "3734 Elvis Presley", "text",
27595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     &field);
27605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2765c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "38", "TN", "text", &field);
27665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2771c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "39", "38116-1023", "text", &field);
27725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2777c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "20", "5", "text", &field);
27785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2783c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "20", "56", "text", &field);
27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2789c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  test::CreateTestFormField("", "20", "901", "text", &field);
27905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.clear();
27915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  types.insert(UNKNOWN_TYPE);
27925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  form.fields.push_back(field);
27935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  expected_types.push_back(types);
27945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  test::CreateTestFormField("", "40", "mypassword", "password", &field);
2796d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  types.clear();
2797d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  types.insert(PASSWORD);
2798d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  form.fields.push_back(field);
2799d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  expected_types.push_back(types);
2800d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->set_expected_submitted_field_types(expected_types);
28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormSubmitted(form);
28035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, RemoveProfile) {
28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add and remove an Autofill profile.
28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* profile = new AutofillProfile;
28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string guid = "00000000-0000-0000-0000-000000000102";
28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile->set_guid(guid.c_str());
28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddProfile(profile);
28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid_pair(guid, 0);
28135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
28145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int id = PackGUIDs(empty, guid_pair);
28155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->RemoveAutofillProfileOrCreditCard(id);
28175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(autofill_manager_->GetProfileWithGUID(guid.c_str()));
28195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, RemoveCreditCard){
28225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add and remove an Autofill credit card.
28235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CreditCard* credit_card = new CreditCard;
28245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string guid = "00000000-0000-0000-0000-000000100007";
28255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  credit_card->set_guid(guid.c_str());
28265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddCreditCard(credit_card);
28275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid_pair(guid, 0);
28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
28305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int id = PackGUIDs(guid_pair, empty);
28315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->RemoveAutofillProfileOrCreditCard(id);
28335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(autofill_manager_->GetCreditCardWithGUID(guid.c_str()));
28355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, RemoveProfileVariant) {
28385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add and remove an Autofill profile.
28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillProfile* profile = new AutofillProfile;
28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string guid = "00000000-0000-0000-0000-000000000102";
28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  profile->set_guid(guid.c_str());
28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->AddProfile(profile);
28435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair guid_pair(guid, 1);
28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GUIDPair empty(std::string(), 0);
28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int id = PackGUIDs(empty, guid_pair);
28475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  autofill_manager_->RemoveAutofillProfileOrCreditCard(id);
28495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(csharp): Currently variants should not be deleted, but once they are
28515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // update these expectations.
28525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // http://crbug.com/124211
28535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(autofill_manager_->GetProfileWithGUID(guid.c_str()));
28545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
28555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_MACOSX) && !defined(OS_IOS)
28571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(AutofillManagerTest, AccessAddressBookPrompt) {
28581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FormData form;
28591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  test::CreateTestAddressFormData(&form);
28601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<FormData> forms(1, form);
28611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FormsSeen(forms);
28621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FormFieldData& field = form.fields[0];
28631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  field.should_autocomplete = true;
28641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
28651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // A profile already exists.
28661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(
28671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      autofill_manager_->ShouldShowAccessAddressBookSuggestion(form, field));
28681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
28691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Remove all profiles.
28701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  personal_data_.ClearAutofillProfiles();
28711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(
28721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      autofill_manager_->ShouldShowAccessAddressBookSuggestion(form, field));
28731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
28741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  field.should_autocomplete = false;
28751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(
28761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      autofill_manager_->ShouldShowAccessAddressBookSuggestion(form, field));
28771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
28781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // defined(OS_MACOSX) && !defined(OS_IOS)
28791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2882f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MockAutofillClient : public TestAutofillClient {
2883868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public:
2884f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  MockAutofillClient() {}
2885eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2886f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual ~MockAutofillClient() {}
2887868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
2888eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void ShowRequestAutocompleteDialog(
2889eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const FormData& form,
2890eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const GURL& source_url,
2891a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      const ResultCallback& callback) OVERRIDE {
2892a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    callback.Run(user_supplied_data_ ? AutocompleteResultSuccess :
2893a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                       AutocompleteResultErrorDisabled,
2894a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                 base::string16(),
2895a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                 user_supplied_data_.get());
2896eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
2897eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2898eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetUserSuppliedData(scoped_ptr<FormStructure> user_supplied_data) {
2899eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    user_supplied_data_.reset(user_supplied_data.release());
2900eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
2901eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2902868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private:
2903eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<FormStructure> user_supplied_data_;
2904eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
2905f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MockAutofillClient);
2906868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
2907868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
29085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
29095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test our external delegate is called at the right time.
29115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, TestExternalDelegate) {
29125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormData form;
2913eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  test::CreateTestAddressFormData(&form);
29145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<FormData> forms(1, form);
29155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormsSeen(forms);
29165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const FormFieldData& field = form.fields[0];
29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  GetAutofillSuggestions(form, field);  // should call the delegate's OnQuery()
29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
29197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(external_delegate_->on_query_seen());
29205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2921c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2922c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace autofill
2923