summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views
diff options
context:
space:
mode:
authortimsteele@google.com <timsteele@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-11 17:02:31 +0000
committertimsteele@google.com <timsteele@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-11 17:02:31 +0000
commitf58299c720f394f0187fb5c24734be512196eb3f (patch)
tree38b08ab4ca6dae7eaaef13f1202e8566d64a9a7c /chrome/browser/views
parent78b1722653b794a0a68f0cc473fc1855b95517ae (diff)
downloadchromium_src-f58299c720f394f0187fb5c24734be512196eb3f.zip
chromium_src-f58299c720f394f0187fb5c24734be512196eb3f.tar.gz
chromium_src-f58299c720f394f0187fb5c24734be512196eb3f.tar.bz2
A simple view that wraps a RenderViewHost in an HWNDView, to facilitate
rendering HTML as an arbitrary browser view. DOMView currently does something like this, but it uses TabContents and is hence pretty heavyweight. We may be able to replace DOMView with HWNDHtmlView. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@656 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r--chrome/browser/views/hwnd_html_view.cc77
-rw-r--r--chrome/browser/views/hwnd_html_view.h83
2 files changed, 160 insertions, 0 deletions
diff --git a/chrome/browser/views/hwnd_html_view.cc b/chrome/browser/views/hwnd_html_view.cc
new file mode 100644
index 0000000..519e7f3
--- /dev/null
+++ b/chrome/browser/views/hwnd_html_view.cc
@@ -0,0 +1,77 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "chrome/browser/views/hwnd_html_view.h"
+
+#include "chrome/browser/render_view_host.h"
+#include "chrome/browser/render_widget_host_hwnd.h"
+#include "chrome/browser/render_view_host_delegate.h"
+#include "chrome/browser/site_instance.h"
+#include "chrome/views/view_container.h"
+
+HWNDHtmlView::~HWNDHtmlView() {
+ if (render_view_host_) {
+ Detach();
+ render_view_host_->Shutdown();
+ render_view_host_ = NULL;
+ }
+}
+
+void HWNDHtmlView::Init(HWND parent_hwnd) {
+ DCHECK(!render_view_host_) << "Already initialized.";
+ RenderViewHost* rvh = new RenderViewHost(
+ SiteInstance::CreateSiteInstance(delegate_->GetProfile()),
+ delegate_, MSG_ROUTING_NONE, NULL);
+ render_view_host_ = rvh;
+
+ RenderWidgetHostHWND* view = new RenderWidgetHostHWND(rvh);
+ rvh->set_view(view);
+
+ // Create the HWND. Note:
+ // RenderWidgetHostHWND supports windowed plugins, but if we ever also wanted
+ // to support constrained windows with this, we would need an additional
+ // HWND to parent off of because windowed plugin HWNDs cannot exist in the
+ // same z-order as constrained windows.
+ HWND hwnd = view->Create(parent_hwnd);
+ view->ShowWindow(SW_SHOW);
+ ChromeViews::HWNDView::Attach(hwnd);
+
+ // Start up the renderer.
+ if (allow_dom_ui_bindings_)
+ rvh->AllowDOMUIBindings();
+ rvh->CreateRenderView();
+ rvh->NavigateToURL(content_url_);
+ initialized_ = true;
+}
+
+void HWNDHtmlView::ViewHierarchyChanged(bool is_add, View* parent,
+ View* child) {
+ if (is_add && GetViewContainer() && !initialized_)
+ Init(GetViewContainer()->GetHWND());
+} \ No newline at end of file
diff --git a/chrome/browser/views/hwnd_html_view.h b/chrome/browser/views/hwnd_html_view.h
new file mode 100644
index 0000000..8ff1c89
--- /dev/null
+++ b/chrome/browser/views/hwnd_html_view.h
@@ -0,0 +1,83 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef CHROME_BROWSER_VIEWS_HWND_HTML_VIEW_H_
+#define CHROME_BROWSER_VIEWS_HWND_HTML_VIEW_H_
+
+#include "googleurl/src/gurl.h"
+#include "chrome/views/hwnd_view.h"
+
+class RenderViewHost;
+class RenderViewHostDelegate;
+
+// A simple view that wraps a RenderViewHost in an HWNDView to facilitate
+// rendering HTML as arbitrary browser views.
+// TODO(timsteele): (bug 1317303). This should replace DOMView.
+class HWNDHtmlView : public ChromeViews::HWNDView {
+ public:
+ HWNDHtmlView(const GURL& content_url, RenderViewHostDelegate* delegate,
+ bool allow_dom_ui_bindings)
+ : render_view_host_(NULL),
+ content_url_(content_url),
+ allow_dom_ui_bindings_(allow_dom_ui_bindings),
+ delegate_(delegate),
+ initialized_(false) {
+ }
+ virtual ~HWNDHtmlView();
+
+ RenderViewHost* render_view_host() { return render_view_host_; }
+
+ protected:
+ // View overrides.
+ virtual void ViewHierarchyChanged(bool is_add, View *parent, View *child);
+
+ private:
+ // Initialize the view, parented to |parent|, and show it.
+ void Init(HWND parent);
+
+ // The URL of the HTML content to render and show in this view.
+ GURL content_url_;
+
+ // Our HTML rendering component.
+ RenderViewHost* render_view_host_;
+
+ // Whether or not the rendered content is permitted to send messages back to
+ // the view, through |delegate_| via ProcessDOMUIMessage.
+ bool allow_dom_ui_bindings_;
+
+ // True after Init() has completed.
+ bool initialized_;
+
+ // The delegate for our render_view_host.
+ RenderViewHostDelegate* delegate_;
+
+ DISALLOW_EVIL_CONSTRUCTORS(HWNDHtmlView);
+};
+
+#endif // CHROME_BROWSER_VIEWS_HWND_HTML_VIEW_H_