Fix emulator build error
[platform/framework/web/chromium-efl.git] / base / android / jni_weak_ref.cc
1 // Copyright 2014 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/android/jni_weak_ref.h"
6
7 #include <utility>
8
9 #include "base/android/jni_android.h"
10
11 using base::android::AttachCurrentThread;
12
13 JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef() : obj_(nullptr) {}
14
15 JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(
16     const JavaObjectWeakGlobalRef& orig)
17     : obj_(nullptr) {
18   Assign(orig);
19 }
20
21 JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(
22     JavaObjectWeakGlobalRef&& orig) noexcept
23     : obj_(orig.obj_) {
24   orig.obj_ = nullptr;
25 }
26
27 JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(JNIEnv* env, jobject obj)
28     : obj_(env->NewWeakGlobalRef(obj)) {
29 }
30
31 JavaObjectWeakGlobalRef::JavaObjectWeakGlobalRef(
32     JNIEnv* env,
33     const base::android::JavaRef<jobject>& obj)
34     : obj_(env->NewWeakGlobalRef(obj.obj())) {
35 }
36
37 JavaObjectWeakGlobalRef::~JavaObjectWeakGlobalRef() {
38   reset();
39 }
40
41 void JavaObjectWeakGlobalRef::operator=(const JavaObjectWeakGlobalRef& rhs) {
42   Assign(rhs);
43 }
44
45 void JavaObjectWeakGlobalRef::operator=(JavaObjectWeakGlobalRef&& rhs) {
46   std::swap(obj_, rhs.obj_);
47 }
48
49 void JavaObjectWeakGlobalRef::reset() {
50   if (obj_) {
51     AttachCurrentThread()->DeleteWeakGlobalRef(obj_);
52     obj_ = nullptr;
53   }
54 }
55
56 base::android::ScopedJavaLocalRef<jobject>
57     JavaObjectWeakGlobalRef::get(JNIEnv* env) const {
58   return GetRealObject(env, obj_);
59 }
60
61 base::android::ScopedJavaLocalRef<jobject> GetRealObject(
62     JNIEnv* env, jweak obj) {
63   jobject real = nullptr;
64   if (obj)
65     real = env->NewLocalRef(obj);
66   return base::android::ScopedJavaLocalRef<jobject>(env, real);
67 }
68
69 void JavaObjectWeakGlobalRef::Assign(const JavaObjectWeakGlobalRef& other) {
70   if (&other == this)
71     return;
72
73   JNIEnv* env = AttachCurrentThread();
74   if (obj_)
75     env->DeleteWeakGlobalRef(obj_);
76
77   obj_ = other.obj_ ? env->NewWeakGlobalRef(other.obj_) : nullptr;
78 }