Index: components/password_manager/core/browser/password_store_unittest.cc |
diff --git a/components/password_manager/core/browser/password_store_unittest.cc b/components/password_manager/core/browser/password_store_unittest.cc |
index c811bb41de40710e4ef53827787da565a4fc2148..cbddc8441104e99b27a30541aa2d810bb45ff50c 100644 |
--- a/components/password_manager/core/browser/password_store_unittest.cc |
+++ b/components/password_manager/core/browser/password_store_unittest.cc |
@@ -840,4 +840,55 @@ TEST_F(PasswordStoreTest, GetLoginsWithAffiliatedRealms) { |
} |
} |
+TEST_F(PasswordStoreTest, CheckPasswordReuse) { |
+ static const PasswordFormData kTestCredentials[] = { |
vabr (Chromium)
2016/12/20 18:11:45
Would constexpr instead of const work?
But +1 to
dvadym
2016/12/21 12:15:36
Done.
|
+ {PasswordForm::SCHEME_HTML, "https://www.google.com", |
+ "https://www.google.com", "", L"", L"", L"", L"", L"password", true, 1}, |
+ {PasswordForm::SCHEME_HTML, "https://facebook.com", |
+ "https://facebook.com", "", L"", L"", L"", L"", L"topsecret", true, 1}}; |
+ |
+ scoped_refptr<PasswordStoreDefault> store(new PasswordStoreDefault( |
+ base::ThreadTaskRunnerHandle::Get(), base::ThreadTaskRunnerHandle::Get(), |
+ base::MakeUnique<LoginDatabase>(test_login_db_file_path()))); |
+ store->Init(syncer::SyncableService::StartSyncFlare()); |
+ |
+ for (size_t i = 0; i < arraysize(kTestCredentials); ++i) { |
vabr (Chromium)
2016/12/20 18:11:45
nit: for (const auto& testcase : kTestCredentials)
dvadym
2016/12/21 12:15:36
Done.
|
+ auto credentials = |
+ CreatePasswordFormFromDataForTesting(kTestCredentials[i]); |
+ store->AddLogin(*credentials); |
+ base::RunLoop().RunUntilIdle(); |
+ } |
+ |
+ static const struct { |
vabr (Chromium)
2016/12/20 18:11:45
static constexpr?
dvadym
2016/12/21 12:15:36
Done.
|
+ const wchar_t* input; |
+ const char* domain; |
+ const wchar_t* reused_password; // set to nullptr if no reuse is expected. |
vabr (Chromium)
2016/12/20 18:11:45
nit: set -> Set
dvadym
2016/12/21 12:15:36
Done.
|
+ const char* reuse_domain; |
+ } kReuseTestData[] = { |
+ {L"12345password", "https://evil.com", L"password", "google.com"}, |
+ {L"1234567890", "https://evil.com", nullptr, nullptr}, |
+ {L"topsecret", "https://m.facebook.com", nullptr, nullptr}, |
+ }; |
+ |
+ for (size_t i = 0; i < arraysize(kReuseTestData); ++i) { |
vabr (Chromium)
2016/12/20 18:11:45
for (const auto& test_data : kReuseTestData) {
an
dvadym
2016/12/21 12:15:36
Done.
|
+ MockPasswordReuseDetectorConsumer mockConsumer; |
vabr (Chromium)
2016/12/20 18:11:45
nit: mockConsumer -> mock_consumer
dvadym
2016/12/21 12:15:36
Done.
|
+ const auto& test_data = kReuseTestData[i]; |
+ bool is_reuse_expected = test_data.reused_password; |
+ if (is_reuse_expected) { |
vabr (Chromium)
2016/12/20 18:11:45
nit: Just inline test_data.reused_password here.
dvadym
2016/12/21 12:15:36
Done.
|
+ EXPECT_CALL(mockConsumer, |
+ OnReuseFound(base::WideToUTF16(test_data.reused_password), |
+ std::string(test_data.reuse_domain))); |
+ } else { |
+ EXPECT_CALL(mockConsumer, OnReuseFound(_, _)).Times(0); |
+ } |
+ |
+ store->CheckReuse(base::WideToUTF16(test_data.input), test_data.domain, |
+ &mockConsumer); |
+ base::RunLoop().RunUntilIdle(); |
+ } |
+ |
+ store->ShutdownOnUIThread(); |
+ base::RunLoop().RunUntilIdle(); |
+} |
+ |
} // namespace password_manager |