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

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

Issue 795183002: PasswordFormManager supports multiple drivers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added comment about non-blacklisted forms Created 6 years 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_form_manager.cc
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc
index 99117aaa61b281346da72c8be4db98e922b23563..9f2bd8e8058413ec9987a85b2c485b65790af970 100644
--- a/components/password_manager/core/browser/password_form_manager.cc
+++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -84,10 +84,10 @@ PasswordFormManager::PasswordFormManager(
preferred_match_(NULL),
state_(PRE_MATCHING_PHASE),
client_(client),
- driver_(driver),
manager_action_(kManagerActionNone),
user_action_(kUserActionNone),
submit_result_(kSubmitResultNotSubmitted) {
+ drivers_.push_back(driver);
if (observed_form_.origin.is_valid())
base::SplitString(observed_form_.origin.path(), '/', &form_path_tokens_);
}
@@ -462,8 +462,6 @@ void PasswordFormManager::OnRequestDone(
preferred_match_ = logins_result[i]->preferred ? logins_result[i]
: preferred_match_;
}
- // We're done matching now.
- state_ = POST_MATCHING_PHASE;
client_->AutofillResultsComputed();
@@ -471,10 +469,6 @@ void PasswordFormManager::OnRequestDone(
// be equivalent for the moment, but it's less clear and may not be
// equivalent in the future.
if (best_score <= 0) {
- // If no saved forms can be used, then it isn't blacklisted and generation
- // should be allowed.
- if (driver_)
- driver_->AllowPasswordGenerationForForm(observed_form_);
if (logger)
logger->LogNumber(Logger::STRING_BEST_SCORE, best_score);
return;
@@ -505,23 +499,24 @@ void PasswordFormManager::OnRequestDone(
if (preferred_match_->blacklisted_by_user) {
client_->PasswordAutofillWasBlocked(best_matches_);
manager_action_ = kManagerActionBlacklisted;
+ }
+}
+
+void PasswordFormManager::ProcessFrame(
+ const base::WeakPtr<PasswordManagerDriver>& driver) {
+ if (state_ != POST_MATCHING_PHASE) {
+ drivers_.push_back(driver);
return;
}
- // If not blacklisted, inform the driver that password generation is allowed
- // for |observed_form_|.
- if (driver_)
- driver_->AllowPasswordGenerationForForm(observed_form_);
+ if (!driver || manager_action_ == kManagerActionBlacklisted)
+ return;
- MaybeTriggerAutofill();
-}
+ // Allow generation for any non-blacklisted form.
+ driver->AllowPasswordGenerationForForm(observed_form_);
-void PasswordFormManager::MaybeTriggerAutofill() {
- DCHECK_EQ(POST_MATCHING_PHASE, state_);
- if (!driver_ || best_matches_.empty() ||
- manager_action_ == kManagerActionBlacklisted) {
+ if (best_matches_.empty())
return;
- }
// Proceed to autofill.
// Note that we provide the choices but don't actually prefill a value if:
@@ -535,7 +530,7 @@ void PasswordFormManager::MaybeTriggerAutofill() {
manager_action_ = kManagerActionNone;
else
manager_action_ = kManagerActionAutofilled;
- password_manager_->Autofill(driver_.get(), observed_form_, best_matches_,
+ password_manager_->Autofill(driver.get(), observed_form_, best_matches_,
*preferred_match_, wait_for_username);
}
@@ -550,16 +545,15 @@ void PasswordFormManager::OnGetPasswordStoreResults(
logger->LogNumber(Logger::STRING_NUMBER_RESULTS, results.size());
}
- if (results.empty()) {
- state_ = POST_MATCHING_PHASE;
- // No result means that we visit this site the first time so we don't need
- // to check whether this site is blacklisted or not. Just send a message
- // to allow password generation.
- if (driver_)
- driver_->AllowPasswordGenerationForForm(observed_form_);
- return;
+ if (!results.empty())
+ OnRequestDone(results);
+ state_ = POST_MATCHING_PHASE;
+
+ if (manager_action_ != kManagerActionBlacklisted) {
+ for (auto const& driver : drivers_)
+ ProcessFrame(driver);
}
- OnRequestDone(results);
+ drivers_.clear();
}
bool PasswordFormManager::ShouldIgnoreResult(const PasswordForm& form) const {

Powered by Google App Engine
This is Rietveld 408576698