Index: components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DevToolsBridgeServerSandbox.java |
diff --git a/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DevToolsBridgeServerSandbox.java b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DevToolsBridgeServerSandbox.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b719ed9735e001b2c5d85e1d2ac3954d55c50afa |
--- /dev/null |
+++ b/components/devtools_bridge/test/android/javatests/src/org/chromium/components/devtools_bridge/DevToolsBridgeServerSandbox.java |
@@ -0,0 +1,109 @@ |
+// 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.content.ComponentName; |
+import android.content.Context; |
+import android.content.Intent; |
+import android.content.ServiceConnection; |
+import android.os.IBinder; |
+import android.os.Process; |
+import android.util.Log; |
+import android.widget.Toast; |
+ |
+import java.io.IOException; |
+ |
+/** |
+ * Sandbox for manual testing {@link DevToolsBridgeServer} |
+ */ |
+public class DevToolsBridgeServerSandbox { |
+ private static final String TAG = "DevToolsBridgeServerSandbox"; |
+ private Context mContext; |
+ |
+ private final ServiceConnection mServiceConnection = new ServiceConnection() { |
+ @Override |
+ public void onServiceConnected(ComponentName name, IBinder service) { |
+ mBinder = ((LocalBindingTestService.LocalBinder) service); |
+ startInternal(); |
+ } |
+ |
+ @Override |
+ public void onServiceDisconnected(ComponentName name) { |
+ stopInternal(); |
+ mBinder = null; |
+ } |
+ }; |
+ |
+ private LocalBindingTestService.LocalBinder mBinder; |
+ |
+ /** |
+ * Service for hosting DevToolsBridgeServer in manual tests which exposes |
+ * Chrome Shell DevTools socket. |
+ */ |
+ public static class Service extends LocalBindingTestService { |
+ public Service() { |
+ super("chrome_shell_devtools_remote"); |
+ } |
+ } |
+ |
+ public void start(Context context) { |
+ assert mContext == null; |
+ mContext = context; |
+ Intent intent = new Intent(mContext, Service.class); |
+ mContext.bindService( |
+ intent, mServiceConnection, Context.BIND_DEBUG_UNBIND | Context.BIND_AUTO_CREATE); |
+ } |
+ |
+ public void stop() throws SecurityException { |
+ mContext.unbindService(mServiceConnection); |
+ mContext = null; |
+ } |
+ |
+ private SessionDependencyFactory mFactory; |
+ private ClientSessionTestingHost mClientSession1; |
+ private ClientSessionTestingHost mClientSession2; |
+ |
+ private void startInternal() { |
+ Log.d(TAG, "Service connected. Starting client sessions"); |
+ Toast.makeText(mContext, "Connected to the service", Toast.LENGTH_SHORT).show(); |
+ |
+ createConnections(); |
+ mClientSession1.start(); |
+ mClientSession2.start(); |
+ } |
+ |
+ private void createConnections() { |
+ assert mClientSession1 == null; |
+ assert mClientSession2 == null; |
+ mFactory = new SessionDependencyFactory(); |
+ |
+ String pid = Integer.toString(Process.myPid()); |
+ try { |
+ mClientSession1 = createSessionHost( |
+ "Session 1", "webview_devtools_remote_" + pid); |
+ mClientSession2 = createSessionHost( |
+ "Session 2", "chrome_devtools_remote_" + pid); |
+ } catch (IOException e) { |
+ e.printStackTrace(); |
+ Log.d(TAG, "Failed to start client sessions"); |
+ } |
+ } |
+ |
+ private ClientSessionTestingHost createSessionHost(String sessionId, String socketName) |
+ throws IOException { |
+ return new ClientSessionTestingHost( |
+ mFactory, mBinder.getReceiver(), mBinder.createExecutor(), sessionId, socketName); |
+ } |
+ |
+ private void stopInternal() { |
+ Log.d(TAG, "Service disconnected. Stopping client sessions"); |
+ mClientSession1.dispose(); |
+ mClientSession2.dispose(); |
+ mFactory.dispose(); |
+ mClientSession1 = null; |
+ mClientSession2 = null; |
+ mFactory = null; |
+ } |
+} |