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