xref: /aosp_15_r20/external/cronet/components/cronet/android/io_buffer_with_byte_buffer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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(base::make_span(static_cast<char*>(byte_buffer_data),
18                                            static_cast<size_t>(limit))
19                                .subspan(position)),
20       byte_buffer_(env, jbyte_buffer),
21       initial_position_(position),
22       initial_limit_(limit) {
23   DCHECK(byte_buffer_data);
24   DCHECK_EQ(env->GetDirectBufferAddress(jbyte_buffer), byte_buffer_data);
25 }
26 
~IOBufferWithByteBuffer()27 IOBufferWithByteBuffer::~IOBufferWithByteBuffer() {}
28 
ByteBufferWithIOBuffer(JNIEnv * env,scoped_refptr<net::IOBuffer> io_buffer,int io_buffer_len)29 ByteBufferWithIOBuffer::ByteBufferWithIOBuffer(
30     JNIEnv* env,
31     scoped_refptr<net::IOBuffer> io_buffer,
32     int io_buffer_len)
33     : io_buffer_(std::move(io_buffer)), io_buffer_len_(io_buffer_len) {
34   // An intermediate ScopedJavaLocalRef is needed here to release the local
35   // reference created by env->NewDirectByteBuffer().
36   base::android::ScopedJavaLocalRef<jobject> java_buffer(
37       env, env->NewDirectByteBuffer(io_buffer_->data(), io_buffer_len_));
38   byte_buffer_.Reset(env, java_buffer.obj());
39 }
40 
~ByteBufferWithIOBuffer()41 ByteBufferWithIOBuffer::~ByteBufferWithIOBuffer() {}
42 
43 }  // namespace cronet
44