blob: 409b44abf77a17be459bc7916c6e2dc638bc9077 [file] [log] [blame]
[email protected]396b67232011-08-11 11:23:521// Copyright (c) 2011 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.
[email protected]61c86c62011-08-02 16:11:164
5#include "base/android/jni_array.h"
6
[email protected]61c86c62011-08-02 16:11:167#include "base/android/jni_android.h"
[email protected]396b67232011-08-11 11:23:528#include "base/android/scoped_java_reference.h"
[email protected]61c86c62011-08-02 16:11:169#include "base/logging.h"
10
11namespace base {
12namespace android {
13
14jbyteArray ToJavaByteArray(JNIEnv* env,
15 const unsigned char* bytes,
16 size_t len) {
17 jbyteArray byte_array = env->NewByteArray(len);
18 if (!byte_array) {
19 return NULL;
20 }
21
22 jbyte* elements = env->GetByteArrayElements(byte_array, NULL);
23 DCHECK(elements);
24 memcpy(elements, bytes, len);
25 env->ReleaseByteArrayElements(byte_array, elements, 0);
26 CheckException(env);
27
28 return byte_array;
29}
30
31jobjectArray ToJavaArrayOfByteArray(JNIEnv* env,
32 const std::vector<std::string>& v) {
33 size_t count = v.size();
34 DCHECK_GT(count, 0U);
35 jclass byte_array_class = env->FindClass("[B");
36 jobjectArray joa = env->NewObjectArray(count, byte_array_class, NULL);
37 if (joa == NULL)
38 return NULL;
39
40 for (size_t i = 0; i < count; ++i) {
[email protected]396b67232011-08-11 11:23:5241 ScopedJavaReference<jobject> byte_array(env, ToJavaByteArray(env,
[email protected]61c86c62011-08-02 16:11:1642 reinterpret_cast<const uint8*>(v[i].data()), v[i].length()));
43 if (!byte_array.obj()) {
44 env->DeleteLocalRef(joa);
45 return NULL;
46 }
47 env->SetObjectArrayElement(joa, i, byte_array.obj());
48 }
49 return joa;
50}
51
52} // namespace android
53} // namespace base