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 |