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

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

Issue 2029863002: Refactor ChooserBubbleUiViewDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: make ChooserContentView::ChooserControllerDestroying a private function Created 4 years, 6 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 <algorithm>
10 #include <string>
11 #include <vector>
12
13 #include "base/macros.h" 9 #include "base/macros.h"
14 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
15 #include "base/strings/string16.h" 11 #include "base/strings/string16.h"
16 #include "base/strings/utf_string_conversions.h"
17 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/browser_window.h"
14 #include "chrome/browser/ui/views/chooser_content_view.h"
19 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" 15 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
20 #include "chrome/browser/ui/views/frame/browser_view.h" 16 #include "chrome/browser/ui/views/frame/browser_view.h"
21 #include "chrome/browser/ui/views/frame/top_container_view.h" 17 #include "chrome/browser/ui/views/frame/top_container_view.h"
22 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 18 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
23 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" 19 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
24 #include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h" 20 #include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h"
25 #include "chrome/common/pref_names.h"
26 #include "chrome/grit/generated_resources.h" 21 #include "chrome/grit/generated_resources.h"
27 #include "components/bubble/bubble_controller.h" 22 #include "components/bubble/bubble_controller.h"
28 #include "components/chooser_controller/chooser_controller.h" 23 #include "components/chooser_controller/chooser_controller.h"
29 #include "components/prefs/pref_service.h"
30 #include "components/url_formatter/elide_url.h" 24 #include "components/url_formatter/elide_url.h"
31 #include "ui/accessibility/ax_view_state.h"
32 #include "ui/base/l10n/l10n_util.h" 25 #include "ui/base/l10n/l10n_util.h"
33 #include "ui/base/resource/resource_bundle.h"
34 #include "ui/gfx/paint_vector_icon.h"
35 #include "ui/gfx/text_constants.h"
36 #include "ui/gfx/vector_icons_public.h"
37 #include "ui/views/bubble/bubble_dialog_delegate.h"
38 #include "ui/views/bubble/bubble_frame_view.h"
39 #include "ui/views/controls/styled_label.h" 26 #include "ui/views/controls/styled_label.h"
40 #include "ui/views/controls/styled_label_listener.h" 27 #include "ui/views/controls/styled_label_listener.h"
41 #include "ui/views/controls/table/table_view.h"
42 #include "ui/views/controls/table/table_view_observer.h" 28 #include "ui/views/controls/table/table_view_observer.h"
43 #include "ui/views/layout/grid_layout.h"
44 #include "ui/views/window/dialog_client_view.h" 29 #include "ui/views/window/dialog_client_view.h"
45 #include "url/origin.h" 30 #include "url/origin.h"
46 31
47 namespace {
48
49 // Chooser permission bubble width
50 const int kChooserPermissionBubbleWidth = 300;
51
52 // Chooser permission bubble height
53 const int kChooserPermissionBubbleHeight = 200;
54
55 } // namespace
56
57 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() { 32 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
58 return base::WrapUnique( 33 return base::WrapUnique(
59 new ChooserBubbleUiView(browser_, chooser_controller())); 34 new ChooserBubbleUiView(browser_, chooser_controller()));
60 } 35 }
61 36
62 class ChooserTableModel;
63
64 /////////////////////////////////////////////////////////////////////////////// 37 ///////////////////////////////////////////////////////////////////////////////
65 // View implementation for the chooser bubble. 38 // View implementation for the chooser bubble.
66 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView, 39 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
67 public views::StyledLabelListener, 40 public views::StyledLabelListener,
68 public views::TableViewObserver { 41 public views::TableViewObserver {
69 public: 42 public:
70 ChooserBubbleUiViewDelegate(views::View* anchor_view, 43 ChooserBubbleUiViewDelegate(views::View* anchor_view,
71 views::BubbleBorder::Arrow anchor_arrow, 44 views::BubbleBorder::Arrow anchor_arrow,
72 ChooserController* controller, 45 ChooserController* chooser_controller,
73 BubbleReference bubble_reference); 46 BubbleReference bubble_reference);
74 ~ChooserBubbleUiViewDelegate() override; 47 ~ChooserBubbleUiViewDelegate() override;
75 48
76 // views::BubbleDialogDelegateView: 49 // views::WidgetDelegate:
77 bool ShouldShowWindowTitle() const override;
78 base::string16 GetWindowTitle() const override; 50 base::string16 GetWindowTitle() const override;
51
52 // views::DialogDelegate:
79 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; 53 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
80 bool IsDialogButtonEnabled(ui::DialogButton button) const override; 54 bool IsDialogButtonEnabled(ui::DialogButton button) const override;
81 views::View* CreateFootnoteView() override; 55 views::View* CreateFootnoteView() override;
82 bool Accept() override; 56 bool Accept() override;
83 bool Cancel() override; 57 bool Cancel() override;
84 bool Close() override; 58 bool Close() override;
85 59
60 // views::DialogDelegateView:
61 views::View* GetContentsView() override;
62 views::Widget* GetWidget() override;
63 const views::Widget* GetWidget() const override;
64
86 // views::StyledLabelListener: 65 // views::StyledLabelListener:
87 void StyledLabelLinkClicked(views::StyledLabel* label, 66 void StyledLabelLinkClicked(views::StyledLabel* label,
88 const gfx::Range& range, 67 const gfx::Range& range,
89 int event_flags) override; 68 int event_flags) override;
90 69
91 // views::TableViewObserver: 70 // views::TableViewObserver:
92 void OnSelectionChanged() override; 71 void OnSelectionChanged() override;
93 72
94 // Updates the anchor's arrow and view. Also repositions the bubble so it's 73 // Updates the anchor's arrow and view. Also repositions the bubble so it's
95 // displayed in the correct location. 74 // displayed in the correct location.
96 void UpdateAnchor(views::View* anchor_view, 75 void UpdateAnchor(views::View* anchor_view,
97 views::BubbleBorder::Arrow anchor_arrow); 76 views::BubbleBorder::Arrow anchor_arrow);
98 77
99 // Called by ChooserBubbleUiView's destructor. When ChooserBubbleUiView object 78 void UpdateTableModel() const;
100 // is destroyed, the |controller_| it passed to this class may not be used any
101 // more since it may be destroyed too.
102 void ControllerDestroying();
103
104 ChooserTableModel* chooser_table_model() const;
105 79
106 private: 80 private:
107 ChooserController* controller_; 81 ChooserContentView* chooser_content_view_;
82
83 ChooserController* chooser_controller_;
108 BubbleReference bubble_reference_; 84 BubbleReference bubble_reference_;
109 85
110 views::TableView* table_view_;
111 ChooserTableModel* chooser_table_model_;
112
113 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate); 86 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate);
114 }; 87 };
115 88
116 ui::TableColumn ChooserTableColumn(int id, const std::string& title) {
117 ui::TableColumn column;
118 column.id = id;
119 column.title = base::ASCIIToUTF16(title.c_str());
120 return column;
121 }
122
123 class ChooserTableModel : public ui::TableModel,
124 public ChooserController::Observer {
125 public:
126 explicit ChooserTableModel(ChooserController* controller);
127
128 // ui::TableModel:
129 int RowCount() override;
130 base::string16 GetText(int row, int column_id) override;
131 void SetObserver(ui::TableModelObserver* observer) override;
132
133 // ChooserController::Observer:
134 void OnOptionsInitialized() override;
135 void OnOptionAdded(size_t index) override;
136 void OnOptionRemoved(size_t index) override;
137
138 void Update();
139
140 private:
141 ui::TableModelObserver* observer_;
142 ChooserController* controller_;
143 };
144
145 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( 89 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
146 views::View* anchor_view, 90 views::View* anchor_view,
147 views::BubbleBorder::Arrow anchor_arrow, 91 views::BubbleBorder::Arrow anchor_arrow,
148 ChooserController* controller, 92 ChooserController* chooser_controller,
149 BubbleReference bubble_reference) 93 BubbleReference bubble_reference)
150 : views::BubbleDialogDelegateView(anchor_view, anchor_arrow), 94 : views::BubbleDialogDelegateView(anchor_view, anchor_arrow),
151 controller_(controller), 95 chooser_content_view_(nullptr),
96 chooser_controller_(chooser_controller),
152 bubble_reference_(bubble_reference) { 97 bubble_reference_(bubble_reference) {
153 // ------------------------------------ 98 // ------------------------------------
154 // | Chooser bubble title | 99 // | Chooser bubble title |
155 // | -------------------------------- | 100 // | -------------------------------- |
156 // | | option 0 | | 101 // | | option 0 | |
157 // | | option 1 | | 102 // | | option 1 | |
158 // | | option 2 | | 103 // | | option 2 | |
159 // | | | | 104 // | | | |
160 // | | | | 105 // | | | |
161 // | | | | 106 // | | | |
162 // | -------------------------------- | 107 // | -------------------------------- |
163 // | [ Connect ] [ Cancel ] | 108 // | [ Connect ] [ Cancel ] |
164 // |----------------------------------| 109 // |----------------------------------|
165 // | Not seeing your device? Get help | 110 // | Not seeing your device? Get help |
166 // ------------------------------------ 111 // ------------------------------------
167 112
168 DCHECK(bubble_reference_); 113 DCHECK(bubble_reference_);
169 114
170 views::GridLayout* layout = new views::GridLayout(this); 115 chooser_content_view_ = new ChooserContentView(this, chooser_controller_);
171 SetLayoutManager(layout);
172
173 views::ColumnSet* column_set = layout->AddColumnSet(0);
174 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
175 views::GridLayout::USE_PREF, 0, 0);
176
177 // Lay out the table view.
178 layout->StartRow(0, 0);
179 std::vector<ui::TableColumn> table_columns;
180 table_columns.push_back(ChooserTableColumn(
181 0, "" /* Empty string makes the column title invisible */));
182 chooser_table_model_ = new ChooserTableModel(controller_);
183 table_view_ = new views::TableView(chooser_table_model_, table_columns,
184 views::TEXT_ONLY, true);
185 table_view_->set_select_on_remove(false);
186 chooser_table_model_->SetObserver(table_view_);
187 table_view_->SetObserver(this);
188 table_view_->SetEnabled(controller_->NumOptions() > 0);
189 layout->AddView(table_view_->CreateParentIfNecessary(), 1, 1,
190 views::GridLayout::FILL, views::GridLayout::FILL,
191 kChooserPermissionBubbleWidth,
192 kChooserPermissionBubbleHeight);
193 } 116 }
194 117
195 ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() { 118 ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {}
196 chooser_table_model_->SetObserver(nullptr);
197 }
198
199 bool ChooserBubbleUiViewDelegate::ShouldShowWindowTitle() const {
200 return true;
201 }
202 119
203 base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const { 120 base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const {
204 return l10n_util::GetStringFUTF16( 121 return l10n_util::GetStringFUTF16(
205 IDS_CHOOSER_BUBBLE_PROMPT, 122 IDS_CHOOSER_BUBBLE_PROMPT,
206 url_formatter::FormatOriginForSecurityDisplay( 123 url_formatter::FormatOriginForSecurityDisplay(
207 controller_->GetOrigin(), 124 chooser_controller_->GetOrigin(),
208 url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC)); 125 url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC));
209 } 126 }
210 127
211 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel( 128 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel(
212 ui::DialogButton button) const { 129 ui::DialogButton button) const {
213 return l10n_util::GetStringUTF16(button == ui::DIALOG_BUTTON_OK 130 return chooser_content_view_->GetDialogButtonLabel(button);
214 ? IDS_CHOOSER_BUBBLE_CONNECT_BUTTON_TEXT
215 : IDS_CHOOSER_BUBBLE_CANCEL_BUTTON_TEXT);
216 } 131 }
217 132
218 bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled( 133 bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled(
219 ui::DialogButton button) const { 134 ui::DialogButton button) const {
220 return button == ui::DIALOG_BUTTON_OK 135 return chooser_content_view_->IsDialogButtonEnabled(button);
221 ? !table_view_->selection_model().empty()
222 : true;
223 } 136 }
224 137
225 views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() { 138 views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() {
226 base::string16 link = 139 return chooser_content_view_->CreateFootnoteView(this);
227 l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_GET_HELP_LINK_TEXT);
228 size_t offset;
229 base::string16 text = l10n_util::GetStringFUTF16(
230 IDS_CHOOSER_BUBBLE_FOOTNOTE_TEXT, link, &offset);
231 views::StyledLabel* label = new views::StyledLabel(text, this);
232 label->AddStyleRange(gfx::Range(offset, offset + link.length()),
233 views::StyledLabel::RangeStyleInfo::CreateForLink());
234 return label;
235 } 140 }
236 141
237 bool ChooserBubbleUiViewDelegate::Accept() { 142 bool ChooserBubbleUiViewDelegate::Accept() {
238 if (controller_) 143 chooser_content_view_->Accept();
239 controller_->Select(table_view_->selection_model().active());
240 bubble_reference_->CloseBubble(BUBBLE_CLOSE_ACCEPTED); 144 bubble_reference_->CloseBubble(BUBBLE_CLOSE_ACCEPTED);
241 return true; 145 return true;
242 } 146 }
243 147
244 bool ChooserBubbleUiViewDelegate::Cancel() { 148 bool ChooserBubbleUiViewDelegate::Cancel() {
245 if (controller_) 149 chooser_content_view_->Cancel();
246 controller_->Cancel();
247 bubble_reference_->CloseBubble(BUBBLE_CLOSE_CANCELED); 150 bubble_reference_->CloseBubble(BUBBLE_CLOSE_CANCELED);
248 return true; 151 return true;
249 } 152 }
250 153
251 bool ChooserBubbleUiViewDelegate::Close() { 154 bool ChooserBubbleUiViewDelegate::Close() {
252 if (controller_) 155 chooser_content_view_->Close();
253 controller_->Close();
254 return true; 156 return true;
255 } 157 }
256 158
159 views::View* ChooserBubbleUiViewDelegate::GetContentsView() {
160 return chooser_content_view_;
161 }
162
163 views::Widget* ChooserBubbleUiViewDelegate::GetWidget() {
164 return chooser_content_view_->GetWidget();
165 }
166
167 const views::Widget* ChooserBubbleUiViewDelegate::GetWidget() const {
168 return chooser_content_view_->GetWidget();
169 }
170
257 void ChooserBubbleUiViewDelegate::StyledLabelLinkClicked( 171 void ChooserBubbleUiViewDelegate::StyledLabelLinkClicked(
258 views::StyledLabel* label, 172 views::StyledLabel* label,
259 const gfx::Range& range, 173 const gfx::Range& range,
260 int event_flags) { 174 int event_flags) {
261 controller_->OpenHelpCenterUrl(); 175 chooser_content_view_->StyledLabelLinkClicked();
262 } 176 }
263 177
264 void ChooserBubbleUiViewDelegate::OnSelectionChanged() { 178 void ChooserBubbleUiViewDelegate::OnSelectionChanged() {
265 GetDialogClientView()->UpdateDialogButtons(); 179 GetDialogClientView()->UpdateDialogButtons();
266 } 180 }
267 181
268 void ChooserBubbleUiViewDelegate::UpdateAnchor( 182 void ChooserBubbleUiViewDelegate::UpdateAnchor(
269 views::View* anchor_view, 183 views::View* anchor_view,
270 views::BubbleBorder::Arrow anchor_arrow) { 184 views::BubbleBorder::Arrow anchor_arrow) {
271 if (GetAnchorView() == anchor_view && arrow() == anchor_arrow) 185 if (GetAnchorView() == anchor_view && arrow() == anchor_arrow)
272 return; 186 return;
273 187
274 set_arrow(anchor_arrow); 188 set_arrow(anchor_arrow);
275 189
276 // Reposition the bubble based on the updated arrow and view. 190 // Reposition the bubble based on the updated arrow and view.
277 SetAnchorView(anchor_view); 191 SetAnchorView(anchor_view);
278 } 192 }
279 193
280 void ChooserBubbleUiViewDelegate::ControllerDestroying() { 194 void ChooserBubbleUiViewDelegate::UpdateTableModel() const {
281 controller_ = nullptr; 195 chooser_content_view_->UpdateTableModel();
282 }
283
284 ChooserTableModel* ChooserBubbleUiViewDelegate::chooser_table_model() const {
285 return chooser_table_model_;
286 }
287
288 ChooserTableModel::ChooserTableModel(ChooserController* controller)
289 : observer_(nullptr), controller_(controller) {
290 controller_->set_observer(this);
291 }
292
293 int ChooserTableModel::RowCount() {
294 // When there are no devices, the table contains a message saying there
295 // are no devices, so the number of rows is always at least 1.
296 return std::max(static_cast<int>(controller_->NumOptions()), 1);
297 }
298
299 base::string16 ChooserTableModel::GetText(int row, int column_id) {
300 int num_options = static_cast<int>(controller_->NumOptions());
301 if (num_options == 0) {
302 DCHECK_EQ(0, row);
303 return l10n_util::GetStringUTF16(
304 IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT);
305 }
306
307 DCHECK_GE(row, 0);
308 DCHECK_LT(row, num_options);
309 return controller_->GetOption(static_cast<size_t>(row));
310 }
311
312 void ChooserTableModel::SetObserver(ui::TableModelObserver* observer) {
313 observer_ = observer;
314 }
315
316 void ChooserTableModel::OnOptionsInitialized() {
317 if (observer_) {
318 observer_->OnModelChanged();
319 Update();
320 }
321 }
322
323 void ChooserTableModel::OnOptionAdded(size_t index) {
324 if (observer_) {
325 observer_->OnItemsAdded(static_cast<int>(index), 1);
326 Update();
327 }
328 }
329
330 void ChooserTableModel::OnOptionRemoved(size_t index) {
331 if (observer_) {
332 observer_->OnItemsRemoved(static_cast<int>(index), 1);
333 Update();
334 }
335 }
336
337 void ChooserTableModel::Update() {
338 views::TableView* table_view = static_cast<views::TableView*>(observer_);
339
340 if (controller_->NumOptions() == 0) {
341 observer_->OnModelChanged();
342 table_view->SetEnabled(false);
343 } else {
344 table_view->SetEnabled(true);
345 }
346 } 196 }
347 197
348 ////////////////////////////////////////////////////////////////////////////// 198 //////////////////////////////////////////////////////////////////////////////
349 // ChooserBubbleUiView 199 // ChooserBubbleUiView
350
351 ChooserBubbleUiView::ChooserBubbleUiView(Browser* browser, 200 ChooserBubbleUiView::ChooserBubbleUiView(Browser* browser,
352 ChooserController* controller) 201 ChooserController* chooser_controller)
353 : browser_(browser), 202 : browser_(browser),
354 controller_(controller), 203 chooser_controller_(chooser_controller),
355 chooser_bubble_ui_view_delegate_(nullptr) { 204 chooser_bubble_ui_view_delegate_(nullptr) {
356 DCHECK(browser_); 205 DCHECK(browser_);
357 DCHECK(controller_); 206 DCHECK(chooser_controller_);
358 } 207 }
359 208
360 ChooserBubbleUiView::~ChooserBubbleUiView() { 209 ChooserBubbleUiView::~ChooserBubbleUiView() {}
361 if (chooser_bubble_ui_view_delegate_)
362 chooser_bubble_ui_view_delegate_->ControllerDestroying();
363 }
364 210
365 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) { 211 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
366 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate( 212 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate(
367 GetAnchorView(), GetAnchorArrow(), controller_, bubble_reference); 213 GetAnchorView(), GetAnchorArrow(), chooser_controller_, bubble_reference);
368 214
369 // Set |parent_window| because some valid anchors can become hidden. 215 // Set |parent_window| because some valid anchors can become hidden.
370 views::Widget* widget = views::Widget::GetWidgetForNativeWindow( 216 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
371 browser_->window()->GetNativeWindow()); 217 browser_->window()->GetNativeWindow());
372 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView()); 218 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView());
373 219
374 views::BubbleDialogDelegateView::CreateBubble( 220 views::BubbleDialogDelegateView::CreateBubble(
375 chooser_bubble_ui_view_delegate_) 221 chooser_bubble_ui_view_delegate_)
376 ->Show(); 222 ->Show();
377 223
378 chooser_bubble_ui_view_delegate_->chooser_table_model()->Update(); 224 chooser_bubble_ui_view_delegate_->UpdateTableModel();
379 } 225 }
380 226
381 void ChooserBubbleUiView::Close() {} 227 void ChooserBubbleUiView::Close() {}
382 228
383 void ChooserBubbleUiView::UpdateAnchorPosition() { 229 void ChooserBubbleUiView::UpdateAnchorPosition() {
384 chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(), 230 chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(),
385 GetAnchorArrow()); 231 GetAnchorArrow());
386 } 232 }
387 233
388 views::View* ChooserBubbleUiView::GetAnchorView() { 234 views::View* ChooserBubbleUiView::GetAnchorView() {
389 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_); 235 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
390 236
391 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 237 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
392 return browser_view->GetLocationBarView()->location_icon_view(); 238 return browser_view->GetLocationBarView()->location_icon_view();
393 239
394 if (browser_view->IsFullscreenBubbleVisible()) 240 if (browser_view->IsFullscreenBubbleVisible())
395 return browser_view->exclusive_access_bubble()->GetView(); 241 return browser_view->exclusive_access_bubble()->GetView();
396 242
397 return browser_view->top_container(); 243 return browser_view->top_container();
398 } 244 }
399 245
400 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { 246 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() {
401 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 247 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
402 return views::BubbleBorder::TOP_LEFT; 248 return views::BubbleBorder::TOP_LEFT;
403 return views::BubbleBorder::NONE; 249 return views::BubbleBorder::NONE;
404 } 250 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698