Chromium Code Reviews| 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 "components/devtools_bridge/android/session_dependency_factory_android. h" | 5 #include "components/devtools_bridge/android/session_dependency_factory_android. h" |
| 6 | 6 |
| 7 #include "base/android/jni_string.h" | 7 #include "base/android/jni_string.h" |
| 8 #include "base/android/scoped_java_ref.h" | 8 #include "base/android/scoped_java_ref.h" |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "components/devtools_bridge/abstract_data_channel.h" | 10 #include "components/devtools_bridge/abstract_data_channel.h" |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 34 Java_SessionDependencyFactoryNative_notifyIceConnectionChange( | 34 Java_SessionDependencyFactoryNative_notifyIceConnectionChange( |
| 35 env, java_object_.obj(), connected); | 35 env, java_object_.obj(), connected); |
| 36 } | 36 } |
| 37 | 37 |
| 38 virtual void OnIceCandidate( | 38 virtual void OnIceCandidate( |
| 39 const std::string& sdp_mid, int sdp_mline_index, const std::string& sdp) | 39 const std::string& sdp_mid, int sdp_mline_index, const std::string& sdp) |
| 40 override { | 40 override { |
| 41 JNIEnv* env = AttachCurrentThread(); | 41 JNIEnv* env = AttachCurrentThread(); |
| 42 Java_SessionDependencyFactoryNative_notifyIceCandidate( | 42 Java_SessionDependencyFactoryNative_notifyIceCandidate( |
| 43 env, java_object_.obj(), | 43 env, java_object_.obj(), |
| 44 ConvertUTF8ToJavaString(env, sdp_mid).Release(), | 44 ConvertUTF8ToJavaString(env, sdp_mid).obj(), |
|
mnaganov (inactive)
2014/11/18 03:38:59
Yeah, this looks unusual compared to the rest of t
SeRya
2014/11/18 06:57:26
Done.
| |
| 45 sdp_mline_index, ConvertUTF8ToJavaString(env, sdp).Release()); | 45 sdp_mline_index, ConvertUTF8ToJavaString(env, sdp).obj()); |
| 46 } | 46 } |
| 47 | 47 |
| 48 void NotifyLocalOfferCreatedAndSetSet(const std::string& description) { | 48 void NotifyLocalOfferCreatedAndSetSet(const std::string& description) { |
| 49 JNIEnv* env = AttachCurrentThread(); | 49 JNIEnv* env = AttachCurrentThread(); |
| 50 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet( | 50 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet( |
| 51 env, java_object_.obj(), | 51 env, java_object_.obj(), |
| 52 ConvertUTF8ToJavaString(env, description).Release()); | 52 ConvertUTF8ToJavaString(env, description).obj()); |
| 53 } | 53 } |
| 54 | 54 |
| 55 virtual void OnLocalOfferCreatedAndSetSet(const std::string& description) | 55 virtual void OnLocalOfferCreatedAndSetSet(const std::string& description) |
| 56 override { | 56 override { |
| 57 JNIEnv* env = AttachCurrentThread(); | 57 JNIEnv* env = AttachCurrentThread(); |
| 58 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet( | 58 Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet( |
| 59 env, java_object_.obj(), | 59 env, java_object_.obj(), |
| 60 ConvertUTF8ToJavaString(env, description).Release()); | 60 ConvertUTF8ToJavaString(env, description).obj()); |
| 61 } | 61 } |
| 62 | 62 |
| 63 virtual void OnLocalAnswerCreatedAndSetSet(const std::string& description) | 63 virtual void OnLocalAnswerCreatedAndSetSet(const std::string& description) |
| 64 override { | 64 override { |
| 65 JNIEnv* env = AttachCurrentThread(); | 65 JNIEnv* env = AttachCurrentThread(); |
| 66 Java_SessionDependencyFactoryNative_notifyLocalAnswerCreatedAndSetSet( | 66 Java_SessionDependencyFactoryNative_notifyLocalAnswerCreatedAndSetSet( |
| 67 env, java_object_.obj(), | 67 env, java_object_.obj(), |
| 68 ConvertUTF8ToJavaString(env, description).Release()); | 68 ConvertUTF8ToJavaString(env, description).obj()); |
| 69 } | 69 } |
| 70 | 70 |
| 71 virtual void OnRemoteDescriptionSet() override { | 71 virtual void OnRemoteDescriptionSet() override { |
| 72 JNIEnv* env = AttachCurrentThread(); | 72 JNIEnv* env = AttachCurrentThread(); |
| 73 Java_SessionDependencyFactoryNative_notifyRemoteDescriptionSet( | 73 Java_SessionDependencyFactoryNative_notifyRemoteDescriptionSet( |
| 74 env, java_object_.obj()); | 74 env, java_object_.obj()); |
| 75 } | 75 } |
| 76 | 76 |
| 77 virtual void OnFailure(const std::string& description) override { | 77 virtual void OnFailure(const std::string& description) override { |
| 78 JNIEnv* env = AttachCurrentThread(); | 78 JNIEnv* env = AttachCurrentThread(); |
| 79 Java_SessionDependencyFactoryNative_notifyConnectionFailure( | 79 Java_SessionDependencyFactoryNative_notifyConnectionFailure( |
| 80 env, java_object_.obj(), | 80 env, java_object_.obj(), |
| 81 ConvertUTF8ToJavaString(env, description).Release()); | 81 ConvertUTF8ToJavaString(env, description).obj()); |
| 82 } | 82 } |
| 83 | 83 |
| 84 private: | 84 private: |
| 85 base::android::ScopedJavaGlobalRef<jobject> java_object_; | 85 base::android::ScopedJavaGlobalRef<jobject> java_object_; |
| 86 bool connected_; | 86 bool connected_; |
| 87 }; | 87 }; |
| 88 | 88 |
| 89 class DataChannelObserverImpl : public AbstractDataChannel::Observer { | |
| 90 public: | |
| 91 DataChannelObserverImpl(JNIEnv* env, jobject java_object) { | |
| 92 java_object_.Reset(env, java_object); | |
| 93 } | |
| 94 | |
| 95 virtual void OnOpen() override { | |
| 96 JNIEnv* env = AttachCurrentThread(); | |
| 97 Java_SessionDependencyFactoryNative_notifyChannelOpen( | |
| 98 env, java_object_.obj()); | |
| 99 } | |
| 100 | |
| 101 virtual void OnClose() override { | |
| 102 JNIEnv* env = AttachCurrentThread(); | |
| 103 Java_SessionDependencyFactoryNative_notifyChannelClose( | |
| 104 env, java_object_.obj()); | |
| 105 } | |
| 106 | |
| 107 virtual void OnMessage(const void* data, size_t length) override { | |
| 108 JNIEnv* env = AttachCurrentThread(); | |
| 109 | |
| 110 ScopedJavaLocalRef<jobject> byte_buffer( | |
| 111 env, env->NewDirectByteBuffer(const_cast<void*>(data), length)); | |
| 112 | |
| 113 Java_SessionDependencyFactoryNative_notifyMessage( | |
| 114 env, java_object_.obj(), byte_buffer.obj()); | |
| 115 } | |
| 116 | |
| 117 private: | |
| 118 base::android::ScopedJavaGlobalRef<jobject> java_object_; | |
| 119 }; | |
| 120 | |
| 89 static void CleanupOnSignalingThread() { | 121 static void CleanupOnSignalingThread() { |
| 90 // Called on signaling thread when SessionDependencyFactory is destroying. | 122 // Called on signaling thread when SessionDependencyFactory is destroying. |
| 91 base::android::DetachFromVM(); | 123 base::android::DetachFromVM(); |
| 92 } | 124 } |
| 93 | 125 |
| 94 } // namespace | 126 } // namespace |
| 95 | 127 |
| 96 // SessionDependencyFactoryNative | 128 // SessionDependencyFactoryNative |
| 97 | 129 |
| 98 SessionDependencyFactoryAndroid::SessionDependencyFactoryAndroid() | 130 SessionDependencyFactoryAndroid::SessionDependencyFactoryAndroid() |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 114 scoped_ptr<AbstractPeerConnection::Delegate> delegate) { | 146 scoped_ptr<AbstractPeerConnection::Delegate> delegate) { |
| 115 return impl_->CreatePeerConnection(config.Pass(), delegate.Pass()); | 147 return impl_->CreatePeerConnection(config.Pass(), delegate.Pass()); |
| 116 } | 148 } |
| 117 | 149 |
| 118 // JNI generated methods | 150 // JNI generated methods |
| 119 | 151 |
| 120 static jlong CreateFactory(JNIEnv* env, jclass jcaller) { | 152 static jlong CreateFactory(JNIEnv* env, jclass jcaller) { |
| 121 return reinterpret_cast<jlong>(new SessionDependencyFactoryAndroid()); | 153 return reinterpret_cast<jlong>(new SessionDependencyFactoryAndroid()); |
| 122 } | 154 } |
| 123 | 155 |
| 124 static void DestroyFactory(JNIEnv* env, jclass jcaller, jlong factoryPtr) { | 156 static void DestroyFactory(JNIEnv* env, jclass jcaller, jlong factory_ptr) { |
| 125 delete reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr); | 157 delete reinterpret_cast<SessionDependencyFactoryAndroid*>(factory_ptr); |
| 126 } | 158 } |
| 127 | 159 |
| 128 static jlong CreateConfig(JNIEnv* env, jclass jcaller) { | 160 static jlong CreateConfig(JNIEnv* env, jclass jcaller) { |
| 129 return reinterpret_cast<jlong>( | 161 return reinterpret_cast<jlong>( |
| 130 RTCConfiguration::CreateInstance().release()); | 162 RTCConfiguration::CreateInstance().release()); |
| 131 } | 163 } |
| 132 | 164 |
| 133 static void AddIceServer( | 165 static void AddIceServer( |
| 134 JNIEnv* env, jclass jcaller, jlong configPtr, | 166 JNIEnv* env, jclass jcaller, jlong config_ptr, |
| 135 jstring uri, jstring username, jstring credential) { | 167 jstring uri, jstring username, jstring credential) { |
| 136 reinterpret_cast<RTCConfiguration*>(configPtr)->AddIceServer( | 168 reinterpret_cast<RTCConfiguration*>(config_ptr)->AddIceServer( |
| 137 ConvertJavaStringToUTF8(env, uri), | 169 ConvertJavaStringToUTF8(env, uri), |
| 138 ConvertJavaStringToUTF8(env, username), | 170 ConvertJavaStringToUTF8(env, username), |
| 139 ConvertJavaStringToUTF8(env, credential)); | 171 ConvertJavaStringToUTF8(env, credential)); |
| 140 } | 172 } |
| 141 | 173 |
| 142 static jlong CreatePeerConnection( | 174 static jlong CreatePeerConnection( |
| 143 JNIEnv* env, jclass jcaller, | 175 JNIEnv* env, jclass jcaller, |
| 144 jlong factoryPtr, jlong configPtr, jobject observer) { | 176 jlong factory_ptr, jlong config_ptr, jobject observer) { |
| 145 auto factory = | 177 auto factory = |
| 146 reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr); | 178 reinterpret_cast<SessionDependencyFactoryAndroid*>(factory_ptr); |
| 147 auto config = reinterpret_cast<RTCConfiguration*>(configPtr); | 179 auto config = reinterpret_cast<RTCConfiguration*>(config_ptr); |
| 148 | 180 |
| 149 auto delegate = new PeerConnectionDelegateImpl(env, observer); | 181 auto delegate = new PeerConnectionDelegateImpl(env, observer); |
| 150 | 182 |
| 151 return reinterpret_cast<jlong>(factory->CreatePeerConnection( | 183 return reinterpret_cast<jlong>(factory->CreatePeerConnection( |
| 152 make_scoped_ptr(config), make_scoped_ptr(delegate)).release()); | 184 make_scoped_ptr(config), make_scoped_ptr(delegate)).release()); |
| 153 } | 185 } |
| 154 | 186 |
| 155 static void DestroyPeerConnection( | 187 static void DestroyPeerConnection( |
| 156 JNIEnv* env, jclass jcaller, jlong connectionPtr) { | 188 JNIEnv* env, jclass jcaller, jlong connection_ptr) { |
| 157 delete reinterpret_cast<AbstractPeerConnection*>(connectionPtr); | 189 delete reinterpret_cast<AbstractPeerConnection*>(connection_ptr); |
| 158 } | 190 } |
| 159 | 191 |
| 160 static void CreateAndSetLocalOffer( | 192 static void CreateAndSetLocalOffer( |
| 161 JNIEnv* env, jclass jcaller, jlong connectionPtr) { | 193 JNIEnv* env, jclass jcaller, jlong connection_ptr) { |
| 162 reinterpret_cast<AbstractPeerConnection*>( | 194 reinterpret_cast<AbstractPeerConnection*>( |
| 163 connectionPtr)->CreateAndSetLocalOffer(); | 195 connection_ptr)->CreateAndSetLocalOffer(); |
| 164 } | 196 } |
| 165 | 197 |
| 166 static void CreateAndSetLocalAnswer( | 198 static void CreateAndSetLocalAnswer( |
| 167 JNIEnv* env, jclass jcaller, jlong connectionPtr) { | 199 JNIEnv* env, jclass jcaller, jlong connection_ptr) { |
| 168 reinterpret_cast<AbstractPeerConnection*>( | 200 reinterpret_cast<AbstractPeerConnection*>( |
| 169 connectionPtr)->CreateAndSetLocalAnswer(); | 201 connection_ptr)->CreateAndSetLocalAnswer(); |
| 170 } | 202 } |
| 171 | 203 |
| 172 static void SetRemoteOffer( | 204 static void SetRemoteOffer( |
| 173 JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) { | 205 JNIEnv* env, jclass jcaller, jlong connection_ptr, jstring description) { |
| 174 reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteOffer( | 206 reinterpret_cast<AbstractPeerConnection*>(connection_ptr)->SetRemoteOffer( |
| 175 ConvertJavaStringToUTF8(env, description)); | 207 ConvertJavaStringToUTF8(env, description)); |
| 176 } | 208 } |
| 177 | 209 |
| 178 static void SetRemoteAnswer( | 210 static void SetRemoteAnswer( |
| 179 JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) { | 211 JNIEnv* env, jclass jcaller, jlong connection_ptr, jstring description) { |
| 180 reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteAnswer( | 212 reinterpret_cast<AbstractPeerConnection*>(connection_ptr)->SetRemoteAnswer( |
| 181 ConvertJavaStringToUTF8(env, description)); | 213 ConvertJavaStringToUTF8(env, description)); |
| 182 } | 214 } |
| 183 | 215 |
| 184 static void AddIceCandidate( | 216 static void AddIceCandidate( |
| 185 JNIEnv* env, jclass jcaller, | 217 JNIEnv* env, jclass jcaller, |
| 186 jlong connectionPtr, jstring sdpMid, jint sdpMLineIndex, jstring sdp) { | 218 jlong connection_ptr, jstring sdp_mid, jint sdp_mline_index, jstring sdp) { |
| 187 reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->AddIceCandidate( | 219 reinterpret_cast<AbstractPeerConnection*>(connection_ptr)->AddIceCandidate( |
| 188 ConvertJavaStringToUTF8(env, sdpMid), | 220 ConvertJavaStringToUTF8(env, sdp_mid), |
| 189 sdpMLineIndex, | 221 sdp_mline_index, |
| 190 ConvertJavaStringToUTF8(env, sdp)); | 222 ConvertJavaStringToUTF8(env, sdp)); |
| 191 } | 223 } |
| 192 | 224 |
| 193 static jlong CreateDataChannel( | 225 static jlong CreateDataChannel( |
| 194 JNIEnv* env, jclass jcaller, jlong connectionPtr, jint channelId) { | 226 JNIEnv* env, jclass jcaller, jlong connection_ptr, jint channel_id) { |
| 195 return reinterpret_cast<jlong>( | 227 return reinterpret_cast<jlong>( |
| 196 reinterpret_cast<AbstractPeerConnection*>( | 228 reinterpret_cast<AbstractPeerConnection*>( |
| 197 connectionPtr)->CreateDataChannel(channelId).release()); | 229 connection_ptr)->CreateDataChannel(channel_id).release()); |
| 198 } | 230 } |
| 199 | 231 |
| 200 static void DestroyDataChannel( | 232 static void DestroyDataChannel( |
| 201 JNIEnv* env, jclass jcaller, jlong channelPtr) { | 233 JNIEnv* env, jclass jcaller, jlong channel_ptr) { |
| 202 delete reinterpret_cast<AbstractDataChannel*>(channelPtr); | 234 delete reinterpret_cast<AbstractDataChannel*>(channel_ptr); |
| 235 } | |
| 236 | |
| 237 static void RegisterDataChannelObserver( | |
| 238 JNIEnv* env, jclass jcaller, jlong channel_ptr, jobject observer) { | |
| 239 reinterpret_cast<AbstractDataChannel*>(channel_ptr)->RegisterObserver( | |
| 240 make_scoped_ptr(new DataChannelObserverImpl(env, observer))); | |
| 241 } | |
| 242 | |
| 243 static void UnregisterDataChannelObserver( | |
| 244 JNIEnv* env, jclass jcaller, jlong channel_ptr) { | |
| 245 reinterpret_cast<AbstractDataChannel*>(channel_ptr)->UnregisterObserver(); | |
| 246 } | |
| 247 | |
| 248 static void SendBinaryMessage( | |
| 249 JNIEnv* env, jclass jcaller, jlong channel_ptr, jobject message, | |
| 250 jint size) { | |
| 251 DCHECK(size > 0); | |
| 252 reinterpret_cast<AbstractDataChannel*>(channel_ptr)->SendBinaryMessage( | |
| 253 env->GetDirectBufferAddress(message), size); | |
| 254 } | |
| 255 | |
| 256 static void SendTextMessage( | |
| 257 JNIEnv* env, jclass jcaller, jlong channel_ptr, jobject message, | |
| 258 jint size) { | |
| 259 DCHECK(size > 0); | |
| 260 reinterpret_cast<AbstractDataChannel*>(channel_ptr)->SendTextMessage( | |
| 261 env->GetDirectBufferAddress(message), size); | |
| 262 } | |
| 263 | |
| 264 static void CloseDataChannel(JNIEnv* env, jclass jcaller, jlong channel_ptr) { | |
| 265 reinterpret_cast<AbstractDataChannel*>(channel_ptr)->Close(); | |
| 203 } | 266 } |
| 204 | 267 |
| 205 } // namespace android | 268 } // namespace android |
| 206 } // namespace devtools_bridge | 269 } // namespace devtools_bridge |
| OLD | NEW |