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

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

Issue 2098573002: Implement PasswordFormManager::WipeStoreCopyIfOutdated in FormSaver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@621355_FormSaver
Patch Set: Just rebased Created 4 years, 6 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/form_saver_impl.cc
diff --git a/components/password_manager/core/browser/form_saver_impl.cc b/components/password_manager/core/browser/form_saver_impl.cc
index e3cca5566a818f0edb53fe9bc87f7912ecd7d96f..aaf509455ef6fe367ebc5621fc4d16fa4e535c6d 100644
--- a/components/password_manager/core/browser/form_saver_impl.cc
+++ b/components/password_manager/core/browser/form_saver_impl.cc
@@ -4,12 +4,21 @@
#include "components/password_manager/core/browser/form_saver_impl.h"
+#include <memory>
+#include <vector>
+
#include "base/auto_reset.h"
#include "base/strings/string16.h"
+#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "components/password_manager/core/browser/password_store.h"
+#include "google_apis/gaia/gaia_auth_util.h"
+#include "google_apis/gaia/gaia_urls.h"
+#include "url/gurl.h"
+#include "url/origin.h"
using autofill::PasswordForm;
+using autofill::PasswordFormMap;
namespace password_manager {
@@ -59,10 +68,34 @@ void FormSaverImpl::RemovePresavedPassword() {
presaved_ = nullptr;
}
+void FormSaverImpl::WipeOutdatedCopies(const PasswordForm& pending,
+ PasswordFormMap* best_matches,
+ const PasswordForm** preferred_match) {
+ DCHECK(preferred_match); // Note: *preferred_match may still be null.
+ DCHECK(url::Origin(GURL(pending.signon_realm))
+ .IsSameOriginWith(
+ url::Origin(GaiaUrls::GetInstance()->gaia_url().GetOrigin())))
+ << pending.signon_realm << " is not a GAIA origin";
+
+ for (auto it = best_matches->begin(); it != best_matches->end();
+ /* increment inside the for loop */) {
+ if ((pending.password_value != it->second->password_value) &&
+ gaia::AreEmailsSame(base::UTF16ToUTF8(pending.username_value),
+ base::UTF16ToUTF8(it->second->username_value))) {
+ if (it->second.get() == *preferred_match)
+ *preferred_match = nullptr;
+ store_->RemoveLogin(*it->second);
+ it = best_matches->erase(it);
+ } else {
+ ++it;
+ }
+ }
+}
+
void FormSaverImpl::SaveImpl(
const PasswordForm& pending,
bool is_new_login,
- const autofill::PasswordFormMap& best_matches,
+ const PasswordFormMap& best_matches,
const std::vector<const PasswordForm*>* credentials_to_update,
const PasswordForm* old_primary_key) {
// Empty and null |credentials_to_update| mean the same, having a canonical

Powered by Google App Engine
This is Rietveld 408576698