Chromium Code Reviews| 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) |