| 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 40a5af53c7360d364062fb25c540b867e447ac63..806dbc4db3fad24983ccb39f7c9c9715be0d59b3 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
|
| @@ -8,6 +8,7 @@ import android.content.Context;
|
| import android.content.pm.ApplicationInfo;
|
| import android.content.pm.PackageManager;
|
| import android.graphics.SurfaceTexture;
|
| +import android.os.ParcelFileDescriptor;
|
| import android.os.RemoteException;
|
| import android.util.Pair;
|
| import android.view.Surface;
|
| @@ -26,6 +27,7 @@ import org.chromium.content.app.SandboxedProcessService;
|
| import org.chromium.content.common.IChildProcessCallback;
|
| import org.chromium.content.common.SurfaceWrapper;
|
|
|
| +import java.io.IOException;
|
| import java.util.ArrayList;
|
| import java.util.LinkedList;
|
| import java.util.Map;
|
| @@ -483,6 +485,24 @@ public class ChildProcessLauncher {
|
| return null;
|
| }
|
|
|
| + @CalledByNative
|
| + private static FileDescriptorInfo makeFdInfo(
|
| + int id, int fd, boolean autoClose, long offset, long size) {
|
| + ParcelFileDescriptor pFd;
|
| + if (autoClose) {
|
| + // Adopt the FD, it will be closed when we close the ParcelFileDescriptor.
|
| + pFd = ParcelFileDescriptor.adoptFd(fd);
|
| + } else {
|
| + try {
|
| + pFd = ParcelFileDescriptor.fromFd(fd);
|
| + } catch (IOException e) {
|
| + Log.e(TAG, "Invalid FD provided for process connection, aborting connection.", e);
|
| + return null;
|
| + }
|
| + }
|
| + return new FileDescriptorInfo(id, pFd, offset, size);
|
| + }
|
| +
|
| /**
|
| * 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
|
| @@ -491,27 +511,12 @@ public class ChildProcessLauncher {
|
| *
|
| * @param context Context used to obtain the application context.
|
| * @param commandLine The child process command line argv.
|
| - * @param fileIds The ID that should be used when mapping files in the created process.
|
| - * @param fileFds The file descriptors that should be mapped in the created process.
|
| - * @param fileAutoClose Whether the file descriptors should be closed once they were passed to
|
| - * the created process.
|
| + * @param filesToBeMapped File IDs, FDs, offsets, and lengths to pass through.
|
| * @param clientContext Arbitrary parameter used by the client to distinguish this connection.
|
| */
|
| @CalledByNative
|
| - static void start(
|
| - Context context,
|
| - final String[] commandLine,
|
| - int childProcessId,
|
| - int[] fileIds,
|
| - int[] fileFds,
|
| - boolean[] fileAutoClose,
|
| - long clientContext) {
|
| - assert fileIds.length == fileFds.length && fileFds.length == fileAutoClose.length;
|
| - FileDescriptorInfo[] filesToBeMapped = new FileDescriptorInfo[fileFds.length];
|
| - for (int i = 0; i < fileFds.length; i++) {
|
| - filesToBeMapped[i] =
|
| - new FileDescriptorInfo(fileIds[i], fileFds[i], fileAutoClose[i]);
|
| - }
|
| + private static void start(Context context, final String[] commandLine, int childProcessId,
|
| + FileDescriptorInfo[] filesToBeMapped, long clientContext) {
|
| assert clientContext != 0;
|
|
|
| int callbackType = CALLBACK_FOR_UNKNOWN_PROCESS;
|
|
|