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 ScopedJavaLocalRef
<jstring
> GetSwitchValue(JNIEnv
* env
,
46 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
47 std::string
value(CommandLine::ForCurrentProcess()->GetSwitchValueNative(
50 return ScopedJavaLocalRef
<jstring
>();
51 return ConvertUTF8ToJavaString(env
, value
);
54 static void AppendSwitch(JNIEnv
* env
, jclass clazz
, jstring jswitch
) {
55 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
56 CommandLine::ForCurrentProcess()->AppendSwitch(switch_string
);
59 static void AppendSwitchWithValue(JNIEnv
* env
, jclass clazz
,
60 jstring jswitch
, jstring jvalue
) {
61 std::string
switch_string(ConvertJavaStringToUTF8(env
, jswitch
));
62 std::string
value_string (ConvertJavaStringToUTF8(env
, jvalue
));
63 CommandLine::ForCurrentProcess()->AppendSwitchASCII(switch_string
,
67 static void AppendSwitchesAndArguments(JNIEnv
* env
, jclass clazz
,
69 AppendJavaStringArrayToCommandLine(env
, array
, false);
75 void InitNativeCommandLineFromJavaArray(JNIEnv
* env
, jobjectArray array
) {
76 // TODO(port): Make an overload of Init() that takes StringVector rather than
77 // have to round-trip via AppendArguments.
78 CommandLine::Init(0, NULL
);
79 AppendJavaStringArrayToCommandLine(env
, array
, true);
82 bool RegisterCommandLine(JNIEnv
* env
) {
83 return RegisterNativesImpl(env
);
86 } // namespace android