1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <string> 621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/message_loop.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/autofill/autofill_common_test.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/autofill_profile.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/form_structure.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/autofill/personal_data_manager.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/password_manager/encryptor.h" 1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/common/guid.h" 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_browser_process.h" 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/testing_profile.h" 20dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 21dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_details.h" 22dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_observer_mock.h" 23dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_registrar.h" 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_source.h" 25dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_type.h" 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h" 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "webkit/glue/form_data.h" 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "webkit/glue/form_data.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing webkit_glue::FormData; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochACTION(QuitUIMessageLoop) { 34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Quit(); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PersonalDataLoadedObserverMock : public PersonalDataManager::Observer { 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PersonalDataLoadedObserverMock() {} 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~PersonalDataLoadedObserverMock() {} 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MOCK_METHOD0(OnPersonalDataLoaded, void()); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PersonalDataManagerTest : public testing::Test { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PersonalDataManagerTest() 49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick : ui_thread_(BrowserThread::UI, &message_loop_), 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick db_thread_(BrowserThread::DB) { 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetUp() { 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_thread_.Start(); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_.reset(new TestingProfile); 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_->CreateWebDataService(false); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::DisableSystemServices(profile_.get()); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetPersonalDataManager(); 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void TearDown() { 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_ = NULL; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (profile_.get()) 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_.reset(NULL); 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch db_thread_.Stop(); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ResetPersonalDataManager() { 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_ = new PersonalDataManager(); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->Init(profile_.get()); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetObserver(&personal_data_observer_); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen ScopedTestingBrowserProcess browser_process_; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoopForUI message_loop_; 81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread ui_thread_; 82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread db_thread_; 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TestingProfile> profile_; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<PersonalDataManager> personal_data_; 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationObserverMock observer_; 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PersonalDataLoadedObserverMock personal_data_observer_; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(jhawkins): Test SetProfiles w/out a WebDataService in the profile. 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, SetProfiles) { 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile0; 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile0, 94dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Marion", "Mitchell", "Morrison", 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "91601", "US", "12345678910", "01987654321"); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile1; 99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile1, 100dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Josephine", "Alicia", "Saenz", 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "joewayne@me.xyz", "Fox", "903 Apple Ct.", NULL, "Orlando", "FL", "32801", 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "US", "19482937549", "13502849239"); 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile2; 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile2, 106dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Josephine", "Alicia", "Saenz", 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "32801", "US", "19482937549", "13502849239"); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the mock observer is notified. 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add two test profiles to the database. 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile> update; 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile0); 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile1); 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetProfiles(&update); 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results1.size()); 126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile0.Compare(*results1.at(0))); 127513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile1.Compare(*results1.at(1))); 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Three operations in one: 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // - Update profile0 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // - Remove profile1 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // - Add profile2 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen profile0.SetInfo(NAME_FIRST, ASCIIToUTF16("John")); 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.clear(); 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile0); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile2); 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetProfiles(&update); 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results2.size()); 141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile0.Compare(*results2.at(0))); 142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile2.Compare(*results2.at(1))); 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reset the PersonalDataManager. This tests that the personal data was saved 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to the web database, and that we can load the profiles from the web 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // database. 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetPersonalDataManager(); 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the PersonalDataLoadedObserver is notified. 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify that we've loaded the profiles from the web database. 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results3 = personal_data_->profiles(); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results3.size()); 160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile0.Compare(*results3.at(0))); 161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile2.Compare(*results3.at(1))); 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(jhawkins): Test SetCreditCards w/out a WebDataService in the profile. 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, SetCreditCards) { 166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard creditcard0; 167dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&creditcard0, 168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "John Dillinger", "423456789012" /* Visa */, "01", "2010"); 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 170513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard creditcard1; 171dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&creditcard1, 172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "Bonnie Parker", "518765432109" /* Mastercard */, "12", "2012"); 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 174513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard creditcard2; 175dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&creditcard2, 176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "Clyde Barrow", "347666888555" /* American Express */, "04", "2015"); 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the mock observer is notified. 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add two test credit cards to the database. 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<CreditCard> update; 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(creditcard0); 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(creditcard1); 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetCreditCards(&update); 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<CreditCard*>& results1 = personal_data_->credit_cards(); 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results1.size()); 194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, creditcard0.Compare(*results1.at(0))); 195513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, creditcard1.Compare(*results1.at(1))); 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Three operations in one: 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // - Update creditcard0 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // - Remove creditcard1 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // - Add creditcard2 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen creditcard0.SetInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Joe")); 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.clear(); 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(creditcard0); 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(creditcard2); 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetCreditCards(&update); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results2.size()); 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(creditcard0, *results2.at(0)); 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(creditcard2, *results2.at(1)); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reset the PersonalDataManager. This tests that the personal data was saved 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to the web database, and that we can load the credit cards from the web 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // database. 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetPersonalDataManager(); 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the PersonalDataLoadedObserver is notified. 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify that we've loaded the credit cards from the web database. 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<CreditCard*>& results3 = personal_data_->credit_cards(); 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results3.size()); 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(creditcard0, *results3.at(0)); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(creditcard2, *results3.at(1)); 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, SetProfilesAndCreditCards) { 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile0; 234731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile0, 235dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Marion", "Mitchell", "Morrison", 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "91601", "US", "12345678910", "01987654321"); 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile1; 240731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile1, 241dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Josephine", "Alicia", "Saenz", 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "joewayne@me.xyz", "Fox", "903 Apple Ct.", NULL, "Orlando", "FL", "32801", 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "US", "19482937549", "13502849239"); 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard creditcard0; 246dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&creditcard0, 247513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "John Dillinger", "423456789012" /* Visa */, "01", "2010"); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard creditcard1; 250dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&creditcard1, 251513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch "Bonnie Parker", "518765432109" /* Mastercard */, "12", "2012"); 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL( 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_observer_, 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).Times(2).WillRepeatedly(QuitUIMessageLoop()); 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the mock observer is notified. 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add two test profiles to the database. 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile> update; 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile0); 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile1); 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetProfiles(&update); 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results1.size()); 270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile0.Compare(*results1.at(0))); 271513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(0, profile1.Compare(*results1.at(1))); 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MessageLoop::current()->Run(); 27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add two test credit cards to the database. 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<CreditCard> update_cc; 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update_cc.push_back(creditcard0); 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update_cc.push_back(creditcard1); 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetCreditCards(&update_cc); 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results2.size()); 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(creditcard0, *results2.at(0)); 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(creditcard1, *results2.at(1)); 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Determine uniqueness by inserting all of the GUIDs into a set and verifying 288513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // the size of the set matches the number of GUIDs. 289513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch std::set<std::string> guids; 290513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch guids.insert(profile0.guid()); 291513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch guids.insert(profile1.guid()); 292513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch guids.insert(creditcard0.guid()); 293513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch guids.insert(creditcard1.guid()); 294513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(4U, guids.size()); 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Test care for 50047. Makes sure that unique_ids_ is populated correctly on 2983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// load. 2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(PersonalDataManagerTest, PopulateUniqueIDsOnLoad) { 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile0; 301731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile0, 302dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "y", "", "", "", "", "", "", "", "", "", "", "", ""); 3033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // This will verify that the web database has been loaded and the notification 3053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // sent out. 3063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(personal_data_observer_, 3073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OnPersonalDataLoaded()).WillRepeatedly(QuitUIMessageLoop()); 3083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The message loop will exit when the mock observer is notified. 3103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MessageLoop::current()->Run(); 3113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Add the profile0 to the db. 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile> update; 3143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick update.push_back(profile0); 3153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick personal_data_->SetProfiles(&update); 3163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Reset the PersonalDataManager. This recreates PersonalDataManager, which 3183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // should populate unique_ids_. 3193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ResetPersonalDataManager(); 3203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The message loop will exit when the PersonalDataLoadedObserver is notified. 3223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MessageLoop::current()->Run(); 3233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Verify that we've loaded the profiles from the web database. 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 3263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_EQ(1U, results2.size()); 3273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Add a new profile. 329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile1; 330731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile1, 331dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "y", "", "", "", "", "", "", "", "", "", "", "", ""); 3323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick update.clear(); 3333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick update.push_back(*results2[0]); 3343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick update.push_back(profile1); 3353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick personal_data_->SetProfiles(&update); 3363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Make sure the two profiles have different ids (and neither equal to 0, 3383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // which is an invalid id). 339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results3 = personal_data_->profiles(); 3403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASSERT_EQ(2U, results3.size()); 341513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_NE(results3[0]->guid(), results3[1]->guid()); 342513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(guid::IsValidGUID(results3[0]->guid())); 343513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_TRUE(guid::IsValidGUID(results3[1]->guid())); 3443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, SetEmptyProfile) { 347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile0; 348731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile0, 349dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "", "", "", "", "", "", "", "", "", "", "", "", ""); 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the mock observer is notified. 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add the empty profile to the database. 360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile> update; 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile0); 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetProfiles(&update); 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check the local store of profiles, not yet saved to the web database. 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(0U, results1.size()); 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reset the PersonalDataManager. This tests that the personal data was saved 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to the web database, and that we can load the profiles from the web 370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // database. 371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetPersonalDataManager(); 372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the PersonalDataLoadedObserver is notified. 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify that we've loaded the profiles from the web database. 382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(0U, results2.size()); 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, SetEmptyCreditCard) { 387513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard creditcard0; 388dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetCreditCardInfo(&creditcard0, "", "", "", ""); 389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the mock observer is notified. 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add the empty credit card to the database. 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<CreditCard> update; 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(creditcard0); 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetCreditCards(&update); 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check the local store of credit cards, not yet saved to the web database. 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<CreditCard*>& results1 = personal_data_->credit_cards(); 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(0U, results1.size()); 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reset the PersonalDataManager. This tests that the personal data was saved 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to the web database, and that we can load the credit cards from the web 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // database. 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetPersonalDataManager(); 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the PersonalDataLoadedObserver is notified. 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify that we've loaded the credit cards from the web database. 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(0U, results2.size()); 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, Refresh) { 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile0; 427731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile0, 428dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Marion", "Mitchell", "Morrison", 429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "johnwayne@me.xyz", "Fox", "123 Zoo St.", "unit 5", "Hollywood", "CA", 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "91601", "US", "12345678910", "01987654321"); 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile1; 433731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::SetProfileInfo(&profile1, 434dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Josephine", "Alicia", "Saenz", 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "joewayne@me.xyz", "Fox", "903 Apple Ct.", NULL, "Orlando", "FL", "32801", 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "US", "19482937549", "13502849239"); 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add the test profiles to the database. 444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile> update; 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile0); 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile1); 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetProfiles(&update); 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 449513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Labels depend on other profiles in the list - update labels manually. 450ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<AutofillProfile *> profile_pointers; 451513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile_pointers.push_back(&profile0); 452513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile_pointers.push_back(&profile1); 453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile::AdjustInferredLabels(&profile_pointers); 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Wait for the refresh. 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results1.size()); 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(profile0, *results1.at(0)); 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(profile1, *results1.at(1)); 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 466ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile profile2; 467513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch autofill_test::SetProfileInfo(&profile2, 468dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Josephine", "Alicia", "Saenz", 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "joewayne@me.xyz", "Fox", "1212 Center.", "Bld. 5", "Orlando", "FL", 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "32801", "US", "19482937549", "13502849239"); 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 472513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Adjust all labels. 473513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch profile_pointers.push_back(&profile2); 474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile::AdjustInferredLabels(&profile_pointers); 475513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WebDataService* wds = profile_->GetWebDataService(Profile::EXPLICIT_ACCESS); 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_TRUE(wds); 478ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wds->AddAutofillProfile(profile2); 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->Refresh(); 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Wait for the refresh. 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 488ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(3U, results2.size()); 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(profile0, *results2.at(0)); 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(profile1, *results2.at(1)); 492513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch EXPECT_EQ(profile2, *results2.at(2)); 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wds->RemoveAutofillProfile(profile1.guid()); 495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wds->RemoveAutofillProfile(profile2.guid()); 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Before telling the PDM to refresh, simulate an edit to one of the profiles 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // via a SetProfile update (this would happen if the Autofill window was 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // open with a previous snapshot of the profiles, and something [e.g. sync] 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // removed a profile from the browser. In this edge case, we will end up 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // in a consistent state by dropping the write). 502ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen profile2.SetInfo(NAME_FIRST, ASCIIToUTF16("Jo")); 503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.clear(); 504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile0); 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(profile1); 506513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch update.push_back(profile2); 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetProfiles(&update); 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 515ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results3 = personal_data_->profiles(); 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(1U, results3.size()); 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_EQ(profile0, *results2.at(0)); 518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 520c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, ImportFormData) { 521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FormData form; 522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch webkit_glue::FormField field; 523731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "First name:", "first_name", "George", "text", &field); 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch form.fields.push_back(field); 526731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Last name:", "last_name", "Washington", "text", &field); 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch form.fields.push_back(field); 529731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Email:", "email", "theprez@gmail.com", "text", &field); 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch form.fields.push_back(field); 53272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 53372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address:", "address1", "21 Laussat St", "text", &field); 53472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 53572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 53672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "San Francisco", "text", &field); 53772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 53872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 53972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "California", "text", &field); 54072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 54172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 54272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zip", "94102", "text", &field); 54372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 54472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FormStructure form_structure(form); 545ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure.DetermineHeuristicTypes(); 54672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 54772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen forms.push_back(&form_structure); 54872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 54972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 55072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 55172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 55272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Wait for the refresh. 55372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_CALL(personal_data_observer_, 55472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 55572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 55672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MessageLoop::current()->Run(); 55772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 558ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected; 559dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected, "George", NULL, 56072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Washington", "theprez@gmail.com", NULL, "21 Laussat St", NULL, 56172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "San Francisco", "California", "94102", NULL, NULL, NULL); 562ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results = personal_data_->profiles(); 56372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(1U, results.size()); 56472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_EQ(0, expected.Compare(*results[0])); 56572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 56672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 56772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PersonalDataManagerTest, ImportFormDataBadEmail) { 56872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FormData form; 56972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen webkit_glue::FormField field; 57072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 57172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "First name:", "first_name", "George", "text", &field); 57272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 57372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 57472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Last name:", "last_name", "Washington", "text", &field); 57572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 57672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 57772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Email:", "email", "bogus", "text", &field); 57872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 57972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 58072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address:", "address1", "21 Laussat St", "text", &field); 58172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 58272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 58372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "San Francisco", "text", &field); 58472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 58572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 58672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "California", "text", &field); 58772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 58872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 58972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zip", "94102", "text", &field); 59072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FormStructure form_structure(form); 592ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure.DetermineHeuristicTypes(); 59372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch forms.push_back(&form_structure); 59572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 596ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(personal_data_->ImportFormData(forms, &imported_credit_card)); 597ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_EQ(static_cast<CreditCard*>(NULL), imported_credit_card); 598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 605ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results = personal_data_->profiles(); 606ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_EQ(0U, results.size()); 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PersonalDataManagerTest, ImportFormDataNotEnoughFilledFields) { 610201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FormData form; 611201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch webkit_glue::FormField field; 612201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 613201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "First name:", "first_name", "George", "text", &field); 614201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 615201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 616201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Last name:", "last_name", "Washington", "text", &field); 617201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 618201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 619201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Card number:", "card_number", "4111 1111 1111 1111", "text", &field); 620201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 621201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FormStructure form_structure(form); 622ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure.DetermineHeuristicTypes(); 62372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 624201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch forms.push_back(&form_structure); 62572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 62672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(personal_data_->ImportFormData(forms, &imported_credit_card)); 62772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 628201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 629201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the refresh. 630201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_CALL(personal_data_observer_, 631201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 632201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 63372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MessageLoop::current()->Run(); 63472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 635ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& profiles = personal_data_->profiles(); 636201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_EQ(0U, profiles.size()); 637201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::vector<CreditCard*>& credit_cards = personal_data_->credit_cards(); 638201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_EQ(0U, credit_cards.size()); 639201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 640201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 641201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben MurdochTEST_F(PersonalDataManagerTest, ImportPhoneNumberSplitAcrossMultipleFields) { 642201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FormData form; 643201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch webkit_glue::FormField field; 644201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 645201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "First name:", "first_name", "George", "text", &field); 646201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 647201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 648201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Last name:", "last_name", "Washington", "text", &field); 649201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 650201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 651201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Phone #:", "home_phone_area_code", "650", "text", &field); 652ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen field.max_length = 3; 653201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 654201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 655201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Phone #:", "home_phone_prefix", "555", "text", &field); 656ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen field.max_length = 3; 657201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 658201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 659201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Phone #:", "home_phone_suffix", "0000", "text", &field); 660ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen field.max_length = 4; 661201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form.fields.push_back(field); 66272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 66372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address:", "address1", "21 Laussat St", "text", &field); 66472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 66572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 66672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "San Francisco", "text", &field); 66772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 66872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 66972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "California", "text", &field); 67072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 67172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 67272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zip", "94102", "text", &field); 67372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form.fields.push_back(field); 674201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch FormStructure form_structure(form); 675ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure.DetermineHeuristicTypes(); 67672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 677201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch forms.push_back(&form_structure); 67872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 67972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 68072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 681201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 682201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Wait for the refresh. 683201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_CALL(personal_data_observer_, 684201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 685201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 686201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MessageLoop::current()->Run(); 687201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 688ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected; 689dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected, "George", NULL, 69072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Washington", NULL, NULL, "21 Laussat St", NULL, 69172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "San Francisco", "California", "94102", NULL, "6505550000", NULL); 692ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results = personal_data_->profiles(); 693201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ASSERT_EQ(1U, results.size()); 694201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, expected.Compare(*results[0])); 695201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 696201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 697c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(PersonalDataManagerTest, SetUniqueCreditCardLabels) { 698513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card0; 699ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen credit_card0.SetInfo(CREDIT_CARD_NAME, ASCIIToUTF16("John")); 700513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card1; 701ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen credit_card1.SetInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Paul")); 702513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card2; 703ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen credit_card2.SetInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Ringo")); 704513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card3; 705ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen credit_card3.SetInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Other")); 706513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card4; 707ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen credit_card4.SetInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Ozzy")); 708513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch CreditCard credit_card5; 709ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen credit_card5.SetInfo(CREDIT_CARD_NAME, ASCIIToUTF16("Dio")); 710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This will verify that the web database has been loaded and the notification 712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent out. 713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The message loop will exit when the mock observer is notified. 717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Add the test credit cards to the database. 720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<CreditCard> update; 721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(credit_card0); 722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(credit_card1); 723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(credit_card2); 724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(credit_card3); 725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(credit_card4); 726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch update.push_back(credit_card5); 727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch personal_data_->SetCreditCards(&update); 728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 729731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Reset the PersonalDataManager. This tests that the personal data was saved 730731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // to the web database, and that we can load the credit cards from the web 731731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // database. 732731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ResetPersonalDataManager(); 733731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 734731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // This will verify that the web database has been loaded and the notification 735731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // sent out. 736731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_CALL(personal_data_observer_, 737731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 738731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 739731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // The message loop will exit when the mock observer is notified. 740731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick MessageLoop::current()->Run(); 741731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::vector<CreditCard*>& results = personal_data_->credit_cards(); 743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(6U, results.size()); 744dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(credit_card0.guid(), results[0]->guid()); 745dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(credit_card1.guid(), results[1]->guid()); 746dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(credit_card2.guid(), results[2]->guid()); 747dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(credit_card3.guid(), results[3]->guid()); 748dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(credit_card4.guid(), results[4]->guid()); 749dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen EXPECT_EQ(credit_card5.guid(), results[5]->guid()); 750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateTwoDifferentProfiles) { 7534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch webkit_glue::FormField field; 755731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "First name:", "first_name", "George", "text", &field); 7574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 758731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Last name:", "last_name", "Washington", "text", &field); 7604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 761731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Email:", "email", "theprez@gmail.com", "text", &field); 7634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 76472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 76572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address:", "address1", "21 Laussat St", "text", &field); 76672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 76772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 76872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "San Francisco", "text", &field); 76972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 77072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 77172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "California", "text", &field); 77272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 77372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 77472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zip", "94102", "text", &field); 77572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 778ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 77972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 7804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 78172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 78272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 78372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 791ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected; 792dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected, "George", NULL, 79372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Washington", "theprez@gmail.com", NULL, "21 Laussat St", NULL, 79472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "San Francisco", "California", "94102", NULL, NULL, NULL); 795ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 7964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results1.size()); 7974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results1[0])); 798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now create a completely different profile. 8004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 801731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "First name:", "first_name", "John", "text", &field); 8034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 804731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Last name:", "last_name", "Adams", "text", &field); 8064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 807731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Email:", "email", "second@gmail.com", "text", &field); 8094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 81072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 811ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Address:", "address1", "22 Laussat St", "text", &field); 81272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 81372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 81472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "San Francisco", "text", &field); 81572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 81672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 81772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "California", "text", &field); 81872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 81972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 82072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zip", "94102", "text", &field); 82172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 824ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 8254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 8264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 82772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 82872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 836ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 8374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 838ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected2; 839dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected2, "John", NULL, 840ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Adams", "second@gmail.com", NULL, "22 Laussat St", NULL, 84172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "San Francisco", "California", "94102", NULL, NULL, NULL); 842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(2U, results2.size()); 8434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results2[0])); 8444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected2.Compare(*results2[1])); 8454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 8464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 847ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(PersonalDataManagerTest, AggregateTwoProfilesWithMultiValue) { 848ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FormData form1; 849ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen webkit_glue::FormField field; 850ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 851ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "First name:", "first_name", "George", "text", &field); 852ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form1.fields.push_back(field); 853ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 854ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Last name:", "last_name", "Washington", "text", &field); 855ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form1.fields.push_back(field); 856ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 857ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Email:", "email", "theprez@gmail.com", "text", &field); 858ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form1.fields.push_back(field); 859ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 860ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Address:", "address1", "21 Laussat St", "text", &field); 861ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form1.fields.push_back(field); 862ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 863ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "City:", "city", "San Francisco", "text", &field); 864ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form1.fields.push_back(field); 865ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 866ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "State:", "state", "California", "text", &field); 867ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form1.fields.push_back(field); 868ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 869ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Zip:", "zip", "94102", "text", &field); 870ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form1.fields.push_back(field); 871ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 872ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FormStructure form_structure1(form1); 873ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 874ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<const FormStructure*> forms; 875ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen forms.push_back(&form_structure1); 876ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const CreditCard* imported_credit_card; 877ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 878ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_FALSE(imported_credit_card); 879ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 880ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for the refresh. 881ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(personal_data_observer_, 882ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 883ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 884ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MessageLoop::current()->Run(); 885ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 886ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected; 887ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::SetProfileInfo(&expected, "George", NULL, 888ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Washington", "theprez@gmail.com", NULL, "21 Laussat St", NULL, 889ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "San Francisco", "California", "94102", NULL, NULL, NULL); 890ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 891ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_EQ(1U, results1.size()); 892ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(0, expected.Compare(*results1[0])); 893ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 894ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Now create a completely different profile. 895ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FormData form2; 896ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 897ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "First name:", "first_name", "John", "text", &field); 898ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form2.fields.push_back(field); 899ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 900ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Last name:", "last_name", "Adams", "text", &field); 901ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form2.fields.push_back(field); 902ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 903ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Email:", "email", "second@gmail.com", "text", &field); 904ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form2.fields.push_back(field); 905ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 906ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Address:", "address1", "21 Laussat St", "text", &field); 907ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form2.fields.push_back(field); 908ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 909ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "City:", "city", "San Francisco", "text", &field); 910ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form2.fields.push_back(field); 911ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 912ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "State:", "state", "California", "text", &field); 913ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form2.fields.push_back(field); 914ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen autofill_test::CreateTestFormField( 915ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Zip:", "zip", "94102", "text", &field); 916ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form2.fields.push_back(field); 917ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 918ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen FormStructure form_structure2(form2); 919ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 920ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen forms.clear(); 921ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen forms.push_back(&form_structure2); 922ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 923ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_FALSE(imported_credit_card); 924ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 925ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wait for the refresh. 926ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_CALL(personal_data_observer_, 927ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 928ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 929ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MessageLoop::current()->Run(); 930ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 931ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 932ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 933ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Modify expected to include multi-valued fields. 934ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<string16> values; 935ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected.GetMultiInfo(NAME_FULL, &values); 936ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen values.push_back(ASCIIToUTF16("John Adams")); 937ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected.SetMultiInfo(NAME_FULL, values); 938ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected.GetMultiInfo(EMAIL_ADDRESS, &values); 939ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen values.push_back(ASCIIToUTF16("second@gmail.com")); 940ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected.SetMultiInfo(EMAIL_ADDRESS, values); 941ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 942ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_EQ(1U, results2.size()); 943ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(0, expected.CompareMulti(*results2[0])); 944ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 945ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateSameProfileWithConflict) { 9474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 9484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 9494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 9504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "First name:", "first_name", "George", "text", &field); 9514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 9524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 9534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Last name:", "last_name", "Washington", "text", &field); 9544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 9554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 9564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Address:", "address", "1600 Pennsylvania Avenue", "text", &field); 9574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 9584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 959201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Address Line 2:", "address2", "Suite A", "text", &field); 960201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form1.fields.push_back(field); 961201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 96272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "San Francisco", "text", &field); 96372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 96472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 96572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "California", "text", &field); 96672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 96772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 96872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zip", "94102", "text", &field); 96972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 97072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 9714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Email:", "email", "theprez@gmail.com", "text", &field); 9724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 973201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Phone gets updated. 974201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 975201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Phone:", "phone", "4445556666", "text", &field); 976201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form1.fields.push_back(field); 9774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 9784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 979ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 98072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 9814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 98272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 98372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 98472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 9854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 9864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 9874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 9884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 9894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 9904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 9914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 992ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected; 993dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected, "George", NULL, 994201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Washington", "theprez@gmail.com", NULL, "1600 Pennsylvania Avenue", 99572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Suite A", "San Francisco", "California", "94102", NULL, "4445556666", 99672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NULL); 997ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 9984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results1.size()); 9994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results1[0])); 10004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Now create an updated profile. 10024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 10034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 10044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "First name:", "first_name", "George", "text", &field); 10054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 10064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 10074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Last name:", "last_name", "Washington", "text", &field); 10084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 10094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 10104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Address:", "address", "1600 Pennsylvania Avenue", "text", &field); 10114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1012201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 1013201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Address Line 2:", "address2", "Suite A", "text", &field); 1014201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form2.fields.push_back(field); 1015201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch autofill_test::CreateTestFormField( 101672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "San Francisco", "text", &field); 101772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 101872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 101972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "California", "text", &field); 102072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 102172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 102272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zip", "94102", "text", &field); 102372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 102472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 1025201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Email:", "email", "theprez@gmail.com", "text", &field); 1026201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch form2.fields.push_back(field); 10274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Country gets added. 10284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 10294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Country:", "country", "USA", "text", &field); 10304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1031201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Phone gets updated. 10324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 1033201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Phone:", "phone", "1231231234", "text", &field); 10344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 10354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1037ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 10384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 10394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 104072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 104172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 10424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 10444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 10454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 10464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 10484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1049ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 10504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1051ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Add multi-valued phone number to expectation. Also, country gets added. 1052ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::vector<string16> values; 1053ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected.GetMultiInfo(PHONE_HOME_WHOLE_NUMBER, &values); 1054ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen values.push_back(ASCIIToUTF16("1231231234")); 1055ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected.SetMultiInfo(PHONE_HOME_WHOLE_NUMBER, values); 1056ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen expected.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("United States")); 10574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 1058ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ(0, expected.CompareMulti(*results2[0])); 10594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 10604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateProfileWithMissingInfoInOld) { 10624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 10634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 10644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 10654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "First name:", "first_name", "George", "text", &field); 10664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 10674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 10684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Last name:", "last_name", "Washington", "text", &field); 10694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 10704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 107172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address Line 1:", "address", "190 High Street", "text", &field); 107272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 107372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 107472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "Philadelphia", "text", &field); 107572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 107672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 107772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "Pennsylvania", "text", &field); 107872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 107972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 108072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zipcode", "19106", "text", &field); 10814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 10824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1084ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 108572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 10864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 108772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 108872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 108972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 10904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 10914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 10924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 10934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 1094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 10964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1097ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected; 1098dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected, "George", NULL, 109972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Washington", NULL, NULL, "190 High Street", NULL, 110072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Philadelphia", "Pennsylvania", "19106", NULL, NULL, NULL); 1101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 11024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results1.size()); 11034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results1[0])); 1104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Submit a form with new data for the first profile. 11064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 1107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 1108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "First name:", "first_name", "George", "text", &field); 11094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 1111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Last name:", "last_name", "Washington", "text", &field); 11124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 111472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Email:", "email", "theprez@gmail.com", "text", &field); 111572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 111672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 1117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Address Line 1:", "address", "190 High Street", "text", &field); 11184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 1120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "City:", "city", "Philadelphia", "text", &field); 11214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 1123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "State:", "state", "Pennsylvania", "text", &field); 11244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick autofill_test::CreateTestFormField( 1126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Zip:", "zipcode", "19106", "text", &field); 11274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 1128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 11314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 11324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 113372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 113472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 1135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 1137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_CALL(personal_data_observer_, 1138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 1139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop::current()->Run(); 1141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 1143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected2; 1145dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected2, "George", NULL, 1146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Washington", "theprez@gmail.com", NULL, "190 High Street", NULL, 1147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch "Philadelphia", "Pennsylvania", "19106", NULL, NULL, NULL); 11484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 11494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected2.Compare(*results2[0])); 11504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 1151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateProfileWithMissingInfoInNew) { 11534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 11544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 11554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 11564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "First name:", "first_name", "George", "text", &field); 11574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 11584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 11594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Last name:", "last_name", "Washington", "text", &field); 11604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 11614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 11624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Company:", "company", "Government", "text", &field); 11634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 11644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 11654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Email:", "email", "theprez@gmail.com", "text", &field); 11664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 116772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 116872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address Line 1:", "address", "190 High Street", "text", &field); 116972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 117072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 117172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "Philadelphia", "text", &field); 117272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 117372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 117472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "Pennsylvania", "text", &field); 117572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 117672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 117772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zipcode", "19106", "text", &field); 117872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 11794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 11804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 118272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 11834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 118472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 118572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 118672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 11874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 11884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 11894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 11904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 11914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 11924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 11934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutofillProfile expected; 1195dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen autofill_test::SetProfileInfo(&expected, "George", NULL, 119672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Washington", "theprez@gmail.com", "Government", "190 High Street", NULL, 119772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Philadelphia", "Pennsylvania", "19106", NULL, NULL, NULL); 1198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results1 = personal_data_->profiles(); 11994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results1.size()); 12004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results1[0])); 12014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 12024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Submit a form with new data for the first profile. 12034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 12044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 12054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "First name:", "first_name", "George", "text", &field); 12064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 12074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 12084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Last name:", "last_name", "Washington", "text", &field); 12094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 12104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note missing Company field. 12114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 12124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Email:", "email", "theprez@gmail.com", "text", &field); 12134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 121472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 121572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address Line 1:", "address", "190 High Street", "text", &field); 121672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 121772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 121872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "Philadelphia", "text", &field); 121972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 122072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 122172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "State:", "state", "Pennsylvania", "text", &field); 122272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 122372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 122472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Zip:", "zipcode", "19106", "text", &field); 122572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form2.fields.push_back(field); 12264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 12274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 12294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 12304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 123172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 123272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 12334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 12344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 12354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 12364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 12374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 12384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 12394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& results2 = personal_data_->profiles(); 12414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 12424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Expect no change. 12434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 12444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results2[0])); 12454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 12464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 124772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST_F(PersonalDataManagerTest, AggregateProfileWithInsufficientAddress) { 124872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FormData form1; 124972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen webkit_glue::FormField field; 125072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 125172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "First name:", "first_name", "George", "text", &field); 125272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 125372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 125472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Last name:", "last_name", "Washington", "text", &field); 125572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 125672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 125772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Company:", "company", "Government", "text", &field); 125872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 125972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 126072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Email:", "email", "theprez@gmail.com", "text", &field); 126172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 126272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 126372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "Address Line 1:", "address", "190 High Street", "text", &field); 126472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 126572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen autofill_test::CreateTestFormField( 126672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen "City:", "city", "Philadelphia", "text", &field); 126772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen form1.fields.push_back(field); 126872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 126972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FormStructure form_structure1(form1); 1270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 127172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 127272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen forms.push_back(&form_structure1); 127372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 127472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(personal_data_->ImportFormData(forms, &imported_credit_card)); 127572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 127672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 127772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Wait for the refresh. 127872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_CALL(personal_data_observer_, 127972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 128072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 128172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen MessageLoop::current()->Run(); 128272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::vector<AutofillProfile*>& profiles = personal_data_->profiles(); 128472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(0U, profiles.size()); 128572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::vector<CreditCard*>& credit_cards = personal_data_->credit_cards(); 128672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_EQ(0U, credit_cards.size()); 128772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 128872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 128972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateTwoDifferentCreditCards) { 12914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 12924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 12934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Start with a single valid credit card form. 12944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 12954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 12964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 12974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 12984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 12994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111-1111-1111-1111", "text", &field); 13004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 13014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 13034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 13044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 13064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 13074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 131072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 13114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 131272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 131372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 131472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 131572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 131672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 13174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 13194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 13204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 13214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 13234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected; 13254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected, 1326dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 13274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results = personal_data_->credit_cards(); 13284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results.size()); 13294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results[0])); 13304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Add a second different valid credit card. 13324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 13334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Jim Johansen", "text", &field); 13354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 13364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "5500 0000 0000 0004", "text", &field); 13384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 13394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "02", "text", &field); 13414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 13424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2012", "text", &field); 13444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 13454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 13484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 13494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 135072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 135172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 135272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 135372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 13544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 13564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 13574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 13584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 13604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected2; 13624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected2, 1363dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Jim Johansen", "5500000000000004", "02", "2012"); 13644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 13654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(2U, results2.size()); 13664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results2[0])); 13674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected2.Compare(*results2[1])); 13684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 13694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateInvalidCreditCard) { 13714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 13724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Start with a single valid credit card form. 13744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 13754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 13774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 13784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111-1111-1111-1111", "text", &field); 13804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 13814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 13834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 13844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 13854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 13864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 13874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 139072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 13914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 139272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 139372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 139472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 139572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 139672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 13974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 13984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 13994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 14004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 14014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 14034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected; 14054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected, 1406dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 14074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results = personal_data_->credit_cards(); 14084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results.size()); 14094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results[0])); 14104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Add a second different invalid credit card. 14124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 14134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Jim Johansen", "text", &field); 14154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "1000000000000000", "text", &field); 14184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "02", "text", &field); 14214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2012", "text", &field); 14244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 14284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 14294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 143072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(personal_data_->ImportFormData(forms, &imported_credit_card)); 143172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 14324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note: no refresh here. 14344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 14364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 14374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results2[0])); 14384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 14394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateSameCreditCardWithConflict) { 14414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 14424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Start with a single valid credit card form. 14444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 14454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 14474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 14484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111-1111-1111-1111", "text", &field); 14504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 14514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 14534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 14544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 14564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 14574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 146072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 14614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 146272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 146372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 146472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 146572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 146672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 14674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 14694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 14704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 14714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 14734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected; 14754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected, 1476dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 14774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results = personal_data_->credit_cards(); 14784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results.size()); 14794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results[0])); 14804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Add a second different valid credit card where the year is different but 14824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // the credit card number matches. 14834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 14844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 14864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111 1111 1111 1111", "text", &field); 14894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 14924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 14944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2012", "text", &field); 14954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 14964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 14974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 14994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 15004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 150172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 150272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 150372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 150472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 15054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 15074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 15084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 15094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 15114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Expect that the newer information is saved. In this case the year is 15134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // updated to "2012". 15144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected2; 15154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected2, 1516dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2012"); 15174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 15184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 15194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected2.Compare(*results2[0])); 1520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 15214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateEmptyCreditCardWithConflict) { 15234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 15244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Start with a single valid credit card form. 15264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 15274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 15294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 15304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111-1111-1111-1111", "text", &field); 15324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 15334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 15354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 15364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 15384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 15394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1541ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 154272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 15434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 154472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 154572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 154672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 154772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 154872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 15494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 15514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 15524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 15534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 15554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected; 15574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected, 1558dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 15594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results = personal_data_->credit_cards(); 15604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results.size()); 15614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results[0])); 15624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Add a second credit card with no number. 15644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 15654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 15674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 15684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 15704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 15714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2012", "text", &field); 15734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 15744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1576ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 15774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 15784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 157972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(personal_data_->ImportFormData(forms, &imported_credit_card)); 1580ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_FALSE(imported_credit_card); 15814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note: no refresh here. 15834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // No change is expected. 15854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected2; 15864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected2, 1587dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 15884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 15894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 15904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected2.Compare(*results2[0])); 15914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 15924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateCreditCardWithMissingInfoInNew) { 15944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 15954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 15964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Start with a single valid credit card form. 15974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 15984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 15994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 16004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 16014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111-1111-1111-1111", "text", &field); 16034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 16044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 16064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 16074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 16094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 16104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1612ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 161372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 16144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 161572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 161672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 161772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 161872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 161972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 16204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 16224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 16234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 16244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 16264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected; 16284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected, 1629dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 16304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results = personal_data_->credit_cards(); 16314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results.size()); 16324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results[0])); 16334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Add a second different valid credit card where the name is missing but 16354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // the credit card number matches. 16364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 16374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note missing name. 16384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111111111111111", "text", &field); 16404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 16414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 16434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 16444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 16464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 16474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1649ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 16504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 16514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 165272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(personal_data_->ImportFormData(forms, &imported_credit_card)); 165372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_FALSE(imported_credit_card); 16544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note: no refresh here. 16564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // No change is expected. 16584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected2; 16594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected2, 1660dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 16614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 16624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 16634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected2.Compare(*results2[0])); 16644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 16654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_F(PersonalDataManagerTest, AggregateCreditCardWithMissingInfoInOld) { 16674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form1; 16684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Start with a single valid credit card form. 16704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch webkit_glue::FormField field; 16714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Note missing name. 16724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111-1111-1111-1111", "text", &field); 16744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 16754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 16774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 16784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 16794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 16804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form1.fields.push_back(field); 16814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure1(form1); 1683ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure1.DetermineHeuristicTypes(); 168472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<const FormStructure*> forms; 16854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure1); 168672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const CreditCard* imported_credit_card; 168772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 168872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 168972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 169072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 16914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 16934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 16944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 16954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 16974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 16984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected; 16994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected, 1700dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen NULL, "4111111111111111", "01", "2011"); 17014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results = personal_data_->credit_cards(); 17024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results.size()); 17034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected.Compare(*results[0])); 17044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 17054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Add a second different valid credit card where the year is different but 17064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // the credit card number matches. 17074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormData form2; 17084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 17094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Name on card:", "name_on_card", "Biggie Smalls", "text", &field); 17104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 17114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 17124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Card Number:", "card_number", "4111-1111-1111-1111", "text", &field); 17134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 17144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 17154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Month:", "exp_month", "01", "text", &field); 17164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 17174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::CreateTestFormField( 17184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch "Exp Year:", "exp_year", "2011", "text", &field); 17194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch form2.fields.push_back(field); 17204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 17214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch FormStructure form_structure2(form2); 1722ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen form_structure2.DetermineHeuristicTypes(); 17234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.clear(); 17244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch forms.push_back(&form_structure2); 172572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(personal_data_->ImportFormData(forms, &imported_credit_card)); 172672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ASSERT_TRUE(imported_credit_card); 172772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen personal_data_->SaveImportedCreditCard(*imported_credit_card); 172872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete imported_credit_card; 17294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 17304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Wait for the refresh. 17314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_CALL(personal_data_observer_, 17324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch OnPersonalDataLoaded()).WillOnce(QuitUIMessageLoop()); 17334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 17344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch MessageLoop::current()->Run(); 17354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 17364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Expect that the newer information is saved. In this case the year is 17374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // added to the existing credit card. 17384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch CreditCard expected2; 17394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch autofill_test::SetCreditCardInfo(&expected2, 1740dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen "Biggie Smalls", "4111111111111111", "01", "2011"); 17414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::vector<CreditCard*>& results2 = personal_data_->credit_cards(); 17424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_EQ(1U, results2.size()); 17434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ(0, expected2.Compare(*results2[0])); 17444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 1745