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

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

Issue 733463003: Show user credentials chooser bubble. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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_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 4afd3205d9c9fbdedc93ca8d61d96185b30a93a8..2c5ca00bff5fb168d2958474b360d907cb48d6c5 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/ui/passwords/manage_passwords_icon.h"
#include "chrome/browser/ui/passwords/password_bubble_experiment.h"
#include "chrome/common/url_constants.h"
+#include "components/password_manager/content/common/credential_manager_types.h"
#include "components/password_manager/core/browser/password_store.h"
#include "content/public/browser/notification_service.h"
@@ -64,7 +65,8 @@ DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController);
ManagePasswordsUIController::ManagePasswordsUIController(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
- state_(password_manager::ui::INACTIVE_STATE) {
+ state_(password_manager::ui::INACTIVE_STATE),
+ bubble_shown_(false) {
password_manager::PasswordStore* password_store =
GetPasswordStore(web_contents);
if (password_store)
@@ -74,6 +76,7 @@ ManagePasswordsUIController::ManagePasswordsUIController(
ManagePasswordsUIController::~ManagePasswordsUIController() {}
void ManagePasswordsUIController::UpdateBubbleAndIconVisibility() {
+ bubble_shown_ = false;
// If we're not on a "webby" URL (e.g. "chrome://sign-in"), we shouldn't
// display either the bubble or the icon.
if (!BrowsingDataHelper::IsWebScheme(
@@ -81,25 +84,41 @@ void ManagePasswordsUIController::UpdateBubbleAndIconVisibility() {
state_ = password_manager::ui::INACTIVE_STATE;
}
- #if !defined(OS_ANDROID)
- Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
- if (!browser)
- return;
- LocationBar* location_bar = browser->window()->GetLocationBar();
- DCHECK(location_bar);
- location_bar->UpdateManagePasswordsIconAndBubble();
- #endif
+#if !defined(OS_ANDROID)
+ Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
+ if (!browser)
+ return;
+ LocationBar* location_bar = browser->window()->GetLocationBar();
+ DCHECK(location_bar);
+ location_bar->UpdateManagePasswordsIconAndBubble();
+#endif
}
void ManagePasswordsUIController::OnPasswordSubmitted(
scoped_ptr<PasswordFormManager> form_manager) {
form_manager_ = form_manager.Pass();
password_form_map_ = ConstifyMap(form_manager_->best_matches());
- origin_ = PendingCredentials().origin;
+ origin_ = PendingPassword().origin;
state_ = password_manager::ui::PENDING_PASSWORD_AND_BUBBLE_STATE;
UpdateBubbleAndIconVisibility();
}
+bool ManagePasswordsUIController::OnChooseCredentials(
+ ScopedVector<autofill::PasswordForm> credentials,
+ base::Callback<void(const password_manager::CredentialInfo&)> callback){
+ DCHECK(!credentials.empty());
+ form_manager_.reset();
+ origin_ = credentials[0]->origin;
+ new_password_forms_.swap(credentials);
+ // The map is useless because usernames may overlap.
Mike West 2014/11/20 08:19:32 TODO(vasilii)? :)
vasilii 2014/11/20 15:08:05 TODO what? It's useful for other states.
Mike West 2014/11/21 11:21:12 Yeah, I misunderstood this comment. Sorry for the
+ password_form_map_.clear();
+ state_ = password_manager::ui::PENDING_CREDENTIALS_AND_BUBBLE_STATE;
+ UpdateBubbleAndIconVisibility();
+ if (bubble_shown_)
Mike West 2014/11/20 08:19:32 When wouldn't the bubble be shown?
vasilii 2014/11/20 15:08:05 There is a condition in ShowBubbleWithoutUserInter
Mike West 2014/11/21 11:21:12 Hrm. Ok. I hope that case will be impossible to re
+ credentials_callback_ = callback;
Mike West 2014/11/20 08:19:31 We need to callback to Blink even if the user does
vasilii 2014/11/20 15:08:05 if we return false then this case is handled immed
Mike West 2014/11/21 11:21:12 Acknowledged.
+ return bubble_shown_;
+}
+
void ManagePasswordsUIController::OnAutomaticPasswordSave(
scoped_ptr<PasswordFormManager> form_manager) {
form_manager_ = form_manager.Pass();
@@ -157,6 +176,10 @@ void ManagePasswordsUIController::OnLoginsChanged(
state_ = password_manager::ui::BLACKLIST_STATE;
}
}
+ // If we're in PENDING_CREDENTIALS_AND_BUBBLE_STATE just close the bubble.
+ if (current_state ==
+ password_manager::ui::PENDING_CREDENTIALS_AND_BUBBLE_STATE)
+ state_ = password_manager::ui::INACTIVE_STATE;
Mike West 2014/11/20 08:19:31 This seems wrong; if I have another window open, a
vasilii 2014/11/20 15:08:05 You are right. I removed this code. What should we
Mike West 2014/11/21 11:21:12 I'd just add a TODO for now; I don't think we have
vasilii 2014/11/21 16:45:37 Done.
if (current_state != state_)
UpdateBubbleAndIconVisibility();
}
@@ -179,6 +202,19 @@ void ManagePasswordsUIController::SavePassword() {
UpdateBubbleAndIconVisibility();
}
+void ManagePasswordsUIController::ChooseCredential(
+ bool was_chosen,
+ const autofill::PasswordForm& form) {
+ DCHECK_EQ(password_manager::ui::PENDING_CREDENTIALS_AND_BUBBLE_STATE, state_);
+ DCHECK(!credentials_callback_.is_null());
+ password_manager::CredentialInfo info = was_chosen ?
+ password_manager::CredentialInfo(form) :
+ password_manager::CredentialInfo();
+ credentials_callback_.Run(info);
+ state_ = password_manager::ui::INACTIVE_STATE;
+ UpdateBubbleAndIconVisibility();
+}
+
void ManagePasswordsUIController::SavePasswordInternal() {
DCHECK(form_manager_.get());
form_manager_->Save();
@@ -240,7 +276,7 @@ void ManagePasswordsUIController::WasHidden() {
}
const autofill::PasswordForm& ManagePasswordsUIController::
- PendingCredentials() const {
+ PendingPassword() const {
DCHECK(form_manager_);
return form_manager_->pending_credentials();
}
@@ -263,6 +299,10 @@ void ManagePasswordsUIController::UpdateIconAndBubbleState(
}
}
+void ManagePasswordsUIController::OnBubbleShown() {
+ bubble_shown_ = true;
+}
+
void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() {
DCHECK(password_manager::ui::IsAutomaticDisplayState(state_));
#if !defined(OS_ANDROID)

Powered by Google App Engine
This is Rietveld 408576698