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

Side by Side Diff: chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.cc

Issue 2853143003: MacViews: Allows the toolkit-views Device Chooser bubble to be used (Closed)
Patch Set: MacViews: Allows the toolkit-views Device Chooser bubble to be used Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.h" 5 #include "chrome/browser/ui/views/permission_bubble/chooser_bubble_ui_view.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/strings/string16.h" 13 #include "base/strings/string16.h"
14 #include "chrome/browser/chooser_controller/chooser_controller.h" 14 #include "chrome/browser/chooser_controller/chooser_controller.h"
15 #include "chrome/browser/platform_util.h"
15 #include "chrome/browser/ui/browser.h" 16 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_window.h" 17 #include "chrome/browser/ui/browser_window.h"
17 #include "chrome/browser/ui/permission_bubble/chooser_bubble_delegate.h" 18 #include "chrome/browser/ui/permission_bubble/chooser_bubble_delegate.h"
18 #include "chrome/browser/ui/views/device_chooser_content_view.h" 19 #include "chrome/browser/ui/views/device_chooser_content_view.h"
19 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" 20 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
20 #include "chrome/browser/ui/views/frame/browser_view.h" 21 #include "chrome/browser/ui/views/frame/browser_view.h"
tapted 2017/05/03 01:10:53 this header shouldn't be compiled on mac :/
varkha 2017/05/03 05:01:21 Done (refactored out).
21 #include "chrome/browser/ui/views/frame/top_container_view.h" 22 #include "chrome/browser/ui/views/frame/top_container_view.h"
22 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 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).
23 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" 24 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
24 #include "components/bubble/bubble_controller.h" 25 #include "components/bubble/bubble_controller.h"
26 #include "ui/base/ui_features.h"
25 #include "ui/views/controls/image_view.h" 27 #include "ui/views/controls/image_view.h"
26 #include "ui/views/controls/link.h" 28 #include "ui/views/controls/link.h"
27 #include "ui/views/controls/styled_label.h" 29 #include "ui/views/controls/styled_label.h"
28 #include "ui/views/controls/table/table_view_observer.h" 30 #include "ui/views/controls/table/table_view_observer.h"
29 #include "ui/views/window/dialog_client_view.h" 31 #include "ui/views/window/dialog_client_view.h"
30 32
33 #if defined(OS_MACOSX) && !BUILDFLAG(MAC_VIEWS_BROWSER)
34 #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).
35 #endif
36
37 #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
31 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() { 38 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
32 return base::MakeUnique<ChooserBubbleUiView>(browser_, 39 return base::MakeUnique<ChooserBubbleUiView>(
33 std::move(chooser_controller_)); 40 browser_, std::move(chooser_controller_), gfx::Point());
34 } 41 }
42 #endif
35 43
36 /////////////////////////////////////////////////////////////////////////////// 44 ///////////////////////////////////////////////////////////////////////////////
37 // View implementation for the chooser bubble. 45 // View implementation for the chooser bubble.
38 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView, 46 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
39 public views::TableViewObserver { 47 public views::TableViewObserver {
40 public: 48 public:
41 ChooserBubbleUiViewDelegate( 49 ChooserBubbleUiViewDelegate(
42 views::View* anchor_view, 50 views::View* anchor_view,
51 const gfx::Point& anchor_point,
43 views::BubbleBorder::Arrow anchor_arrow, 52 views::BubbleBorder::Arrow anchor_arrow,
44 std::unique_ptr<ChooserController> chooser_controller); 53 std::unique_ptr<ChooserController> chooser_controller);
45 ~ChooserBubbleUiViewDelegate() override; 54 ~ChooserBubbleUiViewDelegate() override;
46 55
47 // views::WidgetDelegate: 56 // views::WidgetDelegate:
48 base::string16 GetWindowTitle() const override; 57 base::string16 GetWindowTitle() const override;
49 58
50 // views::DialogDelegate: 59 // views::DialogDelegate:
51 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; 60 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
52 bool IsDialogButtonEnabled(ui::DialogButton button) const override; 61 bool IsDialogButtonEnabled(ui::DialogButton button) const override;
(...skipping 20 matching lines...) Expand all
73 82
74 private: 83 private:
75 DeviceChooserContentView* device_chooser_content_view_; 84 DeviceChooserContentView* device_chooser_content_view_;
76 BubbleReference bubble_reference_; 85 BubbleReference bubble_reference_;
77 86
78 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate); 87 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate);
79 }; 88 };
80 89
81 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( 90 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
82 views::View* anchor_view, 91 views::View* anchor_view,
92 const gfx::Point& anchor_point,
83 views::BubbleBorder::Arrow anchor_arrow, 93 views::BubbleBorder::Arrow anchor_arrow,
84 std::unique_ptr<ChooserController> chooser_controller) 94 std::unique_ptr<ChooserController> chooser_controller)
85 : views::BubbleDialogDelegateView(anchor_view, anchor_arrow), 95 : views::BubbleDialogDelegateView(anchor_view, anchor_arrow),
86 device_chooser_content_view_(nullptr) { 96 device_chooser_content_view_(nullptr) {
87 // ------------------------------------ 97 // ------------------------------------
88 // | Chooser bubble title | 98 // | Chooser bubble title |
89 // | -------------------------------- | 99 // | -------------------------------- |
90 // | | option 0 | | 100 // | | option 0 | |
91 // | | option 1 | | 101 // | | option 1 | |
92 // | | option 2 | | 102 // | | option 2 | |
93 // | | | | 103 // | | | |
94 // | | | | 104 // | | | |
95 // | | | | 105 // | | | |
96 // | -------------------------------- | 106 // | -------------------------------- |
97 // | [ Connect ] [ Cancel ] | 107 // | [ Connect ] [ Cancel ] |
98 // |----------------------------------| 108 // |----------------------------------|
99 // | Get help | 109 // | Get help |
100 // ------------------------------------ 110 // ------------------------------------
101 111
102 device_chooser_content_view_ = 112 device_chooser_content_view_ =
103 new DeviceChooserContentView(this, std::move(chooser_controller)); 113 new DeviceChooserContentView(this, std::move(chooser_controller));
114 if (!anchor_view)
115 SetAnchorRect(gfx::Rect(anchor_point, gfx::Size()));
104 } 116 }
105 117
106 ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {} 118 ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {}
107 119
108 base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const { 120 base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const {
109 return device_chooser_content_view_->GetWindowTitle(); 121 return device_chooser_content_view_->GetWindowTitle();
110 } 122 }
111 123
112 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel( 124 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel(
113 ui::DialogButton button) const { 125 ui::DialogButton button) const {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 } 189 }
178 190
179 void ChooserBubbleUiViewDelegate::UpdateTableView() const { 191 void ChooserBubbleUiViewDelegate::UpdateTableView() const {
180 device_chooser_content_view_->UpdateTableView(); 192 device_chooser_content_view_->UpdateTableView();
181 } 193 }
182 194
183 ////////////////////////////////////////////////////////////////////////////// 195 //////////////////////////////////////////////////////////////////////////////
184 // ChooserBubbleUiView 196 // ChooserBubbleUiView
185 ChooserBubbleUiView::ChooserBubbleUiView( 197 ChooserBubbleUiView::ChooserBubbleUiView(
186 Browser* browser, 198 Browser* browser,
187 std::unique_ptr<ChooserController> chooser_controller) 199 std::unique_ptr<ChooserController> chooser_controller,
200 const gfx::Point& anchor_point)
188 : browser_(browser), chooser_bubble_ui_view_delegate_(nullptr) { 201 : browser_(browser), chooser_bubble_ui_view_delegate_(nullptr) {
189 DCHECK(browser_); 202 DCHECK(browser_);
190 DCHECK(chooser_controller); 203 DCHECK(chooser_controller);
191 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate( 204 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate(
192 GetAnchorView(), GetAnchorArrow(), std::move(chooser_controller)); 205 GetAnchorView(), anchor_point, GetAnchorArrow(),
206 std::move(chooser_controller));
193 } 207 }
194 208
195 ChooserBubbleUiView::~ChooserBubbleUiView() {} 209 ChooserBubbleUiView::~ChooserBubbleUiView() {}
196 210
197 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) { 211 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
198 chooser_bubble_ui_view_delegate_->set_bubble_reference(bubble_reference); 212 chooser_bubble_ui_view_delegate_->set_bubble_reference(bubble_reference);
199 213
200 // Set |parent_window| because some valid anchors can become hidden. 214 // Set |parent_window| because some valid anchors can become hidden.
215 #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
201 views::Widget* widget = views::Widget::GetWidgetForNativeWindow( 216 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
202 browser_->window()->GetNativeWindow()); 217 browser_->window()->GetNativeWindow());
203 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView()); 218 gfx::NativeView parent = widget->GetNativeView();
219 #else
220 gfx::NativeView parent =
221 platform_util::GetViewForWindow(browser_->window()->GetNativeWindow());
222 #endif
223 DCHECK(parent);
224 chooser_bubble_ui_view_delegate_->set_parent_window(parent);
204 225
205 views::BubbleDialogDelegateView::CreateBubble( 226 views::BubbleDialogDelegateView::CreateBubble(
206 chooser_bubble_ui_view_delegate_) 227 chooser_bubble_ui_view_delegate_)
207 ->Show(); 228 ->Show();
208 229
230 #if defined(OS_MACOSX) && !BUILDFLAG(MAC_VIEWS_BROWSER)
231 KeepBubbleAnchored(chooser_bubble_ui_view_delegate_);
232 #endif
233
209 chooser_bubble_ui_view_delegate_->UpdateTableView(); 234 chooser_bubble_ui_view_delegate_->UpdateTableView();
210 } 235 }
211 236
212 void ChooserBubbleUiView::Close() {} 237 void ChooserBubbleUiView::Close() {}
213 238
214 void ChooserBubbleUiView::UpdateAnchorPosition() { 239 void ChooserBubbleUiView::UpdateAnchorPosition() {
215 chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(), 240 chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(),
216 GetAnchorArrow()); 241 GetAnchorArrow());
217 } 242 }
218 243
219 views::View* ChooserBubbleUiView::GetAnchorView() { 244 views::View* ChooserBubbleUiView::GetAnchorView() {
245 #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.
220 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_); 246 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
221 247
222 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 248 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
223 return browser_view->GetLocationBarView() 249 return browser_view->GetLocationBarView()
224 ->location_icon_view() 250 ->location_icon_view()
225 ->GetImageView(); 251 ->GetImageView();
226 252
227 if (browser_view->IsFullscreenBubbleVisible()) 253 if (browser_view->IsFullscreenBubbleVisible())
228 return browser_view->exclusive_access_bubble()->GetView(); 254 return browser_view->exclusive_access_bubble()->GetView();
229 255
230 return browser_view->top_container(); 256 return browser_view->top_container();
257 #else
258 return nullptr;
259 #endif
231 } 260 }
232 261
233 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { 262 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() {
234 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 263 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
235 return views::BubbleBorder::TOP_LEFT; 264 return views::BubbleBorder::TOP_LEFT;
236 return views::BubbleBorder::NONE; 265 return views::BubbleBorder::NONE;
237 } 266 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698