| 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]);
|
|
|