Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Side by Side Diff: chrome/browser/sync/profile_sync_service_password_unittest.cc

Issue 2858027: Update the Nigori node when the passphrase changes. (Closed)
Patch Set: rebase Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/sync/engine/syncapi.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 #include "base/task.h" 9 #include "base/task.h"
10 #include "base/time.h" 10 #include "base/time.h"
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 notification_service_->Init(); 115 notification_service_->Init();
116 } 116 }
117 117
118 virtual void TearDown() { 118 virtual void TearDown() {
119 service_.reset(); 119 service_.reset();
120 notification_service_->TearDown(); 120 notification_service_->TearDown();
121 db_thread_.Stop(); 121 db_thread_.Stop();
122 MessageLoop::current()->RunAllPending(); 122 MessageLoop::current()->RunAllPending();
123 } 123 }
124 124
125 void StartSyncService(Task* task) { 125 void StartSyncService(Task* root_task, Task* node_task) {
126 if (!service_.get()) { 126 if (!service_.get()) {
127 service_.reset(new TestProfileSyncService(&factory_, &profile_, 127 service_.reset(new TestProfileSyncService(&factory_, &profile_,
128 false, false)); 128 false, false));
129 service_->AddObserver(&observer_); 129 service_->AddObserver(&observer_);
130 PasswordDataTypeController* data_type_controller = 130 PasswordDataTypeController* data_type_controller =
131 new PasswordDataTypeController(&factory_, 131 new PasswordDataTypeController(&factory_,
132 &profile_, 132 &profile_,
133 service_.get()); 133 service_.get());
134 134
135 EXPECT_CALL(factory_, CreatePasswordSyncComponents(_, _, _)). 135 EXPECT_CALL(factory_, CreatePasswordSyncComponents(_, _, _)).
136 WillOnce(MakePasswordSyncComponents(service_.get(), 136 WillOnce(MakePasswordSyncComponents(service_.get(),
137 password_store_.get(), 137 password_store_.get(),
138 data_type_controller)); 138 data_type_controller));
139 EXPECT_CALL(factory_, CreateDataTypeManager(_, _)). 139 EXPECT_CALL(factory_, CreateDataTypeManager(_, _)).
140 WillOnce(MakeDataTypeManager(&backend_)); 140 WillOnce(MakeDataTypeManager(&backend_));
141 141
142 EXPECT_CALL(profile_, GetPasswordStore(_)). 142 EXPECT_CALL(profile_, GetPasswordStore(_)).
143 WillOnce(Return(password_store_.get())); 143 WillOnce(Return(password_store_.get()));
144 144
145 // State changes once for the backend init and once for startup done. 145 // State changes once for the backend init and once for startup done.
146 EXPECT_CALL(observer_, OnStateChanged()). 146 EXPECT_CALL(observer_, OnStateChanged()).
147 WillOnce(Return()). 147 WillOnce(InvokeTask(root_task)).
148 WillOnce(Return()). 148 WillOnce(Return()).
149 WillOnce(QuitUIMessageLoop()); 149 WillOnce(QuitUIMessageLoop());
150 150
151 service_->RegisterDataTypeController(data_type_controller); 151 service_->RegisterDataTypeController(data_type_controller);
152 service_->Initialize(); 152 service_->Initialize();
153 MessageLoop::current()->Run(); 153 MessageLoop::current()->Run();
154 154
155 EXPECT_CALL(observer_, OnStateChanged()). 155 // Only set the passphrase if we actually created the password and nigori
156 WillOnce(InvokeTask(task)). 156 // root nodes.
157 WillOnce(Return()). 157 if (root_task) {
158 WillOnce(QuitUIMessageLoop()); 158 EXPECT_CALL(observer_, OnStateChanged()).
159 WillOnce(InvokeTask(node_task)).
160 WillOnce(Return()).
161 WillOnce(QuitUIMessageLoop());
159 162
160 service_->SetPassphrase("foo"); 163 service_->SetPassphrase("foo");
161 MessageLoop::current()->Run(); 164 MessageLoop::current()->Run();
165 }
162 } 166 }
163 } 167 }
164 168
165 void CreatePasswordRoot() { 169 void CreatePasswordRoot() {
166 UserShare* user_share = service_->backend()->GetUserShareHandle(); 170 UserShare* user_share = service_->backend()->GetUserShareHandle();
167 DirectoryManager* dir_manager = user_share->dir_manager.get(); 171 DirectoryManager* dir_manager = user_share->dir_manager.get();
168 172
169 ScopedDirLookup dir(dir_manager, user_share->authenticated_name); 173 ScopedDirLookup dir(dir_manager, user_share->authenticated_name);
170 ASSERT_TRUE(dir.good()); 174 ASSERT_TRUE(dir.good());
171 175
172 WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__); 176 WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__);
173 MutableEntry node(&wtrans, 177
174 CREATE, 178 MutableEntry password_node(&wtrans,
175 wtrans.root_id(), 179 CREATE,
176 browser_sync::kPasswordTag); 180 wtrans.root_id(),
177 node.Put(UNIQUE_SERVER_TAG, browser_sync::kPasswordTag); 181 browser_sync::kPasswordTag);
178 node.Put(IS_DIR, true); 182 password_node.Put(UNIQUE_SERVER_TAG, browser_sync::kPasswordTag);
179 node.Put(SERVER_IS_DIR, false); 183 password_node.Put(IS_DIR, true);
180 node.Put(IS_UNSYNCED, false); 184 password_node.Put(SERVER_IS_DIR, false);
181 node.Put(IS_UNAPPLIED_UPDATE, false); 185 password_node.Put(IS_UNSYNCED, false);
182 node.Put(SERVER_VERSION, 20); 186 password_node.Put(IS_UNAPPLIED_UPDATE, false);
183 node.Put(BASE_VERSION, 20); 187 password_node.Put(SERVER_VERSION, 20);
184 node.Put(IS_DEL, false); 188 password_node.Put(BASE_VERSION, 20);
185 node.Put(ID, ids_.MakeServer(browser_sync::kPasswordTag)); 189 password_node.Put(IS_DEL, false);
186 sync_pb::EntitySpecifics specifics; 190 password_node.Put(ID, ids_.MakeServer(browser_sync::kPasswordTag));
187 specifics.MutableExtension(sync_pb::password); 191 sync_pb::EntitySpecifics password_specifics;
188 node.Put(SPECIFICS, specifics); 192 password_specifics.MutableExtension(sync_pb::password);
193 password_node.Put(SPECIFICS, password_specifics);
194 }
195
196 void CreateNigoriRoot() {
197 UserShare* user_share = service_->backend()->GetUserShareHandle();
198 DirectoryManager* dir_manager = user_share->dir_manager.get();
199
200 ScopedDirLookup dir(dir_manager, user_share->authenticated_name);
201 ASSERT_TRUE(dir.good());
202
203 WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__);
204
205 MutableEntry nigori_node(&wtrans,
206 CREATE,
207 wtrans.root_id(),
208 browser_sync::kNigoriTag);
209 nigori_node.Put(UNIQUE_SERVER_TAG, browser_sync::kNigoriTag);
210 nigori_node.Put(IS_DIR, false);
211 nigori_node.Put(SERVER_IS_DIR, false);
212 nigori_node.Put(IS_UNSYNCED, false);
213 nigori_node.Put(IS_UNAPPLIED_UPDATE, false);
214 nigori_node.Put(SERVER_VERSION, 20);
215 nigori_node.Put(BASE_VERSION, 20);
216 nigori_node.Put(IS_DEL, false);
217 nigori_node.Put(ID, ids_.MakeServer(browser_sync::kNigoriTag));
218 sync_pb::EntitySpecifics nigori_specifics;
219 nigori_specifics.MutableExtension(sync_pb::nigori);
220 nigori_node.Put(SPECIFICS, nigori_specifics);
189 } 221 }
190 222
191 void AddPasswordSyncNode(const PasswordForm& entry) { 223 void AddPasswordSyncNode(const PasswordForm& entry) {
192 sync_api::WriteTransaction trans( 224 sync_api::WriteTransaction trans(
193 service_->backend()->GetUserShareHandle()); 225 service_->backend()->GetUserShareHandle());
194 sync_api::ReadNode password_root(&trans); 226 sync_api::ReadNode password_root(&trans);
195 ASSERT_TRUE(password_root.InitByTagLookup(browser_sync::kPasswordTag)); 227 ASSERT_TRUE(password_root.InitByTagLookup(browser_sync::kPasswordTag));
196 228
197 sync_api::WriteNode node(&trans); 229 sync_api::WriteNode node(&trans);
198 std::string tag = PasswordModelAssociator::MakeTag(entry); 230 std::string tag = PasswordModelAssociator::MakeTag(entry);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 lhs.username_value == rhs.username_value && 265 lhs.username_value == rhs.username_value &&
234 lhs.password_element == rhs.password_element && 266 lhs.password_element == rhs.password_element &&
235 lhs.password_value == rhs.password_value && 267 lhs.password_value == rhs.password_value &&
236 lhs.ssl_valid == rhs.ssl_valid && 268 lhs.ssl_valid == rhs.ssl_valid &&
237 lhs.preferred == rhs.preferred && 269 lhs.preferred == rhs.preferred &&
238 lhs.date_created == rhs.date_created && 270 lhs.date_created == rhs.date_created &&
239 lhs.blacklisted_by_user == rhs.blacklisted_by_user; 271 lhs.blacklisted_by_user == rhs.blacklisted_by_user;
240 } 272 }
241 273
242 void SetIdleChangeProcessorExpectations() { 274 void SetIdleChangeProcessorExpectations() {
243 EXPECT_CALL(*(password_store_.get()), AddLoginImpl(_)).Times(0); 275 EXPECT_CALL(*password_store_, AddLoginImpl(_)).Times(0);
244 EXPECT_CALL(*(password_store_.get()), UpdateLoginImpl(_)).Times(0); 276 EXPECT_CALL(*password_store_, UpdateLoginImpl(_)).Times(0);
245 EXPECT_CALL(*(password_store_.get()), RemoveLoginImpl(_)).Times(0); 277 EXPECT_CALL(*password_store_, RemoveLoginImpl(_)).Times(0);
246 } 278 }
247 279
248 friend class CreatePasswordRootTask; 280 friend class CreatePasswordRootTask;
281 friend class CreateNigoriRootTask;
249 friend class AddPasswordEntriesTask; 282 friend class AddPasswordEntriesTask;
250 283
251 MessageLoopForUI message_loop_; 284 MessageLoopForUI message_loop_;
252 ChromeThread ui_thread_; 285 ChromeThread ui_thread_;
253 ChromeThread db_thread_; 286 ChromeThread db_thread_;
254 scoped_refptr<ThreadNotificationService> notification_service_; 287 scoped_refptr<ThreadNotificationService> notification_service_;
255 288
256 scoped_ptr<TestProfileSyncService> service_; 289 scoped_ptr<TestProfileSyncService> service_;
257 ProfileMock profile_; 290 ProfileMock profile_;
258 ProfileSyncFactoryMock factory_; 291 ProfileSyncFactoryMock factory_;
259 ProfileSyncServiceObserverMock observer_; 292 ProfileSyncServiceObserverMock observer_;
260 SyncBackendHostMock backend_; 293 SyncBackendHostMock backend_;
261 scoped_refptr<MockPasswordStore> password_store_; 294 scoped_refptr<MockPasswordStore> password_store_;
262 295
263 TestIdFactory ids_; 296 TestIdFactory ids_;
264 }; 297 };
265 298
266 class CreatePasswordRootTask : public Task { 299 class CreatePasswordRootTask : public Task {
267 public: 300 public:
268 explicit CreatePasswordRootTask(ProfileSyncServicePasswordTest* test) 301 explicit CreatePasswordRootTask(ProfileSyncServicePasswordTest* test)
269 : test_(test) { 302 : test_(test) {
270 } 303 }
271 304
272 virtual void Run() { 305 virtual void Run() {
306 test_->CreateNigoriRoot();
273 test_->CreatePasswordRoot(); 307 test_->CreatePasswordRoot();
274 } 308 }
275 309
276 private: 310 private:
277 ProfileSyncServicePasswordTest* test_; 311 ProfileSyncServicePasswordTest* test_;
278 }; 312 };
279 313
314 class CreateNigoriRootTask : public Task {
315 public:
316 explicit CreateNigoriRootTask(ProfileSyncServicePasswordTest* test)
317 : test_(test) {
318 }
319
320 virtual void Run() {
321 test_->CreateNigoriRoot();
322 }
323
324 private:
325 ProfileSyncServicePasswordTest* test_;
326 };
327
280 class AddPasswordEntriesTask : public Task { 328 class AddPasswordEntriesTask : public Task {
281 public: 329 public:
282 AddPasswordEntriesTask(ProfileSyncServicePasswordTest* test, 330 AddPasswordEntriesTask(ProfileSyncServicePasswordTest* test,
283 const std::vector<PasswordForm>& entries) 331 const std::vector<PasswordForm>& entries)
284 : test_(test), entries_(entries) { 332 : test_(test), entries_(entries) {
285 } 333 }
286 334
287 virtual void Run() { 335 virtual void Run() {
288 test_->CreatePasswordRoot();
289 for (size_t i = 0; i < entries_.size(); ++i) { 336 for (size_t i = 0; i < entries_.size(); ++i) {
290 test_->AddPasswordSyncNode(entries_[i]); 337 test_->AddPasswordSyncNode(entries_[i]);
291 } 338 }
292 } 339 }
293 340
294 private: 341 private:
295 ProfileSyncServicePasswordTest* test_; 342 ProfileSyncServicePasswordTest* test_;
296 const std::vector<PasswordForm>& entries_; 343 const std::vector<PasswordForm>& entries_;
297 }; 344 };
298 345
299 TEST_F(ProfileSyncServicePasswordTest, FailModelAssociation) { 346 TEST_F(ProfileSyncServicePasswordTest, FailModelAssociation) {
300 // Backend will be paused but not resumed. 347 // Backend will be paused but not resumed.
301 EXPECT_CALL(backend_, RequestPause()). 348 EXPECT_CALL(backend_, RequestPause()).
302 WillRepeatedly(testing::DoAll(Notify(NotificationType::SYNC_PAUSED), 349 WillRepeatedly(testing::DoAll(Notify(NotificationType::SYNC_PAUSED),
303 testing::Return(true))); 350 testing::Return(true)));
304 // Don't create the root password node so startup fails. 351 // Create the nigori root node so that password model association is
305 StartSyncService(NULL); 352 // attempted, but not the password root node so that it fails.
353 CreateNigoriRootTask task(this);
354 StartSyncService(&task, NULL);
306 EXPECT_TRUE(service_->unrecoverable_error_detected()); 355 EXPECT_TRUE(service_->unrecoverable_error_detected());
307 } 356 }
308 357
309 TEST_F(ProfileSyncServicePasswordTest, EmptyNativeEmptySync) { 358 TEST_F(ProfileSyncServicePasswordTest, EmptyNativeEmptySync) {
310 EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) 359 EXPECT_CALL(*password_store_, FillAutofillableLogins(_))
311 .WillOnce(Return(true)); 360 .WillOnce(Return(true));
312 EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) 361 EXPECT_CALL(*password_store_, FillBlacklistLogins(_))
313 .WillOnce(Return(true)); 362 .WillOnce(Return(true));
314 SetIdleChangeProcessorExpectations(); 363 SetIdleChangeProcessorExpectations();
315 CreatePasswordRootTask task(this); 364 CreatePasswordRootTask task(this);
316 StartSyncService(&task); 365 StartSyncService(&task, NULL);
317 std::vector<PasswordForm> sync_entries; 366 std::vector<PasswordForm> sync_entries;
318 GetPasswordEntriesFromSyncDB(&sync_entries); 367 GetPasswordEntriesFromSyncDB(&sync_entries);
319 EXPECT_EQ(0U, sync_entries.size()); 368 EXPECT_EQ(0U, sync_entries.size());
320 } 369 }
321 370
322 TEST_F(ProfileSyncServicePasswordTest, HasNativeEntriesEmptySync) { 371 TEST_F(ProfileSyncServicePasswordTest, HasNativeEntriesEmptySync) {
323 std::vector<PasswordForm*> forms; 372 std::vector<PasswordForm*> forms;
324 std::vector<PasswordForm> expected_forms; 373 std::vector<PasswordForm> expected_forms;
325 PasswordForm* new_form = new PasswordForm; 374 PasswordForm* new_form = new PasswordForm;
326 new_form->scheme = PasswordForm::SCHEME_HTML; 375 new_form->scheme = PasswordForm::SCHEME_HTML;
327 new_form->signon_realm = "pie"; 376 new_form->signon_realm = "pie";
328 new_form->origin = GURL("http://pie.com"); 377 new_form->origin = GURL("http://pie.com");
329 new_form->action = GURL("http://pie.com/submit"); 378 new_form->action = GURL("http://pie.com/submit");
330 new_form->username_element = UTF8ToUTF16("name"); 379 new_form->username_element = UTF8ToUTF16("name");
331 new_form->username_value = UTF8ToUTF16("tom"); 380 new_form->username_value = UTF8ToUTF16("tom");
332 new_form->password_element = UTF8ToUTF16("cork"); 381 new_form->password_element = UTF8ToUTF16("cork");
333 new_form->password_value = UTF8ToUTF16("password1"); 382 new_form->password_value = UTF8ToUTF16("password1");
334 new_form->ssl_valid = true; 383 new_form->ssl_valid = true;
335 new_form->preferred = false; 384 new_form->preferred = false;
336 new_form->date_created = base::Time::FromInternalValue(1234); 385 new_form->date_created = base::Time::FromInternalValue(1234);
337 new_form->blacklisted_by_user = false; 386 new_form->blacklisted_by_user = false;
338 forms.push_back(new_form); 387 forms.push_back(new_form);
339 expected_forms.push_back(*new_form); 388 expected_forms.push_back(*new_form);
340 EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) 389 EXPECT_CALL(*password_store_, FillAutofillableLogins(_))
341 .WillOnce(DoAll(SetArgumentPointee<0>(forms), Return(true))); 390 .WillOnce(DoAll(SetArgumentPointee<0>(forms), Return(true)));
342 EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) 391 EXPECT_CALL(*password_store_, FillBlacklistLogins(_))
343 .WillOnce(Return(true)); 392 .WillOnce(Return(true));
344 SetIdleChangeProcessorExpectations(); 393 SetIdleChangeProcessorExpectations();
345 CreatePasswordRootTask task(this); 394 CreatePasswordRootTask task(this);
346 StartSyncService(&task); 395 StartSyncService(&task, NULL);
347 std::vector<PasswordForm> sync_forms; 396 std::vector<PasswordForm> sync_forms;
348 GetPasswordEntriesFromSyncDB(&sync_forms); 397 GetPasswordEntriesFromSyncDB(&sync_forms);
349 ASSERT_EQ(1U, sync_forms.size()); 398 ASSERT_EQ(1U, sync_forms.size());
350 EXPECT_TRUE(ComparePasswords(expected_forms[0], sync_forms[0])); 399 EXPECT_TRUE(ComparePasswords(expected_forms[0], sync_forms[0]));
351 } 400 }
352 401
353 TEST_F(ProfileSyncServicePasswordTest, HasNativeEntriesEmptySyncSameUsername) { 402 TEST_F(ProfileSyncServicePasswordTest, HasNativeEntriesEmptySyncSameUsername) {
354 std::vector<PasswordForm*> forms; 403 std::vector<PasswordForm*> forms;
355 std::vector<PasswordForm> expected_forms; 404 std::vector<PasswordForm> expected_forms;
356 405
(...skipping 25 matching lines...) Expand all
382 new_form->password_element = UTF8ToUTF16("cork"); 431 new_form->password_element = UTF8ToUTF16("cork");
383 new_form->password_value = UTF8ToUTF16("password2"); 432 new_form->password_value = UTF8ToUTF16("password2");
384 new_form->ssl_valid = true; 433 new_form->ssl_valid = true;
385 new_form->preferred = false; 434 new_form->preferred = false;
386 new_form->date_created = base::Time::FromInternalValue(1234); 435 new_form->date_created = base::Time::FromInternalValue(1234);
387 new_form->blacklisted_by_user = false; 436 new_form->blacklisted_by_user = false;
388 forms.push_back(new_form); 437 forms.push_back(new_form);
389 expected_forms.push_back(*new_form); 438 expected_forms.push_back(*new_form);
390 } 439 }
391 440
392 EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) 441 EXPECT_CALL(*password_store_, FillAutofillableLogins(_))
393 .WillOnce(DoAll(SetArgumentPointee<0>(forms), Return(true))); 442 .WillOnce(DoAll(SetArgumentPointee<0>(forms), Return(true)));
394 EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) 443 EXPECT_CALL(*password_store_, FillBlacklistLogins(_))
395 .WillOnce(Return(true)); 444 .WillOnce(Return(true));
396 SetIdleChangeProcessorExpectations(); 445 SetIdleChangeProcessorExpectations();
397 CreatePasswordRootTask task(this); 446 CreatePasswordRootTask task(this);
398 StartSyncService(&task); 447 StartSyncService(&task, NULL);
399 std::vector<PasswordForm> sync_forms; 448 std::vector<PasswordForm> sync_forms;
400 GetPasswordEntriesFromSyncDB(&sync_forms); 449 GetPasswordEntriesFromSyncDB(&sync_forms);
401 ASSERT_EQ(2U, sync_forms.size()); 450 ASSERT_EQ(2U, sync_forms.size());
402 EXPECT_TRUE(ComparePasswords(expected_forms[0], sync_forms[1])); 451 EXPECT_TRUE(ComparePasswords(expected_forms[0], sync_forms[1]));
403 EXPECT_TRUE(ComparePasswords(expected_forms[1], sync_forms[0])); 452 EXPECT_TRUE(ComparePasswords(expected_forms[1], sync_forms[0]));
404 } 453 }
405 454
406 TEST_F(ProfileSyncServicePasswordTest, HasNativeHasSyncNoMerge) { 455 TEST_F(ProfileSyncServicePasswordTest, HasNativeHasSyncNoMerge) {
407 std::vector<PasswordForm*> native_forms; 456 std::vector<PasswordForm*> native_forms;
408 std::vector<PasswordForm> sync_forms; 457 std::vector<PasswordForm> sync_forms;
(...skipping 28 matching lines...) Expand all
437 new_form.password_element = UTF8ToUTF16("cork2"); 486 new_form.password_element = UTF8ToUTF16("cork2");
438 new_form.password_value = UTF8ToUTF16("password12"); 487 new_form.password_value = UTF8ToUTF16("password12");
439 new_form.ssl_valid = false; 488 new_form.ssl_valid = false;
440 new_form.preferred = true; 489 new_form.preferred = true;
441 new_form.date_created = base::Time::FromInternalValue(12345); 490 new_form.date_created = base::Time::FromInternalValue(12345);
442 new_form.blacklisted_by_user = false; 491 new_form.blacklisted_by_user = false;
443 sync_forms.push_back(new_form); 492 sync_forms.push_back(new_form);
444 expected_forms.push_back(new_form); 493 expected_forms.push_back(new_form);
445 } 494 }
446 495
447 EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) 496 EXPECT_CALL(*password_store_, FillAutofillableLogins(_))
448 .WillOnce(DoAll(SetArgumentPointee<0>(native_forms), Return(true))); 497 .WillOnce(DoAll(SetArgumentPointee<0>(native_forms), Return(true)));
449 EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) 498 EXPECT_CALL(*password_store_, FillBlacklistLogins(_)).WillOnce(Return(true));
450 .WillOnce(Return(true)); 499 EXPECT_CALL(*password_store_, AddLoginImpl(_)).Times(1);
451 500
452 AddPasswordEntriesTask task(this, sync_forms); 501 CreatePasswordRootTask root_task(this);
453 502 AddPasswordEntriesTask node_task(this, sync_forms);
454 EXPECT_CALL(*(password_store_.get()), AddLoginImpl(_)).Times(1); 503 StartSyncService(&root_task, &node_task);
455 StartSyncService(&task);
456 504
457 std::vector<PasswordForm> new_sync_forms; 505 std::vector<PasswordForm> new_sync_forms;
458 GetPasswordEntriesFromSyncDB(&new_sync_forms); 506 GetPasswordEntriesFromSyncDB(&new_sync_forms);
459 507
460 EXPECT_EQ(2U, new_sync_forms.size()); 508 EXPECT_EQ(2U, new_sync_forms.size());
461 EXPECT_TRUE(ComparePasswords(expected_forms[0], new_sync_forms[0])); 509 EXPECT_TRUE(ComparePasswords(expected_forms[0], new_sync_forms[0]));
462 EXPECT_TRUE(ComparePasswords(expected_forms[1], new_sync_forms[1])); 510 EXPECT_TRUE(ComparePasswords(expected_forms[1], new_sync_forms[1]));
463 } 511 }
464 512
465 TEST_F(ProfileSyncServicePasswordTest, HasNativeHasSyncMergeEntry) { 513 TEST_F(ProfileSyncServicePasswordTest, HasNativeHasSyncMergeEntry) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 new_form.username_value = UTF8ToUTF16("tom"); 559 new_form.username_value = UTF8ToUTF16("tom");
512 new_form.password_element = UTF8ToUTF16("cork"); 560 new_form.password_element = UTF8ToUTF16("cork");
513 new_form.password_value = UTF8ToUTF16("password12"); 561 new_form.password_value = UTF8ToUTF16("password12");
514 new_form.ssl_valid = false; 562 new_form.ssl_valid = false;
515 new_form.preferred = true; 563 new_form.preferred = true;
516 new_form.date_created = base::Time::FromInternalValue(12345); 564 new_form.date_created = base::Time::FromInternalValue(12345);
517 new_form.blacklisted_by_user = false; 565 new_form.blacklisted_by_user = false;
518 expected_forms.push_back(new_form); 566 expected_forms.push_back(new_form);
519 } 567 }
520 568
521 EXPECT_CALL(*(password_store_.get()), FillAutofillableLogins(_)) 569 EXPECT_CALL(*password_store_, FillAutofillableLogins(_))
522 .WillOnce(DoAll(SetArgumentPointee<0>(native_forms), Return(true))); 570 .WillOnce(DoAll(SetArgumentPointee<0>(native_forms), Return(true)));
523 EXPECT_CALL(*(password_store_.get()), FillBlacklistLogins(_)) 571 EXPECT_CALL(*password_store_, FillBlacklistLogins(_)).WillOnce(Return(true));
524 .WillOnce(Return(true)); 572 EXPECT_CALL(*password_store_, UpdateLoginImpl(_)).Times(1);
525 573
526 AddPasswordEntriesTask task(this, sync_forms); 574 CreatePasswordRootTask root_task(this);
575 AddPasswordEntriesTask node_task(this, sync_forms);
527 576
528 EXPECT_CALL(*(password_store_.get()), UpdateLoginImpl(_)).Times(1); 577 StartSyncService(&root_task, &node_task);
529 StartSyncService(&task);
530 578
531 std::vector<PasswordForm> new_sync_forms; 579 std::vector<PasswordForm> new_sync_forms;
532 GetPasswordEntriesFromSyncDB(&new_sync_forms); 580 GetPasswordEntriesFromSyncDB(&new_sync_forms);
533 581
534 EXPECT_EQ(1U, new_sync_forms.size()); 582 EXPECT_EQ(1U, new_sync_forms.size());
535 EXPECT_TRUE(ComparePasswords(expected_forms[0], new_sync_forms[0])); 583 EXPECT_TRUE(ComparePasswords(expected_forms[0], new_sync_forms[0]));
536 } 584 }
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/syncapi.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698