Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Side by Side Diff: components/password_manager/content/browser/credential_manager_dispatcher_unittest.cc

Issue 1832933002: Update the |skip_zero_click| flag of a credential when selected in the account chooser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698