summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-04 00:45:55 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-04 00:45:55 +0000
commitfb44cb0a2570884fd4a279094ee674902916ed81 (patch)
tree0a7af8f31751dbc7123d1ee5a91655afb5c19693 /content
parent2f8c23b482763d6c4060dc007389cfd6adc7490e (diff)
downloadchromium_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.h6
-rw-r--r--content/renderer/pepper/mock_renderer_ppapi_host.cc5
-rw-r--r--content/renderer/pepper/mock_renderer_ppapi_host.h2
-rw-r--r--content/renderer/pepper/pepper_browser_connection.cc8
-rw-r--r--content/renderer/pepper/pepper_browser_connection.h12
-rw-r--r--content/renderer/pepper/pepper_in_process_router.cc8
-rw-r--r--content/renderer/pepper/pepper_plugin_instance_impl.cc4
-rw-r--r--content/renderer/pepper/renderer_ppapi_host_impl.cc15
-rw-r--r--content/renderer/pepper/renderer_ppapi_host_impl.h2
-rw-r--r--content/renderer/render_frame_impl.cc6
-rw-r--r--content/renderer/render_view_impl.cc5
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