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

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

Issue 2086663003: Change ChooserController ownership model (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address reillyg@'s comments 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 <memory>
10
9 #include "base/macros.h" 11 #include "base/macros.h"
10 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
11 #include "base/strings/string16.h" 13 #include "base/strings/string16.h"
12 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
13 #include "chrome/browser/ui/browser_window.h" 15 #include "chrome/browser/ui/browser_window.h"
14 #include "chrome/browser/ui/views/chooser_content_view.h" 16 #include "chrome/browser/ui/views/chooser_content_view.h"
15 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h" 17 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
16 #include "chrome/browser/ui/views/frame/browser_view.h" 18 #include "chrome/browser/ui/views/frame/browser_view.h"
17 #include "chrome/browser/ui/views/frame/top_container_view.h" 19 #include "chrome/browser/ui/views/frame/top_container_view.h"
18 #include "chrome/browser/ui/views/location_bar/location_bar_view.h" 20 #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
19 #include "chrome/browser/ui/views/location_bar/location_icon_view.h" 21 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
20 #include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h" 22 #include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h"
21 #include "chrome/grit/generated_resources.h" 23 #include "chrome/grit/generated_resources.h"
22 #include "components/bubble/bubble_controller.h" 24 #include "components/bubble/bubble_controller.h"
23 #include "components/chooser_controller/chooser_controller.h" 25 #include "components/chooser_controller/chooser_controller.h"
24 #include "components/url_formatter/elide_url.h" 26 #include "components/url_formatter/elide_url.h"
25 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
26 #include "ui/views/controls/styled_label.h" 28 #include "ui/views/controls/styled_label.h"
27 #include "ui/views/controls/styled_label_listener.h" 29 #include "ui/views/controls/styled_label_listener.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 #include "url/origin.h" 32 #include "url/origin.h"
31 33
32 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() { 34 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
33 return base::WrapUnique( 35 return base::WrapUnique(
34 new ChooserBubbleUiView(browser_, chooser_controller())); 36 new ChooserBubbleUiView(browser_, std::move(chooser_controller_)));
35 } 37 }
36 38
37 /////////////////////////////////////////////////////////////////////////////// 39 ///////////////////////////////////////////////////////////////////////////////
38 // View implementation for the chooser bubble. 40 // View implementation for the chooser bubble.
39 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView, 41 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
40 public views::StyledLabelListener, 42 public views::StyledLabelListener,
41 public views::TableViewObserver { 43 public views::TableViewObserver {
42 public: 44 public:
43 ChooserBubbleUiViewDelegate(views::View* anchor_view, 45 ChooserBubbleUiViewDelegate(
44 views::BubbleBorder::Arrow anchor_arrow, 46 views::View* anchor_view,
45 ChooserController* chooser_controller, 47 views::BubbleBorder::Arrow anchor_arrow,
46 BubbleReference bubble_reference); 48 std::unique_ptr<ChooserController> chooser_controller);
47 ~ChooserBubbleUiViewDelegate() override; 49 ~ChooserBubbleUiViewDelegate() override;
48 50
49 // views::WidgetDelegate: 51 // views::WidgetDelegate:
50 base::string16 GetWindowTitle() const override; 52 base::string16 GetWindowTitle() const override;
51 53
52 // views::DialogDelegate: 54 // views::DialogDelegate:
53 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; 55 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
54 bool IsDialogButtonEnabled(ui::DialogButton button) const override; 56 bool IsDialogButtonEnabled(ui::DialogButton button) const override;
55 views::View* CreateFootnoteView() override; 57 views::View* CreateFootnoteView() override;
56 bool Accept() override; 58 bool Accept() override;
(...skipping 11 matching lines...) Expand all
68 int event_flags) override; 70 int event_flags) override;
69 71
70 // views::TableViewObserver: 72 // views::TableViewObserver:
71 void OnSelectionChanged() override; 73 void OnSelectionChanged() override;
72 74
73 // Updates the anchor's arrow and view. Also repositions the bubble so it's 75 // Updates the anchor's arrow and view. Also repositions the bubble so it's
74 // displayed in the correct location. 76 // displayed in the correct location.
75 void UpdateAnchor(views::View* anchor_view, 77 void UpdateAnchor(views::View* anchor_view,
76 views::BubbleBorder::Arrow anchor_arrow); 78 views::BubbleBorder::Arrow anchor_arrow);
77 79
80 void set_bubble_reference(BubbleReference bubble_reference);
78 void UpdateTableModel() const; 81 void UpdateTableModel() const;
79 82
80 private: 83 private:
84 url::Origin origin_;
81 ChooserContentView* chooser_content_view_; 85 ChooserContentView* chooser_content_view_;
82
83 ChooserController* chooser_controller_;
84 BubbleReference bubble_reference_; 86 BubbleReference bubble_reference_;
85 87
86 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate); 88 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate);
87 }; 89 };
88 90
89 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( 91 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
90 views::View* anchor_view, 92 views::View* anchor_view,
91 views::BubbleBorder::Arrow anchor_arrow, 93 views::BubbleBorder::Arrow anchor_arrow,
92 ChooserController* chooser_controller, 94 std::unique_ptr<ChooserController> chooser_controller)
93 BubbleReference bubble_reference)
94 : views::BubbleDialogDelegateView(anchor_view, anchor_arrow), 95 : views::BubbleDialogDelegateView(anchor_view, anchor_arrow),
95 chooser_content_view_(nullptr), 96 chooser_content_view_(nullptr) {
96 chooser_controller_(chooser_controller),
97 bubble_reference_(bubble_reference) {
98 // ------------------------------------ 97 // ------------------------------------
99 // | Chooser bubble title | 98 // | Chooser bubble title |
100 // | -------------------------------- | 99 // | -------------------------------- |
101 // | | option 0 | | 100 // | | option 0 | |
102 // | | option 1 | | 101 // | | option 1 | |
103 // | | option 2 | | 102 // | | option 2 | |
104 // | | | | 103 // | | | |
105 // | | | | 104 // | | | |
106 // | | | | 105 // | | | |
107 // | -------------------------------- | 106 // | -------------------------------- |
108 // | [ Connect ] [ Cancel ] | 107 // | [ Connect ] [ Cancel ] |
109 // |----------------------------------| 108 // |----------------------------------|
110 // | Not seeing your device? Get help | 109 // | Not seeing your device? Get help |
111 // ------------------------------------ 110 // ------------------------------------
112 111
113 DCHECK(bubble_reference_); 112 origin_ = chooser_controller->GetOrigin();
114 113 chooser_content_view_ =
115 chooser_content_view_ = new ChooserContentView(this, chooser_controller_); 114 new ChooserContentView(this, std::move(chooser_controller));
116 } 115 }
117 116
118 ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {} 117 ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {}
119 118
120 base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const { 119 base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const {
121 return l10n_util::GetStringFUTF16( 120 return l10n_util::GetStringFUTF16(
122 IDS_DEVICE_CHOOSER_PROMPT, 121 IDS_DEVICE_CHOOSER_PROMPT,
123 url_formatter::FormatOriginForSecurityDisplay( 122 url_formatter::FormatOriginForSecurityDisplay(
124 chooser_controller_->GetOrigin(), 123 origin_, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC));
125 url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC));
126 } 124 }
127 125
128 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel( 126 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel(
129 ui::DialogButton button) const { 127 ui::DialogButton button) const {
130 return chooser_content_view_->GetDialogButtonLabel(button); 128 return chooser_content_view_->GetDialogButtonLabel(button);
131 } 129 }
132 130
133 bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled( 131 bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled(
134 ui::DialogButton button) const { 132 ui::DialogButton button) const {
135 return chooser_content_view_->IsDialogButtonEnabled(button); 133 return chooser_content_view_->IsDialogButtonEnabled(button);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 views::BubbleBorder::Arrow anchor_arrow) { 182 views::BubbleBorder::Arrow anchor_arrow) {
185 if (GetAnchorView() == anchor_view && arrow() == anchor_arrow) 183 if (GetAnchorView() == anchor_view && arrow() == anchor_arrow)
186 return; 184 return;
187 185
188 set_arrow(anchor_arrow); 186 set_arrow(anchor_arrow);
189 187
190 // Reposition the bubble based on the updated arrow and view. 188 // Reposition the bubble based on the updated arrow and view.
191 SetAnchorView(anchor_view); 189 SetAnchorView(anchor_view);
192 } 190 }
193 191
192 void ChooserBubbleUiViewDelegate::set_bubble_reference(
193 BubbleReference bubble_reference) {
194 bubble_reference_ = bubble_reference;
195 DCHECK(bubble_reference_);
196 }
197
194 void ChooserBubbleUiViewDelegate::UpdateTableModel() const { 198 void ChooserBubbleUiViewDelegate::UpdateTableModel() const {
195 chooser_content_view_->UpdateTableModel(); 199 chooser_content_view_->UpdateTableModel();
196 } 200 }
197 201
198 ////////////////////////////////////////////////////////////////////////////// 202 //////////////////////////////////////////////////////////////////////////////
199 // ChooserBubbleUiView 203 // ChooserBubbleUiView
200 ChooserBubbleUiView::ChooserBubbleUiView(Browser* browser, 204 ChooserBubbleUiView::ChooserBubbleUiView(
201 ChooserController* chooser_controller) 205 Browser* browser,
202 : browser_(browser), 206 std::unique_ptr<ChooserController> chooser_controller)
203 chooser_controller_(chooser_controller), 207 : browser_(browser), chooser_bubble_ui_view_delegate_(nullptr) {
204 chooser_bubble_ui_view_delegate_(nullptr) {
205 DCHECK(browser_); 208 DCHECK(browser_);
206 DCHECK(chooser_controller_); 209 DCHECK(chooser_controller);
210 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate(
211 GetAnchorView(), GetAnchorArrow(), std::move(chooser_controller));
207 } 212 }
208 213
209 ChooserBubbleUiView::~ChooserBubbleUiView() {} 214 ChooserBubbleUiView::~ChooserBubbleUiView() {}
210 215
211 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) { 216 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
212 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate( 217 chooser_bubble_ui_view_delegate_->set_bubble_reference(bubble_reference);
213 GetAnchorView(), GetAnchorArrow(), chooser_controller_, bubble_reference);
214 218
215 // Set |parent_window| because some valid anchors can become hidden. 219 // Set |parent_window| because some valid anchors can become hidden.
216 views::Widget* widget = views::Widget::GetWidgetForNativeWindow( 220 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
217 browser_->window()->GetNativeWindow()); 221 browser_->window()->GetNativeWindow());
218 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView()); 222 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView());
219 223
220 views::BubbleDialogDelegateView::CreateBubble( 224 views::BubbleDialogDelegateView::CreateBubble(
221 chooser_bubble_ui_view_delegate_) 225 chooser_bubble_ui_view_delegate_)
222 ->Show(); 226 ->Show();
223 227
(...skipping 17 matching lines...) Expand all
241 return browser_view->exclusive_access_bubble()->GetView(); 245 return browser_view->exclusive_access_bubble()->GetView();
242 246
243 return browser_view->top_container(); 247 return browser_view->top_container();
244 } 248 }
245 249
246 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() { 250 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() {
247 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR)) 251 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
248 return views::BubbleBorder::TOP_LEFT; 252 return views::BubbleBorder::TOP_LEFT;
249 return views::BubbleBorder::NONE; 253 return views::BubbleBorder::NONE;
250 } 254 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698