| Index: chrome/browser/password_manager/password_store_mac.cc
|
| diff --git a/chrome/browser/password_manager/password_store_mac.cc b/chrome/browser/password_manager/password_store_mac.cc
|
| index f067dd8f1afb92b3ee86dcf18889ec05df63799c..bbb9b948a18b98619bc53c04cb623b276526e46d 100644
|
| --- a/chrome/browser/password_manager/password_store_mac.cc
|
| +++ b/chrome/browser/password_manager/password_store_mac.cc
|
| @@ -238,6 +238,12 @@ inline void MoveAllFormsOut(ScopedVector<autofill::PasswordForm>* forms,
|
| forms->weak_clear();
|
| }
|
|
|
| +// True if the form has no password to be stored in Keychain.
|
| +bool IsLoginDatabaseOnlyForm(const autofill::PasswordForm& form) {
|
| + return form.blacklisted_by_user || !form.federation_url.is_empty() ||
|
| + form.scheme == autofill::PasswordForm::SCHEME_USERNAME_ONLY;
|
| +}
|
| +
|
| } // namespace
|
|
|
| #pragma mark -
|
| @@ -470,12 +476,9 @@ bool HasChromeCreatorCode(const AppleKeychain& keychain,
|
| bool FormsMatchForMerge(const PasswordForm& form_a,
|
| const PasswordForm& form_b,
|
| FormMatchStrictness strictness) {
|
| - // We never merge blacklist entries between our store and the Keychain,
|
| - // and federated logins should not be stored in the Keychain at all.
|
| - if (form_a.blacklisted_by_user || form_b.blacklisted_by_user ||
|
| - !form_a.federation_url.is_empty() || !form_b.federation_url.is_empty()) {
|
| + if (IsLoginDatabaseOnlyForm(form_a) || IsLoginDatabaseOnlyForm(form_b))
|
| return false;
|
| - }
|
| +
|
| bool equal_realm = form_a.signon_realm == form_b.signon_realm;
|
| if (strictness == FUZZY_FORM_MATCH) {
|
| equal_realm |= form_a.is_public_suffix_match;
|
| @@ -493,7 +496,7 @@ void ExtractNonKeychainForms(ScopedVector<autofill::PasswordForm>* forms,
|
| ScopedVector<autofill::PasswordForm> remaining;
|
| MoveAllFormsOut(
|
| forms, [&remaining, extracted](scoped_ptr<autofill::PasswordForm> form) {
|
| - if (form->blacklisted_by_user || !form->federation_url.is_empty())
|
| + if (IsLoginDatabaseOnlyForm(*form))
|
| extracted->push_back(form.Pass());
|
| else
|
| remaining.push_back(form.Pass());
|
| @@ -721,7 +724,7 @@ bool MacKeychainPasswordFormAdapter::HasPasswordExactlyMatchingForm(
|
|
|
| bool MacKeychainPasswordFormAdapter::HasPasswordsMergeableWithForm(
|
| const PasswordForm& query_form) {
|
| - if (!query_form.federation_url.is_empty())
|
| + if (IsLoginDatabaseOnlyForm(query_form))
|
| return false;
|
| std::string username = base::UTF16ToUTF8(query_form.username_value);
|
| std::vector<SecKeychainItemRef> matches =
|
| @@ -768,7 +771,7 @@ MacKeychainPasswordFormAdapter::GetAllPasswordFormPasswords() {
|
|
|
| bool MacKeychainPasswordFormAdapter::AddPassword(const PasswordForm& form) {
|
| // We should never be trying to store a blacklist in the keychain.
|
| - DCHECK(!form.blacklisted_by_user);
|
| + DCHECK(!IsLoginDatabaseOnlyForm(form));
|
|
|
| std::string server;
|
| std::string security_domain;
|
| @@ -848,9 +851,8 @@ SecKeychainItemRef MacKeychainPasswordFormAdapter::KeychainItemForForm(
|
| // We don't store blacklist entries in the keychain, so the answer to "what
|
| // Keychain item goes with this form" is always "nothing" for blacklists.
|
| // Same goes for federated logins.
|
| - if (form.blacklisted_by_user || !form.federation_url.is_empty()) {
|
| + if (IsLoginDatabaseOnlyForm(form))
|
| return NULL;
|
| - }
|
|
|
| std::string path;
|
| // Path doesn't make sense for Android app credentials.
|
| @@ -916,6 +918,9 @@ SecAuthenticationType MacKeychainPasswordFormAdapter::AuthTypeForScheme(
|
| case PasswordForm::SCHEME_BASIC: return kSecAuthenticationTypeHTTPBasic;
|
| case PasswordForm::SCHEME_DIGEST: return kSecAuthenticationTypeHTTPDigest;
|
| case PasswordForm::SCHEME_OTHER: return kSecAuthenticationTypeDefault;
|
| + case PasswordForm::SCHEME_USERNAME_ONLY:
|
| + NOTREACHED();
|
| + break;
|
| }
|
| NOTREACHED();
|
| return kSecAuthenticationTypeDefault;
|
| @@ -1261,7 +1266,7 @@ PasswordStoreMac::GetSiteStatsImpl(const GURL& origin_domain) {
|
| }
|
|
|
| bool PasswordStoreMac::AddToKeychainIfNecessary(const PasswordForm& form) {
|
| - if (form.blacklisted_by_user || !form.federation_url.is_empty())
|
| + if (IsLoginDatabaseOnlyForm(form))
|
| return true;
|
| MacKeychainPasswordFormAdapter keychainAdapter(keychain_.get());
|
| return keychainAdapter.AddPassword(form);
|
|
|