diff options
author | timsteele@google.com <timsteele@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-11 17:02:31 +0000 |
---|---|---|
committer | timsteele@google.com <timsteele@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-11 17:02:31 +0000 |
commit | f58299c720f394f0187fb5c24734be512196eb3f (patch) | |
tree | 38b08ab4ca6dae7eaaef13f1202e8566d64a9a7c /chrome | |
parent | 78b1722653b794a0a68f0cc473fc1855b95517ae (diff) | |
download | chromium_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')
-rw-r--r-- | chrome/browser/browser.vcproj | 8 | ||||
-rw-r--r-- | chrome/browser/views/hwnd_html_view.cc | 77 | ||||
-rw-r--r-- | chrome/browser/views/hwnd_html_view.h | 83 |
3 files changed, 168 insertions, 0 deletions
diff --git a/chrome/browser/browser.vcproj b/chrome/browser/browser.vcproj index 18a67e2..b7c955b 100644 --- a/chrome/browser/browser.vcproj +++ b/chrome/browser/browser.vcproj @@ -1410,6 +1410,14 @@ > </File> <File + RelativePath=".\views\hwnd_html_view.cc" + > + </File> + <File + RelativePath=".\views\hwnd_html_view.h" + > + </File> + <File RelativePath=".\views\importer_lock_view.cc" > </File> 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_ |