| Index: base/android/jni_string.cc
|
| diff --git a/base/android/jni_string.cc b/base/android/jni_string.cc
|
| index 26e7114fd60e8f74f118e21187e2ba7e008501a5..9a4dbacedb8be33b46aa10367a28d6fb5e622a55 100644
|
| --- a/base/android/jni_string.cc
|
| +++ b/base/android/jni_string.cc
|
| @@ -8,6 +8,17 @@
|
| #include "base/logging.h"
|
| #include "base/utf_string_conversions.h"
|
|
|
| +namespace {
|
| +
|
| +// Internal version that does not use a scoped local pointer.
|
| +jstring ConvertUTF16ToJavaStringImpl(JNIEnv* env, const string16& str) {
|
| + jstring result = env->NewString(str.data(), str.length());
|
| + base::android::CheckException(env);
|
| + return result;
|
| +}
|
| +
|
| +}
|
| +
|
| namespace base {
|
| namespace android {
|
|
|
| @@ -17,7 +28,12 @@ std::string ConvertJavaStringToUTF8(JNIEnv* env, jstring str) {
|
| return UTF16ToUTF8(ConvertJavaStringToUTF16(env, str));
|
| }
|
|
|
| -jstring ConvertUTF8ToJavaString(JNIEnv* env, const base::StringPiece& str) {
|
| +std::string ConvertJavaStringToUTF8(const JavaRef<jstring>& str) {
|
| + return ConvertJavaStringToUTF8(str.env(), str.obj());
|
| +}
|
| +
|
| +ScopedJavaLocalRef<jstring> ConvertUTF8ToJavaString(
|
| + JNIEnv* env, const base::StringPiece& str) {
|
| // JNI's NewStringUTF expects "modified" UTF8 so instead create the string
|
| // via our own UTF16 conversion utility.
|
| // Further, Dalvik requires the string passed into NewStringUTF() to come from
|
| @@ -25,7 +41,8 @@ jstring ConvertUTF8ToJavaString(JNIEnv* env, const base::StringPiece& str) {
|
| // it gets here, so constructing via UTF16 side-steps this issue.
|
| // (Dalvik stores strings internally as UTF16 anyway, so there shouldn't be
|
| // a significant performance hit by doing it this way).
|
| - return ConvertUTF16ToJavaString(env, UTF8ToUTF16(str));
|
| + return ScopedJavaLocalRef<jstring>(env, ConvertUTF16ToJavaStringImpl(
|
| + env, UTF8ToUTF16(str)));
|
| }
|
|
|
| string16 ConvertJavaStringToUTF16(JNIEnv* env, jstring str) {
|
| @@ -39,10 +56,15 @@ string16 ConvertJavaStringToUTF16(JNIEnv* env, jstring str) {
|
| return result;
|
| }
|
|
|
| -jstring ConvertUTF16ToJavaString(JNIEnv* env, const string16& str) {
|
| - jstring result = env->NewString(str.data(), str.length());
|
| - CheckException(env);
|
| - return result;
|
| +string16 ConvertJavaStringToUTF16(const JavaRef<jstring>& str) {
|
| + return ConvertJavaStringToUTF16(str.env(), str.obj());
|
| +}
|
| +
|
| +// TODO(joth): change this to accept const StringPiece16&.
|
| +ScopedJavaLocalRef<jstring> ConvertUTF16ToJavaString(JNIEnv* env,
|
| + const string16& str) {
|
| + return ScopedJavaLocalRef<jstring>(env,
|
| + ConvertUTF16ToJavaStringImpl(env, str));
|
| }
|
|
|
| } // namespace android
|
|
|