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

Unified Diff: chrome/browser/password_manager/password_store_mac_unittest.cc

Issue 23477015: [sync] Significantly speed up password model association on mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase (no code changes) Created 7 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/password_manager/password_store_mac_unittest.cc
diff --git a/chrome/browser/password_manager/password_store_mac_unittest.cc b/chrome/browser/password_manager/password_store_mac_unittest.cc
index 28fed75a9efcbb7b97119e5983f1177151145400..4c7257ce1f0a186980cd897168a5c49684d56b0a 100644
--- a/chrome/browser/password_manager/password_store_mac_unittest.cc
+++ b/chrome/browser/password_manager/password_store_mac_unittest.cc
@@ -280,7 +280,7 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainToFormTranslation) {
reinterpret_cast<SecKeychainItemRef>(i + 1);
PasswordForm form;
bool parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
- *keychain_, keychain_item, &form);
+ *keychain_, keychain_item, &form, true);
EXPECT_TRUE(parsed) << "In iteration " << i;
@@ -319,7 +319,7 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainToFormTranslation) {
SecKeychainItemRef keychain_item = reinterpret_cast<SecKeychainItemRef>(99);
PasswordForm form;
bool parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
- *keychain_, keychain_item, &form);
+ *keychain_, keychain_item, &form, true);
EXPECT_FALSE(parsed);
}
}
@@ -388,8 +388,21 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainSearch) {
// Check matches treating the form as a merging target.
EXPECT_EQ(test_data[i].expected_merge_matches > 0,
keychain_adapter.HasPasswordsMergeableWithForm(*query_form));
- matching_items = keychain_adapter.PasswordsMergeableWithForm(*query_form);
+ std::vector<SecKeychainItemRef> keychain_items;
+ std::vector<internal_keychain_helpers::ItemFormPair> item_form_pairs =
+ internal_keychain_helpers::
+ ExtractAllKeychainItemAttributesIntoPasswordForms(&keychain_items,
+ *keychain_);
+ matching_items =
+ internal_keychain_helpers::ExtractPasswordsMergeableWithForm(
+ *keychain_, item_form_pairs, *query_form);
EXPECT_EQ(test_data[i].expected_merge_matches, matching_items.size());
+ STLDeleteContainerPairSecondPointers(item_form_pairs.begin(),
+ item_form_pairs.end());
+ for (std::vector<SecKeychainItemRef>::iterator i = keychain_items.begin();
+ i != keychain_items.end(); ++i) {
+ keychain_->Free(*i);
+ }
STLDeleteElements(&matching_items);
// None of the pre-seeded items are owned by us, so none should match an
@@ -558,7 +571,8 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainAdd) {
PasswordForm stored_form;
internal_keychain_helpers::FillPasswordFormFromKeychainItem(*keychain_,
keychain_item,
- &stored_form);
+ &stored_form,
+ true);
EXPECT_EQ(update_form->password_value, stored_form.password_value);
}
}
@@ -862,6 +876,107 @@ TEST_F(PasswordStoreMacInternalsTest, TestPasswordBulkLookup) {
STLDeleteElements(&merged_forms);
}
+TEST_F(PasswordStoreMacInternalsTest, TestBlacklistedFiltering) {
+ PasswordFormData db_data[] = {
+ { PasswordForm::SCHEME_HTML, "http://dont.remember.com/",
+ "http://dont.remember.com/",
+ "http://dont.remember.com/handlepage.cgi",
+ L"submit", L"username", L"password", L"joe_user", L"non_empty_password",
+ true, false, 1240000000 },
+ { PasswordForm::SCHEME_HTML, "https://dont.remember.com/",
+ "https://dont.remember.com/",
+ "https://dont.remember.com/handlepage_secure.cgi",
+ L"submit", L"username", L"password", L"joe_user", L"non_empty_password",
+ true, false, 1240000000 },
+ };
+ std::vector<PasswordForm*> database_forms;
+ for (unsigned int i = 0; i < ARRAYSIZE_UNSAFE(db_data); ++i) {
+ database_forms.push_back(CreatePasswordFormFromData(db_data[i]));
+ }
+ std::vector<PasswordForm*> merged_forms =
+ internal_keychain_helpers::GetPasswordsForForms(*keychain_,
+ &database_forms);
+ EXPECT_EQ(2U, database_forms.size());
+ ASSERT_EQ(0U, merged_forms.size());
+
+ STLDeleteElements(&database_forms);
+ STLDeleteElements(&merged_forms);
+}
+
+TEST_F(PasswordStoreMacInternalsTest, TestFillPasswordFormFromKeychainItem) {
+ // When |extract_password_data| is false, the password field must be empty,
+ // and |blacklisted_by_user| must be false.
+ SecKeychainItemRef keychain_item = reinterpret_cast<SecKeychainItemRef>(1);
+ PasswordForm form_without_extracted_password;
+ bool parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
+ *keychain_,
+ keychain_item,
+ &form_without_extracted_password,
+ false); // Do not extract password.
+ EXPECT_TRUE(parsed);
+ ASSERT_TRUE(form_without_extracted_password.password_value.empty());
+ ASSERT_FALSE(form_without_extracted_password.blacklisted_by_user);
+
+ // When |extract_password_data| is true and the keychain entry has a non-empty
+ // password, the password field must be non-empty, and the value of
+ // |blacklisted_by_user| must be false.
+ keychain_item = reinterpret_cast<SecKeychainItemRef>(1);
+ PasswordForm form_with_extracted_password;
+ parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
+ *keychain_,
+ keychain_item,
+ &form_with_extracted_password,
+ true); // Extract password.
+ EXPECT_TRUE(parsed);
+ ASSERT_EQ(ASCIIToUTF16("sekrit"),
+ form_with_extracted_password.password_value);
+ ASSERT_FALSE(form_with_extracted_password.blacklisted_by_user);
+
+ // When |extract_password_data| is true and the keychain entry has an empty
+ // username and password (""), the password field must be empty, and the value
+ // of |blacklisted_by_user| must be true.
+ keychain_item = reinterpret_cast<SecKeychainItemRef>(4);
+ PasswordForm negative_form;
+ parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
+ *keychain_,
+ keychain_item,
+ &negative_form,
+ true); // Extract password.
+ EXPECT_TRUE(parsed);
+ ASSERT_TRUE(negative_form.username_value.empty());
+ ASSERT_TRUE(negative_form.password_value.empty());
+ ASSERT_TRUE(negative_form.blacklisted_by_user);
+
+ // When |extract_password_data| is true and the keychain entry has an empty
+ // password (""), the password field must be empty (""), and the value of
+ // |blacklisted_by_user| must be true.
+ keychain_item = reinterpret_cast<SecKeychainItemRef>(5);
+ PasswordForm form_with_empty_password_a;
+ parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
+ *keychain_,
+ keychain_item,
+ &form_with_empty_password_a,
+ true); // Extract password.
+ EXPECT_TRUE(parsed);
+ ASSERT_TRUE(form_with_empty_password_a.password_value.empty());
+ ASSERT_TRUE(form_with_empty_password_a.blacklisted_by_user);
+
+ // When |extract_password_data| is true and the keychain entry has a single
+ // space password (" "), the password field must be a single space (" "), and
+ // the value of |blacklisted_by_user| must be true.
+ keychain_item = reinterpret_cast<SecKeychainItemRef>(6);
+ PasswordForm form_with_empty_password_b;
+ parsed = internal_keychain_helpers::FillPasswordFormFromKeychainItem(
+ *keychain_,
+ keychain_item,
+ &form_with_empty_password_b,
+ true); // Extract password.
+ EXPECT_TRUE(parsed);
+ ASSERT_EQ(ASCIIToUTF16(" "),
+ form_with_empty_password_b.password_value);
+ ASSERT_TRUE(form_with_empty_password_b.blacklisted_by_user);
+}
+
TEST_F(PasswordStoreMacInternalsTest, TestPasswordGetAll) {
MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain_);

Powered by Google App Engine
This is Rietveld 408576698