Chromium Code Reviews| Index: chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.cc |
| diff --git a/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.cc b/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.cc |
| index ef305f76e095f2b9d912a9f160f8df57cbeb55f4..12e699f08fbcd3617b5cb92969c5fe0c5b0b0d98 100644 |
| --- a/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.cc |
| +++ b/chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.cc |
| @@ -12,6 +12,7 @@ |
| #include "base/memory/ptr_util.h" |
| #include "base/strings/string16.h" |
| #include "chrome/browser/chooser_controller/chooser_controller.h" |
| +#include "chrome/browser/platform_util.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_window.h" |
| #include "chrome/browser/ui/permission_bubble/chooser_bubble_delegate.h" |
| @@ -22,16 +23,23 @@ |
| #include "chrome/browser/ui/views/location_bar/location_bar_view.h" |
|
tapted
2017/05/03 01:10:53
these either
varkha
2017/05/03 05:01:21
Done (refactored out).
|
| #include "chrome/browser/ui/views/location_bar/location_icon_view.h" |
| #include "components/bubble/bubble_controller.h" |
| +#include "ui/base/ui_features.h" |
| #include "ui/views/controls/image_view.h" |
| #include "ui/views/controls/link.h" |
| #include "ui/views/controls/styled_label.h" |
| #include "ui/views/controls/table/table_view_observer.h" |
| #include "ui/views/window/dialog_client_view.h" |
| +#if defined(OS_MACOSX) && !BUILDFLAG(MAC_VIEWS_BROWSER) |
| +#import "chrome/browser/ui/cocoa/bubble_anchor_helper_views.h" |
|
tapted
2017/05/03 01:10:53
I don't think there's a precedent for #including s
varkha
2017/05/03 05:01:21
Done (refactored out).
|
| +#endif |
| + |
| +#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
| std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() { |
| - return base::MakeUnique<ChooserBubbleUiView>(browser_, |
| - std::move(chooser_controller_)); |
| + return base::MakeUnique<ChooserBubbleUiView>( |
| + browser_, std::move(chooser_controller_), gfx::Point()); |
| } |
| +#endif |
| /////////////////////////////////////////////////////////////////////////////// |
| // View implementation for the chooser bubble. |
| @@ -40,6 +48,7 @@ class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView, |
| public: |
| ChooserBubbleUiViewDelegate( |
| views::View* anchor_view, |
| + const gfx::Point& anchor_point, |
| views::BubbleBorder::Arrow anchor_arrow, |
| std::unique_ptr<ChooserController> chooser_controller); |
| ~ChooserBubbleUiViewDelegate() override; |
| @@ -80,6 +89,7 @@ class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView, |
| ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( |
| views::View* anchor_view, |
| + const gfx::Point& anchor_point, |
| views::BubbleBorder::Arrow anchor_arrow, |
| std::unique_ptr<ChooserController> chooser_controller) |
| : views::BubbleDialogDelegateView(anchor_view, anchor_arrow), |
| @@ -101,6 +111,8 @@ ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( |
| device_chooser_content_view_ = |
| new DeviceChooserContentView(this, std::move(chooser_controller)); |
| + if (!anchor_view) |
| + SetAnchorRect(gfx::Rect(anchor_point, gfx::Size())); |
| } |
| ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {} |
| @@ -184,12 +196,14 @@ void ChooserBubbleUiViewDelegate::UpdateTableView() const { |
| // ChooserBubbleUiView |
| ChooserBubbleUiView::ChooserBubbleUiView( |
| Browser* browser, |
| - std::unique_ptr<ChooserController> chooser_controller) |
| + std::unique_ptr<ChooserController> chooser_controller, |
| + const gfx::Point& anchor_point) |
| : browser_(browser), chooser_bubble_ui_view_delegate_(nullptr) { |
| DCHECK(browser_); |
| DCHECK(chooser_controller); |
| chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate( |
| - GetAnchorView(), GetAnchorArrow(), std::move(chooser_controller)); |
| + GetAnchorView(), anchor_point, GetAnchorArrow(), |
| + std::move(chooser_controller)); |
| } |
| ChooserBubbleUiView::~ChooserBubbleUiView() {} |
| @@ -198,14 +212,25 @@ void ChooserBubbleUiView::Show(BubbleReference bubble_reference) { |
| chooser_bubble_ui_view_delegate_->set_bubble_reference(bubble_reference); |
| // Set |parent_window| because some valid anchors can become hidden. |
| +#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
| views::Widget* widget = views::Widget::GetWidgetForNativeWindow( |
| browser_->window()->GetNativeWindow()); |
| - chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView()); |
| + gfx::NativeView parent = widget->GetNativeView(); |
| +#else |
| + gfx::NativeView parent = |
| + platform_util::GetViewForWindow(browser_->window()->GetNativeWindow()); |
| +#endif |
| + DCHECK(parent); |
| + chooser_bubble_ui_view_delegate_->set_parent_window(parent); |
| views::BubbleDialogDelegateView::CreateBubble( |
| chooser_bubble_ui_view_delegate_) |
| ->Show(); |
| +#if defined(OS_MACOSX) && !BUILDFLAG(MAC_VIEWS_BROWSER) |
| + KeepBubbleAnchored(chooser_bubble_ui_view_delegate_); |
| +#endif |
| + |
| chooser_bubble_ui_view_delegate_->UpdateTableView(); |
| } |
| @@ -217,6 +242,7 @@ void ChooserBubbleUiView::UpdateAnchorPosition() { |
| } |
| views::View* ChooserBubbleUiView::GetAnchorView() { |
| +#if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) |
|
tapted
2017/05/03 01:10:53
I think we need something similar to permission_pr
varkha
2017/05/03 05:01:21
Done.
|
| BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_); |
| if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) |
| @@ -228,6 +254,9 @@ views::View* ChooserBubbleUiView::GetAnchorView() { |
| return browser_view->exclusive_access_bubble()->GetView(); |
| return browser_view->top_container(); |
| +#else |
| + return nullptr; |
| +#endif |
| } |
| views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { |