Chromium Code Reviews| Index: base/android/jni_string.cc |
| diff --git a/base/android/jni_string.cc b/base/android/jni_string.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3f3ba826d6d7f2d02f4da3edf06ef8a7fd63c16b |
| --- /dev/null |
| +++ b/base/android/jni_string.cc |
| @@ -0,0 +1,44 @@ |
| +// Copyright (c) 2011 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/jni_string.h" |
| + |
| +#include "base/android/jni_android.h" |
| +#include "base/logging.h" |
| +#include "base/utf_string_conversions.h" |
| + |
| +namespace base { |
| +namespace android { |
| + |
| +std::string ConvertJavaStringToUTF8(JNIEnv* env, jstring str) { |
| + // JNI's GetStringUTFChars() returns strings in Java-modified UTF8, so we |
|
M-A Ruel
2011/11/11 13:09:07
This seems relatively inefficient in a potentially
|
| + // instead get the String in UTF16 and convert using our own utility function. |
| + return UTF16ToUTF8(ConvertJavaStringToUTF16(env, str)); |
| +} |
| + |
| +jstring ConvertUTF8ToJavaString(JNIEnv* env, const std::string& str) { |
| + jstring result = env->NewStringUTF(str.c_str()); |
| + CheckException(env); |
| + return result; |
| +} |
| + |
| +string16 ConvertJavaStringToUTF16(JNIEnv* env, jstring str) { |
| + const jchar* chars = env->GetStringChars(str, NULL); |
| + DCHECK(chars); |
| + // GetStringChars isn't required to NULL-terminate the strings |
| + // it returns, so the length must be explicitly checked. |
| + string16 result(chars, env->GetStringLength(str)); |
| + env->ReleaseStringChars(str, chars); |
| + CheckException(env); |
| + return result; |
| +} |
| + |
| +jstring ConvertUTF16ToJavaString(JNIEnv* env, const string16& str) { |
| + jstring result = env->NewString(str.data(), str.length()); |
| + CheckException(env); |
| + return result; |
| +} |
| + |
| +} // namespace android |
| +} // namespace base |