Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/prefs/pref_service.h" | 6 #include "base/prefs/pref_service.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
| 9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h" | 9 #include "chrome/browser/ui/passwords/manage_passwords_bubble.h" |
| 10 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" | 10 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 | 44 |
| 45 base::TimeDelta Elapsed() const override; | 45 base::TimeDelta Elapsed() const override; |
| 46 void SetElapsed(base::TimeDelta elapsed) { elapsed_ = elapsed; } | 46 void SetElapsed(base::TimeDelta elapsed) { elapsed_ = elapsed; } |
| 47 | 47 |
| 48 using ManagePasswordsUIController::DidNavigateMainFrame; | 48 using ManagePasswordsUIController::DidNavigateMainFrame; |
| 49 | 49 |
| 50 private: | 50 private: |
| 51 void UpdateBubbleAndIconVisibility() override; | 51 void UpdateBubbleAndIconVisibility() override; |
| 52 void UpdateAndroidAccountChooserInfoBarVisibility() override; | 52 void UpdateAndroidAccountChooserInfoBarVisibility() override; |
| 53 void SavePasswordInternal() override {} | 53 void SavePasswordInternal() override {} |
| 54 void NeverSavePasswordInternal() override {} | 54 void NeverSavePasswordInternal() override; |
| 55 | 55 |
| 56 base::TimeDelta elapsed_; | 56 base::TimeDelta elapsed_; |
| 57 }; | 57 }; |
| 58 | 58 |
| 59 TestManagePasswordsUIController::TestManagePasswordsUIController( | 59 TestManagePasswordsUIController::TestManagePasswordsUIController( |
| 60 content::WebContents* contents, | 60 content::WebContents* contents, |
| 61 password_manager::PasswordManagerClient* client) | 61 password_manager::PasswordManagerClient* client) |
| 62 : ManagePasswordsUIController(contents) { | 62 : ManagePasswordsUIController(contents) { |
| 63 // Do not silently replace an existing ManagePasswordsUIController because it | 63 // Do not silently replace an existing ManagePasswordsUIController because it |
| 64 // unregisters itself in WebContentsDestroyed(). | 64 // unregisters itself in WebContentsDestroyed(). |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 77 void TestManagePasswordsUIController::UpdateBubbleAndIconVisibility() { | 77 void TestManagePasswordsUIController::UpdateBubbleAndIconVisibility() { |
| 78 ManagePasswordsUIController::UpdateBubbleAndIconVisibility(); | 78 ManagePasswordsUIController::UpdateBubbleAndIconVisibility(); |
| 79 OnBubbleShown(); | 79 OnBubbleShown(); |
| 80 } | 80 } |
| 81 | 81 |
| 82 void TestManagePasswordsUIController:: | 82 void TestManagePasswordsUIController:: |
| 83 UpdateAndroidAccountChooserInfoBarVisibility() { | 83 UpdateAndroidAccountChooserInfoBarVisibility() { |
| 84 OnBubbleShown(); | 84 OnBubbleShown(); |
| 85 } | 85 } |
| 86 | 86 |
| 87 void TestManagePasswordsUIController::NeverSavePasswordInternal() { | |
| 88 autofill::PasswordForm blacklisted; | |
| 89 blacklisted.origin = this->origin(); | |
| 90 blacklisted.signon_realm = blacklisted.origin.spec(); | |
| 91 blacklisted.blacklisted_by_user = true; | |
| 92 password_manager::PasswordStoreChange change( | |
| 93 password_manager::PasswordStoreChange::ADD, blacklisted); | |
| 94 password_manager::PasswordStoreChangeList list(1, change); | |
| 95 OnLoginsChanged(list); | |
| 96 } | |
| 97 | |
| 87 } // namespace | 98 } // namespace |
| 88 | 99 |
| 89 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { | 100 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { |
| 90 public: | 101 public: |
| 91 ManagePasswordsUIControllerTest() {} | 102 ManagePasswordsUIControllerTest() {} |
| 92 | 103 |
| 93 void SetUp() override { | 104 void SetUp() override { |
| 94 ChromeRenderViewHostTestHarness::SetUp(); | 105 ChromeRenderViewHostTestHarness::SetUp(); |
| 95 | 106 |
| 96 // Create the test UIController here so that it's bound to | 107 // Create the test UIController here so that it's bound to |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 118 } | 129 } |
| 119 | 130 |
| 120 TestManagePasswordsUIController* controller() { | 131 TestManagePasswordsUIController* controller() { |
| 121 return static_cast<TestManagePasswordsUIController*>( | 132 return static_cast<TestManagePasswordsUIController*>( |
| 122 ManagePasswordsUIController::FromWebContents(web_contents())); | 133 ManagePasswordsUIController::FromWebContents(web_contents())); |
| 123 } | 134 } |
| 124 | 135 |
| 125 void CredentialCallback(const password_manager::CredentialInfo& info) { | 136 void CredentialCallback(const password_manager::CredentialInfo& info) { |
| 126 credential_info_.reset(new password_manager::CredentialInfo(info)); | 137 credential_info_.reset(new password_manager::CredentialInfo(info)); |
| 127 } | 138 } |
| 139 password_manager::StubPasswordManagerClient* client() { | |
|
vabr (Chromium)
2015/06/30 13:09:34
nit: Add a blank line above.
vasilii
2015/06/30 13:55:55
Done.
| |
| 140 return &client_; | |
| 141 } | |
| 128 | 142 |
| 129 scoped_ptr<password_manager::PasswordFormManager> CreateFormManager(); | 143 scoped_ptr<password_manager::PasswordFormManager> CreateFormManager(); |
| 130 | 144 |
| 131 private: | 145 private: |
| 132 password_manager::StubPasswordManagerClient client_; | 146 password_manager::StubPasswordManagerClient client_; |
| 133 | 147 |
| 134 autofill::PasswordForm test_local_form_; | 148 autofill::PasswordForm test_local_form_; |
| 135 autofill::PasswordForm test_federated_form_; | 149 autofill::PasswordForm test_federated_form_; |
| 136 scoped_ptr<password_manager::CredentialInfo> credential_info_; | 150 scoped_ptr<password_manager::CredentialInfo> credential_info_; |
| 137 }; | 151 }; |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 286 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); | 300 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); |
| 287 | 301 |
| 288 ManagePasswordsIconMock mock; | 302 ManagePasswordsIconMock mock; |
| 289 controller()->UpdateIconAndBubbleState(&mock); | 303 controller()->UpdateIconAndBubbleState(&mock); |
| 290 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); | 304 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
| 291 } | 305 } |
| 292 | 306 |
| 293 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { | 307 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { |
| 294 scoped_ptr<autofill::PasswordForm> test_form( | 308 scoped_ptr<autofill::PasswordForm> test_form( |
| 295 new autofill::PasswordForm(test_local_form())); | 309 new autofill::PasswordForm(test_local_form())); |
| 296 autofill::PasswordForm* test_form_ptr = test_form.get(); | |
| 297 test_form->blacklisted_by_user = true; | 310 test_form->blacklisted_by_user = true; |
| 298 base::string16 kTestUsername = test_form->username_value; | 311 base::string16 kTestUsername = test_form->username_value; |
| 299 autofill::PasswordFormMap map; | 312 autofill::PasswordFormMap map; |
| 300 map.insert(kTestUsername, test_form.Pass()); | 313 map.insert(kTestUsername, test_form.Pass()); |
| 301 controller()->OnBlacklistBlockedAutofill(map); | 314 controller()->OnBlacklistBlockedAutofill(map); |
| 302 | 315 |
| 303 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); | 316 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
| 304 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 317 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 305 EXPECT_EQ(test_form_ptr->origin, controller()->origin()); | |
| 306 ASSERT_EQ(1u, controller()->GetCurrentForms().size()); | |
| 307 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); | |
| 308 | |
| 309 // Controller should store a separate copy of the form as it doesn't own it. | |
| 310 EXPECT_NE(test_form_ptr, controller()->GetCurrentForms()[0]); | |
| 311 | 318 |
| 312 ManagePasswordsIconMock mock; | 319 ManagePasswordsIconMock mock; |
| 313 controller()->UpdateIconAndBubbleState(&mock); | 320 controller()->UpdateIconAndBubbleState(&mock); |
| 314 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); | 321 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
| 315 } | 322 } |
| 316 | 323 |
| 317 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { | 324 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { |
| 318 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 325 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 319 autofill::PasswordFormMap map; | 326 ManagePasswordsUIControllerMock::CreateFormManager( |
| 320 scoped_ptr<autofill::PasswordForm> test_form( | 327 client(), test_local_form(), ScopedVector<autofill::PasswordForm>())); |
| 321 new autofill::PasswordForm(test_local_form())); | 328 test_form_manager->ProvisionallySave( |
| 322 autofill::PasswordForm& test_form_ref = *test_form; | 329 test_local_form(), |
| 323 map.insert(kTestUsername, test_form.Pass()); | 330 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 324 test_form_ref.blacklisted_by_user = true; | 331 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
| 325 controller()->OnBlacklistBlockedAutofill(map); | 332 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 333 controller()->NeverSavePassword(); | |
| 334 ManagePasswordsIconMock mock; | |
| 335 controller()->UpdateIconAndBubbleState(&mock); | |
| 336 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); | |
| 337 EXPECT_EQ(test_local_form().origin, controller()->origin()); | |
| 338 | |
| 326 controller()->UnblacklistSite(); | 339 controller()->UnblacklistSite(); |
| 327 | 340 controller()->UpdateIconAndBubbleState(&mock); |
| 341 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); | |
| 328 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); | 342 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
| 329 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 343 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 330 EXPECT_EQ(test_local_form().origin, controller()->origin()); | 344 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 331 | |
| 332 ManagePasswordsIconMock mock; | |
| 333 controller()->UpdateIconAndBubbleState(&mock); | |
| 334 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); | |
| 335 } | |
| 336 | |
| 337 TEST_F(ManagePasswordsUIControllerTest, UnblacklistedElsewhere) { | |
| 338 test_local_form().blacklisted_by_user = true; | |
| 339 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | |
| 340 autofill::PasswordFormMap map; | |
| 341 map.insert(kTestUsername, | |
| 342 make_scoped_ptr(new autofill::PasswordForm(test_local_form()))); | |
| 343 controller()->OnBlacklistBlockedAutofill(map); | |
| 344 | |
| 345 password_manager::PasswordStoreChange change( | |
| 346 password_manager::PasswordStoreChange::REMOVE, test_local_form()); | |
| 347 password_manager::PasswordStoreChangeList list(1, change); | |
| 348 controller()->OnLoginsChanged(list); | |
| 349 | |
| 350 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); | |
| 351 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | |
| 352 EXPECT_EQ(test_local_form().origin, controller()->origin()); | |
| 353 | |
| 354 ManagePasswordsIconMock mock; | |
| 355 controller()->UpdateIconAndBubbleState(&mock); | |
| 356 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); | |
| 357 } | 345 } |
| 358 | 346 |
| 359 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { | 347 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { |
| 360 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 348 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
| 361 autofill::PasswordFormMap map; | 349 autofill::PasswordFormMap map; |
| 362 map.insert(kTestUsername, | 350 map.insert(kTestUsername, |
| 363 make_scoped_ptr(new autofill::PasswordForm(test_local_form()))); | 351 make_scoped_ptr(new autofill::PasswordForm(test_local_form()))); |
| 364 controller()->OnPasswordAutofilled(map); | 352 controller()->OnPasswordAutofilled(map); |
| 365 | 353 |
| 366 test_local_form().blacklisted_by_user = true; | 354 test_local_form().blacklisted_by_user = true; |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 556 autofill::PasswordFormMap map; | 544 autofill::PasswordFormMap map; |
| 557 scoped_ptr<autofill::PasswordForm> psl_matched_test_form( | 545 scoped_ptr<autofill::PasswordForm> psl_matched_test_form( |
| 558 new autofill::PasswordForm(test_local_form())); | 546 new autofill::PasswordForm(test_local_form())); |
| 559 psl_matched_test_form->original_signon_realm = | 547 psl_matched_test_form->original_signon_realm = |
| 560 "http://pslmatched.example.com"; | 548 "http://pslmatched.example.com"; |
| 561 map.insert(kTestUsername, psl_matched_test_form.Pass()); | 549 map.insert(kTestUsername, psl_matched_test_form.Pass()); |
| 562 controller()->OnPasswordAutofilled(map); | 550 controller()->OnPasswordAutofilled(map); |
| 563 | 551 |
| 564 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 552 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
| 565 } | 553 } |
| OLD | NEW |