| Index: components/cronet/android/wrapped_channel_upload_element_reader.cc
|
| diff --git a/components/cronet/android/wrapped_channel_upload_element_reader.cc b/components/cronet/android/wrapped_channel_upload_element_reader.cc
|
| index 6628591722f8c26d478a589230d29462d6313be0..db6fc78a77a54d39960fd69f6aa8624e6aa7f79e 100644
|
| --- a/components/cronet/android/wrapped_channel_upload_element_reader.cc
|
| +++ b/components/cronet/android/wrapped_channel_upload_element_reader.cc
|
| @@ -4,53 +4,20 @@
|
|
|
| #include "components/cronet/android/wrapped_channel_upload_element_reader.h"
|
|
|
| -#include <jni.h>
|
| -
|
| #include "base/android/jni_android.h"
|
| #include "base/logging.h"
|
| #include "net/base/io_buffer.h"
|
| #include "net/base/net_errors.h"
|
|
|
| -namespace {
|
| -jclass g_class_readablebytechannel;
|
| -jclass g_class_channel;
|
| -jmethodID g_method_read;
|
| -jmethodID g_method_close;
|
| -} //namespace
|
| -
|
| namespace cronet {
|
|
|
| -bool WrappedChannelRegisterJni(JNIEnv* env) {
|
| - g_class_readablebytechannel = static_cast<jclass>(env->NewGlobalRef(
|
| - env->FindClass("java/nio/channels/ReadableByteChannel")));
|
| - // TODO(mef): Per previous discussions the best way to do this is to have a
|
| - // cronet-specific java wrapper that exposes necessary methods annotated as
|
| - // @AccessedByNative and use jni generator to generate a wrapper method for
|
| - // that.
|
| - g_method_read = env->GetMethodID(
|
| - g_class_readablebytechannel, "read", "(Ljava/nio/ByteBuffer;)I");
|
| -
|
| - // Due to a bug in the version of ART that shipped with 4.4, we're looking up
|
| - // the close() method on the base interface. See b/15651032 for details.
|
| - g_class_channel = static_cast<jclass>(env->NewGlobalRef(
|
| - env->FindClass("java/nio/channels/Channel")));
|
| - g_method_close = env->GetMethodID(g_class_channel, "close", "()V");
|
| - if (!g_class_readablebytechannel || !g_method_read || !g_method_close) {
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -WrappedChannelElementReader::WrappedChannelElementReader(JNIEnv* env,
|
| - jobject channel,
|
| - uint64 length)
|
| - : length_(length), offset_(0) {
|
| - channel_ = env->NewGlobalRef(channel);
|
| +WrappedChannelElementReader::WrappedChannelElementReader(
|
| + scoped_refptr<URLRequestPeer::URLRequestPeerDelegate> delegate,
|
| + uint64 length)
|
| + : length_(length), offset_(0), delegate_(delegate) {
|
| }
|
|
|
| WrappedChannelElementReader::~WrappedChannelElementReader() {
|
| - JNIEnv* env = base::android::AttachCurrentThread();
|
| - env->DeleteGlobalRef(channel_);
|
| }
|
|
|
| int WrappedChannelElementReader::Init(const net::CompletionCallback& callback) {
|
| @@ -74,18 +41,11 @@ int WrappedChannelElementReader::Read(net::IOBuffer* buf,
|
| int buf_length,
|
| const net::CompletionCallback& callback) {
|
| DCHECK(!callback.is_null());
|
| - JNIEnv* env = base::android::AttachCurrentThread();
|
| - jobject jbuf = env->NewDirectByteBuffer(reinterpret_cast<void*>(buf->data()),
|
| - buf_length);
|
| - jint bytes_read = env->CallIntMethod(channel_, g_method_read, jbuf);
|
| - base::android::CheckException(env);
|
| -
|
| - env->DeleteLocalRef(jbuf);
|
| - if (bytes_read <= 0) {
|
| - env->CallVoidMethod(channel_, g_method_close);
|
| - base::android::CheckException(env);
|
| - return bytes_read;
|
| - }
|
| + DCHECK(delegate_);
|
| + // TODO(mef): Post the read to file thread.
|
| + int bytes_read = delegate_->ReadFromUploadChannel(buf, buf_length);
|
| + if (bytes_read < 0)
|
| + return net::ERR_FAILED;
|
| offset_ += bytes_read;
|
| return bytes_read;
|
| }
|
|
|