| 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)
|
|
|