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..fe75a481d34994c4e2dd33abfb1ed2456b633d21 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,17 @@ 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(Class<? extends Service> serviceClass) { |
+ if (serviceClass != null) { |
+ return serviceClass; |
+ } |
+ return mInSandbox ? SandboxedProcessService.class |
+ : PrivilegedProcessService.class; |
+ } |
+ |
public ChildProcessConnection allocate( |
Context context, ChildProcessConnection.DeathCallback deathCallback, |
ChromiumLinkerParams chromiumLinkerParams, |
@@ -94,8 +99,10 @@ public class ChildProcessLauncher { |
} |
int slot = mFreeConnectionIndices.remove(0); |
assert mChildProcessConnections[slot] == null; |
+ Class<? extends Service> serviceClass = getServiceClass(creationParams != null |
+ ? creationParams.getServiceClass() : null); |
Maria
2016/06/17 17:09:24
I think that's an odd division of logic. Why not j
Xi Han
2016/06/17 18:35:20
It sounds good to me, since we can just pass null
|
mChildProcessConnections[slot] = new ChildProcessConnectionImpl(context, slot, |
- mInSandbox, deathCallback, mChildClass, chromiumLinkerParams, |
+ mInSandbox, deathCallback, serviceClass, chromiumLinkerParams, |
alwaysInForeground, creationParams); |
Log.d(TAG, "Allocator allocated a connection, sandbox: %b, slot: %d", mInSandbox, |
slot); |
@@ -944,8 +951,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, |