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

Side by Side Diff: components/password_manager/core/browser/password_manager_unittest.cc

Issue 2900693002: [Password Manager] Convert |pending_login_managers_| to an array of scoped_refptr (Closed)
Patch Set: Rebase Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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>(&notified_form)); 1153 .WillOnce(SaveArg<0>(&notified_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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698