| Index: components/devtools_bridge/android/session_dependency_factory_android.cc
|
| diff --git a/components/devtools_bridge/android/session_dependency_factory_android.cc b/components/devtools_bridge/android/session_dependency_factory_android.cc
|
| index df6173de16f52de6836a085140c74641d7a696d8..7b72ac90a00d0267bd2624e1a3206f7bbe1d65c2 100644
|
| --- a/components/devtools_bridge/android/session_dependency_factory_android.cc
|
| +++ b/components/devtools_bridge/android/session_dependency_factory_android.cc
|
| @@ -21,6 +21,15 @@ namespace android {
|
|
|
| namespace {
|
|
|
| +/**
|
| + * Wraps Java observer and adapts it to native delegate. Chromium code normally
|
| + * leaves local java references for automatic disposing. It doesn't happen here
|
| + * (because calls originated from native thread). For instance, instead of
|
| + *
|
| + * ConvertUTF8ToJavaString(env, ...).Release()
|
| + *
|
| + * please use ConvertUTF8ToJavaString(env, ...).obj() or ScopedJavaLocalFrame.
|
| + */
|
| class PeerConnectionDelegateImpl
|
| : public AbstractPeerConnection::Delegate {
|
| public:
|
| @@ -41,15 +50,15 @@ class PeerConnectionDelegateImpl
|
| JNIEnv* env = AttachCurrentThread();
|
| Java_SessionDependencyFactoryNative_notifyIceCandidate(
|
| env, java_object_.obj(),
|
| - ConvertUTF8ToJavaString(env, sdp_mid).Release(),
|
| - sdp_mline_index, ConvertUTF8ToJavaString(env, sdp).Release());
|
| + ConvertUTF8ToJavaString(env, sdp_mid).obj(),
|
| + sdp_mline_index, ConvertUTF8ToJavaString(env, sdp).obj());
|
| }
|
|
|
| void NotifyLocalOfferCreatedAndSetSet(const std::string& description) {
|
| JNIEnv* env = AttachCurrentThread();
|
| Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
|
| env, java_object_.obj(),
|
| - ConvertUTF8ToJavaString(env, description).Release());
|
| + ConvertUTF8ToJavaString(env, description).obj());
|
| }
|
|
|
| virtual void OnLocalOfferCreatedAndSetSet(const std::string& description)
|
| @@ -57,7 +66,7 @@ class PeerConnectionDelegateImpl
|
| JNIEnv* env = AttachCurrentThread();
|
| Java_SessionDependencyFactoryNative_notifyLocalOfferCreatedAndSetSet(
|
| env, java_object_.obj(),
|
| - ConvertUTF8ToJavaString(env, description).Release());
|
| + ConvertUTF8ToJavaString(env, description).obj());
|
| }
|
|
|
| virtual void OnLocalAnswerCreatedAndSetSet(const std::string& description)
|
| @@ -65,7 +74,7 @@ class PeerConnectionDelegateImpl
|
| JNIEnv* env = AttachCurrentThread();
|
| Java_SessionDependencyFactoryNative_notifyLocalAnswerCreatedAndSetSet(
|
| env, java_object_.obj(),
|
| - ConvertUTF8ToJavaString(env, description).Release());
|
| + ConvertUTF8ToJavaString(env, description).obj());
|
| }
|
|
|
| virtual void OnRemoteDescriptionSet() override {
|
| @@ -78,7 +87,7 @@ class PeerConnectionDelegateImpl
|
| JNIEnv* env = AttachCurrentThread();
|
| Java_SessionDependencyFactoryNative_notifyConnectionFailure(
|
| env, java_object_.obj(),
|
| - ConvertUTF8ToJavaString(env, description).Release());
|
| + ConvertUTF8ToJavaString(env, description).obj());
|
| }
|
|
|
| private:
|
| @@ -86,6 +95,38 @@ class PeerConnectionDelegateImpl
|
| bool connected_;
|
| };
|
|
|
| +class DataChannelObserverImpl : public AbstractDataChannel::Observer {
|
| + public:
|
| + DataChannelObserverImpl(JNIEnv* env, jobject java_object) {
|
| + java_object_.Reset(env, java_object);
|
| + }
|
| +
|
| + virtual void OnOpen() override {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + Java_SessionDependencyFactoryNative_notifyChannelOpen(
|
| + env, java_object_.obj());
|
| + }
|
| +
|
| + virtual void OnClose() override {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + Java_SessionDependencyFactoryNative_notifyChannelClose(
|
| + env, java_object_.obj());
|
| + }
|
| +
|
| + virtual void OnMessage(const void* data, size_t length) override {
|
| + JNIEnv* env = AttachCurrentThread();
|
| +
|
| + ScopedJavaLocalRef<jobject> byte_buffer(
|
| + env, env->NewDirectByteBuffer(const_cast<void*>(data), length));
|
| +
|
| + Java_SessionDependencyFactoryNative_notifyMessage(
|
| + env, java_object_.obj(), byte_buffer.obj());
|
| + }
|
| +
|
| + private:
|
| + base::android::ScopedJavaGlobalRef<jobject> java_object_;
|
| +};
|
| +
|
| static void CleanupOnSignalingThread() {
|
| // Called on signaling thread when SessionDependencyFactory is destroying.
|
| base::android::DetachFromVM();
|
| @@ -121,8 +162,8 @@ static jlong CreateFactory(JNIEnv* env, jclass jcaller) {
|
| return reinterpret_cast<jlong>(new SessionDependencyFactoryAndroid());
|
| }
|
|
|
| -static void DestroyFactory(JNIEnv* env, jclass jcaller, jlong factoryPtr) {
|
| - delete reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr);
|
| +static void DestroyFactory(JNIEnv* env, jclass jcaller, jlong factory_ptr) {
|
| + delete reinterpret_cast<SessionDependencyFactoryAndroid*>(factory_ptr);
|
| }
|
|
|
| static jlong CreateConfig(JNIEnv* env, jclass jcaller) {
|
| @@ -131,9 +172,9 @@ static jlong CreateConfig(JNIEnv* env, jclass jcaller) {
|
| }
|
|
|
| static void AddIceServer(
|
| - JNIEnv* env, jclass jcaller, jlong configPtr,
|
| + JNIEnv* env, jclass jcaller, jlong config_ptr,
|
| jstring uri, jstring username, jstring credential) {
|
| - reinterpret_cast<RTCConfiguration*>(configPtr)->AddIceServer(
|
| + reinterpret_cast<RTCConfiguration*>(config_ptr)->AddIceServer(
|
| ConvertJavaStringToUTF8(env, uri),
|
| ConvertJavaStringToUTF8(env, username),
|
| ConvertJavaStringToUTF8(env, credential));
|
| @@ -141,10 +182,10 @@ static void AddIceServer(
|
|
|
| static jlong CreatePeerConnection(
|
| JNIEnv* env, jclass jcaller,
|
| - jlong factoryPtr, jlong configPtr, jobject observer) {
|
| + jlong factory_ptr, jlong config_ptr, jobject observer) {
|
| auto factory =
|
| - reinterpret_cast<SessionDependencyFactoryAndroid*>(factoryPtr);
|
| - auto config = reinterpret_cast<RTCConfiguration*>(configPtr);
|
| + reinterpret_cast<SessionDependencyFactoryAndroid*>(factory_ptr);
|
| + auto config = reinterpret_cast<RTCConfiguration*>(config_ptr);
|
|
|
| auto delegate = new PeerConnectionDelegateImpl(env, observer);
|
|
|
| @@ -153,53 +194,84 @@ static jlong CreatePeerConnection(
|
| }
|
|
|
| static void DestroyPeerConnection(
|
| - JNIEnv* env, jclass jcaller, jlong connectionPtr) {
|
| - delete reinterpret_cast<AbstractPeerConnection*>(connectionPtr);
|
| + JNIEnv* env, jclass jcaller, jlong connection_ptr) {
|
| + delete reinterpret_cast<AbstractPeerConnection*>(connection_ptr);
|
| }
|
|
|
| static void CreateAndSetLocalOffer(
|
| - JNIEnv* env, jclass jcaller, jlong connectionPtr) {
|
| + JNIEnv* env, jclass jcaller, jlong connection_ptr) {
|
| reinterpret_cast<AbstractPeerConnection*>(
|
| - connectionPtr)->CreateAndSetLocalOffer();
|
| + connection_ptr)->CreateAndSetLocalOffer();
|
| }
|
|
|
| static void CreateAndSetLocalAnswer(
|
| - JNIEnv* env, jclass jcaller, jlong connectionPtr) {
|
| + JNIEnv* env, jclass jcaller, jlong connection_ptr) {
|
| reinterpret_cast<AbstractPeerConnection*>(
|
| - connectionPtr)->CreateAndSetLocalAnswer();
|
| + connection_ptr)->CreateAndSetLocalAnswer();
|
| }
|
|
|
| static void SetRemoteOffer(
|
| - JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) {
|
| - reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteOffer(
|
| + JNIEnv* env, jclass jcaller, jlong connection_ptr, jstring description) {
|
| + reinterpret_cast<AbstractPeerConnection*>(connection_ptr)->SetRemoteOffer(
|
| ConvertJavaStringToUTF8(env, description));
|
| }
|
|
|
| static void SetRemoteAnswer(
|
| - JNIEnv* env, jclass jcaller, jlong connectionPtr, jstring description) {
|
| - reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->SetRemoteAnswer(
|
| + JNIEnv* env, jclass jcaller, jlong connection_ptr, jstring description) {
|
| + reinterpret_cast<AbstractPeerConnection*>(connection_ptr)->SetRemoteAnswer(
|
| ConvertJavaStringToUTF8(env, description));
|
| }
|
|
|
| static void AddIceCandidate(
|
| JNIEnv* env, jclass jcaller,
|
| - jlong connectionPtr, jstring sdpMid, jint sdpMLineIndex, jstring sdp) {
|
| - reinterpret_cast<AbstractPeerConnection*>(connectionPtr)->AddIceCandidate(
|
| - ConvertJavaStringToUTF8(env, sdpMid),
|
| - sdpMLineIndex,
|
| + jlong connection_ptr, jstring sdp_mid, jint sdp_mline_index, jstring sdp) {
|
| + reinterpret_cast<AbstractPeerConnection*>(connection_ptr)->AddIceCandidate(
|
| + ConvertJavaStringToUTF8(env, sdp_mid),
|
| + sdp_mline_index,
|
| ConvertJavaStringToUTF8(env, sdp));
|
| }
|
|
|
| static jlong CreateDataChannel(
|
| - JNIEnv* env, jclass jcaller, jlong connectionPtr, jint channelId) {
|
| + JNIEnv* env, jclass jcaller, jlong connection_ptr, jint channel_id) {
|
| return reinterpret_cast<jlong>(
|
| reinterpret_cast<AbstractPeerConnection*>(
|
| - connectionPtr)->CreateDataChannel(channelId).release());
|
| + connection_ptr)->CreateDataChannel(channel_id).release());
|
| }
|
|
|
| static void DestroyDataChannel(
|
| - JNIEnv* env, jclass jcaller, jlong channelPtr) {
|
| - delete reinterpret_cast<AbstractDataChannel*>(channelPtr);
|
| + JNIEnv* env, jclass jcaller, jlong channel_ptr) {
|
| + delete reinterpret_cast<AbstractDataChannel*>(channel_ptr);
|
| +}
|
| +
|
| +static void RegisterDataChannelObserver(
|
| + JNIEnv* env, jclass jcaller, jlong channel_ptr, jobject observer) {
|
| + reinterpret_cast<AbstractDataChannel*>(channel_ptr)->RegisterObserver(
|
| + make_scoped_ptr(new DataChannelObserverImpl(env, observer)));
|
| +}
|
| +
|
| +static void UnregisterDataChannelObserver(
|
| + JNIEnv* env, jclass jcaller, jlong channel_ptr) {
|
| + reinterpret_cast<AbstractDataChannel*>(channel_ptr)->UnregisterObserver();
|
| +}
|
| +
|
| +static void SendBinaryMessage(
|
| + JNIEnv* env, jclass jcaller, jlong channel_ptr, jobject message,
|
| + jint size) {
|
| + DCHECK(size > 0);
|
| + reinterpret_cast<AbstractDataChannel*>(channel_ptr)->SendBinaryMessage(
|
| + env->GetDirectBufferAddress(message), size);
|
| +}
|
| +
|
| +static void SendTextMessage(
|
| + JNIEnv* env, jclass jcaller, jlong channel_ptr, jobject message,
|
| + jint size) {
|
| + DCHECK(size > 0);
|
| + reinterpret_cast<AbstractDataChannel*>(channel_ptr)->SendTextMessage(
|
| + env->GetDirectBufferAddress(message), size);
|
| +}
|
| +
|
| +static void CloseDataChannel(JNIEnv* env, jclass jcaller, jlong channel_ptr) {
|
| + reinterpret_cast<AbstractDataChannel*>(channel_ptr)->Close();
|
| }
|
|
|
| } // namespace android
|
|
|