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
, const JavaParamRef
<jclass
>& clazz
) {
38 static jboolean
HasSwitch(JNIEnv
* env
,
39 const JavaParamRef
<jclass
>& clazz
,
40 const JavaParamRef
<jstring
>& jswitch
) {
41 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
42 return CommandLine::ForCurrentProcess()->HasSwitch(switch_string
);
45 static ScopedJavaLocalRef
<jstring
> GetSwitchValue(
47 const JavaParamRef
<jclass
>& clazz
,
48 const JavaParamRef
<jstring
>& jswitch
) {
49 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
50 std::string
value(CommandLine::ForCurrentProcess()->GetSwitchValueNative(
53 return ScopedJavaLocalRef
<jstring
>();
54 return ConvertUTF8ToJavaString(env
, value
);
57 static void AppendSwitch(JNIEnv
* env
,
58 const JavaParamRef
<jclass
>& clazz
,
59 const JavaParamRef
<jstring
>& jswitch
) {
60 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
61 CommandLine::ForCurrentProcess()->AppendSwitch(switch_string
);
64 static void AppendSwitchWithValue(JNIEnv
* env
,
65 const JavaParamRef
<jclass
>& clazz
,
66 const JavaParamRef
<jstring
>& jswitch
,
67 const JavaParamRef
<jstring
>& jvalue
) {
68 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
69 std::string
value_string (ConvertJavaStringToUTF8(env
, jvalue
));
70 CommandLine::ForCurrentProcess()->AppendSwitchASCII(switch_string
,
74 static void AppendSwitchesAndArguments(
76 const JavaParamRef
<jclass
>& clazz
,
77 const JavaParamRef
<jobjectArray
>& array
) {
78 AppendJavaStringArrayToCommandLine(env
, array
, false);
84 void InitNativeCommandLineFromJavaArray(JNIEnv
* env
, jobjectArray array
) {
85 // TODO(port): Make an overload of Init() that takes StringVector rather than
86 // have to round-trip via AppendArguments.
87 CommandLine::Init(0, NULL
);
88 AppendJavaStringArrayToCommandLine(env
, array
, true);
91 bool RegisterCommandLine(JNIEnv
* env
) {
92 return RegisterNativesImpl(env
);
95 } // namespace android