Remove all npapi plugins from windows metro chrome
[chromium-blink-merge.git] / base / android / jni_array.cc
blobb287b460353c4f08cdae2d1540b7a1b3571b4586
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/android/jni_array.h"
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "base/logging.h"
11 namespace base {
12 namespace android {
14 ScopedJavaLocalRef<jbyteArray> ToJavaByteArray(
15 JNIEnv* env, const uint8* bytes, size_t len) {
16 jbyteArray byte_array = env->NewByteArray(len);
17 CheckException(env);
18 DCHECK(byte_array);
20 jbyte* elements = env->GetByteArrayElements(byte_array, NULL);
21 memcpy(elements, bytes, len);
22 env->ReleaseByteArrayElements(byte_array, elements, 0);
23 CheckException(env);
25 return ScopedJavaLocalRef<jbyteArray>(env, byte_array);
28 ScopedJavaLocalRef<jobjectArray> ToJavaArrayOfByteArray(
29 JNIEnv* env, const std::vector<std::string>& v) {
30 ScopedJavaLocalRef<jclass> byte_array_clazz = GetClass(env, "[B");
31 jobjectArray joa = env->NewObjectArray(v.size(),
32 byte_array_clazz.obj(), NULL);
33 CheckException(env);
35 for (size_t i = 0; i < v.size(); ++i) {
36 ScopedJavaLocalRef<jbyteArray> byte_array = ToJavaByteArray(env,
37 reinterpret_cast<const uint8*>(v[i].data()), v[i].length());
38 env->SetObjectArrayElement(joa, i, byte_array.obj());
40 return ScopedJavaLocalRef<jobjectArray>(env, joa);
43 ScopedJavaLocalRef<jobjectArray> ToJavaArrayOfStrings(
44 JNIEnv* env, const std::vector<std::string>& v) {
45 ScopedJavaLocalRef<jclass> string_clazz = GetClass(env, "java/lang/String");
46 jobjectArray joa = env->NewObjectArray(v.size(), string_clazz.obj(), NULL);
47 CheckException(env);
49 for (size_t i = 0; i < v.size(); ++i) {
50 ScopedJavaLocalRef<jstring> item = ConvertUTF8ToJavaString(env, v[i]);
51 env->SetObjectArrayElement(joa, i, item.obj());
53 return ScopedJavaLocalRef<jobjectArray>(env, joa);
56 ScopedJavaLocalRef<jobjectArray> ToJavaArrayOfStrings(
57 JNIEnv* env, const std::vector<string16>& v) {
58 ScopedJavaLocalRef<jclass> string_clazz = GetClass(env, "java/lang/String");
59 jobjectArray joa = env->NewObjectArray(v.size(), string_clazz.obj(), NULL);
60 CheckException(env);
62 for (size_t i = 0; i < v.size(); ++i) {
63 ScopedJavaLocalRef<jstring> item = ConvertUTF16ToJavaString(env, v[i]);
64 env->SetObjectArrayElement(joa, i, item.obj());
66 return ScopedJavaLocalRef<jobjectArray>(env, joa);
69 void AppendJavaStringArrayToStringVector(JNIEnv* env,
70 const JavaRef<jobjectArray>& array,
71 std::vector<string16>* out) {
72 DCHECK(out);
73 if (array.is_null())
74 return;
75 jsize len = env->GetArrayLength(array.obj());
76 for (jsize i = 0; i < len; ++i) {
77 ScopedJavaLocalRef<jstring> str(env,
78 static_cast<jstring>(env->GetObjectArrayElement(array.obj(), i)));
79 out->push_back(ConvertJavaStringToUTF16(str));
83 void AppendJavaByteArrayToByteVector(JNIEnv* env,
84 jbyteArray byte_array,
85 std::vector<uint8>* out) {
86 DCHECK(out);
87 if (!byte_array)
88 return;
89 jsize len = env->GetArrayLength(byte_array);
90 jbyte* bytes = env->GetByteArrayElements(byte_array, NULL);
91 out->insert(out->end(), bytes, bytes + len);
92 env->ReleaseByteArrayElements(byte_array, bytes, JNI_ABORT);
95 void JavaByteArrayToByteVector(JNIEnv* env,
96 jbyteArray byte_array,
97 std::vector<uint8>* out) {
98 DCHECK(out);
99 out->clear();
100 AppendJavaByteArrayToByteVector(env, byte_array, out);
103 } // namespace android
104 } // namespace base