Add default file for command line arguments.
Mojo Shell on Android will now look at
/data/local/tmp/{package_name}.cmd for default arguments. This file must
contain one argument per line. Moreover, this file must not be writeable
by the application to prevent other application modifying it.
R=ppi@chromium.org
BUG=Fixes https://github.com/domokit/mojo/issues/550
Review URL: https://codereview.chromium.org/1460213002 .
diff --git a/mojo/devtools/common/devtoolslib/android_shell.py b/mojo/devtools/common/devtoolslib/android_shell.py
index 5e70013..bda59c9 100644
--- a/mojo/devtools/common/devtoolslib/android_shell.py
+++ b/mojo/devtools/common/devtoolslib/android_shell.py
@@ -25,9 +25,8 @@
_LOGCAT_JAVA_TAGS = [
'AndroidHandler',
'MojoFileHelper',
- 'MojoMain',
- 'MojoShellActivity',
'MojoShellApplication',
+ 'ShellService',
]
_MOJO_SHELL_PACKAGE_NAME = 'org.chromium.mojo.shell'
diff --git a/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java b/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java
index 6faac51..2f489fc 100644
--- a/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java
+++ b/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java
@@ -32,7 +32,6 @@
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/**
@@ -160,7 +159,7 @@
/**
* Initializes the native system and starts the shell.
**/
- private void ensureStarted(Context applicationContext, String[] args) {
+ private void ensureStarted(Context applicationContext, List<String> args) {
if (mInitialized) return;
try {
FileHelper.extractFromAssets(applicationContext, NETWORK_LIBRARY_APP,
@@ -177,9 +176,27 @@
argsList.add("--origin=" + DEFAULT_ORIGIN);
argsList.add("--args-for=mojo:notifications " + R.mipmap.ic_launcher);
- // Program name.
+ File defaultArgumentsFile = new File(
+ String.format("/data/local/tmp/%s.cmd", applicationContext.getPackageName()));
+ if (defaultArgumentsFile.isFile()) {
+ if (defaultArgumentsFile.canWrite()) {
+ Log.e(TAG, String.format("Command line arguments file (%s) is world writeable. "
+ + "The file will be ignored.",
+ defaultArgumentsFile.getAbsolutePath()));
+ } else {
+ List<String> defaultArguments = getArgsFromFile(defaultArgumentsFile);
+ if (defaultArguments.size() > 0) {
+ Log.w(TAG, String.format("Adding default arguments from %s:",
+ defaultArgumentsFile.getAbsolutePath()));
+ for (String arg : defaultArguments) {
+ Log.w(TAG, arg);
+ }
+ argsList.addAll(defaultArguments);
+ }
+ }
+ }
if (args != null) {
- argsList.addAll(Arrays.asList(args));
+ argsList.addAll(args);
}
nativeStart(applicationContext, applicationContext.getAssets(),
@@ -194,7 +211,21 @@
}
}
- private static String[] getArgsFromIntent(Intent intent) {
+ private static List<String> getArgsFromFile(File file) {
+ List<String> argsList = new ArrayList<String>();
+ try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
+ String line;
+ while ((line = bufferedReader.readLine()) != null) {
+ argsList.add(line);
+ }
+ return argsList;
+ } catch (IOException e) {
+ Log.w(TAG, e.getMessage(), e);
+ }
+ return new ArrayList<String>();
+ }
+
+ private static List<String> getArgsFromIntent(Intent intent) {
String argsFile = intent.getStringExtra("argsFile");
if (argsFile != null) {
File file = new File(argsFile);
@@ -202,16 +233,7 @@
return null;
}
try {
- List<String> argsList = new ArrayList<String>();
- try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
- String line;
- while ((line = bufferedReader.readLine()) != null) {
- argsList.add(line);
- }
- return argsList.toArray(new String[argsList.size()]);
- } catch (IOException e) {
- Log.w(TAG, e.getMessage(), e);
- }
+ return getArgsFromFile(file);
} finally {
if (!file.delete()) {
Log.w(TAG, "Unable to delete args file.");
@@ -223,7 +245,7 @@
/**
* Adds the given URL to the set of mojo applications to run on start. This must be called
- * before {@link ShellService#ensureStarted(Context, String[])}
+ * before {@link ShellService#ensureStarted(Context, List)}
*/
void addApplicationURL(String url) {
nativeAddApplicationURL(url);