OLD | NEW |
1 // Copyright 2011 Google Inc. All Rights Reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Author: michaelbai@google.com (Tao Bai) | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
3 | 4 |
4 #include "base/android/jni_array.h" | 5 #include "base/android/jni_array.h" |
5 | 6 |
6 #include "base/android/auto_jobject.h" | |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/scoped_java_reference.h" |
8 #include "base/logging.h" | 9 #include "base/logging.h" |
9 | 10 |
10 namespace base { | 11 namespace base { |
11 namespace android { | 12 namespace android { |
12 | 13 |
13 jbyteArray ToJavaByteArray(JNIEnv* env, | 14 jbyteArray ToJavaByteArray(JNIEnv* env, |
14 const unsigned char* bytes, | 15 const unsigned char* bytes, |
15 size_t len) { | 16 size_t len) { |
16 jbyteArray byte_array = env->NewByteArray(len); | 17 jbyteArray byte_array = env->NewByteArray(len); |
17 if (!byte_array) { | 18 if (!byte_array) { |
(...skipping 12 matching lines...) Expand all Loading... |
30 jobjectArray ToJavaArrayOfByteArray(JNIEnv* env, | 31 jobjectArray ToJavaArrayOfByteArray(JNIEnv* env, |
31 const std::vector<std::string>& v) { | 32 const std::vector<std::string>& v) { |
32 size_t count = v.size(); | 33 size_t count = v.size(); |
33 DCHECK_GT(count, 0U); | 34 DCHECK_GT(count, 0U); |
34 jclass byte_array_class = env->FindClass("[B"); | 35 jclass byte_array_class = env->FindClass("[B"); |
35 jobjectArray joa = env->NewObjectArray(count, byte_array_class, NULL); | 36 jobjectArray joa = env->NewObjectArray(count, byte_array_class, NULL); |
36 if (joa == NULL) | 37 if (joa == NULL) |
37 return NULL; | 38 return NULL; |
38 | 39 |
39 for (size_t i = 0; i < count; ++i) { | 40 for (size_t i = 0; i < count; ++i) { |
40 AutoJObject byte_array = AutoJObject::FromLocalRef(env, ToJavaByteArray(env, | 41 ScopedJavaReference<jobject> byte_array(env, ToJavaByteArray(env, |
41 reinterpret_cast<const uint8*>(v[i].data()), v[i].length())); | 42 reinterpret_cast<const uint8*>(v[i].data()), v[i].length())); |
42 if (!byte_array.obj()) { | 43 if (!byte_array.obj()) { |
43 env->DeleteLocalRef(joa); | 44 env->DeleteLocalRef(joa); |
44 return NULL; | 45 return NULL; |
45 } | 46 } |
46 env->SetObjectArrayElement(joa, i, byte_array.obj()); | 47 env->SetObjectArrayElement(joa, i, byte_array.obj()); |
47 } | 48 } |
48 return joa; | 49 return joa; |
49 } | 50 } |
50 | 51 |
51 } // namespace android | 52 } // namespace android |
52 } // namespace base | 53 } // namespace base |
OLD | NEW |