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 e2837adf0db765b2dc89d379b3df99673ae1345a..e916b8cefa7c7ee6523eb3cd781833f537a3bb60 100644 |
--- a/components/password_manager/core/browser/password_form_manager.cc |
+++ b/components/password_manager/core/browser/password_form_manager.cc |
@@ -18,7 +18,6 @@ |
#include "base/strings/string_split.h" |
#include "base/strings/string_util.h" |
#include "base/time/time.h" |
-#include "build/build_config.h" |
#include "components/autofill/core/browser/autofill_manager.h" |
#include "components/autofill/core/browser/proto/server.pb.h" |
#include "components/autofill/core/browser/validation.h" |
@@ -141,9 +140,9 @@ PasswordFormManager::PasswordFormManager( |
PasswordManagerClient* client, |
const base::WeakPtr<PasswordManagerDriver>& driver, |
const PasswordForm& observed_form, |
- std::unique_ptr<FormSaver> form_saver) |
+ std::unique_ptr<FormSaver> form_saver, |
+ FormFetcher* form_fetcher) |
: observed_form_(observed_form), |
- provisionally_saved_form_(nullptr), |
other_possible_username_action_( |
PasswordFormManager::IGNORE_OTHER_POSSIBLE_USERNAMES), |
form_path_segments_( |
@@ -167,15 +166,18 @@ PasswordFormManager::PasswordFormManager( |
user_action_(kUserActionNone), |
submit_result_(kSubmitResultNotSubmitted), |
form_type_(kFormTypeUnspecified), |
- need_to_refetch_(false), |
form_saver_(std::move(form_saver)), |
- form_fetcher_impl_(client), |
- form_fetcher_(&form_fetcher_impl_) { |
+ form_fetcher_impl_( |
+ form_fetcher ? nullptr : base::MakeUnique<FormFetcherImpl>( |
+ PasswordStore::FormDigest(observed_form), |
+ client)), |
+ form_fetcher_(form_fetcher ? form_fetcher : form_fetcher_impl_.get()) { |
+ if (form_fetcher_impl_) |
+ form_fetcher_impl_->Fetch(); |
DCHECK_EQ(observed_form.scheme == PasswordForm::SCHEME_HTML, |
driver != nullptr); |
if (driver) |
drivers_.push_back(driver); |
- FetchDataFromPasswordStore(); |
form_fetcher_->AddConsumer(this); |
} |
@@ -310,7 +312,7 @@ void PasswordFormManager::ProvisionallySave( |
other_possible_username_action_ = action; |
does_look_like_signup_form_ = credentials.does_look_like_signup_form; |
- if (HasCompletedMatching()) |
+ if (form_fetcher_->GetState() == FormFetcher::State::NOT_WAITING) |
CreatePendingCredentials(); |
} |
@@ -371,49 +373,6 @@ void PasswordFormManager::Update( |
old_primary_key ? &old_primary_key.value() : nullptr); |
} |
-void PasswordFormManager::FetchDataFromPasswordStore() { |
- if (form_fetcher_->GetState() == FormFetcher::State::WAITING) { |
- // There is currently a password store query in progress, need to re-fetch |
- // store results later. |
- need_to_refetch_ = true; |
- return; |
- } |
- |
- std::unique_ptr<BrowserSavePasswordProgressLogger> logger; |
- if (password_manager_util::IsLoggingActive(client_)) { |
- logger.reset( |
- new BrowserSavePasswordProgressLogger(client_->GetLogManager())); |
- logger->LogMessage(Logger::STRING_FETCH_LOGINS_METHOD); |
- logger->LogNumber(Logger::STRING_FORM_MANAGER_STATE, |
- static_cast<int>(form_fetcher_->GetState())); |
- } |
- |
- provisionally_saved_form_.reset(); |
- form_fetcher_impl_.set_state(FormFetcher::State::WAITING); |
- |
- PasswordStore* password_store = client_->GetPasswordStore(); |
- if (!password_store) { |
- if (logger) |
- logger->LogMessage(Logger::STRING_NO_STORE); |
- // TODO(crbug.com/621355): The store might be empty in some tests. Start |
- // enforcing the presence of a (non-null) PasswordStore once FormFetcher is |
- // fetching the credentials instead of PasswordFormManager. |
- return; |
- } |
- password_store->GetLogins(PasswordStore::FormDigest(observed_form_), this); |
- |
-// The statistics isn't needed on mobile, only on desktop. Let's save some |
-// processor cycles. |
-#if !defined(OS_IOS) && !defined(OS_ANDROID) |
- // The statistics is needed for the "Save password?" bubble. |
- password_store->GetSiteStats(observed_form_.origin.GetOrigin(), this); |
-#endif |
-} |
- |
-bool PasswordFormManager::HasCompletedMatching() const { |
- return form_fetcher_->GetState() == FormFetcher::State::NOT_WAITING; |
-} |
- |
void PasswordFormManager::SetSubmittedForm(const autofill::PasswordForm& form) { |
bool is_change_password_form = |
!form.new_password_value.empty() && !form.password_value.empty(); |
@@ -610,36 +569,6 @@ void PasswordFormManager::ProcessLoginPrompt() { |
password_manager_->AutofillHttpAuth(best_matches_, *preferred_match_); |
} |
-void PasswordFormManager::OnGetPasswordStoreResults( |
- std::vector<std::unique_ptr<autofill::PasswordForm>> results) { |
- DCHECK_EQ(FormFetcher::State::WAITING, form_fetcher_->GetState()); |
- |
- if (need_to_refetch_) { |
- // The received results are no longer up to date, need to re-request. |
- form_fetcher_impl_.set_state(FormFetcher::State::NOT_WAITING); |
- FetchDataFromPasswordStore(); |
- need_to_refetch_ = false; |
- return; |
- } |
- |
- std::unique_ptr<BrowserSavePasswordProgressLogger> logger; |
- if (password_manager_util::IsLoggingActive(client_)) { |
- logger.reset( |
- new BrowserSavePasswordProgressLogger(client_->GetLogManager())); |
- logger->LogMessage(Logger::STRING_ON_GET_STORE_RESULTS_METHOD); |
- logger->LogNumber(Logger::STRING_NUMBER_RESULTS, results.size()); |
- } |
- |
- form_fetcher_impl_.SetResults(std::move(results)); |
-} |
- |
-void PasswordFormManager::OnGetSiteStatistics( |
- std::vector<std::unique_ptr<InteractionsStats>> stats) { |
- // On Windows the password request may be resolved after the statistics due to |
- // importing from IE. |
- form_fetcher_impl_.SetStats(std::move(stats)); |
-} |
- |
void PasswordFormManager::ProcessUpdate() { |
DCHECK_EQ(FormFetcher::State::NOT_WAITING, form_fetcher_->GetState()); |
DCHECK(preferred_match_ || !pending_credentials_.federation_origin.unique()); |
@@ -1279,8 +1208,9 @@ void PasswordFormManager::LogSubmitFailed() { |
} |
void PasswordFormManager::WipeStoreCopyIfOutdated() { |
- UMA_HISTOGRAM_BOOLEAN("PasswordManager.StoreReadyWhenWiping", |
- HasCompletedMatching()); |
+ UMA_HISTOGRAM_BOOLEAN( |
+ "PasswordManager.StoreReadyWhenWiping", |
+ form_fetcher_->GetState() == FormFetcher::State::NOT_WAITING); |
form_saver_->WipeOutdatedCopies(pending_credentials_, &best_matches_, |
&preferred_match_); |