1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/android/command_line_android.h"
7 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h"
9 #include "base/command_line.h"
10 #include "base/logging.h"
11 #include "jni/CommandLine_jni.h"
13 using base::android::ConvertUTF8ToJavaString
;
14 using base::android::ConvertJavaStringToUTF8
;
15 using base::CommandLine
;
19 void AppendJavaStringArrayToCommandLine(JNIEnv
* env
,
21 bool includes_program
) {
22 std::vector
<std::string
> vec
;
24 base::android::AppendJavaStringArrayToStringVector(env
, array
, &vec
);
25 if (!includes_program
)
26 vec
.insert(vec
.begin(), "");
27 CommandLine
extra_command_line(vec
);
28 CommandLine::ForCurrentProcess()->AppendArguments(extra_command_line
,
34 static void Reset(JNIEnv
* env
, jclass clazz
) {
38 static jboolean
HasSwitch(JNIEnv
* env
, jclass clazz
, jstring jswitch
) {
39 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
40 return CommandLine::ForCurrentProcess()->HasSwitch(switch_string
);
43 static jstring
GetSwitchValue(JNIEnv
* env
, jclass clazz
, jstring jswitch
) {
44 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
45 std::string
value(CommandLine::ForCurrentProcess()->GetSwitchValueNative(
49 // OK to release, JNI binding.
50 return ConvertUTF8ToJavaString(env
, value
).Release();
53 static void AppendSwitch(JNIEnv
* env
, jclass clazz
, jstring jswitch
) {
54 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
55 CommandLine::ForCurrentProcess()->AppendSwitch(switch_string
);
58 static void AppendSwitchWithValue(JNIEnv
* env
, jclass clazz
,
59 jstring jswitch
, jstring jvalue
) {
60 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
61 std::string
value_string (ConvertJavaStringToUTF8(env
, jvalue
));
62 CommandLine::ForCurrentProcess()->AppendSwitchASCII(switch_string
,
66 static void AppendSwitchesAndArguments(JNIEnv
* env
, jclass clazz
,
68 AppendJavaStringArrayToCommandLine(env
, array
, false);
74 void InitNativeCommandLineFromJavaArray(JNIEnv
* env
, jobjectArray array
) {
75 // TODO(port): Make an overload of Init() that takes StringVector rather than
76 // have to round-trip via AppendArguments.
77 CommandLine::Init(0, NULL
);
78 AppendJavaStringArrayToCommandLine(env
, array
, true);
81 bool RegisterCommandLine(JNIEnv
* env
) {
82 return RegisterNativesImpl(env
);
85 } // namespace android