Index: components/devtools_bridge/android/java/src/org/chromium/components/devtools_bridge/SessionDependencyFactory.java |
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 1f1fe9b401c6c438baa28064798c8e69170d9e57..458579b973d4f7193358293ecc5e55f180d6157c 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 |
@@ -20,25 +20,45 @@ 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 |
- * Java API. Native implementation of SessionDependencyFactory will be added for this case. |
+ * Java API. |
* In addition abstraction layer isolates SessionBase from complexity of underlying API |
* beside used features. |
*/ |
-public class SessionDependencyFactory { |
- private final PeerConnectionFactory mFactory = new PeerConnectionFactory(); |
+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); |
+ } |
- public AbstractPeerConnection createPeerConnection( |
- RTCConfiguration config, AbstractPeerConnection.Observer observer) { |
+ @Override |
+ public void dispose() { |
+ mFactory.dispose(); |
+ } |
+ } |
+ |
+ private static MediaConstraints createPeerConnectionConstraints() { |
MediaConstraints constraints = new MediaConstraints(); |
constraints.mandatory.add( |
new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true")); |
- return new PeerConnectionAdapter( |
- mFactory.createPeerConnection(convert(config), constraints, |
- new PeerConnnectionObserverAdapter(observer)), observer); |
- } |
- |
- public void dispose() { |
- mFactory.dispose(); |
+ return constraints; |
} |
private static AbstractPeerConnection.SessionDescriptionType convertType( |
@@ -139,8 +159,8 @@ public class SessionDependencyFactory { |
@Override |
public void onStateChange() { |
- AbstractDataChannel.State state = mDataChannel.state() == DataChannel.State.OPEN ? |
- AbstractDataChannel.State.OPEN : AbstractDataChannel.State.CLOSED; |
+ AbstractDataChannel.State state = mDataChannel.state() == DataChannel.State.OPEN |
+ ? AbstractDataChannel.State.OPEN : AbstractDataChannel.State.CLOSED; |
if (mState != state) { |
mState = state; |
mAdaptee.onStateChange(state); |
@@ -190,6 +210,7 @@ public class SessionDependencyFactory { |
@Override |
public void onCreateSuccess(final SessionDescription localDescription) { |
+ // TODO(serya): |mConnection| could be disposed, synchronization needed. |
mConnection.setLocalDescriptionOnSignalingThread(localDescription); |
} |