Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Unified Diff: content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java

Issue 2705133002: android: Allow registering multiple CreationParams (Closed)
Patch Set: javadoc Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
index 4ba03a5836cc320684e4aab22602b1f2a368edb6..69a222cc09cdd2e35e01126be0d1b29b8564267a 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java
@@ -570,11 +570,7 @@ public class ChildProcessLauncher {
synchronized (sSpareConnectionLock) {
assert !ThreadUtils.runningOnUiThread();
if (sSpareSandboxedConnection == null) {
- ChildProcessCreationParams params = ChildProcessCreationParams.get();
- if (params != null) {
- params = params.copy();
- }
-
+ ChildProcessCreationParams params = ChildProcessCreationParams.getDefault();
sSpareConnectionStarting = true;
ChildProcessConnection.StartCallback startCallback =
@@ -632,22 +628,23 @@ public class ChildProcessLauncher {
* always comes from the main thread).
*
* @param context Context used to obtain the application context.
+ * @param paramId Key used to retrieve ChildProcessCreationParams.
* @param commandLine The child process command line argv.
* @param filesToBeMapped File IDs, FDs, offsets, and lengths to pass through.
* @param clientContext Arbitrary parameter used by the client to distinguish this connection.
*/
+ // TODO(boliu): All tests should use this over startForTesting.
+ @VisibleForTesting
@CalledByNative
- private static void start(Context context, final String[] commandLine, int childProcessId,
+ static void start(Context context, int paramId, final String[] commandLine, int childProcessId,
FileDescriptorInfo[] filesToBeMapped, long clientContext) {
- assert clientContext != 0;
-
int callbackType = CALLBACK_FOR_UNKNOWN_PROCESS;
boolean inSandbox = true;
String processType =
ContentSwitches.getSwitchValue(commandLine, ContentSwitches.SWITCH_PROCESS_TYPE);
- ChildProcessCreationParams params = ChildProcessCreationParams.get();
- if (params != null) {
- params = params.copy();
+ ChildProcessCreationParams params = ChildProcessCreationParams.get(paramId);
+ if (paramId != ChildProcessCreationParams.DEFAULT_ID && params == null) {
Ted C 2017/02/27 22:25:17 why do we want to allow DEFAULT_ID not to exist in
boliu 2017/02/27 23:43:02 regular chrome (ie not monochrome) doesn't need it
+ throw new RuntimeException("CreationParams id " + paramId + " not found");
}
if (ContentSwitches.SWITCH_RENDERER_PROCESS.equals(processType)) {
callbackType = CALLBACK_FOR_RENDERER_PROCESS;
@@ -662,6 +659,7 @@ public class ChildProcessLauncher {
// name. In WebAPK, ChildProcessCreationParams are initialized with WebAPK's
// package name. Make a copy of the WebAPK's params, but replace the package with
// Chrome's package to use when initializing a non-renderer processes.
+ // TODO(boliu): Should fold into |paramId|. Investigate why this is needed.
params = new ChildProcessCreationParams(context.getPackageName(),
params.getIsExternalService(), params.getLibraryProcessType());
}
@@ -697,7 +695,10 @@ public class ChildProcessLauncher {
: context.getPackageName();
synchronized (sSpareConnectionLock) {
if (inSandbox && sSpareSandboxedConnection != null
- && sSpareSandboxedConnection.getPackageName().equals(packageName)) {
+ && sSpareSandboxedConnection.getPackageName().equals(packageName)
+ // Object identity check for getDefault should be enough. The default is
+ // not supposed to change once set.
+ && creationParams == ChildProcessCreationParams.getDefault()) {
while (sSpareConnectionStarting) {
try {
sSpareConnectionLock.wait();

Powered by Google App Engine
This is Rietveld 408576698