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