Chromium Code Reviews| Index: base/android/jni_helper.cc |
| diff --git a/base/android/jni_helper.cc b/base/android/jni_helper.cc |
| index 3ff3bfb1dfb27cafd6499735f4c7b66e283510fa..6eb991e59909823c5fbac29a86ebece992671505 100644 |
| --- a/base/android/jni_helper.cc |
| +++ b/base/android/jni_helper.cc |
| @@ -9,6 +9,15 @@ |
| using base::android::AttachCurrentThread; |
| +JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef() |
| + : obj_(NULL) { |
| +} |
| + |
| +JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef( |
| + const JavaObjectWeakGlobalRef& orig) { |
| + assign(orig); |
| +} |
| + |
| JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(JNIEnv* env, jobject obj) |
| : obj_(env->NewWeakGlobalRef(obj)) { |
| DCHECK(obj_); |
| @@ -18,6 +27,10 @@ JavaObjectWeakGlobalRef::~JavaObjectWeakGlobalRef() { |
| reset(); |
| } |
| +void JavaObjectWeakGlobalRef::operator=(const JavaObjectWeakGlobalRef& rhs) { |
| + assign(rhs); |
| +} |
| + |
| void JavaObjectWeakGlobalRef::reset() { |
| if (obj_) { |
| AttachCurrentThread()->DeleteWeakGlobalRef(obj_); |
| @@ -40,3 +53,12 @@ base::android::ScopedJavaLocalRef<jobject> GetRealObject( |
| } |
| return base::android::ScopedJavaLocalRef<jobject>(env, real); |
| } |
| + |
| +void JavaObjectWeakGlobalRef::assign(const JavaObjectWeakGlobalRef& other) { |
| + JNIEnv* env = AttachCurrentThread(); |
| + base::android::ScopedJavaLocalRef<jobject> pinnedObj = other.get(env); |
|
joth
2012/09/13 20:09:12
pinned_obj
mkosiba (inactive)
2012/09/17 17:55:31
Done.
|
| + if (pinnedObj.is_null()) |
| + obj_ = NULL; |
| + else |
| + obj_ = env->NewWeakGlobalRef(pinnedObj.obj()); |
|
joth
2012/09/13 20:09:12
I don't believe you need pinned_obj at all. JNI sp
mkosiba (inactive)
2012/09/17 17:55:31
Done. Where did you find the docs? http://docs.ora
|
| +} |