| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // The passwords in the tests below are all empty because PasswordStoreDefault | 5 // The passwords in the tests below are all empty because PasswordStoreDefault |
| 6 // does not store the actual passwords on OS X (they are stored in the Keychain | 6 // does not store the actual passwords on OS X (they are stored in the Keychain |
| 7 // instead). We could special-case it, but it is easier to just have empty | 7 // instead). We could special-case it, but it is easier to just have empty |
| 8 // passwords. This will not be needed anymore if crbug.com/466638 is fixed. | 8 // passwords. This will not be needed anymore if crbug.com/466638 is fixed. |
| 9 | 9 |
| 10 #include <stddef.h> | 10 #include <stddef.h> |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 }; | 96 }; |
| 97 | 97 |
| 98 } // namespace | 98 } // namespace |
| 99 | 99 |
| 100 class PasswordStoreTest : public testing::Test { | 100 class PasswordStoreTest : public testing::Test { |
| 101 protected: | 101 protected: |
| 102 PasswordStoreTest() | 102 PasswordStoreTest() |
| 103 : scoped_task_environment_( | 103 : scoped_task_environment_( |
| 104 base::test::ScopedTaskEnvironment::MainThreadType::UI) {} | 104 base::test::ScopedTaskEnvironment::MainThreadType::UI) {} |
| 105 | 105 |
| 106 void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); } | 106 void SetUp() override { |
| 107 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 108 #if defined(OS_MACOSX) |
| 109 // Mock Keychain. There is a call to Keychain on initializling |
| 110 // PasswordReuseDetector, so it should be mocked. |
| 111 OSCryptMocker::SetUpWithSingleton(); |
| 112 #endif |
| 113 } |
| 107 | 114 |
| 108 void TearDown() override { ASSERT_TRUE(temp_dir_.Delete()); } | 115 void TearDown() override { |
| 116 ASSERT_TRUE(temp_dir_.Delete()); |
| 117 #if defined(OS_MACOSX) |
| 118 OSCryptMocker::TearDown(); |
| 119 #endif |
| 120 } |
| 109 | 121 |
| 110 base::FilePath test_login_db_file_path() const { | 122 base::FilePath test_login_db_file_path() const { |
| 111 return temp_dir_.GetPath().Append(FILE_PATH_LITERAL("login_test")); | 123 return temp_dir_.GetPath().Append(FILE_PATH_LITERAL("login_test")); |
| 112 } | 124 } |
| 113 | 125 |
| 114 base::test::ScopedTaskEnvironment scoped_task_environment_; | 126 base::test::ScopedTaskEnvironment scoped_task_environment_; |
| 115 base::ScopedTempDir temp_dir_; | 127 base::ScopedTempDir temp_dir_; |
| 116 }; | 128 }; |
| 117 | 129 |
| 118 TEST_F(PasswordStoreTest, IgnoreOldWwwGoogleLogins) { | 130 TEST_F(PasswordStoreTest, IgnoreOldWwwGoogleLogins) { |
| (...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 916 | 928 |
| 917 // TODO(crbug.com/706392): Fix password reuse detection for Android. | 929 // TODO(crbug.com/706392): Fix password reuse detection for Android. |
| 918 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 930 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
| 919 TEST_F(PasswordStoreTest, CheckPasswordReuse) { | 931 TEST_F(PasswordStoreTest, CheckPasswordReuse) { |
| 920 static constexpr PasswordFormData kTestCredentials[] = { | 932 static constexpr PasswordFormData kTestCredentials[] = { |
| 921 {PasswordForm::SCHEME_HTML, "https://www.google.com", | 933 {PasswordForm::SCHEME_HTML, "https://www.google.com", |
| 922 "https://www.google.com", "", L"", L"", L"", L"", L"password", true, 1}, | 934 "https://www.google.com", "", L"", L"", L"", L"", L"password", true, 1}, |
| 923 {PasswordForm::SCHEME_HTML, "https://facebook.com", | 935 {PasswordForm::SCHEME_HTML, "https://facebook.com", |
| 924 "https://facebook.com", "", L"", L"", L"", L"", L"topsecret", true, 1}}; | 936 "https://facebook.com", "", L"", L"", L"", L"", L"topsecret", true, 1}}; |
| 925 | 937 |
| 926 #if defined(OS_MACOSX) | |
| 927 // Mock Keychain. There is a call to Keychain on initializling | |
| 928 // PasswordReuseDetector, so it should be mocked. | |
| 929 OSCryptMocker::SetUpWithSingleton(); | |
| 930 #endif | |
| 931 scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault( | 938 scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault( |
| 932 base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(), | 939 base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(), |
| 933 base::MakeUnique<LoginDatabase>(test_login_db_file_path()))); | 940 base::MakeUnique<LoginDatabase>(test_login_db_file_path()))); |
| 934 store->Init(syncer::SyncableService::StartSyncFlare(), nullptr); | 941 store->Init(syncer::SyncableService::StartSyncFlare(), nullptr); |
| 935 | 942 |
| 936 for (const auto& test_credentials : kTestCredentials) { | 943 for (const auto& test_credentials : kTestCredentials) { |
| 937 auto credentials = CreatePasswordFormFromDataForTesting(test_credentials); | 944 auto credentials = CreatePasswordFormFromDataForTesting(test_credentials); |
| 938 store->AddLogin(*credentials); | 945 store->AddLogin(*credentials); |
| 939 base::RunLoop().RunUntilIdle(); | 946 base::RunLoop().RunUntilIdle(); |
| 940 } | 947 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 960 EXPECT_CALL(mock_consumer, OnReuseFound(_, _, _, _)).Times(0); | 967 EXPECT_CALL(mock_consumer, OnReuseFound(_, _, _, _)).Times(0); |
| 961 } | 968 } |
| 962 | 969 |
| 963 store->CheckReuse(base::WideToUTF16(test_data.input), test_data.domain, | 970 store->CheckReuse(base::WideToUTF16(test_data.input), test_data.domain, |
| 964 &mock_consumer); | 971 &mock_consumer); |
| 965 base::RunLoop().RunUntilIdle(); | 972 base::RunLoop().RunUntilIdle(); |
| 966 } | 973 } |
| 967 | 974 |
| 968 store->ShutdownOnUIThread(); | 975 store->ShutdownOnUIThread(); |
| 969 base::RunLoop().RunUntilIdle(); | 976 base::RunLoop().RunUntilIdle(); |
| 970 #if defined(OS_MACOSX) | 977 } |
| 971 OSCryptMocker::TearDown(); | 978 |
| 972 #endif | 979 TEST_F(PasswordStoreTest, SavingClearingSyncPassword) { |
| 980 scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault( |
| 981 base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(), |
| 982 base::MakeUnique<LoginDatabase>(test_login_db_file_path()))); |
| 983 store->Init(syncer::SyncableService::StartSyncFlare(), nullptr); |
| 984 |
| 985 const base::string16 sync_password = base::ASCIIToUTF16("password"); |
| 986 const base::string16 input = base::ASCIIToUTF16("123password"); |
| 987 store->SaveSyncPasswordHash(sync_password); |
| 988 base::RunLoop().RunUntilIdle(); |
| 989 |
| 990 // Check that sync password reuse is found. |
| 991 MockPasswordReuseDetectorConsumer mock_consumer; |
| 992 EXPECT_CALL(mock_consumer, |
| 993 OnReuseFound(sync_password, "accounts.google.com", 1, 0)); |
| 994 store->CheckReuse(input, "https://facebook.com", &mock_consumer); |
| 995 base::RunLoop().RunUntilIdle(); |
| 996 testing::Mock::VerifyAndClearExpectations(&mock_consumer); |
| 997 |
| 998 // Check that no sync password reuse is found after clearing the saved sync |
| 999 // password hash. |
| 1000 store->ClearSyncPasswordHash(); |
| 1001 EXPECT_CALL(mock_consumer, OnReuseFound(_, _, _, _)).Times(0); |
| 1002 store->CheckReuse(input, "https://facebook.com", &mock_consumer); |
| 1003 base::RunLoop().RunUntilIdle(); |
| 1004 |
| 1005 store->ShutdownOnUIThread(); |
| 1006 base::RunLoop().RunUntilIdle(); |
| 973 } | 1007 } |
| 974 #endif | 1008 #endif |
| 975 | 1009 |
| 976 } // namespace password_manager | 1010 } // namespace password_manager |
| OLD | NEW |