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

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

Issue 1375883002: Support Android username-only credentials. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 5 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.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);

Powered by Google App Engine
This is Rietveld 408576698