| 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 357062ac13bb573c6dde441f7ea6d7f6d51f7afb..c1cd1caead5bb77e75a72f4187a82b7abc23635d 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
|
| @@ -5,6 +5,7 @@
|
| package org.chromium.content.browser;
|
|
|
| import android.annotation.SuppressLint;
|
| +import android.app.Service;
|
| import android.content.Context;
|
| import android.content.Intent;
|
| import android.content.pm.ApplicationInfo;
|
| @@ -27,7 +28,6 @@ import org.chromium.base.VisibleForTesting;
|
| import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.base.annotations.JNINamespace;
|
| import org.chromium.base.library_loader.Linker;
|
| -import org.chromium.content.app.ChildProcessService;
|
| import org.chromium.content.app.ChromiumLinkerParams;
|
| import org.chromium.content.app.DownloadProcessService;
|
| import org.chromium.content.app.PrivilegedProcessService;
|
| @@ -65,7 +65,6 @@ public class ChildProcessLauncher {
|
| private final ArrayList<Integer> mFreeConnectionIndices;
|
| private final Object mConnectionLock = new Object();
|
|
|
| - private Class<? extends ChildProcessService> mChildClass;
|
| private final boolean mInSandbox;
|
| // Each Allocator keeps a queue for the pending spawn data. Once a connection is free, we
|
| // dequeue the pending spawn data from the same allocator as the connection.
|
| @@ -77,11 +76,21 @@ public class ChildProcessLauncher {
|
| for (int i = 0; i < numChildServices; i++) {
|
| mFreeConnectionIndices.add(i);
|
| }
|
| - mChildClass =
|
| - inSandbox ? SandboxedProcessService.class : PrivilegedProcessService.class;
|
| mInSandbox = inSandbox;
|
| }
|
|
|
| + private Class<? extends Service> getServiceClass(ChildProcessCreationParams params) {
|
| + Class<? extends Service> serviceClass = null;
|
| + if (params != null) {
|
| + serviceClass = params.getServiceClass();
|
| + }
|
| + if (serviceClass != null) {
|
| + return serviceClass;
|
| + }
|
| + return mInSandbox ? SandboxedProcessService.class
|
| + : PrivilegedProcessService.class;
|
| + }
|
| +
|
| public ChildProcessConnection allocate(
|
| Context context, ChildProcessConnection.DeathCallback deathCallback,
|
| ChromiumLinkerParams chromiumLinkerParams,
|
| @@ -95,8 +104,8 @@ public class ChildProcessLauncher {
|
| int slot = mFreeConnectionIndices.remove(0);
|
| assert mChildProcessConnections[slot] == null;
|
| mChildProcessConnections[slot] = new ChildProcessConnectionImpl(context, slot,
|
| - mInSandbox, deathCallback, mChildClass, chromiumLinkerParams,
|
| - alwaysInForeground, creationParams);
|
| + mInSandbox, deathCallback, getServiceClass(creationParams),
|
| + chromiumLinkerParams, alwaysInForeground, creationParams);
|
| Log.d(TAG, "Allocator allocated a connection, sandbox: %b, slot: %d", mInSandbox,
|
| slot);
|
| return mChildProcessConnections[slot];
|
| @@ -944,8 +953,10 @@ public class ChildProcessLauncher {
|
| @VisibleForTesting
|
| static void enqueuePendingSpawnForTesting(Context context, String[] commandLine,
|
| ChildProcessCreationParams creationParams, boolean inSandbox) {
|
| + String packageName = creationParams != null ? creationParams.getPackageName()
|
| + : context.getPackageName();
|
| PendingSpawnQueue pendingSpawnQueue = getPendingSpawnQueue(context,
|
| - creationParams.getPackageName(), inSandbox);
|
| + packageName, inSandbox);
|
| synchronized (pendingSpawnQueue.mPendingSpawnsLock) {
|
| pendingSpawnQueue.enqueueLocked(new PendingSpawnData(context, commandLine, 1,
|
| new FileDescriptorInfo[0], 0, CALLBACK_FOR_RENDERER_PROCESS, true,
|
|
|