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

Side by Side Diff: chrome/browser/ui/views/web_dialog_view.cc

Issue 10214001: WebDialogs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/html_dialog_view.h" 5 #include "chrome/browser/ui/views/web_dialog_view.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/property_bag.h" 9 #include "base/property_bag.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/ui/browser_dialogs.h" 12 #include "chrome/browser/ui/browser_dialogs.h"
13 #include "chrome/browser/ui/webui/html_dialog_controller.h" 13 #include "chrome/browser/ui/webui/web_dialog_controller.h"
14 #include "content/public/browser/native_web_keyboard_event.h" 14 #include "content/public/browser/native_web_keyboard_event.h"
15 #include "content/public/browser/notification_details.h" 15 #include "content/public/browser/notification_details.h"
16 #include "content/public/browser/notification_source.h" 16 #include "content/public/browser/notification_source.h"
17 #include "content/public/browser/notification_types.h" 17 #include "content/public/browser/notification_types.h"
18 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
19 #include "ui/base/keycodes/keyboard_codes.h" 19 #include "ui/base/keycodes/keyboard_codes.h"
20 #include "ui/views/controls/webview/webview.h" 20 #include "ui/views/controls/webview/webview.h"
21 #include "ui/views/events/event.h" 21 #include "ui/views/events/event.h"
22 #include "ui/views/layout/fill_layout.h" 22 #include "ui/views/layout/fill_layout.h"
23 #include "ui/views/widget/root_view.h" 23 #include "ui/views/widget/root_view.h"
24 #include "ui/views/widget/widget.h" 24 #include "ui/views/widget/widget.h"
25 25
26 #if defined(USE_AURA) 26 #if defined(USE_AURA)
27 #include "ui/aura/event.h" 27 #include "ui/aura/event.h"
28 #include "ui/views/widget/native_widget_aura.h" 28 #include "ui/views/widget/native_widget_aura.h"
29 #endif 29 #endif
30 30
31 using content::WebContents; 31 using content::WebContents;
32 using content::WebUIMessageHandler; 32 using content::WebUIMessageHandler;
33 33
34 namespace browser { 34 namespace browser {
35 35
36 // Declared in browser_dialogs.h so that others don't need to depend on our .h. 36 // Declared in browser_dialogs.h so that others don't need to depend on our .h.
37 gfx::NativeWindow ShowHtmlDialog(gfx::NativeWindow parent, 37 gfx::NativeWindow ShowWebDialog(gfx::NativeWindow parent,
38 Profile* profile, 38 Profile* profile,
39 Browser* browser, 39 Browser* browser,
40 HtmlDialogUIDelegate* delegate, 40 WebDialogDelegate* delegate,
41 DialogStyle style) { 41 DialogStyle style) {
42 views::Widget* widget = views::Widget::CreateWindowWithParent( 42 views::Widget* widget = views::Widget::CreateWindowWithParent(
43 new HtmlDialogView(profile, browser, delegate), 43 new WebDialogView(profile, browser, delegate),
44 parent); 44 parent);
45 widget->Show(); 45 widget->Show();
46 return widget->GetNativeWindow(); 46 return widget->GetNativeWindow();
47 } 47 }
48 48
49 void CloseHtmlDialog(gfx::NativeWindow window) { 49 void CloseWebDialog(gfx::NativeWindow window) {
50 views::Widget::GetWidgetForNativeWindow(window)->Close(); 50 views::Widget::GetWidgetForNativeWindow(window)->Close();
51 } 51 }
52 52
53 } // namespace browser 53 } // namespace browser
54 54
55 //////////////////////////////////////////////////////////////////////////////// 55 ////////////////////////////////////////////////////////////////////////////////
56 // HtmlDialogView, public: 56 // WebDialogView, public:
57 57
58 HtmlDialogView::HtmlDialogView(Profile* profile, 58 WebDialogView::WebDialogView(Profile* profile,
59 Browser* browser, 59 Browser* browser,
60 HtmlDialogUIDelegate* delegate) 60 WebDialogDelegate* delegate)
61 : HtmlDialogTabContentsDelegate(profile), 61 : WebDialogWebContentsDelegate(profile),
62 initialized_(false), 62 initialized_(false),
63 delegate_(delegate), 63 delegate_(delegate),
64 dialog_controller_(new HtmlDialogController(this, profile, browser)), 64 dialog_controller_(new WebDialogController(this, profile, browser)),
65 web_view_(new views::WebView(profile)) { 65 web_view_(new views::WebView(profile)) {
66 web_view_->set_allow_accelerators(true); 66 web_view_->set_allow_accelerators(true);
67 AddChildView(web_view_); 67 AddChildView(web_view_);
68 SetLayoutManager(new views::FillLayout); 68 SetLayoutManager(new views::FillLayout);
69 // Pressing the ESC key will close the dialog. 69 // Pressing the ESC key will close the dialog.
70 AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, false, false, false)); 70 AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, false, false, false));
71 } 71 }
72 72
73 HtmlDialogView::~HtmlDialogView() { 73 WebDialogView::~WebDialogView() {
74 } 74 }
75 75
76 content::WebContents* HtmlDialogView::web_contents() { 76 content::WebContents* WebDialogView::web_contents() {
77 return web_view_->web_contents(); 77 return web_view_->web_contents();
78 } 78 }
79 79
80 //////////////////////////////////////////////////////////////////////////////// 80 ////////////////////////////////////////////////////////////////////////////////
81 // HtmlDialogView, views::View implementation: 81 // WebDialogView, views::View implementation:
82 82
83 gfx::Size HtmlDialogView::GetPreferredSize() { 83 gfx::Size WebDialogView::GetPreferredSize() {
84 gfx::Size out; 84 gfx::Size out;
85 if (delegate_) 85 if (delegate_)
86 delegate_->GetMinimumDialogSize(&out); 86 delegate_->GetMinimumDialogSize(&out);
87 return out; 87 return out;
88 } 88 }
89 89
90 bool HtmlDialogView::AcceleratorPressed(const ui::Accelerator& accelerator) { 90 bool WebDialogView::AcceleratorPressed(const ui::Accelerator& accelerator) {
91 // Pressing ESC closes the dialog. 91 // Pressing ESC closes the dialog.
92 DCHECK_EQ(ui::VKEY_ESCAPE, accelerator.key_code()); 92 DCHECK_EQ(ui::VKEY_ESCAPE, accelerator.key_code());
93 OnDialogClosed(std::string()); 93 OnDialogClosed(std::string());
94 return true; 94 return true;
95 } 95 }
96 96
97 void HtmlDialogView::ViewHierarchyChanged(bool is_add, 97 void WebDialogView::ViewHierarchyChanged(bool is_add,
98 views::View* parent, 98 views::View* parent,
99 views::View* child) { 99 views::View* child) {
100 if (is_add && GetWidget()) 100 if (is_add && GetWidget())
101 InitDialog(); 101 InitDialog();
102 } 102 }
103 103
104 //////////////////////////////////////////////////////////////////////////////// 104 ////////////////////////////////////////////////////////////////////////////////
105 // HtmlDialogView, views::WidgetDelegate implementation: 105 // WebDialogView, views::WidgetDelegate implementation:
106 106
107 bool HtmlDialogView::CanResize() const { 107 bool WebDialogView::CanResize() const {
108 return true; 108 return true;
109 } 109 }
110 110
111 ui::ModalType HtmlDialogView::GetModalType() const { 111 ui::ModalType WebDialogView::GetModalType() const {
112 return GetDialogModalType(); 112 return GetDialogModalType();
113 } 113 }
114 114
115 string16 HtmlDialogView::GetWindowTitle() const { 115 string16 WebDialogView::GetWindowTitle() const {
116 if (delegate_) 116 if (delegate_)
117 return delegate_->GetDialogTitle(); 117 return delegate_->GetDialogTitle();
118 return string16(); 118 return string16();
119 } 119 }
120 120
121 std::string HtmlDialogView::GetWindowName() const { 121 std::string WebDialogView::GetWindowName() const {
122 if (delegate_) 122 if (delegate_)
123 return delegate_->GetDialogName(); 123 return delegate_->GetDialogName();
124 return std::string(); 124 return std::string();
125 } 125 }
126 126
127 void HtmlDialogView::WindowClosing() { 127 void WebDialogView::WindowClosing() {
128 // If we still have a delegate that means we haven't notified it of the 128 // If we still have a delegate that means we haven't notified it of the
129 // dialog closing. This happens if the user clicks the Close button on the 129 // dialog closing. This happens if the user clicks the Close button on the
130 // dialog. 130 // dialog.
131 if (delegate_) 131 if (delegate_)
132 OnDialogClosed(""); 132 OnDialogClosed("");
133 } 133 }
134 134
135 views::View* HtmlDialogView::GetContentsView() { 135 views::View* WebDialogView::GetContentsView() {
136 return this; 136 return this;
137 } 137 }
138 138
139 views::View* HtmlDialogView::GetInitiallyFocusedView() { 139 views::View* WebDialogView::GetInitiallyFocusedView() {
140 return web_view_; 140 return web_view_;
141 } 141 }
142 142
143 bool HtmlDialogView::ShouldShowWindowTitle() const { 143 bool WebDialogView::ShouldShowWindowTitle() const {
144 return ShouldShowDialogTitle(); 144 return ShouldShowDialogTitle();
145 } 145 }
146 146
147 views::Widget* HtmlDialogView::GetWidget() { 147 views::Widget* WebDialogView::GetWidget() {
148 return View::GetWidget(); 148 return View::GetWidget();
149 } 149 }
150 150
151 const views::Widget* HtmlDialogView::GetWidget() const { 151 const views::Widget* WebDialogView::GetWidget() const {
152 return View::GetWidget(); 152 return View::GetWidget();
153 } 153 }
154 154
155 //////////////////////////////////////////////////////////////////////////////// 155 ////////////////////////////////////////////////////////////////////////////////
156 // HtmlDialogUIDelegate implementation: 156 // WebDialogDelegate implementation:
157 157
158 ui::ModalType HtmlDialogView::GetDialogModalType() const { 158 ui::ModalType WebDialogView::GetDialogModalType() const {
159 if (delegate_) 159 if (delegate_)
160 return delegate_->GetDialogModalType(); 160 return delegate_->GetDialogModalType();
161 return ui::MODAL_TYPE_NONE; 161 return ui::MODAL_TYPE_NONE;
162 } 162 }
163 163
164 string16 HtmlDialogView::GetDialogTitle() const { 164 string16 WebDialogView::GetDialogTitle() const {
165 return GetWindowTitle(); 165 return GetWindowTitle();
166 } 166 }
167 167
168 GURL HtmlDialogView::GetDialogContentURL() const { 168 GURL WebDialogView::GetDialogContentURL() const {
169 if (delegate_) 169 if (delegate_)
170 return delegate_->GetDialogContentURL(); 170 return delegate_->GetDialogContentURL();
171 return GURL(); 171 return GURL();
172 } 172 }
173 173
174 void HtmlDialogView::GetWebUIMessageHandlers( 174 void WebDialogView::GetWebUIMessageHandlers(
175 std::vector<WebUIMessageHandler*>* handlers) const { 175 std::vector<WebUIMessageHandler*>* handlers) const {
176 if (delegate_) 176 if (delegate_)
177 delegate_->GetWebUIMessageHandlers(handlers); 177 delegate_->GetWebUIMessageHandlers(handlers);
178 } 178 }
179 179
180 void HtmlDialogView::GetDialogSize(gfx::Size* size) const { 180 void WebDialogView::GetDialogSize(gfx::Size* size) const {
181 if (delegate_) 181 if (delegate_)
182 delegate_->GetDialogSize(size); 182 delegate_->GetDialogSize(size);
183 } 183 }
184 184
185 void HtmlDialogView::GetMinimumDialogSize(gfx::Size* size) const { 185 void WebDialogView::GetMinimumDialogSize(gfx::Size* size) const {
186 if (delegate_) 186 if (delegate_)
187 delegate_->GetMinimumDialogSize(size); 187 delegate_->GetMinimumDialogSize(size);
188 } 188 }
189 189
190 std::string HtmlDialogView::GetDialogArgs() const { 190 std::string WebDialogView::GetDialogArgs() const {
191 if (delegate_) 191 if (delegate_)
192 return delegate_->GetDialogArgs(); 192 return delegate_->GetDialogArgs();
193 return std::string(); 193 return std::string();
194 } 194 }
195 195
196 void HtmlDialogView::OnDialogClosed(const std::string& json_retval) { 196 void WebDialogView::OnDialogClosed(const std::string& json_retval) {
197 HtmlDialogTabContentsDelegate::Detach(); 197 Detach();
198 if (delegate_) { 198 if (delegate_) {
199 // Store the dialog content area size. 199 // Store the dialog content area size.
200 delegate_->StoreDialogSize(GetContentsBounds().size()); 200 delegate_->StoreDialogSize(GetContentsBounds().size());
201 } 201 }
202 202
203 if (GetWidget()) 203 if (GetWidget())
204 GetWidget()->Close(); 204 GetWidget()->Close();
205 205
206 if (delegate_) { 206 if (delegate_) {
207 delegate_->OnDialogClosed(json_retval); 207 delegate_->OnDialogClosed(json_retval);
208 delegate_ = NULL; // We will not communicate further with the delegate. 208 delegate_ = NULL; // We will not communicate further with the delegate.
209 } 209 }
210 } 210 }
211 211
212 void HtmlDialogView::OnCloseContents(WebContents* source, 212 void WebDialogView::OnCloseContents(WebContents* source,
213 bool* out_close_dialog) { 213 bool* out_close_dialog) {
214 if (delegate_) 214 if (delegate_)
215 delegate_->OnCloseContents(source, out_close_dialog); 215 delegate_->OnCloseContents(source, out_close_dialog);
216 } 216 }
217 217
218 bool HtmlDialogView::ShouldShowDialogTitle() const { 218 bool WebDialogView::ShouldShowDialogTitle() const {
219 if (delegate_) 219 if (delegate_)
220 return delegate_->ShouldShowDialogTitle(); 220 return delegate_->ShouldShowDialogTitle();
221 return true; 221 return true;
222 } 222 }
223 223
224 bool HtmlDialogView::HandleContextMenu( 224 bool WebDialogView::HandleContextMenu(
225 const content::ContextMenuParams& params) { 225 const content::ContextMenuParams& params) {
226 if (delegate_) 226 if (delegate_)
227 return delegate_->HandleContextMenu(params); 227 return delegate_->HandleContextMenu(params);
228 return HtmlDialogTabContentsDelegate::HandleContextMenu(params); 228 return WebDialogWebContentsDelegate::HandleContextMenu(params);
229 } 229 }
230 230
231 //////////////////////////////////////////////////////////////////////////////// 231 ////////////////////////////////////////////////////////////////////////////////
232 // content::WebContentsDelegate implementation: 232 // content::WebContentsDelegate implementation:
233 233
234 void HtmlDialogView::MoveContents(WebContents* source, const gfx::Rect& pos) { 234 void WebDialogView::MoveContents(WebContents* source, const gfx::Rect& pos) {
235 // The contained web page wishes to resize itself. We let it do this because 235 // The contained web page wishes to resize itself. We let it do this because
236 // if it's a dialog we know about, we trust it not to be mean to the user. 236 // if it's a dialog we know about, we trust it not to be mean to the user.
237 GetWidget()->SetBounds(pos); 237 GetWidget()->SetBounds(pos);
238 } 238 }
239 239
240 // A simplified version of BrowserView::HandleKeyboardEvent(). 240 // A simplified version of BrowserView::HandleKeyboardEvent().
241 // We don't handle global keyboard shortcuts here, but that's fine since 241 // We don't handle global keyboard shortcuts here, but that's fine since
242 // they're all browser-specific. (This may change in the future.) 242 // they're all browser-specific. (This may change in the future.)
243 void HtmlDialogView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) { 243 void WebDialogView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) {
244 #if defined(USE_AURA) 244 #if defined(USE_AURA)
245 aura::KeyEvent aura_event(event.os_event->native_event(), false); 245 aura::KeyEvent aura_event(event.os_event->native_event(), false);
246 views::NativeWidgetAura* aura_widget = 246 views::NativeWidgetAura* aura_widget =
247 static_cast<views::NativeWidgetAura*>(GetWidget()->native_widget()); 247 static_cast<views::NativeWidgetAura*>(GetWidget()->native_widget());
248 aura_widget->OnKeyEvent(&aura_event); 248 aura_widget->OnKeyEvent(&aura_event);
249 #elif defined(OS_WIN) 249 #elif defined(OS_WIN)
250 // Any unhandled keyboard/character messages should be defproced. 250 // Any unhandled keyboard/character messages should be defproced.
251 // This allows stuff like F10, etc to work correctly. 251 // This allows stuff like F10, etc to work correctly.
252 DefWindowProc(event.os_event.hwnd, event.os_event.message, 252 DefWindowProc(event.os_event.hwnd, event.os_event.message,
253 event.os_event.wParam, event.os_event.lParam); 253 event.os_event.wParam, event.os_event.lParam);
254 #endif 254 #endif
255 } 255 }
256 256
257 void HtmlDialogView::CloseContents(WebContents* source) { 257 void WebDialogView::CloseContents(WebContents* source) {
258 bool close_dialog = false; 258 bool close_dialog = false;
259 OnCloseContents(source, &close_dialog); 259 OnCloseContents(source, &close_dialog);
260 if (close_dialog) 260 if (close_dialog)
261 OnDialogClosed(std::string()); 261 OnDialogClosed(std::string());
262 } 262 }
263 263
264 content::WebContents* HtmlDialogView::OpenURLFromTab( 264 content::WebContents* WebDialogView::OpenURLFromTab(
265 content::WebContents* source, 265 content::WebContents* source,
266 const content::OpenURLParams& params) { 266 const content::OpenURLParams& params) {
267 content::WebContents* new_contents = NULL; 267 content::WebContents* new_contents = NULL;
268 if (delegate_ && 268 if (delegate_ &&
269 delegate_->HandleOpenURLFromTab(source, params, &new_contents)) { 269 delegate_->HandleOpenURLFromTab(source, params, &new_contents)) {
270 return new_contents; 270 return new_contents;
271 } 271 }
272 return HtmlDialogTabContentsDelegate::OpenURLFromTab(source, params); 272 return WebDialogWebContentsDelegate::OpenURLFromTab(source, params);
273 } 273 }
274 274
275 void HtmlDialogView::AddNewContents(content::WebContents* source, 275 void WebDialogView::AddNewContents(content::WebContents* source,
276 content::WebContents* new_contents, 276 content::WebContents* new_contents,
277 WindowOpenDisposition disposition, 277 WindowOpenDisposition disposition,
278 const gfx::Rect& initial_pos, 278 const gfx::Rect& initial_pos,
279 bool user_gesture) { 279 bool user_gesture) {
280 if (delegate_ && delegate_->HandleAddNewContents( 280 if (delegate_ && delegate_->HandleAddNewContents(
281 source, new_contents, disposition, initial_pos, user_gesture)) { 281 source, new_contents, disposition, initial_pos, user_gesture)) {
282 return; 282 return;
283 } 283 }
284 HtmlDialogTabContentsDelegate::AddNewContents( 284 WebDialogWebContentsDelegate::AddNewContents(
285 source, new_contents, disposition, initial_pos, user_gesture); 285 source, new_contents, disposition, initial_pos, user_gesture);
286 } 286 }
287 287
288 void HtmlDialogView::LoadingStateChanged(content::WebContents* source) { 288 void WebDialogView::LoadingStateChanged(content::WebContents* source) {
289 if (delegate_) 289 if (delegate_)
290 delegate_->OnLoadingStateChanged(source); 290 delegate_->OnLoadingStateChanged(source);
291 } 291 }
292 292
293 //////////////////////////////////////////////////////////////////////////////// 293 ////////////////////////////////////////////////////////////////////////////////
294 // HtmlDialogView, TabRenderWatcher::Delegate implementation: 294 // WebDialogView, TabRenderWatcher::Delegate implementation:
295 295
296 void HtmlDialogView::OnRenderHostCreated(content::RenderViewHost* host) { 296 void WebDialogView::OnRenderHostCreated(content::RenderViewHost* host) {
297 } 297 }
298 298
299 void HtmlDialogView::OnTabMainFrameLoaded() { 299 void WebDialogView::OnTabMainFrameLoaded() {
300 } 300 }
301 301
302 void HtmlDialogView::OnTabMainFrameRender() { 302 void WebDialogView::OnTabMainFrameRender() {
303 tab_watcher_.reset(); 303 tab_watcher_.reset();
304 } 304 }
305 305
306 //////////////////////////////////////////////////////////////////////////////// 306 ////////////////////////////////////////////////////////////////////////////////
307 // HtmlDialogView, private: 307 // WebDialogView, private:
308 308
309 void HtmlDialogView::InitDialog() { 309 void WebDialogView::InitDialog() {
310 content::WebContents* web_contents = web_view_->GetWebContents(); 310 content::WebContents* web_contents = web_view_->GetWebContents();
311 if (web_contents->GetDelegate() == this) 311 if (web_contents->GetDelegate() == this)
312 return; 312 return;
313 313
314 web_contents->SetDelegate(this); 314 web_contents->SetDelegate(this);
315 315
316 // Set the delegate. This must be done before loading the page. See 316 // Set the delegate. This must be done before loading the page. See
317 // the comment above HtmlDialogUI in its header file for why. 317 // the comment above WebDialogUI in its header file for why.
318 HtmlDialogUI::GetPropertyAccessor().SetProperty( 318 WebDialogUI::GetPropertyAccessor().SetProperty(
319 web_contents->GetPropertyBag(), this); 319 web_contents->GetPropertyBag(), this);
320 tab_watcher_.reset(new TabRenderWatcher(web_contents, this)); 320 tab_watcher_.reset(new TabRenderWatcher(web_contents, this));
321 321
322 if (delegate_) { 322 if (delegate_) {
323 gfx::Size out; 323 gfx::Size out;
324 delegate_->GetDialogSize(&out); 324 delegate_->GetDialogSize(&out);
325 if (!out.IsEmpty() && GetWidget()) 325 if (!out.IsEmpty() && GetWidget())
326 GetWidget()->CenterWindow(out); 326 GetWidget()->CenterWindow(out);
327 } 327 }
328 328
329 web_view_->LoadInitialURL(GetDialogContentURL()); 329 web_view_->LoadInitialURL(GetDialogContentURL());
330 } 330 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/web_dialog_view.h ('k') | chrome/browser/ui/views/web_dialog_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698