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

Side by Side Diff: components/devtools_bridge/android/session_dependency_factory_android.cc

Issue 716433003: Continue impementation SessionDependencyFactoryNative. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@native-factory
Patch Set: Created 6 years, 1 month 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 unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/devtools_bridge/android/session_dependency_factory_android. h"
6
7 #include "base/android/jni_string.h"
8 #include "base/android/scoped_java_ref.h"
9 #include "base/bind.h"
10 #include "components/devtools_bridge/abstract_data_channel.h"
11 #include "components/devtools_bridge/abstract_peer_connection.h"
12 #include "components/devtools_bridge/rtc_configuration.h"
13 #include "jni/SessionDependencyFactoryNative_jni.h"
14
15 using base::android::AttachCurrentThread;
16 using base::android::ConvertJavaStringToUTF8;
17 using base::android::ConvertUTF8ToJavaString;
18
19 namespace devtools_bridge {
20 namespace android {
21
22 namespace {
23
24 class PeerConnectionDelegateImpl
25 : public AbstractPeerConnection::Delegate {
26 public:
27 PeerConnectionDelegateImpl(JNIEnv* env, jobject java_object) {
28 java_object_.Reset(env, java_object);
29 connected_ = false;
30 }
31
32 virtual void OnIceConnectionChange(bool connected) override {
33 JNIEnv* env = AttachCurrentThread();
34 Java_SessionDependencyFactoryNative_notifyIceConnectionChange(
35 env, java_object_.obj(), connected);
36 }
37
38 virtual void OnIceCandidate(
39 const std::string& sdp_mid, int sdp_mline_index, const std::string& sdp)
40 override {
41 JNIEnv* env = AttachCurrentThread();
42 Java_SessionDependencyFactoryNative_notifyIceCandidate(
43 env, java_object_.obj(),
44 ConvertUTF8ToJavaString(env, sdp_mid).Release(),
45 sdp_mline_index, ConvertUTF8ToJavaString(env, sdp).Release());
46 }
47
48 void NotifyLocalOfferCreatedAndSetSet(const std::string& description) {
49 JNIEnv* env = AttachCurrentThread();
50 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
51 env, java_object_.obj(),
52 ConvertUTF8ToJavaString(env, description).Release());
53 }
54
55 virtual void OnLocalOfferCreatedAndSetSet(const std::string& description)
56 override {
57 JNIEnv* env = AttachCurrentThread();
58 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
59 env, java_object_.obj(),
60 ConvertUTF8ToJavaString(env, description).Release());
61 }
62
63 virtual void OnLocalAnswerCreatedAndSetSet(const std::string& description)
64 override {
65 JNIEnv* env = AttachCurrentThread();
66 Java_SessionDependencyFactoryNative_notifyLocalAnswerCreatedAndSetSet(
67 env, java_object_.obj(),
68 ConvertUTF8ToJavaString(env, description).Release());
69 }
70
71 virtual void OnRemoteDescriptionSet() override {
72 JNIEnv* env = AttachCurrentThread();
73 Java_SessionDependencyFactoryNative_notifyRemoteDescriptionSet(
74 env, java_object_.obj());
75 }
76
77 virtual void OnFailure(const std::string& description) override {
78 JNIEnv* env = AttachCurrentThread();
79 Java_SessionDependencyFactoryNative_notifyConnectionFailure(
80 env, java_object_.obj(),
81 ConvertUTF8ToJavaString(env, description).Release());
82 }
83
84 private:
85 base::android::ScopedJavaGlobalRef<jobject> java_object_;
86 bool connected_;
87 };
88
89 static void CleanupOnSignalingThread() {
90 // Called on signaling thread when SessionDependencyFactory is destroying.
91 base::android::DetachFromVM();
92 }
93
94 } // namespace
95
96 // SessionDependencyFactoryNative
97
98 SessionDependencyFactoryAndroid::SessionDependencyFactoryAndroid()
99 : impl_(SessionDependencyFactory::CreateInstance(
100 base::Bind(&CleanupOnSignalingThread))) {
101 }
102
103 SessionDependencyFactoryAndroid::~SessionDependencyFactoryAndroid() {
104 }
105
106 // static
107 void SessionDependencyFactoryAndroid::RegisterNatives(JNIEnv* env) {
108 RegisterNativesImpl(env);
109 }
110
111 scoped_ptr<AbstractPeerConnection>
112 SessionDependencyFactoryAndroid::CreatePeerConnection(
113 scoped_ptr<RTCConfiguration> config,
114 scoped_ptr<AbstractPeerConnection::Delegate> delegate) {
115 return impl_->CreatePeerConnection(config.Pass(), delegate.Pass());
116 }
117
118 // JNI generated methods
119
120 static jlong CreateFactory(JNIEnv* env, jclass jcaller) {
121 return reinterpret_cast<jlong>(new SessionDependencyFactoryAndroid());
122 }
123
124 static void DestroyFactory(JNIEnv* env, jclass jcaller, jlong factoryPtr) {
125 delete reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr);
126 }
127
128 static jlong CreateConfig(JNIEnv* env, jclass jcaller) {
129 return reinterpret_cast<jlong>(
130 RTCConfiguration::CreateInstance().release());
131 }
132
133 static void AddIceServer(
134 JNIEnv* env, jclass jcaller, jlong configPtr,
135 jstring uri, jstring username, jstring credential) {
136 reinterpret_cast<RTCConfiguration*>(configPtr)->AddIceServer(
137 ConvertJavaStringToUTF8(env, uri),
138 ConvertJavaStringToUTF8(env, username),
139 ConvertJavaStringToUTF8(env, credential));
140 }
141
142 static jlong CreatePeerConnection(
143 JNIEnv* env, jclass jcaller,
144 jlong factoryPtr, jlong configPtr, jobject observer) {
145 auto factory =
146 reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr);
147 auto config = reinterpret_cast<RTCConfiguration*>(configPtr);
148
149 auto delegate = new PeerConnectionDelegateImpl(env, observer);
150
151 return reinterpret_cast<jlong>(factory->CreatePeerConnection(
152 make_scoped_ptr(config), make_scoped_ptr(delegate)).release());
153 }
154
155 static void DestroyPeerConnection(
156 JNIEnv* env, jclass jcaller, jlong connectionPtr) {
157 delete reinterpret_cast<AbstractPeerConnection*>(connectionPtr);
158 }
159
160 static void CreateAndSetLocalOffer(
161 JNIEnv* env, jclass jcaller, jlong connectionPtr) {
162 reinterpret_cast<AbstractPeerConnection*>(
163 connectionPtr)->CreateAndSetLocalOffer();
164 }
165
166 static void CreateAndSetLocalAnswer(
167 JNIEnv* env, jclass jcaller, jlong connectionPtr) {
168 reinterpret_cast<AbstractPeerConnection*>(
169 connectionPtr)->CreateAndSetLocalAnswer();
170 }
171
172 static void SetRemoteOffer(
173 JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) {
174 reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteOffer(
175 ConvertJavaStringToUTF8(env, description));
176 }
177
178 static void SetRemoteAnswer(
179 JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) {
180 reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteAnswer(
181 ConvertJavaStringToUTF8(env, description));
182 }
183
184 static void AddIceCandidate(
185 JNIEnv* env, jclass jcaller,
186 jlong connectionPtr, jstring sdpMid, jint sdpMLineIndex, jstring sdp) {
187 reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->AddIceCandidate(
188 ConvertJavaStringToUTF8(env, sdpMid),
189 sdpMLineIndex,
190 ConvertJavaStringToUTF8(env, sdp));
191 }
192
193 static jlong CreateDataChannel(
194 JNIEnv* env, jclass jcaller, jlong connectionPtr, jint channelId) {
195 return reinterpret_cast<jlong>(
196 reinterpret_cast<AbstractPeerConnection*>(
197 connectionPtr)->CreateDataChannel(channelId).release());
198 }
199
200 static void DestroyDataChannel(
201 JNIEnv* env, jclass jcaller, jlong channelPtr) {
202 delete reinterpret_cast<AbstractDataChannel*>(channelPtr);
203 }
204
205 } // namespace android
206 } // namespace devtools_bridge
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698