summaryrefslogtreecommitdiffstats
path: root/content/renderer/java
diff options
context:
space:
mode:
authorwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-08 04:29:40 +0000
committerwez@chromium.org <wez@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-08 04:29:40 +0000
commit27ec8b6653c97bf5ba26549b484cbaf878d40ccf (patch)
tree352c8fb96e1dac45a96d45d2703a8cee91b11b68 /content/renderer/java
parente450068eb59ae9bac3013437432c608cc2b71ae7 (diff)
downloadchromium_src-27ec8b6653c97bf5ba26549b484cbaf878d40ccf.zip
chromium_src-27ec8b6653c97bf5ba26549b484cbaf878d40ccf.tar.gz
chromium_src-27ec8b6653c97bf5ba26549b484cbaf878d40ccf.tar.bz2
Move Renderer-side NPObject owner tracking to JavaBridgeChannel.
This is defensive against the possibility of a single JavaBridgeChannel to the Browser hosting multiple JavaBridgeDispatchers. BUG=152006 Review URL: https://chromiumcodereview.appspot.com/18570003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@210343 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer/java')
-rw-r--r--content/renderer/java/java_bridge_channel.cc9
-rw-r--r--content/renderer/java/java_bridge_channel.h5
-rw-r--r--content/renderer/java/java_bridge_dispatcher.cc9
-rw-r--r--content/renderer/java/java_bridge_dispatcher.h4
4 files changed, 14 insertions, 13 deletions
diff --git a/content/renderer/java/java_bridge_channel.cc b/content/renderer/java/java_bridge_channel.cc
index 7d95421..235425a 100644
--- a/content/renderer/java/java_bridge_channel.cc
+++ b/content/renderer/java/java_bridge_channel.cc
@@ -7,6 +7,7 @@
#include "content/child/child_process.h"
#include "content/child/plugin_messages.h"
#include "content/common/java_bridge_messages.h"
+#include "third_party/WebKit/public/web/WebBindings.h"
namespace content {
@@ -22,10 +23,16 @@ JavaBridgeChannel* JavaBridgeChannel::GetJavaBridgeChannel(
ChildProcess::current()->GetShutDownEvent()));
}
-JavaBridgeChannel::JavaBridgeChannel() {
+JavaBridgeChannel::JavaBridgeChannel()
+ : peer_owner_id_(new struct _NPP) {
+ // Register the dummy owner Id for our peer (the Browser process) as an object
+ // owner, and have all objects received from the peer owned by it.
+ WebKit::WebBindings::registerObjectOwner(peer_owner_id_.get());
+ SetDefaultNPObjectOwner(peer_owner_id_.get());
}
JavaBridgeChannel::~JavaBridgeChannel() {
+ WebKit::WebBindings::unregisterObjectOwner(peer_owner_id_.get());
}
int JavaBridgeChannel::GenerateRouteID() {
diff --git a/content/renderer/java/java_bridge_channel.h b/content/renderer/java/java_bridge_channel.h
index dbedceec..324a3a2 100644
--- a/content/renderer/java/java_bridge_channel.h
+++ b/content/renderer/java/java_bridge_channel.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_RENDERER_JAVA_JAVA_BRIDGE_CHANNEL_H_
#define CONTENT_RENDERER_JAVA_JAVA_BRIDGE_CHANNEL_H_
+#include "base/memory/scoped_ptr.h"
#include "content/child/np_channel_base.h"
#include "ipc/ipc_channel_handle.h"
@@ -30,6 +31,10 @@ class JavaBridgeChannel : public content::NPChannelBase {
static NPChannelBase* ClassFactory() { return new JavaBridgeChannel(); }
+ // Dummy NPObject owner Id used to track objects owned by the JavaBridge
+ // peer in the Browser process.
+ scoped_ptr<struct _NPP> peer_owner_id_;
+
DISALLOW_COPY_AND_ASSIGN(JavaBridgeChannel);
};
diff --git a/content/renderer/java/java_bridge_dispatcher.cc b/content/renderer/java/java_bridge_dispatcher.cc
index af899a0..c0b5994 100644
--- a/content/renderer/java/java_bridge_dispatcher.cc
+++ b/content/renderer/java/java_bridge_dispatcher.cc
@@ -18,8 +18,7 @@
namespace content {
JavaBridgeDispatcher::JavaBridgeDispatcher(RenderView* render_view)
- : RenderViewObserver(render_view), owner_id_(new struct _NPP) {
- WebKit::WebBindings::registerObjectOwner(owner_id_.get());
+ : RenderViewObserver(render_view) {
}
void JavaBridgeDispatcher::EnsureChannelIsSetUp() {
@@ -32,10 +31,6 @@ void JavaBridgeDispatcher::EnsureChannelIsSetUp() {
channel_ = JavaBridgeChannel::GetJavaBridgeChannel(
channel_handle, ChildProcess::current()->io_message_loop_proxy());
-
- // All objects received from the Browser process belong to us.
- if (channel_.get())
- channel_->SetDefaultNPObjectOwner(owner_id_.get());
}
JavaBridgeDispatcher::~JavaBridgeDispatcher() {
@@ -43,8 +38,6 @@ JavaBridgeDispatcher::~JavaBridgeDispatcher() {
iter != objects_.end(); ++iter) {
WebKit::WebBindings::releaseObject(NPVARIANT_TO_OBJECT(iter->second));
}
-
- WebKit::WebBindings::unregisterObjectOwner(owner_id_.get());
}
bool JavaBridgeDispatcher::OnMessageReceived(const IPC::Message& msg) {
diff --git a/content/renderer/java/java_bridge_dispatcher.h b/content/renderer/java/java_bridge_dispatcher.h
index 4cb34b5..29a10374 100644
--- a/content/renderer/java/java_bridge_dispatcher.h
+++ b/content/renderer/java/java_bridge_dispatcher.h
@@ -8,13 +8,10 @@
#include <map>
#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
#include "content/public/renderer/render_view_observer.h"
#include "ipc/ipc_channel_handle.h"
#include "third_party/npapi/bindings/npruntime.h"
-struct _NPP;
-
namespace content {
class JavaBridgeChannel;
struct NPVariant_Param;
@@ -47,7 +44,6 @@ class JavaBridgeDispatcher : public RenderViewObserver {
typedef std::map<string16, NPVariant> ObjectMap;
ObjectMap objects_;
scoped_refptr<JavaBridgeChannel> channel_;
- scoped_ptr<struct _NPP> owner_id_;
};
} // namespace content