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

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

Issue 2155743002: Add throbber and status text to WebBluetooth chooser UI on non-Mac desktops (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removed unnecessary include file Created 4 years, 5 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/website_settings/chooser_bubble_ui_view.h" 5 #include "chrome/browser/ui/views/website_settings/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/ui/browser.h" 15 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_window.h" 16 #include "chrome/browser/ui/browser_window.h"
17 #include "chrome/browser/ui/views/chooser_content_view.h" 17 #include "chrome/browser/ui/views/chooser_content_view.h"
18 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" 18 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
19 #include "chrome/browser/ui/views/frame/browser_view.h" 19 #include "chrome/browser/ui/views/frame/browser_view.h"
20 #include "chrome/browser/ui/views/frame/top_container_view.h" 20 #include "chrome/browser/ui/views/frame/top_container_view.h"
21 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 21 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
22 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" 22 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
23 #include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h" 23 #include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h"
24 #include "components/bubble/bubble_controller.h" 24 #include "components/bubble/bubble_controller.h"
25 #include "ui/views/controls/styled_label.h" 25 #include "ui/views/controls/styled_label.h"
26 #include "ui/views/controls/styled_label_listener.h"
27 #include "ui/views/controls/table/table_view_observer.h" 26 #include "ui/views/controls/table/table_view_observer.h"
28 #include "ui/views/window/dialog_client_view.h" 27 #include "ui/views/window/dialog_client_view.h"
29 28
30 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() { 29 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
31 return base::WrapUnique( 30 return base::WrapUnique(
32 new ChooserBubbleUiView(browser_, std::move(chooser_controller_))); 31 new ChooserBubbleUiView(browser_, std::move(chooser_controller_)));
33 } 32 }
34 33
35 /////////////////////////////////////////////////////////////////////////////// 34 ///////////////////////////////////////////////////////////////////////////////
36 // View implementation for the chooser bubble. 35 // View implementation for the chooser bubble.
37 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView, 36 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
38 public views::StyledLabelListener,
39 public views::TableViewObserver { 37 public views::TableViewObserver {
40 public: 38 public:
41 ChooserBubbleUiViewDelegate( 39 ChooserBubbleUiViewDelegate(
42 views::View* anchor_view, 40 views::View* anchor_view,
43 views::BubbleBorder::Arrow anchor_arrow, 41 views::BubbleBorder::Arrow anchor_arrow,
44 std::unique_ptr<ChooserController> chooser_controller); 42 std::unique_ptr<ChooserController> chooser_controller);
45 ~ChooserBubbleUiViewDelegate() override; 43 ~ChooserBubbleUiViewDelegate() override;
46 44
47 // views::WidgetDelegate: 45 // views::WidgetDelegate:
48 base::string16 GetWindowTitle() const override; 46 base::string16 GetWindowTitle() const override;
49 47
50 // views::DialogDelegate: 48 // views::DialogDelegate:
51 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; 49 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
52 bool IsDialogButtonEnabled(ui::DialogButton button) const override; 50 bool IsDialogButtonEnabled(ui::DialogButton button) const override;
51 views::View* CreateExtraView() override;
53 views::View* CreateFootnoteView() override; 52 views::View* CreateFootnoteView() override;
54 bool Accept() override; 53 bool Accept() override;
55 bool Cancel() override; 54 bool Cancel() override;
56 bool Close() override; 55 bool Close() override;
57 56
58 // views::DialogDelegateView: 57 // views::DialogDelegateView:
59 views::View* GetContentsView() override; 58 views::View* GetContentsView() override;
60 views::Widget* GetWidget() override; 59 views::Widget* GetWidget() override;
61 const views::Widget* GetWidget() const override; 60 const views::Widget* GetWidget() const override;
62 61
63 // views::StyledLabelListener:
64 void StyledLabelLinkClicked(views::StyledLabel* label,
65 const gfx::Range& range,
66 int event_flags) override;
67
68 // views::TableViewObserver: 62 // views::TableViewObserver:
69 void OnSelectionChanged() override; 63 void OnSelectionChanged() override;
70 64
71 // Updates the anchor's arrow and view. Also repositions the bubble so it's 65 // Updates the anchor's arrow and view. Also repositions the bubble so it's
72 // displayed in the correct location. 66 // displayed in the correct location.
73 void UpdateAnchor(views::View* anchor_view, 67 void UpdateAnchor(views::View* anchor_view,
74 views::BubbleBorder::Arrow anchor_arrow); 68 views::BubbleBorder::Arrow anchor_arrow);
75 69
76 void set_bubble_reference(BubbleReference bubble_reference); 70 void set_bubble_reference(BubbleReference bubble_reference);
77 void UpdateTableModel() const; 71 void UpdateTableView() const;
78 72
79 private: 73 private:
80 ChooserContentView* chooser_content_view_; 74 ChooserContentView* chooser_content_view_;
81 BubbleReference bubble_reference_; 75 BubbleReference bubble_reference_;
82 76
83 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate); 77 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate);
84 }; 78 };
85 79
86 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( 80 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
87 views::View* anchor_view, 81 views::View* anchor_view,
(...skipping 29 matching lines...) Expand all
117 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel( 111 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel(
118 ui::DialogButton button) const { 112 ui::DialogButton button) const {
119 return chooser_content_view_->GetDialogButtonLabel(button); 113 return chooser_content_view_->GetDialogButtonLabel(button);
120 } 114 }
121 115
122 bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled( 116 bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled(
123 ui::DialogButton button) const { 117 ui::DialogButton button) const {
124 return chooser_content_view_->IsDialogButtonEnabled(button); 118 return chooser_content_view_->IsDialogButtonEnabled(button);
125 } 119 }
126 120
121 views::View* ChooserBubbleUiViewDelegate::CreateExtraView() {
122 return chooser_content_view_->CreateExtraView();
123 }
124
127 views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() { 125 views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() {
128 return chooser_content_view_->CreateFootnoteView(this); 126 return chooser_content_view_->CreateFootnoteView();
129 } 127 }
130 128
131 bool ChooserBubbleUiViewDelegate::Accept() { 129 bool ChooserBubbleUiViewDelegate::Accept() {
132 chooser_content_view_->Accept(); 130 chooser_content_view_->Accept();
133 bubble_reference_->CloseBubble(BUBBLE_CLOSE_ACCEPTED); 131 bubble_reference_->CloseBubble(BUBBLE_CLOSE_ACCEPTED);
134 return true; 132 return true;
135 } 133 }
136 134
137 bool ChooserBubbleUiViewDelegate::Cancel() { 135 bool ChooserBubbleUiViewDelegate::Cancel() {
138 chooser_content_view_->Cancel(); 136 chooser_content_view_->Cancel();
(...skipping 11 matching lines...) Expand all
150 } 148 }
151 149
152 views::Widget* ChooserBubbleUiViewDelegate::GetWidget() { 150 views::Widget* ChooserBubbleUiViewDelegate::GetWidget() {
153 return chooser_content_view_->GetWidget(); 151 return chooser_content_view_->GetWidget();
154 } 152 }
155 153
156 const views::Widget* ChooserBubbleUiViewDelegate::GetWidget() const { 154 const views::Widget* ChooserBubbleUiViewDelegate::GetWidget() const {
157 return chooser_content_view_->GetWidget(); 155 return chooser_content_view_->GetWidget();
158 } 156 }
159 157
160 void ChooserBubbleUiViewDelegate::StyledLabelLinkClicked(
161 views::StyledLabel* label,
162 const gfx::Range& range,
163 int event_flags) {
164 chooser_content_view_->StyledLabelLinkClicked();
165 }
166
167 void ChooserBubbleUiViewDelegate::OnSelectionChanged() { 158 void ChooserBubbleUiViewDelegate::OnSelectionChanged() {
168 GetDialogClientView()->UpdateDialogButtons(); 159 GetDialogClientView()->UpdateDialogButtons();
169 } 160 }
170 161
171 void ChooserBubbleUiViewDelegate::UpdateAnchor( 162 void ChooserBubbleUiViewDelegate::UpdateAnchor(
172 views::View* anchor_view, 163 views::View* anchor_view,
173 views::BubbleBorder::Arrow anchor_arrow) { 164 views::BubbleBorder::Arrow anchor_arrow) {
174 if (GetAnchorView() == anchor_view && arrow() == anchor_arrow) 165 if (GetAnchorView() == anchor_view && arrow() == anchor_arrow)
175 return; 166 return;
176 167
177 set_arrow(anchor_arrow); 168 set_arrow(anchor_arrow);
178 169
179 // Reposition the bubble based on the updated arrow and view. 170 // Reposition the bubble based on the updated arrow and view.
180 SetAnchorView(anchor_view); 171 SetAnchorView(anchor_view);
181 } 172 }
182 173
183 void ChooserBubbleUiViewDelegate::set_bubble_reference( 174 void ChooserBubbleUiViewDelegate::set_bubble_reference(
184 BubbleReference bubble_reference) { 175 BubbleReference bubble_reference) {
185 bubble_reference_ = bubble_reference; 176 bubble_reference_ = bubble_reference;
186 DCHECK(bubble_reference_); 177 DCHECK(bubble_reference_);
187 } 178 }
188 179
189 void ChooserBubbleUiViewDelegate::UpdateTableModel() const { 180 void ChooserBubbleUiViewDelegate::UpdateTableView() const {
190 chooser_content_view_->UpdateTableModel(); 181 chooser_content_view_->UpdateTableView();
191 } 182 }
192 183
193 ////////////////////////////////////////////////////////////////////////////// 184 //////////////////////////////////////////////////////////////////////////////
194 // ChooserBubbleUiView 185 // ChooserBubbleUiView
195 ChooserBubbleUiView::ChooserBubbleUiView( 186 ChooserBubbleUiView::ChooserBubbleUiView(
196 Browser* browser, 187 Browser* browser,
197 std::unique_ptr<ChooserController> chooser_controller) 188 std::unique_ptr<ChooserController> chooser_controller)
198 : browser_(browser), chooser_bubble_ui_view_delegate_(nullptr) { 189 : browser_(browser), chooser_bubble_ui_view_delegate_(nullptr) {
199 DCHECK(browser_); 190 DCHECK(browser_);
200 DCHECK(chooser_controller); 191 DCHECK(chooser_controller);
201 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate( 192 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate(
202 GetAnchorView(), GetAnchorArrow(), std::move(chooser_controller)); 193 GetAnchorView(), GetAnchorArrow(), std::move(chooser_controller));
203 } 194 }
204 195
205 ChooserBubbleUiView::~ChooserBubbleUiView() {} 196 ChooserBubbleUiView::~ChooserBubbleUiView() {}
206 197
207 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) { 198 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
208 chooser_bubble_ui_view_delegate_->set_bubble_reference(bubble_reference); 199 chooser_bubble_ui_view_delegate_->set_bubble_reference(bubble_reference);
209 200
210 // Set |parent_window| because some valid anchors can become hidden. 201 // Set |parent_window| because some valid anchors can become hidden.
211 views::Widget* widget = views::Widget::GetWidgetForNativeWindow( 202 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
212 browser_->window()->GetNativeWindow()); 203 browser_->window()->GetNativeWindow());
213 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView()); 204 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView());
214 205
215 views::BubbleDialogDelegateView::CreateBubble( 206 views::BubbleDialogDelegateView::CreateBubble(
216 chooser_bubble_ui_view_delegate_) 207 chooser_bubble_ui_view_delegate_)
217 ->Show(); 208 ->Show();
218 209
219 chooser_bubble_ui_view_delegate_->UpdateTableModel(); 210 chooser_bubble_ui_view_delegate_->UpdateTableView();
220 } 211 }
221 212
222 void ChooserBubbleUiView::Close() {} 213 void ChooserBubbleUiView::Close() {}
223 214
224 void ChooserBubbleUiView::UpdateAnchorPosition() { 215 void ChooserBubbleUiView::UpdateAnchorPosition() {
225 chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(), 216 chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(),
226 GetAnchorArrow()); 217 GetAnchorArrow());
227 } 218 }
228 219
229 views::View* ChooserBubbleUiView::GetAnchorView() { 220 views::View* ChooserBubbleUiView::GetAnchorView() {
230 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_); 221 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
231 222
232 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 223 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
233 return browser_view->GetLocationBarView()->location_icon_view(); 224 return browser_view->GetLocationBarView()->location_icon_view();
234 225
235 if (browser_view->IsFullscreenBubbleVisible()) 226 if (browser_view->IsFullscreenBubbleVisible())
236 return browser_view->exclusive_access_bubble()->GetView(); 227 return browser_view->exclusive_access_bubble()->GetView();
237 228
238 return browser_view->top_container(); 229 return browser_view->top_container();
239 } 230 }
240 231
241 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { 232 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() {
242 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 233 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
243 return views::BubbleBorder::TOP_LEFT; 234 return views::BubbleBorder::TOP_LEFT;
244 return views::BubbleBorder::NONE; 235 return views::BubbleBorder::NONE;
245 } 236 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.h ('k') | chrome/browser/usb/usb_chooser_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698