Index: components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverProxy.java |
diff --git a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverProxy.java b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverProxy.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8abd132cf3dd16c4f7f3b3b4e470cecfa5ea0f7f |
--- /dev/null |
+++ b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/SignalingReceiverProxy.java |
@@ -0,0 +1,56 @@ |
+// 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 org.chromium.components.devtools_bridge.commands.Command; |
+import org.chromium.components.devtools_bridge.commands.CommandReceiver; |
+import org.chromium.components.devtools_bridge.commands.CommandSender; |
+ |
+/** |
+ * Helper proxy that binds client and server sessions living on different executors. |
+ */ |
+final class SignalingReceiverProxy extends CommandSender { |
+ private final CommandReceiver mReceiver; |
+ private final SessionBase.Executor mServerExecutor; |
+ private final SessionBase.Executor mClientExecutor; |
+ private final int mDelayMs; |
+ |
+ public SignalingReceiverProxy( |
+ SessionBase.Executor serverExecutor, |
+ SessionBase.Executor clientExecutor, |
+ SignalingReceiver server, |
+ int delayMs) { |
+ mServerExecutor = serverExecutor; |
+ mClientExecutor = clientExecutor; |
+ mReceiver = new CommandReceiver(server); |
+ mDelayMs = delayMs; |
+ } |
+ |
+ public SessionBase.Executor serverExecutor() { |
+ return mServerExecutor; |
+ } |
+ |
+ public SessionBase.Executor clientExecutor() { |
+ return mClientExecutor; |
+ } |
+ |
+ @Override |
+ protected void send(final Command command, final Runnable completionCallback) { |
+ assert mClientExecutor.isCalledOnSessionThread(); |
+ |
+ mServerExecutor.postOnSessionThread(mDelayMs, new Runnable() { |
+ @Override |
+ public void run() { |
+ mReceiver.receive(command, new Runnable() { |
+ @Override |
+ public void run() { |
+ assert mServerExecutor.isCalledOnSessionThread(); |
+ mClientExecutor.postOnSessionThread(mDelayMs, completionCallback); |
+ } |
+ }); |
+ } |
+ }); |
+ } |
+} |