Index: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNative.java |
diff --git a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNative.java b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNative.java |
index 2d44226bc00f29110ffe855eeed365b8bc0544eb..f98f12623767e8e99b861b88d1933a01237fbe42 100644 |
--- a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNative.java |
+++ b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNative.java |
@@ -106,22 +106,34 @@ public class SessionDependencyFactoryNative extends SessionDependencyFactory { |
@Override |
public void registerObserver(Observer observer) { |
- throw new UnsupportedOperationException("Not implemented yet"); |
+ nativeRegisterDataChannelObserver(mChannelPtr, observer); |
} |
@Override |
public void unregisterObserver() { |
- throw new UnsupportedOperationException("Not implemented yet"); |
+ nativeUnregisterDataChannelObserver(mChannelPtr); |
} |
@Override |
public void send(ByteBuffer message, MessageType type) { |
- throw new UnsupportedOperationException("Not implemented yet"); |
+ assert message.position() == 0; |
+ int length = message.limit(); |
+ assert length > 0; |
+ |
+ switch (type) { |
+ case BINARY: |
+ nativeSendBinaryMessage(mChannelPtr, message, length); |
+ break; |
+ |
+ case TEXT: |
+ nativeSendTextMessage(mChannelPtr, message, length); |
+ break; |
+ } |
} |
@Override |
public void close() { |
- throw new UnsupportedOperationException("Not implemented yet"); |
+ nativeCloseDataChannel(mChannelPtr); |
} |
@Override |
@@ -130,6 +142,8 @@ public class SessionDependencyFactoryNative extends SessionDependencyFactory { |
} |
} |
+ // Peer connection callbacks. |
+ |
@CalledByNative |
private static void notifyLocalOfferCreatedAndSetSet(Object observer, String description) { |
((AbstractPeerConnection.Observer) observer).onLocalDescriptionCreatedAndSet( |
@@ -166,6 +180,26 @@ public class SessionDependencyFactoryNative extends SessionDependencyFactory { |
.onIceConnectionChange(connected); |
} |
+ // Data channel callbacks. |
+ |
+ @CalledByNative |
+ private static void notifyChannelOpen(Object observer) { |
+ ((AbstractDataChannel.Observer) observer) |
+ .onStateChange(AbstractDataChannel.State.OPEN); |
+ } |
+ |
+ @CalledByNative |
+ private static void notifyChannelClose(Object observer) { |
+ ((AbstractDataChannel.Observer) observer) |
+ .onStateChange(AbstractDataChannel.State.CLOSED); |
+ } |
+ |
+ @CalledByNative |
+ private static void notifyMessage(Object observer, ByteBuffer message) { |
+ ((AbstractDataChannel.Observer) observer) |
+ .onMessage(message); |
+ } |
+ |
private static native long nativeCreateFactory(); |
private static native void nativeDestroyFactory(long factoryPtr); |
@@ -187,4 +221,12 @@ public class SessionDependencyFactoryNative extends SessionDependencyFactory { |
private static native long nativeCreateDataChannel(long connectionPtr, int channelId); |
private static native void nativeDestroyDataChannel(long channelPtr); |
+ |
+ private static native void nativeRegisterDataChannelObserver( |
+ long channelPtr, Object observer); |
+ private static native void nativeUnregisterDataChannelObserver(long channelPtr); |
+ private static native void nativeSendBinaryMessage( |
+ long channelPtr, ByteBuffer message, int size); |
+ private static native void nativeSendTextMessage(long channelPtr, ByteBuffer message, int size); |
+ private static native void nativeCloseDataChannel(long channelPtr); |
} |