| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "components/password_manager/core/browser/password_manager.h" | 5 #include "components/password_manager/core/browser/password_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 MockPasswordManagerClient() { | 54 MockPasswordManagerClient() { |
| 55 EXPECT_CALL(*this, GetStoreResultFilter()) | 55 EXPECT_CALL(*this, GetStoreResultFilter()) |
| 56 .Times(AnyNumber()) | 56 .Times(AnyNumber()) |
| 57 .WillRepeatedly(Return(&filter_)); | 57 .WillRepeatedly(Return(&filter_)); |
| 58 ON_CALL(filter_, ShouldSave(_)).WillByDefault(Return(true)); | 58 ON_CALL(filter_, ShouldSave(_)).WillByDefault(Return(true)); |
| 59 } | 59 } |
| 60 | 60 |
| 61 MOCK_CONST_METHOD0(IsSavingAndFillingEnabledForCurrentPage, bool()); | 61 MOCK_CONST_METHOD0(IsSavingAndFillingEnabledForCurrentPage, bool()); |
| 62 MOCK_CONST_METHOD0(DidLastPageLoadEncounterSSLErrors, bool()); | 62 MOCK_CONST_METHOD0(DidLastPageLoadEncounterSSLErrors, bool()); |
| 63 MOCK_CONST_METHOD0(GetPasswordStore, PasswordStore*()); | 63 MOCK_CONST_METHOD0(GetPasswordStore, PasswordStore*()); |
| 64 // The code inside EXPECT_CALL for PromptUserToSaveOrUpdatePasswordPtr owns | 64 MOCK_METHOD2(PromptUserToSaveOrUpdatePassword, |
| 65 // the PasswordFormManager* argument. | 65 bool(scoped_refptr<PasswordFormManager>, bool)); |
| 66 MOCK_METHOD1(PromptUserToSaveOrUpdatePasswordPtr, void(PasswordFormManager*)); | |
| 67 MOCK_METHOD1(NotifySuccessfulLoginWithExistingPassword, | 66 MOCK_METHOD1(NotifySuccessfulLoginWithExistingPassword, |
| 68 void(const autofill::PasswordForm&)); | 67 void(const autofill::PasswordForm&)); |
| 69 MOCK_METHOD0(AutomaticPasswordSaveIndicator, void()); | 68 MOCK_METHOD0(AutomaticPasswordSaveIndicator, void()); |
| 70 MOCK_METHOD0(GetPrefs, PrefService*()); | 69 MOCK_METHOD0(GetPrefs, PrefService*()); |
| 71 MOCK_CONST_METHOD0(GetMainFrameURL, const GURL&()); | 70 MOCK_CONST_METHOD0(GetMainFrameURL, const GURL&()); |
| 72 MOCK_METHOD0(GetDriver, PasswordManagerDriver*()); | 71 MOCK_METHOD0(GetDriver, PasswordManagerDriver*()); |
| 73 MOCK_CONST_METHOD0(GetStoreResultFilter, const MockStoreResultFilter*()); | 72 MOCK_CONST_METHOD0(GetStoreResultFilter, const MockStoreResultFilter*()); |
| 74 | 73 |
| 75 // Workaround for std::unique_ptr<> lacking a copy constructor. | |
| 76 bool PromptUserToSaveOrUpdatePassword( | |
| 77 std::unique_ptr<PasswordFormManager> manager, | |
| 78 bool update_password) override { | |
| 79 PromptUserToSaveOrUpdatePasswordPtr(manager.release()); | |
| 80 return false; | |
| 81 } | |
| 82 void AutomaticPasswordSave( | 74 void AutomaticPasswordSave( |
| 83 std::unique_ptr<PasswordFormManager> manager) override { | 75 scoped_refptr<PasswordFormManager> manager) override { |
| 84 AutomaticPasswordSaveIndicator(); | 76 AutomaticPasswordSaveIndicator(); |
| 85 } | 77 } |
| 86 | 78 |
| 87 void FilterAllResultsForSaving() { | 79 void FilterAllResultsForSaving() { |
| 88 EXPECT_CALL(filter_, ShouldSave(_)).WillRepeatedly(Return(false)); | 80 EXPECT_CALL(filter_, ShouldSave(_)).WillRepeatedly(Return(false)); |
| 89 } | 81 } |
| 90 | 82 |
| 91 private: | 83 private: |
| 92 testing::NiceMock<MockStoreResultFilter> filter_; | 84 testing::NiceMock<MockStoreResultFilter> filter_; |
| 93 }; | 85 }; |
| 94 | 86 |
| 95 class MockPasswordManagerDriver : public StubPasswordManagerDriver { | 87 class MockPasswordManagerDriver : public StubPasswordManagerDriver { |
| 96 public: | 88 public: |
| 97 MOCK_METHOD1(FillPasswordForm, void(const autofill::PasswordFormFillData&)); | 89 MOCK_METHOD1(FillPasswordForm, void(const autofill::PasswordFormFillData&)); |
| 98 MOCK_METHOD0(GetPasswordManager, PasswordManager*()); | 90 MOCK_METHOD0(GetPasswordManager, PasswordManager*()); |
| 99 MOCK_METHOD0(GetPasswordAutofillManager, PasswordAutofillManager*()); | 91 MOCK_METHOD0(GetPasswordAutofillManager, PasswordAutofillManager*()); |
| 100 }; | 92 }; |
| 101 | 93 |
| 102 // Invokes the password store consumer with a single copy of |form|. | 94 // Invokes the password store consumer with a single copy of |form|. |
| 103 ACTION_P(InvokeConsumer, form) { | 95 ACTION_P(InvokeConsumer, form) { |
| 104 std::vector<std::unique_ptr<PasswordForm>> result; | 96 std::vector<std::unique_ptr<PasswordForm>> result; |
| 105 result.push_back(base::MakeUnique<PasswordForm>(form)); | 97 result.push_back(base::MakeUnique<PasswordForm>(form)); |
| 106 arg0->OnGetPasswordStoreResults(std::move(result)); | 98 arg0->OnGetPasswordStoreResults(std::move(result)); |
| 107 } | 99 } |
| 108 | 100 |
| 109 ACTION(InvokeEmptyConsumerWithForms) { | 101 ACTION(InvokeEmptyConsumerWithForms) { |
| 110 arg0->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>()); | 102 arg0->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>()); |
| 111 } | 103 } |
| 112 | 104 |
| 113 ACTION_P(SaveToScopedPtr, scoped) { scoped->reset(arg0); } | |
| 114 | |
| 115 } // namespace | 105 } // namespace |
| 116 | 106 |
| 117 class PasswordManagerTest : public testing::Test { | 107 class PasswordManagerTest : public testing::Test { |
| 118 protected: | 108 protected: |
| 119 void SetUp() override { | 109 void SetUp() override { |
| 120 store_ = new testing::StrictMock<MockPasswordStore>; | 110 store_ = new testing::StrictMock<MockPasswordStore>; |
| 121 EXPECT_CALL(*store_, ReportMetrics(_, _)).Times(AnyNumber()); | 111 EXPECT_CALL(*store_, ReportMetrics(_, _)).Times(AnyNumber()); |
| 122 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _)) | 112 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _)) |
| 123 .Times(AnyNumber()); | 113 .Times(AnyNumber()); |
| 124 CHECK(store_->Init(syncer::SyncableService::StartSyncFlare(), nullptr)); | 114 CHECK(store_->Init(syncer::SyncableService::StartSyncFlare(), nullptr)); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 observed.push_back(form); | 254 observed.push_back(form); |
| 265 EXPECT_CALL(*store_, GetLogins(_, _)) | 255 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 266 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 256 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 267 manager()->OnPasswordFormsParsed(&driver_, observed); | 257 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 268 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 258 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 269 | 259 |
| 270 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 260 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 271 .WillRepeatedly(Return(true)); | 261 .WillRepeatedly(Return(true)); |
| 272 OnPasswordFormSubmitted(form); | 262 OnPasswordFormSubmitted(form); |
| 273 | 263 |
| 274 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 264 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 275 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 265 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 276 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 266 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 277 | 267 |
| 278 // Now the password manager waits for the navigation to complete. | 268 // Now the password manager waits for the navigation to complete. |
| 279 observed.clear(); | 269 observed.clear(); |
| 280 manager()->OnPasswordFormsParsed(&driver_, observed); | 270 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 281 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 271 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 282 | 272 |
| 283 // Simulate saving the form, as if the info bar was accepted. | 273 // Simulate saving the form, as if the info bar was accepted. |
| 284 PasswordForm saved_form; | 274 PasswordForm saved_form; |
| 285 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&saved_form)); | 275 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&saved_form)); |
| 286 ASSERT_TRUE(form_manager_to_save); | 276 ASSERT_TRUE(form_manager_to_save); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 306 // Simulate the user generating the password and submitting the form. | 296 // Simulate the user generating the password and submitting the form. |
| 307 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 297 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 308 .WillRepeatedly(Return(true)); | 298 .WillRepeatedly(Return(true)); |
| 309 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); | 299 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); |
| 310 OnPasswordFormSubmitted(form); | 300 OnPasswordFormSubmitted(form); |
| 311 | 301 |
| 312 // The user should not need to confirm saving as they have already given | 302 // The user should not need to confirm saving as they have already given |
| 313 // consent by using the generated password. The form should be saved once | 303 // consent by using the generated password. The form should be saved once |
| 314 // navigation occurs. The client will be informed that automatic saving has | 304 // navigation occurs. The client will be informed that automatic saving has |
| 315 // occured. | 305 // occured. |
| 316 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 306 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 317 PasswordForm form_to_save; | 307 PasswordForm form_to_save; |
| 318 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); | 308 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); |
| 319 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()); | 309 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()); |
| 320 | 310 |
| 321 // Now the password manager waits for the navigation to complete. | 311 // Now the password manager waits for the navigation to complete. |
| 322 observed.clear(); | 312 observed.clear(); |
| 323 manager()->OnPasswordFormsParsed(&driver_, observed); | 313 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 324 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 314 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 325 EXPECT_EQ(form.username_value, form_to_save.username_value); | 315 EXPECT_EQ(form.username_value, form_to_save.username_value); |
| 326 // What was "new password" field in the submitted form, becomes the current | 316 // What was "new password" field in the submitted form, becomes the current |
| (...skipping 15 matching lines...) Expand all Loading... |
| 342 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2); | 332 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2); |
| 343 EXPECT_CALL(*store_, GetLogins(_, _)) | 333 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 344 .WillOnce(WithArg<1>(InvokeConsumer(existing_different))); | 334 .WillOnce(WithArg<1>(InvokeConsumer(existing_different))); |
| 345 manager()->OnPasswordFormsParsed(&driver_, observed); | 335 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 346 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 336 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 347 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 337 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 348 .WillRepeatedly(Return(true)); | 338 .WillRepeatedly(Return(true)); |
| 349 OnPasswordFormSubmitted(form); | 339 OnPasswordFormSubmitted(form); |
| 350 | 340 |
| 351 // We still expect an add, since we didn't have a good match. | 341 // We still expect an add, since we didn't have a good match. |
| 352 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 342 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 353 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 343 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 354 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 344 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 355 | 345 |
| 356 // Now the password manager waits for the navigation to complete. | 346 // Now the password manager waits for the navigation to complete. |
| 357 observed.clear(); | 347 observed.clear(); |
| 358 manager()->OnPasswordFormsParsed(&driver_, observed); | 348 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 359 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 349 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 360 | 350 |
| 361 // Simulate saving the form. | 351 // Simulate saving the form. |
| 362 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); | 352 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
| 363 ASSERT_TRUE(form_manager_to_save); | 353 ASSERT_TRUE(form_manager_to_save); |
| 364 form_manager_to_save->Save(); | 354 form_manager_to_save->Save(); |
| 365 } | 355 } |
| 366 | 356 |
| 367 TEST_F(PasswordManagerTest, FormSeenThenLeftPage) { | 357 TEST_F(PasswordManagerTest, FormSeenThenLeftPage) { |
| 368 std::vector<PasswordForm> observed; | 358 std::vector<PasswordForm> observed; |
| 369 PasswordForm form(MakeSimpleForm()); | 359 PasswordForm form(MakeSimpleForm()); |
| 370 observed.push_back(form); | 360 observed.push_back(form); |
| 371 EXPECT_CALL(*store_, GetLogins(_, _)) | 361 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 372 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 362 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 373 manager()->OnPasswordFormsParsed(&driver_, observed); | 363 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 374 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 364 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 375 | 365 |
| 376 // No message from the renderer that a password was submitted. No | 366 // No message from the renderer that a password was submitted. No |
| 377 // expected calls. | 367 // expected calls. |
| 378 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 368 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 379 observed.clear(); | 369 observed.clear(); |
| 380 manager()->OnPasswordFormsParsed(&driver_, observed); | 370 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 381 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 371 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 382 } | 372 } |
| 383 | 373 |
| 384 TEST_F(PasswordManagerTest, FormSubmit) { | 374 TEST_F(PasswordManagerTest, FormSubmit) { |
| 385 // Test that a plain form submit results in offering to save passwords. | 375 // Test that a plain form submit results in offering to save passwords. |
| 386 std::vector<PasswordForm> observed; | 376 std::vector<PasswordForm> observed; |
| 387 PasswordForm form(MakeSimpleForm()); | 377 PasswordForm form(MakeSimpleForm()); |
| 388 observed.push_back(form); | 378 observed.push_back(form); |
| 389 EXPECT_CALL(*store_, GetLogins(_, _)) | 379 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 390 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 380 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 391 EXPECT_FALSE(manager()->IsPasswordFieldDetectedOnPage()); | 381 EXPECT_FALSE(manager()->IsPasswordFieldDetectedOnPage()); |
| 392 manager()->OnPasswordFormsParsed(&driver_, observed); | 382 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 393 EXPECT_TRUE(manager()->IsPasswordFieldDetectedOnPage()); | 383 EXPECT_TRUE(manager()->IsPasswordFieldDetectedOnPage()); |
| 394 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 384 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 395 | 385 |
| 396 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 386 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 397 .WillRepeatedly(Return(true)); | 387 .WillRepeatedly(Return(true)); |
| 398 OnPasswordFormSubmitted(form); | 388 OnPasswordFormSubmitted(form); |
| 399 | 389 |
| 400 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 390 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 401 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 391 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 402 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 392 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 403 | 393 |
| 404 observed.clear(); | 394 observed.clear(); |
| 405 manager()->OnPasswordFormsParsed(&driver_, observed); | 395 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 406 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 396 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 407 EXPECT_FALSE(manager()->IsPasswordFieldDetectedOnPage()); | 397 EXPECT_FALSE(manager()->IsPasswordFieldDetectedOnPage()); |
| 408 | 398 |
| 409 // Simulate saving the form, as if the info bar was accepted. | 399 // Simulate saving the form, as if the info bar was accepted. |
| 410 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); | 400 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
| 411 ASSERT_TRUE(form_manager_to_save); | 401 ASSERT_TRUE(form_manager_to_save); |
| 412 form_manager_to_save->Save(); | 402 form_manager_to_save->Save(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 439 // URL. | 429 // URL. |
| 440 observed.push_back(second_form); | 430 observed.push_back(second_form); |
| 441 manager()->OnPasswordFormsParsed(&driver_, observed); | 431 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 442 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 432 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 443 | 433 |
| 444 // Now submit this form | 434 // Now submit this form |
| 445 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 435 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 446 .WillRepeatedly(Return(true)); | 436 .WillRepeatedly(Return(true)); |
| 447 OnPasswordFormSubmitted(second_form); | 437 OnPasswordFormSubmitted(second_form); |
| 448 | 438 |
| 449 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 439 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 450 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 440 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 451 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 441 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 452 // Navigation after form submit, no forms appear. | 442 // Navigation after form submit, no forms appear. |
| 453 observed.clear(); | 443 observed.clear(); |
| 454 manager()->OnPasswordFormsParsed(&driver_, observed); | 444 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 455 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 445 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 456 | 446 |
| 457 // Simulate saving the form, as if the info bar was accepted and make sure | 447 // Simulate saving the form, as if the info bar was accepted and make sure |
| 458 // that the saved form matches the second form, not the first. | 448 // that the saved form matches the second form, not the first. |
| 459 EXPECT_CALL(*store_, AddLogin(FormMatches(second_form))); | 449 EXPECT_CALL(*store_, AddLogin(FormMatches(second_form))); |
| 460 ASSERT_TRUE(form_manager_to_save); | 450 ASSERT_TRUE(form_manager_to_save); |
| 461 form_manager_to_save->Save(); | 451 form_manager_to_save->Save(); |
| 462 } | 452 } |
| 463 | 453 |
| 464 TEST_F(PasswordManagerTest, FormSubmitInvisibleLogin) { | 454 TEST_F(PasswordManagerTest, FormSubmitInvisibleLogin) { |
| 465 // Tests fix of http://crbug.com/28911: if the login form reappears on the | 455 // Tests fix of http://crbug.com/28911: if the login form reappears on the |
| 466 // subsequent page, but is invisible, it shouldn't count as a failed login. | 456 // subsequent page, but is invisible, it shouldn't count as a failed login. |
| 467 std::vector<PasswordForm> observed; | 457 std::vector<PasswordForm> observed; |
| 468 PasswordForm form(MakeSimpleForm()); | 458 PasswordForm form(MakeSimpleForm()); |
| 469 observed.push_back(form); | 459 observed.push_back(form); |
| 470 EXPECT_CALL(*store_, GetLogins(_, _)) | 460 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 471 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 461 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 472 manager()->OnPasswordFormsParsed(&driver_, observed); | 462 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 473 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 463 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 474 | 464 |
| 475 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 465 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 476 .WillRepeatedly(Return(true)); | 466 .WillRepeatedly(Return(true)); |
| 477 OnPasswordFormSubmitted(form); | 467 OnPasswordFormSubmitted(form); |
| 478 | 468 |
| 479 // Expect info bar to appear: | 469 // Expect info bar to appear: |
| 480 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 470 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 481 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 471 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 482 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 472 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 483 | 473 |
| 484 // The form reappears, but is not visible in the layout: | 474 // The form reappears, but is not visible in the layout: |
| 485 manager()->OnPasswordFormsParsed(&driver_, observed); | 475 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 486 observed.clear(); | 476 observed.clear(); |
| 487 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 477 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 488 | 478 |
| 489 // Simulate saving the form. | 479 // Simulate saving the form. |
| 490 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); | 480 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
| 491 ASSERT_TRUE(form_manager_to_save); | 481 ASSERT_TRUE(form_manager_to_save); |
| 492 form_manager_to_save->Save(); | 482 form_manager_to_save->Save(); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 534 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 545 | 535 |
| 546 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 536 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 547 .WillRepeatedly(Return(true)); | 537 .WillRepeatedly(Return(true)); |
| 548 OnPasswordFormSubmitted(login_form); | 538 OnPasswordFormSubmitted(login_form); |
| 549 | 539 |
| 550 observed.clear(); | 540 observed.clear(); |
| 551 observed.push_back(MakeTwitterFailedLoginForm()); | 541 observed.push_back(MakeTwitterFailedLoginForm()); |
| 552 // A PasswordForm appears, and is visible in the layout: | 542 // A PasswordForm appears, and is visible in the layout: |
| 553 // No expected calls to the PasswordStore... | 543 // No expected calls to the PasswordStore... |
| 554 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 544 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 555 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); | 545 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); |
| 556 EXPECT_CALL(*store_, AddLogin(_)).Times(0); | 546 EXPECT_CALL(*store_, AddLogin(_)).Times(0); |
| 557 EXPECT_CALL(*store_, UpdateLogin(_)).Times(0); | 547 EXPECT_CALL(*store_, UpdateLogin(_)).Times(0); |
| 558 EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _)).Times(0); | 548 EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _)).Times(0); |
| 559 manager()->OnPasswordFormsParsed(&driver_, observed); | 549 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 560 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 550 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 561 } | 551 } |
| 562 | 552 |
| 563 TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) { | 553 TEST_F(PasswordManagerTest, SyncCredentialsNotSaved) { |
| 564 // Simulate loading a simple form with no existing stored password. | 554 // Simulate loading a simple form with no existing stored password. |
| 565 std::vector<PasswordForm> observed; | 555 std::vector<PasswordForm> observed; |
| 566 PasswordForm form(MakeSimpleGAIAForm()); | 556 PasswordForm form(MakeSimpleGAIAForm()); |
| 567 observed.push_back(form); | 557 observed.push_back(form); |
| 568 EXPECT_CALL(*store_, GetLogins(_, _)) | 558 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 569 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 559 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 570 manager()->OnPasswordFormsParsed(&driver_, observed); | 560 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 571 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 561 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 572 | 562 |
| 573 // User should not be prompted and password should not be saved. | 563 // User should not be prompted and password should not be saved. |
| 574 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 564 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 575 EXPECT_CALL(*store_, AddLogin(_)).Times(0); | 565 EXPECT_CALL(*store_, AddLogin(_)).Times(0); |
| 576 // Prefs are needed for failure logging about sync credentials. | 566 // Prefs are needed for failure logging about sync credentials. |
| 577 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); | 567 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); |
| 578 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 568 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 579 .WillRepeatedly(Return(true)); | 569 .WillRepeatedly(Return(true)); |
| 580 | 570 |
| 581 client_.FilterAllResultsForSaving(); | 571 client_.FilterAllResultsForSaving(); |
| 582 | 572 |
| 583 OnPasswordFormSubmitted(form); | 573 OnPasswordFormSubmitted(form); |
| 584 observed.clear(); | 574 observed.clear(); |
| 585 manager()->OnPasswordFormsParsed(&driver_, observed); | 575 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 586 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 576 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 587 } | 577 } |
| 588 | 578 |
| 589 // On a successful login with an updated password, | 579 // On a successful login with an updated password, |
| 590 // CredentialsFilter::ReportFormLoginSuccess and CredentialsFilter::ShouldSave | 580 // CredentialsFilter::ReportFormLoginSuccess and CredentialsFilter::ShouldSave |
| 591 // should be called. The argument of ShouldSave shold be the submitted form. | 581 // should be called. The argument of ShouldSave shold be the submitted form. |
| 592 TEST_F(PasswordManagerTest, ReportFormLoginSuccessAndShouldSaveCalled) { | 582 TEST_F(PasswordManagerTest, ReportFormLoginSuccessAndShouldSaveCalled) { |
| 593 PasswordForm stored_form(MakeSimpleForm()); | 583 PasswordForm stored_form(MakeSimpleForm()); |
| 594 | 584 |
| 595 std::vector<PasswordForm> observed; | 585 std::vector<PasswordForm> observed; |
| 596 PasswordForm observed_form = stored_form; | 586 PasswordForm observed_form = stored_form; |
| 597 // Different values of |username_element| needed to ensure that it is the | 587 // Different values of |username_element| needed to ensure that it is the |
| 598 // |observed_form| and not the |stored_form| what is passed to ShouldSave. | 588 // |observed_form| and not the |stored_form| what is passed to ShouldSave. |
| 599 observed_form.username_element += ASCIIToUTF16("1"); | 589 observed_form.username_element += ASCIIToUTF16("1"); |
| 600 observed.push_back(observed_form); | 590 observed.push_back(observed_form); |
| 601 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2); | 591 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(3); |
| 602 // Simulate that |form| is already in the store, making this an update. | 592 // Simulate that |form| is already in the store, making this an update. |
| 603 EXPECT_CALL(*store_, GetLogins(_, _)) | 593 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 604 .WillRepeatedly(WithArg<1>(InvokeConsumer(stored_form))); | 594 .WillRepeatedly(WithArg<1>(InvokeConsumer(stored_form))); |
| 605 manager()->OnPasswordFormsParsed(&driver_, observed); | 595 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 606 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 596 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 607 | 597 |
| 608 // Submit form and finish navigation. | 598 // Submit form and finish navigation. |
| 609 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 599 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 610 .WillRepeatedly(Return(true)); | 600 .WillRepeatedly(Return(true)); |
| 611 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); | 601 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 677 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 667 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 678 .WillRepeatedly(Return(true)); | 668 .WillRepeatedly(Return(true)); |
| 679 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); | 669 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); |
| 680 manager()->ProvisionallySavePassword(updated_form, nullptr); | 670 manager()->ProvisionallySavePassword(updated_form, nullptr); |
| 681 | 671 |
| 682 client_.FilterAllResultsForSaving(); | 672 client_.FilterAllResultsForSaving(); |
| 683 | 673 |
| 684 // Because the user successfully uses an updated sync password, Chrome should | 674 // Because the user successfully uses an updated sync password, Chrome should |
| 685 // remove the obsolete copy of it. | 675 // remove the obsolete copy of it. |
| 686 EXPECT_CALL(*store_, RemoveLogin(form)); | 676 EXPECT_CALL(*store_, RemoveLogin(form)); |
| 687 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 677 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 688 observed.clear(); | 678 observed.clear(); |
| 689 manager()->OnPasswordFormsParsed(&driver_, observed); | 679 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 690 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 680 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 691 } | 681 } |
| 692 | 682 |
| 693 // While sync credentials are not saved, they are still filled to avoid users | 683 // While sync credentials are not saved, they are still filled to avoid users |
| 694 // thinking they lost access to their accounts. | 684 // thinking they lost access to their accounts. |
| 695 TEST_F(PasswordManagerTest, SyncCredentialsStillFilled) { | 685 TEST_F(PasswordManagerTest, SyncCredentialsStillFilled) { |
| 696 PasswordForm form(MakeSimpleForm()); | 686 PasswordForm form(MakeSimpleForm()); |
| 697 // Pretend that the password store contains credentials stored for |form|. | 687 // Pretend that the password store contains credentials stored for |form|. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 714 // considered equal to the original login form, and the attempt recognised as a | 704 // considered equal to the original login form, and the attempt recognised as a |
| 715 // failure. | 705 // failure. |
| 716 TEST_F(PasswordManagerTest, | 706 TEST_F(PasswordManagerTest, |
| 717 SeeingFormActionWithOnlyHttpHttpsChangeIsLoginFailure) { | 707 SeeingFormActionWithOnlyHttpHttpsChangeIsLoginFailure) { |
| 718 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0); | 708 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(0); |
| 719 | 709 |
| 720 PasswordForm first_form(MakeSimpleForm()); | 710 PasswordForm first_form(MakeSimpleForm()); |
| 721 first_form.origin = GURL("http://www.xda-developers.com/"); | 711 first_form.origin = GURL("http://www.xda-developers.com/"); |
| 722 first_form.action = GURL("http://forum.xda-developers.com/login.php"); | 712 first_form.action = GURL("http://forum.xda-developers.com/login.php"); |
| 723 | 713 |
| 724 // |second_form|'s action differs only with it's scheme i.e. *https://*. | 714 // |second_form|'s action differs only with it's scheme i.e. "https://". |
| 725 PasswordForm second_form(first_form); | 715 PasswordForm second_form(first_form); |
| 726 second_form.action = GURL("https://forum.xda-developers.com/login.php"); | 716 second_form.action = GURL("https://forum.xda-developers.com/login.php"); |
| 727 | 717 |
| 728 std::vector<PasswordForm> observed; | 718 std::vector<PasswordForm> observed; |
| 729 observed.push_back(first_form); | 719 observed.push_back(first_form); |
| 730 EXPECT_CALL(*store_, GetLogins(_, _)) | 720 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 731 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 721 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 732 manager()->OnPasswordFormsParsed(&driver_, observed); | 722 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 733 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 723 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 734 | 724 |
| 735 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 725 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 736 .WillRepeatedly(Return(true)); | 726 .WillRepeatedly(Return(true)); |
| 737 OnPasswordFormSubmitted(first_form); | 727 OnPasswordFormSubmitted(first_form); |
| 738 | 728 |
| 739 // Simulate loading a page, which contains |second_form| instead of | 729 // Simulate loading a page, which contains |second_form| instead of |
| 740 // |first_form|. | 730 // |first_form|. |
| 741 observed.clear(); | 731 observed.clear(); |
| 742 observed.push_back(second_form); | 732 observed.push_back(second_form); |
| 743 | 733 |
| 744 // Verify that no prompt to save the password is shown. | 734 // Verify that no prompt to save the password is shown. |
| 745 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 735 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 746 manager()->OnPasswordFormsParsed(&driver_, observed); | 736 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 747 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 737 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 748 } | 738 } |
| 749 | 739 |
| 750 TEST_F(PasswordManagerTest, | 740 TEST_F(PasswordManagerTest, |
| 751 ShouldBlockPasswordForSameOriginButDifferentSchemeTest) { | 741 ShouldBlockPasswordForSameOriginButDifferentSchemeTest) { |
| 752 constexpr struct { | 742 constexpr struct { |
| 753 const char* old_origin; | 743 const char* old_origin; |
| 754 const char* new_origin; | 744 const char* new_origin; |
| 755 bool result; | 745 bool result; |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 .WillRepeatedly(ReturnRef(secure_form.origin)); | 797 .WillRepeatedly(ReturnRef(secure_form.origin)); |
| 808 | 798 |
| 809 // Parse, render and submit the secure form. | 799 // Parse, render and submit the secure form. |
| 810 std::vector<PasswordForm> observed = {secure_form}; | 800 std::vector<PasswordForm> observed = {secure_form}; |
| 811 manager()->OnPasswordFormsParsed(&driver_, observed); | 801 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 812 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 802 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 813 OnPasswordFormSubmitted(secure_form); | 803 OnPasswordFormSubmitted(secure_form); |
| 814 | 804 |
| 815 // Make sure |PromptUserToSaveOrUpdatePassword| gets called, and the resulting | 805 // Make sure |PromptUserToSaveOrUpdatePassword| gets called, and the resulting |
| 816 // form manager is saved. | 806 // form manager is saved. |
| 817 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 807 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 818 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 808 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 819 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 809 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 820 | 810 |
| 821 EXPECT_CALL(client_, GetMainFrameURL()) | 811 EXPECT_CALL(client_, GetMainFrameURL()) |
| 822 .WillRepeatedly(ReturnRef(insecure_form.origin)); | 812 .WillRepeatedly(ReturnRef(insecure_form.origin)); |
| 823 | 813 |
| 824 // Parse, render and submit the insecure form. | 814 // Parse, render and submit the insecure form. |
| 825 observed = {insecure_form}; | 815 observed = {insecure_form}; |
| 826 manager()->OnPasswordFormsParsed(&driver_, observed); | 816 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 827 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 817 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 828 OnPasswordFormSubmitted(insecure_form); | 818 OnPasswordFormSubmitted(insecure_form); |
| 829 | 819 |
| 830 // Expect no further calls to |ProptUserToSaveOrUpdatePassword| due to | 820 // Expect no further calls to |ProptUserToSaveOrUpdatePassword| due to |
| 831 // insecure origin. | 821 // insecure origin. |
| 832 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 822 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 833 | 823 |
| 834 // Trigger call to |ProvisionalSavePassword| by rendering a page without | 824 // Trigger call to |ProvisionalSavePassword| by rendering a page without |
| 835 // forms. | 825 // forms. |
| 836 observed.clear(); | 826 observed.clear(); |
| 837 manager()->OnPasswordFormsParsed(&driver_, observed); | 827 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 838 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 828 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 839 | 829 |
| 840 // Make sure that the form saved by the user is indeed the secure form. | 830 // Make sure that the form saved by the user is indeed the secure form. |
| 841 ASSERT_TRUE(form_manager_to_save); | 831 ASSERT_TRUE(form_manager_to_save); |
| 842 EXPECT_THAT(form_manager_to_save->pending_credentials(), | 832 EXPECT_THAT(form_manager_to_save->pending_credentials(), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 858 observed.push_back(form); | 848 observed.push_back(form); |
| 859 EXPECT_CALL(*store_, GetLogins(_, _)) | 849 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 860 .WillOnce(WithArg<1>(InvokeEmptyConsumerWithForms())); | 850 .WillOnce(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 861 manager()->OnPasswordFormsParsed(&driver_, observed); | 851 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 862 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 852 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 863 | 853 |
| 864 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 854 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 865 .WillRepeatedly(Return(true)); | 855 .WillRepeatedly(Return(true)); |
| 866 OnPasswordFormSubmitted(form); | 856 OnPasswordFormSubmitted(form); |
| 867 | 857 |
| 868 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 858 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 869 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 859 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 870 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 860 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 871 | 861 |
| 872 // Now the password manager waits for the login to complete successfully. | 862 // Now the password manager waits for the login to complete successfully. |
| 873 observed.clear(); | 863 observed.clear(); |
| 874 manager()->OnPasswordFormsParsed(&driver_, observed); | 864 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 875 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 865 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 876 ASSERT_TRUE(form_manager_to_save); | 866 ASSERT_TRUE(form_manager_to_save); |
| 877 EXPECT_EQ(form.password_value, | 867 EXPECT_EQ(form.password_value, |
| 878 PasswordFormManager::PasswordToSave( | 868 PasswordFormManager::PasswordToSave( |
| 879 form_manager_to_save->pending_credentials())); | 869 form_manager_to_save->pending_credentials())); |
| 880 } | 870 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 891 observed.push_back(form); | 881 observed.push_back(form); |
| 892 EXPECT_CALL(*store_, GetLogins(_, _)) | 882 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 893 .WillOnce(WithArg<1>(InvokeEmptyConsumerWithForms())); | 883 .WillOnce(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 894 manager()->OnPasswordFormsParsed(&driver_, observed); | 884 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 895 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 885 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 896 | 886 |
| 897 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 887 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 898 .WillRepeatedly(Return(true)); | 888 .WillRepeatedly(Return(true)); |
| 899 OnPasswordFormSubmitted(form); | 889 OnPasswordFormSubmitted(form); |
| 900 | 890 |
| 901 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 891 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 902 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 892 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 903 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 893 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 904 | 894 |
| 905 // Now the password manager waits for the navigation to complete. | 895 // Now the password manager waits for the navigation to complete. |
| 906 observed.clear(); | 896 observed.clear(); |
| 907 manager()->OnPasswordFormsParsed(&driver_, observed); | 897 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 908 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 898 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 909 | 899 |
| 910 // Simulate saving the form, as if the info bar was accepted. | 900 // Simulate saving the form, as if the info bar was accepted. |
| 911 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); | 901 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
| 912 ASSERT_TRUE(form_manager_to_save); | 902 ASSERT_TRUE(form_manager_to_save); |
| 913 form_manager_to_save->Save(); | 903 form_manager_to_save->Save(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 934 manager()->OnPasswordFormsParsed(&driver_b, observed); | 924 manager()->OnPasswordFormsParsed(&driver_b, observed); |
| 935 } | 925 } |
| 936 | 926 |
| 937 TEST_F(PasswordManagerTest, InPageNavigation) { | 927 TEST_F(PasswordManagerTest, InPageNavigation) { |
| 938 // Test that observing a newly submitted form shows the save password bar on | 928 // Test that observing a newly submitted form shows the save password bar on |
| 939 // call in page navigation. | 929 // call in page navigation. |
| 940 std::vector<PasswordForm> observed; | 930 std::vector<PasswordForm> observed; |
| 941 PasswordForm form(MakeSimpleForm()); | 931 PasswordForm form(MakeSimpleForm()); |
| 942 observed.push_back(form); | 932 observed.push_back(form); |
| 943 EXPECT_CALL(*store_, GetLogins(_, _)) | 933 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 944 .WillOnce(WithArg<1>(InvokeEmptyConsumerWithForms())); | 934 .Times(2) |
| 935 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 945 manager()->OnPasswordFormsParsed(&driver_, observed); | 936 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 946 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 937 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 947 | 938 |
| 948 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 939 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 949 .WillRepeatedly(Return(true)); | 940 .WillRepeatedly(Return(true)); |
| 950 | 941 |
| 951 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 942 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 952 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 943 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 953 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 944 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 954 | 945 |
| 955 manager()->OnInPageNavigation(&driver_, form); | 946 manager()->OnInPageNavigation(&driver_, form); |
| 956 | 947 |
| 948 // Checks |form_manager_to_save| is still in |pending_login_managers_|. |
| 949 EXPECT_EQ(1u, manager()->pending_login_managers().size()); |
| 950 |
| 957 // Simulate saving the form, as if the info bar was accepted. | 951 // Simulate saving the form, as if the info bar was accepted. |
| 958 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); | 952 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
| 959 ASSERT_TRUE(form_manager_to_save); | 953 ASSERT_TRUE(form_manager_to_save); |
| 960 form_manager_to_save->Save(); | 954 form_manager_to_save->Save(); |
| 961 } | 955 } |
| 962 | 956 |
| 963 TEST_F(PasswordManagerTest, InPageNavigationBlacklistedSite) { | 957 TEST_F(PasswordManagerTest, InPageNavigationBlacklistedSite) { |
| 964 // Test that observing a newly submitted form on blacklisted site does notify | 958 // Test that observing a newly submitted form on blacklisted site does notify |
| 965 // the embedder on call in page navigation. | 959 // the embedder on call in page navigation. |
| 966 std::vector<PasswordForm> observed; | 960 std::vector<PasswordForm> observed; |
| 967 PasswordForm form(MakeSimpleForm()); | 961 PasswordForm form(MakeSimpleForm()); |
| 968 observed.push_back(form); | 962 observed.push_back(form); |
| 969 // Simulate that blacklisted form stored in store. | 963 // Simulate that blacklisted form stored in store. |
| 970 PasswordForm blacklisted_form(form); | 964 PasswordForm blacklisted_form(form); |
| 971 blacklisted_form.username_value = ASCIIToUTF16(""); | 965 blacklisted_form.username_value = ASCIIToUTF16(""); |
| 972 blacklisted_form.blacklisted_by_user = true; | 966 blacklisted_form.blacklisted_by_user = true; |
| 973 EXPECT_CALL(*store_, GetLogins(_, _)) | 967 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 974 .WillOnce(WithArg<1>(InvokeConsumer(blacklisted_form))); | 968 .WillOnce(WithArg<1>(InvokeConsumer(blacklisted_form))); |
| 975 manager()->OnPasswordFormsParsed(&driver_, observed); | 969 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 976 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 970 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 977 | 971 |
| 978 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 972 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 979 .WillRepeatedly(Return(true)); | 973 .WillRepeatedly(Return(true)); |
| 980 // Prefs are needed for failure logging about blacklisting. | 974 // Prefs are needed for failure logging about blacklisting. |
| 981 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); | 975 EXPECT_CALL(client_, GetPrefs()).WillRepeatedly(Return(nullptr)); |
| 982 | 976 |
| 983 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 977 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 984 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 978 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 985 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 979 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 986 | 980 |
| 987 manager()->OnInPageNavigation(&driver_, form); | 981 manager()->OnInPageNavigation(&driver_, form); |
| 988 EXPECT_TRUE(form_manager_to_save->IsBlacklisted()); | 982 EXPECT_TRUE(form_manager_to_save->IsBlacklisted()); |
| 989 } | 983 } |
| 990 | 984 |
| 991 TEST_F(PasswordManagerTest, SavingSignupForms_NoHTMLMatch) { | 985 TEST_F(PasswordManagerTest, SavingSignupForms_NoHTMLMatch) { |
| 992 // Signup forms don't require HTML attributes match in order to save. | 986 // Signup forms don't require HTML attributes match in order to save. |
| 993 // Verify that we prefer a better match (action + origin vs. origin). | 987 // Verify that we prefer a better match (action + origin vs. origin). |
| 994 std::vector<PasswordForm> observed; | 988 std::vector<PasswordForm> observed; |
| 995 PasswordForm form(MakeSimpleForm()); | 989 PasswordForm form(MakeSimpleForm()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1008 PasswordForm submitted_form(form); | 1002 PasswordForm submitted_form(form); |
| 1009 submitted_form.new_password_element = ASCIIToUTF16("new_password"); | 1003 submitted_form.new_password_element = ASCIIToUTF16("new_password"); |
| 1010 submitted_form.new_password_value = form.password_value; | 1004 submitted_form.new_password_value = form.password_value; |
| 1011 submitted_form.password_element.clear(); | 1005 submitted_form.password_element.clear(); |
| 1012 submitted_form.password_value.clear(); | 1006 submitted_form.password_value.clear(); |
| 1013 | 1007 |
| 1014 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1008 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1015 .WillRepeatedly(Return(true)); | 1009 .WillRepeatedly(Return(true)); |
| 1016 OnPasswordFormSubmitted(submitted_form); | 1010 OnPasswordFormSubmitted(submitted_form); |
| 1017 | 1011 |
| 1018 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 1012 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 1019 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1013 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1020 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1014 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 1021 | 1015 |
| 1022 // Now the password manager waits for the navigation to complete. | 1016 // Now the password manager waits for the navigation to complete. |
| 1023 observed.clear(); | 1017 observed.clear(); |
| 1024 manager()->OnPasswordFormsParsed(&driver_, observed); | 1018 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1025 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1019 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1026 | 1020 |
| 1027 // Simulate saving the form, as if the info bar was accepted. | 1021 // Simulate saving the form, as if the info bar was accepted. |
| 1028 PasswordForm form_to_save; | 1022 PasswordForm form_to_save; |
| 1029 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); | 1023 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); |
| 1030 ASSERT_TRUE(form_manager_to_save); | 1024 ASSERT_TRUE(form_manager_to_save); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1061 manager()->OnPasswordFormsParsed(&driver_, observed); | 1055 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1062 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1056 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1063 | 1057 |
| 1064 PasswordForm submitted_form(form); | 1058 PasswordForm submitted_form(form); |
| 1065 submitted_form.action = GURL("http://www.google.com/other/action"); | 1059 submitted_form.action = GURL("http://www.google.com/other/action"); |
| 1066 | 1060 |
| 1067 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1061 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1068 .WillRepeatedly(Return(true)); | 1062 .WillRepeatedly(Return(true)); |
| 1069 OnPasswordFormSubmitted(submitted_form); | 1063 OnPasswordFormSubmitted(submitted_form); |
| 1070 | 1064 |
| 1071 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 1065 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 1072 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1066 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1073 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1067 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 1074 | 1068 |
| 1075 // Now the password manager waits for the navigation to complete. | 1069 // Now the password manager waits for the navigation to complete. |
| 1076 observed.clear(); | 1070 observed.clear(); |
| 1077 manager()->OnPasswordFormsParsed(&driver_, observed); | 1071 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1078 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1072 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1079 | 1073 |
| 1080 // Simulate saving the form, as if the info bar was accepted. | 1074 // Simulate saving the form, as if the info bar was accepted. |
| 1081 PasswordForm form_to_save; | 1075 PasswordForm form_to_save; |
| 1082 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); | 1076 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); |
| 1083 ASSERT_TRUE(form_manager_to_save); | 1077 ASSERT_TRUE(form_manager_to_save); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1113 // choice of username is accepted by PasswordManager, otherwise the the form | 1107 // choice of username is accepted by PasswordManager, otherwise the the form |
| 1114 // will be rejected as not equal to the observed one. Note that during | 1108 // will be rejected as not equal to the observed one. Note that during |
| 1115 // initial parsing we don't have autofill server predictions yet, that's why | 1109 // initial parsing we don't have autofill server predictions yet, that's why |
| 1116 // observed form and submitted form may be different. | 1110 // observed form and submitted form may be different. |
| 1117 form.username_element = ASCIIToUTF16("Username"); | 1111 form.username_element = ASCIIToUTF16("Username"); |
| 1118 form.was_parsed_using_autofill_predictions = true; | 1112 form.was_parsed_using_autofill_predictions = true; |
| 1119 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1113 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1120 .WillRepeatedly(Return(true)); | 1114 .WillRepeatedly(Return(true)); |
| 1121 OnPasswordFormSubmitted(form); | 1115 OnPasswordFormSubmitted(form); |
| 1122 | 1116 |
| 1123 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 1117 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 1124 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1118 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1125 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1119 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 1126 | 1120 |
| 1127 // Now the password manager waits for the navigation to complete. | 1121 // Now the password manager waits for the navigation to complete. |
| 1128 observed.clear(); | 1122 observed.clear(); |
| 1129 manager()->OnPasswordFormsParsed(&driver_, observed); | 1123 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1130 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1124 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1131 | 1125 |
| 1132 // Simulate saving the form, as if the info bar was accepted. | 1126 // Simulate saving the form, as if the info bar was accepted. |
| 1133 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); | 1127 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
| 1134 ASSERT_TRUE(form_manager_to_save); | 1128 ASSERT_TRUE(form_manager_to_save); |
| 1135 form_manager_to_save->Save(); | 1129 form_manager_to_save->Save(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1146 .WillOnce(WithArg<1>(InvokeConsumer(form))); | 1140 .WillOnce(WithArg<1>(InvokeConsumer(form))); |
| 1147 manager()->OnPasswordFormsParsed(&driver_, observed); | 1141 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1148 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1142 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1149 | 1143 |
| 1150 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1144 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1151 .WillRepeatedly(Return(true)); | 1145 .WillRepeatedly(Return(true)); |
| 1152 OnPasswordFormSubmitted(form); | 1146 OnPasswordFormSubmitted(form); |
| 1153 | 1147 |
| 1154 autofill::PasswordForm updated_form; | 1148 autofill::PasswordForm updated_form; |
| 1155 autofill::PasswordForm notified_form; | 1149 autofill::PasswordForm notified_form; |
| 1156 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1150 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1157 EXPECT_CALL(*store_, UpdateLogin(_)).WillOnce(SaveArg<0>(&updated_form)); | 1151 EXPECT_CALL(*store_, UpdateLogin(_)).WillOnce(SaveArg<0>(&updated_form)); |
| 1158 EXPECT_CALL(client_, NotifySuccessfulLoginWithExistingPassword(_)) | 1152 EXPECT_CALL(client_, NotifySuccessfulLoginWithExistingPassword(_)) |
| 1159 .WillOnce(SaveArg<0>(¬ified_form)); | 1153 .WillOnce(SaveArg<0>(¬ified_form)); |
| 1160 | 1154 |
| 1161 // Now the password manager waits for the navigation to complete. | 1155 // Now the password manager waits for the navigation to complete. |
| 1162 observed.clear(); | 1156 observed.clear(); |
| 1163 manager()->OnPasswordFormsParsed(&driver_, observed); | 1157 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1164 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1158 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1165 | 1159 |
| 1166 EXPECT_THAT(form, FormMatches(updated_form)); | 1160 EXPECT_THAT(form, FormMatches(updated_form)); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1186 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1180 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1187 .WillRepeatedly(Return(true)); | 1181 .WillRepeatedly(Return(true)); |
| 1188 OnPasswordFormSubmitted(form); | 1182 OnPasswordFormSubmitted(form); |
| 1189 | 1183 |
| 1190 // Emulate fetching password form from PasswordStore after submission but | 1184 // Emulate fetching password form from PasswordStore after submission but |
| 1191 // before post-navigation load. | 1185 // before post-navigation load. |
| 1192 ASSERT_TRUE(form_manager); | 1186 ASSERT_TRUE(form_manager); |
| 1193 static_cast<FormFetcherImpl*>(form_manager->form_fetcher()) | 1187 static_cast<FormFetcherImpl*>(form_manager->form_fetcher()) |
| 1194 ->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>()); | 1188 ->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>()); |
| 1195 | 1189 |
| 1196 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 1190 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 1197 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1191 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1198 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1192 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 1199 | 1193 |
| 1200 // Now the password manager waits for the navigation to complete. | 1194 // Now the password manager waits for the navigation to complete. |
| 1201 observed.clear(); | 1195 observed.clear(); |
| 1202 manager()->OnPasswordFormsParsed(&driver_, observed); | 1196 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1203 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1197 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1204 | 1198 |
| 1205 // Simulate saving the form, as if the info bar was accepted. | 1199 // Simulate saving the form, as if the info bar was accepted. |
| 1206 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); | 1200 EXPECT_CALL(*store_, AddLogin(FormMatches(form))); |
| 1207 ASSERT_TRUE(form_manager_to_save); | 1201 ASSERT_TRUE(form_manager_to_save); |
| 1208 form_manager_to_save->Save(); | 1202 form_manager_to_save->Save(); |
| 1209 } | 1203 } |
| 1210 | 1204 |
| 1211 TEST_F(PasswordManagerTest, PasswordGeneration_FailedSubmission) { | 1205 TEST_F(PasswordManagerTest, PasswordGeneration_FailedSubmission) { |
| 1212 std::vector<PasswordForm> observed; | 1206 std::vector<PasswordForm> observed; |
| 1213 PasswordForm form(MakeFormWithOnlyNewPasswordField()); | 1207 PasswordForm form(MakeFormWithOnlyNewPasswordField()); |
| 1214 observed.push_back(form); | 1208 observed.push_back(form); |
| 1215 EXPECT_CALL(*store_, GetLogins(_, _)) | 1209 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 1216 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 1210 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 1217 manager()->OnPasswordFormsParsed(&driver_, observed); | 1211 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1218 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1212 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1219 | 1213 |
| 1220 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1214 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1221 .WillRepeatedly(Return(true)); | 1215 .WillRepeatedly(Return(true)); |
| 1222 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); | 1216 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); |
| 1223 | 1217 |
| 1224 // Do not save generated password when the password form reappears. | 1218 // Do not save generated password when the password form reappears. |
| 1225 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1219 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1226 EXPECT_CALL(*store_, AddLogin(_)).Times(0); | 1220 EXPECT_CALL(*store_, AddLogin(_)).Times(0); |
| 1227 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); | 1221 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); |
| 1228 | 1222 |
| 1229 // Simulate submission failing, with the same form being visible after | 1223 // Simulate submission failing, with the same form being visible after |
| 1230 // navigation. | 1224 // navigation. |
| 1231 OnPasswordFormSubmitted(form); | 1225 OnPasswordFormSubmitted(form); |
| 1232 manager()->OnPasswordFormsParsed(&driver_, observed); | 1226 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1233 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1227 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1234 } | 1228 } |
| 1235 | 1229 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1247 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1241 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1248 .WillRepeatedly(Return(true)); | 1242 .WillRepeatedly(Return(true)); |
| 1249 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); | 1243 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); |
| 1250 | 1244 |
| 1251 // Simulate user editing and submitting a different password. Verify that | 1245 // Simulate user editing and submitting a different password. Verify that |
| 1252 // the edited password is the one that is saved. | 1246 // the edited password is the one that is saved. |
| 1253 form.new_password_value = ASCIIToUTF16("different_password"); | 1247 form.new_password_value = ASCIIToUTF16("different_password"); |
| 1254 OnPasswordFormSubmitted(form); | 1248 OnPasswordFormSubmitted(form); |
| 1255 | 1249 |
| 1256 // Do not save generated password when the password form reappears. | 1250 // Do not save generated password when the password form reappears. |
| 1257 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1251 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1258 EXPECT_CALL(*store_, AddLogin(_)).Times(0); | 1252 EXPECT_CALL(*store_, AddLogin(_)).Times(0); |
| 1259 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); | 1253 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); |
| 1260 | 1254 |
| 1261 // Simulate submission failing, with the same form being visible after | 1255 // Simulate submission failing, with the same form being visible after |
| 1262 // navigation. | 1256 // navigation. |
| 1263 manager()->OnPasswordFormsParsed(&driver_, observed); | 1257 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1264 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1258 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1265 } | 1259 } |
| 1266 | 1260 |
| 1267 // Generated password are saved even if it looks like the submit failed (the | 1261 // Generated password are saved even if it looks like the submit failed (the |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1281 .WillRepeatedly(Return(true)); | 1275 .WillRepeatedly(Return(true)); |
| 1282 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); | 1276 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); |
| 1283 | 1277 |
| 1284 // Simulate user removing generated password and adding a new one. | 1278 // Simulate user removing generated password and adding a new one. |
| 1285 form.new_password_value = ASCIIToUTF16("different_password"); | 1279 form.new_password_value = ASCIIToUTF16("different_password"); |
| 1286 manager()->SetHasGeneratedPasswordForForm(&driver_, form, false); | 1280 manager()->SetHasGeneratedPasswordForForm(&driver_, form, false); |
| 1287 | 1281 |
| 1288 OnPasswordFormSubmitted(form); | 1282 OnPasswordFormSubmitted(form); |
| 1289 | 1283 |
| 1290 // No infobar or prompt is shown if submission fails. | 1284 // No infobar or prompt is shown if submission fails. |
| 1291 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1285 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1292 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); | 1286 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); |
| 1293 | 1287 |
| 1294 // Simulate submission failing, with the same form being visible after | 1288 // Simulate submission failing, with the same form being visible after |
| 1295 // navigation. | 1289 // navigation. |
| 1296 manager()->OnPasswordFormsParsed(&driver_, observed); | 1290 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1297 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1291 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1298 } | 1292 } |
| 1299 | 1293 |
| 1300 // Verify that passwords which are no longer generated trigger the confirmation | 1294 // Verify that passwords which are no longer generated trigger the confirmation |
| 1301 // dialog when submitted. | 1295 // dialog when submitted. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1313 .WillRepeatedly(Return(true)); | 1307 .WillRepeatedly(Return(true)); |
| 1314 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); | 1308 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); |
| 1315 | 1309 |
| 1316 // Simulate user removing generated password and adding a new one. | 1310 // Simulate user removing generated password and adding a new one. |
| 1317 form.new_password_value = ASCIIToUTF16("different_password"); | 1311 form.new_password_value = ASCIIToUTF16("different_password"); |
| 1318 manager()->SetHasGeneratedPasswordForForm(&driver_, form, false); | 1312 manager()->SetHasGeneratedPasswordForForm(&driver_, form, false); |
| 1319 | 1313 |
| 1320 OnPasswordFormSubmitted(form); | 1314 OnPasswordFormSubmitted(form); |
| 1321 | 1315 |
| 1322 // Verify that a normal prompt is shown instead of the force saving UI. | 1316 // Verify that a normal prompt is shown instead of the force saving UI. |
| 1323 std::unique_ptr<PasswordFormManager> form_to_save; | 1317 scoped_refptr<PasswordFormManager> form_to_save; |
| 1324 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1318 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1325 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_to_save))); | 1319 .WillOnce(DoAll(SaveArg<0>(&form_to_save), Return(false))); |
| 1326 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); | 1320 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()).Times(0); |
| 1327 | 1321 |
| 1328 // Simulate a successful submission. | 1322 // Simulate a successful submission. |
| 1329 observed.clear(); | 1323 observed.clear(); |
| 1330 manager()->OnPasswordFormsParsed(&driver_, observed); | 1324 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1331 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1325 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1332 } | 1326 } |
| 1333 | 1327 |
| 1334 TEST_F(PasswordManagerTest, PasswordGenerationUsernameChanged) { | 1328 TEST_F(PasswordManagerTest, PasswordGenerationUsernameChanged) { |
| 1335 std::vector<PasswordForm> observed; | 1329 std::vector<PasswordForm> observed; |
| 1336 PasswordForm form(MakeFormWithOnlyNewPasswordField()); | 1330 PasswordForm form(MakeFormWithOnlyNewPasswordField()); |
| 1337 observed.push_back(form); | 1331 observed.push_back(form); |
| 1338 EXPECT_CALL(*store_, GetLogins(_, _)) | 1332 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 1339 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 1333 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 1340 manager()->OnPasswordFormsParsed(&driver_, observed); | 1334 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1341 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1335 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1342 | 1336 |
| 1343 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1337 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1344 .WillRepeatedly(Return(true)); | 1338 .WillRepeatedly(Return(true)); |
| 1345 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); | 1339 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); |
| 1346 | 1340 |
| 1347 // Simulate user changing the password and username, without ever completely | 1341 // Simulate user changing the password and username, without ever completely |
| 1348 // deleting the password. | 1342 // deleting the password. |
| 1349 form.new_password_value = ASCIIToUTF16("different_password"); | 1343 form.new_password_value = ASCIIToUTF16("different_password"); |
| 1350 form.username_value = ASCIIToUTF16("new_username"); | 1344 form.username_value = ASCIIToUTF16("new_username"); |
| 1351 OnPasswordFormSubmitted(form); | 1345 OnPasswordFormSubmitted(form); |
| 1352 | 1346 |
| 1353 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1347 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1354 PasswordForm form_to_save; | 1348 PasswordForm form_to_save; |
| 1355 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); | 1349 EXPECT_CALL(*store_, AddLogin(_)).WillOnce(SaveArg<0>(&form_to_save)); |
| 1356 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()); | 1350 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()); |
| 1357 | 1351 |
| 1358 observed.clear(); | 1352 observed.clear(); |
| 1359 manager()->OnPasswordFormsParsed(&driver_, observed); | 1353 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1360 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1354 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1361 EXPECT_EQ(form.username_value, form_to_save.username_value); | 1355 EXPECT_EQ(form.username_value, form_to_save.username_value); |
| 1362 // What was "new password" field in the submitted form, becomes the current | 1356 // What was "new password" field in the submitted form, becomes the current |
| 1363 // password field in the form to save. | 1357 // password field in the form to save. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1406 if (found_matched_logins_in_store) { | 1400 if (found_matched_logins_in_store) { |
| 1407 EXPECT_CALL(*store_, GetLogins(_, _)) | 1401 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 1408 .WillRepeatedly(WithArg<1>(InvokeConsumer(form))); | 1402 .WillRepeatedly(WithArg<1>(InvokeConsumer(form))); |
| 1409 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _)); | 1403 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _)); |
| 1410 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2); | 1404 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2); |
| 1411 } else { | 1405 } else { |
| 1412 EXPECT_CALL(*store_, GetLogins(_, _)) | 1406 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 1413 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 1407 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 1414 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _)); | 1408 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _)); |
| 1415 } | 1409 } |
| 1416 std::unique_ptr<PasswordFormManager> form_manager; | 1410 scoped_refptr<PasswordFormManager> form_manager; |
| 1417 if (found_matched_logins_in_store) { | 1411 if (found_matched_logins_in_store) { |
| 1418 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1412 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1419 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager))); | 1413 .WillOnce(DoAll(SaveArg<0>(&form_manager), Return(false))); |
| 1420 } else { | 1414 } else { |
| 1421 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1415 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1422 } | 1416 } |
| 1423 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()) | 1417 EXPECT_CALL(client_, AutomaticPasswordSaveIndicator()) |
| 1424 .Times(found_matched_logins_in_store ? 0 : 1); | 1418 .Times(found_matched_logins_in_store ? 0 : 1); |
| 1425 manager()->OnPasswordFormsParsed(&driver_, observed); | 1419 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1426 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1420 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1427 | 1421 |
| 1428 // The user accepts generated password and makes successful login. | 1422 // The user accepts generated password and makes successful login. |
| 1429 EXPECT_CALL(*store_, AddLogin(form)).WillOnce(Return()); | 1423 EXPECT_CALL(*store_, AddLogin(form)).WillOnce(Return()); |
| 1430 manager()->OnPresaveGeneratedPassword(form); | 1424 manager()->OnPresaveGeneratedPassword(form); |
| 1431 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); | 1425 manager()->SetHasGeneratedPasswordForForm(&driver_, form, true); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1478 features::kEnablePasswordForceSaving); | 1472 features::kEnablePasswordForceSaving); |
| 1479 PasswordForm form(MakeSimpleForm()); | 1473 PasswordForm form(MakeSimpleForm()); |
| 1480 | 1474 |
| 1481 std::vector<PasswordForm> observed; | 1475 std::vector<PasswordForm> observed; |
| 1482 observed.push_back(form); | 1476 observed.push_back(form); |
| 1483 EXPECT_CALL(*store_, GetLogins(_, _)) | 1477 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 1484 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 1478 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 1485 manager()->OnPasswordFormsParsed(&driver_, observed); | 1479 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1486 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1480 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1487 | 1481 |
| 1488 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 1482 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 1489 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1483 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1490 .WillRepeatedly(Return(true)); | 1484 .WillRepeatedly(Return(true)); |
| 1491 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1485 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1492 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1486 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 1493 manager()->OnPasswordFormForceSaveRequested(&driver_, form); | 1487 manager()->OnPasswordFormForceSaveRequested(&driver_, form); |
| 1494 ASSERT_TRUE(form_manager_to_save); | 1488 ASSERT_TRUE(form_manager_to_save); |
| 1495 EXPECT_EQ(form.password_value, | 1489 EXPECT_EQ(form.password_value, |
| 1496 PasswordFormManager::PasswordToSave( | 1490 PasswordFormManager::PasswordToSave( |
| 1497 form_manager_to_save->pending_credentials())); | 1491 form_manager_to_save->pending_credentials())); |
| 1498 } | 1492 } |
| 1499 | 1493 |
| 1500 // Forcing Chrome to save an empty passwords should fail without a crash. | 1494 // Forcing Chrome to save an empty passwords should fail without a crash. |
| 1501 TEST_F(PasswordManagerTest, ForceSavingPasswords_Empty) { | 1495 TEST_F(PasswordManagerTest, ForceSavingPasswords_Empty) { |
| 1502 // Add the enable-password-force-saving feature. | 1496 // Add the enable-password-force-saving feature. |
| 1503 base::test::ScopedFeatureList scoped_feature_list; | 1497 base::test::ScopedFeatureList scoped_feature_list; |
| 1504 scoped_feature_list.InitAndEnableFeature( | 1498 scoped_feature_list.InitAndEnableFeature( |
| 1505 features::kEnablePasswordForceSaving); | 1499 features::kEnablePasswordForceSaving); |
| 1506 PasswordForm empty_password_form; | 1500 PasswordForm empty_password_form; |
| 1507 | 1501 |
| 1508 std::vector<PasswordForm> observed; | 1502 std::vector<PasswordForm> observed; |
| 1509 observed.push_back(empty_password_form); | 1503 observed.push_back(empty_password_form); |
| 1510 EXPECT_CALL(*store_, GetLogins(_, _)) | 1504 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 1511 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 1505 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 1512 manager()->OnPasswordFormsParsed(&driver_, observed); | 1506 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1513 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1507 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1514 | 1508 |
| 1515 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1509 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1516 .WillRepeatedly(Return(true)); | 1510 .WillRepeatedly(Return(true)); |
| 1517 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1511 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1518 manager()->OnPasswordFormForceSaveRequested(&driver_, empty_password_form); | 1512 manager()->OnPasswordFormForceSaveRequested(&driver_, empty_password_form); |
| 1519 } | 1513 } |
| 1520 | 1514 |
| 1521 TEST_F(PasswordManagerTest, UpdateFormManagers) { | 1515 TEST_F(PasswordManagerTest, UpdateFormManagers) { |
| 1522 // Seeing some forms should result in creating PasswordFormManagers and | 1516 // Seeing some forms should result in creating PasswordFormManagers and |
| 1523 // querying PasswordStore. Calling UpdateFormManagers should result in | 1517 // querying PasswordStore. Calling UpdateFormManagers should result in |
| 1524 // querying the store again. | 1518 // querying the store again. |
| 1525 EXPECT_CALL(*store_, GetLogins(_, _)); | 1519 EXPECT_CALL(*store_, GetLogins(_, _)); |
| 1526 | 1520 |
| 1527 PasswordForm form; | 1521 PasswordForm form; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1548 EXPECT_CALL(*store_, GetLogins(_, _)) | 1542 EXPECT_CALL(*store_, GetLogins(_, _)) |
| 1549 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); | 1543 .WillRepeatedly(WithArg<1>(InvokeEmptyConsumerWithForms())); |
| 1550 manager()->OnPasswordFormsParsed(&driver_, observed); | 1544 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1551 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1545 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1552 | 1546 |
| 1553 manager()->DropFormManagers(); | 1547 manager()->DropFormManagers(); |
| 1554 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1548 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1555 .WillRepeatedly(Return(true)); | 1549 .WillRepeatedly(Return(true)); |
| 1556 OnPasswordFormSubmitted(form); | 1550 OnPasswordFormSubmitted(form); |
| 1557 | 1551 |
| 1558 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1552 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1559 observed.clear(); | 1553 observed.clear(); |
| 1560 manager()->OnPasswordFormsParsed(&driver_, observed); | 1554 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1561 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1555 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1562 } | 1556 } |
| 1563 | 1557 |
| 1564 TEST_F(PasswordManagerTest, AutofillingOfAffiliatedCredentials) { | 1558 TEST_F(PasswordManagerTest, AutofillingOfAffiliatedCredentials) { |
| 1565 PasswordForm android_form(MakeAndroidCredential()); | 1559 PasswordForm android_form(MakeAndroidCredential()); |
| 1566 PasswordForm observed_form(MakeSimpleForm()); | 1560 PasswordForm observed_form(MakeSimpleForm()); |
| 1567 std::vector<PasswordForm> observed_forms; | 1561 std::vector<PasswordForm> observed_forms; |
| 1568 observed_forms.push_back(observed_form); | 1562 observed_forms.push_back(observed_form); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1584 .WillRepeatedly(Return(true)); | 1578 .WillRepeatedly(Return(true)); |
| 1585 | 1579 |
| 1586 PasswordForm filled_form(observed_form); | 1580 PasswordForm filled_form(observed_form); |
| 1587 filled_form.username_value = android_form.username_value; | 1581 filled_form.username_value = android_form.username_value; |
| 1588 filled_form.password_value = android_form.password_value; | 1582 filled_form.password_value = android_form.password_value; |
| 1589 OnPasswordFormSubmitted(filled_form); | 1583 OnPasswordFormSubmitted(filled_form); |
| 1590 | 1584 |
| 1591 PasswordForm saved_form; | 1585 PasswordForm saved_form; |
| 1592 PasswordForm saved_notified_form; | 1586 PasswordForm saved_notified_form; |
| 1593 EXPECT_CALL(*store_, UpdateLogin(_)).WillOnce(SaveArg<0>(&saved_form)); | 1587 EXPECT_CALL(*store_, UpdateLogin(_)).WillOnce(SaveArg<0>(&saved_form)); |
| 1594 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)).Times(0); | 1588 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)).Times(0); |
| 1595 EXPECT_CALL(client_, NotifySuccessfulLoginWithExistingPassword(_)) | 1589 EXPECT_CALL(client_, NotifySuccessfulLoginWithExistingPassword(_)) |
| 1596 .WillOnce(SaveArg<0>(&saved_notified_form)); | 1590 .WillOnce(SaveArg<0>(&saved_notified_form)); |
| 1597 EXPECT_CALL(*store_, AddLogin(_)).Times(0); | 1591 EXPECT_CALL(*store_, AddLogin(_)).Times(0); |
| 1598 EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _)).Times(0); | 1592 EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _)).Times(0); |
| 1599 | 1593 |
| 1600 observed_forms.clear(); | 1594 observed_forms.clear(); |
| 1601 manager()->OnPasswordFormsParsed(&driver_, observed_forms); | 1595 manager()->OnPasswordFormsParsed(&driver_, observed_forms); |
| 1602 manager()->OnPasswordFormsRendered(&driver_, observed_forms, true); | 1596 manager()->OnPasswordFormsRendered(&driver_, observed_forms, true); |
| 1603 EXPECT_THAT(saved_form, FormMatches(android_form)); | 1597 EXPECT_THAT(saved_form, FormMatches(android_form)); |
| 1604 EXPECT_THAT(saved_form, FormMatches(saved_notified_form)); | 1598 EXPECT_THAT(saved_form, FormMatches(saved_notified_form)); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1622 manager()->OnPasswordFormsRendered(&driver_, observed_forms, true); | 1616 manager()->OnPasswordFormsRendered(&driver_, observed_forms, true); |
| 1623 | 1617 |
| 1624 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) | 1618 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage()) |
| 1625 .WillRepeatedly(Return(true)); | 1619 .WillRepeatedly(Return(true)); |
| 1626 | 1620 |
| 1627 PasswordForm filled_form(observed_form); | 1621 PasswordForm filled_form(observed_form); |
| 1628 filled_form.username_value = android_form.username_value; | 1622 filled_form.username_value = android_form.username_value; |
| 1629 filled_form.password_value = ASCIIToUTF16("new_password"); | 1623 filled_form.password_value = ASCIIToUTF16("new_password"); |
| 1630 OnPasswordFormSubmitted(filled_form); | 1624 OnPasswordFormSubmitted(filled_form); |
| 1631 | 1625 |
| 1632 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 1626 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 1633 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1627 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1634 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1628 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 1635 | 1629 |
| 1636 observed_forms.clear(); | 1630 observed_forms.clear(); |
| 1637 manager()->OnPasswordFormsParsed(&driver_, observed_forms); | 1631 manager()->OnPasswordFormsParsed(&driver_, observed_forms); |
| 1638 manager()->OnPasswordFormsRendered(&driver_, observed_forms, true); | 1632 manager()->OnPasswordFormsRendered(&driver_, observed_forms, true); |
| 1639 | 1633 |
| 1640 PasswordForm saved_form; | 1634 PasswordForm saved_form; |
| 1641 EXPECT_CALL(*store_, AddLogin(_)).Times(0); | 1635 EXPECT_CALL(*store_, AddLogin(_)).Times(0); |
| 1642 EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _)).Times(0); | 1636 EXPECT_CALL(*store_, UpdateLoginWithPrimaryKey(_, _)).Times(0); |
| 1643 EXPECT_CALL(*store_, UpdateLogin(_)).WillOnce(SaveArg<0>(&saved_form)); | 1637 EXPECT_CALL(*store_, UpdateLogin(_)).WillOnce(SaveArg<0>(&saved_form)); |
| 1644 ASSERT_TRUE(form_manager_to_save); | 1638 ASSERT_TRUE(form_manager_to_save); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1673 static_cast<FormFetcherImpl*>(form_manager->form_fetcher()) | 1667 static_cast<FormFetcherImpl*>(form_manager->form_fetcher()) |
| 1674 ->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>()); | 1668 ->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>()); |
| 1675 | 1669 |
| 1676 OnPasswordFormSubmitted(form); | 1670 OnPasswordFormSubmitted(form); |
| 1677 | 1671 |
| 1678 // JavaScript cleared field values. | 1672 // JavaScript cleared field values. |
| 1679 observed[0].password_value.clear(); | 1673 observed[0].password_value.clear(); |
| 1680 observed[0].new_password_value.clear(); | 1674 observed[0].new_password_value.clear(); |
| 1681 | 1675 |
| 1682 // Check success of the submission. | 1676 // Check success of the submission. |
| 1683 std::unique_ptr<PasswordFormManager> form_manager_to_save; | 1677 scoped_refptr<PasswordFormManager> form_manager_to_save; |
| 1684 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) | 1678 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePassword(_, _)) |
| 1685 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); | 1679 .WillOnce(DoAll(SaveArg<0>(&form_manager_to_save), Return(false))); |
| 1686 | 1680 |
| 1687 manager()->OnPasswordFormsParsed(&driver_, observed); | 1681 manager()->OnPasswordFormsParsed(&driver_, observed); |
| 1688 manager()->OnPasswordFormsRendered(&driver_, observed, true); | 1682 manager()->OnPasswordFormsRendered(&driver_, observed, true); |
| 1689 } | 1683 } |
| 1690 | 1684 |
| 1691 } // namespace password_manager | 1685 } // namespace password_manager |
| OLD | NEW |