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 31b70dac9c8aff19cd40e29dffdb63dfc4cca9b8..1cad30ff7d3bf4de0dba301f734f33bd4c399f11 100644 |
--- a/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc |
+++ b/chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc |
@@ -11,13 +11,13 @@ |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_finder.h" |
+#include "chrome/browser/ui/browser_window.h" |
#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" |
#include "chrome/browser/ui/passwords/password_dialog_prompts.h" |
#include "chrome/browser/ui/passwords/passwords_model_delegate.h" |
-#include "chrome/browser/ui/views/frame/browser_view.h" |
#include "chrome/browser/ui/views/harmony/layout_delegate.h" |
#include "chrome/browser/ui/views/passwords/credentials_item_view.h" |
-#include "chrome/browser/ui/views/passwords/credentials_selection_view.h" |
+#include "chrome/browser/ui/views/passwords/credentials_selection_view_views.h" |
#include "chrome/browser/ui/views/passwords/manage_password_items_view.h" |
#include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h" |
#include "chrome/grit/generated_resources.h" |
@@ -25,6 +25,7 @@ |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/material_design/material_design_controller.h" |
#include "ui/base/resource/resource_bundle.h" |
+#include "ui/base/ui_features.h" |
#include "ui/gfx/color_palette.h" |
#include "ui/gfx/image/image_skia.h" |
#include "ui/native_theme/native_theme.h" |
@@ -40,11 +41,16 @@ |
#include "ui/views/layout/layout_constants.h" |
#include "ui/views/widget/widget.h" |
+#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
+#include "chrome/browser/ui/views/frame/browser_view.h" |
+#endif |
+ |
#if defined(OS_WIN) |
#include "chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bubble_view.h" |
#endif |
int ManagePasswordsBubbleView::auto_signin_toast_timeout_ = 3; |
+bool g_bubble_shown_ = false; |
// Helpers -------------------------------------------------------------------- |
@@ -199,10 +205,12 @@ class ManagePasswordsBubbleView::AutoSigninView |
// views::ButtonListener: |
void ButtonPressed(views::Button* sender, const ui::Event& event) override; |
+#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
// views::WidgetObserver: |
// Tracks the state of the browser window. |
void OnWidgetActivationChanged(views::Widget* widget, bool active) override; |
void OnWidgetClosing(views::Widget* widget) override; |
+#endif |
void OnTimer(); |
static base::TimeDelta GetTimeout() { |
@@ -236,10 +244,15 @@ ManagePasswordsBubbleView::AutoSigninView::AutoSigninView( |
Browser* browser = |
chrome::FindBrowserWithWebContents(parent_->web_contents()); |
DCHECK(browser); |
+ |
+// On MacOS the BrowserView should but does not yet exist. The auto-sign-in |
tapted
2017/04/11 07:48:58
instead of The auto-sign-in... perhaps
Auto-close
varkha
2017/04/12 01:57:28
Done.
|
+// bubble may not auto-close when it gets created in a non-active browser. |
+// See http://crbug.com/468281. |
+#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); |
observed_browser_.Add(browser_view->GetWidget()); |
- |
- if (browser_view->IsActive()) |
+#endif |
+ if (browser->window()->IsActive()) |
timer_.Start(FROM_HERE, GetTimeout(), this, &AutoSigninView::OnTimer); |
} |
@@ -248,6 +261,7 @@ void ManagePasswordsBubbleView::AutoSigninView::ButtonPressed( |
NOTREACHED(); |
} |
+#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
void ManagePasswordsBubbleView::AutoSigninView::OnWidgetActivationChanged( |
views::Widget* widget, bool active) { |
if (active && !timer_.IsRunning()) |
@@ -258,6 +272,7 @@ void ManagePasswordsBubbleView::AutoSigninView::OnWidgetClosing( |
views::Widget* widget) { |
observed_browser_.RemoveAll(); |
} |
+#endif |
void ManagePasswordsBubbleView::AutoSigninView::OnTimer() { |
parent_->model()->OnAutoSignInToastTimeout(); |
@@ -698,6 +713,7 @@ void ManagePasswordsBubbleView::UpdatePendingView::StyledLabelLinkClicked( |
ManagePasswordsBubbleView* ManagePasswordsBubbleView::manage_passwords_bubble_ = |
NULL; |
+#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
// static |
void ManagePasswordsBubbleView::ShowBubble( |
content::WebContents* web_contents, |
@@ -720,7 +736,7 @@ void ManagePasswordsBubbleView::ShowBubble( |
} |
} |
manage_passwords_bubble_ = new ManagePasswordsBubbleView( |
- web_contents, anchor_view, reason); |
+ web_contents, anchor_view, gfx::Point(), reason); |
if (is_fullscreen) |
manage_passwords_bubble_->set_parent_window(web_contents->GetNativeView()); |
@@ -740,6 +756,7 @@ void ManagePasswordsBubbleView::ShowBubble( |
manage_passwords_bubble_->ShowForReason(reason); |
} |
+#endif // !OS_MACOSX || MAC_VIEWS_BROWSER |
// static |
void ManagePasswordsBubbleView::CloseCurrentBubble() { |
@@ -754,6 +771,11 @@ void ManagePasswordsBubbleView::ActivateBubble() { |
manage_passwords_bubble_->GetWidget()->Activate(); |
} |
+// static |
+bool ManagePasswordsBubbleView::IsBubbleShown() { |
+ return g_bubble_shown_; |
+} |
+ |
content::WebContents* ManagePasswordsBubbleView::web_contents() const { |
return model_.GetWebContents(); |
} |
@@ -761,8 +783,12 @@ content::WebContents* ManagePasswordsBubbleView::web_contents() const { |
ManagePasswordsBubbleView::ManagePasswordsBubbleView( |
content::WebContents* web_contents, |
views::View* anchor_view, |
+ const gfx::Point& anchor_point, |
DisplayReason reason) |
- : LocationBarBubbleDelegateView(anchor_view, web_contents), |
+ : LocationBarBubbleDelegateView(anchor_view, |
+ anchor_point, |
+ views::BubbleBorder::TOP_RIGHT, |
+ web_contents), |
model_(PasswordsModelDelegateFromWebContents(web_contents), |
reason == AUTOMATIC ? ManagePasswordsBubbleModel::AUTOMATIC |
: ManagePasswordsBubbleModel::USER_ACTION), |
@@ -774,6 +800,7 @@ ManagePasswordsBubbleView::ManagePasswordsBubbleView( |
gfx::Insets(LayoutDelegate::Get()->GetMetric( |
LayoutDelegate::Metric::PANEL_CONTENT_MARGIN), |
side_margin, 0, side_margin)); |
+ g_bubble_shown_ = true; |
} |
ManagePasswordsBubbleView::~ManagePasswordsBubbleView() { |
@@ -828,6 +855,10 @@ bool ManagePasswordsBubbleView::ShouldShowCloseButton() const { |
model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE; |
} |
+void ManagePasswordsBubbleView::OnWidgetDestroying(views::Widget* widget) { |
+ g_bubble_shown_ = false; |
tapted
2017/04/11 07:48:58
Does this work just as well in the destructor? --
varkha
2017/04/12 01:57:28
Done.
|
+} |
+ |
void ManagePasswordsBubbleView::Refresh() { |
RemoveAllChildViews(true); |
initially_focused_view_ = NULL; |