Index: base/android/scoped_java_ref.cc |
diff --git a/base/android/scoped_java_ref.cc b/base/android/scoped_java_ref.cc |
index da932f8ddd0753571ffbcaf54e9e90b614614441..a7e073a4989f4ca813f29f35fcf13ada4de8eb18 100644 |
--- a/base/android/scoped_java_ref.cc |
+++ b/base/android/scoped_java_ref.cc |
@@ -4,6 +4,8 @@ |
#include "base/android/scoped_java_ref.h" |
+#include "base/logging.h" |
+ |
namespace base { |
namespace android { |
@@ -12,7 +14,10 @@ JavaRef<jobject>::JavaRef() : env_(NULL), obj_(NULL) {} |
JavaRef<jobject>::JavaRef(JNIEnv* env, jobject obj) |
: env_(env), |
obj_(obj) { |
- DCHECK_EQ(JNILocalRefType, env->GetObjectRefType(obj)); |
+ if (obj) { |
+ DCHECK(env); |
+ DCHECK_EQ(JNILocalRefType, env->GetObjectRefType(obj)); |
+ } |
} |
JavaRef<jobject>::~JavaRef() { |
@@ -36,6 +41,20 @@ void JavaRef<jobject>::SetNewGlobalRef(JNIEnv* env, jobject obj) { |
obj_ = obj; |
} |
+void JavaRef<jobject>::ResetLocalRef() { |
+ if (obj_) |
+ env_->DeleteLocalRef(obj_); |
+ env_ = NULL; |
+ obj_ = NULL; |
+} |
+ |
+void JavaRef<jobject>::ResetGlobalRef() { |
+ if (obj_) |
+ env_->DeleteGlobalRef(obj_); |
+ env_ = NULL; |
+ obj_ = NULL; |
+} |
+ |
jobject JavaRef<jobject>::ReleaseInternal() { |
jobject obj = obj_; |
env_ = NULL; |