| 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 <memory> | 5 #include <memory> |
| 6 #include <utility> | 6 #include <utility> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/macros.h" | 10 #include "base/macros.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 content::WebContents* contents, | 83 content::WebContents* contents, |
| 84 password_manager::PasswordManagerClient* client); | 84 password_manager::PasswordManagerClient* client); |
| 85 ~TestManagePasswordsUIController() override; | 85 ~TestManagePasswordsUIController() override; |
| 86 | 86 |
| 87 bool opened_bubble() const { return opened_bubble_; } | 87 bool opened_bubble() const { return opened_bubble_; } |
| 88 | 88 |
| 89 MOCK_METHOD1(CreateAccountChooser, | 89 MOCK_METHOD1(CreateAccountChooser, |
| 90 AccountChooserPrompt*(PasswordDialogController*)); | 90 AccountChooserPrompt*(PasswordDialogController*)); |
| 91 MOCK_METHOD1(CreateAutoSigninPrompt, | 91 MOCK_METHOD1(CreateAutoSigninPrompt, |
| 92 AutoSigninFirstRunPrompt*(PasswordDialogController*)); | 92 AutoSigninFirstRunPrompt*(PasswordDialogController*)); |
| 93 MOCK_METHOD0(OnUpdateBubbleAndIconVisibility, void()); |
| 93 using ManagePasswordsUIController::DidNavigateMainFrame; | 94 using ManagePasswordsUIController::DidNavigateMainFrame; |
| 94 | 95 |
| 95 private: | 96 private: |
| 96 void UpdateBubbleAndIconVisibility() override; | 97 void UpdateBubbleAndIconVisibility() override; |
| 97 void SavePasswordInternal() override {} | 98 void SavePasswordInternal() override {} |
| 98 void UpdatePasswordInternal( | 99 void UpdatePasswordInternal( |
| 99 const autofill::PasswordForm& password_form) override {} | 100 const autofill::PasswordForm& password_form) override {} |
| 100 void NeverSavePasswordInternal() override; | 101 void NeverSavePasswordInternal() override; |
| 101 | 102 |
| 102 bool opened_bubble_; | 103 bool opened_bubble_; |
| 103 }; | 104 }; |
| 104 | 105 |
| 105 TestManagePasswordsUIController::TestManagePasswordsUIController( | 106 TestManagePasswordsUIController::TestManagePasswordsUIController( |
| 106 content::WebContents* contents, | 107 content::WebContents* contents, |
| 107 password_manager::PasswordManagerClient* client) | 108 password_manager::PasswordManagerClient* client) |
| 108 : ManagePasswordsUIController(contents) { | 109 : ManagePasswordsUIController(contents) { |
| 109 // Do not silently replace an existing ManagePasswordsUIController because it | 110 // Do not silently replace an existing ManagePasswordsUIController because it |
| 110 // unregisters itself in WebContentsDestroyed(). | 111 // unregisters itself in WebContentsDestroyed(). |
| 111 EXPECT_FALSE(contents->GetUserData(UserDataKey())); | 112 EXPECT_FALSE(contents->GetUserData(UserDataKey())); |
| 112 contents->SetUserData(UserDataKey(), this); | 113 contents->SetUserData(UserDataKey(), this); |
| 113 set_client(client); | 114 set_client(client); |
| 114 } | 115 } |
| 115 | 116 |
| 116 TestManagePasswordsUIController::~TestManagePasswordsUIController() { | 117 TestManagePasswordsUIController::~TestManagePasswordsUIController() { |
| 117 } | 118 } |
| 118 | 119 |
| 119 void TestManagePasswordsUIController::UpdateBubbleAndIconVisibility() { | 120 void TestManagePasswordsUIController::UpdateBubbleAndIconVisibility() { |
| 120 opened_bubble_ = IsAutomaticallyOpeningBubble(); | 121 opened_bubble_ = IsAutomaticallyOpeningBubble(); |
| 121 ManagePasswordsUIController::UpdateBubbleAndIconVisibility(); | 122 ManagePasswordsUIController::UpdateBubbleAndIconVisibility(); |
| 123 OnUpdateBubbleAndIconVisibility(); |
| 122 if (opened_bubble_) | 124 if (opened_bubble_) |
| 123 OnBubbleShown(); | 125 OnBubbleShown(); |
| 124 } | 126 } |
| 125 | 127 |
| 126 void TestManagePasswordsUIController::NeverSavePasswordInternal() { | 128 void TestManagePasswordsUIController::NeverSavePasswordInternal() { |
| 127 autofill::PasswordForm blacklisted; | 129 autofill::PasswordForm blacklisted; |
| 128 blacklisted.origin = this->GetOrigin(); | 130 blacklisted.origin = this->GetOrigin(); |
| 129 blacklisted.signon_realm = blacklisted.origin.spec(); | 131 blacklisted.signon_realm = blacklisted.origin.spec(); |
| 130 blacklisted.blacklisted_by_user = true; | 132 blacklisted.blacklisted_by_user = true; |
| 131 password_manager::PasswordStoreChange change( | 133 password_manager::PasswordStoreChange change( |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 test_local_form_.origin = GURL("http://example.com/login"); | 203 test_local_form_.origin = GURL("http://example.com/login"); |
| 202 test_local_form_.username_value = base::ASCIIToUTF16("username"); | 204 test_local_form_.username_value = base::ASCIIToUTF16("username"); |
| 203 test_local_form_.password_value = base::ASCIIToUTF16("12345"); | 205 test_local_form_.password_value = base::ASCIIToUTF16("12345"); |
| 204 | 206 |
| 205 test_federated_form_.origin = GURL("http://example.com/login"); | 207 test_federated_form_.origin = GURL("http://example.com/login"); |
| 206 test_federated_form_.username_value = base::ASCIIToUTF16("username"); | 208 test_federated_form_.username_value = base::ASCIIToUTF16("username"); |
| 207 test_federated_form_.federation_origin = | 209 test_federated_form_.federation_origin = |
| 208 url::Origin(GURL("https://federation.test/")); | 210 url::Origin(GURL("https://federation.test/")); |
| 209 | 211 |
| 210 // We need to be on a "webby" URL for most tests. | 212 // We need to be on a "webby" URL for most tests. |
| 213 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 211 content::WebContentsTester::For(web_contents()) | 214 content::WebContentsTester::For(web_contents()) |
| 212 ->NavigateAndCommit(GURL("http://example.com")); | 215 ->NavigateAndCommit(GURL("http://example.com")); |
| 213 } | 216 } |
| 214 | 217 |
| 215 void ManagePasswordsUIControllerTest::ExpectIconStateIs( | 218 void ManagePasswordsUIControllerTest::ExpectIconStateIs( |
| 216 password_manager::ui::State state) { | 219 password_manager::ui::State state) { |
| 217 TestManagePasswordsIconView view; | 220 TestManagePasswordsIconView view; |
| 218 controller()->UpdateIconAndBubbleState(&view); | 221 controller()->UpdateIconAndBubbleState(&view); |
| 219 EXPECT_EQ(state, view.state()); | 222 EXPECT_EQ(state, view.state()); |
| 220 } | 223 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 251 DCHECK(state == password_manager::ui::PENDING_PASSWORD_STATE || | 254 DCHECK(state == password_manager::ui::PENDING_PASSWORD_STATE || |
| 252 state == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || | 255 state == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE || |
| 253 state == password_manager::ui::CONFIRMATION_STATE); | 256 state == password_manager::ui::CONFIRMATION_STATE); |
| 254 | 257 |
| 255 // Set the bubble state to |state|. | 258 // Set the bubble state to |state|. |
| 256 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 259 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 257 CreateFormManager()); | 260 CreateFormManager()); |
| 258 test_form_manager->ProvisionallySave( | 261 test_form_manager->ProvisionallySave( |
| 259 test_local_form(), | 262 test_local_form(), |
| 260 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 263 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 264 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 261 if (state == password_manager::ui::PENDING_PASSWORD_STATE) | 265 if (state == password_manager::ui::PENDING_PASSWORD_STATE) |
| 262 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 266 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 263 else if (state == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) | 267 else if (state == password_manager::ui::PENDING_PASSWORD_UPDATE_STATE) |
| 264 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); | 268 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); |
| 265 else // password_manager::ui::CONFIRMATION_STATE | 269 else // password_manager::ui::CONFIRMATION_STATE |
| 266 controller()->OnAutomaticPasswordSave(std::move(test_form_manager)); | 270 controller()->OnAutomaticPasswordSave(std::move(test_form_manager)); |
| 267 ASSERT_EQ(state, controller()->GetState()); | 271 ASSERT_EQ(state, controller()->GetState()); |
| 268 | 272 |
| 269 // Autofill happens. | 273 // Autofill happens. |
| 270 std::unique_ptr<autofill::PasswordForm> test_form( | 274 std::unique_ptr<autofill::PasswordForm> test_form( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 286 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); | 290 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); |
| 287 } | 291 } |
| 288 | 292 |
| 289 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { | 293 TEST_F(ManagePasswordsUIControllerTest, PasswordAutofilled) { |
| 290 std::unique_ptr<autofill::PasswordForm> test_form( | 294 std::unique_ptr<autofill::PasswordForm> test_form( |
| 291 new autofill::PasswordForm(test_local_form())); | 295 new autofill::PasswordForm(test_local_form())); |
| 292 autofill::PasswordForm* test_form_ptr = test_form.get(); | 296 autofill::PasswordForm* test_form_ptr = test_form.get(); |
| 293 base::string16 kTestUsername = test_form->username_value; | 297 base::string16 kTestUsername = test_form->username_value; |
| 294 autofill::PasswordFormMap map; | 298 autofill::PasswordFormMap map; |
| 295 map.insert(std::make_pair(kTestUsername, std::move(test_form))); | 299 map.insert(std::make_pair(kTestUsername, std::move(test_form))); |
| 300 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 296 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 301 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 297 | 302 |
| 298 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 303 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 299 EXPECT_EQ(test_form_ptr->origin, controller()->GetOrigin()); | 304 EXPECT_EQ(test_form_ptr->origin, controller()->GetOrigin()); |
| 300 ASSERT_EQ(1u, controller()->GetCurrentForms().size()); | 305 ASSERT_EQ(1u, controller()->GetCurrentForms().size()); |
| 301 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); | 306 EXPECT_EQ(kTestUsername, controller()->GetCurrentForms()[0]->username_value); |
| 302 | 307 |
| 303 // Controller should store a separate copy of the form as it doesn't own it. | 308 // Controller should store a separate copy of the form as it doesn't own it. |
| 304 EXPECT_NE(test_form_ptr, controller()->GetCurrentForms()[0]); | 309 EXPECT_NE(test_form_ptr, controller()->GetCurrentForms()[0]); |
| 305 | 310 |
| 306 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); | 311 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); |
| 307 } | 312 } |
| 308 | 313 |
| 309 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { | 314 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmitted) { |
| 310 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 315 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 311 CreateFormManager()); | 316 CreateFormManager()); |
| 312 test_form_manager->ProvisionallySave( | 317 test_form_manager->ProvisionallySave( |
| 313 test_local_form(), | 318 test_local_form(), |
| 314 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 319 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 320 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 315 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 321 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 316 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 322 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 317 controller()->GetState()); | 323 controller()->GetState()); |
| 318 EXPECT_TRUE(controller()->opened_bubble()); | 324 EXPECT_TRUE(controller()->opened_bubble()); |
| 319 EXPECT_EQ(test_local_form().origin, controller()->GetOrigin()); | 325 EXPECT_EQ(test_local_form().origin, controller()->GetOrigin()); |
| 320 | 326 |
| 321 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); | 327 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); |
| 322 } | 328 } |
| 323 | 329 |
| 324 TEST_F(ManagePasswordsUIControllerTest, BlacklistedFormPasswordSubmitted) { | 330 TEST_F(ManagePasswordsUIControllerTest, BlacklistedFormPasswordSubmitted) { |
| 325 autofill::PasswordForm blacklisted; | 331 autofill::PasswordForm blacklisted; |
| 326 blacklisted.origin = test_local_form().origin; | 332 blacklisted.origin = test_local_form().origin; |
| 327 blacklisted.signon_realm = blacklisted.origin.spec(); | 333 blacklisted.signon_realm = blacklisted.origin.spec(); |
| 328 blacklisted.blacklisted_by_user = true; | 334 blacklisted.blacklisted_by_user = true; |
| 329 ScopedVector<autofill::PasswordForm> stored_forms; | 335 ScopedVector<autofill::PasswordForm> stored_forms; |
| 330 stored_forms.push_back(new autofill::PasswordForm(blacklisted)); | 336 stored_forms.push_back(new autofill::PasswordForm(blacklisted)); |
| 331 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager = | 337 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager = |
| 332 CreateFormManagerWithBestMatches(test_local_form(), | 338 CreateFormManagerWithBestMatches(test_local_form(), |
| 333 std::move(stored_forms)); | 339 std::move(stored_forms)); |
| 334 | 340 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 335 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 341 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 336 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 342 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 337 controller()->GetState()); | 343 controller()->GetState()); |
| 338 EXPECT_FALSE(controller()->opened_bubble()); | 344 EXPECT_FALSE(controller()->opened_bubble()); |
| 339 | 345 |
| 340 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); | 346 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); |
| 341 } | 347 } |
| 342 | 348 |
| 343 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedBubbleSuppressed) { | 349 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedBubbleSuppressed) { |
| 344 CreateSmartBubbleFieldTrial(); | 350 CreateSmartBubbleFieldTrial(); |
| 345 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 351 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 346 CreateFormManager()); | 352 CreateFormManager()); |
| 347 password_manager::InteractionsStats stats; | 353 password_manager::InteractionsStats stats; |
| 348 stats.origin_domain = test_local_form().origin.GetOrigin(); | 354 stats.origin_domain = test_local_form().origin.GetOrigin(); |
| 349 stats.username_value = test_local_form().username_value; | 355 stats.username_value = test_local_form().username_value; |
| 350 stats.dismissal_count = kGreatDissmisalCount; | 356 stats.dismissal_count = kGreatDissmisalCount; |
| 351 auto interactions(base::WrapUnique( | 357 auto interactions(base::WrapUnique( |
| 352 new std::vector<std::unique_ptr<password_manager::InteractionsStats>>)); | 358 new std::vector<std::unique_ptr<password_manager::InteractionsStats>>)); |
| 353 interactions->push_back( | 359 interactions->push_back( |
| 354 base::WrapUnique(new password_manager::InteractionsStats(stats))); | 360 base::WrapUnique(new password_manager::InteractionsStats(stats))); |
| 355 test_form_manager->OnGetSiteStatistics(std::move(interactions)); | 361 test_form_manager->OnGetSiteStatistics(std::move(interactions)); |
| 356 test_form_manager->ProvisionallySave( | 362 test_form_manager->ProvisionallySave( |
| 357 test_local_form(), | 363 test_local_form(), |
| 358 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 364 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 365 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 359 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 366 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 360 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 367 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 361 controller()->GetState()); | 368 controller()->GetState()); |
| 362 EXPECT_FALSE(controller()->opened_bubble()); | 369 EXPECT_FALSE(controller()->opened_bubble()); |
| 363 ASSERT_TRUE(controller()->GetCurrentInteractionStats()); | 370 ASSERT_TRUE(controller()->GetCurrentInteractionStats()); |
| 364 EXPECT_EQ(stats, *controller()->GetCurrentInteractionStats()); | 371 EXPECT_EQ(stats, *controller()->GetCurrentInteractionStats()); |
| 365 | 372 |
| 366 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); | 373 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); |
| 367 variations::testing::ClearAllVariationParams(); | 374 variations::testing::ClearAllVariationParams(); |
| 368 } | 375 } |
| 369 | 376 |
| 370 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedBubbleNotSuppressed) { | 377 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedBubbleNotSuppressed) { |
| 371 CreateSmartBubbleFieldTrial(); | 378 CreateSmartBubbleFieldTrial(); |
| 372 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 379 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 373 CreateFormManager()); | 380 CreateFormManager()); |
| 374 password_manager::InteractionsStats stats; | 381 password_manager::InteractionsStats stats; |
| 375 stats.origin_domain = test_local_form().origin.GetOrigin(); | 382 stats.origin_domain = test_local_form().origin.GetOrigin(); |
| 376 stats.username_value = base::ASCIIToUTF16("not my username"); | 383 stats.username_value = base::ASCIIToUTF16("not my username"); |
| 377 stats.dismissal_count = kGreatDissmisalCount; | 384 stats.dismissal_count = kGreatDissmisalCount; |
| 378 auto interactions(base::WrapUnique( | 385 auto interactions(base::WrapUnique( |
| 379 new std::vector<std::unique_ptr<password_manager::InteractionsStats>>)); | 386 new std::vector<std::unique_ptr<password_manager::InteractionsStats>>)); |
| 380 interactions->push_back( | 387 interactions->push_back( |
| 381 base::WrapUnique(new password_manager::InteractionsStats(stats))); | 388 base::WrapUnique(new password_manager::InteractionsStats(stats))); |
| 382 test_form_manager->OnGetSiteStatistics(std::move(interactions)); | 389 test_form_manager->OnGetSiteStatistics(std::move(interactions)); |
| 383 test_form_manager->ProvisionallySave( | 390 test_form_manager->ProvisionallySave( |
| 384 test_local_form(), | 391 test_local_form(), |
| 385 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 392 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 393 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 386 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 394 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 387 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 395 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 388 controller()->GetState()); | 396 controller()->GetState()); |
| 389 EXPECT_TRUE(controller()->opened_bubble()); | 397 EXPECT_TRUE(controller()->opened_bubble()); |
| 390 EXPECT_FALSE(controller()->GetCurrentInteractionStats()); | 398 EXPECT_FALSE(controller()->GetCurrentInteractionStats()); |
| 391 | 399 |
| 392 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); | 400 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); |
| 393 variations::testing::ClearAllVariationParams(); | 401 variations::testing::ClearAllVariationParams(); |
| 394 } | 402 } |
| 395 | 403 |
| 396 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { | 404 TEST_F(ManagePasswordsUIControllerTest, PasswordSaved) { |
| 397 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 405 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 398 CreateFormManager()); | 406 CreateFormManager()); |
| 399 test_form_manager->ProvisionallySave( | 407 test_form_manager->ProvisionallySave( |
| 400 test_local_form(), | 408 test_local_form(), |
| 401 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 409 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 410 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 402 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 411 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 403 | 412 |
| 404 controller()->SavePassword(); | 413 controller()->SavePassword(); |
| 405 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); | 414 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); |
| 406 } | 415 } |
| 407 | 416 |
| 408 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { | 417 TEST_F(ManagePasswordsUIControllerTest, PasswordBlacklisted) { |
| 409 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 418 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 410 CreateFormManager()); | 419 CreateFormManager()); |
| 411 test_form_manager->ProvisionallySave( | 420 test_form_manager->ProvisionallySave( |
| 412 test_local_form(), | 421 test_local_form(), |
| 413 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 422 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 423 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 414 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 424 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 415 | 425 |
| 416 controller()->NeverSavePassword(); | 426 controller()->NeverSavePassword(); |
| 417 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); | 427 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); |
| 418 } | 428 } |
| 419 | 429 |
| 420 TEST_F(ManagePasswordsUIControllerTest, NormalNavigations) { | 430 TEST_F(ManagePasswordsUIControllerTest, NormalNavigations) { |
| 421 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 431 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 422 CreateFormManager()); | 432 CreateFormManager()); |
| 433 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 423 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 434 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 424 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); | 435 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); |
| 425 | 436 |
| 426 // Fake-navigate. We expect the bubble's state to persist so a user reasonably | 437 // Fake-navigate. We expect the bubble's state to persist so a user reasonably |
| 427 // has been able to interact with the bubble. This happens on | 438 // has been able to interact with the bubble. This happens on |
| 428 // `accounts.google.com`, for instance. | 439 // `accounts.google.com`, for instance. |
| 429 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), | 440 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), |
| 430 content::FrameNavigateParams()); | 441 content::FrameNavigateParams()); |
| 431 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, | 442 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_STATE, |
| 432 controller()->GetState()); | 443 controller()->GetState()); |
| 433 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); | 444 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_STATE); |
| 434 } | 445 } |
| 435 | 446 |
| 436 TEST_F(ManagePasswordsUIControllerTest, NormalNavigationsClosedBubble) { | 447 TEST_F(ManagePasswordsUIControllerTest, NormalNavigationsClosedBubble) { |
| 437 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 448 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 438 CreateFormManager()); | 449 CreateFormManager()); |
| 450 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 439 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 451 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 440 controller()->SavePassword(); | 452 controller()->SavePassword(); |
| 453 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 441 controller()->OnBubbleHidden(); | 454 controller()->OnBubbleHidden(); |
| 442 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); | 455 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); |
| 443 | 456 |
| 444 // Fake-navigate. There is no bubble, reset the state. | 457 // Fake-navigate. There is no bubble, reset the state. |
| 458 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 445 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), | 459 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), |
| 446 content::FrameNavigateParams()); | 460 content::FrameNavigateParams()); |
| 447 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 461 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 448 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); | 462 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); |
| 449 } | 463 } |
| 450 | 464 |
| 451 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { | 465 TEST_F(ManagePasswordsUIControllerTest, PasswordSubmittedToNonWebbyURL) { |
| 452 // Navigate to a non-webby URL, then see what happens! | 466 // Navigate to a non-webby URL, then see what happens! |
| 467 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 453 content::WebContentsTester::For(web_contents()) | 468 content::WebContentsTester::For(web_contents()) |
| 454 ->NavigateAndCommit(GURL("chrome://sign-in")); | 469 ->NavigateAndCommit(GURL("chrome://sign-in")); |
| 455 | 470 |
| 456 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 471 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 457 CreateFormManager()); | 472 CreateFormManager()); |
| 458 test_form_manager->ProvisionallySave( | 473 test_form_manager->ProvisionallySave( |
| 459 test_local_form(), | 474 test_local_form(), |
| 460 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 475 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 476 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 461 controller()->OnPasswordSubmitted(std::move(test_form_manager)); | 477 controller()->OnPasswordSubmitted(std::move(test_form_manager)); |
| 462 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 478 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 463 EXPECT_EQ(GURL::EmptyGURL(), controller()->GetOrigin()); | 479 EXPECT_EQ(GURL::EmptyGURL(), controller()->GetOrigin()); |
| 464 | 480 |
| 465 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); | 481 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); |
| 466 } | 482 } |
| 467 | 483 |
| 468 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { | 484 TEST_F(ManagePasswordsUIControllerTest, BlacklistedElsewhere) { |
| 469 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 485 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
| 470 autofill::PasswordFormMap map; | 486 autofill::PasswordFormMap map; |
| 471 map.insert(std::make_pair( | 487 map.insert(std::make_pair( |
| 472 kTestUsername, | 488 kTestUsername, |
| 473 base::WrapUnique(new autofill::PasswordForm(test_local_form())))); | 489 base::WrapUnique(new autofill::PasswordForm(test_local_form())))); |
| 490 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 474 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 491 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 475 | 492 |
| 476 test_local_form().blacklisted_by_user = true; | 493 test_local_form().blacklisted_by_user = true; |
| 477 password_manager::PasswordStoreChange change( | 494 password_manager::PasswordStoreChange change( |
| 478 password_manager::PasswordStoreChange::ADD, test_local_form()); | 495 password_manager::PasswordStoreChange::ADD, test_local_form()); |
| 479 password_manager::PasswordStoreChangeList list(1, change); | 496 password_manager::PasswordStoreChangeList list(1, change); |
| 480 controller()->OnLoginsChanged(list); | 497 controller()->OnLoginsChanged(list); |
| 481 | 498 |
| 482 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 499 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 483 EXPECT_EQ(test_local_form().origin, controller()->GetOrigin()); | 500 EXPECT_EQ(test_local_form().origin, controller()->GetOrigin()); |
| 484 | 501 |
| 485 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); | 502 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); |
| 486 } | 503 } |
| 487 | 504 |
| 488 TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) { | 505 TEST_F(ManagePasswordsUIControllerTest, AutomaticPasswordSave) { |
| 489 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 506 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 490 CreateFormManager()); | 507 CreateFormManager()); |
| 491 | 508 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 492 controller()->OnAutomaticPasswordSave(std::move(test_form_manager)); | 509 controller()->OnAutomaticPasswordSave(std::move(test_form_manager)); |
| 493 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->GetState()); | 510 EXPECT_EQ(password_manager::ui::CONFIRMATION_STATE, controller()->GetState()); |
| 494 | 511 |
| 512 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 495 controller()->OnBubbleHidden(); | 513 controller()->OnBubbleHidden(); |
| 496 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); | 514 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); |
| 497 } | 515 } |
| 498 | 516 |
| 499 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { | 517 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocal) { |
| 500 ScopedVector<autofill::PasswordForm> local_credentials; | 518 ScopedVector<autofill::PasswordForm> local_credentials; |
| 501 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); | 519 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); |
| 502 ScopedVector<autofill::PasswordForm> federated_credentials; | 520 ScopedVector<autofill::PasswordForm> federated_credentials; |
| 503 GURL origin("http://example.com"); | 521 GURL origin("http://example.com"); |
| 504 PasswordDialogController* dialog_controller = nullptr; | 522 PasswordDialogController* dialog_controller = nullptr; |
| 505 EXPECT_CALL(*controller(), CreateAccountChooser(_)).WillOnce( | 523 EXPECT_CALL(*controller(), CreateAccountChooser(_)).WillOnce( |
| 506 DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt()))); | 524 DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt()))); |
| 507 EXPECT_CALL(dialog_prompt(), ShowAccountChooser()); | 525 EXPECT_CALL(dialog_prompt(), ShowAccountChooser()); |
| 526 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 508 EXPECT_TRUE(controller()->OnChooseCredentials( | 527 EXPECT_TRUE(controller()->OnChooseCredentials( |
| 509 std::move(local_credentials), std::move(federated_credentials), origin, | 528 std::move(local_credentials), std::move(federated_credentials), origin, |
| 510 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, | 529 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, |
| 511 base::Unretained(this)))); | 530 base::Unretained(this)))); |
| 512 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 531 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 513 controller()->GetState()); | 532 controller()->GetState()); |
| 514 EXPECT_EQ(origin, controller()->GetOrigin()); | 533 EXPECT_EQ(origin, controller()->GetOrigin()); |
| 515 EXPECT_THAT(controller()->GetCurrentForms(), | 534 EXPECT_THAT(controller()->GetCurrentForms(), |
| 516 ElementsAre(Pointee(test_local_form()))); | 535 ElementsAre(Pointee(test_local_form()))); |
| 517 ASSERT_THAT(dialog_controller->GetLocalForms(), | 536 ASSERT_THAT(dialog_controller->GetLocalForms(), |
| 518 ElementsAre(Pointee(test_local_form()))); | 537 ElementsAre(Pointee(test_local_form()))); |
| 519 EXPECT_THAT(dialog_controller->GetFederationsForms(), testing::IsEmpty()); | 538 EXPECT_THAT(dialog_controller->GetFederationsForms(), testing::IsEmpty()); |
| 520 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); | 539 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); |
| 521 | 540 |
| 522 EXPECT_CALL(dialog_prompt(), ControllerGone()); | 541 EXPECT_CALL(dialog_prompt(), ControllerGone()); |
| 523 EXPECT_CALL(*this, CredentialCallback(Pointee(test_local_form()))); | 542 EXPECT_CALL(*this, CredentialCallback(Pointee(test_local_form()))); |
| 543 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 524 dialog_controller->OnChooseCredentials( | 544 dialog_controller->OnChooseCredentials( |
| 525 *dialog_controller->GetLocalForms()[0], | 545 *dialog_controller->GetLocalForms()[0], |
| 526 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 546 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
| 527 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 547 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 528 } | 548 } |
| 529 | 549 |
| 530 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { | 550 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialLocalButFederated) { |
| 531 ScopedVector<autofill::PasswordForm> local_credentials; | 551 ScopedVector<autofill::PasswordForm> local_credentials; |
| 532 local_credentials.push_back( | 552 local_credentials.push_back( |
| 533 new autofill::PasswordForm(test_federated_form())); | 553 new autofill::PasswordForm(test_federated_form())); |
| 534 ScopedVector<autofill::PasswordForm> federated_credentials; | 554 ScopedVector<autofill::PasswordForm> federated_credentials; |
| 535 GURL origin("http://example.com"); | 555 GURL origin("http://example.com"); |
| 536 PasswordDialogController* dialog_controller = nullptr; | 556 PasswordDialogController* dialog_controller = nullptr; |
| 537 EXPECT_CALL(*controller(), CreateAccountChooser(_)).WillOnce( | 557 EXPECT_CALL(*controller(), CreateAccountChooser(_)).WillOnce( |
| 538 DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt()))); | 558 DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt()))); |
| 539 EXPECT_CALL(dialog_prompt(), ShowAccountChooser()); | 559 EXPECT_CALL(dialog_prompt(), ShowAccountChooser()); |
| 560 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 540 EXPECT_TRUE(controller()->OnChooseCredentials( | 561 EXPECT_TRUE(controller()->OnChooseCredentials( |
| 541 std::move(local_credentials), std::move(federated_credentials), origin, | 562 std::move(local_credentials), std::move(federated_credentials), origin, |
| 542 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, | 563 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, |
| 543 base::Unretained(this)))); | 564 base::Unretained(this)))); |
| 544 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 565 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 545 controller()->GetState()); | 566 controller()->GetState()); |
| 546 EXPECT_EQ(origin, controller()->GetOrigin()); | 567 EXPECT_EQ(origin, controller()->GetOrigin()); |
| 547 EXPECT_THAT(controller()->GetCurrentForms(), | 568 EXPECT_THAT(controller()->GetCurrentForms(), |
| 548 ElementsAre(Pointee(test_federated_form()))); | 569 ElementsAre(Pointee(test_federated_form()))); |
| 549 ASSERT_THAT(dialog_controller->GetLocalForms(), | 570 ASSERT_THAT(dialog_controller->GetLocalForms(), |
| 550 ElementsAre(Pointee(test_federated_form()))); | 571 ElementsAre(Pointee(test_federated_form()))); |
| 551 EXPECT_THAT(dialog_controller->GetFederationsForms(), testing::IsEmpty()); | 572 EXPECT_THAT(dialog_controller->GetFederationsForms(), testing::IsEmpty()); |
| 552 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); | 573 ExpectIconStateIs(password_manager::ui::INACTIVE_STATE); |
| 553 | 574 |
| 554 EXPECT_CALL(dialog_prompt(), ControllerGone()); | 575 EXPECT_CALL(dialog_prompt(), ControllerGone()); |
| 555 EXPECT_CALL(*this, CredentialCallback(Pointee(test_federated_form()))); | 576 EXPECT_CALL(*this, CredentialCallback(Pointee(test_federated_form()))); |
| 577 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 556 dialog_controller->OnChooseCredentials( | 578 dialog_controller->OnChooseCredentials( |
| 557 *dialog_controller->GetLocalForms()[0], | 579 *dialog_controller->GetLocalForms()[0], |
| 558 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); | 580 password_manager::CredentialType::CREDENTIAL_TYPE_PASSWORD); |
| 559 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 581 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 560 } | 582 } |
| 561 | 583 |
| 562 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) { | 584 TEST_F(ManagePasswordsUIControllerTest, ChooseCredentialCancel) { |
| 563 ScopedVector<autofill::PasswordForm> local_credentials; | 585 ScopedVector<autofill::PasswordForm> local_credentials; |
| 564 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); | 586 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); |
| 565 ScopedVector<autofill::PasswordForm> federated_credentials; | 587 ScopedVector<autofill::PasswordForm> federated_credentials; |
| 566 GURL origin("http://example.com"); | 588 GURL origin("http://example.com"); |
| 567 PasswordDialogController* dialog_controller = nullptr; | 589 PasswordDialogController* dialog_controller = nullptr; |
| 568 EXPECT_CALL(*controller(), CreateAccountChooser(_)).WillOnce( | 590 EXPECT_CALL(*controller(), CreateAccountChooser(_)).WillOnce( |
| 569 DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt()))); | 591 DoAll(SaveArg<0>(&dialog_controller), Return(&dialog_prompt()))); |
| 570 EXPECT_CALL(dialog_prompt(), ShowAccountChooser()); | 592 EXPECT_CALL(dialog_prompt(), ShowAccountChooser()); |
| 593 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 571 EXPECT_TRUE(controller()->OnChooseCredentials( | 594 EXPECT_TRUE(controller()->OnChooseCredentials( |
| 572 std::move(local_credentials), std::move(federated_credentials), origin, | 595 std::move(local_credentials), std::move(federated_credentials), origin, |
| 573 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, | 596 base::Bind(&ManagePasswordsUIControllerTest::CredentialCallback, |
| 574 base::Unretained(this)))); | 597 base::Unretained(this)))); |
| 575 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, | 598 EXPECT_EQ(password_manager::ui::CREDENTIAL_REQUEST_STATE, |
| 576 controller()->GetState()); | 599 controller()->GetState()); |
| 577 EXPECT_EQ(origin, controller()->GetOrigin()); | 600 EXPECT_EQ(origin, controller()->GetOrigin()); |
| 578 | 601 |
| 579 EXPECT_CALL(dialog_prompt(), ControllerGone()).Times(0); | 602 EXPECT_CALL(dialog_prompt(), ControllerGone()).Times(0); |
| 580 EXPECT_CALL(*this, CredentialCallback(nullptr)); | 603 EXPECT_CALL(*this, CredentialCallback(nullptr)); |
| 604 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 581 dialog_controller->OnCloseDialog(); | 605 dialog_controller->OnCloseDialog(); |
| 582 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 606 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 583 } | 607 } |
| 584 | 608 |
| 585 TEST_F(ManagePasswordsUIControllerTest, AutoSignin) { | 609 TEST_F(ManagePasswordsUIControllerTest, AutoSignin) { |
| 586 ScopedVector<autofill::PasswordForm> local_credentials; | 610 ScopedVector<autofill::PasswordForm> local_credentials; |
| 587 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); | 611 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); |
| 612 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 588 controller()->OnAutoSignin(std::move(local_credentials), | 613 controller()->OnAutoSignin(std::move(local_credentials), |
| 589 test_local_form().origin); | 614 test_local_form().origin); |
| 590 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->GetState()); | 615 EXPECT_EQ(password_manager::ui::AUTO_SIGNIN_STATE, controller()->GetState()); |
| 591 EXPECT_EQ(test_local_form().origin, controller()->GetOrigin()); | 616 EXPECT_EQ(test_local_form().origin, controller()->GetOrigin()); |
| 592 ASSERT_FALSE(controller()->GetCurrentForms().empty()); | 617 ASSERT_FALSE(controller()->GetCurrentForms().empty()); |
| 593 EXPECT_EQ(test_local_form(), *controller()->GetCurrentForms()[0]); | 618 EXPECT_EQ(test_local_form(), *controller()->GetCurrentForms()[0]); |
| 594 ExpectIconStateIs(password_manager::ui::AUTO_SIGNIN_STATE); | 619 ExpectIconStateIs(password_manager::ui::AUTO_SIGNIN_STATE); |
| 620 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 595 controller()->OnBubbleHidden(); | 621 controller()->OnBubbleHidden(); |
| 596 ExpectIconAndControllerStateIs(password_manager::ui::MANAGE_STATE); | 622 ExpectIconAndControllerStateIs(password_manager::ui::MANAGE_STATE); |
| 597 } | 623 } |
| 598 | 624 |
| 599 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRun) { | 625 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRun) { |
| 600 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( | 626 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( |
| 601 Return(&dialog_prompt())); | 627 Return(&dialog_prompt())); |
| 602 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); | 628 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); |
| 603 controller()->OnPromptEnableAutoSignin(); | 629 controller()->OnPromptEnableAutoSignin(); |
| 604 | 630 |
| 605 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 631 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 606 EXPECT_CALL(dialog_prompt(), ControllerGone()); | 632 EXPECT_CALL(dialog_prompt(), ControllerGone()); |
| 607 } | 633 } |
| 608 | 634 |
| 609 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRunAfterAutofill) { | 635 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRunAfterAutofill) { |
| 610 // Setup the managed state first. | 636 // Setup the managed state first. |
| 611 std::unique_ptr<autofill::PasswordForm> test_form( | 637 std::unique_ptr<autofill::PasswordForm> test_form( |
| 612 new autofill::PasswordForm(test_local_form())); | 638 new autofill::PasswordForm(test_local_form())); |
| 613 autofill::PasswordForm* test_form_ptr = test_form.get(); | 639 autofill::PasswordForm* test_form_ptr = test_form.get(); |
| 614 const base::string16 kTestUsername = test_form->username_value; | 640 const base::string16 kTestUsername = test_form->username_value; |
| 615 autofill::PasswordFormMap map; | 641 autofill::PasswordFormMap map; |
| 616 map.insert(std::make_pair(kTestUsername, std::move(test_form))); | 642 map.insert(std::make_pair(kTestUsername, std::move(test_form))); |
| 643 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 617 controller()->OnPasswordAutofilled(map, test_form_ptr->origin, nullptr); | 644 controller()->OnPasswordAutofilled(map, test_form_ptr->origin, nullptr); |
| 618 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 645 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 619 | 646 |
| 620 // Pop up the autosignin promo. The state should stay intact. | 647 // Pop up the autosignin promo. The state should stay intact. |
| 621 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( | 648 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( |
| 622 Return(&dialog_prompt())); | 649 Return(&dialog_prompt())); |
| 623 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); | 650 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); |
| 624 controller()->OnPromptEnableAutoSignin(); | 651 controller()->OnPromptEnableAutoSignin(); |
| 625 | 652 |
| 626 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); | 653 EXPECT_EQ(password_manager::ui::MANAGE_STATE, controller()->GetState()); |
| 627 EXPECT_EQ(test_form_ptr->origin, controller()->GetOrigin()); | 654 EXPECT_EQ(test_form_ptr->origin, controller()->GetOrigin()); |
| 628 EXPECT_THAT(controller()->GetCurrentForms(), | 655 EXPECT_THAT(controller()->GetCurrentForms(), |
| 629 ElementsAre(Pointee(*test_form_ptr))); | 656 ElementsAre(Pointee(*test_form_ptr))); |
| 630 EXPECT_CALL(dialog_prompt(), ControllerGone()); | 657 EXPECT_CALL(dialog_prompt(), ControllerGone()); |
| 631 } | 658 } |
| 632 | 659 |
| 633 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRunAfterNavigation) { | 660 TEST_F(ManagePasswordsUIControllerTest, AutoSigninFirstRunAfterNavigation) { |
| 634 // Pop up the autosignin promo. | 661 // Pop up the autosignin promo. |
| 635 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( | 662 EXPECT_CALL(*controller(), CreateAutoSigninPrompt(_)).WillOnce( |
| 636 Return(&dialog_prompt())); | 663 Return(&dialog_prompt())); |
| 637 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); | 664 EXPECT_CALL(dialog_prompt(), ShowAutoSigninPrompt()); |
| 638 controller()->OnPromptEnableAutoSignin(); | 665 controller()->OnPromptEnableAutoSignin(); |
| 639 | 666 |
| 640 // The dialog should survive any navigation. | 667 // The dialog should survive any navigation. |
| 641 EXPECT_CALL(dialog_prompt(), ControllerGone()).Times(0); | 668 EXPECT_CALL(dialog_prompt(), ControllerGone()).Times(0); |
| 642 content::FrameNavigateParams params; | 669 content::FrameNavigateParams params; |
| 643 params.transition = ui::PAGE_TRANSITION_LINK; | 670 params.transition = ui::PAGE_TRANSITION_LINK; |
| 671 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 644 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), params); | 672 controller()->DidNavigateMainFrame(content::LoadCommittedDetails(), params); |
| 645 ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(&dialog_prompt())); | 673 ASSERT_TRUE(testing::Mock::VerifyAndClearExpectations(&dialog_prompt())); |
| 646 EXPECT_CALL(dialog_prompt(), ControllerGone()); | 674 EXPECT_CALL(dialog_prompt(), ControllerGone()); |
| 647 } | 675 } |
| 648 | 676 |
| 649 TEST_F(ManagePasswordsUIControllerTest, AutofillDuringAutoSignin) { | 677 TEST_F(ManagePasswordsUIControllerTest, AutofillDuringAutoSignin) { |
| 650 ScopedVector<autofill::PasswordForm> local_credentials; | 678 ScopedVector<autofill::PasswordForm> local_credentials; |
| 651 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); | 679 local_credentials.push_back(new autofill::PasswordForm(test_local_form())); |
| 680 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 652 controller()->OnAutoSignin(std::move(local_credentials), | 681 controller()->OnAutoSignin(std::move(local_credentials), |
| 653 test_local_form().origin); | 682 test_local_form().origin); |
| 654 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); | 683 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); |
| 655 std::unique_ptr<autofill::PasswordForm> test_form( | 684 std::unique_ptr<autofill::PasswordForm> test_form( |
| 656 new autofill::PasswordForm(test_local_form())); | 685 new autofill::PasswordForm(test_local_form())); |
| 657 autofill::PasswordFormMap map; | 686 autofill::PasswordFormMap map; |
| 658 base::string16 kTestUsername = test_form->username_value; | 687 base::string16 kTestUsername = test_form->username_value; |
| 659 map.insert(std::make_pair(kTestUsername, std::move(test_form))); | 688 map.insert(std::make_pair(kTestUsername, std::move(test_form))); |
| 660 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 689 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 661 | 690 |
| 662 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); | 691 ExpectIconAndControllerStateIs(password_manager::ui::AUTO_SIGNIN_STATE); |
| 663 } | 692 } |
| 664 | 693 |
| 665 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) { | 694 TEST_F(ManagePasswordsUIControllerTest, InactiveOnPSLMatched) { |
| 666 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); | 695 base::string16 kTestUsername = base::ASCIIToUTF16("test_username"); |
| 667 autofill::PasswordFormMap map; | 696 autofill::PasswordFormMap map; |
| 668 std::unique_ptr<autofill::PasswordForm> psl_matched_test_form( | 697 std::unique_ptr<autofill::PasswordForm> psl_matched_test_form( |
| 669 new autofill::PasswordForm(test_local_form())); | 698 new autofill::PasswordForm(test_local_form())); |
| 670 psl_matched_test_form->is_public_suffix_match = true; | 699 psl_matched_test_form->is_public_suffix_match = true; |
| 671 map.insert(std::make_pair(kTestUsername, std::move(psl_matched_test_form))); | 700 map.insert(std::make_pair(kTestUsername, std::move(psl_matched_test_form))); |
| 701 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 672 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); | 702 controller()->OnPasswordAutofilled(map, map.begin()->second->origin, nullptr); |
| 673 | 703 |
| 674 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); | 704 EXPECT_EQ(password_manager::ui::INACTIVE_STATE, controller()->GetState()); |
| 675 } | 705 } |
| 676 | 706 |
| 677 TEST_F(ManagePasswordsUIControllerTest, UpdatePasswordSubmitted) { | 707 TEST_F(ManagePasswordsUIControllerTest, UpdatePasswordSubmitted) { |
| 678 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 708 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 679 CreateFormManager()); | 709 CreateFormManager()); |
| 710 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 680 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); | 711 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); |
| 681 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, | 712 EXPECT_EQ(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE, |
| 682 controller()->GetState()); | 713 controller()->GetState()); |
| 683 | 714 |
| 684 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); | 715 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); |
| 685 } | 716 } |
| 686 | 717 |
| 687 TEST_F(ManagePasswordsUIControllerTest, PasswordUpdated) { | 718 TEST_F(ManagePasswordsUIControllerTest, PasswordUpdated) { |
| 688 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( | 719 std::unique_ptr<password_manager::PasswordFormManager> test_form_manager( |
| 689 CreateFormManager()); | 720 CreateFormManager()); |
| 690 test_form_manager->ProvisionallySave( | 721 test_form_manager->ProvisionallySave( |
| 691 test_local_form(), | 722 test_local_form(), |
| 692 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); | 723 password_manager::PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES); |
| 724 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 693 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); | 725 controller()->OnUpdatePasswordSubmitted(std::move(test_form_manager)); |
| 694 | 726 |
| 695 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); | 727 ExpectIconStateIs(password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); |
| 728 EXPECT_CALL(*controller(), OnUpdateBubbleAndIconVisibility()); |
| 696 controller()->UpdatePassword(autofill::PasswordForm()); | 729 controller()->UpdatePassword(autofill::PasswordForm()); |
| 697 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); | 730 ExpectIconStateIs(password_manager::ui::MANAGE_STATE); |
| 698 } | 731 } |
| 699 | 732 |
| 700 TEST_F(ManagePasswordsUIControllerTest, SavePendingStatePasswordAutofilled) { | 733 TEST_F(ManagePasswordsUIControllerTest, SavePendingStatePasswordAutofilled) { |
| 701 TestNotChangingStateOnAutofill(password_manager::ui::PENDING_PASSWORD_STATE); | 734 TestNotChangingStateOnAutofill(password_manager::ui::PENDING_PASSWORD_STATE); |
| 702 } | 735 } |
| 703 | 736 |
| 704 TEST_F(ManagePasswordsUIControllerTest, UpdatePendingStatePasswordAutofilled) { | 737 TEST_F(ManagePasswordsUIControllerTest, UpdatePendingStatePasswordAutofilled) { |
| 705 TestNotChangingStateOnAutofill( | 738 TestNotChangingStateOnAutofill( |
| 706 password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); | 739 password_manager::ui::PENDING_PASSWORD_UPDATE_STATE); |
| 707 } | 740 } |
| 708 | 741 |
| 709 TEST_F(ManagePasswordsUIControllerTest, ConfirmationStatePasswordAutofilled) { | 742 TEST_F(ManagePasswordsUIControllerTest, ConfirmationStatePasswordAutofilled) { |
| 710 TestNotChangingStateOnAutofill(password_manager::ui::CONFIRMATION_STATE); | 743 TestNotChangingStateOnAutofill(password_manager::ui::CONFIRMATION_STATE); |
| 711 } | 744 } |
| OLD | NEW |