Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(189)

Unified Diff: content/browser/renderer_host/java/java_bound_object.cc

Issue 18570003: Move Renderer-side NPObject owner tracking to JavaBridgeChannel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move some comment cleanup to crrev.com/17428003 Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/java/java_bound_object.cc
diff --git a/content/browser/renderer_host/java/java_bound_object.cc b/content/browser/renderer_host/java/java_bound_object.cc
index 4199cca77b8086243fc0611aefbb1e5f53f7f77d..fafa5bd19497dfd6fe1a6f036edcfbbca0956d24 100644
--- a/content/browser/renderer_host/java/java_bound_object.cc
+++ b/content/browser/renderer_host/java/java_bound_object.cc
@@ -213,7 +213,15 @@ bool CallJNIMethod(
NULL_TO_NPVARIANT(*result);
break;
}
- OBJECT_TO_NPVARIANT(JavaBoundObject::Create(scoped_java_object,
+ // Every NPObject must have an owner. All JavaBoundObjects are owned by
+ // the JavaBridgeDispatcherHostManager, so if it's already gone, return
+ // null instead of an object.
+ if (!manager) {
+ NULL_TO_NPVARIANT(*result);
+ break;
+ }
+ OBJECT_TO_NPVARIANT(JavaBoundObject::Create(manager->object_owner_id(),
+ scoped_java_object,
safe_annotation_clazz,
manager),
*result);
@@ -776,14 +784,13 @@ jvalue CoerceJavaScriptValueToJavaValue(const NPVariant& variant,
} // namespace
NPObject* JavaBoundObject::Create(
+ struct _NPP* object_owner_id,
const JavaRef<jobject>& object,
const JavaRef<jclass>& safe_annotation_clazz,
const base::WeakPtr<JavaBridgeDispatcherHostManager>& manager) {
- // The first argument (a plugin's instance handle) is passed through to the
- // allocate function directly, and we don't use it, so it's ok to be 0.
// The object is created with a ref count of one.
- NPObject* np_object = WebBindings::createObject(0, const_cast<NPClass*>(
- &JavaNPObject::kNPClass));
+ NPObject* np_object = WebBindings::createObject(object_owner_id,
+ const_cast<NPClass*>(&JavaNPObject::kNPClass));
// The NPObject takes ownership of the JavaBoundObject.
reinterpret_cast<JavaNPObject*>(np_object)->bound_object =
new JavaBoundObject(object, safe_annotation_clazz, manager);

Powered by Google App Engine
This is Rietveld 408576698