diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-04 00:45:55 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-04 00:45:55 +0000 |
commit | fb44cb0a2570884fd4a279094ee674902916ed81 (patch) | |
tree | 0a7af8f31751dbc7123d1ee5a91655afb5c19693 /content | |
parent | 2f8c23b482763d6c4060dc007389cfd6adc7490e (diff) | |
download | chromium_src-fb44cb0a2570884fd4a279094ee674902916ed81.zip chromium_src-fb44cb0a2570884fd4a279094ee674902916ed81.tar.gz chromium_src-fb44cb0a2570884fd4a279094ee674902916ed81.tar.bz2 |
Convert PepperBrowserConnection to be a RenderFrameObserver.
BUG=245126
R=nasko@chromium.org, yzshen@chromium.org
Review URL: https://codereview.chromium.org/100943002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@238502 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/public/renderer/renderer_ppapi_host.h | 6 | ||||
-rw-r--r-- | content/renderer/pepper/mock_renderer_ppapi_host.cc | 5 | ||||
-rw-r--r-- | content/renderer/pepper/mock_renderer_ppapi_host.h | 2 | ||||
-rw-r--r-- | content/renderer/pepper/pepper_browser_connection.cc | 8 | ||||
-rw-r--r-- | content/renderer/pepper/pepper_browser_connection.h | 12 | ||||
-rw-r--r-- | content/renderer/pepper/pepper_in_process_router.cc | 8 | ||||
-rw-r--r-- | content/renderer/pepper/pepper_plugin_instance_impl.cc | 4 | ||||
-rw-r--r-- | content/renderer/pepper/renderer_ppapi_host_impl.cc | 15 | ||||
-rw-r--r-- | content/renderer/pepper/renderer_ppapi_host_impl.h | 2 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 6 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 5 |
11 files changed, 51 insertions, 22 deletions
diff --git a/content/public/renderer/renderer_ppapi_host.h b/content/public/renderer/renderer_ppapi_host.h index 298a04d..6cb70d1 100644 --- a/content/public/renderer/renderer_ppapi_host.h +++ b/content/public/renderer/renderer_ppapi_host.h @@ -40,6 +40,7 @@ class WebPluginContainer; namespace content { class PepperPluginInstance; +class RenderFrame; class RenderView; // Interface that allows components in the embedder app to talk to the @@ -71,6 +72,11 @@ class RendererPpapiHost { virtual PepperPluginInstance* GetPluginInstance( PP_Instance instance) const = 0; + // Returns the RenderFrame for the given plugin instance, or NULL if the + // instance is invalid. + virtual RenderFrame* GetRenderFrameForInstance( + PP_Instance instance) const = 0; + // Returns the RenderView for the given plugin instance, or NULL if the // instance is invalid. virtual RenderView* GetRenderViewForInstance(PP_Instance instance) const = 0; diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.cc b/content/renderer/pepper/mock_renderer_ppapi_host.cc index c54f404..770e02a 100644 --- a/content/renderer/pepper/mock_renderer_ppapi_host.cc +++ b/content/renderer/pepper/mock_renderer_ppapi_host.cc @@ -35,6 +35,11 @@ PepperPluginInstance* MockRendererPpapiHost::GetPluginInstance( return plugin_instance_.get(); } +RenderFrame* MockRendererPpapiHost::GetRenderFrameForInstance( + PP_Instance instance) const { + return NULL; +} + RenderView* MockRendererPpapiHost::GetRenderViewForInstance( PP_Instance instance) const { if (instance == pp_instance_) diff --git a/content/renderer/pepper/mock_renderer_ppapi_host.h b/content/renderer/pepper/mock_renderer_ppapi_host.h index 460a8c1..e1d4381 100644 --- a/content/renderer/pepper/mock_renderer_ppapi_host.h +++ b/content/renderer/pepper/mock_renderer_ppapi_host.h @@ -37,6 +37,8 @@ class MockRendererPpapiHost : public RendererPpapiHost { virtual bool IsValidInstance(PP_Instance instance) const OVERRIDE; virtual PepperPluginInstance* GetPluginInstance( PP_Instance instance) const OVERRIDE; + virtual RenderFrame* GetRenderFrameForInstance( + PP_Instance instance) const OVERRIDE; virtual RenderView* GetRenderViewForInstance( PP_Instance instance) const OVERRIDE; virtual blink::WebPluginContainer* GetContainerForInstance( diff --git a/content/renderer/pepper/pepper_browser_connection.cc b/content/renderer/pepper/pepper_browser_connection.cc index 803f3df..dfb2429 100644 --- a/content/renderer/pepper/pepper_browser_connection.cc +++ b/content/renderer/pepper/pepper_browser_connection.cc @@ -9,16 +9,16 @@ #include "base/logging.h" #include "content/common/view_messages.h" #include "content/renderer/pepper/pepper_in_process_router.h" -#include "content/renderer/render_view_impl.h" +#include "content/renderer/render_frame_impl.h" #include "ipc/ipc_message_macros.h" #include "ppapi/proxy/ppapi_messages.h" #include "ppapi/proxy/resource_message_params.h" namespace content { -PepperBrowserConnection::PepperBrowserConnection(RenderView* render_view) - : RenderViewObserver(render_view), - RenderViewObserverTracker<PepperBrowserConnection>(render_view), +PepperBrowserConnection::PepperBrowserConnection(RenderFrame* render_frame) + : RenderFrameObserver(render_frame), + RenderFrameObserverTracker<PepperBrowserConnection>(render_frame), next_sequence_number_(1) { } diff --git a/content/renderer/pepper/pepper_browser_connection.h b/content/renderer/pepper/pepper_browser_connection.h index bef0ba2..cfc5603 100644 --- a/content/renderer/pepper/pepper_browser_connection.h +++ b/content/renderer/pepper/pepper_browser_connection.h @@ -11,12 +11,14 @@ #include "base/callback.h" #include "base/files/file_path.h" -#include "content/public/renderer/render_view_observer.h" -#include "content/public/renderer/render_view_observer_tracker.h" +#include "content/public/renderer/render_frame_observer.h" +#include "content/public/renderer/render_frame_observer_tracker.h" #include "ppapi/c/pp_file_info.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_resource.h" +class GURL; + namespace content { // This class represents a connection from the renderer to the browser for @@ -24,12 +26,12 @@ namespace content { // and renderer communicate about ResourceHosts, they should pass the plugin // process ID to identify which plugin they are talking about. class PepperBrowserConnection - : public RenderViewObserver, - public RenderViewObserverTracker<PepperBrowserConnection> { + : public RenderFrameObserver, + public RenderFrameObserverTracker<PepperBrowserConnection> { public: typedef base::Callback<void(const std::vector<int>&)> PendingResourceIDCallback; - explicit PepperBrowserConnection(RenderView* render_view); + explicit PepperBrowserConnection(RenderFrame* render_frame); virtual ~PepperBrowserConnection(); virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; diff --git a/content/renderer/pepper/pepper_in_process_router.cc b/content/renderer/pepper/pepper_in_process_router.cc index 1446426..3773515 100644 --- a/content/renderer/pepper/pepper_in_process_router.cc +++ b/content/renderer/pepper/pepper_in_process_router.cc @@ -7,8 +7,8 @@ #include "base/bind.h" #include "base/message_loop/message_loop.h" #include "content/public/renderer/render_thread.h" -#include "content/public/renderer/render_view.h" #include "content/renderer/pepper/renderer_ppapi_host_impl.h" +#include "content/renderer/render_frame_impl.h" #include "ipc/ipc_message.h" #include "ipc/ipc_sender.h" #include "ppapi/proxy/ppapi_messages.h" @@ -65,9 +65,9 @@ IPC::Sender* PepperInProcessRouter::GetRendererToPluginSender() { ppapi::proxy::Connection PepperInProcessRouter::GetPluginConnection( PP_Instance instance) { int routing_id = 0; - RenderView* view = host_impl_->GetRenderViewForInstance(instance); - if (view) - routing_id = view->GetRoutingID(); + RenderFrame* frame = host_impl_->GetRenderFrameForInstance(instance); + if (frame) + routing_id = (static_cast<RenderFrameImpl*>(frame))->routing_id(); return ppapi::proxy::Connection(browser_channel_.get(), plugin_to_host_router_.get(), routing_id); diff --git a/content/renderer/pepper/pepper_plugin_instance_impl.cc b/content/renderer/pepper/pepper_plugin_instance_impl.cc index 9de0205..ff0ffe7 100644 --- a/content/renderer/pepper/pepper_plugin_instance_impl.cc +++ b/content/renderer/pepper/pepper_plugin_instance_impl.cc @@ -545,7 +545,7 @@ PepperPluginInstanceImpl::PepperPluginInstanceImpl( if (!module_->IsProxied()) { PepperBrowserConnection* browser_connection = - PepperBrowserConnection::Get(render_frame_->render_view()); + PepperBrowserConnection::Get(render_frame_); browser_connection->DidCreateInProcessInstance( pp_instance(), render_frame_->render_view()->GetRoutingID(), @@ -584,7 +584,7 @@ PepperPluginInstanceImpl::~PepperPluginInstanceImpl() { if (!module_->IsProxied() && render_frame_) { PepperBrowserConnection* browser_connection = - PepperBrowserConnection::Get(render_frame_->render_view()); + PepperBrowserConnection::Get(render_frame_); browser_connection->DidDeleteInProcessInstance(pp_instance()); } diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.cc b/content/renderer/pepper/renderer_ppapi_host_impl.cc index e36a40a..ae05865 100644 --- a/content/renderer/pepper/renderer_ppapi_host_impl.cc +++ b/content/renderer/pepper/renderer_ppapi_host_impl.cc @@ -132,6 +132,17 @@ ppapi::host::PpapiHost* RendererPpapiHostImpl::GetPpapiHost() { return ppapi_host_.get(); } +RenderFrame* RendererPpapiHostImpl::GetRenderFrameForInstance( + PP_Instance instance) const { + PepperPluginInstanceImpl* instance_object = GetAndValidateInstance(instance); + if (!instance_object) + return NULL; + + // Since we're the embedder, we can make assumptions about the helper on + // the instance and get back to our RenderFrame. + return instance_object->render_frame(); +} + RenderView* RendererPpapiHostImpl::GetRenderViewForInstance( PP_Instance instance) const { PepperPluginInstanceImpl* instance_object = GetAndValidateInstance(instance); @@ -231,9 +242,9 @@ void RendererPpapiHostImpl::CreateBrowserResourceHosts( PP_Instance instance, const std::vector<IPC::Message>& nested_msgs, const base::Callback<void(const std::vector<int>&)>& callback) const { - RenderView* render_view = GetRenderViewForInstance(instance); + RenderFrame* render_frame = GetRenderFrameForInstance(instance); PepperBrowserConnection* browser_connection = - PepperBrowserConnection::Get(render_view); + PepperBrowserConnection::Get(render_frame); if (!browser_connection) { base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, std::vector<int>(nested_msgs.size(), 0))); diff --git a/content/renderer/pepper/renderer_ppapi_host_impl.h b/content/renderer/pepper/renderer_ppapi_host_impl.h index 4735e7f..ebac0557 100644 --- a/content/renderer/pepper/renderer_ppapi_host_impl.h +++ b/content/renderer/pepper/renderer_ppapi_host_impl.h @@ -78,6 +78,8 @@ class RendererPpapiHostImpl : public RendererPpapiHost { virtual bool IsValidInstance(PP_Instance instance) const OVERRIDE; virtual PepperPluginInstance* GetPluginInstance( PP_Instance instance) const OVERRIDE; + virtual RenderFrame* GetRenderFrameForInstance( + PP_Instance instance) const OVERRIDE; virtual RenderView* GetRenderViewForInstance( PP_Instance instance) const OVERRIDE; virtual blink::WebPluginContainer* GetContainerForInstance( diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index d187ba2..4b793b5 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -57,6 +57,7 @@ #include "webkit/child/weburlresponse_extradata_impl.h" #if defined(ENABLE_PLUGINS) +#include "content/renderer/pepper/pepper_browser_connection.h" #include "content/renderer/pepper/pepper_plugin_instance_impl.h" #endif @@ -127,11 +128,16 @@ RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) pepper_last_mouse_event_target_(NULL) #endif { + RenderThread::Get()->AddRoute(routing_id_, this); +#if defined(ENABLE_PLUGINS) + new PepperBrowserConnection(this); +#endif } RenderFrameImpl::~RenderFrameImpl() { FOR_EACH_OBSERVER(RenderFrameObserver, observers_, RenderFrameGone()); FOR_EACH_OBSERVER(RenderFrameObserver, observers_, OnDestruct()); + RenderThread::Get()->RemoveRoute(routing_id_); } RenderWidget* RenderFrameImpl::GetRenderWidget() { diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 42c0347..2648186 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -244,7 +244,6 @@ #if defined(ENABLE_PLUGINS) #include "content/renderer/npapi/webplugin_delegate_proxy.h" #include "content/renderer/npapi/webplugin_impl.h" -#include "content/renderer/pepper/pepper_browser_connection.h" #include "content/renderer/pepper/pepper_plugin_instance_impl.h" #include "content/renderer/pepper/pepper_plugin_registry.h" #include "content/renderer/pepper/pepper_webplugin_impl.h" @@ -1006,10 +1005,6 @@ void RenderViewImpl::Initialize(RenderViewImplParams* params) { ProcessViewLayoutFlags(command_line); -#if defined(ENABLE_PLUGINS) - new PepperBrowserConnection(this); -#endif - GetContentClient()->renderer()->RenderViewCreated(this); // If we have an opener_id but we weren't created by a renderer, then |