Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3423)

Unified Diff: base/android/jni_string.cc

Issue 9358028: Upstream Android JNI code, allowing us to use more ScopedJava references. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698