| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h" | 5 #include "content/browser/android/java/gin_java_bridge_dispatcher_host.h" |
| 6 | 6 |
| 7 #include "base/android/java_handler_thread.h" | 7 #include "base/android/java_handler_thread.h" |
| 8 #include "base/android/jni_android.h" | 8 #include "base/android/jni_android.h" |
| 9 #include "base/android/scoped_java_ref.h" | 9 #include "base/android/scoped_java_ref.h" |
| 10 #include "base/atomic_sequence_num.h" | 10 #include "base/atomic_sequence_num.h" |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 return JavaObjectWeakGlobalRef(); | 184 return JavaObjectWeakGlobalRef(); |
| 185 } | 185 } |
| 186 | 186 |
| 187 JavaObjectWeakGlobalRef | 187 JavaObjectWeakGlobalRef |
| 188 GinJavaBridgeDispatcherHost::RemoveHolderAndAdvanceLocked( | 188 GinJavaBridgeDispatcherHost::RemoveHolderAndAdvanceLocked( |
| 189 int32 holder, | 189 int32 holder, |
| 190 ObjectMap::iterator* iter_ptr) { | 190 ObjectMap::iterator* iter_ptr) { |
| 191 objects_lock_.AssertAcquired(); | 191 objects_lock_.AssertAcquired(); |
| 192 JavaObjectWeakGlobalRef result; | 192 JavaObjectWeakGlobalRef result; |
| 193 scoped_refptr<GinJavaBoundObject> object((*iter_ptr)->second); | 193 scoped_refptr<GinJavaBoundObject> object((*iter_ptr)->second); |
| 194 bool object_erased = false; |
| 194 if (!object->IsNamed()) { | 195 if (!object->IsNamed()) { |
| 195 object->RemoveHolder(holder); | 196 object->RemoveHolder(holder); |
| 196 if (!object->HasHolders()) { | 197 if (!object->HasHolders()) { |
| 197 result = object->GetWeakRef(); | 198 result = object->GetWeakRef(); |
| 198 objects_.erase((*iter_ptr)++); | 199 objects_.erase((*iter_ptr)++); |
| 200 object_erased = true; |
| 199 } | 201 } |
| 200 } else { | 202 } |
| 203 if (!object_erased) { |
| 201 ++(*iter_ptr); | 204 ++(*iter_ptr); |
| 202 } | 205 } |
| 203 return result; | 206 return result; |
| 204 } | 207 } |
| 205 | 208 |
| 206 void GinJavaBridgeDispatcherHost::RemoveFromRetainedObjectSetLocked( | 209 void GinJavaBridgeDispatcherHost::RemoveFromRetainedObjectSetLocked( |
| 207 const JavaObjectWeakGlobalRef& ref) { | 210 const JavaObjectWeakGlobalRef& ref) { |
| 208 objects_lock_.AssertAcquired(); | 211 objects_lock_.AssertAcquired(); |
| 209 JNIEnv* env = base::android::AttachCurrentThread(); | 212 JNIEnv* env = base::android::AttachCurrentThread(); |
| 210 base::android::ScopedJavaLocalRef<jobject> retained_object_set = | 213 base::android::ScopedJavaLocalRef<jobject> retained_object_set = |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 479 if (iter == objects_.end()) | 482 if (iter == objects_.end()) |
| 480 return; | 483 return; |
| 481 JavaObjectWeakGlobalRef ref = | 484 JavaObjectWeakGlobalRef ref = |
| 482 RemoveHolderAndAdvanceLocked(GetCurrentRoutingID(), &iter); | 485 RemoveHolderAndAdvanceLocked(GetCurrentRoutingID(), &iter); |
| 483 if (!ref.is_empty()) { | 486 if (!ref.is_empty()) { |
| 484 RemoveFromRetainedObjectSetLocked(ref); | 487 RemoveFromRetainedObjectSetLocked(ref); |
| 485 } | 488 } |
| 486 } | 489 } |
| 487 | 490 |
| 488 } // namespace content | 491 } // namespace content |
| OLD | NEW |