| Index: base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java
|
| diff --git a/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java b/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java
|
| index 6c1f3981f9afdc0586d5067047cce5374bef9410..569c739dec1733d6f4156161d0428e27520bd83b 100644
|
| --- a/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java
|
| +++ b/base/test/android/java/src/org/chromium/base/MultiprocessTestClientLauncher.java
|
| @@ -30,7 +30,7 @@ import javax.annotation.concurrent.GuardedBy;
|
| public final class MultiprocessTestClientLauncher {
|
| private static final String TAG = "cr_MProcTCLauncher";
|
|
|
| - private static ConnectionAllocator sConnectionAllocator = new ConnectionAllocator();
|
| + private static final ConnectionAllocator sConnectionAllocator = new ConnectionAllocator();
|
|
|
| // Not supposed to be instantiated.
|
| private MultiprocessTestClientLauncher() {}
|
| @@ -106,6 +106,9 @@ public final class MultiprocessTestClientLauncher {
|
| @GuardedBy("mConnectedLock")
|
| private boolean mConnected;
|
| private int mPid;
|
| + private ParcelableChannelClient mParcelableChannelClient;
|
| + private final ParcelableChannelServer mParcelableChannelServer =
|
| + new ParcelableChannelServer("PARENT PROCESS");
|
|
|
| ClientServiceConnection(int slot, String[] commandLine, FileDescriptorInfo[] filesToMap) {
|
| mSlot = slot;
|
| @@ -129,7 +132,13 @@ public final class MultiprocessTestClientLauncher {
|
| public void onServiceConnected(ComponentName className, IBinder service) {
|
| try {
|
| mService = ITestClient.Stub.asInterface(service);
|
| - mPid = mService.launch(mCommandLine, mFilesToMap);
|
| + int[] pid = {-1};
|
| + mParcelableChannelServer.clearReceivedParcelables();
|
| + IParcelableChannel iParcelableChannel =
|
| + mService.launch(mCommandLine, mFilesToMap, mParcelableChannelServer, pid);
|
| + mParcelableChannelClient = new ParcelableChannelClient(iParcelableChannel);
|
| + mPid = pid[0];
|
| +
|
| synchronized (mConnectedLock) {
|
| mConnected = true;
|
| mConnectedLock.notifyAll();
|
| @@ -145,6 +154,10 @@ public final class MultiprocessTestClientLauncher {
|
| Log.e(TAG, "Early ClientServiceConnection disconnection.");
|
| return;
|
| }
|
| + synchronized (mConnectedLock) {
|
| + mConnected = false;
|
| + }
|
| + mParcelableChannelClient = null;
|
| sConnectionAllocator.freeConnection(this);
|
| }
|
|
|
| @@ -152,6 +165,14 @@ public final class MultiprocessTestClientLauncher {
|
| return mService;
|
| }
|
|
|
| + public ParcelableChannelClient getParcelableChannelClient() {
|
| + return mParcelableChannelClient;
|
| + }
|
| +
|
| + public ParcelableChannelServer getParcelableChannelServer() {
|
| + return mParcelableChannelServer;
|
| + }
|
| +
|
| public String getServiceClassName() {
|
| // In order to use different processes, we have to declare multiple services in the
|
| // AndroidManifest.xml file, each service associated with its own process. The various
|
| @@ -184,8 +205,8 @@ public final class MultiprocessTestClientLauncher {
|
| * @return the PID of the started process or 0 if the process could not be started.
|
| */
|
| @CalledByNative
|
| - private static int launchClient(final Context context, final String[] commandLine,
|
| - final FileDescriptorInfo[] filesToMap) {
|
| + private static LaunchClientResult launchClient(final Context context,
|
| + final String[] commandLine, final FileDescriptorInfo[] filesToMap) {
|
| if (ThreadUtils.runningOnUiThread()) {
|
| // This can't be called on the main thread as the native side will block until
|
| // onServiceConnected above is called, which cannot happen if the main thread is
|
| @@ -202,12 +223,13 @@ public final class MultiprocessTestClientLauncher {
|
| intent, connection, Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT)) {
|
| Log.e(TAG, "Failed to bind service: " + context.getPackageName() + "." + className);
|
| sConnectionAllocator.freeConnection(connection);
|
| - return 0;
|
| + return new LaunchClientResult(0, null, null);
|
| }
|
|
|
| connection.waitForConnection();
|
|
|
| - return connection.getPid();
|
| + return new LaunchClientResult(connection.getPid(), connection.getParcelableChannelClient(),
|
| + connection.getParcelableChannelServer());
|
| }
|
|
|
| /**
|
|
|