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 |