Index: content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
index fca55b4bb10117bf40127e3bc1d2732d00f049cb..bd5366776b48aea323425edc9e6d17ce0413fa19 100644 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java |
@@ -8,6 +8,7 @@ import android.content.ComponentName; |
import android.content.Context; |
import android.content.Intent; |
import android.content.ServiceConnection; |
+import android.os.Bundle; |
import android.os.Handler; |
import android.os.IBinder; |
import android.os.Looper; |
@@ -56,6 +57,12 @@ public class ChildProcessLauncherTest { |
@Before |
public void setUp() throws Exception { |
LibraryLoader.get(LibraryProcessType.PROCESS_CHILD).ensureInitialized(); |
+ ChildProcessLauncherTestUtils.runOnLauncherThreadBlocking(new Runnable() { |
+ @Override |
+ public void run() { |
+ ChildProcessLauncherHelper.initLinker(); |
+ } |
+ }); |
} |
/** |
@@ -404,42 +411,21 @@ public class ChildProcessLauncherTest { |
Assert.assertTrue(helperConnPid > 0); |
// Launch a service from this process. Since slot 0 is already bound by the Helper, it |
- // will fail to start and the ChildProcessLauncher will retry. |
+ // will fail to start and the ChildProcessLauncher will retry and use the slot 1. |
final ChildProcessCreationParams creationParams = new ChildProcessCreationParams( |
context.getPackageName(), false /* isExternalService */, |
LibraryProcessType.PROCESS_CHILD, true /* bindToCallerCheck */); |
- final ChildProcessConnection conn = ChildProcessLauncherTestUtils.startInternalForTesting( |
- context, sProcessWaitArguments, new FileDescriptorInfo[0], creationParams); |
- |
- CriteriaHelper.pollInstrumentationThread( |
- new Criteria("Failed waiting for instrumentation-bound service") { |
- @Override |
- public boolean isSatisfied() { |
- return ChildProcessLauncherTestUtils.getConnectionService(conn) != null; |
- } |
- }); |
+ final ChildProcessLauncherHelper launcherHelper = |
+ ChildProcessLauncherTestUtils.startForTesting( |
+ context, sProcessWaitArguments, new FileDescriptorInfo[0], creationParams); |
- Assert.assertEquals(0, ChildProcessLauncherTestUtils.getConnectionServiceNumber(conn)); |
+ // Retrieve the connection (this waits for the service to connect). |
+ final ChildProcessConnection retryConn = retrieveConnection(launcherHelper); |
+ Assert.assertEquals(1, ChildProcessLauncherTestUtils.getConnectionServiceNumber(retryConn)); |
final ChildProcessConnection[] sandboxedConnections = |
getSandboxedConnectionArrayForTesting(context, context.getPackageName()); |
- // Wait for the retry to succeed. |
- CriteriaHelper.pollInstrumentationThread( |
- new Criteria("Failed waiting for both child process services") { |
- @Override |
- public boolean isSatisfied() { |
- boolean allChildrenConnected = true; |
- for (int i = 0; i <= 1; ++i) { |
- ChildProcessConnection conn = sandboxedConnections[i]; |
- allChildrenConnected &= conn != null |
- && ChildProcessLauncherTestUtils.getConnectionService(conn) |
- != null; |
- } |
- return allChildrenConnected; |
- } |
- }); |
- |
// Check that only two connections are created. |
for (int i = 0; i < sandboxedConnections.length; ++i) { |
ChildProcessConnection sandboxedConn = sandboxedConnections[i]; |
@@ -452,11 +438,9 @@ public class ChildProcessLauncherTest { |
} |
} |
- Assert.assertTrue(conn == sandboxedConnections[0]); |
- final ChildProcessConnection retryConn = sandboxedConnections[1]; |
- |
- Assert.assertFalse(conn == retryConn); |
+ Assert.assertTrue(retryConn == sandboxedConnections[1]); |
+ ChildProcessConnection conn = sandboxedConnections[0]; |
Assert.assertEquals(0, ChildProcessLauncherTestUtils.getConnectionServiceNumber(conn)); |
Assert.assertEquals(0, ChildProcessLauncherTestUtils.getConnectionPid(conn)); |
Assert.assertFalse(ChildProcessLauncherTestUtils.getConnectionService(conn).bindToCaller()); |
@@ -488,19 +472,22 @@ public class ChildProcessLauncherTest { |
@MediumTest |
@Feature({"ProcessManagement"}) |
public void testWarmUp() { |
- final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); |
+ Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); |
warmUpOnUiThreadBlocking(context); |
+ |
+ Assert.assertEquals(1, allocatedChromeSandboxedConnectionsCount()); |
+ |
+ ChildProcessLauncherHelper launcherHelper = ChildProcessLauncherTestUtils.startForTesting( |
+ context, new String[0], new FileDescriptorInfo[0], null); |
+ |
+ final ChildProcessConnection conn = retrieveConnection(launcherHelper); |
+ |
+ Assert.assertEquals( |
+ 1, allocatedChromeSandboxedConnectionsCount()); // Used warmup connection. |
+ |
ChildProcessLauncherTestUtils.runOnLauncherThreadBlocking(new Runnable() { |
@Override |
public void run() { |
- Assert.assertEquals(1, allocatedChromeSandboxedConnectionsCount()); |
- |
- final ChildProcessConnection conn = |
- ChildProcessLauncherTestUtils.startInternalForTesting( |
- context, new String[0], new FileDescriptorInfo[0], null); |
- Assert.assertEquals( |
- 1, allocatedChromeSandboxedConnectionsCount()); // Used warmup connection. |
- |
ChildProcessLauncher.stop(ChildProcessLauncherTestUtils.getConnectionPid(conn)); |
} |
}); |
@@ -557,10 +544,10 @@ public class ChildProcessLauncherTest { |
private static void startRendererProcess( |
Context context, int paramId, FileDescriptorInfo[] filesToMap) { |
assert LauncherThread.runningOnLauncherThread(); |
- ChildProcessLauncher.start(context, paramId, |
+ ChildProcessLauncherHelper.createAndStart(0L /* nativePointer */, paramId, |
new String[] {"--" + ContentSwitches.SWITCH_PROCESS_TYPE + "=" |
+ ContentSwitches.SWITCH_RENDERER_PROCESS}, |
- filesToMap, null /* launchCallback */); |
+ filesToMap); |
} |
private static ChildProcessConnection allocateBoundConnectionForTesting( |
@@ -594,11 +581,10 @@ public class ChildProcessLauncherTest { |
ChildProcessCreationParams creationParams = |
getDefaultChildProcessCreationParams(packageName); |
return ChildProcessLauncher.allocateConnection( |
- new ChildSpawnData(context, null /* commandLine */, |
- null /* filesToBeMapped */, null /* launchCallback */, |
+ new ChildSpawnData(context, null /* serviceBundle */, |
+ null /* connectionBundle */, null /* launchCallback */, |
null /* childProcessCallback */, true /* inSandbox */, |
false /* alwaysInForeground */, creationParams), |
- ChildProcessLauncher.createCommonParamsBundle(creationParams), |
false /* forWarmUp */); |
} |
}); |
@@ -614,10 +600,11 @@ public class ChildProcessLauncherTest { |
: context.getPackageName(); |
ChildConnectionAllocator allocator = ChildProcessLauncher.getConnectionAllocator( |
context, packageName, inSandbox); |
- allocator.enqueuePendingQueueForTesting(new ChildSpawnData(context, commandLine, |
- new FileDescriptorInfo[0], null /* launchCallback */, |
- null /* childProcessCallback */, true /* inSandbox */, |
- false /* alwaysInForeground */, creationParams)); |
+ |
+ allocator.enqueuePendingQueueForTesting(new ChildSpawnData(context, |
+ null /* serviceBundle */, null /* connectionBundle */, |
+ null /* launchCallback */, null /* childProcessCallback */, |
+ true /* inSandbox */, false /* alwaysInForeground */, creationParams)); |
} |
}); |
} |
@@ -678,10 +665,25 @@ public class ChildProcessLauncherTest { |
ChildProcessLauncherTestUtils.runOnLauncherThreadBlocking(new Runnable() { |
@Override |
public void run() { |
- ChildProcessLauncher.triggerConnectionSetup(connection, sProcessWaitArguments, |
- new FileDescriptorInfo[0], null /* launchCallback */, |
- null /* childProcessCallback */, true /* addToBindingManager */); |
+ Bundle connectionBundle = ChildProcessLauncherHelper.createConnectionBundle( |
+ sProcessWaitArguments, new FileDescriptorInfo[0]); |
+ ChildProcessLauncher.triggerConnectionSetup(connection, connectionBundle, |
+ null /* launchCallback */, null /* childProcessCallback */, |
+ true /* addToBindingmanager */); |
} |
}); |
} |
+ |
+ private static ChildProcessConnection retrieveConnection( |
+ final ChildProcessLauncherHelper launcherHelper) { |
+ CriteriaHelper.pollInstrumentationThread( |
+ new Criteria("Failed waiting for child process to connect") { |
+ @Override |
+ public boolean isSatisfied() { |
+ return ChildProcessLauncherTestUtils.getConnection(launcherHelper) != null; |
+ } |
+ }); |
+ |
+ return ChildProcessLauncherTestUtils.getConnection(launcherHelper); |
+ } |
} |