diff options
Diffstat (limited to 'base/android/command_line.cc')
-rw-r--r-- | base/android/command_line.cc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/base/android/command_line.cc b/base/android/command_line.cc new file mode 100644 index 0000000..69ab921 --- /dev/null +++ b/base/android/command_line.cc @@ -0,0 +1,85 @@ +// Copyright 2013 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. + +#include "base/android/command_line.h" + +#include "base/android/jni_array.h" +#include "base/android/jni_string.h" +#include "base/command_line.h" +#include "base/logging.h" +#include "jni/CommandLine_jni.h" + +using base::android::ConvertUTF8ToJavaString; +using base::android::ConvertJavaStringToUTF8; + +namespace { + +void AppendJavaStringArrayToCommandLine(JNIEnv* env, + jobjectArray array, + bool includes_program) { + std::vector<std::string> vec; + if (array) + base::android::AppendJavaStringArrayToStringVector(env, array, &vec); + if (!includes_program) + vec.insert(vec.begin(), ""); + CommandLine extra_command_line(vec); + CommandLine::ForCurrentProcess()->AppendArguments(extra_command_line, + includes_program); +} + +} // namespace + +static void Reset(JNIEnv* env, jclass clazz) { + CommandLine::Reset(); +} + +static jboolean HasSwitch(JNIEnv* env, jclass clazz, jstring jswitch) { + std::string switch_string(ConvertJavaStringToUTF8(env, jswitch)); + return CommandLine::ForCurrentProcess()->HasSwitch(switch_string); +} + +static jstring GetSwitchValue(JNIEnv* env, jclass clazz, jstring jswitch) { + std::string switch_string(ConvertJavaStringToUTF8(env, jswitch)); + std::string value(CommandLine::ForCurrentProcess()->GetSwitchValueNative( + switch_string)); + if (value.empty()) + return 0; + // OK to release, JNI binding. + return ConvertUTF8ToJavaString(env, value).Release(); +} + +static void AppendSwitch(JNIEnv* env, jclass clazz, jstring jswitch) { + std::string switch_string(ConvertJavaStringToUTF8(env, jswitch)); + CommandLine::ForCurrentProcess()->AppendSwitch(switch_string); +} + +static void AppendSwitchWithValue(JNIEnv* env, jclass clazz, + jstring jswitch, jstring jvalue) { + std::string switch_string(ConvertJavaStringToUTF8(env, jswitch)); + std::string value_string (ConvertJavaStringToUTF8(env, jvalue)); + CommandLine::ForCurrentProcess()->AppendSwitchASCII(switch_string, + value_string); +} + +static void AppendSwitchesAndArguments(JNIEnv* env, jclass clazz, + jobjectArray array) { + AppendJavaStringArrayToCommandLine(env, array, false); +} + +namespace base { +namespace android { + +void InitNativeCommandLineFromJavaArray(JNIEnv* env, jobjectArray array) { + // TODO(port): Make an overload of Init() that takes StringVector rather than + // have to round-trip via AppendArguments. + CommandLine::Init(0, NULL); + AppendJavaStringArrayToCommandLine(env, array, true); +} + +bool RegisterCommandLine(JNIEnv* env) { + return RegisterNativesImpl(env); +} + +} // namespace android +} // namespace base |