| 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);
|
|
|