summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-22 18:53:04 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-22 18:53:04 +0000
commit2a3a0596a6a5d0703ff49df9d45fd57e9db96959 (patch)
tree77b52f512dd593a3c9a9a335c02c8c5065aadb37 /base
parent6f356a88e6587d7d206f6327b0771e810609cf70 (diff)
downloadchromium_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.cc20
-rw-r--r--base/android/jni_array.h7
-rw-r--r--base/android/jni_array_unittest.cc28
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();