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

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

Issue 2748443005: Rename website_settings UI folders to permission_bubble. (Closed)
Patch Set: Rebase. Created 3 years, 9 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.h"
6
7 #include <stddef.h>
8
9 #include <memory>
10
11 #include "base/macros.h"
12 #include "base/memory/ptr_util.h"
13 #include "base/strings/string16.h"
14 #include "chrome/browser/chooser_controller/chooser_controller.h"
15 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/browser_window.h"
17 #include "chrome/browser/ui/views/device_chooser_content_view.h"
18 #include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
19 #include "chrome/browser/ui/views/frame/browser_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"
22 #include "chrome/browser/ui/views/location_bar/location_icon_view.h"
23 #include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h"
24 #include "components/bubble/bubble_controller.h"
25 #include "ui/views/controls/image_view.h"
26 #include "ui/views/controls/link.h"
27 #include "ui/views/controls/styled_label.h"
28 #include "ui/views/controls/table/table_view_observer.h"
29 #include "ui/views/window/dialog_client_view.h"
30
31 std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
32 return base::MakeUnique<ChooserBubbleUiView>(browser_,
33 std::move(chooser_controller_));
34 }
35
36 ///////////////////////////////////////////////////////////////////////////////
37 // View implementation for the chooser bubble.
38 class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
39 public views::TableViewObserver {
40 public:
41 ChooserBubbleUiViewDelegate(
42 views::View* anchor_view,
43 views::BubbleBorder::Arrow anchor_arrow,
44 std::unique_ptr<ChooserController> chooser_controller);
45 ~ChooserBubbleUiViewDelegate() override;
46
47 // views::WidgetDelegate:
48 base::string16 GetWindowTitle() const override;
49
50 // views::DialogDelegate:
51 base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
52 bool IsDialogButtonEnabled(ui::DialogButton button) const override;
53 views::View* CreateFootnoteView() override;
54 bool Accept() override;
55 bool Cancel() override;
56 bool Close() override;
57
58 // views::DialogDelegateView:
59 views::View* GetContentsView() override;
60 views::Widget* GetWidget() override;
61 const views::Widget* GetWidget() const override;
62
63 // views::TableViewObserver:
64 void OnSelectionChanged() override;
65
66 // Updates the anchor's arrow and view. Also repositions the bubble so it's
67 // displayed in the correct location.
68 void UpdateAnchor(views::View* anchor_view,
69 views::BubbleBorder::Arrow anchor_arrow);
70
71 void set_bubble_reference(BubbleReference bubble_reference);
72 void UpdateTableView() const;
73
74 private:
75 DeviceChooserContentView* device_chooser_content_view_;
76 BubbleReference bubble_reference_;
77
78 DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate);
79 };
80
81 ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
82 views::View* anchor_view,
83 views::BubbleBorder::Arrow anchor_arrow,
84 std::unique_ptr<ChooserController> chooser_controller)
85 : views::BubbleDialogDelegateView(anchor_view, anchor_arrow),
86 device_chooser_content_view_(nullptr) {
87 // ------------------------------------
88 // | Chooser bubble title |
89 // | -------------------------------- |
90 // | | option 0 | |
91 // | | option 1 | |
92 // | | option 2 | |
93 // | | | |
94 // | | | |
95 // | | | |
96 // | -------------------------------- |
97 // | [ Connect ] [ Cancel ] |
98 // |----------------------------------|
99 // | Get help |
100 // ------------------------------------
101
102 device_chooser_content_view_ =
103 new DeviceChooserContentView(this, std::move(chooser_controller));
104 }
105
106 ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {}
107
108 base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const {
109 return device_chooser_content_view_->GetWindowTitle();
110 }
111
112 base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel(
113 ui::DialogButton button) const {
114 return device_chooser_content_view_->GetDialogButtonLabel(button);
115 }
116
117 bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled(
118 ui::DialogButton button) const {
119 return device_chooser_content_view_->IsDialogButtonEnabled(button);
120 }
121
122 views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() {
123 return device_chooser_content_view_->footnote_link();
124 }
125
126 bool ChooserBubbleUiViewDelegate::Accept() {
127 device_chooser_content_view_->Accept();
128 if (bubble_reference_)
129 bubble_reference_->CloseBubble(BUBBLE_CLOSE_ACCEPTED);
130 return true;
131 }
132
133 bool ChooserBubbleUiViewDelegate::Cancel() {
134 device_chooser_content_view_->Cancel();
135 if (bubble_reference_)
136 bubble_reference_->CloseBubble(BUBBLE_CLOSE_CANCELED);
137 return true;
138 }
139
140 bool ChooserBubbleUiViewDelegate::Close() {
141 device_chooser_content_view_->Close();
142 return true;
143 }
144
145 views::View* ChooserBubbleUiViewDelegate::GetContentsView() {
146 return device_chooser_content_view_;
147 }
148
149 views::Widget* ChooserBubbleUiViewDelegate::GetWidget() {
150 return device_chooser_content_view_->GetWidget();
151 }
152
153 const views::Widget* ChooserBubbleUiViewDelegate::GetWidget() const {
154 return device_chooser_content_view_->GetWidget();
155 }
156
157 void ChooserBubbleUiViewDelegate::OnSelectionChanged() {
158 GetDialogClientView()->UpdateDialogButtons();
159 }
160
161 void ChooserBubbleUiViewDelegate::UpdateAnchor(
162 views::View* anchor_view,
163 views::BubbleBorder::Arrow anchor_arrow) {
164 if (GetAnchorView() == anchor_view && arrow() == anchor_arrow)
165 return;
166
167 set_arrow(anchor_arrow);
168
169 // Reposition the bubble based on the updated arrow and view.
170 SetAnchorView(anchor_view);
171 }
172
173 void ChooserBubbleUiViewDelegate::set_bubble_reference(
174 BubbleReference bubble_reference) {
175 bubble_reference_ = bubble_reference;
176 DCHECK(bubble_reference_);
177 }
178
179 void ChooserBubbleUiViewDelegate::UpdateTableView() const {
180 device_chooser_content_view_->UpdateTableView();
181 }
182
183 //////////////////////////////////////////////////////////////////////////////
184 // ChooserBubbleUiView
185 ChooserBubbleUiView::ChooserBubbleUiView(
186 Browser* browser,
187 std::unique_ptr<ChooserController> chooser_controller)
188 : browser_(browser), chooser_bubble_ui_view_delegate_(nullptr) {
189 DCHECK(browser_);
190 DCHECK(chooser_controller);
191 chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate(
192 GetAnchorView(), GetAnchorArrow(), std::move(chooser_controller));
193 }
194
195 ChooserBubbleUiView::~ChooserBubbleUiView() {}
196
197 void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
198 chooser_bubble_ui_view_delegate_->set_bubble_reference(bubble_reference);
199
200 // Set |parent_window| because some valid anchors can become hidden.
201 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
202 browser_->window()->GetNativeWindow());
203 chooser_bubble_ui_view_delegate_->set_parent_window(widget->GetNativeView());
204
205 views::BubbleDialogDelegateView::CreateBubble(
206 chooser_bubble_ui_view_delegate_)
207 ->Show();
208
209 chooser_bubble_ui_view_delegate_->UpdateTableView();
210 }
211
212 void ChooserBubbleUiView::Close() {}
213
214 void ChooserBubbleUiView::UpdateAnchorPosition() {
215 chooser_bubble_ui_view_delegate_->UpdateAnchor(GetAnchorView(),
216 GetAnchorArrow());
217 }
218
219 views::View* ChooserBubbleUiView::GetAnchorView() {
220 BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser_);
221
222 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
223 return browser_view->GetLocationBarView()
224 ->location_icon_view()
225 ->GetImageView();
226
227 if (browser_view->IsFullscreenBubbleVisible())
228 return browser_view->exclusive_access_bubble()->GetView();
229
230 return browser_view->top_container();
231 }
232
233 views::BubbleBorder::Arrow ChooserBubbleUiView::GetAnchorArrow() {
234 if (browser_->SupportsWindowFeature(Browser::FEATURE_LOCATIONBAR))
235 return views::BubbleBorder::TOP_LEFT;
236 return views::BubbleBorder::NONE;
237 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698