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

Unified Diff: base/android/scoped_java_ref.cc

Issue 9584014: Remove env() getter from JavaRef<> (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-applied downstream patch after it was re-worked Created 8 years, 9 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
« no previous file with comments | « base/android/scoped_java_ref.h ('k') | content/browser/renderer_host/java/java_bound_object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/android/scoped_java_ref.cc
diff --git a/base/android/scoped_java_ref.cc b/base/android/scoped_java_ref.cc
index 2cbcc7519cc4b8b393258334b3a1293a2b280a5a..21b466e958423f52b6e5f5657a51056e0a146fbc 100644
--- a/base/android/scoped_java_ref.cc
+++ b/base/android/scoped_java_ref.cc
@@ -4,60 +4,67 @@
#include "base/android/scoped_java_ref.h"
+#include "base/android/jni_android.h"
#include "base/logging.h"
namespace base {
namespace android {
-JavaRef<jobject>::JavaRef() : env_(NULL), obj_(NULL) {}
+JavaRef<jobject>::JavaRef() : obj_(NULL) {}
-JavaRef<jobject>::JavaRef(JNIEnv* env, jobject obj)
- : env_(env),
- obj_(obj) {
+JavaRef<jobject>::JavaRef(JNIEnv* env, jobject obj) : obj_(obj) {
if (obj) {
- DCHECK(env);
- DCHECK_EQ(JNILocalRefType, env->GetObjectRefType(obj));
+ DCHECK(env && env->GetObjectRefType(obj) == JNILocalRefType);
}
}
JavaRef<jobject>::~JavaRef() {
}
-void JavaRef<jobject>::SetNewLocalRef(JNIEnv* env, jobject obj) {
+JNIEnv* JavaRef<jobject>::SetNewLocalRef(JNIEnv* env, jobject obj) {
+ if (!env) {
+ env = AttachCurrentThread();
+ } else {
+ DCHECK_EQ(env, AttachCurrentThread()); // Is |env| on correct thread.
+ }
if (obj)
obj = env->NewLocalRef(obj);
if (obj_)
- env_->DeleteLocalRef(obj_);
- env_ = env;
+ env->DeleteLocalRef(obj_);
obj_ = obj;
+ return env;
}
void JavaRef<jobject>::SetNewGlobalRef(JNIEnv* env, jobject obj) {
+ if (!env) {
+ env = AttachCurrentThread();
+ } else {
+ DCHECK_EQ(env, AttachCurrentThread()); // Is |env| on correct thread.
+ }
if (obj)
obj = env->NewGlobalRef(obj);
if (obj_)
- env_->DeleteGlobalRef(obj_);
- env_ = env;
+ env->DeleteGlobalRef(obj_);
obj_ = obj;
}
-void JavaRef<jobject>::ResetLocalRef() {
- if (obj_)
- env_->DeleteLocalRef(obj_);
- env_ = NULL;
- obj_ = NULL;
+void JavaRef<jobject>::ResetLocalRef(JNIEnv* env) {
+ if (obj_) {
+ DCHECK_EQ(env, AttachCurrentThread()); // Is |env| on correct thread.
+ env->DeleteLocalRef(obj_);
+ obj_ = NULL;
+ }
}
void JavaRef<jobject>::ResetGlobalRef() {
- if (obj_)
- env_->DeleteGlobalRef(obj_);
- env_ = NULL;
- obj_ = NULL;
+ if (obj_) {
+ AttachCurrentThread()->DeleteGlobalRef(obj_);
+ obj_ = NULL;
+ }
}
jobject JavaRef<jobject>::ReleaseInternal() {
jobject obj = obj_;
- env_ = NULL;
obj_ = NULL;
return obj;
}
« no previous file with comments | « base/android/scoped_java_ref.h ('k') | content/browser/renderer_host/java/java_bound_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698