| Index: content/public/android/java/src/org/chromium/content/common/CommandLine.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/common/CommandLine.java b/content/public/android/java/src/org/chromium/content/common/CommandLine.java
|
| deleted file mode 100644
|
| index be33eccfa34f8b5fc5e8f0c85fb48acd84b6ec40..0000000000000000000000000000000000000000
|
| --- a/content/public/android/java/src/org/chromium/content/common/CommandLine.java
|
| +++ /dev/null
|
| @@ -1,438 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -package org.chromium.content.common;
|
| -
|
| -import android.text.TextUtils;
|
| -import android.util.Log;
|
| -
|
| -import java.io.File;
|
| -import java.io.FileInputStream;
|
| -import java.io.FileNotFoundException;
|
| -import java.io.IOException;
|
| -import java.io.InputStreamReader;
|
| -import java.io.Reader;
|
| -import java.util.ArrayList;
|
| -import java.util.Arrays;
|
| -import java.util.HashMap;
|
| -import java.util.concurrent.atomic.AtomicReference;
|
| -
|
| -/**
|
| - * Java mirror of Chrome command-line utilities (e.g. class CommandLine from base/command_line.h).
|
| - * Command line program adb_command_line can be used to set the Chrome command line:
|
| - * adb shell "echo chrome --my-param > /data/local/chrome-command-line"
|
| - */
|
| -public abstract class CommandLine {
|
| - // Block onCreate() of Chrome until a Java debugger is attached.
|
| - public static final String WAIT_FOR_JAVA_DEBUGGER = "wait-for-java-debugger";
|
| -
|
| - // Tell Java to use the official command line, loaded from the
|
| - // official-command-line.xml files. WARNING this is not done
|
| - // immediately on startup, so early running Java code will not see
|
| - // these flags.
|
| - public static final String ADD_OFFICIAL_COMMAND_LINE = "add-official-command-line";
|
| -
|
| - // Enables test intent handling.
|
| - public static final String ENABLE_TEST_INTENTS = "enable-test-intents";
|
| -
|
| - // Adds additional thread idle time information into the trace event output.
|
| - public static final String ENABLE_IDLE_TRACING = "enable-idle-tracing";
|
| -
|
| - // Dump frames-per-second to the log
|
| - public static final String LOG_FPS = "log-fps";
|
| -
|
| - // Whether Chromium should use a mobile user agent.
|
| - public static final String USE_MOBILE_UA = "use-mobile-user-agent";
|
| -
|
| - // tablet specific UI components.
|
| - // Native switch - chrome_switches::kTabletUI
|
| - public static final String TABLET_UI = "tablet-ui";
|
| -
|
| - // Change the url of the JavaScript that gets injected when accessibility mode is enabled.
|
| - public static final String ACCESSIBILITY_JAVASCRIPT_URL = "accessibility-js-url";
|
| -
|
| - public static final String ACCESSIBILITY_DEBUG_BRAILLE_SERVICE = "debug-braille-service";
|
| -
|
| - // Sets the ISO country code that will be used for phone number detection.
|
| - public static final String NETWORK_COUNTRY_ISO = "network-country-iso";
|
| -
|
| - // Whether to enable the auto-hiding top controls.
|
| - public static final String ENABLE_TOP_CONTROLS_POSITION_CALCULATION
|
| - = "enable-top-controls-position-calculation";
|
| -
|
| - // The height of the movable top controls.
|
| - public static final String TOP_CONTROLS_HEIGHT = "top-controls-height";
|
| -
|
| - // How much of the top controls need to be shown before they will auto show.
|
| - public static final String TOP_CONTROLS_SHOW_THRESHOLD = "top-controls-show-threshold";
|
| -
|
| - // How much of the top controls need to be hidden before they will auto hide.
|
| - public static final String TOP_CONTROLS_HIDE_THRESHOLD = "top-controls-hide-threshold";
|
| -
|
| - // Native switch - chrome_switches::kEnableInstantExtendedAPI
|
| - public static final String ENABLE_INSTANT_EXTENDED_API = "enable-instant-extended-api";
|
| -
|
| - // Native switch - content_switches::kEnableSpeechRecognition
|
| - public static final String ENABLE_SPEECH_RECOGNITION = "enable-speech-recognition";
|
| -
|
| - // Native switch - shell_switches::kDumpRenderTree
|
| - public static final String DUMP_RENDER_TREE = "dump-render-tree";
|
| -
|
| - // Native switch - chrome_switches::kDisablePopupBlocking
|
| - public static final String DISABLE_POPUP_BLOCKING = "disable-popup-blocking";
|
| -
|
| - // Whether to disable the click delay by sending click events during double tap
|
| - public static final String DISABLE_CLICK_DELAY = "disable-click-delay";
|
| -
|
| - // Public abstract interface, implemented in derived classes.
|
| - // All these methods reflect their native-side counterparts.
|
| - /**
|
| - * Returns true if this command line contains the given switch.
|
| - * (Switch names ARE case-sensitive).
|
| - */
|
| - public abstract boolean hasSwitch(String switchString);
|
| -
|
| - /**
|
| - * Return the value associated with the given switch, or null.
|
| - * @param switchString The switch key to lookup. It should NOT start with '--' !
|
| - * @return switch value, or null if the switch is not set or set to empty.
|
| - */
|
| - public abstract String getSwitchValue(String switchString);
|
| -
|
| - /**
|
| - * Return the value associated with the given switch, or {@code defaultValue} if the switch
|
| - * was not specified.
|
| - * @param switchString The switch key to lookup. It should NOT start with '--' !
|
| - * @param defaultValue The default value to return if the switch isn't set.
|
| - * @return Switch value, or {@code defaultValue} if the switch is not set or set to empty.
|
| - */
|
| - public String getSwitchValue(String switchString, String defaultValue) {
|
| - String value = getSwitchValue(switchString);
|
| - return TextUtils.isEmpty(value) ? defaultValue : value;
|
| - }
|
| -
|
| - /**
|
| - * Append a switch to the command line. There is no guarantee
|
| - * this action happens before the switch is needed.
|
| - * @param switchString the switch to add. It should NOT start with '--' !
|
| - */
|
| - public abstract void appendSwitch(String switchString);
|
| -
|
| - /**
|
| - * Append a switch and value to the command line. There is no
|
| - * guarantee this action happens before the switch is needed.
|
| - * @param switchString the switch to add. It should NOT start with '--' !
|
| - * @param value the value for this switch.
|
| - * For example, --foo=bar becomes 'foo', 'bar'.
|
| - */
|
| - public abstract void appendSwitchWithValue(String switchString, String value);
|
| -
|
| - /**
|
| - * Append switch/value items in "command line" format (excluding argv[0] program name).
|
| - * E.g. { '--gofast', '--username=fred' }
|
| - * @param array an array of switch or switch/value items in command line format.
|
| - * Unlike the other append routines, these switches SHOULD start with '--' .
|
| - * Unlike init(), this does not include the program name in array[0].
|
| - */
|
| - public abstract void appendSwitchesAndArguments(String[] array);
|
| -
|
| - /**
|
| - * Determine if the command line is bound to the native (JNI) implementation.
|
| - * @return true if the underlying implementation is delegating to the native command line.
|
| - */
|
| - public boolean isNativeImplementation() {
|
| - return false;
|
| - }
|
| -
|
| - private static final AtomicReference<CommandLine> sCommandLine =
|
| - new AtomicReference<CommandLine>();
|
| -
|
| - /**
|
| - * @returns true if the command line has already been initialized.
|
| - */
|
| - public static boolean isInitialized() {
|
| - return sCommandLine.get() != null;
|
| - }
|
| -
|
| - // Equivalent to CommandLine::ForCurrentProcess in C++.
|
| - public static CommandLine getInstance() {
|
| - CommandLine commandLine = sCommandLine.get();
|
| - assert commandLine != null;
|
| - return commandLine;
|
| - }
|
| -
|
| - /**
|
| - * Initialize the singleton instance, must be called exactly once (either directly or
|
| - * via one of the convenience wrappers below) before using the static singleton instance.
|
| - * @param args command line flags in 'argv' format: args[0] is the program name.
|
| - */
|
| - public static void init(String[] args) {
|
| - setInstance(new JavaCommandLine(args));
|
| - }
|
| -
|
| - /**
|
| - * Initialize the command line from the command-line file.
|
| - *
|
| - * @param file The fully qualified command line file.
|
| - */
|
| - public static void initFromFile(String file) {
|
| - // Arbitrary clamp of 8k on the amount of file we read in.
|
| - char[] buffer = readUtf8FileFully(file, 8 * 1024);
|
| - init(buffer == null ? null : tokenizeQuotedAruments(buffer));
|
| - }
|
| -
|
| - /**
|
| - * Resets both the java proxy and the native command lines. This allows the entire
|
| - * command line initialization to be re-run including the call to onJniLoaded.
|
| - */
|
| - public static void reset() {
|
| - setInstance(null);
|
| - }
|
| -
|
| - /**
|
| - * Public for testing (TODO: why are the tests in a different package?)
|
| - * Parse command line flags from a flat buffer, supporting double-quote enclosed strings
|
| - * containing whitespace. argv elements are derived by splitting the buffer on whitepace;
|
| - * double quote characters may enclose tokens containing whitespace; a double-quote literal
|
| - * may be escaped with back-slash. (Otherwise backslash is taken as a literal).
|
| - * @param buffer A command line in command line file format as described above.
|
| - * @return the tokenized arguments, suitable for passing to init().
|
| - */
|
| - public static String[] tokenizeQuotedAruments(char[] buffer) {
|
| - ArrayList<String> args = new ArrayList<String>();
|
| - StringBuilder arg = null;
|
| - final char noQuote = '\0';
|
| - final char singleQuote = '\'';
|
| - final char doubleQuote = '"';
|
| - char currentQuote = noQuote;
|
| - for (char c : buffer) {
|
| - // Detect start or end of quote block.
|
| - if ((currentQuote == noQuote && (c == singleQuote || c == doubleQuote)) ||
|
| - c == currentQuote) {
|
| - if (arg != null && arg.length() > 0 && arg.charAt(arg.length() - 1) == '\\') {
|
| - // Last char was a backslash; pop it, and treat c as a literal.
|
| - arg.setCharAt(arg.length() - 1, c);
|
| - } else {
|
| - currentQuote = currentQuote == noQuote ? c : noQuote;
|
| - }
|
| - } else if (currentQuote == noQuote && Character.isWhitespace(c)) {
|
| - if (arg != null) {
|
| - args.add(arg.toString());
|
| - arg = null;
|
| - }
|
| - } else {
|
| - if (arg == null) arg = new StringBuilder();
|
| - arg.append(c);
|
| - }
|
| - }
|
| - if (arg != null) {
|
| - if (currentQuote != noQuote) {
|
| - Log.w(TAG, "Unterminated quoted string: " + arg);
|
| - }
|
| - args.add(arg.toString());
|
| - }
|
| - return args.toArray(new String[args.size()]);
|
| - }
|
| -
|
| - private static final String TAG = "CommandLine";
|
| - private static final String SWITCH_PREFIX = "--";
|
| - private static final String SWITCH_TERMINATOR = SWITCH_PREFIX;
|
| - private static final String SWITCH_VALUE_SEPARATOR = "=";
|
| -
|
| - public static void enableNativeProxy() {
|
| - // Make a best-effort to ensure we make a clean (atomic) switch over from the old to
|
| - // the new command line implementation. If another thread is modifying the command line
|
| - // when this happens, all bets are off. (As per the native CommandLine).
|
| - sCommandLine.set(new NativeCommandLine());
|
| - }
|
| -
|
| - public static String[] getJavaSwitchesOrNull() {
|
| - CommandLine commandLine = sCommandLine.get();
|
| - if (commandLine != null) {
|
| - assert !commandLine.isNativeImplementation();
|
| - return ((JavaCommandLine) commandLine).getCommandLineArguments();
|
| - }
|
| - return null;
|
| - }
|
| -
|
| - private static void setInstance(CommandLine commandLine) {
|
| - CommandLine oldCommandLine = sCommandLine.getAndSet(commandLine);
|
| - if (oldCommandLine != null && oldCommandLine.isNativeImplementation()) {
|
| - nativeReset();
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * @param fileName the file to read in.
|
| - * @param sizeLimit cap on the file size.
|
| - * @return Array of chars read from the file, or null if the file cannot be read
|
| - * or if its length exceeds |sizeLimit|.
|
| - */
|
| - private static char[] readUtf8FileFully(String fileName, int sizeLimit) {
|
| - Reader reader = null;
|
| - File f = new File(fileName);
|
| - long fileLength = f.length();
|
| -
|
| - if (fileLength == 0) {
|
| - return null;
|
| - }
|
| -
|
| - if (fileLength > sizeLimit) {
|
| - Log.w(TAG, "File " + fileName + " length " + fileLength + " exceeds limit "
|
| - + sizeLimit);
|
| - return null;
|
| - }
|
| -
|
| - try {
|
| - char[] buffer = new char[(int) fileLength];
|
| - reader = new InputStreamReader(new FileInputStream(f), "UTF-8");
|
| - int charsRead = reader.read(buffer);
|
| - // Debug check that we've exhausted the input stream (will fail e.g. if the
|
| - // file grew after we inspected its length).
|
| - assert !reader.ready();
|
| - return charsRead < buffer.length ? Arrays.copyOfRange(buffer, 0, charsRead) : buffer;
|
| - } catch (FileNotFoundException e) {
|
| - return null;
|
| - } catch (IOException e) {
|
| - return null;
|
| - } finally {
|
| - try {
|
| - if (reader != null) reader.close();
|
| - } catch (IOException e) {
|
| - Log.e(TAG, "Unable to close file reader.", e);
|
| - }
|
| - }
|
| - }
|
| -
|
| - private CommandLine() {}
|
| -
|
| - private static class JavaCommandLine extends CommandLine {
|
| - private HashMap<String, String> mSwitches = new HashMap<String, String>();
|
| - private ArrayList<String> mArgs = new ArrayList<String>();
|
| -
|
| - // The arguments begin at index 1, since index 0 contains the executable name.
|
| - private int mArgsBegin = 1;
|
| -
|
| - JavaCommandLine(String[] args) {
|
| - if (args == null || args.length == 0 || args[0] == null) {
|
| - mArgs.add("");
|
| - } else {
|
| - mArgs.add(args[0]);
|
| - appendSwitchesInternal(args, 1);
|
| - }
|
| - // Invariant: we always have the argv[0] program name element.
|
| - assert mArgs.size() > 0;
|
| - }
|
| -
|
| - /**
|
| - * Returns the switches and arguments passed into the program, with switches and their
|
| - * values coming before all of the arguments.
|
| - */
|
| - private String[] getCommandLineArguments() {
|
| - return mArgs.toArray(new String[mArgs.size()]);
|
| - }
|
| -
|
| - @Override
|
| - public boolean hasSwitch(String switchString) {
|
| - return mSwitches.containsKey(switchString);
|
| - }
|
| -
|
| - @Override
|
| - public String getSwitchValue(String switchString) {
|
| - // This is slightly round about, but needed for consistency with the NativeCommandLine
|
| - // version which does not distinguish empty values from key not present.
|
| - String value = mSwitches.get(switchString);
|
| - return value == null || value.isEmpty() ? null : value;
|
| - }
|
| -
|
| - @Override
|
| - public void appendSwitch(String switchString) {
|
| - appendSwitchWithValue(switchString, null);
|
| - }
|
| -
|
| - /**
|
| - * Appends a switch to the current list.
|
| - * @param switchString the switch to add. It should NOT start with '--' !
|
| - * @param value the value for this switch.
|
| - */
|
| - @Override
|
| - public void appendSwitchWithValue(String switchString, String value) {
|
| - mSwitches.put(switchString, value == null ? "" : value);
|
| -
|
| - // Append the switch and update the switches/arguments divider mArgsBegin.
|
| - String combinedSwitchString = SWITCH_PREFIX + switchString;
|
| - if (value != null && !value.isEmpty())
|
| - combinedSwitchString += SWITCH_VALUE_SEPARATOR + value;
|
| -
|
| - mArgs.add(mArgsBegin++, combinedSwitchString);
|
| - }
|
| -
|
| - @Override
|
| - public void appendSwitchesAndArguments(String[] array) {
|
| - appendSwitchesInternal(array, 0);
|
| - }
|
| -
|
| - // Add the specified arguments, but skipping the first |skipCount| elements.
|
| - private void appendSwitchesInternal(String[] array, int skipCount) {
|
| - boolean parseSwitches = true;
|
| - for (String arg : array) {
|
| - if (skipCount > 0) {
|
| - --skipCount;
|
| - continue;
|
| - }
|
| -
|
| - if (arg.equals(SWITCH_TERMINATOR)) {
|
| - parseSwitches = false;
|
| - }
|
| -
|
| - if (parseSwitches && arg.startsWith(SWITCH_PREFIX)) {
|
| - String[] parts = arg.split(SWITCH_VALUE_SEPARATOR, 2);
|
| - String value = parts.length > 1 ? parts[1] : null;
|
| - appendSwitchWithValue(parts[0].substring(SWITCH_PREFIX.length()), value);
|
| - } else {
|
| - mArgs.add(arg);
|
| - }
|
| - }
|
| - }
|
| - }
|
| -
|
| - private static class NativeCommandLine extends CommandLine {
|
| - @Override
|
| - public boolean hasSwitch(String switchString) {
|
| - return nativeHasSwitch(switchString);
|
| - }
|
| -
|
| - @Override
|
| - public String getSwitchValue(String switchString) {
|
| - return nativeGetSwitchValue(switchString);
|
| - }
|
| -
|
| - @Override
|
| - public void appendSwitch(String switchString) {
|
| - nativeAppendSwitch(switchString);
|
| - }
|
| -
|
| - @Override
|
| - public void appendSwitchWithValue(String switchString, String value) {
|
| - nativeAppendSwitchWithValue(switchString, value);
|
| - }
|
| -
|
| - @Override
|
| - public void appendSwitchesAndArguments(String[] array) {
|
| - nativeAppendSwitchesAndArguments(array);
|
| - }
|
| -
|
| - @Override
|
| - public boolean isNativeImplementation() {
|
| - return true;
|
| - }
|
| - }
|
| -
|
| - private static native void nativeReset();
|
| - private static native boolean nativeHasSwitch(String switchString);
|
| - private static native String nativeGetSwitchValue(String switchString);
|
| - private static native void nativeAppendSwitch(String switchString);
|
| - private static native void nativeAppendSwitchWithValue(String switchString, String value);
|
| - private static native void nativeAppendSwitchesAndArguments(String[] array);
|
| -};
|
|
|