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" |
| 11 #include "chrome/browser/ui/passwords/manage_passwords_icon.h" | 11 #include "chrome/browser/ui/passwords/manage_passwords_icon.h" |
| 12 #include "chrome/browser/ui/passwords/manage_passwords_icon_mock.h" | 12 #include "chrome/browser/ui/passwords/manage_passwords_icon_mock.h" |
| 13 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h" | 13 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller_mock.h" |
| 14 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 14 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 15 #include "chrome/test/base/testing_profile.h" | 15 #include "chrome/test/base/testing_profile.h" |
| 16 #include "components/autofill/core/common/password_form.h" | 16 #include "components/autofill/core/common/password_form.h" |
| 17 #include "components/password_manager/content/common/credential_manager_types.h" | 17 #include "components/password_manager/content/common/credential_manager_types.h" |
| 18 #include "components/password_manager/core/browser/password_form_manager.h" | 18 #include "components/password_manager/core/browser/password_form_manager.h" |
| 19 #include "components/password_manager/core/browser/stub_password_manager_client. h" | 19 #include "components/password_manager/core/browser/stub_password_manager_client. h" |
| 20 #include "components/password_manager/core/browser/stub_password_manager_driver. h" | 20 #include "components/password_manager/core/browser/stub_password_manager_driver. h" |
| 21 #include "components/password_manager/core/common/password_manager_ui.h" | 21 #include "components/password_manager/core/common/password_manager_ui.h" |
| 22 #include "content/public/browser/navigation_details.h" | |
| 22 #include "content/public/test/test_browser_thread_bundle.h" | 23 #include "content/public/test/test_browser_thread_bundle.h" |
| 23 #include "content/public/test/web_contents_tester.h" | 24 #include "content/public/test/web_contents_tester.h" |
| 24 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 26 | 27 |
| 28 using ::testing::ElementsAre; | |
| 29 using ::testing::Pointee; | |
| 30 | |
| 27 namespace { | 31 namespace { |
| 28 | 32 |
| 29 const int64 kSlowNavigationDelayInMS = 2000; | 33 const int64 kSlowNavigationDelayInMS = 2000; |
| 30 const int64 kQuickNavigationDelayInMS = 500; | 34 const int64 kQuickNavigationDelayInMS = 500; |
| 31 | 35 |
| 36 // This mock is used in tests to ensure that we're just testing the controller | |
|
vabr (Chromium)
2015/03/17 09:25:58
The comment speaks about a mock, but the class bel
vasilii
2015/03/17 10:49:49
Done.
| |
| 37 // behavior, and not the behavior of the bits and pieces it relies upon (like | |
| 38 // FormManager). | |
| 39 class TestManagePasswordsUIController : public ManagePasswordsUIController { | |
| 40 public: | |
| 41 explicit TestManagePasswordsUIController(content::WebContents* contents); | |
| 42 ~TestManagePasswordsUIController() override; | |
| 43 | |
| 44 base::TimeDelta Elapsed() const override; | |
| 45 void SetElapsed(base::TimeDelta elapsed) { elapsed_ = elapsed; } | |
| 46 | |
| 47 using ManagePasswordsUIController::DidNavigateMainFrame; | |
| 48 | |
| 49 private: | |
| 50 void UpdateBubbleAndIconVisibility() override; | |
| 51 void UpdateAndroidAccountChooserInfoBarVisibility() override; | |
| 52 void SavePasswordInternal() override {} | |
| 53 void NeverSavePasswordInternal() override {} | |
| 54 | |
| 55 base::TimeDelta elapsed_; | |
| 56 }; | |
| 57 | |
| 58 TestManagePasswordsUIController::TestManagePasswordsUIController( | |
| 59 content::WebContents* contents) | |
| 60 : ManagePasswordsUIController(contents) { | |
| 61 // Do not silently replace an existing ManagePasswordsUIController because it | |
| 62 // unregisters itself in WebContentsDestroyed(). | |
| 63 EXPECT_FALSE(contents->GetUserData(UserDataKey())); | |
| 64 contents->SetUserData(UserDataKey(), this); | |
| 65 } | |
| 66 | |
| 67 TestManagePasswordsUIController::~TestManagePasswordsUIController() { | |
| 68 } | |
| 69 | |
| 70 base::TimeDelta TestManagePasswordsUIController::Elapsed() const { | |
| 71 return elapsed_; | |
| 72 } | |
| 73 | |
| 74 void TestManagePasswordsUIController::UpdateBubbleAndIconVisibility() { | |
| 75 ManagePasswordsUIController::UpdateBubbleAndIconVisibility(); | |
| 76 OnBubbleShown(); | |
| 77 } | |
| 78 | |
| 79 void TestManagePasswordsUIController:: | |
| 80 UpdateAndroidAccountChooserInfoBarVisibility() { | |
| 81 OnBubbleShown(); | |
| 82 } | |
| 83 | |
| 32 } // namespace | 84 } // namespace |
| 33 | 85 |
| 34 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { | 86 class ManagePasswordsUIControllerTest : public ChromeRenderViewHostTestHarness { |
| 35 public: | 87 public: |
| 36 ManagePasswordsUIControllerTest() {} | 88 ManagePasswordsUIControllerTest() {} |
| 37 | 89 |
| 38 void SetUp() override { | 90 void SetUp() override { |
| 39 ChromeRenderViewHostTestHarness::SetUp(); | 91 ChromeRenderViewHostTestHarness::SetUp(); |
| 40 | 92 |
| 41 // Create the test UIController here so that it's bound to | 93 // Create the test UIController here so that it's bound to |
| 42 // |test_web_contents_|, and will be retrieved correctly via | 94 // |test_web_contents_|, and will be retrieved correctly via |
| 43 // ManagePasswordsUIController::FromWebContents in |controller()|. | 95 // ManagePasswordsUIController::FromWebContents in |controller()|. |
| 44 new ManagePasswordsUIControllerMock(web_contents()); | 96 new TestManagePasswordsUIController(web_contents()); |
| 45 | 97 |
| 46 test_local_form_.origin = GURL("http://example.com"); | 98 test_local_form_.origin = GURL("http://example.com"); |
| 47 test_local_form_.username_value = base::ASCIIToUTF16("username"); | 99 test_local_form_.username_value = base::ASCIIToUTF16("username"); |
| 48 test_local_form_.password_value = base::ASCIIToUTF16("12345"); | 100 test_local_form_.password_value = base::ASCIIToUTF16("12345"); |
| 49 | 101 |
| 50 test_federated_form_.origin = GURL("http://example.com"); | 102 test_federated_form_.origin = GURL("http://example.com"); |
| 51 test_federated_form_.username_value = base::ASCIIToUTF16("username"); | 103 test_federated_form_.username_value = base::ASCIIToUTF16("username"); |
| 52 test_federated_form_.federation_url = GURL("https://federation.test/"); | 104 test_federated_form_.federation_url = GURL("https://federation.test/"); |
| 53 | 105 |
| 54 // We need to be on a "webby" URL for most tests. | 106 // We need to be on a "webby" URL for most tests. |
| 55 content::WebContentsTester::For(web_contents()) | 107 content::WebContentsTester::For(web_contents()) |
| 56 ->NavigateAndCommit(GURL("http://example.com")); | 108 ->NavigateAndCommit(GURL("http://example.com")); |
| 57 } | 109 } |
| 58 | 110 |
| 59 autofill::PasswordForm& test_local_form() { return test_local_form_; } | 111 autofill::PasswordForm& test_local_form() { return test_local_form_; } |
| 60 autofill::PasswordForm& test_federated_form() { return test_federated_form_; } | 112 autofill::PasswordForm& test_federated_form() { return test_federated_form_; } |
| 61 password_manager::CredentialInfo* credential_info() const { | 113 password_manager::CredentialInfo* credential_info() const { |
| 62 return credential_info_.get(); | 114 return credential_info_.get(); |
| 63 } | 115 } |
| 64 | 116 |
| 65 ManagePasswordsUIControllerMock* controller() { | 117 TestManagePasswordsUIController* controller() { |
| 66 return static_cast<ManagePasswordsUIControllerMock*>( | 118 return static_cast<TestManagePasswordsUIController*>( |
| 67 ManagePasswordsUIController::FromWebContents(web_contents())); | 119 ManagePasswordsUIController::FromWebContents(web_contents())); |
| 68 } | 120 } |
| 69 | 121 |
| 70 void CredentialCallback(const password_manager::CredentialInfo& info) { | 122 void CredentialCallback(const password_manager::CredentialInfo& info) { |
| 71 credential_info_.reset(new password_manager::CredentialInfo(info)); | 123 credential_info_.reset(new password_manager::CredentialInfo(info)); |
| 72 } | 124 } |
| 73 | 125 |
| 126 scoped_ptr<password_manager::PasswordFormManager> CreateFormManager(); | |
| 127 | |
| 74 private: | 128 private: |
| 129 password_manager::StubPasswordManagerClient client_; | |
| 130 | |
| 75 autofill::PasswordForm test_local_form_; | 131 autofill::PasswordForm test_local_form_; |
| 76 autofill::PasswordForm test_federated_form_; | 132 autofill::PasswordForm test_federated_form_; |
| 77 scoped_ptr<password_manager::CredentialInfo> credential_info_; | 133 scoped_ptr<password_manager::CredentialInfo> credential_info_; |
| 78 }; | 134 }; |
| 79 | 135 |
| 136 scoped_ptr<password_manager::PasswordFormManager> | |
| 137 ManagePasswordsUIControllerTest::CreateFormManager() { | |
| 138 ScopedVector<autofill::PasswordForm> stored_forms; | |
| 139 stored_forms.push_back(new autofill::PasswordForm(test_local_form())); | |
| 140 return ManagePasswordsUIControllerMock::CreateFormManager( | |
| 141 &client_, test_local_form(), stored_forms.Pass()); | |
| 142 } | |
| 143 | |
| 80 TEST_F(ManagePasswordsUIControllerTest, DefaultState) { | 144 TEST_F(ManagePasswordsUIControllerTest, DefaultState) { |
| 81 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 145 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
| 82 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 146 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 83 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); | 147 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); |
| 84 | 148 |
| 85 ManagePasswordsIconMock mock; | 149 ManagePasswordsIconMock mock; |
| 86 controller()->UpdateIconAndBubbleState(&mock); | 150 controller()->UpdateIconAndBubbleState(&mock); |
| 87 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); | 151 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
| 88 } | 152 } |
| 89 | 153 |
| 90 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { | 154 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { |
| 91 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 155 base::string16 kTestUsername = test_local_form().username_value; |
| 92 autofill::PasswordFormMap map; | 156 autofill::PasswordFormMap map; |
| 93 map[kTestUsername] = &test_local_form(); | 157 map[kTestUsername] = &test_local_form(); |
| 94 controller()->OnPasswordAutofilled(map); | 158 controller()->OnPasswordAutofilled(map); |
| 95 | 159 |
| 96 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); | 160 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
| 97 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 161 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 98 EXPECT_EQ(test_local_form().origin, controller()->origin()); | 162 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 99 EXPECT_EQ(1u, controller()->best_matches().size()); | 163 ASSERT_EQ(1u, controller()->GetCurrentForms().size()); |
| 100 ASSERT_EQ(1u, controller()->best_matches().count(kTestUsername)); | 164 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); |
| 101 | 165 |
| 102 // Controller should store a separate copy of the form as it doesn't own it. | 166 // Controller should store a separate copy of the form as it doesn't own it. |
| 103 EXPECT_NE(&test_local_form(), | 167 EXPECT_NE(&test_local_form(), controller()->GetCurrentForms()[0]); |
| 104 controller()->best_matches().find(kTestUsername)->second); | |
| 105 | 168 |
| 106 ManagePasswordsIconMock mock; | 169 ManagePasswordsIconMock mock; |
| 107 controller()->UpdateIconAndBubbleState(&mock); | 170 controller()->UpdateIconAndBubbleState(&mock); |
| 108 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); | 171 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); |
| 109 } | 172 } |
| 110 | 173 |
| 111 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { | 174 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { |
| 112 password_manager::StubPasswordManagerClient client; | |
| 113 password_manager::StubPasswordManagerDriver driver; | |
| 114 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 175 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 115 new password_manager::PasswordFormManager( | 176 CreateFormManager()); |
| 116 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); | |
| 117 controller()->OnPasswordSubmitted(test_form_manager.Pass()); | 177 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
| 118 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 178 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 119 controller()->state()); | 179 controller()->state()); |
| 120 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); | 180 EXPECT_TRUE(controller()->PasswordPendingUserDecision()); |
| 121 | 181 |
| 122 // TODO(mkwst): This should be the value of test_local_form().origin, but | 182 // TODO(mkwst): This should be the value of test_local_form().origin, but |
| 123 // it's being masked by the stub implementation of | 183 // it's being masked by the stub implementation of |
| 124 // ManagePasswordsUIControllerMock::PendingCredentials. | 184 // ManagePasswordsUIControllerMock::PendingCredentials. |
| 125 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); | 185 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); |
| 126 | 186 |
| 127 ManagePasswordsIconMock mock; | 187 ManagePasswordsIconMock mock; |
| 128 controller()->UpdateIconAndBubbleState(&mock); | 188 controller()->UpdateIconAndBubbleState(&mock); |
| 129 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 189 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 130 mock.state()); | 190 mock.state()); |
| 131 } | 191 } |
| 132 | 192 |
| 133 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { | 193 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { |
| 134 password_manager::StubPasswordManagerClient client; | |
| 135 password_manager::StubPasswordManagerDriver driver; | |
| 136 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 194 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 137 new password_manager::PasswordFormManager( | 195 CreateFormManager()); |
| 138 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); | 196 test_form_manager->ProvisionallySave( |
| 197 test_local_form(), | |
| 198 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | |
| 139 controller()->OnPasswordSubmitted(test_form_manager.Pass()); | 199 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
| 140 | 200 |
| 141 ManagePasswordsIconMock mock; | 201 ManagePasswordsIconMock mock; |
| 142 controller()->UpdateIconAndBubbleState(&mock); | 202 controller()->UpdateIconAndBubbleState(&mock); |
| 143 controller()->SavePassword(); | 203 controller()->SavePassword(); |
| 144 controller()->UpdateIconAndBubbleState(&mock); | 204 controller()->UpdateIconAndBubbleState(&mock); |
| 145 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); | 205 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); |
| 146 } | 206 } |
| 147 | 207 |
| 148 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { | 208 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { |
| 149 password_manager::StubPasswordManagerClient client; | |
| 150 password_manager::StubPasswordManagerDriver driver; | |
| 151 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 209 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 152 new password_manager::PasswordFormManager( | 210 CreateFormManager()); |
| 153 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); | 211 test_form_manager->ProvisionallySave( |
| 212 test_local_form(), | |
| 213 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | |
| 154 controller()->OnPasswordSubmitted(test_form_manager.Pass()); | 214 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
| 155 | 215 |
| 156 ManagePasswordsIconMock mock; | 216 ManagePasswordsIconMock mock; |
| 157 controller()->UpdateIconAndBubbleState(&mock); | 217 controller()->UpdateIconAndBubbleState(&mock); |
| 158 controller()->NeverSavePassword(); | 218 controller()->NeverSavePassword(); |
| 159 controller()->UpdateIconAndBubbleState(&mock); | 219 controller()->UpdateIconAndBubbleState(&mock); |
| 160 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); | 220 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); |
| 161 } | 221 } |
| 162 | 222 |
| 163 TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) { | 223 TEST_F(ManagePasswordsUIControllerTest, QuickNavigations) { |
| 164 password_manager::StubPasswordManagerClient client; | |
| 165 password_manager::StubPasswordManagerDriver driver; | |
| 166 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 224 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 167 new password_manager::PasswordFormManager( | 225 CreateFormManager()); |
| 168 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); | |
| 169 controller()->OnPasswordSubmitted(test_form_manager.Pass()); | 226 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
| 170 ManagePasswordsIconMock mock; | 227 ManagePasswordsIconMock mock; |
| 171 controller()->UpdateIconAndBubbleState(&mock); | 228 controller()->UpdateIconAndBubbleState(&mock); |
| 172 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 229 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 173 mock.state()); | 230 mock.state()); |
| 174 | 231 |
| 175 // Fake-navigate within a second. We expect the bubble's state to persist | 232 // Fake-navigate within a second. We expect the bubble's state to persist |
| 176 // if a navigation occurs too quickly for a user to reasonably have been | 233 // if a navigation occurs too quickly for a user to reasonably have been |
| 177 // able to interact with the bubble. This happens on `accounts.google.com`, | 234 // able to interact with the bubble. This happens on `accounts.google.com`, |
| 178 // for instance. | 235 // for instance. |
| 179 controller()->SetElapsed( | 236 controller()->SetElapsed( |
| 180 base::TimeDelta::FromMilliseconds(kQuickNavigationDelayInMS)); | 237 base::TimeDelta::FromMilliseconds(kQuickNavigationDelayInMS)); |
| 181 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), | 238 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), |
| 182 content::FrameNavigateParams()); | 239 content::FrameNavigateParams()); |
| 183 controller()->UpdateIconAndBubbleState(&mock); | 240 controller()->UpdateIconAndBubbleState(&mock); |
| 184 | 241 |
| 185 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 242 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 186 mock.state()); | 243 mock.state()); |
| 187 } | 244 } |
| 188 | 245 |
| 189 TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) { | 246 TEST_F(ManagePasswordsUIControllerTest, SlowNavigations) { |
| 190 password_manager::StubPasswordManagerClient client; | |
| 191 password_manager::StubPasswordManagerDriver driver; | |
| 192 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 247 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 193 new password_manager::PasswordFormManager( | 248 CreateFormManager()); |
| 194 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); | |
| 195 controller()->OnPasswordSubmitted(test_form_manager.Pass()); | 249 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
| 196 ManagePasswordsIconMock mock; | 250 ManagePasswordsIconMock mock; |
| 197 controller()->UpdateIconAndBubbleState(&mock); | 251 controller()->UpdateIconAndBubbleState(&mock); |
| 198 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 252 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 199 mock.state()); | 253 mock.state()); |
| 200 | 254 |
| 201 // Fake-navigate after a second. We expect the bubble's state to be reset | 255 // Fake-navigate after a second. We expect the bubble's state to be reset |
| 202 // if a navigation occurs after this limit. | 256 // if a navigation occurs after this limit. |
| 203 controller()->SetElapsed( | 257 controller()->SetElapsed( |
| 204 base::TimeDelta::FromMilliseconds(kSlowNavigationDelayInMS)); | 258 base::TimeDelta::FromMilliseconds(kSlowNavigationDelayInMS)); |
| 205 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), | 259 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), |
| 206 content::FrameNavigateParams()); | 260 content::FrameNavigateParams()); |
| 207 controller()->UpdateIconAndBubbleState(&mock); | 261 controller()->UpdateIconAndBubbleState(&mock); |
| 208 | 262 |
| 209 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); | 263 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
| 210 } | 264 } |
| 211 | 265 |
| 212 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { | 266 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { |
| 213 // Navigate to a non-webby URL, then see what happens! | 267 // Navigate to a non-webby URL, then see what happens! |
| 214 content::WebContentsTester::For(web_contents()) | 268 content::WebContentsTester::For(web_contents()) |
| 215 ->NavigateAndCommit(GURL("chrome://sign-in")); | 269 ->NavigateAndCommit(GURL("chrome://sign-in")); |
| 216 | 270 |
| 217 password_manager::StubPasswordManagerClient client; | |
| 218 password_manager::StubPasswordManagerDriver driver; | |
| 219 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 271 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 220 new password_manager::PasswordFormManager( | 272 CreateFormManager()); |
| 221 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); | |
| 222 controller()->OnPasswordSubmitted(test_form_manager.Pass()); | 273 controller()->OnPasswordSubmitted(test_form_manager.Pass()); |
| 223 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 274 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
| 224 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 275 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 225 | 276 |
| 226 // TODO(mkwst): This should be the value of test_local_form().origin, but | 277 // TODO(mkwst): This should be the value of test_local_form().origin, but |
| 227 // it's being masked by the stub implementation of | 278 // it's being masked by the stub implementation of |
| 228 // ManagePasswordsUIControllerMock::PendingCredentials. | 279 // ManagePasswordsUIControllerMock::PendingCredentials. |
| 229 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); | 280 EXPECT_EQ(GURL::EmptyGURL(), controller()->origin()); |
| 230 | 281 |
| 231 ManagePasswordsIconMock mock; | 282 ManagePasswordsIconMock mock; |
| 232 controller()->UpdateIconAndBubbleState(&mock); | 283 controller()->UpdateIconAndBubbleState(&mock); |
| 233 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); | 284 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
| 234 } | 285 } |
| 235 | 286 |
| 236 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { | 287 TEST_F(ManagePasswordsUIControllerTest, BlacklistBlockedAutofill) { |
| 237 test_local_form().blacklisted_by_user = true; | 288 test_local_form().blacklisted_by_user = true; |
| 238 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 289 base::string16 kTestUsername = test_local_form().username_value; |
| 239 autofill::PasswordFormMap map; | 290 autofill::PasswordFormMap map; |
| 240 map[kTestUsername] = &test_local_form(); | 291 map[kTestUsername] = &test_local_form(); |
| 241 controller()->OnBlacklistBlockedAutofill(map); | 292 controller()->OnBlacklistBlockedAutofill(map); |
| 242 | 293 |
| 243 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); | 294 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); |
| 244 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 295 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 245 EXPECT_EQ(test_local_form().origin, controller()->origin()); | 296 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 246 EXPECT_EQ(1u, controller()->best_matches().size()); | 297 ASSERT_EQ(1u, controller()->GetCurrentForms().size()); |
| 247 ASSERT_EQ(1u, controller()->best_matches().count(kTestUsername)); | 298 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); |
| 248 | 299 |
| 249 // Controller should store a separate copy of the form as it doesn't own it. | 300 // Controller should store a separate copy of the form as it doesn't own it. |
| 250 EXPECT_NE(&test_local_form(), | 301 EXPECT_NE(&test_local_form(), controller()->GetCurrentForms()[0]); |
| 251 controller()->best_matches().find(kTestUsername)->second); | |
| 252 | 302 |
| 253 ManagePasswordsIconMock mock; | 303 ManagePasswordsIconMock mock; |
| 254 controller()->UpdateIconAndBubbleState(&mock); | 304 controller()->UpdateIconAndBubbleState(&mock); |
| 255 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); | 305 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); |
| 256 } | 306 } |
| 257 | 307 |
| 258 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { | 308 TEST_F(ManagePasswordsUIControllerTest, ClickedUnblacklist) { |
| 259 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 309 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
| 260 autofill::PasswordFormMap map; | 310 autofill::PasswordFormMap map; |
| 261 map[kTestUsername] = &test_local_form(); | 311 map[kTestUsername] = &test_local_form(); |
| 312 test_local_form().blacklisted_by_user = true; | |
| 262 controller()->OnBlacklistBlockedAutofill(map); | 313 controller()->OnBlacklistBlockedAutofill(map); |
| 263 controller()->UnblacklistSite(); | 314 controller()->UnblacklistSite(); |
| 264 | 315 |
| 265 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); | 316 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
| 266 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 317 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 267 EXPECT_EQ(test_local_form().origin, controller()->origin()); | 318 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 268 | 319 |
| 269 ManagePasswordsIconMock mock; | 320 ManagePasswordsIconMock mock; |
| 270 controller()->UpdateIconAndBubbleState(&mock); | 321 controller()->UpdateIconAndBubbleState(&mock); |
| 271 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); | 322 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 307 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); | 358 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, controller()->state()); |
| 308 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 359 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 309 EXPECT_EQ(test_local_form().origin, controller()->origin()); | 360 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 310 | 361 |
| 311 ManagePasswordsIconMock mock; | 362 ManagePasswordsIconMock mock; |
| 312 controller()->UpdateIconAndBubbleState(&mock); | 363 controller()->UpdateIconAndBubbleState(&mock); |
| 313 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); | 364 EXPECT_EQ(password_manager::ui::BLACKLIST_STATE, mock.state()); |
| 314 } | 365 } |
| 315 | 366 |
| 316 TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) { | 367 TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) { |
| 317 password_manager::StubPasswordManagerClient client; | |
| 318 password_manager::StubPasswordManagerDriver driver; | |
| 319 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( | 368 scoped_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 320 new password_manager::PasswordFormManager( | 369 CreateFormManager()); |
| 321 NULL, &client, driver.AsWeakPtr(), test_local_form(), false)); | |
| 322 | 370 |
| 323 controller()->OnAutomaticPasswordSave(test_form_manager.Pass()); | 371 controller()->OnAutomaticPasswordSave(test_form_manager.Pass()); |
| 324 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->state()); | 372 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->state()); |
| 325 | 373 |
| 326 controller()->OnBubbleHidden(); | 374 controller()->OnBubbleHidden(); |
| 327 ManagePasswordsIconMock mock; | 375 ManagePasswordsIconMock mock; |
| 328 controller()->UpdateIconAndBubbleState(&mock); | 376 controller()->UpdateIconAndBubbleState(&mock); |
| 329 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); | 377 EXPECT_EQ(password_manager::ui::MANAGE_STATE, mock.state()); |
| 330 } | 378 } |
| 331 | 379 |
| 332 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { | 380 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { |
| 333 ScopedVector<autofill::PasswordForm> local_credentials; | 381 ScopedVector<autofill::PasswordForm> local_credentials; |
| 334 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); | 382 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); |
| 335 ScopedVector<autofill::PasswordForm> federated_credentials; | 383 ScopedVector<autofill::PasswordForm> federated_credentials; |
| 336 GURL origin("http://example.com"); | 384 GURL origin("http://example.com"); |
| 337 EXPECT_TRUE(controller()->OnChooseCredentials( | 385 EXPECT_TRUE(controller()->OnChooseCredentials( |
| 338 local_credentials.Pass(), federated_credentials.Pass(), origin, | 386 local_credentials.Pass(), federated_credentials.Pass(), origin, |
| 339 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, | 387 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, |
| 340 base::Unretained(this)))); | 388 base::Unretained(this)))); |
| 341 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 389 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 342 controller()->state()); | 390 controller()->state()); |
| 343 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 391 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 344 EXPECT_EQ(origin, controller()->origin()); | 392 EXPECT_EQ(origin, controller()->origin()); |
| 345 EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); | 393 EXPECT_THAT(controller()->GetCurrentForms(), |
| 394 ElementsAre(Pointee(test_local_form()))); | |
| 346 | 395 |
| 347 ManagePasswordsIconMock mock; | 396 ManagePasswordsIconMock mock; |
| 348 controller()->UpdateIconAndBubbleState(&mock); | 397 controller()->UpdateIconAndBubbleState(&mock); |
| 349 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); | 398 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); |
| 350 | 399 |
| 351 controller()->ManagePasswordsUIController::ChooseCredential( | 400 controller()->ManagePasswordsUIController::ChooseCredential( |
| 352 test_local_form(), | 401 test_local_form(), |
| 353 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); | 402 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); |
| 354 controller()->OnBubbleHidden(); | 403 controller()->OnBubbleHidden(); |
| 355 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 404 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
| 356 ASSERT_TRUE(credential_info()); | 405 ASSERT_TRUE(credential_info()); |
| 357 EXPECT_EQ(test_local_form().username_value, credential_info()->id); | 406 EXPECT_EQ(test_local_form().username_value, credential_info()->id); |
| 358 EXPECT_EQ(test_local_form().password_value, credential_info()->password); | 407 EXPECT_EQ(test_local_form().password_value, credential_info()->password); |
| 359 EXPECT_TRUE(credential_info()->federation.is_empty()); | 408 EXPECT_TRUE(credential_info()->federation.is_empty()); |
| 360 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL, | 409 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL, |
| 361 credential_info()->type); | 410 credential_info()->type); |
| 362 } | 411 } |
| 363 | 412 |
| 364 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { | 413 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { |
| 365 ScopedVector<autofill::PasswordForm> local_credentials; | 414 ScopedVector<autofill::PasswordForm> local_credentials; |
| 366 local_credentials.push_back( | 415 local_credentials.push_back( |
| 367 new autofill::PasswordForm(test_federated_form())); | 416 new autofill::PasswordForm(test_federated_form())); |
| 368 ScopedVector<autofill::PasswordForm> federated_credentials; | 417 ScopedVector<autofill::PasswordForm> federated_credentials; |
| 369 GURL origin("http://example.com"); | 418 GURL origin("http://example.com"); |
| 370 EXPECT_TRUE(controller()->OnChooseCredentials( | 419 EXPECT_TRUE(controller()->OnChooseCredentials( |
| 371 local_credentials.Pass(), federated_credentials.Pass(), origin, | 420 local_credentials.Pass(), federated_credentials.Pass(), origin, |
| 372 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, | 421 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, |
| 373 base::Unretained(this)))); | 422 base::Unretained(this)))); |
| 374 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 423 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 375 controller()->state()); | 424 controller()->state()); |
| 376 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 425 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 377 EXPECT_EQ(origin, controller()->origin()); | 426 EXPECT_EQ(origin, controller()->origin()); |
| 378 EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); | 427 EXPECT_THAT(controller()->GetCurrentForms(), |
| 428 ElementsAre(Pointee(test_federated_form()))); | |
| 379 | 429 |
| 380 ManagePasswordsIconMock mock; | 430 ManagePasswordsIconMock mock; |
| 381 controller()->UpdateIconAndBubbleState(&mock); | 431 controller()->UpdateIconAndBubbleState(&mock); |
| 382 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); | 432 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); |
| 383 | 433 |
| 384 controller()->ManagePasswordsUIController::ChooseCredential( | 434 controller()->ManagePasswordsUIController::ChooseCredential( |
| 385 test_federated_form(), | 435 test_federated_form(), |
| 386 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); | 436 password_manager::CredentialType::CREDENTIAL_TYPE_LOCAL); |
| 387 controller()->OnBubbleHidden(); | 437 controller()->OnBubbleHidden(); |
| 388 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 438 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
| 389 ASSERT_TRUE(credential_info()); | 439 ASSERT_TRUE(credential_info()); |
| 390 EXPECT_EQ(test_federated_form().username_value, credential_info()->id); | 440 EXPECT_EQ(test_federated_form().username_value, credential_info()->id); |
| 391 EXPECT_EQ(test_federated_form().federation_url, | 441 EXPECT_EQ(test_federated_form().federation_url, |
| 392 credential_info()->federation); | 442 credential_info()->federation); |
| 393 EXPECT_TRUE(credential_info()->password.empty()); | 443 EXPECT_TRUE(credential_info()->password.empty()); |
| 394 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, | 444 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, |
| 395 credential_info()->type); | 445 credential_info()->type); |
| 396 } | 446 } |
| 397 | 447 |
| 398 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialFederated) { | 448 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialFederated) { |
| 399 ScopedVector<autofill::PasswordForm> local_credentials; | 449 ScopedVector<autofill::PasswordForm> local_credentials; |
| 400 ScopedVector<autofill::PasswordForm> federated_credentials; | 450 ScopedVector<autofill::PasswordForm> federated_credentials; |
| 401 federated_credentials.push_back( | 451 federated_credentials.push_back( |
| 402 new autofill::PasswordForm(test_local_form())); | 452 new autofill::PasswordForm(test_local_form())); |
| 403 GURL origin("http://example.com"); | 453 GURL origin("http://example.com"); |
| 404 EXPECT_TRUE(controller()->OnChooseCredentials( | 454 EXPECT_TRUE(controller()->OnChooseCredentials( |
| 405 local_credentials.Pass(), federated_credentials.Pass(), origin, | 455 local_credentials.Pass(), federated_credentials.Pass(), origin, |
| 406 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, | 456 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, |
| 407 base::Unretained(this)))); | 457 base::Unretained(this)))); |
| 408 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 458 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 409 controller()->state()); | 459 controller()->state()); |
| 410 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); | 460 EXPECT_FALSE(controller()->PasswordPendingUserDecision()); |
| 411 EXPECT_EQ(autofill::ConstPasswordFormMap(), controller()->best_matches()); | 461 EXPECT_EQ(0u, controller()->GetCurrentForms().size()); |
| 412 EXPECT_EQ(origin, controller()->origin()); | 462 EXPECT_EQ(origin, controller()->origin()); |
| 413 | 463 |
| 414 ManagePasswordsIconMock mock; | 464 ManagePasswordsIconMock mock; |
| 415 controller()->UpdateIconAndBubbleState(&mock); | 465 controller()->UpdateIconAndBubbleState(&mock); |
| 416 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); | 466 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, mock.state()); |
| 417 | 467 |
| 418 controller()->ManagePasswordsUIController::ChooseCredential( | 468 controller()->ManagePasswordsUIController::ChooseCredential( |
| 419 test_local_form(), | 469 test_local_form(), |
| 420 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED); | 470 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED); |
| 421 controller()->OnBubbleHidden(); | 471 controller()->OnBubbleHidden(); |
| 422 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 472 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
| 423 ASSERT_TRUE(credential_info()); | 473 ASSERT_TRUE(credential_info()); |
| 424 EXPECT_EQ(test_local_form().username_value, credential_info()->id); | 474 EXPECT_EQ(test_local_form().username_value, credential_info()->id); |
| 425 EXPECT_TRUE(credential_info()->password.empty()); | 475 EXPECT_TRUE(credential_info()->password.empty()); |
| 426 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, | 476 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED, |
| 427 credential_info()->type); | 477 credential_info()->type); |
| 428 } | 478 } |
| 429 | 479 |
| 430 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) { | 480 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) { |
| 431 ScopedVector<autofill::PasswordForm> local_credentials; | 481 ScopedVector<autofill::PasswordForm> local_credentials; |
| 432 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); | 482 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); |
| 433 ScopedVector<autofill::PasswordForm> federated_credentials; | 483 ScopedVector<autofill::PasswordForm> federated_credentials; |
| 434 GURL origin("http://example.com"); | 484 GURL origin("http://example.com"); |
| 435 EXPECT_TRUE(controller()->OnChooseCredentials( | 485 EXPECT_TRUE(controller()->OnChooseCredentials( |
| 436 local_credentials.Pass(), federated_credentials.Pass(), origin, | 486 local_credentials.Pass(), federated_credentials.Pass(), origin, |
| 437 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, | 487 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, |
| 438 base::Unretained(this)))); | 488 base::Unretained(this)))); |
| 439 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 489 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 440 controller()->state()); | 490 controller()->state()); |
| 441 EXPECT_EQ(origin, controller()->origin()); | 491 EXPECT_EQ(origin, controller()->origin()); |
| 442 controller()->ManagePasswordsUIController::ChooseCredential( | 492 controller()->ManagePasswordsUIController::ChooseCredential( |
| 443 test_local_form(), | 493 test_local_form(), |
| 444 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY); | 494 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY); |
| 445 controller()->OnBubbleHidden(); | 495 controller()->OnBubbleHidden(); |
| 446 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 496 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->state()); |
| 447 ASSERT_TRUE(credential_info()); | 497 ASSERT_TRUE(credential_info()); |
| 448 EXPECT_TRUE(credential_info()->federation.is_empty()); | 498 EXPECT_TRUE(credential_info()->federation.is_empty()); |
| 449 EXPECT_TRUE(credential_info()->password.empty()); | 499 EXPECT_TRUE(credential_info()->password.empty()); |
| 450 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY, | 500 EXPECT_EQ(password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY, |
| 451 credential_info()->type); | 501 credential_info()->type); |
| 452 } | 502 } |
| 453 | 503 |
| 454 TEST_F(ManagePasswordsUIControllerTest, AutoSignin) { | 504 TEST_F(ManagePasswordsUIControllerTest, AutoSignin) { |
| 455 ScopedVector<autofill::PasswordForm> local_credentials; | 505 ScopedVector<autofill::PasswordForm> local_credentials; |
| 456 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); | 506 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); |
| 457 controller()->OnAutoSignin(local_credentials.Pass()); | 507 controller()->OnAutoSignin(local_credentials.Pass()); |
| 458 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->state()); | 508 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->state()); |
| 459 EXPECT_EQ(test_local_form().origin, controller()->origin()); | 509 EXPECT_EQ(test_local_form().origin, controller()->origin()); |
| 460 ASSERT_FALSE(controller()->local_credentials_forms().empty()); | 510 ASSERT_FALSE(controller()->GetCurrentForms().empty()); |
| 461 EXPECT_EQ(test_local_form(), *controller()->local_credentials_forms()[0]); | 511 EXPECT_EQ(test_local_form(), *controller()->GetCurrentForms()[0]); |
| 462 ManagePasswordsIconMock mock; | 512 ManagePasswordsIconMock mock; |
| 463 controller()->UpdateIconAndBubbleState(&mock); | 513 controller()->UpdateIconAndBubbleState(&mock); |
| 464 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, mock.state()); | 514 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, mock.state()); |
| 465 | 515 |
| 466 controller()->OnBubbleHidden(); | 516 controller()->OnBubbleHidden(); |
| 467 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 517 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
| 468 controller()->UpdateIconAndBubbleState(&mock); | 518 controller()->UpdateIconAndBubbleState(&mock); |
| 469 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); | 519 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, mock.state()); |
| 470 } | 520 } |
| 471 | 521 |
| 472 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) { | 522 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) { |
| 473 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 523 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
| 474 autofill::PasswordFormMap map; | 524 autofill::PasswordFormMap map; |
| 475 autofill::PasswordForm psl_matched_test_form = test_local_form(); | 525 autofill::PasswordForm psl_matched_test_form = test_local_form(); |
| 476 psl_matched_test_form.original_signon_realm = "http://pslmatched.example.com"; | 526 psl_matched_test_form.original_signon_realm = "http://pslmatched.example.com"; |
| 477 map[kTestUsername] = &psl_matched_test_form; | 527 map[kTestUsername] = &psl_matched_test_form; |
| 478 controller()->OnPasswordAutofilled(map); | 528 controller()->OnPasswordAutofilled(map); |
| 479 | 529 |
| 480 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); | 530 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->state()); |
| 481 } | 531 } |
| OLD | NEW |