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

Unified Diff: components/devtools_bridge/android/session_dependency_factory_android.cc

Issue 719043002: Data channel implementation for SessionDependencyFactory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@native-factory-2
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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698