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

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

Issue 1702333002: Don't close the password bubble on implicit navigations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments Created 4 years, 10 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_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 a1d1371a5b59216ef8a0e39ef6f69eccff3e231f..270ad0d1108eaa016e94b4f7071309c35aabe2d3 100644
--- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
+++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -59,7 +59,7 @@ DEFINE_WEB_CONTENTS_USER_DATA_KEY(ManagePasswordsUIController);
ManagePasswordsUIController::ManagePasswordsUIController(
content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
- should_pop_up_bubble_(false) {
+ bubble_status_(NOT_SHOWN) {
passwords_data_.set_client(
ChromePasswordManagerClient::FromWebContents(web_contents));
password_manager::PasswordStore* password_store =
@@ -82,7 +82,8 @@ void ManagePasswordsUIController::OnPasswordSubmitted(
if (stats && show_threshold > 0 && stats->dismissal_count >= show_threshold)
show_bubble = false;
}
- base::AutoReset<bool> resetter(&should_pop_up_bubble_, show_bubble);
+ if (show_bubble)
+ bubble_status_ = SHOULD_POP_UP;
UpdateBubbleAndIconVisibility();
}
@@ -90,7 +91,7 @@ void ManagePasswordsUIController::OnUpdatePasswordSubmitted(
scoped_ptr<PasswordFormManager> form_manager) {
DestroyAccountChooser();
passwords_data_.OnUpdatePassword(std::move(form_manager));
- base::AutoReset<bool> resetter(&should_pop_up_bubble_, true);
+ bubble_status_ = SHOULD_POP_UP;
UpdateBubbleAndIconVisibility();
}
@@ -122,7 +123,7 @@ void ManagePasswordsUIController::OnAutoSignin(
DCHECK(!local_forms.empty());
DestroyAccountChooser();
passwords_data_.OnAutoSignin(std::move(local_forms));
- base::AutoReset<bool> resetter(&should_pop_up_bubble_, true);
+ bubble_status_ = SHOULD_POP_UP;
UpdateBubbleAndIconVisibility();
}
@@ -141,7 +142,7 @@ void ManagePasswordsUIController::OnAutomaticPasswordSave(
scoped_ptr<PasswordFormManager> form_manager) {
DestroyAccountChooser();
passwords_data_.OnAutomaticPasswordSave(std::move(form_manager));
- base::AutoReset<bool> resetter(&should_pop_up_bubble_, true);
+ bubble_status_ = SHOULD_POP_UP;
UpdateBubbleAndIconVisibility();
}
@@ -171,12 +172,15 @@ void ManagePasswordsUIController::OnLoginsChanged(
void ManagePasswordsUIController::UpdateIconAndBubbleState(
ManagePasswordsIconView* icon) {
- if (should_pop_up_bubble_) {
+ if (bubble_status_ == SHOULD_POP_UP) {
DCHECK(!dialog_controller_);
// We must display the icon before showing the bubble, as the bubble would
// be otherwise unanchored.
icon->SetState(GetState());
ShowBubbleWithoutUserInteraction();
+ // If the bubble appeared then the status is updated in OnBubbleShown().
+ if (bubble_status_ == SHOULD_POP_UP)
+ bubble_status_ = NOT_SHOWN;
} else {
password_manager::ui::State state = GetState();
// The dialog should hide the icon.
@@ -236,10 +240,11 @@ ManagePasswordsUIController::GetCurrentInteractionStats() const {
}
void ManagePasswordsUIController::OnBubbleShown() {
- should_pop_up_bubble_ = false;
+ bubble_status_ = SHOWN;
}
void ManagePasswordsUIController::OnBubbleHidden() {
+ bubble_status_ = NOT_SHOWN;
if (GetState() == password_manager::ui::CONFIRMATION_STATE ||
GetState() == password_manager::ui::AUTO_SIGNIN_STATE) {
passwords_data_.TransitionToState(password_manager::ui::MANAGE_STATE);
@@ -388,12 +393,12 @@ void ManagePasswordsUIController::DidNavigateMainFrame(
if (details.is_in_page)
return;
- // Don't do anything if a redirect occurs. It is possible that the user was
- // not able to interact with the password bubble.
- if (ui::PageTransitionIsRedirect(params.transition))
+ // It is possible that the user was not able to interact with the password
+ // bubble.
+ if (bubble_status_ == SHOWN)
return;
- // Otherwise, reset the password manager and the timer.
+ // Otherwise, reset the password manager.
DestroyAccountChooser();
passwords_data_.OnInactive();
UpdateBubbleAndIconVisibility();
@@ -404,7 +409,7 @@ void ManagePasswordsUIController::WasHidden() {
}
void ManagePasswordsUIController::ShowBubbleWithoutUserInteraction() {
- DCHECK(should_pop_up_bubble_);
+ DCHECK(IsAutomaticallyOpeningBubble());
Browser* browser = chrome::FindBrowserWithWebContents(web_contents());
if (!browser || browser->toolbar_model()->input_in_progress())
return;

Powered by Google App Engine
This is Rietveld 408576698