Index: content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java |
similarity index 74% |
rename from content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java |
rename to content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java |
index 057609fc9b3e4a70a2679b16cfb4eacf750c2228..e59a7e801802f178e71c8b7c12302f3a81710952 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessLauncher.java |
@@ -17,18 +17,18 @@ import java.util.concurrent.ConcurrentHashMap; |
import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
import org.chromium.base.ThreadUtils; |
+import org.chromium.content.app.ChildProcessService; |
import org.chromium.content.app.LibraryLoader; |
-import org.chromium.content.app.SandboxedProcessService; |
-import org.chromium.content.common.ISandboxedProcessCallback; |
-import org.chromium.content.common.ISandboxedProcessService; |
+import org.chromium.content.common.IChildProcessCallback; |
+import org.chromium.content.common.IChildProcessService; |
/** |
- * This class provides the method to start/stop SandboxedProcess called by |
+ * This class provides the method to start/stop ChildProcess called by |
* native. |
*/ |
@JNINamespace("content") |
-public class SandboxedProcessLauncher { |
- private static String TAG = "SandboxedProcessLauncher"; |
+public class ChildProcessLauncher { |
+ private static String TAG = "ChildProcessLauncher"; |
private static final int CALLBACK_FOR_UNKNOWN_PROCESS = 0; |
private static final int CALLBACK_FOR_GPU_PROCESS = 1; |
@@ -37,10 +37,10 @@ public class SandboxedProcessLauncher { |
// The upper limit on the number of simultaneous service process instances supported. |
// This must not exceed total number of SandboxedProcessServiceX classes declared in |
// this package, and defined as services in the embedding application's manifest file. |
- // (See {@link SandboxedProcessService} for more details on defining the services.) |
+ // (See {@link ChildProcessService} for more details on defining the services.) |
/* package */ static final int MAX_REGISTERED_SERVICES = 6; |
- private static final SandboxedProcessConnection[] mConnections = |
- new SandboxedProcessConnection[MAX_REGISTERED_SERVICES]; |
+ private static final ChildProcessConnection[] mConnections = |
+ new ChildProcessConnection[MAX_REGISTERED_SERVICES]; |
// The list of free slots in mConnections. When looking for a free connection, |
// the first index in that list should be used. When a connection is freed, its index |
// is added to the end of the list. This is so that we avoid immediately reusing a freed |
@@ -57,54 +57,54 @@ public class SandboxedProcessLauncher { |
} |
} |
- // Service class for sandboxed process. As the default value it uses |
- // SandboxedProcessService. |
- private static Class<? extends SandboxedProcessService> mServiceClass = |
- SandboxedProcessService.class; |
+ // Service class for child process. As the default value it uses |
+ // SandboxedProcessService0. |
+ private static Class<? extends ChildProcessService> mServiceClass = |
+ org.chromium.content.app.SandboxedProcessService0.class; |
private static boolean mConnectionAllocated = false; |
// Sets service class for sandboxed service. |
- public static void setServiceClass(Class<? extends SandboxedProcessService> serviceClass) { |
+ public static void setServiceClass(Class<? extends ChildProcessService> serviceClass) { |
// We should guarantee this is called before allocating connection. |
assert !mConnectionAllocated; |
mServiceClass = serviceClass; |
} |
- private static SandboxedProcessConnection allocateConnection(Context context) { |
- SandboxedProcessConnection.DeathCallback deathCallback = |
- new SandboxedProcessConnection.DeathCallback() { |
+ private static ChildProcessConnection allocateConnection(Context context) { |
+ ChildProcessConnection.DeathCallback deathCallback = |
+ new ChildProcessConnection.DeathCallback() { |
@Override |
- public void onSandboxedProcessDied(int pid) { |
+ public void onChildProcessDied(int pid) { |
stop(pid); |
} |
}; |
synchronized (mConnections) { |
if (mFreeConnectionIndices.isEmpty()) { |
- Log.w(TAG, "Ran out of sandboxed services."); |
+ Log.w(TAG, "Ran out of child services."); |
return null; |
} |
int slot = mFreeConnectionIndices.remove(0); |
assert mConnections[slot] == null; |
- mConnections[slot] = new SandboxedProcessConnection(context, slot, deathCallback, |
+ mConnections[slot] = new ChildProcessConnection(context, slot, deathCallback, |
mServiceClass); |
mConnectionAllocated = true; |
return mConnections[slot]; |
} |
} |
- private static SandboxedProcessConnection allocateBoundConnection(Context context, |
+ private static ChildProcessConnection allocateBoundConnection(Context context, |
String[] commandLine) { |
- SandboxedProcessConnection connection = allocateConnection(context); |
+ ChildProcessConnection connection = allocateConnection(context); |
if (connection != null) { |
String libraryName = LibraryLoader.getLibraryToLoad(); |
- assert libraryName != null : "Attempting to launch a sandbox process without first " |
+ assert libraryName != null : "Attempting to launch a child process without first " |
+ "calling LibraryLoader.setLibraryToLoad"; |
connection.bind(libraryName, commandLine); |
} |
return connection; |
} |
- private static void freeConnection(SandboxedProcessConnection connection) { |
+ private static void freeConnection(ChildProcessConnection connection) { |
if (connection == null) { |
return; |
} |
@@ -133,23 +133,23 @@ public class SandboxedProcessLauncher { |
// Represents an invalid process handle; same as base/process.h kNullProcessHandle. |
private static final int NULL_PROCESS_HANDLE = 0; |
- // Map from pid to SandboxedService connection. |
- private static Map<Integer, SandboxedProcessConnection> mServiceMap = |
- new ConcurrentHashMap<Integer, SandboxedProcessConnection>(); |
+ // Map from pid to ChildService connection. |
+ private static Map<Integer, ChildProcessConnection> mServiceMap = |
+ new ConcurrentHashMap<Integer, ChildProcessConnection>(); |
// A pre-allocated and pre-bound connection ready for connection setup, or null. |
- static SandboxedProcessConnection mSpareConnection = null; |
+ static ChildProcessConnection mSpareConnection = null; |
/** |
- * Returns the sandboxed process service interface for the given pid. This may be called on |
+ * Returns the child process service interface for the given pid. This may be called on |
* any thread, but the caller must assume that the service can disconnect at any time. All |
* service calls should catch and handle android.os.RemoteException. |
* |
* @param pid The pid (process handle) of the service obtained from {@link #start}. |
- * @return The ISandboxedProcessService or null if the service no longer exists. |
+ * @return The IChildProcessService or null if the service no longer exists. |
*/ |
- public static ISandboxedProcessService getSandboxedService(int pid) { |
- SandboxedProcessConnection connection = mServiceMap.get(pid); |
+ public static IChildProcessService getChildService(int pid) { |
+ ChildProcessConnection connection = mServiceMap.get(pid); |
if (connection != null) { |
return connection.getService(); |
} |
@@ -157,25 +157,27 @@ public class SandboxedProcessLauncher { |
} |
/** |
- * Should be called early in startup so the work needed to spawn the sandboxed process can |
+ * Should be called early in startup so the work needed to spawn the child process can |
* be done in parallel to other startup work. Must not be called on the UI thread. |
* @param context the application context used for the connection. |
*/ |
- public static synchronized void warmUp(Context context) { |
- assert !ThreadUtils.runningOnUiThread(); |
- if (mSpareConnection == null) { |
- mSpareConnection = allocateBoundConnection(context, null); |
+ public static void warmUp(Context context) { |
+ synchronized (ChildProcessLauncher.class) { |
+ assert !ThreadUtils.runningOnUiThread(); |
+ if (mSpareConnection == null) { |
+ mSpareConnection = allocateBoundConnection(context, null); |
+ } |
} |
} |
/** |
- * Spawns and connects to a sandboxed process. May be called on any thread. It will not |
- * block, but will instead callback to {@link #nativeOnSandboxedProcessStarted} when the |
+ * Spawns and connects to a child process. May be called on any thread. It will not |
+ * block, but will instead callback to {@link #nativeOnChildProcessStarted} when the |
* connection is established. Note this callback will not necessarily be from the same thread |
* (currently it always comes from the main thread). |
* |
* @param context Context used to obtain the application context. |
- * @param commandLine The sandboxed process command line argv. |
+ * @param commandLine The child process command line argv. |
* @param file_ids The ID that should be used when mapping files in the created process. |
* @param file_fds The file descriptors that should be mapped in the created process. |
* @param file_auto_close Whether the file descriptors should be closed once they were passed to |
@@ -197,8 +199,8 @@ public class SandboxedProcessLauncher { |
new FileDescriptorInfo(fileIds[i], fileFds[i], fileAutoClose[i]); |
} |
assert clientContext != 0; |
- SandboxedProcessConnection allocatedConnection; |
- synchronized (SandboxedProcessLauncher.class) { |
+ ChildProcessConnection allocatedConnection; |
+ synchronized (ChildProcessLauncher.class) { |
allocatedConnection = mSpareConnection; |
mSpareConnection = null; |
} |
@@ -206,13 +208,13 @@ public class SandboxedProcessLauncher { |
allocatedConnection = allocateBoundConnection(context, commandLine); |
if (allocatedConnection == null) { |
// Notify the native code so it can free the heap allocated callback. |
- nativeOnSandboxedProcessStarted(clientContext, 0); |
+ nativeOnChildProcessStarted(clientContext, 0); |
return; |
} |
} |
- final SandboxedProcessConnection connection = allocatedConnection; |
+ final ChildProcessConnection connection = allocatedConnection; |
Log.d(TAG, "Setting up connection to process: slot=" + connection.getServiceNumber()); |
- // Note: This runnable will be executed when the sandboxed connection is setup. |
+ // Note: This runnable will be executed when the child connection is setup. |
final Runnable onConnect = new Runnable() { |
@Override |
public void run() { |
@@ -223,7 +225,7 @@ public class SandboxedProcessLauncher { |
} else { |
freeConnection(connection); |
} |
- nativeOnSandboxedProcessStarted(clientContext, pid); |
+ nativeOnChildProcessStarted(clientContext, pid); |
} |
}; |
int callbackType = CALLBACK_FOR_UNKNOWN_PROCESS; |
@@ -241,15 +243,15 @@ public class SandboxedProcessLauncher { |
} |
/** |
- * Terminates a sandboxed process. This may be called from any thread. |
+ * Terminates a child process. This may be called from any thread. |
* |
* @param pid The pid (process handle) of the service connection obtained from {@link #start}. |
*/ |
@CalledByNative |
static void stop(int pid) { |
- Log.d(TAG, "stopping sandboxed connection: pid=" + pid); |
+ Log.d(TAG, "stopping child connection: pid=" + pid); |
- SandboxedProcessConnection connection = mServiceMap.remove(pid); |
+ ChildProcessConnection connection = mServiceMap.remove(pid); |
if (connection == null) { |
Log.w(TAG, "Tried to stop non-existent connection to pid: " + pid); |
return; |
@@ -259,14 +261,14 @@ public class SandboxedProcessLauncher { |
} |
/** |
- * Bind a sandboxed process as a high priority process so that it has the same |
+ * Bind a child process as a high priority process so that it has the same |
* priority as the main process. This can be used for the foreground renderer |
* process to distinguish it from the the background renderer process. |
* |
* @param pid The process handle of the service connection obtained from {@link #start}. |
*/ |
static void bindAsHighPriority(int pid) { |
- SandboxedProcessConnection connection = mServiceMap.get(pid); |
+ ChildProcessConnection connection = mServiceMap.get(pid); |
if (connection == null) { |
Log.w(TAG, "Tried to bind a non-existent connection to pid: " + pid); |
return; |
@@ -280,7 +282,7 @@ public class SandboxedProcessLauncher { |
* @param pid The process handle of the service obtained from {@link #start}. |
*/ |
static void unbindAsHighPriority(int pid) { |
- SandboxedProcessConnection connection = mServiceMap.get(pid); |
+ ChildProcessConnection connection = mServiceMap.get(pid); |
if (connection == null) { |
Log.w(TAG, "Tried to unbind non-existent connection to pid: " + pid); |
return; |
@@ -291,8 +293,8 @@ public class SandboxedProcessLauncher { |
/** |
* This implementation is used to receive callbacks from the remote service. |
*/ |
- private static ISandboxedProcessCallback createCallback(final int callbackType) { |
- return new ISandboxedProcessCallback.Stub() { |
+ private static IChildProcessCallback createCallback(final int callbackType) { |
+ return new IChildProcessCallback.Stub() { |
/** |
* This is called by the remote service regularly to tell us about |
* new values. Note that IPC calls are dispatched through a thread |
@@ -326,7 +328,7 @@ public class SandboxedProcessLauncher { |
}; |
}; |
- private static native void nativeOnSandboxedProcessStarted(int clientContext, int pid); |
+ private static native void nativeOnChildProcessStarted(int clientContext, int pid); |
private static native Surface nativeGetViewSurface(int surfaceId); |
private static native void nativeEstablishSurfacePeer( |
int pid, Surface surface, int primaryID, int secondaryID); |