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 22 matching lines...) Expand all Loading... |
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 } |
128 | 139 |
| 140 password_manager::StubPasswordManagerClient* client() { |
| 141 return &client_; |
| 142 } |
| 143 |
129 scoped_ptr<password_manager::PasswordFormManager> CreateFormManager(); | 144 scoped_ptr<password_manager::PasswordFormManager> CreateFormManager(); |
130 | 145 |
131 private: | 146 private: |
132 password_manager::StubPasswordManagerClient client_; | 147 password_manager::StubPasswordManagerClient client_; |
133 | 148 |
134 autofill::PasswordForm test_local_form_; | 149 autofill::PasswordForm test_local_form_; |
135 autofill::PasswordForm test_federated_form_; | 150 autofill::PasswordForm test_federated_form_; |
136 scoped_ptr<password_manager::CredentialInfo> credential_info_; | 151 scoped_ptr<password_manager::CredentialInfo> credential_info_; |
137 }; | 152 }; |
138 | 153 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); | 301 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); |
287 | 302 |
288 ManagePasswordsIconMock mock; | 303 ManagePasswordsIconMock mock; |
289 controller()->UpdateIconAndBubbleState(&mock); | 304 controller()->UpdateIconAndBubbleState(&mock); |
290 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); | 305 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
291 } | 306 } |
292 | 307 |
293 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { | 308 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { |
294 scoped_ptr<autofill::PasswordForm> test_form( | 309 scoped_ptr<autofill::PasswordForm> test_form( |
295 new autofill::PasswordForm(test_local_form())); | 310 new autofill::PasswordForm(test_local_form())); |
296 autofill::PasswordForm* test_form_ptr = test_form.get(); | |
297 test_form->blacklisted_by_user = true; | 311 test_form->blacklisted_by_user = true; |
298 base::string16 kTestUsername = test_form->username_value; | 312 base::string16 kTestUsername = test_form->username_value; |
299 autofill::PasswordFormMap map; | 313 autofill::PasswordFormMap map; |
300 map.insert(kTestUsername, test_form.Pass()); | 314 map.insert(kTestUsername, test_form.Pass()); |
301 controller()->OnBlacklistBlockedAutofill(map); | 315 controller()->OnBlacklistBlockedAutofill(map); |
302 | 316 |
303 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); | 317 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
304 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 318 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 | 319 |
312 ManagePasswordsIconMock mock; | 320 ManagePasswordsIconMock mock; |
313 controller()->UpdateIconAndBubbleState(&mock); | 321 controller()->UpdateIconAndBubbleState(&mock); |
314 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); | 322 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
315 } | 323 } |
316 | 324 |
317 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { | 325 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { |
318 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 326 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
319 autofill::PasswordFormMap map; | 327 ManagePasswordsUIControllerMock::CreateFormManager( |
320 scoped_ptr<autofill::PasswordForm> test_form( | 328 client(), test_local_form(), ScopedVector<autofill::PasswordForm>())); |
321 new autofill::PasswordForm(test_local_form())); | 329 test_form_manager->ProvisionallySave( |
322 autofill::PasswordForm& test_form_ref = *test_form; | 330 test_local_form(), |
323 map.insert(kTestUsername, test_form.Pass()); | 331 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
324 test_form_ref.blacklisted_by_user = true; | 332 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
325 controller()->OnBlacklistBlockedAutofill(map); | 333 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 334 controller()->NeverSavePassword(); |
| 335 ManagePasswordsIconMock mock; |
| 336 controller()->UpdateIconAndBubbleState(&mock); |
| 337 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); |
| 338 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 339 |
326 controller()->UnblacklistSite(); | 340 controller()->UnblacklistSite(); |
327 | 341 controller()->UpdateIconAndBubbleState(&mock); |
| 342 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); |
328 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); | 343 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
329 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 344 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
330 EXPECT_EQ(test_local_form().origin, controller()->origin()); | 345 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 } | 346 } |
358 | 347 |
359 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { | 348 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { |
360 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 349 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
361 autofill::PasswordFormMap map; | 350 autofill::PasswordFormMap map; |
362 map.insert(kTestUsername, | 351 map.insert(kTestUsername, |
363 make_scoped_ptr(new autofill::PasswordForm(test_local_form()))); | 352 make_scoped_ptr(new autofill::PasswordForm(test_local_form()))); |
364 controller()->OnPasswordAutofilled(map); | 353 controller()->OnPasswordAutofilled(map); |
365 | 354 |
366 test_local_form().blacklisted_by_user = true; | 355 test_local_form().blacklisted_by_user = true; |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 autofill::PasswordFormMap map; | 545 autofill::PasswordFormMap map; |
557 scoped_ptr<autofill::PasswordForm> psl_matched_test_form( | 546 scoped_ptr<autofill::PasswordForm> psl_matched_test_form( |
558 new autofill::PasswordForm(test_local_form())); | 547 new autofill::PasswordForm(test_local_form())); |
559 psl_matched_test_form->original_signon_realm = | 548 psl_matched_test_form->original_signon_realm = |
560 "http://pslmatched.example.com"; | 549 "http://pslmatched.example.com"; |
561 map.insert(kTestUsername, psl_matched_test_form.Pass()); | 550 map.insert(kTestUsername, psl_matched_test_form.Pass()); |
562 controller()->OnPasswordAutofilled(map); | 551 controller()->OnPasswordAutofilled(map); |
563 | 552 |
564 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 553 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
565 } | 554 } |
OLD | NEW |