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

Unified Diff: chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc

Issue 1016003002: Show the password bubble even if the browser window has no focus. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed the comments from sky@ Created 5 years, 9 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/views/passwords/manage_passwords_bubble_view.cc
diff --git a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
index 6bfece7f18862c5704c1ee453701bb69516d6d1c..bfcb4986c766a3182f3306c67bc4e31dc20dfdc1 100644
--- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
+++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc
@@ -36,12 +36,12 @@
#include "ui/views/layout/layout_constants.h"
#include "ui/views/widget/widget.h"
+int ManagePasswordsBubbleView::auto_signin_toast_timeout_ = 3;
// Helpers --------------------------------------------------------------------
namespace {
-const int kAutoSigninToastTimeout = 3;
const int kDesiredBubbleWidth = 370;
enum ColumnSetType {
@@ -168,6 +168,8 @@ class ManagePasswordsBubbleView::AccountChooserView
ManagePasswordsBubbleView* parent_;
views::LabelButton* cancel_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(AccountChooserView);
};
ManagePasswordsBubbleView::AccountChooserView::AccountChooserView(
@@ -245,7 +247,8 @@ void ManagePasswordsBubbleView::AccountChooserView::ButtonPressed(
// in.
class ManagePasswordsBubbleView::AutoSigninView
: public views::View,
- public views::ButtonListener {
+ public views::ButtonListener,
+ public views::WidgetObserver {
public:
explicit AutoSigninView(ManagePasswordsBubbleView* parent);
@@ -253,15 +256,28 @@ class ManagePasswordsBubbleView::AutoSigninView
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
+ // views::WidgetObserver:
+ // Tracks the state of the browser window.
+ void OnWidgetActivationChanged(views::Widget* widget, bool active) override;
+ void OnWidgetClosing(views::Widget* widget) override;
+
void OnTimer();
+ static base::TimeDelta GetTimeout() {
+ return base::TimeDelta::FromSeconds(
+ ManagePasswordsBubbleView::auto_signin_toast_timeout_);
+ }
base::OneShotTimer<AutoSigninView> timer_;
ManagePasswordsBubbleView* parent_;
+ ScopedObserver<views::Widget, views::WidgetObserver> observed_browser_;
+
+ DISALLOW_COPY_AND_ASSIGN(AutoSigninView);
};
ManagePasswordsBubbleView::AutoSigninView::AutoSigninView(
ManagePasswordsBubbleView* parent)
- : parent_(parent) {
+ : parent_(parent),
+ observed_browser_(this) {
SetLayoutManager(new views::FillLayout);
CredentialsItemView* credential = new CredentialsItemView(
this,
@@ -272,8 +288,14 @@ ManagePasswordsBubbleView::AutoSigninView::AutoSigninView(
AddChildView(credential);
parent_->set_initially_focused_view(credential);
- timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(kAutoSigninToastTimeout),
- this, &AutoSigninView::OnTimer);
+ Browser* browser =
+ chrome::FindBrowserWithWebContents(parent_->web_contents());
+ DCHECK(browser);
+ BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
+ observed_browser_.Add(browser_view->GetWidget());
+
+ if (browser_view->IsActive())
+ timer_.Start(FROM_HERE, GetTimeout(), this, &AutoSigninView::OnTimer);
}
void ManagePasswordsBubbleView::AutoSigninView::ButtonPressed(
@@ -282,6 +304,17 @@ void ManagePasswordsBubbleView::AutoSigninView::ButtonPressed(
parent_->Close();
}
+void ManagePasswordsBubbleView::AutoSigninView::OnWidgetActivationChanged(
+ views::Widget* widget, bool active) {
+ if (active && !timer_.IsRunning())
+ timer_.Start(FROM_HERE, GetTimeout(), this, &AutoSigninView::OnTimer);
+}
+
+void ManagePasswordsBubbleView::AutoSigninView::OnWidgetClosing(
+ views::Widget* widget) {
+ observed_browser_.RemoveAll();
+}
+
void ManagePasswordsBubbleView::AutoSigninView::OnTimer() {
parent_->model()->OnAutoSignInToastTimeout();
parent_->Close();
@@ -316,6 +349,8 @@ class ManagePasswordsBubbleView::PendingView : public views::View,
// delete the model _after_ the combobox itself is deleted.
scoped_ptr<SavePasswordRefusalComboboxModel> combobox_model_;
scoped_ptr<views::Combobox> refuse_combobox_;
+
+ DISALLOW_COPY_AND_ASSIGN(PendingView);
};
ManagePasswordsBubbleView::PendingView::PendingView(
@@ -406,6 +441,8 @@ class ManagePasswordsBubbleView::ConfirmNeverView
views::LabelButton* confirm_button_;
views::LabelButton* undo_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(ConfirmNeverView);
};
ManagePasswordsBubbleView::ConfirmNeverView::ConfirmNeverView(
@@ -494,6 +531,8 @@ class ManagePasswordsBubbleView::ManageView : public views::View,
views::Link* manage_link_;
views::LabelButton* done_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(ManageView);
};
ManagePasswordsBubbleView::ManageView::ManageView(
@@ -595,6 +634,8 @@ class ManagePasswordsBubbleView::ManageAccountsView
views::Link* manage_link_;
views::LabelButton* done_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(ManageAccountsView);
};
ManagePasswordsBubbleView::ManageAccountsView::ManageAccountsView(
@@ -686,6 +727,8 @@ class ManagePasswordsBubbleView::BlacklistedView
views::BlueButton* unblacklist_button_;
views::LabelButton* done_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(BlacklistedView);
};
ManagePasswordsBubbleView::BlacklistedView::BlacklistedView(
@@ -770,8 +813,9 @@ class ManagePasswordsBubbleView::SaveConfirmationView
int event_flags) override;
ManagePasswordsBubbleView* parent_;
-
views::LabelButton* ok_button_;
+
+ DISALLOW_COPY_AND_ASSIGN(SaveConfirmationView);
};
ManagePasswordsBubbleView::SaveConfirmationView::SaveConfirmationView(

Powered by Google App Engine
This is Rietveld 408576698