From 6b532429a47bc57fe44a6da06ddc69f4e9300829 Mon Sep 17 00:00:00 2001 From: "joth@chromium.org" Date: Thu, 22 Mar 2012 13:52:57 +0000 Subject: Remove env() getter from JavaRef<> Due to threadsafety ambiguity, it's not generally safe to call env() on a random Ref you've been passed, so this removes the temptation. The useful LocalRef optimizations are retained though, just in that sub-class. (upstreaming CL, cherrypicked cleanly) BUG= TEST= Review URL: http://codereview.chromium.org/9584014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128204 0039d316-1c4b-4281-b951-d872f2087c98 --- content/browser/renderer_host/java/java_bound_object.cc | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to '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 ce13300..a9f7920 100644 --- a/content/browser/renderer_host/java/java_bound_object.cc +++ b/content/browser/renderer_host/java/java_bound_object.cc @@ -691,21 +691,18 @@ NPObject* JavaBoundObject::Create(const JavaRef& object) { } JavaBoundObject::JavaBoundObject(const JavaRef& object) - : java_object_(object.env()->NewGlobalRef(object.obj())) { + : java_object_(object) { // We don't do anything with our Java object when first created. We do it all // lazily when a method is first invoked. } JavaBoundObject::~JavaBoundObject() { - // Use the current thread's JNI env to release our global ref to the Java - // object. - AttachCurrentThread()->DeleteGlobalRef(java_object_); } jobject JavaBoundObject::GetJavaObject(NPObject* object) { DCHECK_EQ(&JavaNPObject::kNPClass, object->_class); JavaBoundObject* jbo = reinterpret_cast(object)->bound_object; - return jbo->java_object_; + return jbo->java_object_.obj(); } bool JavaBoundObject::HasMethod(const std::string& name) const { @@ -746,8 +743,8 @@ bool JavaBoundObject::Invoke(const std::string& name, const NPVariant* args, } // Call - *result = CallJNIMethod(java_object_, method->return_type(), method->id(), - ¶meters[0]); + *result = CallJNIMethod(java_object_.obj(), method->return_type(), + method->id(), ¶meters[0]); return true; } @@ -758,7 +755,7 @@ void JavaBoundObject::EnsureMethodsAreSetUp() const { JNIEnv* env = AttachCurrentThread(); ScopedJavaLocalRef clazz(env, static_cast( - env->CallObjectMethod(java_object_, GetMethodIDFromClassName( + env->CallObjectMethod(java_object_.obj(), GetMethodIDFromClassName( env, kJavaLangObject, kGetClass, -- cgit v1.1