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 "components/password_manager/content/browser/credential_manager_dispatc
her.h" | 5 #include "components/password_manager/content/browser/credential_manager_dispatc
her.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <tuple> | 10 #include <tuple> |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 MOCK_METHOD1(NotifyUserAutoSigninPtr, | 58 MOCK_METHOD1(NotifyUserAutoSigninPtr, |
59 bool(const std::vector<autofill::PasswordForm*>& local_forms)); | 59 bool(const std::vector<autofill::PasswordForm*>& local_forms)); |
60 MOCK_METHOD1(NotifyUserCouldBeAutoSignedInPtr, | 60 MOCK_METHOD1(NotifyUserCouldBeAutoSignedInPtr, |
61 bool(autofill::PasswordForm* form)); | 61 bool(autofill::PasswordForm* form)); |
62 MOCK_METHOD2(PromptUserToSavePasswordPtr, | 62 MOCK_METHOD2(PromptUserToSavePasswordPtr, |
63 void(PasswordFormManager*, CredentialSourceType type)); | 63 void(PasswordFormManager*, CredentialSourceType type)); |
64 MOCK_METHOD4(PromptUserToChooseCredentialsPtr, | 64 MOCK_METHOD4(PromptUserToChooseCredentialsPtr, |
65 bool(const std::vector<autofill::PasswordForm*>& local_forms, | 65 bool(const std::vector<autofill::PasswordForm*>& local_forms, |
66 const std::vector<autofill::PasswordForm*>& federated_forms, | 66 const std::vector<autofill::PasswordForm*>& federated_forms, |
67 const GURL& origin, | 67 const GURL& origin, |
68 base::Callback<void(const CredentialInfo&)> callback)); | 68 const CredentialsCallback& callback)); |
69 | 69 |
70 explicit MockPasswordManagerClient(PasswordStore* store) : store_(store) { | 70 explicit MockPasswordManagerClient(PasswordStore* store) : store_(store) { |
71 prefs_.registry()->RegisterBooleanPref(prefs::kCredentialsEnableAutosignin, | 71 prefs_.registry()->RegisterBooleanPref(prefs::kCredentialsEnableAutosignin, |
72 true); | 72 true); |
73 prefs_.registry()->RegisterBooleanPref( | 73 prefs_.registry()->RegisterBooleanPref( |
74 prefs::kWasAutoSignInFirstRunExperienceShown, true); | 74 prefs::kWasAutoSignInFirstRunExperienceShown, true); |
75 } | 75 } |
76 ~MockPasswordManagerClient() override {} | 76 ~MockPasswordManagerClient() override {} |
77 | 77 |
78 bool PromptUserToSaveOrUpdatePassword(scoped_ptr<PasswordFormManager> manager, | 78 bool PromptUserToSaveOrUpdatePassword(scoped_ptr<PasswordFormManager> manager, |
(...skipping 10 matching lines...) Expand all Loading... |
89 } | 89 } |
90 | 90 |
91 PasswordStore* GetPasswordStore() const override { return store_; } | 91 PasswordStore* GetPasswordStore() const override { return store_; } |
92 | 92 |
93 PrefService* GetPrefs() override { return &prefs_; } | 93 PrefService* GetPrefs() override { return &prefs_; } |
94 | 94 |
95 bool PromptUserToChooseCredentials( | 95 bool PromptUserToChooseCredentials( |
96 ScopedVector<autofill::PasswordForm> local_forms, | 96 ScopedVector<autofill::PasswordForm> local_forms, |
97 ScopedVector<autofill::PasswordForm> federated_forms, | 97 ScopedVector<autofill::PasswordForm> federated_forms, |
98 const GURL& origin, | 98 const GURL& origin, |
99 base::Callback<void(const CredentialInfo&)> callback) { | 99 const CredentialsCallback& callback) { |
100 EXPECT_FALSE(local_forms.empty() && federated_forms.empty()); | 100 EXPECT_FALSE(local_forms.empty() && federated_forms.empty()); |
101 CredentialInfo info( | 101 const autofill::PasswordForm* form = |
102 local_forms.empty() ? *federated_forms[0] : *local_forms[0], | 102 local_forms.empty() ? federated_forms[0] : local_forms[0]; |
103 local_forms.empty() ? CredentialType::CREDENTIAL_TYPE_FEDERATED | 103 base::ThreadTaskRunnerHandle::Get()->PostTask( |
104 : CredentialType::CREDENTIAL_TYPE_PASSWORD); | 104 FROM_HERE, |
105 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 105 base::Bind(callback, base::Owned(new autofill::PasswordForm(*form)))); |
106 base::Bind(callback, info)); | |
107 PromptUserToChooseCredentialsPtr(local_forms.get(), federated_forms.get(), | 106 PromptUserToChooseCredentialsPtr(local_forms.get(), federated_forms.get(), |
108 origin, callback); | 107 origin, callback); |
109 return true; | 108 return true; |
110 } | 109 } |
111 | 110 |
112 void NotifyUserAutoSignin(ScopedVector<autofill::PasswordForm> local_forms, | 111 void NotifyUserAutoSignin(ScopedVector<autofill::PasswordForm> local_forms, |
113 const GURL& origin) override { | 112 const GURL& origin) override { |
114 EXPECT_FALSE(local_forms.empty()); | 113 EXPECT_FALSE(local_forms.empty()); |
115 NotifyUserAutoSigninPtr(local_forms.get()); | 114 NotifyUserAutoSigninPtr(local_forms.get()); |
116 } | 115 } |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 // Allow the PasswordFormManager to talk to the password store, determine | 404 // Allow the PasswordFormManager to talk to the password store, determine |
406 // the form is a match for an existing form, and update the PasswordStore. | 405 // the form is a match for an existing form, and update the PasswordStore. |
407 RunAllPendingTasks(); | 406 RunAllPendingTasks(); |
408 | 407 |
409 // Verify that the update didn't toggle the skip_zero_click flag off. | 408 // Verify that the update didn't toggle the skip_zero_click flag off. |
410 TestPasswordStore::PasswordMap passwords = store_->stored_passwords(); | 409 TestPasswordStore::PasswordMap passwords = store_->stored_passwords(); |
411 EXPECT_TRUE(passwords[form_.signon_realm][0].skip_zero_click); | 410 EXPECT_TRUE(passwords[form_.signon_realm][0].skip_zero_click); |
412 } | 411 } |
413 | 412 |
414 TEST_F(CredentialManagerDispatcherTest, | 413 TEST_F(CredentialManagerDispatcherTest, |
| 414 CredentialManagerGetOverwriteZeroClick) { |
| 415 // Set the global zero click flag on, and populate the PasswordStore with a |
| 416 // form that's set to skip zero click and has a primary key that won't match |
| 417 // credentials initially created via `store()`. |
| 418 client_->set_zero_click_enabled(true); |
| 419 form_.skip_zero_click = true; |
| 420 form_.username_element = base::ASCIIToUTF16("username-element"); |
| 421 form_.password_element = base::ASCIIToUTF16("password-element"); |
| 422 form_.signon_realm = "this is a realm"; |
| 423 form_.origin = GURL("https://example.com/old_form.html"); |
| 424 store_->AddLogin(form_); |
| 425 RunAllPendingTasks(); |
| 426 |
| 427 std::vector<GURL> federations; |
| 428 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _, _)) |
| 429 .Times(testing::Exactly(1)); |
| 430 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr(_)).Times(testing::Exactly(0)); |
| 431 |
| 432 dispatcher()->OnRequestCredential(kRequestId, false, true, federations); |
| 433 |
| 434 RunAllPendingTasks(); |
| 435 |
| 436 const uint32_t kMsgID = CredentialManagerMsg_SendCredential::ID; |
| 437 const IPC::Message* message = |
| 438 process()->sink().GetFirstMessageMatching(kMsgID); |
| 439 EXPECT_TRUE(message); |
| 440 |
| 441 // Verify that the update toggled the skip_zero_click flag. |
| 442 TestPasswordStore::PasswordMap passwords = store_->stored_passwords(); |
| 443 EXPECT_FALSE(passwords[form_.signon_realm][0].skip_zero_click); |
| 444 } |
| 445 |
| 446 TEST_F(CredentialManagerDispatcherTest, |
415 CredentialManagerSignInWithSavingDisabledForCurrentPage) { | 447 CredentialManagerSignInWithSavingDisabledForCurrentPage) { |
416 CredentialInfo info(form_, CredentialType::CREDENTIAL_TYPE_PASSWORD); | 448 CredentialInfo info(form_, CredentialType::CREDENTIAL_TYPE_PASSWORD); |
417 EXPECT_CALL(*client_, IsSavingAndFillingEnabledForCurrentPage()) | 449 EXPECT_CALL(*client_, IsSavingAndFillingEnabledForCurrentPage()) |
418 .WillRepeatedly(testing::Return(false)); | 450 .WillRepeatedly(testing::Return(false)); |
419 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr( | 451 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr( |
420 _, CredentialSourceType::CREDENTIAL_SOURCE_API)) | 452 _, CredentialSourceType::CREDENTIAL_SOURCE_API)) |
421 .Times(testing::Exactly(0)); | 453 .Times(testing::Exactly(0)); |
422 | 454 |
423 dispatcher()->OnStore(kRequestId, info); | 455 dispatcher()->OnStore(kRequestId, info); |
424 | 456 |
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 TEST_F(CredentialManagerDispatcherTest, GetSynthesizedFormForOrigin) { | 1153 TEST_F(CredentialManagerDispatcherTest, GetSynthesizedFormForOrigin) { |
1122 autofill::PasswordForm synthesized = | 1154 autofill::PasswordForm synthesized = |
1123 dispatcher_->GetSynthesizedFormForOrigin(); | 1155 dispatcher_->GetSynthesizedFormForOrigin(); |
1124 EXPECT_EQ(kTestWebOrigin, synthesized.origin.spec()); | 1156 EXPECT_EQ(kTestWebOrigin, synthesized.origin.spec()); |
1125 EXPECT_EQ(kTestWebOrigin, synthesized.signon_realm); | 1157 EXPECT_EQ(kTestWebOrigin, synthesized.signon_realm); |
1126 EXPECT_EQ(autofill::PasswordForm::SCHEME_HTML, synthesized.scheme); | 1158 EXPECT_EQ(autofill::PasswordForm::SCHEME_HTML, synthesized.scheme); |
1127 EXPECT_TRUE(synthesized.ssl_valid); | 1159 EXPECT_TRUE(synthesized.ssl_valid); |
1128 } | 1160 } |
1129 | 1161 |
1130 } // namespace password_manager | 1162 } // namespace password_manager |
OLD | NEW |