summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views/constrained_html_dialog_win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/views/constrained_html_dialog_win.cc')
-rw-r--r--chrome/browser/views/constrained_html_dialog_win.cc118
1 files changed, 118 insertions, 0 deletions
diff --git a/chrome/browser/views/constrained_html_dialog_win.cc b/chrome/browser/views/constrained_html_dialog_win.cc
new file mode 100644
index 0000000..2cdc81c
--- /dev/null
+++ b/chrome/browser/views/constrained_html_dialog_win.cc
@@ -0,0 +1,118 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/views/constrained_html_dialog_win.h"
+
+#include "chrome/browser/dom_ui/html_dialog_ui.h"
+#include "chrome/browser/profile.h"
+#include "chrome/browser/renderer_host/render_view_host.h"
+#include "chrome/browser/renderer_host/render_view_host_delegate.h"
+#include "chrome/browser/renderer_host/render_widget_host_view_win.h"
+#include "chrome/browser/renderer_host/site_instance.h"
+#include "chrome/common/bindings_policy.h"
+#include "chrome/common/renderer_preferences.h"
+#include "views/widget/widget_win.h"
+#include "views/window/window_delegate.h"
+
+class ConstrainedHtmlDialogHostView : public views::NativeViewHost {
+ public:
+ explicit ConstrainedHtmlDialogHostView(ConstrainedHtmlDialogWin* dialog)
+ : dialog_(dialog),
+ initialized_(false) {
+ }
+
+ virtual void ViewHierarchyChanged(bool is_add,
+ views::View* parent,
+ views::View* child) {
+ NativeViewHost::ViewHierarchyChanged(is_add, parent, child);
+ if (is_add && GetWidget() && !initialized_) {
+ dialog_->Init(GetWidget()->GetNativeView());
+ initialized_ = true;
+ }
+ }
+
+ private:
+ ConstrainedHtmlDialogWin* dialog_;
+ bool initialized_;
+};
+
+ConstrainedHtmlDialogWin::ConstrainedHtmlDialogWin(
+ Profile* profile,
+ HtmlDialogUIDelegate* delegate)
+ : ConstrainedHtmlDialog(profile, delegate) {
+ CHECK(delegate);
+ native_view_host_ = new ConstrainedHtmlDialogHostView(this);
+
+ // Size the native view to match the delegate preferred size.
+ gfx::Size size;
+ delegate->GetDialogSize(&size);
+ native_view_host_->SetPreferredSize(size);
+
+ // Create a site instance for the correct URL.
+ dialog_url_ = delegate->GetDialogContentURL();
+ site_instance_ =
+ SiteInstance::CreateSiteInstanceForURL(profile, dialog_url_);
+}
+
+ConstrainedHtmlDialogWin::~ConstrainedHtmlDialogWin() {
+}
+
+ConstrainedWindowDelegate*
+ConstrainedHtmlDialogWin::GetConstrainedWindowDelegate() {
+ return this;
+}
+
+bool ConstrainedHtmlDialogWin::CanResize() const {
+ return true;
+}
+
+views::View* ConstrainedHtmlDialogWin::GetContentsView() {
+ return native_view_host_;
+}
+
+void ConstrainedHtmlDialogWin::WindowClosing() {
+ html_dialog_ui_delegate()->OnDialogClosed("");
+}
+
+int ConstrainedHtmlDialogWin::GetBrowserWindowID() const {
+ return 0;
+}
+
+ViewType::Type ConstrainedHtmlDialogWin::GetRenderViewType() const {
+ return ViewType::HTML_DIALOG_UI;
+}
+
+RendererPreferences ConstrainedHtmlDialogWin::GetRendererPrefs(
+ Profile* profile) const {
+ return RendererPreferences();
+}
+
+void ConstrainedHtmlDialogWin::ProcessDOMUIMessage(
+ const ViewHostMsg_DomMessage_Params& params) {
+ DOMUI::ProcessDOMUIMessage(params);
+}
+
+void ConstrainedHtmlDialogWin::Init(gfx::NativeView parent_view) {
+ render_view_host_.reset(new RenderViewHost(site_instance_,
+ this,
+ MSG_ROUTING_NONE,
+ NULL));
+ render_view_host_->AllowBindings(BindingsPolicy::DOM_UI);
+ render_widget_host_view_ =
+ new RenderWidgetHostViewWin(render_view_host_.get());
+ render_view_host_->set_view(render_widget_host_view_);
+ render_view_host_->CreateRenderView(string16());
+ render_view_host_->NavigateToURL(dialog_url_);
+ HWND hwnd = render_widget_host_view_->Create(parent_view);
+ render_widget_host_view_->ShowWindow(SW_SHOW);
+ native_view_host_->Attach(hwnd);
+
+ InitializeDOMUI(render_view_host_.get());
+}
+
+// static
+ConstrainedHtmlDialog* ConstrainedHtmlDialog::CreateConstrainedHTMLDialog(
+ Profile* profile, HtmlDialogUIDelegate* delegate) {
+ return new ConstrainedHtmlDialogWin(profile, delegate);
+}