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

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

Issue 1031153002: [Credential Management] Smart lock save Credentials bubble should not always pop up. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/prefs/pref_registry_simple.h" 9 #include "base/prefs/pref_registry_simple.h"
10 #include "base/prefs/testing_pref_service.h" 10 #include "base/prefs/testing_pref_service.h"
(...skipping 19 matching lines...) Expand all
30 using testing::_; 30 using testing::_;
31 31
32 namespace { 32 namespace {
33 33
34 // Chosen by fair dice roll. Guaranteed to be random. 34 // Chosen by fair dice roll. Guaranteed to be random.
35 const int kRequestId = 4; 35 const int kRequestId = 4;
36 36
37 class MockPasswordManagerClient 37 class MockPasswordManagerClient
38 : public password_manager::StubPasswordManagerClient { 38 : public password_manager::StubPasswordManagerClient {
39 public: 39 public:
40 MOCK_CONST_METHOD0(IsPasswordManagerEnabledForCurrentPage, bool());
40 MOCK_CONST_METHOD0(IsOffTheRecord, bool()); 41 MOCK_CONST_METHOD0(IsOffTheRecord, bool());
42 MOCK_CONST_METHOD0(DidLastPageLoadEncounterSSLErrors, bool());
41 MOCK_METHOD1(NotifyUserAutoSigninPtr, 43 MOCK_METHOD1(NotifyUserAutoSigninPtr,
42 bool(const std::vector<autofill::PasswordForm*>& local_forms)); 44 bool(const std::vector<autofill::PasswordForm*>& local_forms));
43 MOCK_METHOD2(PromptUserToSavePasswordPtr, 45 MOCK_METHOD2(PromptUserToSavePasswordPtr,
44 void(password_manager::PasswordFormManager*, 46 void(password_manager::PasswordFormManager*,
45 password_manager::CredentialSourceType type)); 47 password_manager::CredentialSourceType type));
46 MOCK_METHOD4(PromptUserToChooseCredentialsPtr, 48 MOCK_METHOD4(PromptUserToChooseCredentialsPtr,
47 bool(const std::vector<autofill::PasswordForm*>& local_forms, 49 bool(const std::vector<autofill::PasswordForm*>& local_forms,
48 const std::vector<autofill::PasswordForm*>& federated_forms, 50 const std::vector<autofill::PasswordForm*>& federated_forms,
49 const GURL& origin, 51 const GURL& origin,
50 base::Callback<void( 52 base::Callback<void(
51 const password_manager::CredentialInfo&)> callback)); 53 const password_manager::CredentialInfo&)> callback));
52 54
53 MockPasswordManagerClient(password_manager::PasswordStore* store) 55 MockPasswordManagerClient(password_manager::PasswordStore* store)
54 : store_(store) { 56 : store_(store) {
55 prefs_.registry()->RegisterBooleanPref( 57 prefs_.registry()->RegisterBooleanPref(
56 password_manager::prefs::kPasswordManagerAutoSignin, true); 58 password_manager::prefs::kPasswordManagerAutoSignin, true);
59 prefs_.registry()->RegisterBooleanPref(
60 password_manager::prefs::kPasswordManagerSavingEnabled, true);
57 } 61 }
58 ~MockPasswordManagerClient() override {} 62 ~MockPasswordManagerClient() override {}
59 63
60 bool PromptUserToSavePassword( 64 bool PromptUserToSavePassword(
61 scoped_ptr<password_manager::PasswordFormManager> manager, 65 scoped_ptr<password_manager::PasswordFormManager> manager,
62 password_manager::CredentialSourceType type) override { 66 password_manager::CredentialSourceType type) override {
63 manager_.swap(manager); 67 manager_.swap(manager);
64 PromptUserToSavePasswordPtr(manager_.get(), type); 68 PromptUserToSavePasswordPtr(manager_.get(), type);
65 return true; 69 return true;
66 } 70 }
(...skipping 25 matching lines...) Expand all
92 void NotifyUserAutoSignin( 96 void NotifyUserAutoSignin(
93 ScopedVector<autofill::PasswordForm> local_forms) override { 97 ScopedVector<autofill::PasswordForm> local_forms) override {
94 EXPECT_FALSE(local_forms.empty()); 98 EXPECT_FALSE(local_forms.empty());
95 NotifyUserAutoSigninPtr(local_forms.get()); 99 NotifyUserAutoSigninPtr(local_forms.get());
96 } 100 }
97 101
98 password_manager::PasswordFormManager* pending_manager() const { 102 password_manager::PasswordFormManager* pending_manager() const {
99 return manager_.get(); 103 return manager_.get();
100 } 104 }
101 105
106 void set_password_manager_saving_enabled(bool is_enabled) {
107 prefs_.SetBoolean(password_manager::prefs::kPasswordManagerSavingEnabled,
108 is_enabled);
109 }
110
102 void set_zero_click_enabled(bool zero_click_enabled) { 111 void set_zero_click_enabled(bool zero_click_enabled) {
103 prefs_.SetBoolean(password_manager::prefs::kPasswordManagerAutoSignin, 112 prefs_.SetBoolean(password_manager::prefs::kPasswordManagerAutoSignin,
104 zero_click_enabled); 113 zero_click_enabled);
105 } 114 }
106 115
107 private: 116 private:
108 TestingPrefServiceSimple prefs_; 117 TestingPrefServiceSimple prefs_;
109 password_manager::PasswordStore* store_; 118 password_manager::PasswordStore* store_;
110 scoped_ptr<password_manager::PasswordFormManager> manager_; 119 scoped_ptr<password_manager::PasswordFormManager> manager_;
111 120
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 public: 164 public:
156 CredentialManagerDispatcherTest() {} 165 CredentialManagerDispatcherTest() {}
157 166
158 void SetUp() override { 167 void SetUp() override {
159 content::RenderViewHostTestHarness::SetUp(); 168 content::RenderViewHostTestHarness::SetUp();
160 store_ = new TestPasswordStore; 169 store_ = new TestPasswordStore;
161 client_.reset(new MockPasswordManagerClient(store_.get())); 170 client_.reset(new MockPasswordManagerClient(store_.get()));
162 dispatcher_.reset(new TestCredentialManagerDispatcher( 171 dispatcher_.reset(new TestCredentialManagerDispatcher(
163 web_contents(), client_.get(), &stub_driver_)); 172 web_contents(), client_.get(), &stub_driver_));
164 ON_CALL(*client_, IsOffTheRecord()).WillByDefault(testing::Return(false)); 173 ON_CALL(*client_, IsOffTheRecord()).WillByDefault(testing::Return(false));
174 ON_CALL(*client_, DidLastPageLoadEncounterSSLErrors())
175 .WillByDefault(testing::Return(false));
176 ON_CALL(*client_, IsPasswordManagerEnabledForCurrentPage())
177 .WillByDefault(testing::Return(true));
165 178
166 NavigateAndCommit(GURL("https://example.com/test.html")); 179 NavigateAndCommit(GURL("https://example.com/test.html"));
167 180
168 form_.username_value = base::ASCIIToUTF16("Username"); 181 form_.username_value = base::ASCIIToUTF16("Username");
169 form_.display_name = base::ASCIIToUTF16("Display Name"); 182 form_.display_name = base::ASCIIToUTF16("Display Name");
170 form_.password_value = base::ASCIIToUTF16("Password"); 183 form_.password_value = base::ASCIIToUTF16("Password");
171 form_.origin = web_contents()->GetLastCommittedURL().GetOrigin(); 184 form_.origin = web_contents()->GetLastCommittedURL().GetOrigin();
172 form_.signon_realm = form_.origin.spec(); 185 form_.signon_realm = form_.origin.spec();
173 form_.scheme = autofill::PasswordForm::SCHEME_HTML; 186 form_.scheme = autofill::PasswordForm::SCHEME_HTML;
174 form_.skip_zero_click = false; 187 form_.skip_zero_click = false;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 const IPC::Message* message = 283 const IPC::Message* message =
271 process()->sink().GetFirstMessageMatching(kMsgID); 284 process()->sink().GetFirstMessageMatching(kMsgID);
272 EXPECT_TRUE(message); 285 EXPECT_TRUE(message);
273 process()->sink().ClearMessages(); 286 process()->sink().ClearMessages();
274 287
275 RunAllPendingTasks(); 288 RunAllPendingTasks();
276 289
277 EXPECT_FALSE(client_->pending_manager()); 290 EXPECT_FALSE(client_->pending_manager());
278 } 291 }
279 292
293 TEST_F(CredentialManagerDispatcherTest, CredentialManagerSignInWithSSLErrors) {
294 CredentialInfo info(form_, CredentialType::CREDENTIAL_TYPE_LOCAL);
295 EXPECT_CALL(*client_, DidLastPageLoadEncounterSSLErrors())
296 .WillRepeatedly(testing::Return(true));
297 EXPECT_CALL(
298 *client_,
299 PromptUserToSavePasswordPtr(
300 _, password_manager::CredentialSourceType::CREDENTIAL_SOURCE_API))
301 .Times(testing::Exactly(0));
302
303 dispatcher()->OnNotifySignedIn(kRequestId, info);
304
305 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeSignedIn::ID;
306 const IPC::Message* message =
307 process()->sink().GetFirstMessageMatching(kMsgID);
308 EXPECT_TRUE(message);
309 process()->sink().ClearMessages();
310
311 RunAllPendingTasks();
312
313 EXPECT_FALSE(client_->pending_manager());
314 }
315
316 TEST_F(CredentialManagerDispatcherTest,
317 CredentialManagerSignInWithDisabledPasswordManager) {
318 CredentialInfo info(form_, CredentialType::CREDENTIAL_TYPE_LOCAL);
319 client_->set_password_manager_saving_enabled(false);
320 EXPECT_CALL(
321 *client_,
322 PromptUserToSavePasswordPtr(
323 _, password_manager::CredentialSourceType::CREDENTIAL_SOURCE_API))
324 .Times(testing::Exactly(0));
325
326 dispatcher()->OnNotifySignedIn(kRequestId, info);
327
328 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeSignedIn::ID;
329 const IPC::Message* message =
330 process()->sink().GetFirstMessageMatching(kMsgID);
331 EXPECT_TRUE(message);
332 process()->sink().ClearMessages();
333
334 RunAllPendingTasks();
335
336 EXPECT_FALSE(client_->pending_manager());
337 }
338
339 TEST_F(CredentialManagerDispatcherTest,
340 CredentialManagerSignInWthPasswordManagerDisabledForCurrentPage) {
341 CredentialInfo info(form_, CredentialType::CREDENTIAL_TYPE_LOCAL);
342 EXPECT_CALL(*client_, IsPasswordManagerEnabledForCurrentPage())
343 .WillRepeatedly(testing::Return(false));
344 EXPECT_CALL(
345 *client_,
346 PromptUserToSavePasswordPtr(
347 _, password_manager::CredentialSourceType::CREDENTIAL_SOURCE_API))
348 .Times(testing::Exactly(0));
349
350 dispatcher()->OnNotifySignedIn(kRequestId, info);
351
352 const uint32 kMsgID = CredentialManagerMsg_AcknowledgeSignedIn::ID;
353 const IPC::Message* message =
354 process()->sink().GetFirstMessageMatching(kMsgID);
355 EXPECT_TRUE(message);
356 process()->sink().ClearMessages();
357
358 RunAllPendingTasks();
359
360 EXPECT_FALSE(client_->pending_manager());
361 }
362
280 TEST_F(CredentialManagerDispatcherTest, CredentialManagerOnNotifySignedOut) { 363 TEST_F(CredentialManagerDispatcherTest, CredentialManagerOnNotifySignedOut) {
281 store_->AddLogin(form_); 364 store_->AddLogin(form_);
282 store_->AddLogin(cross_origin_form_); 365 store_->AddLogin(cross_origin_form_);
283 RunAllPendingTasks(); 366 RunAllPendingTasks();
284 367
285 TestPasswordStore::PasswordMap passwords = store_->stored_passwords(); 368 TestPasswordStore::PasswordMap passwords = store_->stored_passwords();
286 EXPECT_EQ(2U, passwords.size()); 369 EXPECT_EQ(2U, passwords.size());
287 EXPECT_EQ(1U, passwords[form_.signon_realm].size()); 370 EXPECT_EQ(1U, passwords[form_.signon_realm].size());
288 EXPECT_EQ(1U, passwords[cross_origin_form_.signon_realm].size()); 371 EXPECT_EQ(1U, passwords[cross_origin_form_.signon_realm].size());
289 EXPECT_FALSE(passwords[form_.signon_realm][0].skip_zero_click); 372 EXPECT_FALSE(passwords[form_.signon_realm][0].skip_zero_click);
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 const uint32 kMsgID = CredentialManagerMsg_SendCredential::ID; 690 const uint32 kMsgID = CredentialManagerMsg_SendCredential::ID;
608 const IPC::Message* message = 691 const IPC::Message* message =
609 process()->sink().GetFirstMessageMatching(kMsgID); 692 process()->sink().GetFirstMessageMatching(kMsgID);
610 ASSERT_TRUE(message); 693 ASSERT_TRUE(message);
611 CredentialManagerMsg_SendCredential::Param param; 694 CredentialManagerMsg_SendCredential::Param param;
612 CredentialManagerMsg_SendCredential::Read(message, &param); 695 CredentialManagerMsg_SendCredential::Read(message, &param);
613 EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, get<1>(param).type); 696 EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, get<1>(param).type);
614 } 697 }
615 698
616 } // namespace password_manager 699 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698