| 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 2181992f5004d9d2b89733b2366a3ec62dd82c4c..a6ac80e6973cdc4686c0caf4c329521e2f1114f2 100644
|
| --- a/chrome/browser/password_manager/password_store_mac_unittest.cc
|
| +++ b/chrome/browser/password_manager/password_store_mac_unittest.cc
|
| @@ -14,7 +14,7 @@
|
| #include "chrome/browser/password_manager/password_store_mac_internal.h"
|
| #include "chrome/common/chrome_paths.h"
|
| #include "components/password_manager/core/browser/login_database.h"
|
| -#include "components/password_manager/core/browser/password_form_data.h"
|
| +#include "components/password_manager/core/browser/password_manager_test_utils.h"
|
| #include "components/password_manager/core/browser/password_store_consumer.h"
|
| #include "content/public/test/test_browser_thread.h"
|
| #include "crypto/mock_apple_keychain.h"
|
| @@ -28,7 +28,9 @@ using content::BrowserThread;
|
| using crypto::MockAppleKeychain;
|
| using internal_keychain_helpers::FormsMatchForMerge;
|
| using internal_keychain_helpers::STRICT_FORM_MATCH;
|
| +using password_manager::CreatePasswordFormFromDataForTesting;
|
| using password_manager::LoginDatabase;
|
| +using password_manager::PasswordFormData;
|
| using password_manager::PasswordStore;
|
| using password_manager::PasswordStoreConsumer;
|
| using testing::_;
|
| @@ -126,57 +128,6 @@ class TestPasswordStoreMac : public PasswordStoreMac {
|
|
|
| #pragma mark -
|
|
|
| -// Struct used for creation of PasswordForms from static arrays of data.
|
| -struct PasswordFormData {
|
| - const PasswordForm::Scheme scheme;
|
| - const char* signon_realm;
|
| - const char* origin;
|
| - const char* action;
|
| - const wchar_t* submit_element;
|
| - const wchar_t* username_element;
|
| - const wchar_t* password_element;
|
| - const wchar_t* username_value; // Set to NULL for a blacklist entry.
|
| - const wchar_t* password_value;
|
| - const bool preferred;
|
| - const bool ssl_valid;
|
| - const double creation_time;
|
| -};
|
| -
|
| -// Creates and returns a new PasswordForm built from form_data.
|
| -scoped_ptr<PasswordForm> CreatePasswordFormFromData(
|
| - const PasswordFormData& form_data) {
|
| - scoped_ptr<PasswordForm> form(new PasswordForm());
|
| - form->scheme = form_data.scheme;
|
| - form->preferred = form_data.preferred;
|
| - form->ssl_valid = form_data.ssl_valid;
|
| - form->date_created = base::Time::FromDoubleT(form_data.creation_time);
|
| - form->date_synced = form->date_created + base::TimeDelta::FromDays(1);
|
| - if (form_data.signon_realm)
|
| - form->signon_realm = std::string(form_data.signon_realm);
|
| - if (form_data.origin)
|
| - form->origin = GURL(form_data.origin);
|
| - if (form_data.action)
|
| - form->action = GURL(form_data.action);
|
| - if (form_data.submit_element)
|
| - form->submit_element = WideToUTF16(form_data.submit_element);
|
| - if (form_data.username_element)
|
| - form->username_element = WideToUTF16(form_data.username_element);
|
| - if (form_data.password_element)
|
| - form->password_element = WideToUTF16(form_data.password_element);
|
| - if (form_data.username_value) {
|
| - form->username_value = WideToUTF16(form_data.username_value);
|
| - form->display_name = form->username_value;
|
| - form->skip_zero_click = true;
|
| - if (form_data.password_value)
|
| - form->password_value = WideToUTF16(form_data.password_value);
|
| - } else {
|
| - form->blacklisted_by_user = true;
|
| - }
|
| - form->avatar_url = GURL("https://accounts.google.com/Avatar");
|
| - form->federation_url = GURL("https://accounts.google.com/login");
|
| - return form.Pass();
|
| -}
|
| -
|
| // Macro to simplify calling CheckFormsAgainstExpectations with a useful label.
|
| #define CHECK_FORMS(forms, expectations, i) \
|
| CheckFormsAgainstExpectations(forms, expectations, #forms, i)
|
| @@ -188,52 +139,47 @@ scoped_ptr<PasswordForm> CreatePasswordFormFromData(
|
| void CheckFormsAgainstExpectations(
|
| const std::vector<PasswordForm*>& forms,
|
| const std::vector<PasswordFormData*>& expectations,
|
| - const char* forms_label,
|
| - unsigned int test_number) {
|
| - const unsigned int kBufferSize = 128;
|
| - char test_label[kBufferSize];
|
| - snprintf(test_label, kBufferSize, "%s in test %u", forms_label, test_number);
|
|
|
| - EXPECT_EQ(expectations.size(), forms.size()) << test_label;
|
| + const char* forms_label, unsigned int test_number) {
|
| + EXPECT_EQ(expectations.size(), forms.size()) << forms_label << " in test "
|
| + << test_number;
|
| if (expectations.size() != forms.size())
|
| return;
|
|
|
| for (unsigned int i = 0; i < expectations.size(); ++i) {
|
| - snprintf(test_label, kBufferSize, "%s in test %u, item %u",
|
| - forms_label, test_number, i);
|
| + SCOPED_TRACE(testing::Message() << forms_label << " in test " << test_number
|
| + << ", item " << i);
|
| PasswordForm* form = forms[i];
|
| PasswordFormData* expectation = expectations[i];
|
| - EXPECT_EQ(expectation->scheme, form->scheme) << test_label;
|
| - EXPECT_EQ(std::string(expectation->signon_realm), form->signon_realm)
|
| - << test_label;
|
| - EXPECT_EQ(GURL(expectation->origin), form->origin) << test_label;
|
| - EXPECT_EQ(GURL(expectation->action), form->action) << test_label;
|
| - EXPECT_EQ(WideToUTF16(expectation->submit_element), form->submit_element)
|
| - << test_label;
|
| + EXPECT_EQ(expectation->scheme, form->scheme);
|
| + EXPECT_EQ(std::string(expectation->signon_realm), form->signon_realm);
|
| + EXPECT_EQ(GURL(expectation->origin), form->origin);
|
| + EXPECT_EQ(GURL(expectation->action), form->action);
|
| + EXPECT_EQ(WideToUTF16(expectation->submit_element), form->submit_element);
|
| EXPECT_EQ(WideToUTF16(expectation->username_element),
|
| - form->username_element) << test_label;
|
| + form->username_element);
|
| EXPECT_EQ(WideToUTF16(expectation->password_element),
|
| - form->password_element) << test_label;
|
| + form->password_element);
|
| if (expectation->username_value) {
|
| - EXPECT_EQ(WideToUTF16(expectation->username_value),
|
| - form->username_value) << test_label;
|
| - EXPECT_EQ(WideToUTF16(expectation->username_value),
|
| - form->display_name) << test_label;
|
| - EXPECT_TRUE(form->skip_zero_click) << test_label;
|
| - EXPECT_EQ(WideToUTF16(expectation->password_value),
|
| - form->password_value) << test_label;
|
| + EXPECT_EQ(WideToUTF16(expectation->username_value), form->username_value);
|
| + EXPECT_EQ(WideToUTF16(expectation->username_value), form->display_name);
|
| + EXPECT_TRUE(form->skip_zero_click);
|
| + EXPECT_EQ(WideToUTF16(expectation->password_value), form->password_value);
|
| } else {
|
| - EXPECT_TRUE(form->blacklisted_by_user) << test_label;
|
| + EXPECT_TRUE(form->blacklisted_by_user);
|
| }
|
| - EXPECT_EQ(expectation->preferred, form->preferred) << test_label;
|
| - EXPECT_EQ(expectation->ssl_valid, form->ssl_valid) << test_label;
|
| + EXPECT_EQ(expectation->preferred, form->preferred);
|
| + EXPECT_EQ(expectation->ssl_valid, form->ssl_valid);
|
| EXPECT_DOUBLE_EQ(expectation->creation_time,
|
| - form->date_created.ToDoubleT()) << test_label;
|
| + form->date_created.ToDoubleT());
|
| base::Time created = base::Time::FromDoubleT(expectation->creation_time);
|
| - EXPECT_EQ(created + base::TimeDelta::FromDays(1),
|
| - form->date_synced) << test_label;
|
| - EXPECT_EQ(GURL("https://accounts.google.com/Avatar"), form->avatar_url);
|
| - EXPECT_EQ(GURL("https://accounts.google.com/login"), form->federation_url);
|
| + EXPECT_EQ(
|
| + created + base::TimeDelta::FromDays(
|
| + password_manager::kTestingDaysAfterPasswordsAreSynced),
|
| + form->date_synced);
|
| + EXPECT_EQ(GURL(password_manager::kTestingAvatarUrlSpec), form->avatar_url);
|
| + EXPECT_EQ(GURL(password_manager::kTestingFederationUrlSpec),
|
| + form->federation_url);
|
| }
|
| }
|
|
|
| @@ -531,7 +477,7 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainSearch) {
|
| owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
|
| for (unsigned int i = 0; i < arraysize(test_data); ++i) {
|
| scoped_ptr<PasswordForm> query_form =
|
| - CreatePasswordFormFromData(test_data[i].data);
|
| + CreatePasswordFormFromDataForTesting(test_data[i].data);
|
|
|
| // Check matches treating the form as a fill target.
|
| ScopedVector<autofill::PasswordForm> matching_items =
|
| @@ -611,7 +557,7 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainExactSearch) {
|
| for (unsigned int i = 0; i < arraysize(base_form_data); ++i) {
|
| // Create a base form and make sure we find a match.
|
| scoped_ptr<PasswordForm> base_form =
|
| - CreatePasswordFormFromData(base_form_data[i]);
|
| + CreatePasswordFormFromDataForTesting(base_form_data[i]);
|
| EXPECT_TRUE(keychain_adapter.HasPasswordsMergeableWithForm(*base_form));
|
| EXPECT_TRUE(keychain_adapter.HasPasswordExactlyMatchingForm(*base_form));
|
|
|
| @@ -685,7 +631,7 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainAdd) {
|
|
|
| for (unsigned int i = 0; i < arraysize(test_data); ++i) {
|
| scoped_ptr<PasswordForm> in_form =
|
| - CreatePasswordFormFromData(test_data[i].data);
|
| + CreatePasswordFormFromDataForTesting(test_data[i].data);
|
| bool add_succeeded = owned_keychain_adapter.AddPassword(*in_form);
|
| EXPECT_EQ(test_data[i].should_succeed, add_succeeded);
|
| if (add_succeeded) {
|
| @@ -703,7 +649,8 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainAdd) {
|
| "http://some.domain.com/insecure.html", NULL,
|
| NULL, NULL, NULL, L"joe_user", L"updated_password", false, false, 0
|
| };
|
| - scoped_ptr<PasswordForm> update_form = CreatePasswordFormFromData(data);
|
| + scoped_ptr<PasswordForm> update_form =
|
| + CreatePasswordFormFromDataForTesting(data);
|
| MacKeychainPasswordFormAdapter keychain_adapter(keychain_);
|
| EXPECT_TRUE(keychain_adapter.AddPassword(*update_form));
|
| SecKeychainItemRef keychain_item = reinterpret_cast<SecKeychainItemRef>(2);
|
| @@ -737,12 +684,12 @@ TEST_F(PasswordStoreMacInternalsTest, TestKeychainRemove) {
|
|
|
| // Add our test item so that we can delete it.
|
| scoped_ptr<PasswordForm> add_form =
|
| - CreatePasswordFormFromData(test_data[0].data);
|
| + CreatePasswordFormFromDataForTesting(test_data[0].data);
|
| EXPECT_TRUE(owned_keychain_adapter.AddPassword(*add_form));
|
|
|
| for (unsigned int i = 0; i < arraysize(test_data); ++i) {
|
| scoped_ptr<PasswordForm> form =
|
| - CreatePasswordFormFromData(test_data[i].data);
|
| + CreatePasswordFormFromDataForTesting(test_data[i].data);
|
| EXPECT_EQ(test_data[i].should_succeed,
|
| owned_keychain_adapter.RemovePassword(*form));
|
|
|
| @@ -943,13 +890,15 @@ TEST_F(PasswordStoreMacInternalsTest, TestFormMerge) {
|
| for (std::vector<PasswordFormData*>::iterator i =
|
| test_data[KEYCHAIN_INPUT][test_case].begin();
|
| i != test_data[KEYCHAIN_INPUT][test_case].end(); ++i) {
|
| - keychain_forms.push_back(CreatePasswordFormFromData(*(*i)).release());
|
| + keychain_forms.push_back(
|
| + CreatePasswordFormFromDataForTesting(*(*i)).release());
|
| }
|
| ScopedVector<autofill::PasswordForm> database_forms;
|
| for (std::vector<PasswordFormData*>::iterator i =
|
| test_data[DATABASE_INPUT][test_case].begin();
|
| i != test_data[DATABASE_INPUT][test_case].end(); ++i) {
|
| - database_forms.push_back(CreatePasswordFormFromData(*(*i)).release());
|
| + database_forms.push_back(
|
| + CreatePasswordFormFromDataForTesting(*(*i)).release());
|
| }
|
|
|
| ScopedVector<autofill::PasswordForm> merged_forms;
|
| @@ -994,7 +943,8 @@ TEST_F(PasswordStoreMacInternalsTest, TestPasswordBulkLookup) {
|
| };
|
| ScopedVector<autofill::PasswordForm> database_forms;
|
| for (unsigned int i = 0; i < arraysize(db_data); ++i) {
|
| - database_forms.push_back(CreatePasswordFormFromData(db_data[i]).release());
|
| + database_forms.push_back(
|
| + CreatePasswordFormFromDataForTesting(db_data[i]).release());
|
| }
|
| ScopedVector<autofill::PasswordForm> merged_forms;
|
| internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
|
| @@ -1021,7 +971,8 @@ TEST_F(PasswordStoreMacInternalsTest, TestBlacklistedFiltering) {
|
| };
|
| ScopedVector<autofill::PasswordForm> database_forms;
|
| for (unsigned int i = 0; i < arraysize(db_data); ++i) {
|
| - database_forms.push_back(CreatePasswordFormFromData(db_data[i]).release());
|
| + database_forms.push_back(
|
| + CreatePasswordFormFromDataForTesting(db_data[i]).release());
|
| }
|
| ScopedVector<autofill::PasswordForm> merged_forms;
|
| internal_keychain_helpers::GetPasswordsForForms(*keychain_, &database_forms,
|
| @@ -1123,7 +1074,7 @@ TEST_F(PasswordStoreMacInternalsTest, TestPasswordGetAll) {
|
| };
|
| for (unsigned int i = 0; i < arraysize(owned_password_data); ++i) {
|
| scoped_ptr<PasswordForm> form =
|
| - CreatePasswordFormFromData(owned_password_data[i]);
|
| + CreatePasswordFormFromDataForTesting(owned_password_data[i]);
|
| owned_keychain_adapter.AddPassword(*form);
|
| }
|
|
|
| @@ -1216,7 +1167,8 @@ TEST_F(PasswordStoreMacTest, TestStoreUpdate) {
|
| "http://some.domain.com/insecure.html", "login.cgi",
|
| L"username", L"password", L"submit", L"joe_user", L"sekrit", true, false, 1
|
| };
|
| - scoped_ptr<PasswordForm> joint_form = CreatePasswordFormFromData(joint_data);
|
| + scoped_ptr<PasswordForm> joint_form =
|
| + CreatePasswordFormFromDataForTesting(joint_data);
|
| login_db()->AddLogin(*joint_form);
|
| MockAppleKeychain::KeychainTestData joint_keychain_data = {
|
| kSecAuthenticationTypeHTMLForm, "some.domain.com",
|
| @@ -1266,7 +1218,7 @@ TEST_F(PasswordStoreMacTest, TestStoreUpdate) {
|
| };
|
| for (unsigned int i = 0; i < arraysize(updates); ++i) {
|
| scoped_ptr<PasswordForm> form =
|
| - CreatePasswordFormFromData(updates[i].form_data);
|
| + CreatePasswordFormFromDataForTesting(updates[i].form_data);
|
| store_->UpdateLogin(*form);
|
| }
|
|
|
| @@ -1275,7 +1227,7 @@ TEST_F(PasswordStoreMacTest, TestStoreUpdate) {
|
| MacKeychainPasswordFormAdapter keychain_adapter(keychain());
|
| for (unsigned int i = 0; i < arraysize(updates); ++i) {
|
| scoped_ptr<PasswordForm> query_form =
|
| - CreatePasswordFormFromData(updates[i].form_data);
|
| + CreatePasswordFormFromDataForTesting(updates[i].form_data);
|
|
|
| ScopedVector<autofill::PasswordForm> matching_items =
|
| keychain_adapter.PasswordsFillingForm(query_form->signon_realm,
|
| @@ -1318,7 +1270,8 @@ TEST_F(PasswordStoreMacTest, TestDBKeychainAssociation) {
|
| "http://www.facebook.com/index.html", "login",
|
| L"username", L"password", L"submit", L"joe_user", L"sekrit", true, false, 1
|
| };
|
| - scoped_ptr<PasswordForm> www_form = CreatePasswordFormFromData(www_form_data);
|
| + scoped_ptr<PasswordForm> www_form =
|
| + CreatePasswordFormFromDataForTesting(www_form_data);
|
| login_db()->AddLogin(*www_form);
|
| MacKeychainPasswordFormAdapter owned_keychain_adapter(keychain());
|
| owned_keychain_adapter.SetFindsOnlyOwnedItems(true);
|
| @@ -1408,11 +1361,11 @@ void CheckRemoveLoginsBetween(PasswordStoreMacTest* test, bool check_created) {
|
| "http://different.com/index.html", "login", L"submit", L"username",
|
| L"password", L"different_joe_user", L"sekrit", true, false, 0 };
|
| scoped_ptr<PasswordForm> form_facebook =
|
| - CreatePasswordFormFromData(www_form_data_facebook);
|
| + CreatePasswordFormFromDataForTesting(www_form_data_facebook);
|
| scoped_ptr<PasswordForm> form_facebook_old =
|
| - CreatePasswordFormFromData(www_form_data_facebook_old);
|
| + CreatePasswordFormFromDataForTesting(www_form_data_facebook_old);
|
| scoped_ptr<PasswordForm> form_other =
|
| - CreatePasswordFormFromData(www_form_data_other);
|
| + CreatePasswordFormFromDataForTesting(www_form_data_other);
|
| base::Time now = base::Time::Now();
|
| // TODO(vasilii): remove the next line once crbug/374132 is fixed.
|
| now = base::Time::FromTimeT(now.ToTimeT());
|
| @@ -1512,7 +1465,7 @@ TEST_F(PasswordStoreMacTest, TestRemoveLoginsMultiProfile) {
|
| "http://www.facebook.com/index.html", "login", L"username", L"password",
|
| L"submit", L"joe_user", L"sekrit", true, false, 1 };
|
| scoped_ptr<PasswordForm> www_form =
|
| - CreatePasswordFormFromData(www_form_data1);
|
| + CreatePasswordFormFromDataForTesting(www_form_data1);
|
| EXPECT_TRUE(owned_keychain_adapter.AddPassword(*www_form));
|
|
|
| // Add a password from the current profile.
|
| @@ -1520,7 +1473,7 @@ TEST_F(PasswordStoreMacTest, TestRemoveLoginsMultiProfile) {
|
| PasswordForm::SCHEME_HTML, "http://www.facebook.com/",
|
| "http://www.facebook.com/index.html", "login", L"username", L"password",
|
| L"submit", L"not_joe_user", L"12345", true, false, 1 };
|
| - www_form = CreatePasswordFormFromData(www_form_data2);
|
| + www_form = CreatePasswordFormFromDataForTesting(www_form_data2);
|
| store_->AddLogin(*www_form);
|
| FinishAsyncProcessing();
|
|
|
| @@ -1565,7 +1518,8 @@ TEST_F(PasswordStoreMacTest, StoreIsUsableImmediatelyAfterConstruction) {
|
| PasswordForm::SCHEME_HTML, "http://www.facebook.com/",
|
| "http://www.facebook.com/index.html", "login", L"username", L"password",
|
| L"submit", L"not_joe_user", L"12345", true, false, 1};
|
| - scoped_ptr<PasswordForm> form = CreatePasswordFormFromData(www_form_data);
|
| + scoped_ptr<PasswordForm> form =
|
| + CreatePasswordFormFromDataForTesting(www_form_data);
|
| store()->AddLogin(*form);
|
|
|
| MockPasswordStoreConsumer mock_consumer;
|
| @@ -1598,7 +1552,8 @@ TEST_F(PasswordStoreMacTest, OperationsOnABadDatabaseSilentlyFail) {
|
| PasswordForm::SCHEME_HTML, "http://www.facebook.com/",
|
| "http://www.facebook.com/index.html", "login", L"username", L"password",
|
| L"submit", L"not_joe_user", L"12345", true, false, 1};
|
| - scoped_ptr<PasswordForm> form = CreatePasswordFormFromData(www_form_data);
|
| + scoped_ptr<PasswordForm> form =
|
| + CreatePasswordFormFromDataForTesting(www_form_data);
|
| scoped_ptr<PasswordForm> blacklisted_form(new PasswordForm(*form));
|
| blacklisted_form->signon_realm = "http://foo.example.com";
|
| blacklisted_form->origin = GURL("http://foo.example.com/origin");
|
|
|