1 // Copyright 2016 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/cronet/android/io_buffer_with_byte_buffer.h"
6
7 #include "base/check_op.h"
8
9 namespace cronet {
10
IOBufferWithByteBuffer(JNIEnv * env,const base::android::JavaParamRef<jobject> & jbyte_buffer,void * byte_buffer_data,jint position,jint limit)11 IOBufferWithByteBuffer::IOBufferWithByteBuffer(
12 JNIEnv* env,
13 const base::android::JavaParamRef<jobject>& jbyte_buffer,
14 void* byte_buffer_data,
15 jint position,
16 jint limit)
17 : net::WrappedIOBuffer(static_cast<char*>(byte_buffer_data) + position,
18 limit - position),
19 byte_buffer_(env, jbyte_buffer),
20 initial_position_(position),
21 initial_limit_(limit) {
22 DCHECK(byte_buffer_data);
23 DCHECK_EQ(env->GetDirectBufferAddress(jbyte_buffer), byte_buffer_data);
24 }
25
~IOBufferWithByteBuffer()26 IOBufferWithByteBuffer::~IOBufferWithByteBuffer() {}
27
ByteBufferWithIOBuffer(JNIEnv * env,scoped_refptr<net::IOBuffer> io_buffer,int io_buffer_len)28 ByteBufferWithIOBuffer::ByteBufferWithIOBuffer(
29 JNIEnv* env,
30 scoped_refptr<net::IOBuffer> io_buffer,
31 int io_buffer_len)
32 : io_buffer_(std::move(io_buffer)), io_buffer_len_(io_buffer_len) {
33 // An intermediate ScopedJavaLocalRef is needed here to release the local
34 // reference created by env->NewDirectByteBuffer().
35 base::android::ScopedJavaLocalRef<jobject> java_buffer(
36 env, env->NewDirectByteBuffer(io_buffer_->data(), io_buffer_len_));
37 byte_buffer_.Reset(env, java_buffer.obj());
38 }
39
~ByteBufferWithIOBuffer()40 ByteBufferWithIOBuffer::~ByteBufferWithIOBuffer() {}
41
42 } // namespace cronet
43