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

Unified Diff: chrome/browser/ui/views/website_settings/permissions_bubble_view.cc

Issue 1935993004: MacViews: support Views permission bubble (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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/website_settings/permissions_bubble_view.cc
diff --git a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
index 000a4de2e6e36b9dcf5bd1d7154aed5819ee8948..8cf12c6ee78a7fdced4d552bccd134effb590287 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
@@ -149,6 +149,7 @@ class PermissionsBubbleDialogDelegateView
public:
PermissionsBubbleDialogDelegateView(
views::View* anchor_view,
+ gfx::Point anchor_point,
tapted 2016/05/03 12:02:38 nit: const reference
Elly Fong-Jones 2016/05/10 21:21:02 Done.
views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::vector<PermissionBubbleRequest*>& requests,
@@ -191,6 +192,7 @@ class PermissionsBubbleDialogDelegateView
PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
views::View* anchor_view,
+ gfx::Point anchor_point,
views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::vector<PermissionBubbleRequest*>& requests,
@@ -200,6 +202,9 @@ PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
multiple_requests_(requests.size() > 1) {
DCHECK(!requests.empty());
+ if (!anchor_view)
+ SetAnchorRect(gfx::Rect(anchor_point, gfx::Size()));
tapted 2016/05/03 12:02:38 (see later comment about UpdateAnchor() -- it migh
Elly Fong-Jones 2016/05/10 21:21:02 It's not safe to call UpdateAnchor() yet at this p
tapted 2016/05/11 07:06:18 Sorry, I meant, instead of bubble_delegate_ = ne
+
set_close_on_deactivate(false);
SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0,
@@ -375,23 +380,39 @@ void PermissionsBubbleDialogDelegateView::UpdateAnchor(
//////////////////////////////////////////////////////////////////////////////
// PermissionBubbleViewViews
-PermissionBubbleViewViews::PermissionBubbleViewViews(Browser* browser)
+PermissionBubbleViewViews::PermissionBubbleViewViews(
+ Browser* browser,
+ std::unique_ptr<AnchorDelegate> anchor_delegate)
: browser_(browser),
delegate_(nullptr),
- bubble_delegate_(nullptr) {
+ bubble_delegate_(nullptr),
+ anchor_delegate_(std::move(anchor_delegate)) {
DCHECK(browser);
+ DCHECK(browser->window());
}
PermissionBubbleViewViews::~PermissionBubbleViewViews() {
}
-// static
-std::unique_ptr<PermissionBubbleView> PermissionBubbleView::Create(
- Browser* browser) {
- return base::WrapUnique(new PermissionBubbleViewViews(browser));
-}
+// On Mac, there is a separate Cocoa-specific definition of this function.
+#if !defined(OS_MACOSX)
tapted 2016/05/03 12:02:39 This approach won't work with the mac_views_browse
Elly Fong-Jones 2016/05/10 21:21:02 Done. I moved this class, and the CreateAnchorDel
+class ViewAnchorDelegate : public PermissionBubbleViewViews::AnchorDelegate {
tapted 2016/05/03 12:02:38 Perhaps ViewsBrowserAnchorDelegate? It should hav
Elly Fong-Jones 2016/05/10 21:21:02 Done.
+ public:
+ explicit ViewAnchorDelegate(Browser* browser);
+ ~ViewAnchorDelegate() override;
+ views::View* GetAnchorView() override;
tapted 2016/05/03 12:02:38 nit: // AnchorDelegate:
Elly Fong-Jones 2016/05/10 21:21:02 Done.
+ gfx::Point GetAnchorPoint() override;
+ gfx::NativeView GetParentView() override;
-views::View* PermissionBubbleViewViews::GetAnchorView() {
+ private:
+ Browser* browser_;
+};
tapted 2016/05/03 12:02:38 nit: DISALLOW_COPY_AND_ASSIGN(..)
Elly Fong-Jones 2016/05/10 21:21:02 Done.
+
+ViewAnchorDelegate::ViewAnchorDelegate(Browser* browser) : browser_(browser) {}
+
+ViewAnchorDelegate::~ViewAnchorDelegate() {}
+
+views::View* ViewAnchorDelegate::GetAnchorView() {
BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
@@ -403,6 +424,34 @@ views::View* PermissionBubbleViewViews::GetAnchorView() {
return browser_view->top_container();
}
+gfx::Point ViewAnchorDelegate::GetAnchorPoint() {
+ return gfx::Point();
+}
+
+gfx::NativeView ViewAnchorDelegate::GetParentView() {
+ views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
+ browser_->window()->GetNativeWindow());
+ return widget->GetNativeView();
+}
+
+// static
+std::unique_ptr<PermissionBubbleView> PermissionBubbleView::Create(
+ Browser* browser) {
+ unique_ptr<ViewAnchorDelegate> anchor_delegate(browser);
+ return base::WrapUnique(
+ new PermissionBubbleViewViews(browser, std::move(anchor_delegate)));
+}
+
+#endif
+
+views::View* PermissionBubbleViewViews::GetAnchorView() {
+ return anchor_delegate_->GetAnchorView();
+}
+
+gfx::Point PermissionBubbleViewViews::GetAnchorPoint() {
+ return anchor_delegate_->GetAnchorPoint();
+}
+
views::BubbleBorder::Arrow PermissionBubbleViewViews::GetAnchorArrow() {
if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
return views::BubbleBorder::TOP_LEFT;
@@ -420,12 +469,11 @@ void PermissionBubbleViewViews::Show(
bubble_delegate_->CloseBubble();
bubble_delegate_ = new PermissionsBubbleDialogDelegateView(
- GetAnchorView(), GetAnchorArrow(), this, requests, values);
+ GetAnchorView(), GetAnchorPoint(), GetAnchorArrow(), this, requests,
+ values);
// Set |parent_window| because some valid anchors can become hidden.
- views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
- browser_->window()->GetNativeWindow());
- bubble_delegate_->set_parent_window(widget->GetNativeView());
+ bubble_delegate_->set_parent_window(anchor_delegate_->GetParentView());
tapted 2016/05/03 12:02:38 I don't think we need AnchorDelegate::GetParentVie
Elly Fong-Jones 2016/05/10 21:21:02 Done.
views::BubbleDialogDelegateView::CreateBubble(bubble_delegate_)->Show();
bubble_delegate_->SizeToContents();

Powered by Google App Engine
This is Rietveld 408576698