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

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: Aura compilation 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..e5932d08c6f876e92d30c35fbef8cac07d87f084 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.
+ password_form_map_.clear();
+ state_ = password_manager::ui::CREDENTIAL_REQUEST_STATE;
+ UpdateBubbleAndIconVisibility();
+ if (bubble_shown_)
+ credentials_callback_ = callback;
+ return bubble_shown_;
+}
+
void ManagePasswordsUIController::OnAutomaticPasswordSave(
scoped_ptr<PasswordFormManager> form_manager) {
form_manager_ = form_manager.Pass();
@@ -179,6 +198,19 @@ void ManagePasswordsUIController::SavePassword() {
UpdateBubbleAndIconVisibility();
}
+void ManagePasswordsUIController::ChooseCredential(
+ bool was_chosen,
+ const autofill::PasswordForm& form) {
+ DCHECK_EQ(password_manager::ui::CREDENTIAL_REQUEST_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 +272,7 @@ void ManagePasswordsUIController::WasHidden() {
}
const autofill::PasswordForm& ManagePasswordsUIController::
- PendingCredentials() const {
+ PendingPassword() const {
DCHECK(form_manager_);
return form_manager_->pending_credentials();
}
@@ -263,6 +295,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