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

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 namespace devtools_bridge {
16 namespace android {
17
18 namespace {
19
20 class JNIInvokeUtil {
mnaganov (inactive) 2014/11/10 18:10:26 We don't usually use such helper classes: this one
SeRya 2014/11/11 08:08:19 Done.
21 public:
22 JNIInvokeUtil() {
23 env_ = base::android::AttachCurrentThread();
24 }
25
26 JNIEnv* env() { return env_; }
27
28 jstring convert(std::string const& str) {
29 return base::android::ConvertUTF8ToJavaString(env_, str).Release();
30 }
31
32 private:
33 JNIEnv* env_;
34 };
35
36 } // namespace
37
38 class PeerConnectionDelegateImpl
39 : public AbstractPeerConnection::Delegate {
40 public:
41 PeerConnectionDelegateImpl(JNIEnv* env, jobject java_object) {
42 java_object_.Reset(env, java_object);
43 connected_ = false;
44 }
45
46 virtual void OnIceConnectionChange(bool connected) override {
47 JNIInvokeUtil util;
48 Java_SessionDependencyFactoryNative_notifyIceConnectionChange(
49 util.env(), java_object_.obj(), connected);
50 }
51
52 virtual void OnIceCandidate(
53 std::string const& sdp_mid, int sdp_mline_index, std::string const& sdp)
54 override {
55 JNIInvokeUtil util;
56 Java_SessionDependencyFactoryNative_notifyIceCandidate(
57 util.env(), java_object_.obj(), util.convert(sdp_mid),
58 sdp_mline_index, util.convert(sdp));
59 }
60
61 void NotifyLocalOfferCreatedAndSetSet(std::string const& description) {
62 JNIInvokeUtil util;
63 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
64 util.env(), java_object_.obj(), util.convert(description));
65 }
66
67 virtual void OnLocalOfferCreatedAndSetSet(std::string const& description)
68 override {
69 JNIInvokeUtil util;
70 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
71 util.env(), java_object_.obj(), util.convert(description));
72 }
73
74 virtual void OnLocalAnswerCreatedAndSetSet(std::string const& description)
75 override {
76 JNIInvokeUtil util;
77 Java_SessionDependencyFactoryNative_notifyLocalAnswerCreatedAndSetSet(
78 util.env(), java_object_.obj(), util.convert(description));
79 }
80
81 virtual void OnRemoteDescriptionSet() override {
82 JNIInvokeUtil util;
83 Java_SessionDependencyFactoryNative_notifyRemoteDescriptionSet(
84 util.env(), java_object_.obj());
85 }
86
87 virtual void OnFailure(std::string const& description) override {
88 JNIInvokeUtil util;
89 Java_SessionDependencyFactoryNative_notifyConnectionFailure(
90 util.env(), java_object_.obj(), util.convert(description));
91 }
92
93 private:
94 base::android::ScopedJavaGlobalRef<jobject> java_object_;
95 bool connected_;
96 };
97
98 namespace {
99
100 class JNIHandlingUtil {
101 public:
102 JNIHandlingUtil(JNIEnv* env) : env_(env) {
103 }
104
105 static jlong cast(void* obj) {
106 return reinterpret_cast<jlong>(obj);
107 }
108
109 static RTCConfiguration* toConfig(jlong ptr) {
110 return reinterpret_cast<RTCConfiguration*>(ptr);
111 }
112
113 static SessionDependencyFactoryAndroid* toFactory(
114 jlong ptr) {
115 return reinterpret_cast<SessionDependencyFactoryAndroid*>(ptr);
116 }
117
118 static AbstractPeerConnection* toConnection(jlong ptr) {
119 return reinterpret_cast<AbstractPeerConnection*>(ptr);
120 }
121
122 static AbstractDataChannel* toDataChannel(jlong ptr) {
123 return reinterpret_cast<AbstractDataChannel*>(ptr);
124 }
125
126 std::string convert(jstring str) {
127 return base::android::ConvertJavaStringToUTF8(env_, str);
128 }
129
130 private:
131 JNIEnv* const env_;
132 };
133
134 static void CleanupOnSignalingThread() {
135 // Called on signaling thread when SessionDependencyFactory is destroying.
136 base::android::DetachFromVM();
137 }
138
139 } // namespace
140
141 // SessionDependencyFactoryNative
142
143 SessionDependencyFactoryAndroid::SessionDependencyFactoryAndroid()
144 : impl_(SessionDependencyFactory::CreateInstance(
145 base::Bind(&CleanupOnSignalingThread))) {
146 }
147
148 SessionDependencyFactoryAndroid::~SessionDependencyFactoryAndroid() {
149 }
150
151 // static
152 void SessionDependencyFactoryAndroid::RegisterNatives(JNIEnv* env) {
153 RegisterNativesImpl(env);
154 }
155
156 scoped_ptr<AbstractPeerConnection>
157 SessionDependencyFactoryAndroid::CreatePeerConnection(
158 scoped_ptr<RTCConfiguration> config,
159 scoped_ptr<AbstractPeerConnection::Delegate> delegate) {
160 return impl_->CreatePeerConnection(config.Pass(), delegate.Pass());
161 }
162
163 // JNI generated methods
164
165 static jlong CreateFactory(JNIEnv* env, jclass jcaller) {
166 return JNIHandlingUtil::cast(new SessionDependencyFactoryAndroid());
167 }
168
169 static void DestroyFactory(JNIEnv* env, jclass jcaller, jlong ptr) {
170 delete JNIHandlingUtil::toFactory(ptr);
171 }
172
173 static jlong CreateConfig(JNIEnv* env, jclass jcaller) {
174 return JNIHandlingUtil::cast(
175 RTCConfiguration::CreateInstance().release());
176 }
177
178 static void AddIceServer(
179 JNIEnv* env, jclass jcaller, jlong configPtr,
180 jstring uri, jstring username, jstring credential) {
181 JNIHandlingUtil util(env);
182
183 JNIHandlingUtil::toConfig(configPtr)->AddIceServer(
184 util.convert(uri), util.convert(username), util.convert(credential));
185 }
186
187 static jlong CreatePeerConnection(
188 JNIEnv* env, jclass jcaller,
189 jlong factoryPtr, jlong configPtr, jobject observer) {
190 auto factory = JNIHandlingUtil::toFactory(factoryPtr);
191 auto config = JNIHandlingUtil::toConfig(configPtr);
192
193 auto delegate = new PeerConnectionDelegateImpl(env, observer);
194
195 return JNIHandlingUtil::cast(factory->CreatePeerConnection(
196 make_scoped_ptr(config), make_scoped_ptr(delegate)).release());
197 }
198
199 static void DestroyPeerConnection(
200 JNIEnv* env, jclass jcaller, jlong peerConnectionPtr) {
201 delete JNIHandlingUtil::toConnection(peerConnectionPtr);
202 }
203
204 static void CreateAndSetLocalOffer(
205 JNIEnv* env, jclass jcaller, jlong peerConnectionPtr) {
206 JNIHandlingUtil::toConnection(peerConnectionPtr)->CreateAndSetLocalOffer();
207 }
208
209 static void CreateAndSetLocalAnswer(
210 JNIEnv* env, jclass jcaller, jlong peerConnectionPtr) {
211 JNIHandlingUtil::toConnection(peerConnectionPtr)->CreateAndSetLocalAnswer();
212 }
213
214 static void SetRemoteOffer(
215 JNIEnv* env, jclass jcaller, jlong peerConnectionPtr, jstring description) {
216 JNIHandlingUtil util(env);
217 JNIHandlingUtil::toConnection(peerConnectionPtr)->SetRemoteOffer(
218 util.convert(description));
219 }
220
221 static void SetRemoteAnswer(
222 JNIEnv* env, jclass jcaller, jlong peerConnectionPtr, jstring description) {
223 JNIHandlingUtil util(env);
224 JNIHandlingUtil::toConnection(peerConnectionPtr)->SetRemoteAnswer(
225 util.convert(description));
226 }
227
228 static void AddIceCandidate(
229 JNIEnv* env, jclass jcaller,
230 jlong peerConnectionPtr, jstring sdpMid, jint sdpMLineIndex, jstring sdp) {
231 JNIHandlingUtil util(env);
232 util.toConnection(peerConnectionPtr)->AddIceCandidate(
233 util.convert(sdpMid), sdpMLineIndex, util.convert(sdp));
234 }
235
236 static jlong CreateDataChannel(
237 JNIEnv* env, jclass jcaller, jlong peerConnectionPtr, jint channelId) {
238 return JNIHandlingUtil::cast(
239 JNIHandlingUtil::toConnection(
240 peerConnectionPtr)->CreateDataChannel(channelId).release());
241 }
242
243 static void DestroyDataChannel(
244 JNIEnv* env, jclass jcaller, jlong dataChannelPtr) {
245 delete JNIHandlingUtil::toDataChannel(dataChannelPtr);
246 }
247
248 } // namespace android
249 } // namespace devtools_bridge
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698