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

Unified Diff: components/password_manager/core/browser/password_manager.cc

Issue 488083002: [Password Manager] Fix to recognise failed login attempt for sites where content server pushes new … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@branch_autofill_todo_20140813
Patch Set: Updated as per review comments. Created 6 years, 4 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: components/password_manager/core/browser/password_manager.cc
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc
index e05dab3878ac5999bb8748d898a43b44507c6458..be903b8f4d2f642e3314a13f78edbcca58b18d57 100644
--- a/components/password_manager/core/browser/password_manager.cc
+++ b/components/password_manager/core/browser/password_manager.cc
@@ -69,6 +69,22 @@ bool ShouldDropSyncCredential() {
return group_name != "Disabled";
}
+bool URLsEqualUpToScheme(const GURL& a, const GURL& b) {
+ return (a.GetContent() == b.GetContent());
+}
+
+bool URLsEqualUpToHttpHttpsSubstitution(const GURL& a, const GURL& b) {
+ if (a == b)
+ return true;
+
+ // The first-time and retry login forms action URLs sometimes differ in
+ // switching from HTTP to HTTPS, see http://crbug.com/400769.
+ if (a.SchemeIsHTTPOrHTTPS() && b.SchemeIsHTTPOrHTTPS())
+ return URLsEqualUpToScheme(a, b);
+
+ return false;
+}
+
} // namespace
const char PasswordManager::kOtherPossibleUsernamesExperiment[] =
@@ -437,12 +453,14 @@ void PasswordManager::OnPasswordFormsRendered(
// If we see the login form again, then the login failed.
if (did_stop_loading) {
for (size_t i = 0; i < all_visible_forms_.size(); ++i) {
- // TODO(vabr): The similarity check is just action equality for now. If it
- // becomes more complex, it may make sense to consider modifying and using
+ // TODO(vabr): The similarity check is just action equality up to
+ // HTTP<->HTTPS substitution for now. If it becomes more complex, it may
+ // make sense to consider modifying and using
// PasswordFormManager::DoesManage for it.
if (all_visible_forms_[i].action.is_valid() &&
- provisional_save_manager_->pending_credentials().action ==
- all_visible_forms_[i].action) {
+ URLsEqualUpToHttpHttpsSubstitution(
+ provisional_save_manager_->pending_credentials().action,
+ all_visible_forms_[i].action)) {
if (logger) {
logger->LogPasswordForm(Logger::STRING_PASSWORD_FORM_REAPPEARED,
visible_forms[i]);

Powered by Google App Engine
This is Rietveld 408576698