autofill_manager_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
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" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/tuple.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/autofill/personal_data_manager_factory.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/password_manager/password_manager_delegate_impl.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/chrome_render_view_host_test_harness.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autocomplete_history_manager.h" 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_common_test.h" 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_manager.h" 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_metrics.h" 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_profile.h" 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/credit_card.h" 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/personal_data_manager.h" 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/test_autofill_driver.h" 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/test_autofill_external_delegate.h" 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/test_autofill_manager_delegate.h" 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/autofill_messages.h" 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/common/autofill_pref_names.h" 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_data.h" 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h" 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/forms_seen_state.h" 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/user_prefs.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/mock_render_process_host.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/test/test_utils.h" 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/component_strings.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_test_sink.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/web/WebAutofillClient.h" 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/web/WebFormElement.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using WebKit::WebFormElement; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)typedef PersonalDataManager::GUIDPair GUIDPair; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The page ID sent to the AutofillManager from the RenderView, used to send 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// an IPC message back to the renderer. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kDefaultPageID = 137; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestPersonalDataManager : public PersonalDataManager { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TestPersonalDataManager() : PersonalDataManager("en-US") { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestAutofillProfiles(&web_profiles_); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCards(&credit_cards_); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetBrowserContext(content::BrowserContext* context) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_browser_context(context); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Factory method for keyed service. PersonalDataManager is NULL for testing. 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static BrowserContextKeyedService* Build(content::BrowserContext* profile) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD1(SaveImportedProfile, void(const AutofillProfile&)); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* GetProfileWithGUID(const char* guid) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<AutofillProfile *>::iterator it = web_profiles_.begin(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != web_profiles_.end(); ++it) { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(*it)->guid().compare(guid)) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *it; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* GetCreditCardWithGUID(const char* guid) { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<CreditCard *>::iterator it = credit_cards_.begin(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != credit_cards_.end(); ++it){ 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!(*it)->guid().compare(guid)) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return *it; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddProfile(AutofillProfile* profile) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_profiles_.push_back(profile); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddCreditCard(CreditCard* credit_card) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards_.push_back(credit_card); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RemoveByGUID(const std::string& guid) OVERRIDE { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card = GetCreditCardWithGUID(guid.c_str()); 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (credit_card) { 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_cards_.erase( 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::remove(credit_cards_.begin(), credit_cards_.end(), credit_card), 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) credit_cards_.end()); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AutofillProfile* profile = GetProfileWithGUID(guid.c_str()); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (profile) { 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_profiles_.erase( 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::remove(web_profiles_.begin(), web_profiles_.end(), profile), 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_profiles_.end()); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Do nothing (auxiliary profiles will be created in 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CreateTestAuxiliaryProfile). 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void LoadAuxiliaryProfiles() OVERRIDE {} 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearAutofillProfiles() { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_profiles_.clear(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearCreditCards() { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards_.clear(); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CreateTestAuxiliaryProfiles() { 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestAutofillProfiles(&auxiliary_profiles_); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateTestCreditCardsYearAndMonth(const char* year, const char* month) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearCreditCards(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card = new CreditCard; 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(credit_card, "Miku Hatsune", 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4234567890654321", // Visa 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) month, year); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid("00000000-0000-0000-0000-000000000007"); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards_.push_back(credit_card); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateTestAutofillProfiles(ScopedVector<AutofillProfile>* profiles) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = new AutofillProfile; 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo(profile, "Elvis", "Aaron", 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Presley", "theking@gmail.com", "RCA", 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "3734 Elvis Presley Blvd.", "Apt. 10", 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Memphis", "Tennessee", "38116", "US", 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "12345678901"); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid("00000000-0000-0000-0000-000000000001"); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles->push_back(profile); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = new AutofillProfile; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo(profile, "Charles", "Hardin", 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Holley", "buddy@gmail.com", "Decca", 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "123 Apple St.", "unit 6", "Lubbock", 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "Texas", "79401", "US", "23456789012"); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid("00000000-0000-0000-0000-000000000002"); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles->push_back(profile); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile = new AutofillProfile; 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo( 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile, "", "", "", "", "", "", "", "", "", "", "", ""); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid("00000000-0000-0000-0000-000000000003"); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profiles->push_back(profile); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateTestCreditCards(ScopedVector<CreditCard>* credit_cards) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card = new CreditCard; 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(credit_card, "Elvis Presley", 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "4234 5678 9012 3456", // Visa 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "04", "2012"); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid("00000000-0000-0000-0000-000000000004"); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards->push_back(credit_card); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card = new CreditCard; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(credit_card, "Buddy Holly", 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "5187654321098765", // Mastercard 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "10", "2014"); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid("00000000-0000-0000-0000-000000000005"); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards->push_back(credit_card); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card = new CreditCard; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(credit_card, "", "", "", ""); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid("00000000-0000-0000-0000-000000000006"); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_cards->push_back(credit_card); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestPersonalDataManager); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Populates |form| with 3 fields and a field with autocomplete attribute. 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CreateTestFormWithAutocompleteAttribute(FormData* form) { 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->name = ASCIIToUTF16("UserSpecified"); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->method = ASCIIToUTF16("POST"); 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->origin = GURL("http://myform.com/userspecified.html"); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->action = GURL("http://myform.com/submit.html"); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->user_submitted = true; 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("First Name", "firstname", "", "text", &field); 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->fields.push_back(field); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Middle Name", "middlename", "", "text", &field); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->fields.push_back(field); 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Last Name", "lastname", "", "text", &field); 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->fields.push_back(field); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) field.autocomplete_attribute="cc-type"; 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("cc-type", "cc-type", "", "text", &field); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->fields.push_back(field); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Populates |form| with data corresponding to a simple shipping options form. 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CreateTestShippingOptionsFormData(FormData* form) { 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->name = ASCIIToUTF16("Shipping Options"); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->method = ASCIIToUTF16("POST"); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->origin = GURL("http://myform.com/shipping.html"); 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->action = GURL("http://myform.com/submit.html"); 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->user_submitted = true; 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormFieldData field; 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Shipping1", "option", "option1", "radio", &field); 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->fields.push_back(field); 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Shipping2", "option", "option2", "radio", &field); 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form->fields.push_back(field); 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Populates |form| with data corresponding to a simple credit card form. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Note that this actually appends fields to the form data, which can be useful 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for building up more complex test forms. 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void CreateTestCreditCardFormData(FormData* form, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_https, 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_month_type) { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->name = ASCIIToUTF16("MyForm"); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->method = ASCIIToUTF16("POST"); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_https) { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->origin = GURL("https://myform.com/form.html"); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->action = GURL("https://myform.com/submit.html"); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->origin = GURL("http://myform.com/form.html"); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->action = GURL("http://myform.com/submit.html"); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->user_submitted = true; 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Name on Card", "nameoncard", "", "text", &field); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->fields.push_back(field); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->fields.push_back(field); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (use_month_type) { 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField( 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Expiration Date", "ccmonth", "", "month", &field); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->fields.push_back(field); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Expiration Date", "ccmonth", "", "text", &field); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->fields.push_back(field); 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "ccyear", "", "text", &field); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form->fields.push_back(field); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectSuggestions(int page_id, 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<base::string16>& values, 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<base::string16>& labels, 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<base::string16>& icons, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<int>& unique_ids, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_page_id, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t expected_num_suggestions, 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 expected_values[], 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 expected_labels[], 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 expected_icons[], 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int expected_unique_ids[]) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_page_id, page_id); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(expected_num_suggestions, values.size()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(expected_num_suggestions, labels.size()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(expected_num_suggestions, icons.size()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(expected_num_suggestions, unique_ids.size()); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < expected_num_suggestions; ++i) { 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SCOPED_TRACE(base::StringPrintf("i: %" PRIuS, i)); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_values[i], values[i]); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_labels[i], labels[i]); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_icons[i], icons[i]); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_unique_ids[i], unique_ids[i]); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledField(const char* expected_label, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected_name, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected_value, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected_form_control_type, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field) { 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE(expected_label); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16(expected_label), field.label); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16(expected_name), field.name); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16(expected_value), field.value); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_form_control_type, field.form_control_type); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies that the |filled_form| has been filled with the given data. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Verifies address fields if |has_address_fields| is true, and verifies 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// credit card fields if |has_credit_card_fields| is true. Verifies both if both 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are true. |use_month_type| is used for credit card input month type. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledForm(int page_id, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormData& filled_form, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_page_id, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* first, 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* middle, 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* last, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* address1, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* address2, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* city, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* state, 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* postal_code, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* country, 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* phone, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* email, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* name_on_card, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* card_number, 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expiration_month, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expiration_year, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_address_fields, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_credit_card_fields, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool use_month_type) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The number of fields in the address and credit card forms created above. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t kAddressFormSize = 11; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t kCreditCardFormSize = use_month_type ? 3 : 4; 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_page_id, page_id); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("MyForm"), filled_form.name); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("POST"), filled_form.method); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_credit_card_fields) { 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL("https://myform.com/form.html"), filled_form.origin); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL("https://myform.com/submit.html"), filled_form.action); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL("http://myform.com/form.html"), filled_form.origin); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(GURL("http://myform.com/submit.html"), filled_form.action); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(filled_form.user_submitted); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t form_size = 0; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_address_fields) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_size += kAddressFormSize; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_credit_card_fields) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_size += kCreditCardFormSize; 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(form_size, filled_form.fields.size()); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_address_fields) { 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("First Name", "firstname", first, "text", 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[0]); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Middle Name", "middlename", middle, "text", 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[1]); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Last Name", "lastname", last, "text", 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[2]); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Address Line 1", "addr1", address1, "text", 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[3]); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Address Line 2", "addr2", address2, "text", 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[4]); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("City", "city", city, "text", 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[5]); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("State", "state", state, "text", 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[6]); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Postal Code", "zipcode", postal_code, "text", 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[7]); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Country", "country", country, "text", 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[8]); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Phone Number", "phonenumber", phone, "tel", 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[9]); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Email", "email", email, "email", 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[10]); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (has_credit_card_fields) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t offset = has_address_fields? kAddressFormSize : 0; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Name on Card", "nameoncard", name_on_card, "text", 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[offset + 0]); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Card Number", "cardnumber", card_number, "text", 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[offset + 1]); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (use_month_type) { 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string exp_year = expiration_year; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string exp_month = expiration_month; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string date; 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!exp_year.empty() && !exp_month.empty()) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) date = exp_year + "-" + exp_month; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Expiration Date", "ccmonth", date.c_str(), "month", 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[offset + 2]); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("Expiration Date", "ccmonth", expiration_month, "text", 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[offset + 2]); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("", "ccyear", expiration_year, "text", 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filled_form.fields[offset + 3]); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledAddressFormElvis(int page_id, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormData& filled_form, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_page_id, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_credit_card_fields) { 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledForm(page_id, filled_form, expected_page_id, "Elvis", "Aaron", 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Presley", "3734 Elvis Presley Blvd.", "Apt. 10", "Memphis", 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Tennessee", "38116", "United States", "12345678901", 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "theking@gmail.com", "", "", "", "", true, 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_credit_card_fields, false); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledCreditCardFormElvis(int page_id, 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormData& filled_form, 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_page_id, 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_address_fields) { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledForm(page_id, filled_form, expected_page_id, 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "", "", "", "", "", "", "", "", "", "", "", 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Elvis Presley", "4234567890123456", "04", "2012", 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_address_fields, true, false); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectFilledCreditCardYearMonthWithYearMonth(int page_id, 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FormData& filled_form, 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int expected_page_id, 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_address_fields, 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* year, 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const char* month) { 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledForm(page_id, filled_form, expected_page_id, 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "", "", "", "", "", "", "", "", "", "", "", 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Miku Hatsune", "4234567890654321", month, year, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_address_fields, true, true); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MockAutocompleteHistoryManager : public AutocompleteHistoryManager { 442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MockAutocompleteHistoryManager(AutofillDriver* driver, 444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutofillManagerDelegate* delegate) 445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : AutocompleteHistoryManager(driver, delegate) {} 446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 447eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MOCK_METHOD1(OnFormSubmitted, void(const FormData& form)); 448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 449eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 450eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(MockAutocompleteHistoryManager); 451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MockAutofillDriver : public TestAutofillDriver { 454eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 455eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch explicit MockAutofillDriver(content::WebContents* web_contents) 456eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : TestAutofillDriver(web_contents) {} 457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 458eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Mock methods to enable testability. 459eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MOCK_METHOD2(SendFormDataToRenderer, void(int query_id, 460eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FormData& data)); 461eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(MockAutofillDriver); 464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 465eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestAutofillManager : public AutofillManager { 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TestAutofillManager(AutofillDriver* driver, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill::AutofillManagerDelegate* delegate, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPersonalDataManager* personal_data) 4717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : AutofillManager(driver, delegate, personal_data), 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_(personal_data), 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_enabled_(true) {} 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestAutofillManager() {} 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsAutofillEnabled() const OVERRIDE { return autofill_enabled_; } 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_autofill_enabled(bool autofill_enabled) { 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_enabled_ = autofill_enabled; 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<std::pair<WebFormElement::AutocompleteResult, FormData> >& 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) request_autocomplete_results() const { 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return request_autocomplete_results_; 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_expected_submitted_field_types( 4893240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const std::vector<ServerFieldTypeSet>& expected_types) { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_submitted_field_types_ = expected_types; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UploadFormDataAsyncCallback( 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormStructure* submitted_form, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& load_time, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& interaction_time, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& submission_time) OVERRIDE { 498c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop_runner_->Quit(); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have expected field types set, make sure they match. 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!expected_submitted_field_types_.empty()) { 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(expected_submitted_field_types_.size(), 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) submitted_form->field_count()); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < expected_submitted_field_types_.size(); ++i) { 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE( 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::StringPrintf( 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "Field %d with value %s", static_cast<int>(i), 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UTF16ToUTF8(submitted_form->field(i)->value).c_str())); 5093240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const ServerFieldTypeSet& possible_types = 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) submitted_form->field(i)->possible_types(); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_submitted_field_types_[i].size(), 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) possible_types.size()); 5133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch for (ServerFieldTypeSet::const_iterator it = 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_submitted_field_types_[i].begin(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != expected_submitted_field_types_[i].end(); ++it) { 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(possible_types.count(*it)) 517bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch << "Expected type: " << AutofillType(*it).ToString(); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillManager::UploadFormDataAsyncCallback(submitted_form, 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) load_time, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interaction_time, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) submission_time); 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 528c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Resets the MessageLoopRunner so that it can wait for an asynchronous form 529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // submission to complete. 530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetMessageLoopRunner() { 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop_runner_ = new content::MessageLoopRunner(); 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wait for the asynchronous OnFormSubmitted() call to complete. 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WaitForAsyncFormSubmit() { 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) message_loop_runner_->Run(); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UploadFormData(const FormStructure& submitted_form) OVERRIDE { 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) submitted_form_signature_ = submitted_form.FormSignature(); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string GetSubmittedFormSignature() { 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return submitted_form_signature_; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* GetProfileWithGUID(const char* guid) { 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return personal_data_->GetProfileWithGUID(guid); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* GetCreditCardWithGUID(const char* guid) { 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return personal_data_->GetCreditCardWithGUID(guid); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddProfile(AutofillProfile* profile) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_->AddProfile(profile); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddCreditCard(CreditCard* credit_card) { 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_->AddCreditCard(credit_card); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetPackedCreditCardID(int credit_card_id) { 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string credit_card_guid = 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::StringPrintf("00000000-0000-0000-0000-%012d", credit_card_id); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PackGUIDs(GUIDPair(credit_card_guid, 0), GUIDPair(std::string(), 0)); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddSeenForm(FormStructure* form) { 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_structures()->push_back(form); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ClearFormStructures() { 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) form_structures()->clear(); 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ReturnAutocompleteResult( 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebFormElement::AutocompleteResult result, 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FormData& form_data) OVERRIDE { 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) request_autocomplete_results_.push_back(std::make_pair(result, form_data)); 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Weak reference. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPersonalDataManager* personal_data_; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool autofill_enabled_; 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<std::pair<WebFormElement::AutocompleteResult, FormData> > 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) request_autocomplete_results_; 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<content::MessageLoopRunner> message_loop_runner_; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string submitted_form_signature_; 5953240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch std::vector<ServerFieldTypeSet> expected_submitted_field_types_; 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestAutofillManager); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass TestAutofillExternalDelegate : public AutofillExternalDelegate { 6017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 6027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch explicit TestAutofillExternalDelegate(content::WebContents* web_contents, 6037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch AutofillManager* autofill_manager, 6047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch AutofillDriver* autofill_driver) 6057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : AutofillExternalDelegate(web_contents, autofill_manager, 6067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_driver), 6077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch on_query_seen_(false), 6087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch on_suggestions_returned_seen_(false) {} 6097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual ~TestAutofillExternalDelegate() {} 6107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnQuery(int query_id, 6127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const FormData& form, 6137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const FormFieldData& field, 6147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const gfx::RectF& bounds, 6157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool display_warning) OVERRIDE { 6167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch on_query_seen_ = true; 6177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch on_suggestions_returned_seen_ = false; 6187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnSuggestionsReturned( 6217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int query_id, 6227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::vector<base::string16>& autofill_values, 6237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::vector<base::string16>& autofill_labels, 6247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::vector<base::string16>& autofill_icons, 6257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::vector<int>& autofill_unique_ids) OVERRIDE { 6267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch on_suggestions_returned_seen_ = true; 6277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch query_id_ = query_id; 6297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_values_ = autofill_values; 6307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_labels_ = autofill_labels; 6317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_icons_ = autofill_icons; 6327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_unique_ids_ = autofill_unique_ids; 6337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void CheckSuggestions(int expected_page_id, 6367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch size_t expected_num_suggestions, 6377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::string16 expected_values[], 6387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::string16 expected_labels[], 6397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::string16 expected_icons[], 6407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const int expected_unique_ids[]) { 6417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Ensure that these results are from the most recent query. 6427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(on_suggestions_returned_seen_); 6437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(expected_page_id, query_id_); 6457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(expected_num_suggestions, autofill_values_.size()); 6467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(expected_num_suggestions, autofill_labels_.size()); 6477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(expected_num_suggestions, autofill_icons_.size()); 6487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_EQ(expected_num_suggestions, autofill_unique_ids_.size()); 6497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for (size_t i = 0; i < expected_num_suggestions; ++i) { 6507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SCOPED_TRACE(base::StringPrintf("i: %" PRIuS, i)); 6517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(expected_values[i], autofill_values_[i]); 6527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(expected_labels[i], autofill_labels_[i]); 6537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(expected_icons[i], autofill_icons_[i]); 6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(expected_unique_ids[i], autofill_unique_ids_[i]); 6557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool on_query_seen() const { 6597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return on_query_seen_; 6607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool on_suggestions_returned_seen() const { 6637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return on_suggestions_returned_seen_; 6647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 6677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Records if OnQuery has been called yet. 6687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool on_query_seen_; 6697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Records if OnSuggestionsReturned has been called after the most recent 6717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // call to OnQuery. 6727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool on_suggestions_returned_seen_; 6737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The query id of the most recent Autofill query. 6757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int query_id_; 6767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The results returned by the most recent Autofill query. 6787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<base::string16> autofill_values_; 6797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<base::string16> autofill_labels_; 6807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<base::string16> autofill_icons_; 6817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<int> autofill_unique_ids_; 6827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TestAutofillExternalDelegate); 6847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 6857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AutofillManagerTest : public ChromeRenderViewHostTestHarness { 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 6917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ChromeRenderViewHostTestHarness::SetUp(); 6927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 693c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::PersonalDataManagerFactory::GetInstance()->SetTestingFactory( 6947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch profile(), TestPersonalDataManager::Build); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill::TabAutofillManagerDelegate::CreateForWebContents(web_contents()); 6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch personal_data_.SetBrowserContext(profile()); 700eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_driver_.reset(new MockAutofillDriver(web_contents())); 7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill_manager_.reset(new TestAutofillManager( 7027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) autofill_driver_.get(), 7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill::TabAutofillManagerDelegate::FromWebContents(web_contents()), 7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &personal_data_)); 7057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_.reset(new TestAutofillExternalDelegate( 7077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch web_contents(), 7087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_manager_.get(), 7097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_driver_.get())); 7107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_manager_->SetExternalDelegate(external_delegate_.get()); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Order of destruction is important as AutofillManager relies on 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PersonalDataManager to be around when it gets destroyed. Also, a real 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // AutofillManager is tied to the lifetime of the WebContents, so it must 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be destroyed at the destruction of the WebContents. 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill_manager_.reset(); 7197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) autofill_driver_.reset(); 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewHostTestHarness::TearDown(); 721c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 722c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove the BrowserContext so TestPersonalDataManager does not need to 723c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // care about removing self as an observer in destruction. 724c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) personal_data_.SetBrowserContext(NULL); 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetAutofillSuggestions(int query_id, 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormData& form, 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field) { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->OnQueryFormFieldAutofill(query_id, 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form, 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field, 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect(), 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetAutofillSuggestions(const FormData& form, 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field) { 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(kDefaultPageID, form, field); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 742c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AutocompleteSuggestionsReturned( 743c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<base::string16>& result) { 744eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_manager_->autocomplete_history_manager_->SendSuggestions(&result); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FormsSeen(const std::vector<FormData>& forms) { 748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager_->OnFormsSeen(forms, base::TimeTicks(), 749c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::NO_SPECIAL_FORMS_SEEN); 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PartialFormsSeen(const std::vector<FormData>& forms) { 753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager_->OnFormsSeen(forms, base::TimeTicks(), 754c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::PARTIAL_FORMS_SEEN); 755c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 757c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DynamicFormsSeen(const std::vector<FormData>& forms) { 758c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager_->OnFormsSeen(forms, base::TimeTicks(), 759c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill::DYNAMIC_FORMS_SEEN); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FormSubmitted(const FormData& form) { 763c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) autofill_manager_->ResetMessageLoopRunner(); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (autofill_manager_->OnFormSubmitted(form, base::TimeTicks::Now())) 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->WaitForAsyncFormSubmit(); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FillAutofillFormData(int query_id, 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormData& form, 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field, 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int unique_id) { 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->OnFillAutofillFormData(query_id, form, field, unique_id); 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Calls |autofill_manager_->OnFillAutofillFormData()| with the specified 776eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // input parameters after setting up the expectation that the mock driver's 777eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // |SendFormDataToRenderer()| method will be called and saving the parameters 778eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // of that call into the |response_query_id| and |response_data| output 779eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // parameters. 780eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void FillAutofillFormDataAndSaveResults(int input_query_id, 781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FormData& input_form, 782eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FormFieldData& input_field, 783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int unique_id, 784eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int* response_query_id, 785eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData* response_data) { 786eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_CALL(*autofill_driver_, SendFormDataToRenderer(_, _)). 787eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch WillOnce((DoAll(testing::SaveArg<0>(response_query_id), 788eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch testing::SaveArg<1>(response_data)))); 789eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormData(input_query_id, input_form, input_field, unique_id); 790eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 791eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int PackGUIDs(const GUIDPair& cc_guid, const GUIDPair& profile_guid) const { 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return autofill_manager_->PackGUIDs(cc_guid, profile_guid); 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 797eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<MockAutofillDriver> autofill_driver_; 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestAutofillManager> autofill_manager_; 7997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<TestAutofillExternalDelegate> external_delegate_; 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestPersonalDataManager personal_data_; 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used when we want an off the record profile. This will store the original 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profile from which the off the record profile is derived. 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Profile> other_browser_context_; 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestFormStructure : public FormStructure { 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) explicit TestFormStructure(const FormData& form) 81058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : FormStructure(form) {} 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TestFormStructure() {} 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8133240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch void SetFieldTypes(const std::vector<ServerFieldType>& heuristic_types, 8143240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch const std::vector<ServerFieldType>& server_types) { 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(field_count(), heuristic_types.size()); 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(field_count(), server_types.size()); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < field_count(); ++i) { 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillField* form_field = field(i); 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(form_field); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_field->set_heuristic_type(heuristic_types[i]); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_field->set_server_type(server_types[i]); 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateAutofillCount(); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TestFormStructure); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return all address profile suggestions when all form fields are 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// empty. 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsEmptyValue) { 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 837eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 846c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 849c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis"), 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Charles") 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inferred labels include full first relevant field, which in this case is 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the address line 1. 855c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("3734 Elvis Presley Blvd."), 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("123 Apple St.") 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 859c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16(), base::string16()}; 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1, 2}; 8617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 8627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 8637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return only matching address profile suggestions when the 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// selected form field has been partially filled out. 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsMatchCharacter) { 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 871eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("First Name", "firstname", "E", "text",&field); 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 881c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 884c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = {ASCIIToUTF16("Elvis")}; 885c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = {ASCIIToUTF16("3734 Elvis Presley Blvd.")}; 886c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16()}; 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1}; 8887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 8897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 8907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return no suggestions when the form has no relevant fields. 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsUnknownFields) { 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.name = ASCIIToUTF16("MyForm"); 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.method = ASCIIToUTF16("POST"); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.origin = GURL("http://myform.com/form.html"); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.action = GURL("http://myform.com/submit.html"); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.user_submitted = true; 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Username", "username", "", "text",&field); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 906c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Password", "password", "", "password",&field); 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 908c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Quest", "quest", "", "quest", &field); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 910c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Color", "color", "", "text", &field); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 9177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen()); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we cull duplicate profile suggestions. 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsWithDuplicates) { 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 924eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a duplicate profile. 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* duplicate_profile = 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new AutofillProfile( 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *(autofill_manager_->GetProfileWithGUID( 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "00000000-0000-0000-0000-000000000001"))); 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddProfile(duplicate_profile); 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 940c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 943c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis"), 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Charles") 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 947c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("3734 Elvis Presley Blvd."), 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("123 Apple St.") 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 951c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16(), base::string16()}; 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1, 2}; 9537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 9547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 9557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return no suggestions when autofill is disabled. 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsAutofillDisabledByUser) { 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 962eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable Autofill. 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->set_autofill_enabled(false); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 9717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen()); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return a warning explaining that autofill suggestions are 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unavailable when the form method is GET rather than POST. 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsMethodGet) { 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 979eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.method = ASCIIToUTF16("GET"); 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_FORM_DISABLED) 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 995c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = {base::string16()}; 996c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16()}; 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {WebKit::WebAutofillClient::MenuItemIDWarningMessage}; 9997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 10007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 10017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now add some Autocomplete suggestions. We should return the autocomplete 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // suggestions and the warning; these will be culled by the renderer. 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(kPageID2, form, field); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1008c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> suggestions; 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("Jay")); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("Jason")); 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteSuggestionsReturned(suggestions); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1013c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values2[] = { 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_FORM_DISABLED), 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Jay"), 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Jason") 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels2[] = { base::string16(), base::string16(), 1019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16()}; 1020c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons2[] = { base::string16(), base::string16(), 1021c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16()}; 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids2[] = {-1, 0, 0}; 10237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 10247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kPageID2, arraysize(expected_values2), expected_values2, 10257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels2, expected_icons2, expected_unique_ids2); 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now clear the test profiles and try again -- we shouldn't return a warning. 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.ClearAutofillProfiles(); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 10307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen()); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return all credit card profile suggestions when all form fields 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are empty. 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsEmptyValue) { 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field = form.fields[1]; 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1047c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1050c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("************3456"), 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("************8765") 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1054c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { ASCIIToUTF16("*3456"), 1055c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16("*8765")}; 1056c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { 1057eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kVisaCard), 1058eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kMasterCard) 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = { 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(4), 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(5) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 10647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 10657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 10667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return only matching credit card profile suggestions when the 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// selected form field has been partially filled out. 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsMatchCharacter) { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 1079c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Card Number", "cardnumber", "4", "text", &field); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1084c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1087c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = {ASCIIToUTF16("************3456")}; 1088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = {ASCIIToUTF16("*3456")}; 1089eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 expected_icons[] = {ASCIIToUTF16(kVisaCard)}; 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {autofill_manager_->GetPackedCreditCardID(4)}; 10917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 10927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 10937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return credit card profile suggestions when the selected form 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// field is not the credit card number field. 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsNonCCNumber) { 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis Presley"), 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Buddy Holly") 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { ASCIIToUTF16("*3456"), 1118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16("*8765") }; 1119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { 1120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kVisaCard), 1121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kMasterCard) 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = { 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(4), 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(5) 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 11277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 11287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 11297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return a warning explaining that credit card profile suggestions 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are unavailable when the form is not https. 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsNonHTTPS) { 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, false, false); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_INSECURE_CONNECTION) 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = {base::string16()}; 1153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16()}; 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {-1}; 11557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 11567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 11577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now add some Autocomplete suggestions. We should show the autocomplete 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // suggestions and the warning. 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(kPageID2, form, field); 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> suggestions; 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("Jay")); 11665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("Jason")); 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteSuggestionsReturned(suggestions); 11685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values2[] = { 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_INSECURE_CONNECTION), 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Jay"), 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Jason") 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels2[] = { base::string16(), base::string16(), 1175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16() }; 1176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons2[] = { base::string16(), base::string16(), 1177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16() }; 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids2[] = {-1, 0, 0}; 11797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 11807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kPageID2, arraysize(expected_values2), expected_values2, 11817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels2, expected_icons2, expected_unique_ids2); 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear the test credit cards and try again -- we shouldn't return a warning. 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.ClearCreditCards(); 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 11867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen()); 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return all credit card suggestions in the case that two cards 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// have the same obfuscated number. 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCreditCardSuggestionsRepeatedObfuscatedNumber) { 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a credit card with the same obfuscated number as Elvis's. 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |credit_card| will be owned by the mock PersonalDataManager. 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card = new CreditCard; 1195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetCreditCardInfo(credit_card, "Elvis Presley", 1196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "5231567890123456", // Mastercard 1197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "04", "2012"); 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid("00000000-0000-0000-0000-000000000007"); 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddCreditCard(credit_card); 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field = form.fields[1]; 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("************3456"), 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("************8765"), 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("************3456") 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 12215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("*3456"), 12225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("*8765"), 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("*3456"), 12245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { 1226eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kVisaCard), 1227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kMasterCard), 1228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kMasterCard) 12295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = { 12315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(4), 12325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(5), 12335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(7) 12345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 12367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 12377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return profile and credit card suggestions for combined forms. 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetAddressAndCreditCardSuggestions) { 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1244eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field = form.fields[0]; 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right address suggestions to the external delegate. 1257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis"), 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Charles") 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("3734 Elvis Presley Blvd."), 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("123 Apple St.") 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16(), base::string16()}; 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1, 2}; 12677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 12687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 12697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 1272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field); 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(kPageID2, form, field); 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the credit card suggestions to the external delegate. 1280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values2[] = { 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("************3456"), 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("************8765") 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels2[] = { ASCIIToUTF16("*3456"), 1285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASCIIToUTF16("*8765")}; 1286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons2[] = { 1287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kVisaCard), 1288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16(kMasterCard) 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids2[] = { 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(4), 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->GetPackedCreditCardID(5) 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 12947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 12957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kPageID2, arraysize(expected_values2), expected_values2, 12967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels2, expected_icons2, expected_unique_ids2); 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that for non-https forms with both address and credit card fields, we 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// only return address suggestions. Instead of credit card suggestions, we 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// should return a warning explaining that credit card profile suggestions are 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unavailable when the form is not https. 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetAddressAndCreditCardSuggestionsNonHttps) { 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, false, false); 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field = form.fields[0]; 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right suggestions to the external delegate. 1319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis"), 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Charles") 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("3734 Elvis Presley Blvd."), 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("123 Apple St.") 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16(), base::string16()}; 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1, 2}; 13297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 13307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 13317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Card Number", "cardnumber", "", "text", &field); 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(kPageID2, form, field); 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values2[] = { 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_AUTOFILL_WARNING_INSECURE_CONNECTION) 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels2[] = {base::string16()}; 1346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons2[] = {base::string16()}; 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids2[] = {-1}; 13487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 13497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kPageID2, arraysize(expected_values2), expected_values2, 13507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels2, expected_icons2, expected_unique_ids2); 13515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear the test credit cards and try again -- we shouldn't return a warning. 13535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.ClearCreditCards(); 13545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 13557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(external_delegate_->on_suggestions_returned_seen()); 13565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly combine autofill and autocomplete suggestions. 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetCombinedAutofillAndAutocompleteSuggestions) { 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1362eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 13635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 13675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some Autocomplete suggestions. 13705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> suggestions; 13725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("Jay")); 13735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This suggestion is a duplicate, and should be trimmed. 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("Elvis")); 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("Jason")); 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteSuggestionsReturned(suggestions); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis"), 13815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Charles"), 13825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Jay"), 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Jason") 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("3734 Elvis Presley Blvd."), 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("123 Apple St."), 1388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16(), 1389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16() 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { base::string16(), base::string16(), 1392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16(), base::string16()}; 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1, 2, 0, 0}; 13947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 13957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 13967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we return autocomplete-like suggestions when trying to autofill 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// already filled forms. 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsWhenFormIsAutofilled) { 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1404eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mark one of the fields as filled. 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[2].is_autofilled = true; 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 14145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message 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("Elvis"), 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Charles") 14215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = {base::string16(), base::string16()}; 1423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16(), base::string16()}; 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1, 2}; 14257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 14267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 14277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 14285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that nothing breaks when there are autocomplete suggestions but no 14315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// autofill suggestions. 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsForAutocompleteOnly) { 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 14365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 1437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Some Field", "somefield", "", "text", &field); 14385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 14415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add some Autocomplete suggestions. 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> suggestions; 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("one")); 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) suggestions.push_back(ASCIIToUTF16("two")); 14495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutocompleteSuggestionsReturned(suggestions); 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("one"), 14545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("two") 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = {base::string16(), base::string16()}; 1457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = {base::string16(), base::string16()}; 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {0, 0}; 14597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 14607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 14617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we do not return duplicate values drawn from multiple profiles when 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// filling an already filled field. 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsWithDuplicateValues) { 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 14705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |profile| will be owned by the mock PersonalDataManager. 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = new AutofillProfile; 1475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo( 1476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile, "Elvis", "", "", "", "", "", "", "", "", "", "", ""); 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid("00000000-0000-0000-0000-000000000101"); 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddProfile(profile); 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData& field = form.fields[0]; 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.is_autofilled = true; 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Elvis"); 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 14885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { ASCIIToUTF16("Elvis") }; 1491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { base::string16() }; 1492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { base::string16() }; 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = { 1 }; 14947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 14957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 14967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that a non-default value is suggested for multi-valued profile, on an 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// unfilled form. 15015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsForMultiValuedProfileUnfilled) { 15025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 15035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1504eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 15055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 15065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 15075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |profile| will be owned by the mock PersonalDataManager. 15095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = new AutofillProfile; 1510c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::SetProfileInfo(profile, "Elvis", "", "Presley", "me@x.com", "", 1511c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "", "", "", "", "", "", ""); 15125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid("00000000-0000-0000-0000-000000000101"); 1513c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> multi_values(2); 15145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_values[0] = ASCIIToUTF16("Elvis Presley"); 15155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_values[1] = ASCIIToUTF16("Elena Love"); 15162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawMultiInfo(NAME_FULL, multi_values); 15175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.ClearAutofillProfiles(); 15185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddProfile(profile); 15195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the first name field. 15225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start out with "E", hoping for either "Elvis" or "Elena. 15235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData& field = form.fields[0]; 15245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("E"); 15255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.is_autofilled = false; 15265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 15275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Trigger the |Send|. 1529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis"), 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elena") 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("me@x.com"), 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("me@x.com") 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1540c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { base::string16(), base::string16() }; 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = { 1, 2 }; 15427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 15437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 15447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 15485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the first name field. 15495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This time, start out with "Ele", hoping for "Elena". 15505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData& field = form.fields[0]; 15515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Ele"); 15525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.is_autofilled = false; 15535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Trigger the |Send|. 1556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 15575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { ASCIIToUTF16("Elena") }; 1560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { ASCIIToUTF16("me@x.com") }; 1561c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { base::string16() }; 15625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = { 2 }; 15637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 15647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 15657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that all values are suggested for multi-valued profile, on a filled 15705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// form. This is the per-field "override" case. 15715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetFieldSuggestionsForMultiValuedProfileFilled) { 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1574eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |profile| will be owned by the mock PersonalDataManager. 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = new AutofillProfile; 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid("00000000-0000-0000-0000-000000000102"); 1581c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> multi_values(3); 15825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_values[0] = ASCIIToUTF16("Travis Smith"); 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_values[1] = ASCIIToUTF16("Cynthia Love"); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_values[2] = ASCIIToUTF16("Zac Mango"); 15852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawMultiInfo(NAME_FULL, multi_values); 15865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddProfile(profile); 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the first name field. And start out with "Travis", hoping for all the 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // multi-valued variants as suggestions. 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData& field = form.fields[0]; 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.value = ASCIIToUTF16("Travis"); 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.is_autofilled = true; 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Trigger the |Send|. 1596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Travis"), 16015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Cynthia"), 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Zac") 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { base::string16(), base::string16(), 1605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16() }; 1606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { base::string16(), base::string16(), 1607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16() }; 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = { 1, 2, 3 }; 16097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 16107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 16117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, GetProfileSuggestionsFancyPhone) { 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = new AutofillProfile; 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid("00000000-0000-0000-0000-000000000103"); 1623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> multi_values(1); 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_values[0] = ASCIIToUTF16("Natty Bumppo"); 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawMultiInfo(NAME_FULL, multi_values); 16265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) multi_values[0] = ASCIIToUTF16("1800PRAIRIE"); 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, multi_values); 16285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddProfile(profile); 16295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[9]; 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No suggestions provided, so send an empty vector as the results. 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This triggers the combined message send. 1635c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AutocompleteSuggestionsReturned(std::vector<base::string16>()); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Test that we sent the right values to the external delegate. 1638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_values[] = { 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("12345678901"), 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("23456789012"), 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("18007724743"), // 1800PRAIRIE 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inferred labels include full first relevant field, which in this case is 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the address line 1. 1645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_labels[] = { 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Elvis Aaron Presley"), 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Charles Hardin Holley"), 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Natty Bumppo"), 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 expected_icons[] = { base::string16(), base::string16(), 1651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16()}; 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int expected_unique_ids[] = {1, 2, 3}; 16537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 16547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 16557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 16565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill an address form. 16595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressForm) { 16605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1662eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 16645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 16655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1668eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1669eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1670eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 1671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 1672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 1673eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that we correctly fill an address form from an auxiliary profile. 16772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressFormFromAuxiliaryProfile) { 16782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_.ClearAutofillProfiles(); 16795e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) PrefService* prefs = user_prefs::UserPrefs::Get(profile()); 1680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->SetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled, true); 16812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) personal_data_.CreateTestAuxiliaryProfiles(); 16822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up our form data. 16842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormData form; 1685eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 16862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<FormData> forms(1, form); 16872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FormsSeen(forms); 16882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 16902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GUIDPair empty(std::string(), 0); 1691eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1692eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1693eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 1694eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 1695eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 1696eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 16972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form. 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardForm) { 17015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 17045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 17055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 17065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000004", 0); 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1709eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1710eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1711eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), 1712eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid, empty), &response_page_id, &response_data); 1713eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledCreditCardFormElvis( 1714eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type. 17185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 1. year empty, month empty 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormNoYearNoMonth) { 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as the SetUp(), but generate 4 credit cards with year month 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // combination. 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.CreateTestCreditCardsYearAndMonth("", ""); 17235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, true); 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000007", 0); 17305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1731eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1732eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1733eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), 1734eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid, empty), &response_page_id, &response_data); 1735eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data, 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kDefaultPageID, false, "", ""); 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type. 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 2. year empty, month non-empty 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormNoYearMonth) { 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as the SetUp(), but generate 4 credit cards with year month 17445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // combination. 17455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.CreateTestCreditCardsYearAndMonth("", "04"); 17465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 17475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, true); 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000007", 0); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1754eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1755eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1756eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), 1757eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid, empty), &response_page_id, &response_data); 1758eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data, 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kDefaultPageID, false, "", "04"); 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type. 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 3. year non-empty, month empty 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormYearNoMonth) { 17655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as the SetUp(), but generate 4 credit cards with year month 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // combination. 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.CreateTestCreditCardsYearAndMonth("2012", ""); 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, true); 17715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000007", 0); 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1776eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1777eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1778eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), 1779eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid, empty), &response_page_id, &response_data); 1780eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data, 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kDefaultPageID, false, "2012", ""); 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a credit card form with month input type. 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 4. year non-empty, month empty 17865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillCreditCardFormYearMonth) { 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Same as the SetUp(), but generate 4 credit cards with year month 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // combination. 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.ClearCreditCards(); 17905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) personal_data_.CreateTestCreditCardsYearAndMonth("2012", "04"); 17915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, true); 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000007", 0); 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1799eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1800eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1801eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), 1802eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid, empty), &response_page_id, &response_data); 1803eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledCreditCardYearMonthWithYearMonth(response_page_id, response_data, 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kDefaultPageID, false, "2012", "04"); 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a combined address and credit card form. 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressAndCreditCardForm) { 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1811eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First fill the address data. 18175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 18185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1819eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1820eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 18215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Address"); 1823eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 1824eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 1825eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 1826eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, true); 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now fill the credit card data. 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid2("00000000-0000-0000-0000-000000000004", 0); 1832eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 18335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1834eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields.back(), 1835eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid2, empty), &response_page_id, &response_data); 18365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Credit card"); 1837eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledCreditCardFormElvis( 1838eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kPageID2, true); 18395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a form that has multiple logical sections, e.g. 18435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// both a billing and a shipping address. 18445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillFormWithMultipleSections) { 18455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 1847eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t kAddressFormSize = form.fields.size(); 1849eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = kAddressFormSize; i < form.fields.size(); ++i) { 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure the fields have distinct names. 18525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[i].name = form.fields[i].name + ASCIIToUTF16("_"); 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the first section. 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 18595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1860eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1861eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1862eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 1863eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Address 1"); 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The second address section should be empty. 1867eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(response_data.fields.size(), 2*kAddressFormSize); 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = kAddressFormSize; i < form.fields.size(); ++i) { 1869eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::string16(), response_data.fields[i].value); 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The first address section should be filled with Elvis's data. 1873eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields.resize(kAddressFormSize); 1874eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 1875eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the second section, with the initiating field somewhere in the middle 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of the section. 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid2("00000000-0000-0000-0000-000000000001", 0); 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_LT(9U, kAddressFormSize); 1883eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 1884eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults( 1885eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kPageID2, form, form.fields[kAddressFormSize + 9], 1886eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid2), &response_page_id, &response_data); 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Address 2"); 1889eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(response_data.fields.size(), form.fields.size()); 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The first address section should be empty. 1892eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(response_data.fields.size(), 2*kAddressFormSize); 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < kAddressFormSize; ++i) { 1894eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::string16(), response_data.fields[i].value); 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The second address section should be filled with Elvis's data. 1898eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData secondSection = response_data; 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondSection.fields.erase(secondSection.fields.begin(), 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondSection.fields.begin() + kAddressFormSize); 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < kAddressFormSize; ++i) { 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Restore the expected field names. 1903c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 name = secondSection.fields[i].name; 1904c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::string16 original_name = name.substr(0, name.size() - 1); 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secondSection.fields[i].name = original_name; 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1907eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 1908eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, secondSection, kPageID2, false); 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a form that has author-specified sections, which 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// might not match our expected section breakdown. 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillFormWithAuthorSpecifiedSections) { 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a form with a billing section and an unnamed section, interleaved. 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The billing section includes both address and credit card fields. 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.name = ASCIIToUTF16("MyForm"); 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.method = ASCIIToUTF16("POST"); 19205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.origin = GURL("https://myform.com/form.html"); 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.action = GURL("https://myform.com/submit.html"); 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.user_submitted = true; 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1926c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "country", "", "text", &field); 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "section-billing country"; 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1930c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "firstname", "", "text", &field); 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "given-name"; 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1934c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "lastname", "", "text", &field); 19355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "family-name"; 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1938c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "address", "", "text", &field); 1939a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch field.autocomplete_attribute = "section-billing address-line1"; 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1942c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "city", "", "text", &field); 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "section-billing locality"; 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1946c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "state", "", "text", &field); 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "section-billing region"; 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1950c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "zip", "", "text", &field); 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "section-billing postal-code"; 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1954c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "ccname", "", "text", &field); 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "section-billing cc-name"; 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1958c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "ccnumber", "", "text", &field); 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "section-billing cc-number"; 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1962c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "ccexp", "", "text", &field); 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "section-billing cc-exp"; 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1966c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "email", "", "text", &field); 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = "email"; 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the unnamed section. 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 1976eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 1977eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 1978eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[1], 1979eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Unnamed section"); 1982eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(kDefaultPageID, response_page_id); 1983eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("MyForm"), response_data.name); 1984eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("POST"), response_data.method); 1985eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GURL("https://myform.com/form.html"), response_data.origin); 1986eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GURL("https://myform.com/submit.html"), response_data.action); 1987eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(response_data.user_submitted); 1988eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(11U, response_data.fields.size()); 1989eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1990eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "country", "", "text", response_data.fields[0]); 1991eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "firstname", "Elvis", "text", 1992eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[1]); 1993eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "lastname", "Presley", "text", 1994eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[2]); 1995eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "address", "", "text", response_data.fields[3]); 1996eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "city", "", "text", response_data.fields[4]); 1997eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "state", "", "text", response_data.fields[5]); 1998eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "zip", "", "text", response_data.fields[6]); 1999eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccname", "", "text", response_data.fields[7]); 2000eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccnumber", "", "text", response_data.fields[8]); 2001eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccexp", "", "text", response_data.fields[9]); 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("", "email", "theking@gmail.com", "text", 2003eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[10]); 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the address portion of the billing section. 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid2("00000000-0000-0000-0000-000000000001", 0); 2009eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2010eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields[0], 2011eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid2), &response_page_id, &response_data); 20125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Billing address"); 2014eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(kPageID2, response_page_id); 2015eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("MyForm"), response_data.name); 2016eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("POST"), response_data.method); 2017eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GURL("https://myform.com/form.html"), response_data.origin); 2018eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GURL("https://myform.com/submit.html"), response_data.action); 2019eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(response_data.user_submitted); 2020eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(11U, response_data.fields.size()); 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2022ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ExpectFilledField("", "country", "US", "text", 2023eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[0]); 2024eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "firstname", "", "text", response_data.fields[1]); 2025eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "lastname", "", "text", response_data.fields[2]); 20265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("", "address", "3734 Elvis Presley Blvd.", "text", 2027eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[3]); 2028eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "city", "Memphis", "text", response_data.fields[4]); 2029eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "state", "Tennessee", "text", 2030eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[5]); 2031eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "zip", "38116", "text", response_data.fields[6]); 2032eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccname", "", "text", response_data.fields[7]); 2033eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccnumber", "", "text", response_data.fields[8]); 2034eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccexp", "", "text", response_data.fields[9]); 2035eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "email", "", "text", response_data.fields[10]); 20365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the credit card portion of the billing section. 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID3 = 3; 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid3("00000000-0000-0000-0000-000000000004", 0); 2041eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2042eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults( 2043eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kPageID3, form, form.fields[form.fields.size() - 2], 2044eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid3, empty), &response_page_id, &response_data); 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Credit card"); 2047eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(kPageID3, response_page_id); 2048eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("MyForm"), response_data.name); 2049eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("POST"), response_data.method); 2050eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GURL("https://myform.com/form.html"), response_data.origin); 2051eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(GURL("https://myform.com/submit.html"), response_data.action); 2052eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_TRUE(response_data.user_submitted); 2053eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(11U, response_data.fields.size()); 2054eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2055eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "country", "", "text", response_data.fields[0]); 2056eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "firstname", "", "text", response_data.fields[1]); 2057eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "lastname", "", "text", response_data.fields[2]); 2058eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "address", "", "text", response_data.fields[3]); 2059eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "city", "", "text", response_data.fields[4]); 2060eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "state", "", "text", response_data.fields[5]); 2061eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "zip", "", "text", response_data.fields[6]); 2062eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccname", "Elvis Presley", "text", 2063eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[7]); 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectFilledField("", "ccnumber", "4234567890123456", "text", 2065eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[8]); 2066eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "ccexp", "04/2012", "text", response_data.fields[9]); 2067eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledField("", "email", "", "text", response_data.fields[10]); 20685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a form that has a single logical section with 20725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// multiple email address fields. 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillFormWithMultipleEmails) { 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2076eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 20775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 2078c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Confirm email", "email2", "", "text", &field); 20795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 20805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 20825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 20835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the form. 20855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 20865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2087eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2088eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 2089eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 2090eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The second email address should be filled. 2093eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("theking@gmail.com"), 2094eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields.back().value); 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The remainder of the form should be filled as usual. 2097eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields.pop_back(); 2098eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 2099eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 21005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a previously auto-filled form. 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAutofilledForm) { 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mark one of the address fields as autofilled. 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[4].is_autofilled = true; 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestCreditCardFormData(&form, true, false); 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First fill the address data. 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 2118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, *form.fields.begin(), 2119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 21215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Address"); 2122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledForm(response_page_id, response_data, kDefaultPageID, 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Elvis", "", "", "", "", "", "", "", "", "", "", "", "", 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "", "", true, true, false); 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now fill the credit card data. 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid2("00000000-0000-0000-0000-000000000004", 0); 2130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields.back(), 2132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid2, empty), &response_page_id, &response_data); 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Credit card 1"); 2135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledCreditCardFormElvis( 2136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kPageID2, true); 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now set the credit card fields to also be auto-filled, and try again to 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // fill the credit card data 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<FormFieldData>::iterator iter = form.fields.begin(); 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != form.fields.end(); 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++iter) { 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->is_autofilled = true; 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID3 = 3; 2148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2149eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kPageID3, form, *form.fields.rbegin(), 2150eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(guid2, empty), &response_page_id, &response_data); 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Credit card 2"); 2153eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledForm(response_page_id, response_data, kPageID3, 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "", "", "", "", "", "", "", "", "", "", "", "", "", "", 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "2012", true, true, false); 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill an address form with a non-default variant for a 21605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// multi-valued field. 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillAddressFormWithVariantType) { 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2164eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 21655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a name variant to the Elvis profile. 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = autofill_manager_->GetProfileWithGUID( 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "00000000-0000-0000-0000-000000000001"); 2171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16 elvis_name = profile->GetRawInfo(NAME_FULL); 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> name_variants; 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_variants.push_back(ASCIIToUTF16("Some Other Guy")); 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) name_variants.push_back(elvis_name); 21762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile->SetRawMultiInfo(NAME_FULL, name_variants); 21775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid(profile->guid(), 1); 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2181eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data1; 2182eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 2183eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data1); 21845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 21855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Valid variant"); 2186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 2187eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data1, kDefaultPageID, false); 21885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try filling with a variant that doesn't exist. The fields to which this 21915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // variant would normally apply should not be filled. 21925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPageID2 = 2; 21935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid2(profile->guid(), 2); 2194eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2195eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data2; 2196eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kPageID2, form, form.fields[0], 2197eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid2), &response_page_id, &response_data2); 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SCOPED_TRACE("Invalid variant"); 2200eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledForm(response_page_id, response_data2, kPageID2, "", "", "", 22015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "3734 Elvis Presley Blvd.", "Apt. 10", "Memphis", 22025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "Tennessee", "38116", "United States", "12345678901", 22035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "theking@gmail.com", "", "", "", "", true, false, false); 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we correctly fill a phone number split across multiple fields. 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FillPhoneNumber) { 22095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In one form, rely on the maxlength attribute to imply phone number parts. 22105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // In the other form, rely on the autocompletetype attribute. 22115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form_with_maxlength; 22125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_maxlength.name = ASCIIToUTF16("MyMaxlengthPhoneForm"); 22135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_maxlength.method = ASCIIToUTF16("POST"); 22145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_maxlength.origin = GURL("http://myform.com/phone_form.html"); 22155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_maxlength.action = GURL("http://myform.com/phone_submit.html"); 22165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_maxlength.user_submitted = true; 22175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form_with_autocompletetype = form_with_maxlength; 22185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_autocompletetype.name = ASCIIToUTF16("MyAutocompletetypePhoneForm"); 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct { 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* label; 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* name; 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t max_length; 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* autocomplete_attribute; 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } test_fields[] = { 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "country code", "country_code", 1, "tel-country-code" }, 22275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "area code", "area_code", 3, "tel-area-code" }, 22285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "phone", "phone_prefix", 3, "tel-local-prefix" }, 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "-", "phone_suffix", 4, "tel-local-suffix" }, 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "Phone Extension", "ext", 3, "tel-extension" } 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const size_t default_max_length = field.max_length; 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_fields); ++i) { 2236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField( 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_fields[i].label, test_fields[i].name, "", "text", &field); 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.max_length = test_fields[i].max_length; 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = std::string(); 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_maxlength.fields.push_back(field); 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.max_length = default_max_length; 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) field.autocomplete_attribute = test_fields[i].autocomplete_attribute; 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_with_autocompletetype.fields.push_back(field); 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms; 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) forms.push_back(form_with_maxlength); 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) forms.push_back(form_with_autocompletetype); 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should be able to fill prefix and suffix fields for US numbers. 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* work_profile = autofill_manager_->GetProfileWithGUID( 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "00000000-0000-0000-0000-000000000002"); 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(work_profile != NULL); 22565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_profile->SetRawInfo(PHONE_HOME_WHOLE_NUMBER, 22575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("16505554567")); 22585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid(work_profile->guid(), 0); 22605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int page_id = 1; 2262eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2263eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data1; 2264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(page_id, form_with_maxlength, 2265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *form_with_maxlength.fields.begin(), 2266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data1); 2267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(1, response_page_id); 2268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2269eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(5U, response_data1.fields.size()); 2270eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("1"), response_data1.fields[0].value); 2271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("650"), response_data1.fields[1].value); 2272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("555"), response_data1.fields[2].value); 2273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("4567"), response_data1.fields[3].value); 2274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::string16(), response_data1.fields[4].value); 22755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_id = 2; 2277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data2; 2279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(page_id, form_with_autocompletetype, 2280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *form_with_autocompletetype.fields.begin(), 2281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data2); 2282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(2, response_page_id); 2283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(5U, response_data2.fields.size()); 2285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("1"), response_data2.fields[0].value); 2286eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("650"), response_data2.fields[1].value); 2287eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("555"), response_data2.fields[2].value); 2288eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("4567"), response_data2.fields[3].value); 2289eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::string16(), response_data2.fields[4].value); 22905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should not be able to fill prefix and suffix fields for international 22925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // numbers. 22932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) work_profile->SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("GB")); 22945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) work_profile->SetRawInfo(PHONE_HOME_WHOLE_NUMBER, 22955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("447700954321")); 22965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_id = 3; 2297eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2298eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data3; 2299eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(page_id, form_with_maxlength, 2300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *form_with_maxlength.fields.begin(), 2301eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data3); 2302eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(3, response_page_id); 2303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(5U, response_data3.fields.size()); 2305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("44"), response_data3.fields[0].value); 2306eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("7700"), response_data3.fields[1].value); 2307eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("954321"), response_data3.fields[2].value); 2308eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("954321"), response_data3.fields[3].value); 2309eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::string16(), response_data3.fields[4].value); 23105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_id = 4; 2312eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2313eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data4; 2314eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(page_id, form_with_autocompletetype, 2315eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *form_with_autocompletetype.fields.begin(), 2316eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data4); 2317eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(4, response_page_id); 2318eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2319eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(5U, response_data4.fields.size()); 2320eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("44"), response_data4.fields[0].value); 2321eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("7700"), response_data4.fields[1].value); 2322eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("954321"), response_data4.fields[2].value); 2323eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("954321"), response_data4.fields[3].value); 2324eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::string16(), response_data4.fields[4].value); 23255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should fill all phone fields with the same phone number variant. 2327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<base::string16> phone_variants; 23285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) phone_variants.push_back(ASCIIToUTF16("16505554567")); 23295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) phone_variants.push_back(ASCIIToUTF16("18887771234")); 23302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) work_profile->SetRawInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("US")); 23312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) work_profile->SetRawMultiInfo(PHONE_HOME_WHOLE_NUMBER, phone_variants); 23325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_id = 5; 2334eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id = 0; 2335eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data5; 23365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair variant_guid(work_profile->guid(), 1); 2337eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(page_id, form_with_maxlength, 2338eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *form_with_maxlength.fields.begin(), 2339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, variant_guid), &response_page_id, &response_data5); 2340eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(5, response_page_id); 2341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASSERT_EQ(5U, response_data5.fields.size()); 2343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("1"), response_data5.fields[0].value); 2344eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("888"), response_data5.fields[1].value); 2345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("777"), response_data5.fields[2].value); 2346eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(ASCIIToUTF16("1234"), response_data5.fields[3].value); 2347eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(base::string16(), response_data5.fields[4].value); 23485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can still fill a form when a field has been removed from it. 23515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormChangesRemoveField) { 23525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 23535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2354eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 23555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add a field -- we'll remove it again later. 23575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 2358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("Some", "field", "", "text", &field); 23595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.insert(form.fields.begin() + 3, field); 23605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 23625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 23635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now, after the call to |FormsSeen|, we remove the field before filling. 23655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.erase(form.fields.begin() + 3); 23665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 23685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2369eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 2371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 2372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 2373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 2374eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 23755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 23765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we can still fill a form when a field has been added to it. 23785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormChangesAddField) { 23795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The offset of the phone field in the address form. 23805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int kPhoneFieldOffset = 9; 23815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 23835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2384eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 23855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove the phone field -- we'll add it back later. 23875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormFieldData>::iterator pos = 23885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.begin() + kPhoneFieldOffset; 23895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field = *pos; 23905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pos = form.fields.erase(pos); 23915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 23935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 23945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now, after the call to |FormsSeen|, we restore the field before filling. 23965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.insert(pos, field); 23975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 23995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2401eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 2402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 2403eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 2404eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 2405eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 24065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we are able to save form data when forms are submitted. 24095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmitted) { 24105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 24115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2412eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 24135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 24145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 24155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the form. 24175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 24185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2419eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2420eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 2421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 2422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 2423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 2424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 24255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate form submission. We should call into the PDM to try to save the 24275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // filled data. 24285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(1); 2429eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormSubmitted(response_data); 2430eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 2431eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2432eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test that when Autocomplete is enabled and Autofill is disabled, 2433eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// form submissions are still received by AutocompleteHistoryManager. 2434eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(AutofillManagerTest, FormSubmittedAutocompleteEnabled) { 2435eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestAutofillManagerDelegate delegate; 2436eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_manager_.reset(new TestAutofillManager( 2437eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_driver_.get(), 2438eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &delegate, 2439eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NULL)); 2440eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_manager_->set_autofill_enabled(false); 2441eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<MockAutocompleteHistoryManager> autocomplete_history_manager; 2442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autocomplete_history_manager.reset( 2443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch new MockAutocompleteHistoryManager(autofill_driver_.get(), &delegate)); 2444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_manager_->autocomplete_history_manager_ = 2445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autocomplete_history_manager.Pass(); 2446eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2447eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Set up our form data. 2448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData form; 2449eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 2450eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch form.method = ASCIIToUTF16("GET"); 2451eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MockAutocompleteHistoryManager* m = static_cast< 2452eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MockAutocompleteHistoryManager*>( 2453eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_manager_->autocomplete_history_manager_.get()); 2454eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_CALL(*m, 2455eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch OnFormSubmitted(_)).Times(1); 2456eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormSubmitted(form); 2457eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 2458eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2459eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Test that when Autocomplete is enabled and Autofill is disabled, 2460eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Autocomplete suggestions are still received. 2461eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(AutofillManagerTest, AutocompleteSuggestionsWhenAutofillDisabled) { 2462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestAutofillManagerDelegate delegate; 2463eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_manager_.reset(new TestAutofillManager( 2464eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_driver_.get(), 2465eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch &delegate, 2466eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NULL)); 2467eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch autofill_manager_->set_autofill_enabled(false); 24687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch autofill_manager_->SetExternalDelegate(external_delegate_.get()); 2469eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Set up our form data. 2471eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData form; 2472eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 2473eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch form.method = ASCIIToUTF16("GET"); 2474eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<FormData> forms(1, form); 2475eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormsSeen(forms); 2476eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FormFieldData& field = form.fields[0]; 2477eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetAutofillSuggestions(form, field); 2478eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2479eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Add some Autocomplete suggestions. We should return the autocomplete 2480eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // suggestions, these will be culled by the renderer. 2481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<base::string16> suggestions; 2482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch suggestions.push_back(ASCIIToUTF16("Jay")); 2483eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch suggestions.push_back(ASCIIToUTF16("Jason")); 2484eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AutocompleteSuggestionsReturned(suggestions); 2485eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 expected_values[] = { 2487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("Jay"), 2488eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ASCIIToUTF16("Jason") 2489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 2490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 expected_labels[] = { base::string16(), base::string16()}; 2491eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::string16 expected_icons[] = { base::string16(), base::string16()}; 2492eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int expected_unique_ids[] = {0, 0}; 24937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch external_delegate_->CheckSuggestions( 24947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch kDefaultPageID, arraysize(expected_values), expected_values, 24957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch expected_labels, expected_icons, expected_unique_ids); 24965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 24975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we are able to save form data when forms are submitted and we only 24995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// have server data for the field types. 25005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmittedServerTypes) { 25015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 25025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2503eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 25045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate having seen this form on page load. 25065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |form_structure| will be owned by |autofill_manager_|. 25075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestFormStructure* form_structure = new TestFormStructure(form); 25085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillMetrics metrics_logger; // ignored 25095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_structure->DetermineHeuristicTypes(metrics_logger); 25105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear the heuristic types, and instead set the appropriate server types. 25123240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch std::vector<ServerFieldType> heuristic_types, server_types; 25135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < form.fields.size(); ++i) { 25145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) heuristic_types.push_back(UNKNOWN_TYPE); 2515bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch server_types.push_back(form_structure->field(i)->heuristic_type()); 25165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 25175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form_structure->SetFieldTypes(heuristic_types, server_types); 25185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddSeenForm(form_structure); 25195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the form. 25215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 25225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2523eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2524eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 2525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[0], 2526eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 2527eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectFilledAddressFormElvis( 2528eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_page_id, response_data, kDefaultPageID, false); 25295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate form submission. We should call into the PDM to try to save the 25315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // filled data. 25325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(1); 2533eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormSubmitted(response_data); 25345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that the form signature for an uploaded form always matches the form 25375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// signature from the query. 25385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmittedWithDifferentFields) { 25395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 25405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2541eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 25425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 25435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 25445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cache the expected form signature. 254658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string signature = FormStructure(form).FormSignature(); 25475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change the structure of the form prior to submission. 25495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Websites would typically invoke JavaScript either on page load or on form 25505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // submit to achieve this. 25515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.pop_back(); 25525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field = form.fields[3]; 25535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[3] = form.fields[7]; 25545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[7] = field; 25555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate form submission. 25575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormSubmitted(form); 25585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(signature, autofill_manager_->GetSubmittedFormSignature()); 25595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that we do not save form data when submitted fields contain default 25625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// values. 25635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, FormSubmittedWithDefaultValues) { 25645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up our form data. 25655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2566eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 25675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[3].value = ASCIIToUTF16("Enter your address"); 25685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convert the state field to a <select> popup, to make sure that we only 25705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reject default values for text fields. 25715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(form.fields[6].name == ASCIIToUTF16("state")); 25725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[6].form_control_type = "select-one"; 25735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields[6].value = ASCIIToUTF16("Tennessee"); 25745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 25765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 25775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fill the form. 25795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid("00000000-0000-0000-0000-000000000001", 0); 25805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 2581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int response_page_id = 0; 2582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormData response_data; 2583eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FillAutofillFormDataAndSaveResults(kDefaultPageID, form, form.fields[3], 2584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PackGUIDs(empty, guid), &response_page_id, &response_data); 25855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate form submission. We should call into the PDM to try to save the 25875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // filled data. 25885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(1); 2589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormSubmitted(response_data); 25905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the address field's value back to the default value. 2592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch response_data.fields[3].value = ASCIIToUTF16("Enter your address"); 25935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Simulate form submission. We should not call into the PDM to try to save 25955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the filled data, since the filled form is effectively missing an address. 25965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(personal_data_, SaveImportedProfile(::testing::_)).Times(0); 2597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FormSubmitted(response_data); 25985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 25995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Checks that resetting the auxiliary profile enabled preference does the right 26015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// thing on all platforms. 26025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, AuxiliaryProfilesReset) { 26035e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) PrefService* prefs = user_prefs::UserPrefs::Get(profile()); 2604c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_ANDROID) 2605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Auxiliary profiles is implemented on Mac and Android only. 2606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // OSX: enables Mac Address Book integration. 2607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Android: enables integration with user's contact profile. 2608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE( 2609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled)); 2610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->SetBoolean( 2611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::autofill::prefs::kAutofillAuxiliaryProfilesEnabled, false); 2612c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->ClearPref(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled); 2613c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE( 2614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled)); 26155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE( 2617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled)); 2618c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->SetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled, true); 2619c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->ClearPref(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled); 2620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_FALSE( 2621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->GetBoolean(::autofill::prefs::kAutofillAuxiliaryProfilesEnabled)); 26225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 26235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 26245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, DeterminePossibleFieldTypesForUpload) { 26265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 26275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.name = ASCIIToUTF16("MyForm"); 26285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.method = ASCIIToUTF16("POST"); 26295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.origin = GURL("http://myform.com/form.html"); 26305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.action = GURL("http://myform.com/submit.html"); 26315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.user_submitted = true; 26325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26333240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch std::vector<ServerFieldTypeSet> expected_types; 26345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 26355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These fields should all match. 26365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormFieldData field; 26373240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch ServerFieldTypeSet types; 2638c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "1", "Elvis", "text", &field); 26395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(NAME_FIRST); 26415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "2", "Aaron", "text", &field); 26455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(NAME_MIDDLE); 26475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2650c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "3", "A", "text", &field); 26515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(NAME_MIDDLE_INITIAL); 26535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2656c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "4", "Presley", "text", &field); 26575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(NAME_LAST); 26595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "5", "Elvis Presley", "text", &field); 26635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(CREDIT_CARD_NAME); 26655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "6", "Elvis Aaron Presley", "text", 26695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &field); 26705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(NAME_FULL); 26725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "7", "theking@gmail.com", "email", 26765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &field); 26775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(EMAIL_ADDRESS); 26795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "8", "RCA", "text", &field); 26835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(COMPANY_NAME); 26855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2688c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "9", "3734 Elvis Presley Blvd.", 26895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "text", &field); 26905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(ADDRESS_HOME_LINE1); 26925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 26945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "10", "Apt. 10", "text", &field); 26965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 26975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(ADDRESS_HOME_LINE2); 26985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 26995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2701c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "11", "Memphis", "text", &field); 27025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(ADDRESS_HOME_CITY); 27045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2707c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "12", "Tennessee", "text", &field); 27085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(ADDRESS_HOME_STATE); 27105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2713c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "13", "38116", "text", &field); 27145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(ADDRESS_HOME_ZIP); 27165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2719c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "14", "USA", "text", &field); 27205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(ADDRESS_HOME_COUNTRY); 27225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "15", "United States", "text", &field); 27265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(ADDRESS_HOME_COUNTRY); 27285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2731c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "16", "+1 (234) 567-8901", "text", 27325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &field); 27335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(PHONE_HOME_WHOLE_NUMBER); 27355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2738c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "17", "2345678901", "text", &field); 27395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(PHONE_HOME_CITY_AND_NUMBER); 27415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2744c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "18", "1", "text", &field); 27455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(PHONE_HOME_COUNTRY_CODE); 27475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2750c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "19", "234", "text", &field); 27515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(PHONE_HOME_CITY_CODE); 27535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2756c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "20", "5678901", "text", &field); 27575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(PHONE_HOME_NUMBER); 27595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2762c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "21", "567", "text", &field); 27635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(PHONE_HOME_NUMBER); 27655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2768c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "22", "8901", "text", &field); 27695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(PHONE_HOME_NUMBER); 27715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2774c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "23", "4234-5678-9012-3456", "text", 27755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &field); 27765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(CREDIT_CARD_NUMBER); 27785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2781c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "24", "04", "text", &field); 27825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(CREDIT_CARD_EXP_MONTH); 27845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2787c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "25", "April", "text", &field); 27885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(CREDIT_CARD_EXP_MONTH); 27905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2793c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "26", "2012", "text", &field); 27945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 27955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(CREDIT_CARD_EXP_4_DIGIT_YEAR); 27965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 27975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 27985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2799c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "27", "12", "text", &field); 28005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(CREDIT_CARD_EXP_2_DIGIT_YEAR); 28025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "28", "04/2012", "text", &field); 28065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR); 28085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure that we trim whitespace properly. 2812c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "29", "", "text", &field); 28135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(EMPTY_TYPE); 28155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2818c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "30", " ", "text", &field); 28195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(EMPTY_TYPE); 28215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2824c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "31", " Elvis", "text", &field); 28255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(NAME_FIRST); 28275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2830c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "32", "Elvis ", "text", &field); 28315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(NAME_FIRST); 28335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These fields should not match, as they differ by case. 2837c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "33", "elvis", "text", &field); 28385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2843c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "34", "3734 Elvis Presley BLVD", 28445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "text", &field); 28455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 28505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These fields should not match, as they are unsupported variants. 2851c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "35", "Elvis Aaron", "text", &field); 28525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2857c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "36", "Mr. Presley", "text", &field); 28585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2863c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "37", "3734 Elvis Presley", "text", 28645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &field); 28655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2870c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "38", "TN", "text", &field); 28715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2876c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "39", "38116-1023", "text", &field); 28775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2882c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "20", "5", "text", &field); 28835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2888c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "20", "56", "text", &field); 28895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2894c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::CreateTestFormField("", "20", "901", "text", &field); 28955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.clear(); 28965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) types.insert(UNKNOWN_TYPE); 28975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) form.fields.push_back(field); 28985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_types.push_back(types); 28995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->set_expected_submitted_field_types(expected_types); 29015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormSubmitted(form); 29025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, RemoveProfile) { 29055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add and remove an Autofill profile. 29065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = new AutofillProfile; 29075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid = "00000000-0000-0000-0000-000000000102"; 29085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid(guid.c_str()); 29095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddProfile(profile); 29105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid_pair(guid, 0); 29125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 29135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = PackGUIDs(empty, guid_pair); 29145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->RemoveAutofillProfileOrCreditCard(id); 29165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(autofill_manager_->GetProfileWithGUID(guid.c_str())); 29185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, RemoveCreditCard){ 29215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add and remove an Autofill credit card. 29225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreditCard* credit_card = new CreditCard; 29235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid = "00000000-0000-0000-0000-000000100007"; 29245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) credit_card->set_guid(guid.c_str()); 29255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddCreditCard(credit_card); 29265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid_pair(guid, 0); 29285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 29295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = PackGUIDs(guid_pair, empty); 29305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->RemoveAutofillProfileOrCreditCard(id); 29325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(autofill_manager_->GetCreditCardWithGUID(guid.c_str())); 29345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, RemoveProfileVariant) { 29375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add and remove an Autofill profile. 29385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AutofillProfile* profile = new AutofillProfile; 29395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string guid = "00000000-0000-0000-0000-000000000102"; 29405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile->set_guid(guid.c_str()); 29415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->AddProfile(profile); 29425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair guid_pair(guid, 1); 29445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GUIDPair empty(std::string(), 0); 29455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id = PackGUIDs(empty, guid_pair); 29465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) autofill_manager_->RemoveAutofillProfileOrCreditCard(id); 29485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(csharp): Currently variants should not be deleted, but once they are 29505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // update these expectations. 29515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/124211 29525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(autofill_manager_->GetProfileWithGUID(guid.c_str())); 29535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 29545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(AutofillManagerTest, DisabledAutofillDispatchesError) { 29562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(autofill_manager_->request_autocomplete_results().empty()); 29572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill_manager_->set_autofill_enabled(false); 29592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill_manager_->OnRequestAutocomplete(FormData(), 29602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL()); 29612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1U, autofill_manager_->request_autocomplete_results().size()); 29632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(WebFormElement::AutocompleteResultErrorDisabled, 29642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) autofill_manager_->request_autocomplete_results()[0].first); 29652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 29662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 29675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 29685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2969eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MockAutofillManagerDelegate : public TestAutofillManagerDelegate { 2970868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 297158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) MockAutofillManagerDelegate() {} 2972eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2973868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~MockAutofillManagerDelegate() {} 2974868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2975eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void ShowRequestAutocompleteDialog( 2976eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FormData& form, 2977eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const GURL& source_url, 2978eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::Callback<void(const FormStructure*, 2979eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string&)>& callback) OVERRIDE { 2980eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch callback.Run(user_supplied_data_.get(), "google_transaction_id"); 2981eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 2982eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2983eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetUserSuppliedData(scoped_ptr<FormStructure> user_supplied_data) { 2984eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch user_supplied_data_.reset(user_supplied_data.release()); 2985eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 2986eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2987868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 2988eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<FormStructure> user_supplied_data_; 2989eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2990eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(MockAutofillManagerDelegate); 2991868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 2992868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 29945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test our external delegate is called at the right time. 29965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AutofillManagerTest, TestExternalDelegate) { 29975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormData form; 2998eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch test::CreateTestAddressFormData(&form); 29995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FormData> forms(1, form); 30005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FormsSeen(forms); 30015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FormFieldData& field = form.fields[0]; 30025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetAutofillSuggestions(form, field); // should call the delegate's OnQuery() 30035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(external_delegate_->on_query_seen()); 30055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3006c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3007c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace autofill 3008