summaryrefslogtreecommitdiffstats
path: root/components/devtools_bridge
diff options
context:
space:
mode:
authorserya <serya@chromium.org>2014-11-18 13:21:08 -0800
committerCommit bot <commit-bot@chromium.org>2014-11-18 21:21:26 +0000
commit16cb55751cee80d4ac957130d3b991c219812eb0 (patch)
tree93b0020aceb241999c5b7a4bcd26d8fd6f05722d /components/devtools_bridge
parent83d7940059fc0e0198e571bcb3b6275849917349 (diff)
downloadchromium_src-16cb55751cee80d4ac957130d3b991c219812eb0.zip
chromium_src-16cb55751cee80d4ac957130d3b991c219812eb0.tar.gz
chromium_src-16cb55751cee80d4ac957130d3b991c219812eb0.tar.bz2
Switching to native implementation of SessionDependencyFactory.
Since SessionDependencyFactory is ready to use Java implementation is not needed longer. BUG=383418 Review URL: https://codereview.chromium.org/734313002 Cr-Commit-Position: refs/heads/master@{#304668}
Diffstat (limited to 'components/devtools_bridge')
-rw-r--r--components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactory.java383
-rw-r--r--components/devtools_bridge/android/javatests/AndroidManifest.xml3
-rw-r--r--components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryTest.java (renamed from components/devtools_bridge/android/javatests2/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNativeTest.java)13
-rw-r--r--components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/tests/TestApplication.java20
-rw-r--r--components/devtools_bridge/android/javatests2/AndroidManifest.xml20
5 files changed, 48 insertions, 391 deletions
diff --git a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactory.java b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactory.java
index 458579b..94c99f7 100644
--- a/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactory.java
+++ b/components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactory.java
@@ -4,19 +4,6 @@
package org.chromium.components.devtools_bridge;
-import org.webrtc.DataChannel;
-import org.webrtc.IceCandidate;
-import org.webrtc.MediaConstraints;
-import org.webrtc.MediaStream;
-import org.webrtc.PeerConnection;
-import org.webrtc.PeerConnectionFactory;
-import org.webrtc.SdpObserver;
-import org.webrtc.SessionDescription;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* Implements AbstractDataChannel and AbstractPeerConnection on top of org.webrtc.* API.
* Isolation is needed because some configuration of DevTools bridge may not be based on
@@ -25,361 +12,31 @@ import java.util.List;
* beside used features.
*/
public abstract class SessionDependencyFactory {
- public static SessionDependencyFactory newInstance() {
- return new JavaImpl();
- }
-
- public abstract AbstractPeerConnection createPeerConnection(
- RTCConfiguration config, AbstractPeerConnection.Observer observer);
-
- public abstract void dispose();
-
- private static class JavaImpl extends SessionDependencyFactory {
- private final PeerConnectionFactory mFactory = new PeerConnectionFactory();
-
- @Override
- public AbstractPeerConnection createPeerConnection(
- RTCConfiguration config, AbstractPeerConnection.Observer observer) {
- return new PeerConnectionAdapter(
- mFactory.createPeerConnection(
- convert(config),
- createPeerConnectionConstraints(),
- new PeerConnnectionObserverAdapter(observer)),
- observer);
- }
-
- @Override
- public void dispose() {
- mFactory.dispose();
- }
+ private interface Constructor {
+ SessionDependencyFactory newInstance();
}
- private static MediaConstraints createPeerConnectionConstraints() {
- MediaConstraints constraints = new MediaConstraints();
- constraints.mandatory.add(
- new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
- return constraints;
- }
-
- private static AbstractPeerConnection.SessionDescriptionType convertType(
- SessionDescription.Type type) {
- switch (type) {
- case OFFER:
- return AbstractPeerConnection.SessionDescriptionType.OFFER;
- case ANSWER:
- return AbstractPeerConnection.SessionDescriptionType.ANSWER;
- default:
- throw new IllegalArgumentException(type.toString());
- }
- }
-
- private static SessionDescription.Type convertType(
- AbstractPeerConnection.SessionDescriptionType type) {
- switch (type) {
- case OFFER:
- return SessionDescription.Type.OFFER;
- case ANSWER:
- return SessionDescription.Type.ANSWER;
- default:
- throw new IllegalArgumentException(type.toString());
- }
- }
-
- private static AbstractPeerConnection.IceCandidate convert(IceCandidate candidate) {
- return new AbstractPeerConnection.IceCandidate(
- candidate.sdpMid, candidate.sdpMLineIndex, candidate.sdp);
- }
-
- private static IceCandidate convert(AbstractPeerConnection.IceCandidate candidate) {
- return new IceCandidate(candidate.sdpMid, candidate.sdpMLineIndex, candidate.sdp);
- }
-
- private static List<PeerConnection.IceServer> convert(RTCConfiguration config) {
- List<PeerConnection.IceServer> result = new ArrayList<PeerConnection.IceServer>();
- for (RTCConfiguration.IceServer server : config.iceServers) {
- result.add(new PeerConnection.IceServer(
- server.uri, server.username, server.credential));
- }
- return result;
- }
-
- public static DataChannelAdapter createDataChannel(PeerConnection connection, int channelId) {
- DataChannel.Init init = new DataChannel.Init();
- init.ordered = true;
- init.negotiated = true;
- init.id = channelId;
- return new DataChannelAdapter(connection.createDataChannel("", init));
- }
-
- private static final class DataChannelAdapter extends AbstractDataChannel {
- private final DataChannel mAdaptee;
-
- public DataChannelAdapter(DataChannel adaptee) {
- mAdaptee = adaptee;
- }
-
- @Override
- public void dispose() {
- mAdaptee.dispose();
- }
-
- @Override
- public void close() {
- mAdaptee.close();
- }
-
- @Override
- public void send(ByteBuffer message, AbstractDataChannel.MessageType type) {
- assert message.remaining() > 0;
- mAdaptee.send(new DataChannel.Buffer(
- message, type == AbstractDataChannel.MessageType.BINARY));
- }
-
- @Override
- public void registerObserver(Observer observer) {
- mAdaptee.registerObserver(new DataChannelObserverAdapter(observer, mAdaptee));
- }
-
- @Override
- public void unregisterObserver() {
- mAdaptee.unregisterObserver();
- }
- }
-
- private static final class DataChannelObserverAdapter implements DataChannel.Observer {
- private final AbstractDataChannel.Observer mAdaptee;
- private final DataChannel mDataChannel;
- private AbstractDataChannel.State mState = AbstractDataChannel.State.CLOSED;
-
- public DataChannelObserverAdapter(
- AbstractDataChannel.Observer adaptee, DataChannel dataChannel) {
- mAdaptee = adaptee;
- mDataChannel = dataChannel;
- }
-
- @Override
- public void onStateChange() {
- AbstractDataChannel.State state = mDataChannel.state() == DataChannel.State.OPEN
- ? AbstractDataChannel.State.OPEN : AbstractDataChannel.State.CLOSED;
- if (mState != state) {
- mState = state;
- mAdaptee.onStateChange(state);
- }
- }
-
- @Override
- public void onMessage(DataChannel.Buffer buffer) {
- assert buffer.data.remaining() > 0;
- mAdaptee.onMessage(buffer.data);
- }
- }
-
- private abstract static class SetHandler implements SdpObserver {
- @Override
- public final void onCreateSuccess(SessionDescription description) {
- assert false;
- }
-
- @Override
- public final void onCreateFailure(String error) {
- assert false;
- }
- }
-
- private abstract static class CreateHandler implements SdpObserver {
- @Override
- public final void onSetSuccess() {
- assert false;
- }
-
- @Override
- public final void onSetFailure(String error) {
- assert false;
- }
- }
+ private static Constructor sConstructor;
- private static final class CreateAndSetHandler extends CreateHandler {
- private final PeerConnectionAdapter mConnection;
- private final AbstractPeerConnection.Observer mObserver;
-
- public CreateAndSetHandler(PeerConnectionAdapter connection,
- AbstractPeerConnection.Observer observer) {
- mConnection = connection;
- mObserver = observer;
- }
-
- @Override
- public void onCreateSuccess(final SessionDescription localDescription) {
- // TODO(serya): |mConnection| could be disposed, synchronization needed.
- mConnection.setLocalDescriptionOnSignalingThread(localDescription);
- }
-
- @Override
- public void onCreateFailure(String description) {
- mObserver.onFailure(description);
- }
- }
-
- private static final class LocalSetHandler extends SetHandler {
- private final SessionDescription mLocalDescription;
- private final AbstractPeerConnection.Observer mObserver;
-
- public LocalSetHandler(SessionDescription localDescription,
- AbstractPeerConnection.Observer observer) {
- mLocalDescription = localDescription;
- mObserver = observer;
- }
-
- @Override
- public void onSetSuccess() {
- mObserver.onLocalDescriptionCreatedAndSet(
- convertType(mLocalDescription.type), mLocalDescription.description);
- }
-
- @Override
- public void onSetFailure(String description) {
- mObserver.onFailure(description);
- }
- }
-
- private static final class SetRemoteDescriptionHandler extends SetHandler {
- private final AbstractPeerConnection.Observer mObserver;
-
- public SetRemoteDescriptionHandler(AbstractPeerConnection.Observer observer) {
- mObserver = observer;
- }
-
- @Override
- public void onSetSuccess() {
- mObserver.onRemoteDescriptionSet();
- }
-
- @Override
- public void onSetFailure(String description) {
- mObserver.onFailure(description);
- }
- }
-
- private static final class PeerConnectionAdapter extends AbstractPeerConnection {
- private PeerConnection mAdaptee;
- private final Observer mObserver;
-
- // Only access from signaling thread and disposing need synchronization.
- private final Object mDisposeLock = new Object();
-
- public PeerConnectionAdapter(PeerConnection adaptee, Observer observer) {
- mAdaptee = adaptee;
- mObserver = observer;
- }
-
- public void setLocalDescriptionOnSignalingThread(SessionDescription description) {
- synchronized (mDisposeLock) {
- if (mAdaptee == null)
- return;
-
- mAdaptee.setLocalDescription(
- new LocalSetHandler(description, mObserver), description);
- }
- }
-
- @Override
- public void createAndSetLocalDescription(SessionDescriptionType type) {
- CreateAndSetHandler handler = new CreateAndSetHandler(this, mObserver);
- switch (type) {
- case OFFER:
- mAdaptee.createOffer(handler, new MediaConstraints());
- break;
-
- case ANSWER:
- mAdaptee.createAnswer(handler, new MediaConstraints());
- break;
-
- default:
- assert false;
- }
- }
-
- @Override
- public void setRemoteDescription(SessionDescriptionType type, String description) {
- mAdaptee.setRemoteDescription(new SetRemoteDescriptionHandler(mObserver),
- new SessionDescription(convertType(type), description));
- }
-
- @Override
- public void addIceCandidate(String candidate) {
- mAdaptee.addIceCandidate(convert(
- AbstractPeerConnection.IceCandidate.fromString(candidate)));
- }
-
- @Override
- public void dispose() {
- synchronized (mDisposeLock) {
- mAdaptee.dispose();
- mAdaptee = null;
+ public static SessionDependencyFactory newInstance() {
+ return sConstructor.newInstance();
+ }
+
+ public static <T extends SessionDependencyFactory> void init(final Class<T> c) {
+ sConstructor = new Constructor() {
+ @Override
+ public SessionDependencyFactory newInstance() {
+ try {
+ return c.newInstance();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
}
- }
-
- @Override
- public AbstractDataChannel createDataChannel(int channelId) {
- DataChannel.Init init = new DataChannel.Init();
- init.ordered = true;
- init.negotiated = true;
- init.id = channelId;
- return new DataChannelAdapter(mAdaptee.createDataChannel("", init));
- }
+ };
}
- private static final class PeerConnnectionObserverAdapter implements PeerConnection.Observer {
- private final AbstractPeerConnection.Observer mAdaptee;
- private boolean mConnected = false;
-
- public PeerConnnectionObserverAdapter(AbstractPeerConnection.Observer adaptee) {
- mAdaptee = adaptee;
- }
-
- @Override
- public void onIceCandidate(IceCandidate candidate) {
- mAdaptee.onIceCandidate(convert(candidate).toString());
- }
-
- @Override
- public void onSignalingChange(PeerConnection.SignalingState newState) {}
-
- @Override
- public void onIceConnectionChange(PeerConnection.IceConnectionState newState) {
- boolean connected = isConnected(newState);
- if (mConnected != connected) {
- mConnected = connected;
- mAdaptee.onIceConnectionChange(connected);
- }
- }
-
- private static boolean isConnected(PeerConnection.IceConnectionState newState) {
- switch (newState) {
- case CONNECTED:
- case COMPLETED:
- return true;
- default:
- return false;
- }
- }
-
- @Override
- public void onIceGatheringChange(PeerConnection.IceGatheringState newState) {}
-
- @Override
- public void onDataChannel(DataChannel dataChannel) {
- // Remote peer added non-prenegotiated data channel. It's not supported.
- dataChannel.dispose();
- }
-
- @Override
- public void onAddStream(MediaStream stream) {}
-
- @Override
- public void onRemoveStream(MediaStream stream) {}
+ public abstract AbstractPeerConnection createPeerConnection(
+ RTCConfiguration config, AbstractPeerConnection.Observer observer);
- @Override
- public void onRenegotiationNeeded() {}
- }
+ public abstract void dispose();
}
diff --git a/components/devtools_bridge/android/javatests/AndroidManifest.xml b/components/devtools_bridge/android/javatests/AndroidManifest.xml
index e2bc021..4c46504 100644
--- a/components/devtools_bridge/android/javatests/AndroidManifest.xml
+++ b/components/devtools_bridge/android/javatests/AndroidManifest.xml
@@ -6,7 +6,8 @@
doesn't ignore this. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.chromium.components.devtools_bridge.tests">
- <application>
+ <application
+ android:name=".TestApplication">
<uses-library android:name="android.test.runner" />
<service
android:name=".DebugService" >
diff --git a/components/devtools_bridge/android/javatests2/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNativeTest.java b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryTest.java
index 3243748..a7dc15b 100644
--- a/components/devtools_bridge/android/javatests2/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryNativeTest.java
+++ b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/SessionDependencyFactoryTest.java
@@ -15,19 +15,18 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingDeque;
/**
- * Tests for {@link SessionDependencyFactoryNative}
+ * Tests for {@link SessionDependencyFactory}
*/
-public class SessionDependencyFactoryNativeTest extends InstrumentationTestCase {
+public class SessionDependencyFactoryTest extends InstrumentationTestCase {
private static final int DATA_CHANNEL_ID = 0;
- private SessionDependencyFactoryNative mInstance;
+ private SessionDependencyFactory mInstance;
private AbstractPeerConnection mConnection;
private ObserverMock mObserver;
@Override
protected void setUp() throws Exception {
super.setUp();
- System.loadLibrary("devtools_bridge_natives_so");
mObserver = new ObserverMock();
}
@@ -189,8 +188,8 @@ public class SessionDependencyFactoryNativeTest extends InstrumentationTestCase
mInstance.dispose();
}
- private SessionDependencyFactoryNative newFactory() {
- return new SessionDependencyFactoryNative();
+ private SessionDependencyFactory newFactory() {
+ return SessionDependencyFactory.newInstance();
}
private AbstractPeerConnection newConnection() {
@@ -214,7 +213,7 @@ public class SessionDependencyFactoryNativeTest extends InstrumentationTestCase
final AbstractDataChannel mDataChannel1;
final AbstractDataChannel mDataChannel2;
- Pipe(SessionDependencyFactoryNative factory) {
+ Pipe(SessionDependencyFactory factory) {
RTCConfiguration config = new RTCConfiguration();
mConnection1 = factory.createPeerConnection(config, mObserver1);
mConnection2 = factory.createPeerConnection(config, mObserver2);
diff --git a/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/tests/TestApplication.java b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/tests/TestApplication.java
new file mode 100644
index 0000000..1fa2220
--- /dev/null
+++ b/components/devtools_bridge/android/javatests/src/org/chromium/components/devtools_bridge/tests/TestApplication.java
@@ -0,0 +1,20 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.devtools_bridge.tests;
+
+import android.app.Application;
+
+import org.chromium.components.devtools_bridge.SessionDependencyFactory;
+import org.chromium.components.devtools_bridge.SessionDependencyFactoryNative;
+
+/**
+ * Performs initialization for DevTools Bridge test APK.
+ */
+public class TestApplication extends Application {
+ static {
+ System.loadLibrary("devtools_bridge_natives_so");
+ SessionDependencyFactory.init(SessionDependencyFactoryNative.class);
+ }
+}
diff --git a/components/devtools_bridge/android/javatests2/AndroidManifest.xml b/components/devtools_bridge/android/javatests2/AndroidManifest.xml
deleted file mode 100644
index 4a2fd3b..0000000
--- a/components/devtools_bridge/android/javatests2/AndroidManifest.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
- <!-- Copyright 2014 The Chromium Authors. All rights reserved. Use of
- this source code is governed by a BSD-style license that can be found
- in the LICENSE file. -->
- <!-- package name must be unique so suffix with "tests" so package loader
- doesn't ignore this. -->
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="org.chromium.components.devtools_bridge.tests2">
- <application>
- <uses-library android:name="android.test.runner" />
- </application>
- <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" />
- <instrumentation android:name="android.test.InstrumentationTestRunner"
- android:targetPackage="org.chromium.components.devtools_bridge.tests2"
- android:label="Tests for org.chromium.components.devtools_bridge"/>
-
- <uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
- <uses-permission android:name="android.permission.INJECT_EVENTS" />
- <uses-permission android:name="android.permission.INTERNET" />
-</manifest>