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

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: fix typo in chrome_browser_ui.gypi Created 4 years, 7 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 de5127967e7dd639579e09cc22c57f20e505b684..da0b51f2e74bb5ce4ccb4f3f574eb625da928673 100644
--- a/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
+++ b/chrome/browser/ui/views/website_settings/permissions_bubble_view.cc
@@ -9,13 +9,11 @@
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/strings/string16.h"
+#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
-#include "chrome/browser/ui/views/frame/browser_view.h"
-#include "chrome/browser/ui/views/frame/top_container_view.h"
-#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
-#include "chrome/browser/ui/views/location_bar/location_icon_view.h"
#include "chrome/browser/ui/views/website_settings/permission_selector_view.h"
#include "chrome/browser/ui/views/website_settings/permission_selector_view_observer.h"
#include "chrome/browser/ui/website_settings/permission_bubble_request.h"
@@ -148,8 +146,6 @@ class PermissionsBubbleDialogDelegateView
public PermissionCombobox::Listener {
public:
PermissionsBubbleDialogDelegateView(
- views::View* anchor_view,
- views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::vector<PermissionBubbleRequest*>& requests,
const std::vector<bool>& accept_state);
@@ -177,6 +173,7 @@ class PermissionsBubbleDialogDelegateView
// Updates the anchor's arrow and view. Also repositions the bubble so it's
// displayed in the correct location.
void UpdateAnchor(views::View* anchor_view,
+ const gfx::Point& anchor_point,
views::BubbleBorder::Arrow anchor_arrow);
private:
@@ -190,13 +187,10 @@ class PermissionsBubbleDialogDelegateView
};
PermissionsBubbleDialogDelegateView::PermissionsBubbleDialogDelegateView(
- views::View* anchor_view,
- views::BubbleBorder::Arrow anchor_arrow,
PermissionBubbleViewViews* owner,
const std::vector<PermissionBubbleRequest*>& requests,
const std::vector<bool>& accept_state)
- : views::BubbleDialogDelegateView(anchor_view, anchor_arrow),
- owner_(owner),
+ : owner_(owner),
multiple_requests_(requests.size() > 1) {
DCHECK(!requests.empty());
@@ -353,10 +347,8 @@ void PermissionsBubbleDialogDelegateView::PermissionSelectionChanged(
void PermissionsBubbleDialogDelegateView::UpdateAnchor(
views::View* anchor_view,
+ const gfx::Point& anchor_point,
views::BubbleBorder::Arrow anchor_arrow) {
- if (GetAnchorView() == anchor_view && arrow() == anchor_arrow)
- return;
-
set_arrow(anchor_arrow);
// Update the border in the bubble: will either add or remove the arrow.
@@ -369,7 +361,10 @@ void PermissionsBubbleDialogDelegateView::UpdateAnchor(
new views::BubbleBorder(adjusted_arrow, shadow(), color())));
// Reposition the bubble based on the updated arrow and view.
- SetAnchorView(anchor_view);
+ if (anchor_view)
+ SetAnchorView(anchor_view);
+ else
+ SetAnchorRect(gfx::Rect(anchor_point, gfx::Size()));
}
//////////////////////////////////////////////////////////////////////////////
@@ -380,35 +375,12 @@ PermissionBubbleViewViews::PermissionBubbleViewViews(Browser* browser)
delegate_(nullptr),
bubble_delegate_(nullptr) {
DCHECK(browser);
+ DCHECK(browser->window());
}
PermissionBubbleViewViews::~PermissionBubbleViewViews() {
}
-// static
-std::unique_ptr<PermissionBubbleView> PermissionBubbleView::Create(
- Browser* browser) {
- return base::WrapUnique(new PermissionBubbleViewViews(browser));
-}
-
-views::View* PermissionBubbleViewViews::GetAnchorView() {
- BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
-
- if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
- return browser_view->GetLocationBarView()->location_icon_view();
-
- if (browser_view->IsFullscreenBubbleVisible())
- return browser_view->exclusive_access_bubble()->GetView();
-
- return browser_view->top_container();
-}
-
-views::BubbleBorder::Arrow PermissionBubbleViewViews::GetAnchorArrow() {
- if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
- return views::BubbleBorder::TOP_LEFT;
- return views::BubbleBorder::NONE;
-}
-
void PermissionBubbleViewViews::SetDelegate(Delegate* delegate) {
delegate_ = delegate;
}
@@ -420,15 +392,18 @@ void PermissionBubbleViewViews::Show(
bubble_delegate_->CloseBubble();
bubble_delegate_ = new PermissionsBubbleDialogDelegateView(
- GetAnchorView(), GetAnchorArrow(), this, requests, values);
+ 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(
+ platform_util::GetViewForWindow(browser_->window()->GetNativeWindow()));
views::BubbleDialogDelegateView::CreateBubble(bubble_delegate_)->Show();
bubble_delegate_->SizeToContents();
+
+ bubble_delegate_->UpdateAnchor(GetAnchorView(),
+ GetAnchorPoint(),
+ GetAnchorArrow());
}
bool PermissionBubbleViewViews::CanAcceptRequestUpdate() {
@@ -447,8 +422,13 @@ bool PermissionBubbleViewViews::IsVisible() {
}
void PermissionBubbleViewViews::UpdateAnchorPosition() {
- if (IsVisible())
- bubble_delegate_->UpdateAnchor(GetAnchorView(), GetAnchorArrow());
+ if (IsVisible()) {
+ bubble_delegate_->set_parent_window(
+ platform_util::GetViewForWindow(browser_->window()->GetNativeWindow()));
+ bubble_delegate_->UpdateAnchor(GetAnchorView(),
+ GetAnchorPoint(),
+ GetAnchorArrow());
+ }
}
gfx::NativeWindow PermissionBubbleViewViews::GetNativeWindow() {

Powered by Google App Engine
This is Rietveld 408576698