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 "chrome/browser/password_manager/chrome_password_manager_client.h" | 5 #include "chrome/browser/password_manager/chrome_password_manager_client.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/prefs/pref_registry_simple.h" | |
9 #include "base/prefs/pref_service.h" | |
10 #include "base/prefs/testing_pref_service.h" | |
8 #include "base/strings/string16.h" | 11 #include "base/strings/string16.h" |
9 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/browser/sync/profile_sync_service_factory.h" | 13 #include "chrome/browser/sync/profile_sync_service_factory.h" |
11 #include "chrome/browser/sync/profile_sync_service_mock.h" | 14 #include "chrome/browser/sync/profile_sync_service_mock.h" |
12 #include "chrome/common/chrome_version_info.h" | 15 #include "chrome/common/chrome_version_info.h" |
13 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 16 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
17 #include "chrome/test/base/testing_pref_service_syncable.h" | |
14 #include "chrome/test/base/testing_profile.h" | 18 #include "chrome/test/base/testing_profile.h" |
15 #include "components/autofill/content/common/autofill_messages.h" | 19 #include "components/autofill/content/common/autofill_messages.h" |
16 #include "components/password_manager/content/browser/password_manager_internals _service_factory.h" | 20 #include "components/password_manager/content/browser/password_manager_internals _service_factory.h" |
17 #include "components/password_manager/content/common/credential_manager_messages .h" | 21 #include "components/password_manager/content/common/credential_manager_messages .h" |
18 #include "components/password_manager/core/browser/log_receiver.h" | 22 #include "components/password_manager/core/browser/log_receiver.h" |
19 #include "components/password_manager/core/browser/password_manager_internals_se rvice.h" | 23 #include "components/password_manager/core/browser/password_manager_internals_se rvice.h" |
20 #include "components/password_manager/core/common/credential_manager_types.h" | 24 #include "components/password_manager/core/common/credential_manager_types.h" |
25 #include "components/password_manager/core/common/password_manager_pref_names.h" | |
21 #include "components/password_manager/core/common/password_manager_switches.h" | 26 #include "components/password_manager/core/common/password_manager_switches.h" |
22 #include "content/public/browser/browser_context.h" | 27 #include "content/public/browser/browser_context.h" |
23 #include "content/public/browser/web_contents.h" | 28 #include "content/public/browser/web_contents.h" |
24 #include "content/public/test/mock_render_process_host.h" | 29 #include "content/public/test/mock_render_process_host.h" |
25 #include "testing/gmock/include/gmock/gmock.h" | 30 #include "testing/gmock/include/gmock/gmock.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
27 | 32 |
28 using content::BrowserContext; | 33 using content::BrowserContext; |
29 using content::WebContents; | 34 using content::WebContents; |
30 using testing::Return; | 35 using testing::Return; |
31 using testing::_; | 36 using testing::_; |
32 | 37 |
33 namespace { | 38 namespace { |
34 | 39 |
35 const char kTestText[] = "abcd1234"; | 40 const char kTestText[] = "abcd1234"; |
36 | 41 |
37 class MockLogReceiver : public password_manager::LogReceiver { | 42 class MockLogReceiver : public password_manager::LogReceiver { |
38 public: | 43 public: |
39 MOCK_METHOD1(LogSavePasswordProgress, void(const std::string&)); | 44 MOCK_METHOD1(LogSavePasswordProgress, void(const std::string&)); |
40 }; | 45 }; |
41 | 46 |
42 class MockChromePasswordManagerClient : public ChromePasswordManagerClient { | 47 class MockChromePasswordManagerClient : public ChromePasswordManagerClient { |
vabr (Chromium)
2015/04/07 13:53:15
Could you please add the following comment?
// TOD
melandory
2015/04/07 14:28:52
Yeah, I totally understand that. I tried not to us
| |
43 public: | 48 public: |
49 MOCK_CONST_METHOD0(IsPasswordManagementEnabledForCurrentPage, bool()); | |
50 MOCK_CONST_METHOD0(DidLastPageLoadEncounterSSLErrors, bool()); | |
44 MOCK_CONST_METHOD2(IsSyncAccountCredential, | 51 MOCK_CONST_METHOD2(IsSyncAccountCredential, |
45 bool(const std::string& username, | 52 bool(const std::string& username, |
46 const std::string& origin)); | 53 const std::string& origin)); |
47 | 54 |
48 explicit MockChromePasswordManagerClient(content::WebContents* web_contents) | 55 explicit MockChromePasswordManagerClient(content::WebContents* web_contents) |
49 : ChromePasswordManagerClient(web_contents, nullptr) {} | 56 : ChromePasswordManagerClient(web_contents, nullptr) { |
57 ON_CALL(*this, DidLastPageLoadEncounterSSLErrors()) | |
58 .WillByDefault(testing::Return(false)); | |
59 ON_CALL(*this, IsPasswordManagementEnabledForCurrentPage()) | |
60 .WillByDefault(testing::Return(true)); | |
61 } | |
50 ~MockChromePasswordManagerClient() override {} | 62 ~MockChromePasswordManagerClient() override {} |
51 | 63 |
52 private: | 64 private: |
53 DISALLOW_COPY_AND_ASSIGN(MockChromePasswordManagerClient); | 65 DISALLOW_COPY_AND_ASSIGN(MockChromePasswordManagerClient); |
54 }; | 66 }; |
55 | 67 |
56 } // namespace | 68 } // namespace |
57 | 69 |
58 class ChromePasswordManagerClientTest : public ChromeRenderViewHostTestHarness { | 70 class ChromePasswordManagerClientTest : public ChromeRenderViewHostTestHarness { |
59 public: | 71 public: |
60 ChromePasswordManagerClientTest(); | 72 ChromePasswordManagerClientTest(); |
61 | 73 |
62 virtual void SetUp() override; | 74 virtual void SetUp() override; |
63 | 75 |
76 TestingPrefServiceSyncable* prefs() { | |
77 return profile()->GetTestingPrefService(); | |
78 } | |
79 | |
64 protected: | 80 protected: |
65 ChromePasswordManagerClient* GetClient(); | 81 ChromePasswordManagerClient* GetClient(); |
66 | 82 |
67 // If the test IPC sink contains an AutofillMsg_SetLoggingState message, then | 83 // If the test IPC sink contains an AutofillMsg_SetLoggingState message, then |
68 // copies its argument into |activation_flag| and returns true. Otherwise | 84 // copies its argument into |activation_flag| and returns true. Otherwise |
69 // returns false. | 85 // returns false. |
70 bool WasLoggingActivationMessageSent(bool* activation_flag); | 86 bool WasLoggingActivationMessageSent(bool* activation_flag); |
71 | 87 |
72 password_manager::PasswordManagerInternalsService* service_; | 88 password_manager::PasswordManagerInternalsService* service_; |
73 | 89 |
74 testing::StrictMock<MockLogReceiver> receiver_; | 90 testing::StrictMock<MockLogReceiver> receiver_; |
91 TestingPrefServiceSimple prefs_; | |
75 }; | 92 }; |
76 | 93 |
77 ChromePasswordManagerClientTest::ChromePasswordManagerClientTest() | 94 ChromePasswordManagerClientTest::ChromePasswordManagerClientTest() |
78 : service_(nullptr) { | 95 : service_(nullptr) { |
79 } | 96 } |
80 | 97 |
81 void ChromePasswordManagerClientTest::SetUp() { | 98 void ChromePasswordManagerClientTest::SetUp() { |
82 ChromeRenderViewHostTestHarness::SetUp(); | 99 ChromeRenderViewHostTestHarness::SetUp(); |
100 prefs_.registry()->RegisterBooleanPref( | |
101 password_manager::prefs::kPasswordManagerSavingEnabled, true); | |
83 ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient( | 102 ChromePasswordManagerClient::CreateForWebContentsWithAutofillClient( |
84 web_contents(), nullptr); | 103 web_contents(), nullptr); |
85 service_ = password_manager::PasswordManagerInternalsServiceFactory:: | 104 service_ = password_manager::PasswordManagerInternalsServiceFactory:: |
86 GetForBrowserContext(profile()); | 105 GetForBrowserContext(profile()); |
87 ASSERT_TRUE(service_); | 106 ASSERT_TRUE(service_); |
88 } | 107 } |
89 | 108 |
90 ChromePasswordManagerClient* ChromePasswordManagerClientTest::GetClient() { | 109 ChromePasswordManagerClient* ChromePasswordManagerClientTest::GetClient() { |
91 return ChromePasswordManagerClient::FromWebContents(web_contents()); | 110 return ChromePasswordManagerClient::FromWebContents(web_contents()); |
92 } | 111 } |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
265 command_line->AppendSwitch( | 284 command_line->AppendSwitch( |
266 password_manager::switches::kDisallowAutofillSyncCredential); | 285 password_manager::switches::kDisallowAutofillSyncCredential); |
267 client.reset(new MockChromePasswordManagerClient(web_contents())); | 286 client.reset(new MockChromePasswordManagerClient(web_contents())); |
268 EXPECT_CALL(*client, IsSyncAccountCredential(_, _)) | 287 EXPECT_CALL(*client, IsSyncAccountCredential(_, _)) |
269 .WillRepeatedly(Return(true)); | 288 .WillRepeatedly(Return(true)); |
270 NavigateAndCommit(GURL("https://accounts.google.com/Login")); | 289 NavigateAndCommit(GURL("https://accounts.google.com/Login")); |
271 EXPECT_TRUE(client->ShouldFilterAutofillResult(form)); | 290 EXPECT_TRUE(client->ShouldFilterAutofillResult(form)); |
272 } | 291 } |
273 | 292 |
274 TEST_F(ChromePasswordManagerClientTest, | 293 TEST_F(ChromePasswordManagerClientTest, |
275 IsPasswordManagerEnabledForCurrentPage) { | 294 IsPasswordManagementEnabledForCurrentPage) { |
276 ChromePasswordManagerClient* client = GetClient(); | 295 ChromePasswordManagerClient* client = GetClient(); |
277 NavigateAndCommit( | 296 NavigateAndCommit( |
278 GURL("https://accounts.google.com/ServiceLogin?continue=" | 297 GURL("https://accounts.google.com/ServiceLogin?continue=" |
279 "https://passwords.google.com/settings&rart=123")); | 298 "https://passwords.google.com/settings&rart=123")); |
280 EXPECT_FALSE(client->IsPasswordManagerEnabledForCurrentPage()); | 299 EXPECT_FALSE(client->IsPasswordManagementEnabledForCurrentPage()); |
281 | 300 |
282 // Password site is inaccesible via HTTP, but because of HSTS the following | 301 // Password site is inaccesible via HTTP, but because of HSTS the following |
283 // link should still continue to https://passwords.google.com. | 302 // link should still continue to https://passwords.google.com. |
284 NavigateAndCommit( | 303 NavigateAndCommit( |
285 GURL("https://accounts.google.com/ServiceLogin?continue=" | 304 GURL("https://accounts.google.com/ServiceLogin?continue=" |
286 "http://passwords.google.com/settings&rart=123")); | 305 "http://passwords.google.com/settings&rart=123")); |
287 EXPECT_FALSE(client->IsPasswordManagerEnabledForCurrentPage()); | 306 EXPECT_FALSE(client->IsPasswordManagementEnabledForCurrentPage()); |
307 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
288 | 308 |
289 // Specifying default port still passes. | 309 // Specifying default port still passes. |
290 NavigateAndCommit( | 310 NavigateAndCommit( |
291 GURL("https://accounts.google.com/ServiceLogin?continue=" | 311 GURL("https://accounts.google.com/ServiceLogin?continue=" |
292 "https://passwords.google.com:443/settings&rart=123")); | 312 "https://passwords.google.com:443/settings&rart=123")); |
293 EXPECT_FALSE(client->IsPasswordManagerEnabledForCurrentPage()); | 313 EXPECT_FALSE(client->IsPasswordManagementEnabledForCurrentPage()); |
314 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
294 | 315 |
295 // Encoded URL is considered the same. | 316 // Encoded URL is considered the same. |
296 NavigateAndCommit( | 317 NavigateAndCommit( |
297 GURL("https://accounts.google.com/ServiceLogin?continue=" | 318 GURL("https://accounts.google.com/ServiceLogin?continue=" |
298 "https://passwords.%67oogle.com/settings&rart=123")); | 319 "https://passwords.%67oogle.com/settings&rart=123")); |
299 EXPECT_FALSE(client->IsPasswordManagerEnabledForCurrentPage()); | 320 EXPECT_FALSE(client->IsPasswordManagementEnabledForCurrentPage()); |
321 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
300 | 322 |
301 // Make sure testing sites are disabled as well. | 323 // Make sure testing sites are disabled as well. |
302 NavigateAndCommit( | 324 NavigateAndCommit( |
303 GURL("https://accounts.google.com/Login?continue=" | 325 GURL("https://accounts.google.com/Login?continue=" |
304 "https://passwords-ac-testing.corp.google.com/settings&rart=456")); | 326 "https://passwords-ac-testing.corp.google.com/settings&rart=456")); |
305 EXPECT_FALSE(client->IsPasswordManagerEnabledForCurrentPage()); | 327 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); |
328 EXPECT_FALSE(client->IsPasswordManagementEnabledForCurrentPage()); | |
306 | 329 |
307 // Fully qualified domain name is considered a different hostname by GURL. | 330 // Fully qualified domain name is considered a different hostname by GURL. |
308 // Ideally this would not be the case, but this quirk can be avoided by | 331 // Ideally this would not be the case, but this quirk can be avoided by |
309 // verification on the server. This test is simply documentation of this | 332 // verification on the server. This test is simply documentation of this |
310 // behavior. | 333 // behavior. |
311 NavigateAndCommit( | 334 NavigateAndCommit( |
312 GURL("https://accounts.google.com/ServiceLogin?continue=" | 335 GURL("https://accounts.google.com/ServiceLogin?continue=" |
313 "https://passwords.google.com./settings&rart=123")); | 336 "https://passwords.google.com./settings&rart=123")); |
314 EXPECT_TRUE(client->IsPasswordManagerEnabledForCurrentPage()); | 337 EXPECT_TRUE(client->IsPasswordManagementEnabledForCurrentPage()); |
315 | 338 |
316 // Not a transactional reauth page. | 339 // Not a transactional reauth page. |
317 NavigateAndCommit( | 340 NavigateAndCommit( |
318 GURL("https://accounts.google.com/ServiceLogin?continue=" | 341 GURL("https://accounts.google.com/ServiceLogin?continue=" |
319 "https://passwords.google.com/settings")); | 342 "https://passwords.google.com/settings")); |
320 EXPECT_TRUE(client->IsPasswordManagerEnabledForCurrentPage()); | 343 EXPECT_TRUE(client->IsPasswordManagementEnabledForCurrentPage()); |
321 | 344 |
322 // Should be enabled for other transactional reauth pages. | 345 // Should be enabled for other transactional reauth pages. |
323 NavigateAndCommit( | 346 NavigateAndCommit( |
324 GURL("https://accounts.google.com/ServiceLogin?continue=" | 347 GURL("https://accounts.google.com/ServiceLogin?continue=" |
325 "https://mail.google.com&rart=234")); | 348 "https://mail.google.com&rart=234")); |
326 EXPECT_TRUE(client->IsPasswordManagerEnabledForCurrentPage()); | 349 EXPECT_TRUE(client->IsPasswordManagementEnabledForCurrentPage()); |
327 | 350 |
328 // Reauth pages are only on accounts.google.com | 351 // Reauth pages are only on accounts.google.com |
329 NavigateAndCommit( | 352 NavigateAndCommit( |
330 GURL("https://other.site.com/ServiceLogin?continue=" | 353 GURL("https://other.site.com/ServiceLogin?continue=" |
331 "https://passwords.google.com&rart=234")); | 354 "https://passwords.google.com&rart=234")); |
332 EXPECT_TRUE(client->IsPasswordManagerEnabledForCurrentPage()); | 355 EXPECT_TRUE(client->IsPasswordManagementEnabledForCurrentPage()); |
333 } | 356 } |
334 | 357 |
335 TEST_F(ChromePasswordManagerClientTest, IsPasswordSyncEnabled) { | 358 TEST_F(ChromePasswordManagerClientTest, IsPasswordSyncEnabled) { |
336 ChromePasswordManagerClient* client = GetClient(); | 359 ChromePasswordManagerClient* client = GetClient(); |
337 | 360 |
338 ProfileSyncServiceMock* mock_sync_service = | 361 ProfileSyncServiceMock* mock_sync_service = |
339 static_cast<ProfileSyncServiceMock*>( | 362 static_cast<ProfileSyncServiceMock*>( |
340 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 363 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
341 profile(), ProfileSyncServiceMock::BuildMockProfileSyncService)); | 364 profile(), ProfileSyncServiceMock::BuildMockProfileSyncService)); |
342 | 365 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
378 | 401 |
379 // Again, without a custom passphrase. | 402 // Again, without a custom passphrase. |
380 EXPECT_CALL(*mock_sync_service, IsUsingSecondaryPassphrase()) | 403 EXPECT_CALL(*mock_sync_service, IsUsingSecondaryPassphrase()) |
381 .WillRepeatedly(Return(false)); | 404 .WillRepeatedly(Return(false)); |
382 | 405 |
383 EXPECT_FALSE( | 406 EXPECT_FALSE( |
384 client->IsPasswordSyncEnabled(password_manager::ONLY_CUSTOM_PASSPHRASE)); | 407 client->IsPasswordSyncEnabled(password_manager::ONLY_CUSTOM_PASSPHRASE)); |
385 EXPECT_FALSE(client->IsPasswordSyncEnabled( | 408 EXPECT_FALSE(client->IsPasswordSyncEnabled( |
386 password_manager::WITHOUT_CUSTOM_PASSPHRASE)); | 409 password_manager::WITHOUT_CUSTOM_PASSPHRASE)); |
387 } | 410 } |
411 | |
412 TEST_F(ChromePasswordManagerClientTest, IsOffTheRecordTest) { | |
413 ChromePasswordManagerClient* client = GetClient(); | |
414 | |
415 profile()->ForceIncognito(true); | |
416 EXPECT_TRUE(client->IsOffTheRecord()); | |
417 | |
418 profile()->ForceIncognito(false); | |
419 EXPECT_FALSE(client->IsOffTheRecord()); | |
420 } | |
421 | |
422 TEST_F(ChromePasswordManagerClientTest, | |
423 SavingDependsOnManagerEnabledPreference) { | |
424 // Test that saving passwords depends on the password manager enabled | |
425 // preference. | |
426 ChromePasswordManagerClient* client = GetClient(); | |
427 prefs()->SetUserPref(password_manager::prefs::kPasswordManagerSavingEnabled, | |
428 new base::FundamentalValue(true)); | |
429 EXPECT_TRUE(client->IsSavingEnabledForCurrentPage()); | |
430 prefs()->SetUserPref(password_manager::prefs::kPasswordManagerSavingEnabled, | |
431 new base::FundamentalValue(false)); | |
432 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
433 } | |
434 | |
435 TEST_F(ChromePasswordManagerClientTest, IsSavingEnabledForCurrentPageTest) { | |
436 scoped_ptr<MockChromePasswordManagerClient> client( | |
437 new MockChromePasswordManagerClient(web_contents())); | |
438 // Functionality disabled if there is SSL errors. | |
439 EXPECT_CALL(*client, DidLastPageLoadEncounterSSLErrors()) | |
440 .WillRepeatedly(Return(true)); | |
441 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
442 // Functionality disabled if there are SSL errors and the manager itself is | |
vabr (Chromium)
2015/04/07 13:53:15
nit: Please separate individual blocks of the test
melandory
2015/04/07 14:28:52
Done.
| |
443 // disabled. | |
444 prefs()->SetUserPref(password_manager::prefs::kPasswordManagerSavingEnabled, | |
445 new base::FundamentalValue(false)); | |
446 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
447 // Functionality disabled if there are no SSL errorsm, but the manager itself | |
448 // is | |
vabr (Chromium)
2015/04/07 13:53:15
nit: Please join the lines 448 and 449.
melandory
2015/04/07 14:28:52
Done.
| |
449 // disabled. | |
450 EXPECT_CALL(*client, DidLastPageLoadEncounterSSLErrors()) | |
451 .WillRepeatedly(Return(false)); | |
452 prefs()->SetUserPref(password_manager::prefs::kPasswordManagerSavingEnabled, | |
453 new base::FundamentalValue(false)); | |
454 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
455 // Functionality enabled if there are no SSL errors and the manager is | |
456 // enabled. | |
457 EXPECT_CALL(*client, DidLastPageLoadEncounterSSLErrors()) | |
458 .WillRepeatedly(Return(false)); | |
459 prefs()->SetUserPref(password_manager::prefs::kPasswordManagerSavingEnabled, | |
460 new base::FundamentalValue(true)); | |
461 EXPECT_TRUE(client->IsSavingEnabledForCurrentPage()); | |
462 | |
463 // Functionality disabled in Incognito mode. | |
464 profile()->ForceIncognito(true); | |
465 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
466 | |
467 // Functionality disabled in Incognito mode also when manager itself is | |
468 // enabled. | |
469 prefs()->SetUserPref(password_manager::prefs::kPasswordManagerSavingEnabled, | |
470 new base::FundamentalValue(true)); | |
471 EXPECT_FALSE(client->IsSavingEnabledForCurrentPage()); | |
472 profile()->ForceIncognito(false); | |
473 } | |
OLD | NEW |