summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/java
diff options
context:
space:
mode:
authorjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 13:52:57 +0000
committerjoth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 13:52:57 +0000
commit6b532429a47bc57fe44a6da06ddc69f4e9300829 (patch)
tree718e5a087826efd1d7f7ebe0ab3a66881d1c9bc2 /content/browser/renderer_host/java
parent23bd102d84b2561d5d7a8648a6a725858c47acd7 (diff)
downloadchromium_src-6b532429a47bc57fe44a6da06ddc69f4e9300829.zip
chromium_src-6b532429a47bc57fe44a6da06ddc69f4e9300829.tar.gz
chromium_src-6b532429a47bc57fe44a6da06ddc69f4e9300829.tar.bz2
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
Diffstat (limited to 'content/browser/renderer_host/java')
-rw-r--r--content/browser/renderer_host/java/java_bound_object.cc13
-rw-r--r--content/browser/renderer_host/java/java_bound_object.h9
-rw-r--r--content/browser/renderer_host/java/java_method.cc6
3 files changed, 12 insertions, 16 deletions
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<jobject>& object) {
}
JavaBoundObject::JavaBoundObject(const JavaRef<jobject>& 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<JavaNPObject*>(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(),
- &parameters[0]);
+ *result = CallJNIMethod(java_object_.obj(), method->return_type(),
+ method->id(), &parameters[0]);
return true;
}
@@ -758,7 +755,7 @@ void JavaBoundObject::EnsureMethodsAreSetUp() const {
JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jclass> clazz(env, static_cast<jclass>(
- env->CallObjectMethod(java_object_, GetMethodIDFromClassName(
+ env->CallObjectMethod(java_object_.obj(), GetMethodIDFromClassName(
env,
kJavaLangObject,
kGetClass,
diff --git a/content/browser/renderer_host/java/java_bound_object.h b/content/browser/renderer_host/java/java_bound_object.h
index 61a1dfb..cf0c403 100644
--- a/content/browser/renderer_host/java/java_bound_object.h
+++ b/content/browser/renderer_host/java/java_bound_object.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -44,10 +44,9 @@ class JavaBoundObject {
void EnsureMethodsAreSetUp() const;
- // Global ref to the underlying Java object. We use a naked jobject, rather
- // than a ScopedJavaGlobalRef, as the global ref will be added and dropped on
- // different threads.
- jobject java_object_;
+ // The global ref to the underlying Java object that this JavaBoundObject
+ // instance represents.
+ base::android::ScopedJavaGlobalRef<jobject> java_object_;
// Map of public methods, from method name to Method instance. Multiple
// entries will be present for overloaded methods. Note that we can't use
diff --git a/content/browser/renderer_host/java/java_method.cc b/content/browser/renderer_host/java/java_method.cc
index 01235e8..6f6878c 100644
--- a/content/browser/renderer_host/java/java_method.cc
+++ b/content/browser/renderer_host/java/java_method.cc
@@ -95,7 +95,7 @@ JavaMethod::JavaMethod(const base::android::JavaRef<jobject>& method)
: java_method_(method),
have_calculated_num_parameters_(false),
id_(NULL) {
- JNIEnv* env = java_method_.env();
+ JNIEnv* env = AttachCurrentThread();
// On construction, we do nothing except get the name. Everything else is
// done lazily.
ScopedJavaLocalRef<jstring> name(env, static_cast<jstring>(
@@ -139,7 +139,7 @@ void JavaMethod::EnsureNumParametersIsSetUp() const {
// The number of parameters will be used frequently when determining
// whether to call this method. We don't get the ID etc until actually
// required.
- JNIEnv* env = java_method_.env();
+ JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jarray> parameters(env, static_cast<jarray>(
env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
env,
@@ -155,7 +155,7 @@ void JavaMethod::EnsureTypesAndIDAreSetUp() const {
}
// Get the parameters
- JNIEnv* env = java_method_.env();
+ JNIEnv* env = AttachCurrentThread();
ScopedJavaLocalRef<jobjectArray> parameters(env, static_cast<jobjectArray>(
env->CallObjectMethod(java_method_.obj(), GetMethodIDFromClassName(
env,