| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
| 6 #include "chrome/browser/password_manager/chrome_password_manager_client.h" | 6 #include "chrome/browser/password_manager/chrome_password_manager_client.h" |
| 7 #include "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
| 8 #include "chrome/browser/ui/browser.h" | 8 #include "chrome/browser/ui/browser.h" |
| 9 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" | 9 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h" |
| 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 | 115 |
| 116 content::WebContents* SetupTabWithTestController(Browser* browser); | 116 content::WebContents* SetupTabWithTestController(Browser* browser); |
| 117 | 117 |
| 118 TestManagePasswordsUIController* controller() const { return controller_; } | 118 TestManagePasswordsUIController* controller() const { return controller_; } |
| 119 | 119 |
| 120 ChromePasswordManagerClient* client() const { | 120 ChromePasswordManagerClient* client() const { |
| 121 return ChromePasswordManagerClient::FromWebContents( | 121 return ChromePasswordManagerClient::FromWebContents( |
| 122 browser()->tab_strip_model()->GetActiveWebContents()); | 122 browser()->tab_strip_model()->GetActiveWebContents()); |
| 123 } | 123 } |
| 124 | 124 |
| 125 MOCK_METHOD1(OnChooseCredential, | 125 MOCK_METHOD1(OnChooseCredential, void(const autofill::PasswordForm*)); |
| 126 void(const password_manager::CredentialInfo&)); | |
| 127 | 126 |
| 128 private: | 127 private: |
| 129 TestManagePasswordsUIController* controller_; | 128 TestManagePasswordsUIController* controller_; |
| 130 }; | 129 }; |
| 131 | 130 |
| 132 void PasswordDialogViewTest::SetUpOnMainThread() { | 131 void PasswordDialogViewTest::SetUpOnMainThread() { |
| 133 SetupTabWithTestController(browser()); | 132 SetupTabWithTestController(browser()); |
| 134 } | 133 } |
| 135 | 134 |
| 136 void PasswordDialogViewTest::SetupChooseCredentials( | 135 void PasswordDialogViewTest::SetupChooseCredentials( |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 NULL, base::Bind(&TestURLFetcherCallback::CreateURLFetcher, | 188 NULL, base::Bind(&TestURLFetcherCallback::CreateURLFetcher, |
| 190 base::Unretained(&url_callback))); | 189 base::Unretained(&url_callback))); |
| 191 factory.SetFakeResponse(icon_url, std::string(), net::HTTP_OK, | 190 factory.SetFakeResponse(icon_url, std::string(), net::HTTP_OK, |
| 192 net::URLRequestStatus::FAILED); | 191 net::URLRequestStatus::FAILED); |
| 193 EXPECT_CALL(url_callback, OnRequestDone(icon_url)); | 192 EXPECT_CALL(url_callback, OnRequestDone(icon_url)); |
| 194 | 193 |
| 195 SetupChooseCredentials(std::move(local_credentials), | 194 SetupChooseCredentials(std::move(local_credentials), |
| 196 ScopedVector<autofill::PasswordForm>(), origin); | 195 ScopedVector<autofill::PasswordForm>(), origin); |
| 197 ASSERT_TRUE(controller()->current_account_chooser()); | 196 ASSERT_TRUE(controller()->current_account_chooser()); |
| 198 AccountChooserDialogView* dialog = controller()->current_account_chooser(); | 197 AccountChooserDialogView* dialog = controller()->current_account_chooser(); |
| 199 EXPECT_CALL(*this, | 198 EXPECT_CALL(*this, OnChooseCredential(nullptr)); |
| 200 OnChooseCredential(Field( | |
| 201 &password_manager::CredentialInfo::type, | |
| 202 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY))); | |
| 203 EXPECT_CALL(*controller(), OnDialogClosed()); | 199 EXPECT_CALL(*controller(), OnDialogClosed()); |
| 204 dialog->GetWidget()->Close(); | 200 dialog->GetWidget()->Close(); |
| 205 | 201 |
| 206 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 202 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
| 207 } | 203 } |
| 208 | 204 |
| 209 IN_PROC_BROWSER_TEST_F( | 205 IN_PROC_BROWSER_TEST_F( |
| 210 PasswordDialogViewTest, | 206 PasswordDialogViewTest, |
| 211 PopupAccountChooserWithMultipleCredentialsReturnNonEmpty) { | 207 PopupAccountChooserWithMultipleCredentialsReturnNonEmpty) { |
| 212 GURL origin("https://example.com"); | 208 GURL origin("https://example.com"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 223 form.federation_origin = url::Origin(GURL("https://google.com/federation")); | 219 form.federation_origin = url::Origin(GURL("https://google.com/federation")); |
| 224 local_credentials.push_back(new autofill::PasswordForm(form)); | 220 local_credentials.push_back(new autofill::PasswordForm(form)); |
| 225 | 221 |
| 226 SetupChooseCredentials(std::move(local_credentials), | 222 SetupChooseCredentials(std::move(local_credentials), |
| 227 ScopedVector<autofill::PasswordForm>(), origin); | 223 ScopedVector<autofill::PasswordForm>(), origin); |
| 228 ASSERT_TRUE(controller()->current_account_chooser()); | 224 ASSERT_TRUE(controller()->current_account_chooser()); |
| 229 | 225 |
| 230 // After picking a credential, we should pass it back to the caller via the | 226 // After picking a credential, we should pass it back to the caller via the |
| 231 // callback, but we should not pop up the autosignin prompt as there were | 227 // callback, but we should not pop up the autosignin prompt as there were |
| 232 // multiple credentials available. | 228 // multiple credentials available. |
| 233 EXPECT_CALL( | 229 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
| 234 *this, OnChooseCredential(Field( | |
| 235 &password_manager::CredentialInfo::type, | |
| 236 password_manager::CredentialType::CREDENTIAL_TYPE_FEDERATED))); | |
| 237 EXPECT_TRUE( | 230 EXPECT_TRUE( |
| 238 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 231 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
| 239 browser()->profile()->GetPrefs())); | 232 browser()->profile()->GetPrefs())); |
| 240 controller()->ChooseCredential( | 233 controller()->ChooseCredential( |
| 241 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 234 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
| 242 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 235 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
| 243 } | 236 } |
| 244 | 237 |
| 245 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 238 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
| 246 PopupAccountChooserWithSingleCredentialReturnEmpty) { | 239 PopupAccountChooserWithSingleCredentialReturnEmpty) { |
| 247 GURL origin("https://example.com"); | 240 GURL origin("https://example.com"); |
| 248 ScopedVector<autofill::PasswordForm> local_credentials; | 241 ScopedVector<autofill::PasswordForm> local_credentials; |
| 249 autofill::PasswordForm form; | 242 autofill::PasswordForm form; |
| 250 form.origin = origin; | 243 form.origin = origin; |
| 251 form.display_name = base::ASCIIToUTF16("Peter"); | 244 form.display_name = base::ASCIIToUTF16("Peter"); |
| 252 form.username_value = base::ASCIIToUTF16("peter@pan.test"); | 245 form.username_value = base::ASCIIToUTF16("peter@pan.test"); |
| 253 local_credentials.push_back(new autofill::PasswordForm(form)); | 246 local_credentials.push_back(new autofill::PasswordForm(form)); |
| 254 | 247 |
| 255 SetupChooseCredentials(std::move(local_credentials), | 248 SetupChooseCredentials(std::move(local_credentials), |
| 256 ScopedVector<autofill::PasswordForm>(), origin); | 249 ScopedVector<autofill::PasswordForm>(), origin); |
| 257 | 250 |
| 258 EXPECT_TRUE(controller()->current_account_chooser()); | 251 EXPECT_TRUE(controller()->current_account_chooser()); |
| 259 AccountChooserDialogView* dialog = controller()->current_account_chooser(); | 252 AccountChooserDialogView* dialog = controller()->current_account_chooser(); |
| 260 EXPECT_CALL(*this, | 253 EXPECT_CALL(*this, OnChooseCredential(nullptr)); |
| 261 OnChooseCredential(Field( | |
| 262 &password_manager::CredentialInfo::type, | |
| 263 password_manager::CredentialType::CREDENTIAL_TYPE_EMPTY))); | |
| 264 EXPECT_CALL(*controller(), OnDialogClosed()); | 254 EXPECT_CALL(*controller(), OnDialogClosed()); |
| 265 dialog->GetWidget()->Close(); | 255 dialog->GetWidget()->Close(); |
| 266 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 256 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
| 267 } | 257 } |
| 268 | 258 |
| 269 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 259 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
| 270 PopupAccountChooserWithSingleCredentialReturnNonEmpty) { | 260 PopupAccountChooserWithSingleCredentialReturnNonEmpty) { |
| 271 GURL origin("https://example.com"); | 261 GURL origin("https://example.com"); |
| 272 ScopedVector<autofill::PasswordForm> local_credentials; | 262 ScopedVector<autofill::PasswordForm> local_credentials; |
| 273 autofill::PasswordForm form; | 263 autofill::PasswordForm form; |
| 274 form.origin = origin; | 264 form.origin = origin; |
| 275 form.display_name = base::ASCIIToUTF16("Peter"); | 265 form.display_name = base::ASCIIToUTF16("Peter"); |
| 276 form.username_value = base::ASCIIToUTF16("peter@pan.test"); | 266 form.username_value = base::ASCIIToUTF16("peter@pan.test"); |
| 277 local_credentials.push_back(new autofill::PasswordForm(form)); | 267 local_credentials.push_back(new autofill::PasswordForm(form)); |
| 278 | 268 |
| 279 SetupChooseCredentials(std::move(local_credentials), | 269 SetupChooseCredentials(std::move(local_credentials), |
| 280 ScopedVector<autofill::PasswordForm>(), origin); | 270 ScopedVector<autofill::PasswordForm>(), origin); |
| 281 | 271 |
| 282 EXPECT_TRUE(controller()->current_account_chooser()); | 272 EXPECT_TRUE(controller()->current_account_chooser()); |
| 283 | 273 |
| 284 // After picking a credential, we should pass it back to the caller via the | 274 // After picking a credential, we should pass it back to the caller via the |
| 285 // callback, and pop up the autosignin prompt iff we should show it. | 275 // callback, and pop up the autosignin prompt iff we should show it. |
| 286 EXPECT_CALL(*this, | 276 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
| 287 OnChooseCredential(Field( | |
| 288 &password_manager::CredentialInfo::type, | |
| 289 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); | |
| 290 EXPECT_TRUE( | 277 EXPECT_TRUE( |
| 291 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 278 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
| 292 browser()->profile()->GetPrefs())); | 279 browser()->profile()->GetPrefs())); |
| 293 controller()->ChooseCredential( | 280 controller()->ChooseCredential( |
| 294 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 281 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
| 295 | 282 |
| 296 EXPECT_TRUE(controller()->current_autosignin_prompt()); | 283 EXPECT_TRUE(controller()->current_autosignin_prompt()); |
| 297 } | 284 } |
| 298 | 285 |
| 299 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 286 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
| 300 PopupAccountChooserWithDisabledAutoSignin) { | 287 PopupAccountChooserWithDisabledAutoSignin) { |
| 301 EXPECT_TRUE( | 288 EXPECT_TRUE( |
| 302 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 289 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
| 303 browser()->profile()->GetPrefs())); | 290 browser()->profile()->GetPrefs())); |
| 304 GURL origin("https://example.com"); | 291 GURL origin("https://example.com"); |
| 305 ScopedVector<autofill::PasswordForm> local_credentials; | 292 ScopedVector<autofill::PasswordForm> local_credentials; |
| 306 autofill::PasswordForm form; | 293 autofill::PasswordForm form; |
| 307 form.origin = origin; | 294 form.origin = origin; |
| 308 form.display_name = base::ASCIIToUTF16("Peter"); | 295 form.display_name = base::ASCIIToUTF16("Peter"); |
| 309 form.username_value = base::ASCIIToUTF16("peter@pan.test"); | 296 form.username_value = base::ASCIIToUTF16("peter@pan.test"); |
| 310 local_credentials.push_back(new autofill::PasswordForm(form)); | 297 local_credentials.push_back(new autofill::PasswordForm(form)); |
| 311 | 298 |
| 312 SetupChooseCredentials(std::move(local_credentials), | 299 SetupChooseCredentials(std::move(local_credentials), |
| 313 ScopedVector<autofill::PasswordForm>(), origin); | 300 ScopedVector<autofill::PasswordForm>(), origin); |
| 314 | 301 |
| 315 EXPECT_TRUE(controller()->current_account_chooser()); | 302 EXPECT_TRUE(controller()->current_account_chooser()); |
| 316 | 303 |
| 317 // After picking a credential, we should pass it back to the caller via the | 304 // After picking a credential, we should pass it back to the caller via the |
| 318 // callback, and pop up the autosignin prompt iff we should show it. | 305 // callback, and pop up the autosignin prompt iff we should show it. |
| 319 EXPECT_CALL(*this, | 306 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
| 320 OnChooseCredential(Field( | |
| 321 &password_manager::CredentialInfo::type, | |
| 322 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); | |
| 323 browser()->profile()->GetPrefs()->SetBoolean( | 307 browser()->profile()->GetPrefs()->SetBoolean( |
| 324 password_manager::prefs::kCredentialsEnableAutosignin, false); | 308 password_manager::prefs::kCredentialsEnableAutosignin, false); |
| 325 controller()->ChooseCredential( | 309 controller()->ChooseCredential( |
| 326 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 310 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
| 327 | 311 |
| 328 // The first run experience isn't shown because the setting is off. | 312 // The first run experience isn't shown because the setting is off. |
| 329 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 313 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
| 330 } | 314 } |
| 331 | 315 |
| 332 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, | 316 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 350 ChromePasswordManagerClient* client = | 334 ChromePasswordManagerClient* client = |
| 351 ChromePasswordManagerClient::FromWebContents(tab); | 335 ChromePasswordManagerClient::FromWebContents(tab); |
| 352 client->PromptUserToChooseCredentials( | 336 client->PromptUserToChooseCredentials( |
| 353 std::move(local_credentials), ScopedVector<autofill::PasswordForm>(), | 337 std::move(local_credentials), ScopedVector<autofill::PasswordForm>(), |
| 354 origin, | 338 origin, |
| 355 base::Bind(&PasswordDialogViewTest::OnChooseCredential, this)); | 339 base::Bind(&PasswordDialogViewTest::OnChooseCredential, this)); |
| 356 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 340 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 357 controller()->GetState()); | 341 controller()->GetState()); |
| 358 EXPECT_TRUE(controller()->current_account_chooser()); | 342 EXPECT_TRUE(controller()->current_account_chooser()); |
| 359 | 343 |
| 360 EXPECT_CALL(*this, | 344 EXPECT_CALL(*this, OnChooseCredential(testing::Pointee(form))); |
| 361 OnChooseCredential(Field( | |
| 362 &password_manager::CredentialInfo::type, | |
| 363 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD))); | |
| 364 controller()->ChooseCredential( | 345 controller()->ChooseCredential( |
| 365 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 346 form, password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
| 366 | 347 |
| 367 // The first run experience isn't shown because of Incognito. | 348 // The first run experience isn't shown because of Incognito. |
| 368 EXPECT_FALSE(controller()->current_autosignin_prompt()); | 349 EXPECT_FALSE(controller()->current_autosignin_prompt()); |
| 369 } | 350 } |
| 370 | 351 |
| 371 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, PopupAutoSigninPrompt) { | 352 IN_PROC_BROWSER_TEST_F(PasswordDialogViewTest, PopupAutoSigninPrompt) { |
| 372 EXPECT_TRUE( | 353 EXPECT_TRUE( |
| 373 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( | 354 password_bubble_experiment::ShouldShowAutoSignInPromptFirstRunExperience( |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 password_manager::prefs::kCredentialsEnableAutosignin, true); | 409 password_manager::prefs::kCredentialsEnableAutosignin, true); |
| 429 | 410 |
| 430 // Successful login with the same form after block will prompt: | 411 // Successful login with the same form after block will prompt: |
| 431 blocked_form.reset(new autofill::PasswordForm(form)); | 412 blocked_form.reset(new autofill::PasswordForm(form)); |
| 432 client()->NotifyUserCouldBeAutoSignedIn(std::move(blocked_form)); | 413 client()->NotifyUserCouldBeAutoSignedIn(std::move(blocked_form)); |
| 433 client()->NotifySuccessfulLoginWithExistingPassword(form); | 414 client()->NotifySuccessfulLoginWithExistingPassword(form); |
| 434 ASSERT_TRUE(controller()->current_autosignin_prompt()); | 415 ASSERT_TRUE(controller()->current_autosignin_prompt()); |
| 435 } | 416 } |
| 436 | 417 |
| 437 } // namespace | 418 } // namespace |
| OLD | NEW |