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

Side by Side Diff: chrome/browser/password_manager/password_store_x_unittest.cc

Issue 7396013: Linux: revive a mysteriously disabled test and add tests for the GNOME Keyring native backend. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/file_util.h"
7 #include "base/platform_file.h"
6 #include "base/scoped_temp_dir.h" 8 #include "base/scoped_temp_dir.h"
7 #include "base/stl_util-inl.h" 9 #include "base/stl_util-inl.h"
8 #include "base/string_util.h" 10 #include "base/string_util.h"
9 #include "base/synchronization/waitable_event.h" 11 #include "base/synchronization/waitable_event.h"
10 #include "base/time.h" 12 #include "base/time.h"
13 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/password_manager/password_form_data.h" 14 #include "chrome/browser/password_manager/password_form_data.h"
12 #include "chrome/browser/password_manager/password_store_change.h" 15 #include "chrome/browser/password_manager/password_store_change.h"
16 #include "chrome/browser/password_manager/password_store_consumer.h"
13 #include "chrome/browser/password_manager/password_store_x.h" 17 #include "chrome/browser/password_manager/password_store_x.h"
18 #include "chrome/browser/prefs/pref_service.h"
14 #include "chrome/browser/webdata/web_data_service.h" 19 #include "chrome/browser/webdata/web_data_service.h"
20 #include "chrome/common/chrome_notification_types.h"
15 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
16 #include "chrome/test/signaling_task.h" 22 #include "chrome/test/signaling_task.h"
17 #include "chrome/test/testing_profile.h" 23 #include "chrome/test/testing_profile.h"
24 #include "content/common/notification_details.h"
18 #include "content/common/notification_observer_mock.h" 25 #include "content/common/notification_observer_mock.h"
19 #include "content/common/notification_service.h" 26 #include "content/common/notification_registrar.h"
27 #include "content/common/notification_source.h"
20 #include "testing/gmock/include/gmock/gmock.h" 28 #include "testing/gmock/include/gmock/gmock.h"
21 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
22 30
23 using base::WaitableEvent; 31 using base::WaitableEvent;
24 using testing::_; 32 using testing::_;
25 using testing::DoAll; 33 using testing::DoAll;
26 using testing::ElementsAreArray; 34 using testing::ElementsAreArray;
27 using testing::Pointee; 35 using testing::Pointee;
28 using testing::Property; 36 using testing::Property;
29 using testing::WithArg; 37 using testing::WithArg;
(...skipping 17 matching lines...) Expand all
47 }; 55 };
48 56
49 // This class will add and remove a mock notification observer from 57 // This class will add and remove a mock notification observer from
50 // the DB thread. 58 // the DB thread.
51 class DBThreadObserverHelper 59 class DBThreadObserverHelper
52 : public base::RefCountedThreadSafe<DBThreadObserverHelper, 60 : public base::RefCountedThreadSafe<DBThreadObserverHelper,
53 BrowserThread::DeleteOnDBThread> { 61 BrowserThread::DeleteOnDBThread> {
54 public: 62 public:
55 DBThreadObserverHelper() : done_event_(true, false) {} 63 DBThreadObserverHelper() : done_event_(true, false) {}
56 64
57 void Init() { 65 void Init(PasswordStore* password_store) {
58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 66 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
59 BrowserThread::PostTask( 67 BrowserThread::PostTask(
60 BrowserThread::DB, 68 BrowserThread::DB,
61 FROM_HERE, 69 FROM_HERE,
62 NewRunnableMethod(this, &DBThreadObserverHelper::AddObserverTask)); 70 NewRunnableMethod(this,
71 &DBThreadObserverHelper::AddObserverTask,
72 make_scoped_refptr(password_store)));
63 done_event_.Wait(); 73 done_event_.Wait();
64 } 74 }
65 75
66 virtual ~DBThreadObserverHelper() { 76 virtual ~DBThreadObserverHelper() {
67 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); 77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
68 registrar_.RemoveAll(); 78 registrar_.RemoveAll();
69 } 79 }
70 80
71 NotificationObserverMock& observer() { 81 NotificationObserverMock& observer() {
72 return observer_; 82 return observer_;
73 } 83 }
74 84
75 protected: 85 protected:
76 friend class base::RefCountedThreadSafe<DBThreadObserverHelper>; 86 friend class base::RefCountedThreadSafe<DBThreadObserverHelper>;
77 87
78 void AddObserverTask() { 88 void AddObserverTask(PasswordStore* password_store) {
79 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); 89 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
80 registrar_.Add(&observer_, 90 registrar_.Add(&observer_,
81 chrome::LOGINS_CHANGED, 91 chrome::NOTIFICATION_LOGINS_CHANGED,
82 NotificationService::AllSources()); 92 Source<PasswordStore>(password_store));
83 done_event_.Signal(); 93 done_event_.Signal();
84 } 94 }
85 95
86 WaitableEvent done_event_; 96 WaitableEvent done_event_;
87 NotificationRegistrar registrar_; 97 NotificationRegistrar registrar_;
88 NotificationObserverMock observer_; 98 NotificationObserverMock observer_;
89 }; 99 };
90 100
91 class FailingBackend : public PasswordStoreX::NativeBackend { 101 class FailingBackend : public PasswordStoreX::NativeBackend {
92 public: 102 public:
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 // The WDS schedules tasks to run on the DB thread so we schedule yet another 360 // The WDS schedules tasks to run on the DB thread so we schedule yet another
351 // task to notify us that it's safe to carry on with the test. 361 // task to notify us that it's safe to carry on with the test.
352 WaitableEvent done(false, false); 362 WaitableEvent done(false, false);
353 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 363 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
354 new SignalingTask(&done)); 364 new SignalingTask(&done));
355 done.Wait(); 365 done.Wait();
356 366
357 // Initializing the PasswordStore should trigger a migration. 367 // Initializing the PasswordStore should trigger a migration.
358 scoped_refptr<PasswordStoreX> store( 368 scoped_refptr<PasswordStoreX> store(
359 new PasswordStoreX(login_db_.release(), 369 new PasswordStoreX(login_db_.release(),
360 profile_.get(), 370 profile_.get(),
361 wds_.get(), 371 wds_.get(),
362 GetBackend())); 372 GetBackend()));
363 store->Init(); 373 store->Init();
364 374
365 // Check that the migration preference has not been initialized. 375 // Check that the migration preference has not been initialized.
366 ASSERT_TRUE(NULL == profile_->GetPrefs()->FindPreference( 376 ASSERT_TRUE(NULL == profile_->GetPrefs()->FindPreference(
367 prefs::kLoginDatabaseMigrated)); 377 prefs::kLoginDatabaseMigrated));
368 378
369 // Again, the WDS schedules tasks to run on the DB thread, so schedule a task 379 // Again, the WDS schedules tasks to run on the DB thread, so schedule a task
370 // to signal us when it is safe to continue. 380 // to signal us when it is safe to continue.
371 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 381 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
372 new SignalingTask(&done)); 382 new SignalingTask(&done));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 440 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
431 new SignalingTask(&done)); 441 new SignalingTask(&done));
432 done.Wait(); 442 done.Wait();
433 443
434 // Handle the callback from the WDS. 444 // Handle the callback from the WDS.
435 MessageLoop::current()->RunAllPending(); 445 MessageLoop::current()->RunAllPending();
436 446
437 STLDeleteElements(&expected_autofillable); 447 STLDeleteElements(&expected_autofillable);
438 STLDeleteElements(&expected_blacklisted); 448 STLDeleteElements(&expected_blacklisted);
439 449
440 store->Shutdown(); 450 // Public in PasswordStore, protected in PasswordStoreX.
451 static_cast<PasswordStore*>(store)->Shutdown();
441 } 452 }
442 453
443 TEST_P(PasswordStoreXTest, WDSMigrationAlreadyDone) { 454 TEST_P(PasswordStoreXTest, WDSMigrationAlreadyDone) {
444 PasswordFormData wds_data[] = { 455 PasswordFormData wds_data[] = {
445 { PasswordForm::SCHEME_HTML, 456 { PasswordForm::SCHEME_HTML,
446 "http://bar.example.com", 457 "http://bar.example.com",
447 "http://bar.example.com/origin", 458 "http://bar.example.com/origin",
448 "http://bar.example.com/action", 459 "http://bar.example.com/action",
449 L"submit_element", 460 L"submit_element",
450 L"username_element", 461 L"username_element",
(...skipping 15 matching lines...) Expand all
466 wds_->AddLogin(**it); 477 wds_->AddLogin(**it);
467 } 478 }
468 479
469 // The WDS schedules tasks to run on the DB thread so we schedule yet another 480 // The WDS schedules tasks to run on the DB thread so we schedule yet another
470 // task to notify us that it's safe to carry on with the test. 481 // task to notify us that it's safe to carry on with the test.
471 WaitableEvent done(false, false); 482 WaitableEvent done(false, false);
472 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 483 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
473 new SignalingTask(&done)); 484 new SignalingTask(&done));
474 done.Wait(); 485 done.Wait();
475 486
476 // Prentend that the migration has already taken place. 487 // Pretend that the migration has already taken place.
477 profile_->GetPrefs()->RegisterBooleanPref(prefs::kLoginDatabaseMigrated, 488 profile_->GetPrefs()->RegisterBooleanPref(prefs::kLoginDatabaseMigrated,
478 true, 489 true,
479 PrefService::UNSYNCABLE_PREF); 490 PrefService::UNSYNCABLE_PREF);
480 491
481 // Initializing the PasswordStore shouldn't trigger a migration. 492 // Initializing the PasswordStore shouldn't trigger a migration.
482 scoped_refptr<PasswordStoreX> store( 493 scoped_refptr<PasswordStoreX> store(
483 new PasswordStoreX(login_db_.release(), 494 new PasswordStoreX(login_db_.release(),
484 profile_.get(), 495 profile_.get(),
485 wds_.get(), 496 wds_.get(),
486 GetBackend())); 497 GetBackend()));
487 store->Init(); 498 store->Init();
488 499
489 MockPasswordStoreConsumer consumer; 500 MockPasswordStoreConsumer consumer;
490 // Make sure we quit the MessageLoop even if the test fails. 501 // Make sure we quit the MessageLoop even if the test fails.
491 ON_CALL(consumer, OnPasswordStoreRequestDone(_, _)) 502 ON_CALL(consumer, OnPasswordStoreRequestDone(_, _))
492 .WillByDefault(QuitUIMessageLoop()); 503 .WillByDefault(QuitUIMessageLoop());
493 504
494 // No forms should be migrated. 505 // No forms should be migrated.
495 VectorOfForms empty; 506 VectorOfForms empty;
496 EXPECT_CALL(consumer, 507 EXPECT_CALL(consumer,
497 OnPasswordStoreRequestDone(_, 508 OnPasswordStoreRequestDone(_,
498 ContainsAllPasswordForms(empty))) 509 ContainsAllPasswordForms(empty)))
499 .WillOnce(QuitUIMessageLoop()); 510 .WillOnce(QuitUIMessageLoop());
500 511
501 store->GetAutofillableLogins(&consumer); 512 store->GetAutofillableLogins(&consumer);
502 MessageLoop::current()->Run(); 513 MessageLoop::current()->Run();
503 514
504 STLDeleteElements(&unexpected_autofillable); 515 STLDeleteElements(&unexpected_autofillable);
505 516
506 store->Shutdown(); 517 // Public in PasswordStore, protected in PasswordStoreX.
518 static_cast<PasswordStore*>(store)->Shutdown();
507 } 519 }
508 520
509 TEST_P(PasswordStoreXTest, Notifications) { 521 TEST_P(PasswordStoreXTest, Notifications) {
510 // Pretend that the migration has already taken place. 522 // Pretend that the migration has already taken place.
511 profile_->GetPrefs()->RegisterBooleanPref(prefs::kLoginDatabaseMigrated, 523 profile_->GetPrefs()->RegisterBooleanPref(prefs::kLoginDatabaseMigrated,
512 true, 524 true,
513 PrefService::UNSYNCABLE_PREF); 525 PrefService::UNSYNCABLE_PREF);
514 526
515 // Initializing the PasswordStore shouldn't trigger a migration. 527 // Initializing the PasswordStore shouldn't trigger a migration.
516 scoped_refptr<PasswordStoreX> store( 528 scoped_refptr<PasswordStoreX> store(
517 new PasswordStoreX(login_db_.release(), 529 new PasswordStoreX(login_db_.release(),
518 profile_.get(), 530 profile_.get(),
519 wds_.get(), 531 wds_.get(),
520 GetBackend())); 532 GetBackend()));
521 store->Init(); 533 store->Init();
522 534
523 PasswordFormData form_data = 535 PasswordFormData form_data =
524 { PasswordForm::SCHEME_HTML, 536 { PasswordForm::SCHEME_HTML,
525 "http://bar.example.com", 537 "http://bar.example.com",
526 "http://bar.example.com/origin", 538 "http://bar.example.com/origin",
527 "http://bar.example.com/action", 539 "http://bar.example.com/action",
528 L"submit_element", 540 L"submit_element",
529 L"username_element", 541 L"username_element",
530 L"password_element", 542 L"password_element",
531 L"username_value", 543 L"username_value",
532 L"password_value", 544 L"password_value",
533 true, false, 1 }; 545 true, false, 1 };
534 scoped_ptr<PasswordForm> form(CreatePasswordFormFromData(form_data)); 546 scoped_ptr<PasswordForm> form(CreatePasswordFormFromData(form_data));
535 547
536 scoped_refptr<DBThreadObserverHelper> helper = new DBThreadObserverHelper; 548 scoped_refptr<DBThreadObserverHelper> helper = new DBThreadObserverHelper;
537 helper->Init(); 549 helper->Init(store);
538 550
539 const PasswordStoreChange expected_add_changes[] = { 551 const PasswordStoreChange expected_add_changes[] = {
540 PasswordStoreChange(PasswordStoreChange::ADD, *form), 552 PasswordStoreChange(PasswordStoreChange::ADD, *form),
541 }; 553 };
542 554
543 EXPECT_CALL(helper->observer(), 555 EXPECT_CALL(helper->observer(),
544 Observe(int(chrome::LOGINS_CHANGED), 556 Observe(int(chrome::NOTIFICATION_LOGINS_CHANGED),
545 NotificationService::AllSources(), 557 Source<PasswordStore>(store),
546 Property(&Details<const PasswordStoreChangeList>::ptr, 558 Property(&Details<const PasswordStoreChangeList>::ptr,
547 Pointee(ElementsAreArray( 559 Pointee(ElementsAreArray(
548 expected_add_changes))))); 560 expected_add_changes)))));
549 561
550 // Adding a login should trigger a notification. 562 // Adding a login should trigger a notification.
551 store->AddLogin(*form); 563 store->AddLogin(*form);
552 564
553 // The PasswordStore schedules tasks to run on the DB thread so we schedule 565 // The PasswordStore schedules tasks to run on the DB thread so we schedule
554 // yet another task to notify us that it's safe to carry on with the test. 566 // yet another task to notify us that it's safe to carry on with the test.
555 WaitableEvent done(false, false); 567 WaitableEvent done(false, false);
556 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 568 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
557 new SignalingTask(&done)); 569 new SignalingTask(&done));
558 done.Wait(); 570 done.Wait();
559 571
560 // Change the password. 572 // Change the password.
561 form->password_value = WideToUTF16(L"a different password"); 573 form->password_value = WideToUTF16(L"a different password");
562 574
563 const PasswordStoreChange expected_update_changes[] = { 575 const PasswordStoreChange expected_update_changes[] = {
564 PasswordStoreChange(PasswordStoreChange::UPDATE, *form), 576 PasswordStoreChange(PasswordStoreChange::UPDATE, *form),
565 }; 577 };
566 578
567 EXPECT_CALL(helper->observer(), 579 EXPECT_CALL(helper->observer(),
568 Observe(int(chrome::LOGINS_CHANGED), 580 Observe(int(chrome::NOTIFICATION_LOGINS_CHANGED),
569 NotificationService::AllSources(), 581 Source<PasswordStore>(store),
570 Property(&Details<const PasswordStoreChangeList>::ptr, 582 Property(&Details<const PasswordStoreChangeList>::ptr,
571 Pointee(ElementsAreArray( 583 Pointee(ElementsAreArray(
572 expected_update_changes))))); 584 expected_update_changes)))));
573 585
574 // Updating the login with the new password should trigger a notification. 586 // Updating the login with the new password should trigger a notification.
575 store->UpdateLogin(*form); 587 store->UpdateLogin(*form);
576 588
577 // Wait for PasswordStore to send the notification. 589 // Wait for PasswordStore to send the notification.
578 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 590 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
579 new SignalingTask(&done)); 591 new SignalingTask(&done));
580 done.Wait(); 592 done.Wait();
581 593
582 const PasswordStoreChange expected_delete_changes[] = { 594 const PasswordStoreChange expected_delete_changes[] = {
583 PasswordStoreChange(PasswordStoreChange::REMOVE, *form), 595 PasswordStoreChange(PasswordStoreChange::REMOVE, *form),
584 }; 596 };
585 597
586 EXPECT_CALL(helper->observer(), 598 EXPECT_CALL(helper->observer(),
587 Observe(int(chrome::LOGINS_CHANGED), 599 Observe(int(chrome::NOTIFICATION_LOGINS_CHANGED),
588 NotificationService::AllSources(), 600 Source<PasswordStore>(store),
589 Property(&Details<const PasswordStoreChangeList>::ptr, 601 Property(&Details<const PasswordStoreChangeList>::ptr,
590 Pointee(ElementsAreArray( 602 Pointee(ElementsAreArray(
591 expected_delete_changes))))); 603 expected_delete_changes)))));
592 604
593 // Deleting the login should trigger a notification. 605 // Deleting the login should trigger a notification.
594 store->RemoveLogin(*form); 606 store->RemoveLogin(*form);
595 607
596 // Wait for PasswordStore to send the notification. 608 // Wait for PasswordStore to send the notification.
597 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 609 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
598 new SignalingTask(&done)); 610 new SignalingTask(&done));
599 done.Wait(); 611 done.Wait();
600 612
601 store->Shutdown(); 613 // Public in PasswordStore, protected in PasswordStoreX.
614 static_cast<PasswordStore*>(store)->Shutdown();
602 } 615 }
603 616
604 TEST_P(PasswordStoreXTest, NativeMigration) { 617 TEST_P(PasswordStoreXTest, NativeMigration) {
605 VectorOfForms expected_autofillable; 618 VectorOfForms expected_autofillable;
606 InitExpectedForms(true, 50, &expected_autofillable); 619 InitExpectedForms(true, 50, &expected_autofillable);
607 620
608 VectorOfForms expected_blacklisted; 621 VectorOfForms expected_blacklisted;
609 InitExpectedForms(false, 50, &expected_blacklisted); 622 InitExpectedForms(false, 50, &expected_blacklisted);
610 623
611 // Get the initial size of the login DB file, before we populate it. 624 // Get the initial size of the login DB file, before we populate it.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 EXPECT_GT(db_file_full_info.size, db_file_start_info.size); 660 EXPECT_GT(db_file_full_info.size, db_file_start_info.size);
648 661
649 // Pretend that the WDS migration has already taken place. 662 // Pretend that the WDS migration has already taken place.
650 profile_->GetPrefs()->RegisterBooleanPref(prefs::kLoginDatabaseMigrated, 663 profile_->GetPrefs()->RegisterBooleanPref(prefs::kLoginDatabaseMigrated,
651 true, 664 true,
652 PrefService::UNSYNCABLE_PREF); 665 PrefService::UNSYNCABLE_PREF);
653 666
654 // Initializing the PasswordStore shouldn't trigger a native migration (yet). 667 // Initializing the PasswordStore shouldn't trigger a native migration (yet).
655 scoped_refptr<PasswordStoreX> store( 668 scoped_refptr<PasswordStoreX> store(
656 new PasswordStoreX(login_db_.release(), 669 new PasswordStoreX(login_db_.release(),
657 profile_.get(), 670 profile_.get(),
658 wds_.get(), 671 wds_.get(),
659 GetBackend())); 672 GetBackend()));
660 store->Init(); 673 store->Init();
661 674
662 MockPasswordStoreConsumer consumer; 675 MockPasswordStoreConsumer consumer;
663 676
664 // Make sure we quit the MessageLoop even if the test fails. 677 // Make sure we quit the MessageLoop even if the test fails.
665 ON_CALL(consumer, OnPasswordStoreRequestDone(_, _)) 678 ON_CALL(consumer, OnPasswordStoreRequestDone(_, _))
666 .WillByDefault(QuitUIMessageLoop()); 679 .WillByDefault(QuitUIMessageLoop());
667 680
668 // The autofillable forms should have been migrated to the native backend. 681 // The autofillable forms should have been migrated to the native backend.
669 EXPECT_CALL(consumer, 682 EXPECT_CALL(consumer,
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 // size is equal to the size before we populated it, even though it was 746 // size is equal to the size before we populated it, even though it was
734 // larger after populating it. 747 // larger after populating it.
735 base::PlatformFileInfo db_file_end_info; 748 base::PlatformFileInfo db_file_end_info;
736 ASSERT_TRUE(file_util::GetFileInfo(login_db_file, &db_file_end_info)); 749 ASSERT_TRUE(file_util::GetFileInfo(login_db_file, &db_file_end_info));
737 EXPECT_EQ(db_file_start_info.size, db_file_end_info.size); 750 EXPECT_EQ(db_file_start_info.size, db_file_end_info.size);
738 } 751 }
739 752
740 STLDeleteElements(&expected_autofillable); 753 STLDeleteElements(&expected_autofillable);
741 STLDeleteElements(&expected_blacklisted); 754 STLDeleteElements(&expected_blacklisted);
742 755
743 store->Shutdown(); 756 // Public in PasswordStore, protected in PasswordStoreX.
757 static_cast<PasswordStore*>(store)->Shutdown();
744 } 758 }
745 759
746 INSTANTIATE_TEST_CASE_P(NoBackend, 760 INSTANTIATE_TEST_CASE_P(NoBackend,
747 PasswordStoreXTest, 761 PasswordStoreXTest,
748 testing::Values(NO_BACKEND)); 762 testing::Values(NO_BACKEND));
749 INSTANTIATE_TEST_CASE_P(FailingBackend, 763 INSTANTIATE_TEST_CASE_P(FailingBackend,
750 PasswordStoreXTest, 764 PasswordStoreXTest,
751 testing::Values(FAILING_BACKEND)); 765 testing::Values(FAILING_BACKEND));
752 INSTANTIATE_TEST_CASE_P(WorkingBackend, 766 INSTANTIATE_TEST_CASE_P(WorkingBackend,
753 PasswordStoreXTest, 767 PasswordStoreXTest,
754 testing::Values(WORKING_BACKEND)); 768 testing::Values(WORKING_BACKEND));
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/password_store_default_unittest.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698