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

Unified Diff: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNative.java

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 side-by-side diff with in-line comments
Download patch
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 7495111873647220eb87f0b0e6aa41a1dda93cd4..e44c67ee137b7a4558e426ad66d84b536aef7b69 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
@@ -4,25 +4,187 @@
package org.chromium.components.devtools_bridge;
+import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace;
+import java.nio.ByteBuffer;
+
/**
* Native implementation of session dependency factory on top of C++
* libjingle API.
*/
@JNINamespace("devtools_bridge::android")
-public class SessionDependencyFactoryNative {
- private final long mInstance;
+public class SessionDependencyFactoryNative extends SessionDependencyFactory {
+ private final long mFactoryPtr;
public SessionDependencyFactoryNative() {
- mInstance = nativeCreateFactory();
- assert mInstance != 0;
+ mFactoryPtr = nativeCreateFactory();
+ assert mFactoryPtr != 0;
+ }
+
+ @Override
+ public AbstractPeerConnection createPeerConnection(
+ RTCConfiguration config, AbstractPeerConnection.Observer observer) {
+ assert config != null;
+ assert observer != null;
+
+ long configPtr = nativeCreateConfig();
+ for (RTCConfiguration.IceServer server : config.iceServers) {
+ nativeAddIceServer(configPtr, server.uri, server.username, server.credential);
+ }
+
+ return new PeerConnectionImpl(mFactoryPtr, configPtr, observer);
}
+ @Override
public void dispose() {
- nativeDestroyFactory(mInstance);
+ nativeDestroyFactory(mFactoryPtr);
+ }
+
+ private static final class PeerConnectionImpl extends AbstractPeerConnection {
+ private final long mConnectionPtr;
+
+ // Takes ownership on |configPtr|.
+ public PeerConnectionImpl(
+ long factoryPtr, long configPtr,
+ AbstractPeerConnection.Observer observer) {
+ mConnectionPtr = nativeCreatePeerConnection(factoryPtr, configPtr, observer);
+ assert mConnectionPtr != 0;
+ }
+
+ @Override
+ public void createAndSetLocalDescription(SessionDescriptionType type) {
+ switch (type) {
+ case OFFER:
+ nativeCreateAndSetLocalOffer(mConnectionPtr);
+ break;
+
+ case ANSWER:
+ nativeCreateAndSetLocalAnswer(mConnectionPtr);
+ break;
+ }
+ }
+
+ @Override
+ public void setRemoteDescription(SessionDescriptionType type, String description) {
+ switch (type) {
+ case OFFER:
+ nativeSetRemoteOffer(mConnectionPtr, description);
+ break;
+
+ case ANSWER:
+ nativeSetRemoteAnswer(mConnectionPtr, description);
+ break;
+ }
+ }
+
+ @Override
+ public void addIceCandidate(String candidate) {
+ // TODO(serya): Handle IllegalArgumentException exception.
+ IceCandidate parsed = IceCandidate.fromString(candidate);
+ nativeAddIceCandidate(mConnectionPtr, parsed.sdpMid, parsed.sdpMLineIndex, parsed.sdp);
+ }
+
+ @Override
+ public void dispose() {
+ nativeDestroyPeerConnection(mConnectionPtr);
+ }
+
+ @Override
+ public AbstractDataChannel createDataChannel(int channelId) {
+ return new DataChannelImpl(nativeCreateDataChannel(mConnectionPtr, channelId));
+ }
+ }
+
+ private static final class DataChannelImpl extends AbstractDataChannel {
+ private final long mChannelPtr;
+
+ public DataChannelImpl(long ptr) {
+ assert ptr != 0;
+ mChannelPtr = ptr;
+ }
+
+ @Override
+ public void registerObserver(Observer observer) {
+ throw new RuntimeException("Not implemented");
mnaganov (inactive) 2014/11/11 17:11:47 I think you should throw UnsupportedOperationExcep
SeRya 2014/11/12 08:25:07 Done.
+ }
+
+ @Override
+ public void unregisterObserver() {
+ throw new RuntimeException("Not implemented");
+ }
+
+ @Override
+ public void send(ByteBuffer message, MessageType type) {
+ throw new RuntimeException("Not implemented");
+ }
+
+ @Override
+ public void close() {
+ throw new RuntimeException("Not implemented");
+ }
+
+ @Override
+ public void dispose() {
+ nativeDestroyDataChannel(mChannelPtr);
+ }
+ }
+
+ @CalledByNative
+ private static void notifyLocalOfferCreatedAndSetSet(Object observer, String description) {
+ ((AbstractPeerConnection.Observer) observer).onLocalDescriptionCreatedAndSet(
+ AbstractPeerConnection.SessionDescriptionType.OFFER, description);
+ }
+
+ @CalledByNative
+ private static void notifyLocalAnswerCreatedAndSetSet(Object observer, String description) {
+ ((AbstractPeerConnection.Observer) observer).onLocalDescriptionCreatedAndSet(
+ AbstractPeerConnection.SessionDescriptionType.ANSWER, description);
+ }
+
+ @CalledByNative
+ private static void notifyRemoteDescriptionSet(Object observer) {
+ ((AbstractPeerConnection.Observer) observer).onRemoteDescriptionSet();
+ }
+
+ @CalledByNative
+ private static void notifyConnectionFailure(Object observer, String description) {
+ ((AbstractPeerConnection.Observer) observer).onFailure(description);
+ }
+
+ @CalledByNative
+ private static void notifyIceCandidate(
+ Object observer, String sdpMid, int sdpMLineIndex, String sdp) {
+ ((AbstractPeerConnection.Observer) observer)
+ .onIceCandidate(new AbstractPeerConnection.IceCandidate(
+ sdpMid, sdpMLineIndex, sdp).toString());
+ }
+
+ @CalledByNative
+ private static void notifyIceConnectionChange(Object observer, boolean connected) {
+ ((AbstractPeerConnection.Observer) observer)
+ .onIceConnectionChange(connected);
}
private static native long nativeCreateFactory();
- private static native void nativeDestroyFactory(long ptr);
+ private static native void nativeDestroyFactory(long factoryPtr);
+
+ private static native long nativeCreateConfig();
+ private static native void nativeAddIceServer(
+ long configPtr, String uri, String username, String credential);
+
+ // Takes ownership on |configPtr|.
+ private static native long nativeCreatePeerConnection(
+ long factoryPtr, long configPtr, Object observer);
+ private static native void nativeDestroyPeerConnection(long connectionPtr);
+
+ private static native void nativeCreateAndSetLocalOffer(long connectionPtr);
+ private static native void nativeCreateAndSetLocalAnswer(long connectionPtr);
+ private static native void nativeSetRemoteOffer(long connectionPtr, String description);
+ private static native void nativeSetRemoteAnswer(long connectionPtr, String description);
+ private static native void nativeAddIceCandidate(
+ long peerConnectionPtr, String sdpMid, int sdpMLineIndex, String sdp);
+
+ private static native long nativeCreateDataChannel(long connectionPtr, int channelId);
+ private static native void nativeDestroyDataChannel(long channelPtr);
}

Powered by Google App Engine
This is Rietveld 408576698