Chromium Code Reviews| Index: shell/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| diff --git a/shell/android/apk/src/org/chromium/mojo/shell/ShellMain.java b/shell/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| index 1f55fa2c86776366a1b887e3f90d2a46f8325e57..7ed365655353b77969f3df27dd5b105ea6f2406f 100644 |
| --- a/shell/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| +++ b/shell/android/apk/src/org/chromium/mojo/shell/ShellMain.java |
| @@ -27,9 +27,12 @@ public class ShellMain { |
| private static final String LOCAL_APP_DIRECTORY = "local_apps"; |
| // Individual applications bundled with the shell as assets. |
| private static final String NETWORK_LIBRARY_APP = "network_service.mojo"; |
| - // The mojo_shell library is also an executable run in forked processes when running |
| - // multi-process. |
| + // Not really an executable, but what we'll use for "argv[0]" (along with the path). |
|
qsr
2015/04/08 09:27:44
It is an executable. android executable are pie, w
|
| private static final String MOJO_SHELL_EXECUTABLE = "libmojo_shell.so"; |
| + // Directory where the child executable will be extracted. |
| + private static final String CHILD_DIRECTORY = "child"; |
| + // Name of the child executable. |
| + private static final String MOJO_SHELL_CHILD_EXECUTABLE = "mojo_shell_child"; |
| /** |
| * A guard flag for calling nativeInit() only once. |
| @@ -46,6 +49,12 @@ public class ShellMain { |
| getLocalAppsDir(applicationContext), false); |
| File mojoShell = new File(applicationContext.getApplicationInfo().nativeLibraryDir, |
| MOJO_SHELL_EXECUTABLE); |
| + FileHelper.extractFromAssets(applicationContext, MOJO_SHELL_CHILD_EXECUTABLE, |
| + getChildDir(applicationContext), false); |
| + File mojoShellChild = |
| + new File(getChildDir(applicationContext), MOJO_SHELL_CHILD_EXECUTABLE); |
| + // The shell child executable needs to be ... executable. |
| + mojoShellChild.setExecutable(true, true); |
| List<String> parametersList = new ArrayList<String>(); |
| // Program name. |
| @@ -54,6 +63,7 @@ public class ShellMain { |
| } |
| nativeInit(applicationContext, mojoShell.getAbsolutePath(), |
| + mojoShellChild.getAbsolutePath(), |
| parametersList.toArray(new String[parametersList.size()]), |
| getLocalAppsDir(applicationContext).getAbsolutePath(), |
| getTmpDir(applicationContext).getAbsolutePath()); |
| @@ -84,6 +94,10 @@ public class ShellMain { |
| return context.getDir(LOCAL_APP_DIRECTORY, Context.MODE_PRIVATE); |
| } |
| + private static File getChildDir(Context context) { |
| + return context.getDir(CHILD_DIRECTORY, Context.MODE_PRIVATE); |
| + } |
| + |
| private static File getTmpDir(Context context) { |
| return new File(context.getCacheDir(), "tmp"); |
| } |
| @@ -97,7 +111,8 @@ public class ShellMain { |
| * Initializes the native system. This API should be called only once per process. |
| **/ |
| private static native void nativeInit(Context context, String mojoShellPath, |
| - String[] parameters, String bundledAppsDirectory, String tmpDir); |
| + String mojoShellChildPath, String[] parameters, String bundledAppsDirectory, |
| + String tmpDir); |
| private static native boolean nativeStart(); |