diff options
author | serya <serya@chromium.org> | 2014-11-18 13:21:08 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-18 21:21:26 +0000 |
commit | 16cb55751cee80d4ac957130d3b991c219812eb0 (patch) | |
tree | 93b0020aceb241999c5b7a4bcd26d8fd6f05722d /components/devtools_bridge | |
parent | 83d7940059fc0e0198e571bcb3b6275849917349 (diff) | |
download | chromium_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.java | 383 | ||||
-rw-r--r-- | components/devtools_bridge/android/javatests/AndroidManifest.xml | 3 | ||||
-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.java | 20 | ||||
-rw-r--r-- | components/devtools_bridge/android/javatests2/AndroidManifest.xml | 20 |
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> |