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

Unified Diff: chrome/browser/ui/passwords/manage_passwords_bubble_model.cc

Issue 399573002: [Password Generation] Trigger confirmation bubble when a password is saved (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Win Again Created 6 years, 5 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: chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
diff --git a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
index e18bcc805e3dc0e19026043f8830b6f7460bc999..7b788884ad862b6213da7406130bf65ac092f773 100644
--- a/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_bubble_model.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
+#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
#include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_finder.h"
@@ -15,13 +17,31 @@
using autofill::PasswordFormMap;
using content::WebContents;
+namespace metrics_util = password_manager::metrics_util;
+
+namespace {
+
+void SetupLinkifiedText(const base::string16& string_with_separator,
+ base::string16* text,
+ gfx::Range* link_range) {
+ std::vector<base::string16> pieces;
+ base::SplitStringDontTrim(string_with_separator,
+ '|', // separator
+ &pieces);
+ DCHECK_EQ(3u, pieces.size());
+ *link_range = gfx::Range(pieces[0].size(),
+ pieces[0].size() + pieces[1].size());
+ *text = JoinString(pieces, base::string16());
+}
+
+} // namespace
ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
display_disposition_(
- password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING),
- dismissal_reason_(password_manager::metrics_util::NOT_DISPLAYED) {
+ metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING),
+ dismissal_reason_(metrics_util::NOT_DISPLAYED) {
ManagePasswordsUIController* controller =
ManagePasswordsUIController::FromWebContents(web_contents);
@@ -33,12 +53,21 @@ ManagePasswordsBubbleModel::ManagePasswordsBubbleModel(
pending_credentials_ = controller->PendingCredentials();
best_matches_ = controller->best_matches();
- if (password_manager::ui::IsPendingState(state_))
+ if (password_manager::ui::IsPendingState(state_)) {
title_ = l10n_util::GetStringUTF16(IDS_SAVE_PASSWORD);
- else if (state_ == password_manager::ui::BLACKLIST_STATE)
+ } else if (state_ == password_manager::ui::BLACKLIST_STATE) {
title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_BLACKLISTED_TITLE);
- else
+ } else if (state_ == password_manager::ui::CONFIRMATION_STATE) {
+ title_ =
+ l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE);
+ } else {
title_ = l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_TITLE);
+ }
+
+ SetupLinkifiedText(
+ l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TEXT),
+ &save_confirmation_text_,
+ &save_confirmation_link_range_);
manage_link_ =
l10n_util::GetStringUTF16(IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK);
@@ -50,41 +79,42 @@ void ManagePasswordsBubbleModel::OnBubbleShown(
ManagePasswordsBubble::DisplayReason reason) {
if (reason == ManagePasswordsBubble::USER_ACTION) {
if (password_manager::ui::IsPendingState(state_)) {
- display_disposition_ =
- password_manager::metrics_util::MANUAL_WITH_PASSWORD_PENDING;
+ display_disposition_ = metrics_util::MANUAL_WITH_PASSWORD_PENDING;
} else if (state_ == password_manager::ui::BLACKLIST_STATE) {
- display_disposition_ = password_manager::metrics_util::MANUAL_BLACKLISTED;
+ display_disposition_ = metrics_util::MANUAL_BLACKLISTED;
} else {
- display_disposition_ =
- password_manager::metrics_util::MANUAL_MANAGE_PASSWORDS;
+ display_disposition_ = metrics_util::MANUAL_MANAGE_PASSWORDS;
}
} else {
- DCHECK(password_manager::ui::IsPendingState(state_));
- display_disposition_ =
- password_manager::metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING;
+ if (state_ == password_manager::ui::CONFIRMATION_STATE) {
+ display_disposition_ =
+ metrics_util::AUTOMATIC_GENERATED_PASSWORD_CONFIRMATION;
+ } else {
+ display_disposition_ = metrics_util::AUTOMATIC_WITH_PASSWORD_PENDING;
+ }
}
- password_manager::metrics_util::LogUIDisplayDisposition(display_disposition_);
+ metrics_util::LogUIDisplayDisposition(display_disposition_);
// Default to a dismissal reason of "no interaction". If the user interacts
// with the button in such a way that it closes, we'll reset this value
// accordingly.
- dismissal_reason_ = password_manager::metrics_util::NO_DIRECT_INTERACTION;
+ dismissal_reason_ = metrics_util::NO_DIRECT_INTERACTION;
}
void ManagePasswordsBubbleModel::OnBubbleHidden() {
- if (dismissal_reason_ == password_manager::metrics_util::NOT_DISPLAYED)
+ if (dismissal_reason_ == metrics_util::NOT_DISPLAYED)
return;
- password_manager::metrics_util::LogUIDismissalReason(dismissal_reason_);
+ metrics_util::LogUIDismissalReason(dismissal_reason_);
}
void ManagePasswordsBubbleModel::OnNopeClicked() {
- dismissal_reason_ = password_manager::metrics_util::CLICKED_NOPE;
+ dismissal_reason_ = metrics_util::CLICKED_NOPE;
state_ = password_manager::ui::PENDING_PASSWORD_STATE;
}
void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() {
- dismissal_reason_ = password_manager::metrics_util::CLICKED_NEVER;
+ dismissal_reason_ = metrics_util::CLICKED_NEVER;
ManagePasswordsUIController* manage_passwords_ui_controller =
ManagePasswordsUIController::FromWebContents(web_contents());
manage_passwords_ui_controller->NeverSavePassword();
@@ -92,7 +122,7 @@ void ManagePasswordsBubbleModel::OnNeverForThisSiteClicked() {
}
void ManagePasswordsBubbleModel::OnUnblacklistClicked() {
- dismissal_reason_ = password_manager::metrics_util::CLICKED_UNBLACKLIST;
+ dismissal_reason_ = metrics_util::CLICKED_UNBLACKLIST;
ManagePasswordsUIController* manage_passwords_ui_controller =
ManagePasswordsUIController::FromWebContents(web_contents());
manage_passwords_ui_controller->UnblacklistSite();
@@ -100,7 +130,7 @@ void ManagePasswordsBubbleModel::OnUnblacklistClicked() {
}
void ManagePasswordsBubbleModel::OnSaveClicked() {
- dismissal_reason_ = password_manager::metrics_util::CLICKED_SAVE;
+ dismissal_reason_ = metrics_util::CLICKED_SAVE;
ManagePasswordsUIController* manage_passwords_ui_controller =
ManagePasswordsUIController::FromWebContents(web_contents());
manage_passwords_ui_controller->SavePassword();
@@ -108,15 +138,31 @@ void ManagePasswordsBubbleModel::OnSaveClicked() {
}
void ManagePasswordsBubbleModel::OnDoneClicked() {
- dismissal_reason_ = password_manager::metrics_util::CLICKED_DONE;
+ dismissal_reason_ = metrics_util::CLICKED_DONE;
+}
+
+// TODO(gcasto): Is it worth having this be separate from OnDoneClicked()?
+// User intent is pretty similar in both cases.
+void ManagePasswordsBubbleModel::OnOKClicked() {
+ dismissal_reason_ = metrics_util::CLICKED_OK;
}
void ManagePasswordsBubbleModel::OnManageLinkClicked() {
- dismissal_reason_ = password_manager::metrics_util::CLICKED_MANAGE;
+ dismissal_reason_ = metrics_util::CLICKED_MANAGE;
ManagePasswordsUIController::FromWebContents(web_contents())
->NavigateToPasswordManagerSettingsPage();
}
+// TODO(gcasto): Is it worth having a new dismissal reason to distinguish
+// the two management cases? User intention is pretty similar between the two,
+// but the context in which they are shown is pretty different since one is
+// from an explict action and the other isn't.
+void ManagePasswordsBubbleModel::OnRemoteManageLinkClicked() {
+ dismissal_reason_ = metrics_util::CLICKED_MANAGE;
+ ManagePasswordsUIController::FromWebContents(web_contents())
+ ->NavigateToAccountCentralManagementPage();
+}
+
void ManagePasswordsBubbleModel::OnPasswordAction(
const autofill::PasswordForm& password_form,
PasswordAction action) {

Powered by Google App Engine
This is Rietveld 408576698