172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/html_dialog_view.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include <vector> 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/browser_dialogs.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/window.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/native_web_keyboard_event.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/keycodes/keyboard_codes.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "views/events/event.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/root_view.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/window/window.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OS_LINUX) 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/window/window_gtk.h" 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Declared in browser_dialogs.h so that others don't need to depend on our .h. 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsengfx::NativeWindow ShowHtmlDialog(gfx::NativeWindow parent, Profile* profile, 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen HtmlDialogUIDelegate* delegate) { 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HtmlDialogView* html_view = 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new HtmlDialogView(profile, delegate); 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick browser::CreateViewsWindow(parent, gfx::Rect(), html_view); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch html_view->InitDialog(); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch html_view->window()->Show(); 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return html_view->window()->GetNativeWindow(); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace browser 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HtmlDialogView, public: 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochHtmlDialogView::HtmlDialogView(Profile* profile, 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HtmlDialogUIDelegate* delegate) 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : DOMView(), 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HtmlDialogTabContentsDelegate(profile), 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_(delegate) { 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochHtmlDialogView::~HtmlDialogView() { 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HtmlDialogView, views::View implementation: 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgfx::Size HtmlDialogView::GetPreferredSize() { 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Size out; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->GetDialogSize(&out); 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return out; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool HtmlDialogView::AcceleratorPressed(const views::Accelerator& accelerator) { 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Pressing ESC closes the dialog. 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DCHECK_EQ(ui::VKEY_ESCAPE, accelerator.GetKeyCode()); 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnWindowClosed(); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnDialogClosed(std::string()); 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HtmlDialogView, views::WindowDelegate implementation: 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool HtmlDialogView::CanResize() const { 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool HtmlDialogView::IsModal() const { 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return delegate_->IsDialogModal(); 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return false; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::wstring HtmlDialogView::GetWindowTitle() const { 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return delegate_->GetDialogTitle(); 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return std::wstring(); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::WindowClosing() { 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If we still have a delegate that means we haven't notified it of the 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // dialog closing. This happens if the user clicks the Close button on the 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // dialog. 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (delegate_) { 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen OnWindowClosed(); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnDialogClosed(""); 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::View* HtmlDialogView::GetContentsView() { 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return this; 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::View* HtmlDialogView::GetInitiallyFocusedView() { 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return this; 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool HtmlDialogView::ShouldShowWindowTitle() const { 107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return ShouldShowDialogTitle(); 108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HtmlDialogUIDelegate implementation: 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool HtmlDialogView::IsDialogModal() const { 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return IsModal(); 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::wstring HtmlDialogView::GetDialogTitle() const { 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return GetWindowTitle(); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGURL HtmlDialogView::GetDialogContentURL() const { 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return delegate_->GetDialogContentURL(); 124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return GURL(); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid HtmlDialogView::GetWebUIMessageHandlers( 12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<WebUIMessageHandler*>* handlers) const { 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delegate_->GetWebUIMessageHandlers(handlers); 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::GetDialogSize(gfx::Size* size) const { 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->GetDialogSize(size); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string HtmlDialogView::GetDialogArgs() const { 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return delegate_->GetDialogArgs(); 141201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return std::string(); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::OnDialogClosed(const std::string& json_retval) { 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HtmlDialogTabContentsDelegate::Detach(); 1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (delegate_) { 1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick HtmlDialogUIDelegate* dialog_delegate = delegate_; 1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick delegate_ = NULL; // We will not communicate further with the delegate. 1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick dialog_delegate->OnDialogClosed(json_retval); 1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen window()->CloseWindow(); 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid HtmlDialogView::OnWindowClosed() { 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (delegate_) 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delegate_->OnWindowClosed(); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::OnCloseContents(TabContents* source, 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool* out_close_dialog) { 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (delegate_) 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->OnCloseContents(source, out_close_dialog); 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 165513209b27ff55e2841eac0e4120199c23acce758Ben Murdochbool HtmlDialogView::ShouldShowDialogTitle() const { 166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (delegate_) 167513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return delegate_->ShouldShowDialogTitle(); 168201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return true; 169201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 170201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 171201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochbool HtmlDialogView::HandleContextMenu(const ContextMenuParams& params) { 172201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (delegate_) 173201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return delegate_->HandleContextMenu(params); 174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return HtmlDialogTabContentsDelegate::HandleContextMenu(params); 175513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TabContentsDelegate implementation: 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::MoveContents(TabContents* source, const gfx::Rect& pos) { 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The contained web page wishes to resize itself. We let it do this because 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // if it's a dialog we know about, we trust it not to be mean to the user. 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetWidget()->SetBounds(pos); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A simplified version of BrowserView::HandleKeyboardEvent(). 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// We don't handle global keyboard shortcuts here, but that's fine since 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// they're all browser-specific. (This may change in the future.) 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::HandleKeyboardEvent(const NativeWebKeyboardEvent& event) { 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Any unhandled keyboard/character messages should be defproced. 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This allows stuff like F10, etc to work correctly. 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DefWindowProc(event.os_event.hwnd, event.os_event.message, 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch event.os_event.wParam, event.os_event.lParam); 1953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#elif defined(OS_LINUX) 1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::WindowGtk* window_gtk = static_cast<views::WindowGtk*>(window()); 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (event.os_event && !event.skip_in_browser) { 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen views::KeyEvent views_event(reinterpret_cast<GdkEvent*>(event.os_event)); 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen window_gtk->HandleKeyboardEvent(views_event); 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::CloseContents(TabContents* source) { 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool close_dialog = false; 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnCloseContents(source, &close_dialog); 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (close_dialog) 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnDialogClosed(std::string()); 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//////////////////////////////////////////////////////////////////////////////// 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HtmlDialogView: 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid HtmlDialogView::InitDialog() { 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Now Init the DOMView. This view runs in its own process to render the html. 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DOMView::Init(profile(), NULL); 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch tab_contents_->set_delegate(this); 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set the delegate. This must be done before loading the page. See 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the comment above HtmlDialogUI in its header file for why. 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HtmlDialogUI::GetPropertyAccessor().SetProperty(tab_contents_->property_bag(), 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch this); 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Pressing the ESC key will close the dialog. 22672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AddAccelerator(views::Accelerator(ui::VKEY_ESCAPE, false, false, false)); 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DOMView::LoadURL(GetDialogContentURL()); 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 230