Index: chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
index a9cc0141aab23a663b0a24c365e6ed9a6fdf626e..d897ff63083a4a0dd14cee5adbb4bdf93b502f15 100644 |
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc |
@@ -6,6 +6,7 @@ |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/browsing_data/browsing_data_helper.h" |
+#include "chrome/browser/password_manager/chrome_password_manager_client.h" |
#include "chrome/browser/password_manager/password_store_factory.h" |
#include "chrome/browser/ui/browser_command_controller.h" |
#include "chrome/browser/ui/browser_finder.h" |
@@ -17,6 +18,7 @@ |
#include "chrome/browser/ui/tab_dialogs.h" |
#include "chrome/common/url_constants.h" |
#include "components/password_manager/content/common/credential_manager_types.h" |
+#include "components/password_manager/core/browser/browser_save_password_progress_logger.h" |
#include "components/password_manager/core/browser/password_form_manager.h" |
#include "content/public/browser/navigation_details.h" |
@@ -80,7 +82,7 @@ void ManagePasswordsUIController::UpdateBubbleAndIconVisibility() { |
// display either the bubble or the icon. |
if (!BrowsingDataHelper::IsWebScheme( |
web_contents()->GetLastCommittedURL().scheme())) { |
- state_ = password_manager::ui::INACTIVE_STATE; |
+ SetState(password_manager::ui::INACTIVE_STATE); |
} |
#if !defined(OS_ANDROID) |
@@ -99,7 +101,7 @@ base::TimeDelta ManagePasswordsUIController::Elapsed() const { |
void ManagePasswordsUIController::OnAskToReportURL(const GURL& url) { |
origin_ = url; |
- state_ = password_manager::ui::ASK_USER_REPORT_URL_STATE; |
+ SetState(password_manager::ui::ASK_USER_REPORT_URL_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -108,7 +110,7 @@ void ManagePasswordsUIController::OnPasswordSubmitted( |
form_manager_ = form_manager.Pass(); |
password_form_map_ = ConstifyMap(form_manager_->best_matches()); |
origin_ = PendingPassword().origin; |
- state_ = password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE; |
+ SetState(password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE); |
timer_.reset(new base::ElapsedTimer()); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -124,7 +126,7 @@ bool ManagePasswordsUIController::OnChooseCredentials( |
new_password_forms_.swap(local_credentials); |
// The map is useless because usernames may overlap. |
password_form_map_.clear(); |
- state_ = password_manager::ui::CREDENTIAL_REQUEST_AND_BUBBLE_STATE; |
+ SetState(password_manager::ui::CREDENTIAL_REQUEST_AND_BUBBLE_STATE); |
UpdateBubbleAndIconVisibility(); |
if (bubble_shown_) |
credentials_callback_ = callback; |
@@ -138,7 +140,7 @@ void ManagePasswordsUIController::OnAutomaticPasswordSave( |
password_form_map_[form_manager_->associated_username()] = |
&form_manager_->pending_credentials(); |
origin_ = form_manager_->pending_credentials().origin; |
- state_ = password_manager::ui::CONFIRMATION_STATE; |
+ SetState(password_manager::ui::CONFIRMATION_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -148,9 +150,9 @@ void ManagePasswordsUIController::OnPasswordAutofilled( |
origin_ = password_form_map_.begin()->second->origin; |
// Don't show the UI for PSL matched passwords. They are not stored for this |
// page and cannot be deleted. |
- state_ = password_form_map_.begin()->second->IsPublicSuffixMatch() |
+ SetState(password_form_map_.begin()->second->IsPublicSuffixMatch() |
? password_manager::ui::INACTIVE_STATE |
- : password_manager::ui::MANAGE_STATE; |
+ : password_manager::ui::MANAGE_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -158,7 +160,7 @@ void ManagePasswordsUIController::OnBlacklistBlockedAutofill( |
const PasswordFormMap& password_form_map) { |
DeepCopyMap(password_form_map, &password_form_map_, &new_password_forms_); |
origin_ = password_form_map_.begin()->second->origin; |
- state_ = password_manager::ui::BLACKLIST_STATE; |
+ SetState(password_manager::ui::BLACKLIST_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -176,13 +178,13 @@ void ManagePasswordsUIController::OnLoginsChanged( |
if (it->type() == password_manager::PasswordStoreChange::REMOVE) { |
password_form_map_.erase(changed_form.username_value); |
if (changed_form.blacklisted_by_user) |
- state_ = password_manager::ui::MANAGE_STATE; |
+ SetState(password_manager::ui::MANAGE_STATE); |
} else { |
new_password_forms_.push_back(new autofill::PasswordForm(changed_form)); |
password_form_map_[changed_form.username_value] = |
new_password_forms_.back(); |
if (changed_form.blacklisted_by_user) |
- state_ = password_manager::ui::BLACKLIST_STATE; |
+ SetState(password_manager::ui::BLACKLIST_STATE); |
} |
} |
// TODO(vasilii): handle CREDENTIAL_REQUEST_STATE. |
@@ -204,7 +206,7 @@ void ManagePasswordsUIController:: |
void ManagePasswordsUIController::SavePassword() { |
DCHECK(PasswordPendingUserDecision()); |
SavePasswordInternal(); |
- state_ = password_manager::ui::MANAGE_STATE; |
+ SetState(password_manager::ui::MANAGE_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -217,7 +219,7 @@ void ManagePasswordsUIController::ChooseCredential( |
password_manager::CredentialInfo(form) : |
password_manager::CredentialInfo(); |
credentials_callback_.Run(info); |
- state_ = password_manager::ui::INACTIVE_STATE; |
+ SetState(password_manager::ui::INACTIVE_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -229,7 +231,7 @@ void ManagePasswordsUIController::SavePasswordInternal() { |
void ManagePasswordsUIController::NeverSavePassword() { |
DCHECK(PasswordPendingUserDecision()); |
NeverSavePasswordInternal(); |
- state_ = password_manager::ui::BLACKLIST_STATE; |
+ SetState(password_manager::ui::BLACKLIST_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -253,7 +255,7 @@ void ManagePasswordsUIController::UnblacklistSite() { |
GetPasswordStore(web_contents()); |
if (password_store) |
password_store->RemoveLogin(*password_form_map_.begin()->second); |
- state_ = password_manager::ui::MANAGE_STATE; |
+ SetState(password_manager::ui::MANAGE_STATE); |
UpdateBubbleAndIconVisibility(); |
} |
@@ -275,12 +277,12 @@ void ManagePasswordsUIController::DidNavigateMainFrame( |
ASK_USER_REPORT_URL_BUBBLE_SHOWN_BEFORE_TRANSITION_STATE) { |
// TODO(melandory): Substitute this with a proper solution using |
// provisional_save_manager. |
- state_ = password_manager::ui::ASK_USER_REPORT_URL_BUBBLE_SHOWN_STATE; |
+ SetState(password_manager::ui::ASK_USER_REPORT_URL_BUBBLE_SHOWN_STATE); |
return; |
} |
// Otherwise, reset the password manager and the timer. |
- state_ = password_manager::ui::INACTIVE_STATE; |
+ SetState(password_manager::ui::INACTIVE_STATE); |
UpdateBubbleAndIconVisibility(); |
timer_.reset(new base::ElapsedTimer()); |
} |
@@ -291,6 +293,19 @@ void ManagePasswordsUIController::WasHidden() { |
#endif |
} |
+void ManagePasswordsUIController::SetState(password_manager::ui::State state) { |
+ password_manager::PasswordManagerClient* client = |
+ ChromePasswordManagerClient::FromWebContents(web_contents()); |
+ // |client| might be NULL in tests. |
+ if (client && client->IsLoggingActive()) { |
+ password_manager::BrowserSavePasswordProgressLogger logger(client); |
+ logger.LogNumber( |
+ autofill::SavePasswordProgressLogger::STRING_NEW_UI_STATE, |
+ state); |
+ } |
+ state_ = state; |
+} |
+ |
const autofill::PasswordForm& ManagePasswordsUIController:: |
PendingPassword() const { |
DCHECK(form_manager_); |
@@ -309,7 +324,7 @@ void ManagePasswordsUIController::UpdateIconAndBubbleState( |
GetEndStateForAutomaticState(state_); |
icon->SetState(end_state); |
ShowBubbleWithoutUserInteraction(); |
- state_ = end_state; |
+ SetState(end_state); |
} else { |
icon->SetState(state_); |
} |