Index: components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/LocalSessionBridge.java |
diff --git a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/LocalSessionBridge.java b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/LocalSessionBridge.java |
deleted file mode 100644 |
index 13f241815fe716f437e399a2a11ba9b9c6db063d..0000000000000000000000000000000000000000 |
--- a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/LocalSessionBridge.java |
+++ /dev/null |
@@ -1,303 +0,0 @@ |
-// 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; |
- |
-import android.util.Log; |
- |
-import java.io.IOException; |
-import java.util.concurrent.CountDownLatch; |
-import java.util.concurrent.ExecutionException; |
-import java.util.concurrent.Executors; |
-import java.util.concurrent.ScheduledExecutorService; |
-import java.util.concurrent.ScheduledFuture; |
-import java.util.concurrent.TimeUnit; |
-import java.util.concurrent.atomic.AtomicReference; |
- |
-/** |
- * Helper class designated for automatic and manual testing. Creates a pair of ClientSession and |
- * ServerSession on separate and threads binds them through and adapters that makes call the calls |
- * on correct threads (no serialization needed for communication). |
- */ |
-public class LocalSessionBridge { |
- private static final String TAG = "LocalSessionBridge"; |
- |
- private volatile int mDelayMs = 0; |
- |
- private final SessionDependencyFactory mFactory = SessionDependencyFactory.newInstance(); |
- |
- private final ThreadedExecutor mServerExecutor = new ThreadedExecutor(); |
- private final ThreadedExecutor mClientExecutor = new ThreadedExecutor(); |
- |
- private final ServerSessionMock mServerSession; |
- private final ClientSessionMock mClientSession; |
- |
- private boolean mStarted = false; |
- |
- private final CountDownLatch mNegotiated = new CountDownLatch(2); |
- private final CountDownLatch mControlChannelOpened = new CountDownLatch(2); |
- private final CountDownLatch mClientAutoClosed = new CountDownLatch(1); |
- private final CountDownLatch mServerAutoClosed = new CountDownLatch(1); |
- private final CountDownLatch mTunnelConfirmed = new CountDownLatch(1); |
- |
- private int mServerAutoCloseTimeoutMs = -1; |
- private int mClientAutoCloseTimeoutMs = -1; |
- |
- public LocalSessionBridge(String serverSocketName, String clientSocketName) throws IOException { |
- mServerSession = new ServerSessionMock(serverSocketName); |
- mClientSession = new ClientSessionMock(mServerSession, clientSocketName); |
- } |
- |
- public void setMessageDeliveryDelayMs(int value) { |
- mDelayMs = value; |
- } |
- |
- void setClientAutoCloseTimeoutMs(int value) { |
- assert !isStarted(); |
- |
- mClientAutoCloseTimeoutMs = value; |
- } |
- |
- void setServerAutoCloseTimeoutMs(int value) { |
- assert !isStarted(); |
- |
- mServerAutoCloseTimeoutMs = value; |
- } |
- |
- public void dispose() { |
- mServerExecutor.runSynchronously(new Runnable() { |
- @Override |
- public void run() { |
- mServerSession.dispose(); |
- } |
- }); |
- mClientExecutor.runSynchronously(new Runnable() { |
- @Override |
- public void run() { |
- mClientSession.dispose(); |
- } |
- }); |
- |
- mServerExecutor.dispose(); |
- mClientExecutor.dispose(); |
- mFactory.dispose(); |
- } |
- |
- public void start() { |
- start(new RTCConfiguration()); |
- } |
- |
- public void start(final RTCConfiguration config) { |
- if (mServerAutoCloseTimeoutMs >= 0) |
- mServerSession.setAutoCloseTimeoutMs(mServerAutoCloseTimeoutMs); |
- if (mClientAutoCloseTimeoutMs >= 0) |
- mClientSession.setAutoCloseTimeoutMs(mClientAutoCloseTimeoutMs); |
- mClientExecutor.runSynchronously(new Runnable() { |
- @Override |
- public void run() { |
- mClientSession.start(config); |
- } |
- }); |
- mStarted = true; |
- } |
- |
- private boolean isStarted() { |
- return mStarted; |
- } |
- |
- public void stop() { |
- assert mStarted; |
- |
- mServerExecutor.runSynchronously(new Runnable() { |
- @Override |
- public void run() { |
- mServerSession.stop(); |
- } |
- }); |
- mClientExecutor.runSynchronously(new Runnable() { |
- @Override |
- public void run() { |
- mClientSession.stop(); |
- } |
- }); |
- mStarted = false; |
- } |
- |
- public void awaitNegotiated() throws InterruptedException { |
- mNegotiated.await(); |
- } |
- |
- public void awaitControlChannelOpened() throws InterruptedException { |
- mControlChannelOpened.await(); |
- } |
- |
- public void awaitClientAutoClosed() throws InterruptedException { |
- mClientAutoClosed.await(); |
- } |
- |
- public void awaitServerAutoClosed() throws InterruptedException { |
- mServerAutoClosed.await(); |
- } |
- |
- private class ServerSessionMock extends ServerSession { |
- public ServerSessionMock(String serverSocketName) { |
- super(LocalSessionBridge.this.mFactory, mServerExecutor, serverSocketName); |
- } |
- |
- public void setAutoCloseTimeoutMs(int value) { |
- mAutoCloseTimeoutMs = value; |
- } |
- |
- @Override |
- protected void onSessionNegotiated() { |
- Log.d(TAG, "Server negotiated"); |
- mNegotiated.countDown(); |
- super.onSessionNegotiated(); |
- } |
- |
- @Override |
- protected void onControlChannelOpened() { |
- Log.d(TAG, "Server's control channel opened"); |
- super.onControlChannelOpened(); |
- mControlChannelOpened.countDown(); |
- } |
- |
- @Override |
- protected void onIceCandidate(String candidate) { |
- Log.d(TAG, "Server's ICE candidate: " + candidate); |
- super.onIceCandidate(candidate); |
- } |
- |
- @Override |
- protected void closeSelf() { |
- Log.d(TAG, "Server autoclosed"); |
- super.closeSelf(); |
- mServerAutoClosed.countDown(); |
- } |
- |
- @Override |
- protected SocketTunnel newSocketTunnelServer(String serverSocketName) { |
- SocketTunnel tunnel = super.newSocketTunnelServer(serverSocketName); |
- Log.d(TAG, "Server tunnel created on " + serverSocketName); |
- return tunnel; |
- } |
- } |
- |
- private class ClientSessionMock extends ClientSession { |
- public ClientSessionMock(ServerSession serverSession, String clientSocketName) |
- throws IOException { |
- super(LocalSessionBridge.this.mFactory, |
- mClientExecutor, |
- createServerSessionProxy(serverSession), |
- clientSocketName); |
- } |
- |
- public void setAutoCloseTimeoutMs(int value) { |
- mAutoCloseTimeoutMs = value; |
- } |
- |
- @Override |
- protected void onSessionNegotiated() { |
- Log.d(TAG, "Client negotiated"); |
- mNegotiated.countDown(); |
- super.onSessionNegotiated(); |
- } |
- |
- @Override |
- protected void onControlChannelOpened() { |
- Log.d(TAG, "Client's control channel opened"); |
- super.onControlChannelOpened(); |
- mControlChannelOpened.countDown(); |
- } |
- |
- @Override |
- protected void onIceCandidate(String candidate) { |
- Log.d(TAG, "Client's ICE candidate: " + candidate); |
- super.onIceCandidate(candidate); |
- } |
- |
- @Override |
- protected void closeSelf() { |
- Log.d(TAG, "Client autoclosed"); |
- super.closeSelf(); |
- mClientAutoClosed.countDown(); |
- } |
- } |
- |
- /** |
- * Implementation of SessionBase.Executor on top of ScheduledExecutorService. |
- */ |
- public static final class ThreadedExecutor implements SessionBase.Executor { |
- private final ScheduledExecutorService mExecutor = |
- Executors.newSingleThreadScheduledExecutor(); |
- private final AtomicReference<Thread> mSessionThread = new AtomicReference<Thread>(); |
- |
- @Override |
- public SessionBase.Cancellable postOnSessionThread(int delayMs, Runnable runnable) { |
- return new CancellableFuture(mExecutor.schedule( |
- new SessionThreadRunner(runnable), delayMs, TimeUnit.MILLISECONDS)); |
- } |
- |
- @Override |
- public boolean isCalledOnSessionThread() { |
- return Thread.currentThread() == mSessionThread.get(); |
- } |
- |
- public void runSynchronously(Runnable runnable) { |
- try { |
- mExecutor.submit(new SessionThreadRunner(runnable)).get(); |
- } catch (InterruptedException e) { |
- Thread.currentThread().interrupt(); |
- } catch (ExecutionException e) { |
- throw new RuntimeException(e); |
- } |
- } |
- |
- public void dispose() { |
- mExecutor.shutdownNow(); |
- } |
- |
- private class SessionThreadRunner implements Runnable { |
- private final Runnable mRunnable; |
- |
- public SessionThreadRunner(Runnable runnable) { |
- mRunnable = runnable; |
- } |
- |
- @Override |
- public void run() { |
- Thread thread = mSessionThread.getAndSet(Thread.currentThread()); |
- assert thread == null; |
- try { |
- mRunnable.run(); |
- } finally { |
- thread = mSessionThread.getAndSet(null); |
- } |
- assert thread == Thread.currentThread(); |
- } |
- } |
- } |
- |
- private static final class CancellableFuture implements SessionBase.Cancellable { |
- private final ScheduledFuture<?> mFuture; |
- |
- public CancellableFuture(ScheduledFuture<?> future) { |
- mFuture = future; |
- } |
- |
- @Override |
- public void cancel() { |
- mFuture.cancel(false); |
- } |
- } |
- |
- private SessionBase.ServerSessionInterface createServerSessionProxy( |
- SessionBase.ServerSessionInterface serverSession) { |
- String sessionId = ""; |
- |
- return new SignalingReceiverProxy( |
- mServerExecutor, mClientExecutor, serverSession, sessionId, mDelayMs) |
- .asServerSession(sessionId); |
- } |
-} |