| Index: components/password_manager/core/browser/password_manager_unittest.cc
|
| diff --git a/components/password_manager/core/browser/password_manager_unittest.cc b/components/password_manager/core/browser/password_manager_unittest.cc
|
| index 22169b0eb3d047521aaebca44a459b866f5f800f..c6cce42a7b71c5c2a308025facc1bfb9e74052b1 100644
|
| --- a/components/password_manager/core/browser/password_manager_unittest.cc
|
| +++ b/components/password_manager/core/browser/password_manager_unittest.cc
|
| @@ -27,7 +27,6 @@ using autofill::PasswordForm;
|
| using base::ASCIIToUTF16;
|
| using testing::_;
|
| using testing::AnyNumber;
|
| -using testing::DoAll;
|
| using testing::Exactly;
|
| using testing::Return;
|
| using testing::WithArg;
|
| @@ -67,7 +66,13 @@ class MockPasswordManagerDriver : public StubPasswordManagerDriver {
|
| MOCK_METHOD0(GetPasswordAutofillManager, PasswordAutofillManager*());
|
| };
|
|
|
| -ACTION_P(InvokeConsumer, forms) { arg0->OnGetPasswordStoreResults(forms); }
|
| +ACTION_P(InvokeConsumer, forms) {
|
| + arg0->OnGetPasswordStoreResults(forms->Pass());
|
| +}
|
| +
|
| +ACTION(InvokeEmptyConsumer) {
|
| + arg0->OnGetPasswordStoreResults(ScopedVector<autofill::PasswordForm>());
|
| +}
|
|
|
| ACTION_P(SaveToScopedPtr, scoped) { scoped->reset(arg0); }
|
|
|
| @@ -90,7 +95,7 @@ class PasswordManagerTest : public testing::Test {
|
| true);
|
|
|
| store_ = new MockPasswordStore;
|
| - EXPECT_CALL(*store_.get(), ReportMetrics(_, _)).Times(AnyNumber());
|
| + EXPECT_CALL(*store_, ReportMetrics(_, _)).Times(AnyNumber());
|
| CHECK(store_->Init(syncer::SyncableService::StartSyncFlare()));
|
|
|
| EXPECT_CALL(client_, IsPasswordManagerEnabledForCurrentPage())
|
| @@ -112,6 +117,9 @@ class PasswordManagerTest : public testing::Test {
|
| .WillRepeatedly(Return(password_autofill_manager_.get()));
|
| EXPECT_CALL(client_, DidLastPageLoadEncounterSSLErrors())
|
| .WillRepeatedly(Return(false));
|
| +
|
| + ON_CALL(*store_, GetLogins(_, _, _))
|
| + .WillByDefault(WithArg<2>(InvokeEmptyConsumer()));
|
| }
|
|
|
| void TearDown() override {
|
| @@ -242,10 +250,7 @@ MATCHER_P(FormMatches, form, "") {
|
|
|
| TEST_F(PasswordManagerTest, FormSubmitEmptyStore) {
|
| // Test that observing a newly submitted form shows the save password bar.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -269,7 +274,7 @@ TEST_F(PasswordManagerTest, FormSubmitEmptyStore) {
|
| manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
|
|
| ASSERT_TRUE(form_to_save.get());
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
|
|
|
| // Simulate saving the form, as if the info bar was accepted.
|
| form_to_save->Save();
|
| @@ -302,8 +307,7 @@ TEST_F(PasswordManagerTest, FormSubmitWithOnlyNewPasswordField) {
|
|
|
| // Simulate saving the form, as if the info bar was accepted.
|
| PasswordForm saved_form;
|
| - EXPECT_CALL(*store_.get(), AddLogin(_))
|
| - .WillOnce(testing::SaveArg<0>(&saved_form));
|
| + EXPECT_CALL(*store_, AddLogin(_)).WillOnce(testing::SaveArg<0>(&saved_form));
|
| form_to_save->Save();
|
|
|
| // The value of the new password field should have been promoted to, and saved
|
| @@ -320,10 +324,7 @@ TEST_F(PasswordManagerTest, FormSubmitWithOnlyNewPasswordField) {
|
| TEST_F(PasswordManagerTest, GeneratedPasswordFormSubmitEmptyStore) {
|
| // This test is the same as FormSubmitEmptyStore, except that it simulates the
|
| // user generating the password through the browser.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -341,7 +342,7 @@ TEST_F(PasswordManagerTest, GeneratedPasswordFormSubmitEmptyStore) {
|
| // navigation occurs. The client will be informed that automatic saving has
|
| // occured.
|
| EXPECT_CALL(client_, PromptUserToSavePasswordPtr(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
|
| scoped_ptr<PasswordFormManager> saved_form_manager;
|
| EXPECT_CALL(client_, AutomaticPasswordSavePtr(_))
|
| .Times(Exactly(1))
|
| @@ -359,13 +360,14 @@ TEST_F(PasswordManagerTest, FormSubmitNoGoodMatch) {
|
| // Same as above, except with an existing form for the same signon realm,
|
| // but different origin. Detailed cases like this are covered by
|
| // PasswordFormManagerTest.
|
| - std::vector<PasswordForm*> result;
|
| - PasswordForm* existing_different = new PasswordForm(MakeSimpleForm());
|
| + ScopedVector<PasswordForm> result;
|
| + scoped_ptr<PasswordForm> existing_different(
|
| + new PasswordForm(MakeSimpleForm()));
|
| existing_different->username_value = ASCIIToUTF16("google2");
|
| - result.push_back(existing_different);
|
| + result.push_back(existing_different.release());
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| + EXPECT_CALL(*store_, GetLogins(_, _, _))
|
| + .WillOnce(WithArg<2>(InvokeConsumer(&result)));
|
|
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| @@ -388,17 +390,14 @@ TEST_F(PasswordManagerTest, FormSubmitNoGoodMatch) {
|
| true); // The post-navigation layout.
|
|
|
| ASSERT_TRUE(form_to_save.get());
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
|
|
|
| // Simulate saving the form.
|
| form_to_save->Save();
|
| }
|
|
|
| TEST_F(PasswordManagerTest, FormSeenThenLeftPage) {
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -419,10 +418,7 @@ TEST_F(PasswordManagerTest, FormSeenThenLeftPage) {
|
| TEST_F(PasswordManagerTest, FormSubmitAfterNavigateInPage) {
|
| // Test that navigating in the page does not prevent us from showing the save
|
| // password infobar.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -445,7 +441,7 @@ TEST_F(PasswordManagerTest, FormSubmitAfterNavigateInPage) {
|
| true); // The post-navigation layout.
|
|
|
| ASSERT_FALSE(NULL == form_to_save.get());
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
|
|
|
| // Simulate saving the form, as if the info bar was accepted.
|
| form_to_save->Save();
|
| @@ -453,10 +449,7 @@ TEST_F(PasswordManagerTest, FormSubmitAfterNavigateInPage) {
|
|
|
| // This test verifies a fix for http://crbug.com/236673
|
| TEST_F(PasswordManagerTest, FormSubmitWithFormOnPreviousPage) {
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| PasswordForm first_form(MakeSimpleForm());
|
| first_form.origin = GURL("http://www.nytimes.com/");
|
| first_form.action = GURL("https://myaccount.nytimes.com/auth/login");
|
| @@ -495,17 +488,14 @@ TEST_F(PasswordManagerTest, FormSubmitWithFormOnPreviousPage) {
|
|
|
| // Make sure that the saved form matches the second form, not the first.
|
| ASSERT_TRUE(form_to_save.get());
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(second_form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(second_form)));
|
|
|
| // Simulate saving the form, as if the info bar was accepted.
|
| form_to_save->Save();
|
| }
|
|
|
| TEST_F(PasswordManagerTest, FormSubmitFailedLogin) {
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -524,10 +514,7 @@ TEST_F(PasswordManagerTest, FormSubmitFailedLogin) {
|
| TEST_F(PasswordManagerTest, FormSubmitInvisibleLogin) {
|
| // Tests fix of issue 28911: if the login form reappears on the subsequent
|
| // page, but is invisible, it shouldn't count as a failed login.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -548,7 +535,7 @@ TEST_F(PasswordManagerTest, FormSubmitInvisibleLogin) {
|
| manager()->OnPasswordFormsRendered(&driver_, observed, true);
|
|
|
| ASSERT_TRUE(form_to_save.get());
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
|
|
|
| // Simulate saving the form.
|
| form_to_save->Save();
|
| @@ -556,12 +543,11 @@ TEST_F(PasswordManagerTest, FormSubmitInvisibleLogin) {
|
|
|
| TEST_F(PasswordManagerTest, InitiallyInvisibleForm) {
|
| // Make sure an invisible login form still gets autofilled.
|
| - std::vector<PasswordForm*> result;
|
| - PasswordForm* existing = new PasswordForm(MakeSimpleForm());
|
| - result.push_back(existing);
|
| + ScopedVector<PasswordForm> result;
|
| + result.push_back(new PasswordForm(MakeSimpleForm()));
|
| EXPECT_CALL(driver_, FillPasswordForm(_));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| + EXPECT_CALL(*store_, GetLogins(_, _, _))
|
| + .WillOnce(WithArg<2>(InvokeConsumer(&result)));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -590,15 +576,14 @@ TEST_F(PasswordManagerTest, SavingDependsOnManagerEnabledPreference) {
|
| TEST_F(PasswordManagerTest, FillPasswordsOnDisabledManager) {
|
| // Test fix for issue 158296: Passwords must be filled even if the password
|
| // manager is disabled.
|
| - std::vector<PasswordForm*> result;
|
| - PasswordForm* existing = new PasswordForm(MakeSimpleForm());
|
| - result.push_back(existing);
|
| + ScopedVector<PasswordForm> result;
|
| + result.push_back(new PasswordForm(MakeSimpleForm()));
|
| prefs_.SetUserPref(prefs::kPasswordManagerSavingEnabled,
|
| new base::FundamentalValue(false));
|
| EXPECT_CALL(driver_, FillPasswordForm(_));
|
| - EXPECT_CALL(*store_.get(),
|
| + EXPECT_CALL(*store_,
|
| GetLogins(_, testing::Eq(PasswordStore::DISALLOW_PROMPT), _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| + .WillOnce(WithArg<2>(InvokeConsumer(&result)));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
| @@ -608,10 +593,7 @@ TEST_F(PasswordManagerTest, FillPasswordsOnDisabledManager) {
|
| TEST_F(PasswordManagerTest, FormSavedWithAutocompleteOff) {
|
| // Test password form with non-generated password will be saved even if
|
| // autocomplete=off.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| form.password_autocomplete_set = false;
|
| @@ -628,7 +610,7 @@ TEST_F(PasswordManagerTest, FormSavedWithAutocompleteOff) {
|
| EXPECT_CALL(client_, PromptUserToSavePasswordPtr(_))
|
| .Times(Exactly(1))
|
| .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save)));
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))).Times(Exactly(0));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form))).Times(Exactly(0));
|
|
|
| // Now the password manager waits for the navigation to complete.
|
| observed.clear();
|
| @@ -643,10 +625,7 @@ TEST_F(PasswordManagerTest, FormSavedWithAutocompleteOff) {
|
| TEST_F(PasswordManagerTest, GeneratedPasswordFormSavedAutocompleteOff) {
|
| // Test password form with generated password will still be saved if
|
| // autocomplete=off.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| form.password_autocomplete_set = false;
|
| @@ -664,7 +643,7 @@ TEST_F(PasswordManagerTest, GeneratedPasswordFormSavedAutocompleteOff) {
|
| // navigation occurs. The client will be informed that automatic saving has
|
| // occured.
|
| EXPECT_CALL(client_, PromptUserToSavePasswordPtr(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
|
| scoped_ptr<PasswordFormManager> saved_form_manager;
|
| EXPECT_CALL(client_, AutomaticPasswordSavePtr(_))
|
| .Times(Exactly(1))
|
| @@ -690,10 +669,7 @@ TEST_F(PasswordManagerTest, PasswordFormReappearance) {
|
| // We assume that if we send our credentials and there
|
| // is at least one visible password form in the next page that
|
| // means that our previous login attempt failed.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0);
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm login_form(MakeTwitterLoginForm());
|
| observed.push_back(login_form);
|
| @@ -730,7 +706,7 @@ TEST_F(PasswordManagerTest, AutofillingNotEnabledOnSSLErrors) {
|
|
|
| // Feed those forms to |manager()| and check that it does not try to find
|
| // matching saved credentials for the forms.
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _)).Times(Exactly(0));
|
| + EXPECT_CALL(*store_, GetLogins(_, _, _)).Times(Exactly(0));
|
| manager()->OnPasswordFormsParsed(&driver_, forms);
|
| }
|
|
|
| @@ -750,7 +726,7 @@ TEST_F(PasswordManagerTest, AutofillingDisabledIfManagerDisabled) {
|
|
|
| // Feed those forms to |manager()| and check that it does not try to find
|
| // matching saved credentials for the forms.
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _)).Times(Exactly(0));
|
| + EXPECT_CALL(*store_, GetLogins(_, _, _)).Times(Exactly(0));
|
| manager()->OnPasswordFormsParsed(&driver_, forms);
|
| }
|
|
|
| @@ -759,10 +735,7 @@ TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) {
|
| .WillRepeatedly(Return(true));
|
|
|
| // Simulate loading a simple form with no existing stored password.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| form.password_autocomplete_set = false;
|
| @@ -773,7 +746,7 @@ TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) {
|
|
|
| // User should not be prompted and password should not be saved.
|
| EXPECT_CALL(client_, PromptUserToSavePasswordPtr(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form))).Times(Exactly(0));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form))).Times(Exactly(0));
|
|
|
| // Submit form and finish navigation.
|
| manager()->ProvisionallySavePassword(form);
|
| @@ -788,10 +761,7 @@ TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) {
|
| // failure.
|
| TEST_F(PasswordManagerTest,
|
| SeeingFormActionWithOnlyHttpHttpsChangeIsLoginFailure) {
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillRepeatedly(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
|
|
| PasswordForm first_form(MakeSimpleForm());
|
| first_form.origin = GURL("http://www.xda-developers.com/");
|
| @@ -850,10 +820,7 @@ TEST_F(PasswordManagerTest, FormSubmitWithOnlyPassowrdField) {
|
| // Test to verify that on submitting the HTML password form without having
|
| // username input filed shows password save promt and saves the password to
|
| // store.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
|
|
| // Loads passsword form without username input field.
|
| @@ -878,7 +845,7 @@ TEST_F(PasswordManagerTest, FormSubmitWithOnlyPassowrdField) {
|
| true); // The post-navigation layout.
|
|
|
| ASSERT_TRUE(form_to_save.get());
|
| - EXPECT_CALL(*store_.get(), AddLogin(FormMatches(form)));
|
| + EXPECT_CALL(*store_, AddLogin(FormMatches(form)));
|
|
|
| // Simulate saving the form, as if the info bar was accepted.
|
| form_to_save->Save();
|
| @@ -890,11 +857,11 @@ TEST_F(PasswordManagerTest, FillPasswordOnManyFrames) {
|
| PasswordForm form(MakeSimpleForm()); // The observed and saved form.
|
|
|
| // "Save" the form.
|
| - std::vector<PasswordForm*> result;
|
| - result.push_back(new PasswordForm(form)); // Calee owns the form.
|
| - EXPECT_CALL(*store_.get(),
|
| + ScopedVector<PasswordForm> result;
|
| + result.push_back(new PasswordForm(form));
|
| + EXPECT_CALL(*store_,
|
| GetLogins(_, testing::Eq(PasswordStore::DISALLOW_PROMPT), _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| + .WillOnce(WithArg<2>(InvokeConsumer(&result)));
|
|
|
| // The form will be seen the first time.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(1);
|
| @@ -913,10 +880,7 @@ TEST_F(PasswordManagerTest, FillPasswordOnManyFrames) {
|
| TEST_F(PasswordManagerTest, InPageNavigation) {
|
| // Test that observing a newly submitted form shows the save password bar on
|
| // call in page navigation.
|
| - std::vector<PasswordForm*> result; // Empty password store.
|
| EXPECT_CALL(driver_, FillPasswordForm(_)).Times(Exactly(0));
|
| - EXPECT_CALL(*store_.get(), GetLogins(_, _, _))
|
| - .WillOnce(DoAll(WithArg<2>(InvokeConsumer(result)), Return()));
|
| std::vector<PasswordForm> observed;
|
| PasswordForm form(MakeSimpleForm());
|
| observed.push_back(form);
|
|
|