diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-27 22:49:36 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-27 22:49:36 +0000 |
commit | 236bf85d455cd3aa4f66d16279756b96f57d762f (patch) | |
tree | 4bf1ce8869093c5c6c13863b7105986e9d96aabc /chrome/renderer | |
parent | 951ef0bdf8d1c272afb3bdce4dd3c39ffaab2fee (diff) | |
download | chromium_src-236bf85d455cd3aa4f66d16279756b96f57d762f.zip chromium_src-236bf85d455cd3aa4f66d16279756b96f57d762f.tar.gz chromium_src-236bf85d455cd3aa4f66d16279756b96f57d762f.tar.bz2 |
Hook up the PPB_Flash_Print interface to new host system.
This adds the ability to implement "instance" messages (as opposed to resource messages) to PpapiHost via a message filter interface. The ownership model for these filters works just like RenderViewObserver. All non-resource messages are sent through this list of filters.
This adds the ability to add such filters in the Chrome layer (as opposed to just content) by plumbing through some notifications. This patch responds to the trivial "Flash print" interface by calling the existing function in the renderer.
This doesn't change the in-process case. Making this code path work in process will require that the "core" instance interface be done first or at the same time. As a result, the old in-process implementation is kept (it forwards to the same function in the end).
This patch adds a HostResourceFactory for Chrome but doesn't hook it up yet. There is a TODO for this. I need to conver the host factories to a filter-like system to allow dynamic adding of filters from the Chrome layer. I'll do this in a follow-up patch.
TEST=manual
BUG=none
Review URL: https://chromiumcodereview.appspot.com/10803050
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148840 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/chrome_content_renderer_client.cc | 3 | ||||
-rw-r--r-- | chrome/renderer/pepper/DEPS | 3 | ||||
-rw-r--r-- | chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc | 30 | ||||
-rw-r--r-- | chrome/renderer/pepper/chrome_renderer_pepper_host_factory.h | 34 | ||||
-rw-r--r-- | chrome/renderer/pepper/pepper_flash_renderer_message_filter.cc | 36 | ||||
-rw-r--r-- | chrome/renderer/pepper/pepper_flash_renderer_message_filter.h | 36 | ||||
-rw-r--r-- | chrome/renderer/pepper/pepper_helper.cc | 29 | ||||
-rw-r--r-- | chrome/renderer/pepper/pepper_helper.h | 29 |
8 files changed, 200 insertions, 0 deletions
diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc index 04aff28..3ca868a 100644 --- a/chrome/renderer/chrome_content_renderer_client.cc +++ b/chrome/renderer/chrome_content_renderer_client.cc @@ -47,6 +47,7 @@ #include "chrome/renderer/page_click_tracker.h" #include "chrome/renderer/page_load_histograms.h" #include "chrome/renderer/pepper/chrome_ppapi_interfaces.h" +#include "chrome/renderer/pepper/pepper_helper.h" #include "chrome/renderer/playback_extension.h" #include "chrome/renderer/plugins/plugin_placeholder.h" #include "chrome/renderer/plugins/plugin_uma.h" @@ -281,6 +282,8 @@ void ChromeContentRendererClient::RenderViewCreated( render_view, content_settings, chrome_observer_.get(), extension_dispatcher_.get(), translate); + new PepperHelper(render_view); + // Used only for testing/automation. if (CommandLine::ForCurrentProcess()->HasSwitch( switches::kDomAutomationController)) { diff --git a/chrome/renderer/pepper/DEPS b/chrome/renderer/pepper/DEPS new file mode 100644 index 0000000..e1f8fae --- /dev/null +++ b/chrome/renderer/pepper/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + "+ppapi/host", +] diff --git a/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc b/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc new file mode 100644 index 0000000..ebdf6ba --- /dev/null +++ b/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.cc @@ -0,0 +1,30 @@ +// Copyright (c) 2012 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/renderer/pepper/chrome_renderer_pepper_host_factory.h" + +#include "ppapi/host/resource_host.h" +#include "ppapi/proxy/ppapi_messages.h" + +using ppapi::host::ResourceHost; + +namespace chrome { + +ChromeRendererPepperHostFactory::ChromeRendererPepperHostFactory() { +} + +ChromeRendererPepperHostFactory::~ChromeRendererPepperHostFactory() { +} + +scoped_ptr<ResourceHost> +ChromeRendererPepperHostFactory::CreateResourceHost( + ppapi::host::PpapiHost* host, + const ppapi::proxy::ResourceMessageCallParams& params, + PP_Instance instance, + const IPC::Message& message) { + // There are no Chrome-side implementations of resources. + return scoped_ptr<ResourceHost>(); +} + +} // namespace chrome diff --git a/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.h b/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.h new file mode 100644 index 0000000..18d609c --- /dev/null +++ b/chrome/renderer/pepper/chrome_renderer_pepper_host_factory.h @@ -0,0 +1,34 @@ +// Copyright (c) 2012 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. + +#ifndef CHROME_RENDERER_PEPPER_CHROME_RENDERER_PEPPER_HOST_FACTORY_H_ +#define CHROME_RENDERER_PEPPER_CHROME_RENDERER_PEPPER_HOST_FACTORY_H_ + +#include "base/compiler_specific.h" +#include "ppapi/host/host_factory.h" +#include "ppapi/shared_impl/ppapi_permissions.h" + +namespace chrome { + +class PepperInstanceStateAccessor; + +class ChromeRendererPepperHostFactory : public ppapi::host::HostFactory { + public: + ChromeRendererPepperHostFactory(); + virtual ~ChromeRendererPepperHostFactory(); + + // HostFactory. + virtual scoped_ptr<ppapi::host::ResourceHost> CreateResourceHost( + ppapi::host::PpapiHost* host, + const ppapi::proxy::ResourceMessageCallParams& params, + PP_Instance instance, + const IPC::Message& message) OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(ChromeRendererPepperHostFactory); +}; + +} // namespace chrome + +#endif // CHROME_RENDERER_PEPPER_CHROME_RENDERER_PEPPER_HOST_FACTORY_H_ diff --git a/chrome/renderer/pepper/pepper_flash_renderer_message_filter.cc b/chrome/renderer/pepper/pepper_flash_renderer_message_filter.cc new file mode 100644 index 0000000..c556ae0 --- /dev/null +++ b/chrome/renderer/pepper/pepper_flash_renderer_message_filter.cc @@ -0,0 +1,36 @@ +// Copyright (c) 2012 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/renderer/pepper/pepper_flash_renderer_message_filter.h" + +#include "chrome/renderer/pepper/ppb_pdf_impl.h" +#include "ppapi/proxy/ppapi_messages.h" + +namespace chrome { + +PepperFlashRendererMessageFilter::PepperFlashRendererMessageFilter( + ppapi::host::PpapiHost* host) + : InstanceMessageFilter(host) { +} + +PepperFlashRendererMessageFilter::~PepperFlashRendererMessageFilter() { +} + +bool PepperFlashRendererMessageFilter::OnInstanceMessageReceived( + const IPC::Message& msg) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(PepperFlashRendererMessageFilter, msg) + IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBFlash_InvokePrinting, + OnHostMsgInvokePrinting) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void PepperFlashRendererMessageFilter::OnHostMsgInvokePrinting( + PP_Instance instance) { + PPB_PDF_Impl::InvokePrintingForInstance(instance); +} + +} // namespace chrome diff --git a/chrome/renderer/pepper/pepper_flash_renderer_message_filter.h b/chrome/renderer/pepper/pepper_flash_renderer_message_filter.h new file mode 100644 index 0000000..3a39ae6 --- /dev/null +++ b/chrome/renderer/pepper/pepper_flash_renderer_message_filter.h @@ -0,0 +1,36 @@ +// Copyright (c) 2012 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. + +#ifndef CHROME_RENDERER_PEPPER_PEPPER_FLASH_RENDERER_MESSAGE_FILTER_H_ +#define CHROME_RENDERER_PEPPER_PEPPER_FLASH_RENDERER_MESSAGE_FILTER_H_ + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "ppapi/c/pp_instance.h" +#include "ppapi/host/instance_message_filter.h" + +namespace chrome { + +// Implements the backend for Flash-specific messages from a plugin process. +class PepperFlashRendererMessageFilter + : public ppapi::host::InstanceMessageFilter { + public: + // This class is designed to be heap-allocated. It will attach itself to the + // given host and delete itself when the host is destroyed. + explicit PepperFlashRendererMessageFilter(ppapi::host::PpapiHost* host); + virtual ~PepperFlashRendererMessageFilter(); + + // InstanceMessageFilter: + virtual bool OnInstanceMessageReceived(const IPC::Message& msg) OVERRIDE; + + private: + // Message handlers. + void OnHostMsgInvokePrinting(PP_Instance instance); + + DISALLOW_COPY_AND_ASSIGN(PepperFlashRendererMessageFilter); +}; + +} // namespace chrome + +#endif // CHROME_RENDERER_PEPPER_PEPPER_FLASH_RENDERER_MESSAGE_FILTER_H_ diff --git a/chrome/renderer/pepper/pepper_helper.cc b/chrome/renderer/pepper/pepper_helper.cc new file mode 100644 index 0000000..4cd5c4d --- /dev/null +++ b/chrome/renderer/pepper/pepper_helper.cc @@ -0,0 +1,29 @@ +// Copyright (c) 2012 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/renderer/pepper/pepper_helper.h" + +#include "chrome/renderer/pepper/chrome_renderer_pepper_host_factory.h" +#include "chrome/renderer/pepper/pepper_flash_renderer_message_filter.h" +#include "ppapi/host/ppapi_host.h" + +namespace chrome { + +PepperHelper::PepperHelper(content::RenderView* render_view) + : RenderViewObserver(render_view) { +} + +PepperHelper::~PepperHelper() { +} + +void PepperHelper::DidCreatePepperPlugin(ppapi::host::PpapiHost* host) { + // TODO(brettw) figure out how to hook up the host factory. It needs some + // kind of filter-like system to allow dynamic additions. + // new ChromeRendererPepperHostFactory(host); + host->AddInstanceMessageFilter( + scoped_ptr<ppapi::host::InstanceMessageFilter>( + new PepperFlashRendererMessageFilter(host))); +} + +} // namespace chrome diff --git a/chrome/renderer/pepper/pepper_helper.h b/chrome/renderer/pepper/pepper_helper.h new file mode 100644 index 0000000..969a80e --- /dev/null +++ b/chrome/renderer/pepper/pepper_helper.h @@ -0,0 +1,29 @@ +// Copyright (c) 2012 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. + +#ifndef CHROME_RENDERER_PEPPER_PEPPER_HELPER_H_ +#define CHROME_RENDERER_PEPPER_PEPPER_HELPER_H_ + +#include "base/compiler_specific.h" +#include "content/public/renderer/render_view_observer.h" + +namespace chrome { + +// This class listens for Pepper creation events from the RenderView and +// attaches the parts required for Chrome-specific plugin support. +class PepperHelper : public content::RenderViewObserver { + public: + explicit PepperHelper(content::RenderView* render_view); + virtual ~PepperHelper(); + + // RenderViewObserver. + virtual void DidCreatePepperPlugin(ppapi::host::PpapiHost* host) OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(PepperHelper); +}; + +} // namespace chrome + +#endif // CHROME_RENDERER_PEPPER_PEPPER_HELPER_H_ |