diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 18:53:04 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-22 18:53:04 +0000 |
commit | 2a3a0596a6a5d0703ff49df9d45fd57e9db96959 (patch) | |
tree | 77b52f512dd593a3c9a9a335c02c8c5065aadb37 /base | |
parent | 6f356a88e6587d7d206f6327b0771e810609cf70 (diff) | |
download | chromium_src-2a3a0596a6a5d0703ff49df9d45fd57e9db96959.zip chromium_src-2a3a0596a6a5d0703ff49df9d45fd57e9db96959.tar.gz chromium_src-2a3a0596a6a5d0703ff49df9d45fd57e9db96959.tar.bz2 |
Implement WebStorage API methods
Most of the methods involves calling methods to QuotaManager
on the IO thread and translating the arguments between Java
and native code. Introduce AwQuotaManagerBridge to facilitate
this logic.
The Java AwQuotaManagerBridge is currently a singleton but
should be owned by AwBrowserContext when we have one. The
native one is owned by native AwBrowserContext. Java calls
the corresponding native AwBrowserContext to obtain the
pointer.
Introduced JniDependencyFactory interface used to create
native objects under native but is used or passed in
BrowserContext or ContentsBrowserClient.
Also added base::android::ToJavaLongArray to convert to
Java long arrays.
BUG=
Android only change. Ran through android bots.
NOTRY=true
Review URL: https://chromiumcodereview.appspot.com/12253057
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@184139 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/android/jni_array.cc | 20 | ||||
-rw-r--r-- | base/android/jni_array.h | 7 | ||||
-rw-r--r-- | base/android/jni_array_unittest.cc | 28 |
3 files changed, 55 insertions, 0 deletions
diff --git a/base/android/jni_array.cc b/base/android/jni_array.cc index fe2aadb..596914b 100644 --- a/base/android/jni_array.cc +++ b/base/android/jni_array.cc @@ -25,6 +25,26 @@ ScopedJavaLocalRef<jbyteArray> ToJavaByteArray( return ScopedJavaLocalRef<jbyteArray>(env, byte_array); } +ScopedJavaLocalRef<jlongArray> ToJavaLongArray( + JNIEnv* env, const int64* longs, size_t len) { + jlongArray long_array = env->NewLongArray(len); + CheckException(env); + DCHECK(long_array); + + jlong* elements = env->GetLongArrayElements(long_array, NULL); + memcpy(elements, longs, len * sizeof(*longs)); + env->ReleaseLongArrayElements(long_array, elements, 0); + CheckException(env); + + return ScopedJavaLocalRef<jlongArray>(env, long_array); +} + +// Returns a new Java long array converted from the given int64 array. +BASE_EXPORT ScopedJavaLocalRef<jlongArray> ToJavaLongArray( + JNIEnv* env, const std::vector<int64>& longs) { + return ToJavaLongArray(env, longs.begin(), longs.size()); +} + ScopedJavaLocalRef<jobjectArray> ToJavaArrayOfByteArray( JNIEnv* env, const std::vector<std::string>& v) { ScopedJavaLocalRef<jclass> byte_array_clazz = GetClass(env, "[B"); diff --git a/base/android/jni_array.h b/base/android/jni_array.h index b5050c3..bb73ea0 100644 --- a/base/android/jni_array.h +++ b/base/android/jni_array.h @@ -20,6 +20,13 @@ namespace android { BASE_EXPORT ScopedJavaLocalRef<jbyteArray> ToJavaByteArray( JNIEnv* env, const uint8* bytes, size_t len); +// Returns a new Java long array converted from the given int64 array. +BASE_EXPORT ScopedJavaLocalRef<jlongArray> ToJavaLongArray( + JNIEnv* env, const int64* longs, size_t len); + +BASE_EXPORT ScopedJavaLocalRef<jlongArray> ToJavaLongArray( + JNIEnv* env, const std::vector<int64>& longs); + // Returns a array of Java byte array converted from |v|. BASE_EXPORT ScopedJavaLocalRef<jobjectArray> ToJavaArrayOfByteArray( JNIEnv* env, const std::vector<std::string>& v); diff --git a/base/android/jni_array_unittest.cc b/base/android/jni_array_unittest.cc index a4e3025..bc497a8 100644 --- a/base/android/jni_array_unittest.cc +++ b/base/android/jni_array_unittest.cc @@ -27,6 +27,34 @@ TEST(JniArray, BasicConversions) { EXPECT_EQ(8U, vec.size()); } +void CheckLongConversion( + JNIEnv* env, + const int64* long_array, + const size_t len, + const ScopedJavaLocalRef<jlongArray>& longs) { + ASSERT_TRUE(longs.obj()); + + jsize java_array_len = env->GetArrayLength(longs.obj()); + ASSERT_EQ(static_cast<int>(len), java_array_len); + + jlong value; + for (size_t i = 0; i < len; ++i) { + env->GetLongArrayRegion(longs.obj(), i, 1, &value); + ASSERT_EQ(long_array[i], value); + } +} + +TEST(JniArray, LongConversions) { + const int64 kLongs[] = { 0, 1, -1, kint64min, kint64max}; + const size_t kLen = arraysize(kLongs); + + JNIEnv* env = AttachCurrentThread(); + CheckLongConversion(env, kLongs, kLen, ToJavaLongArray(env, kLongs, kLen)); + + const std::vector<int64> vec(kLongs, kLongs + kLen); + CheckLongConversion(env, kLongs, kLen, ToJavaLongArray(env, vec)); +} + TEST(JniArray, JavaArrayOfByteArrayToStringVector) { const int kMaxItems = 50; JNIEnv* env = AttachCurrentThread(); |