blob: 7c9c9cf5b129b3690999614f9b089d6bbb0b59aa [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/cronet/android/io_buffer_with_byte_buffer.h"
#include "base/logging.h"
namespace cronet {
IOBufferWithByteBuffer::IOBufferWithByteBuffer(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jbyte_buffer,
void* byte_buffer_data,
jint position,
jint limit)
: net::WrappedIOBuffer(static_cast<char*>(byte_buffer_data) + position),
byte_buffer_(env, jbyte_buffer),
initial_position_(position),
initial_limit_(limit) {
DCHECK(byte_buffer_data);
DCHECK_EQ(env->GetDirectBufferAddress(jbyte_buffer), byte_buffer_data);
}
IOBufferWithByteBuffer::~IOBufferWithByteBuffer() {}
ByteBufferWithIOBuffer::ByteBufferWithIOBuffer(JNIEnv* env,
net::IOBuffer* io_buffer,
int io_buffer_len)
: io_buffer_(io_buffer), io_buffer_len_(io_buffer_len) {
// An intermediate ScopedJavaLocalRef is needed here to release the local
// reference created by env->NewDirectByteBuffer().
base::android::ScopedJavaLocalRef<jobject> java_buffer(
env, env->NewDirectByteBuffer(io_buffer_->data(), io_buffer_len_));
byte_buffer_.Reset(env, java_buffer.obj());
}
ByteBufferWithIOBuffer::~ByteBufferWithIOBuffer() {}
} // namespace cronet