Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/cronet/android/cronet_upload_data_stream_delegate.h" | 5 #include "components/cronet/android/cronet_upload_data_stream_delegate.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 22 CronetUploadDataStreamDelegate::CronetUploadDataStreamDelegate( | 22 CronetUploadDataStreamDelegate::CronetUploadDataStreamDelegate( |
| 23 JNIEnv* env, | 23 JNIEnv* env, |
| 24 jobject jupload_data_stream) { | 24 jobject jupload_data_stream) { |
| 25 jupload_data_stream_.Reset(env, jupload_data_stream); | 25 jupload_data_stream_.Reset(env, jupload_data_stream); |
| 26 } | 26 } |
| 27 | 27 |
| 28 CronetUploadDataStreamDelegate::~CronetUploadDataStreamDelegate() { | 28 CronetUploadDataStreamDelegate::~CronetUploadDataStreamDelegate() { |
| 29 } | 29 } |
| 30 | 30 |
| 31 void CronetUploadDataStreamDelegate::InitializeOnNetworkThread( | 31 void CronetUploadDataStreamDelegate::InitializeOnNetworkThread( |
| 32 base::WeakPtr<CronetUploadDataStreamAdapter> adapter) { | 32 base::WeakPtr<CronetUploadDataStream> upload_data_stream) { |
| 33 DCHECK(!adapter_); | 33 DCHECK(!upload_data_stream_); |
| 34 DCHECK(!network_task_runner_.get()); | 34 DCHECK(!network_task_runner_.get()); |
| 35 | 35 |
| 36 adapter_ = adapter; | 36 upload_data_stream_ = upload_data_stream; |
| 37 network_task_runner_ = base::MessageLoopProxy::current(); | 37 network_task_runner_ = base::MessageLoopProxy::current(); |
| 38 DCHECK(network_task_runner_); | 38 DCHECK(network_task_runner_); |
| 39 } | 39 } |
| 40 | 40 |
| 41 void CronetUploadDataStreamDelegate::Read(net::IOBuffer* buffer, int buf_len) { | 41 void CronetUploadDataStreamDelegate::Read(net::IOBuffer* buffer, int buf_len) { |
| 42 DCHECK(adapter_); | 42 DCHECK(upload_data_stream_); |
| 43 DCHECK(network_task_runner_); | 43 DCHECK(network_task_runner_); |
| 44 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 44 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| 45 DCHECK_GT(buf_len, 0); | 45 DCHECK_GT(buf_len, 0); |
| 46 DCHECK(!buffer_.get()); | 46 DCHECK(!buffer_.get()); |
| 47 buffer_ = buffer; | 47 buffer_ = buffer; |
| 48 | 48 |
| 49 // TODO(mmenke): Consider preserving the java buffer across reads, when the | 49 // TODO(mmenke): Consider preserving the java buffer across reads, when the |
| 50 // IOBuffer's data pointer and its length are unchanged. | 50 // IOBuffer's data pointer and its length are unchanged. |
| 51 JNIEnv* env = base::android::AttachCurrentThread(); | 51 JNIEnv* env = base::android::AttachCurrentThread(); |
| 52 base::android::ScopedJavaLocalRef<jobject> java_buffer( | 52 base::android::ScopedJavaLocalRef<jobject> java_buffer( |
| 53 env, env->NewDirectByteBuffer(buffer->data(), buf_len)); | 53 env, env->NewDirectByteBuffer(buffer->data(), buf_len)); |
| 54 Java_CronetUploadDataStream_readData(env, jupload_data_stream_.obj(), | 54 Java_CronetUploadDataStream_readData(env, jupload_data_stream_.obj(), |
| 55 java_buffer.obj()); | 55 java_buffer.obj()); |
| 56 } | 56 } |
| 57 | 57 |
| 58 void CronetUploadDataStreamDelegate::Rewind() { | 58 void CronetUploadDataStreamDelegate::Rewind() { |
| 59 DCHECK(adapter_); | 59 DCHECK(upload_data_stream_); |
| 60 DCHECK(network_task_runner_->BelongsToCurrentThread()); | 60 DCHECK(network_task_runner_->BelongsToCurrentThread()); |
| 61 | 61 |
| 62 JNIEnv* env = base::android::AttachCurrentThread(); | 62 JNIEnv* env = base::android::AttachCurrentThread(); |
| 63 Java_CronetUploadDataStream_rewind(env, jupload_data_stream_.obj()); | 63 Java_CronetUploadDataStream_rewind(env, jupload_data_stream_.obj()); |
| 64 } | 64 } |
| 65 | 65 |
| 66 void CronetUploadDataStreamDelegate::OnAdapterDestroyed() { | 66 void CronetUploadDataStreamDelegate::OnUploadDataStreamDestroyed() { |
| 67 // If the CronetUploadDataStreamAdapter was never initialized, |adapter_| | 67 // If the CronetUploadDataStream was never initialized, |upload_data_stream_| |
|
xunjieli
2015/05/08 20:11:27
nit: After the name changes, this comment is not s
mmenke
2015/05/08 20:24:18
Done.
| |
| 68 // and |network_task_runner_| will be NULL. | 68 // and |network_task_runner_| will be NULL. |
| 69 DCHECK(!network_task_runner_ || | 69 DCHECK(!network_task_runner_ || |
| 70 network_task_runner_->BelongsToCurrentThread()); | 70 network_task_runner_->BelongsToCurrentThread()); |
| 71 | 71 |
| 72 JNIEnv* env = base::android::AttachCurrentThread(); | 72 JNIEnv* env = base::android::AttachCurrentThread(); |
| 73 Java_CronetUploadDataStream_onAdapterDestroyed(env, | 73 Java_CronetUploadDataStream_onUploadDataStreamDestroyed( |
| 74 jupload_data_stream_.obj()); | 74 env, jupload_data_stream_.obj()); |
| 75 } | 75 } |
| 76 | 76 |
| 77 void CronetUploadDataStreamDelegate::OnReadSucceeded(JNIEnv* env, | 77 void CronetUploadDataStreamDelegate::OnReadSucceeded(JNIEnv* env, |
| 78 jobject jcaller, | 78 jobject jcaller, |
| 79 int bytes_read, | 79 int bytes_read, |
| 80 bool final_chunk) { | 80 bool final_chunk) { |
| 81 DCHECK(!network_task_runner_->BelongsToCurrentThread()); | 81 DCHECK(!network_task_runner_->BelongsToCurrentThread()); |
| 82 DCHECK(bytes_read > 0 || (final_chunk && bytes_read == 0)); | 82 DCHECK(bytes_read > 0 || (final_chunk && bytes_read == 0)); |
| 83 | 83 |
| 84 buffer_ = nullptr; | 84 buffer_ = nullptr; |
| 85 network_task_runner_->PostTask( | 85 network_task_runner_->PostTask( |
| 86 FROM_HERE, base::Bind(&CronetUploadDataStreamAdapter::OnReadSuccess, | 86 FROM_HERE, base::Bind(&CronetUploadDataStream::OnReadSuccess, |
| 87 adapter_, bytes_read, final_chunk)); | 87 upload_data_stream_, bytes_read, final_chunk)); |
| 88 } | 88 } |
| 89 | 89 |
| 90 void CronetUploadDataStreamDelegate::OnRewindSucceeded(JNIEnv* env, | 90 void CronetUploadDataStreamDelegate::OnRewindSucceeded(JNIEnv* env, |
| 91 jobject jcaller) { | 91 jobject jcaller) { |
| 92 DCHECK(!network_task_runner_->BelongsToCurrentThread()); | 92 DCHECK(!network_task_runner_->BelongsToCurrentThread()); |
| 93 | 93 |
| 94 network_task_runner_->PostTask( | 94 network_task_runner_->PostTask( |
| 95 FROM_HERE, | 95 FROM_HERE, |
| 96 base::Bind(&CronetUploadDataStreamAdapter::OnRewindSuccess, adapter_)); | 96 base::Bind(&CronetUploadDataStream::OnRewindSuccess, |
| 97 upload_data_stream_)); | |
| 97 } | 98 } |
| 98 | 99 |
| 99 bool CronetUploadDataStreamDelegateRegisterJni(JNIEnv* env) { | 100 bool CronetUploadDataStreamDelegateRegisterJni(JNIEnv* env) { |
| 100 return RegisterNativesImpl(env); | 101 return RegisterNativesImpl(env); |
| 101 } | 102 } |
| 102 | 103 |
| 103 static jlong AttachUploadDataToRequest(JNIEnv* env, | 104 static jlong AttachUploadDataToRequest(JNIEnv* env, |
| 104 jobject jupload_data_stream, | 105 jobject jupload_data_stream, |
| 105 jlong jcronet_url_request_adapter, | 106 jlong jcronet_url_request_adapter, |
| 106 jlong jlength) { | 107 jlong jlength) { |
| 107 CronetURLRequestAdapter* request_adapter = | 108 CronetURLRequestAdapter* request_adapter = |
| 108 reinterpret_cast<CronetURLRequestAdapter*>(jcronet_url_request_adapter); | 109 reinterpret_cast<CronetURLRequestAdapter*>(jcronet_url_request_adapter); |
| 109 DCHECK(request_adapter != nullptr); | 110 DCHECK(request_adapter != nullptr); |
| 110 | 111 |
| 111 CronetUploadDataStreamDelegate* delegate = | 112 CronetUploadDataStreamDelegate* delegate = |
| 112 new CronetUploadDataStreamDelegate(env, jupload_data_stream); | 113 new CronetUploadDataStreamDelegate(env, jupload_data_stream); |
| 113 | 114 |
| 114 scoped_ptr<CronetUploadDataStreamAdapter> upload_adapter( | 115 scoped_ptr<CronetUploadDataStream> upload_data_stream( |
| 115 new CronetUploadDataStreamAdapter(delegate, jlength)); | 116 new CronetUploadDataStream(delegate, jlength)); |
| 116 | 117 |
| 117 request_adapter->SetUpload(upload_adapter.Pass()); | 118 request_adapter->SetUpload(upload_data_stream.Pass()); |
| 118 | 119 |
| 119 return reinterpret_cast<jlong>(delegate); | 120 return reinterpret_cast<jlong>(delegate); |
| 120 } | 121 } |
| 121 | 122 |
| 122 static jlong CreateDelegateForTesting(JNIEnv* env, | 123 static jlong CreateDelegateForTesting(JNIEnv* env, |
| 123 jobject jupload_data_stream) { | 124 jobject jupload_data_stream) { |
| 124 CronetUploadDataStreamDelegate* delegate = | 125 CronetUploadDataStreamDelegate* delegate = |
| 125 new CronetUploadDataStreamDelegate(env, jupload_data_stream); | 126 new CronetUploadDataStreamDelegate(env, jupload_data_stream); |
| 126 return reinterpret_cast<jlong>(delegate); | 127 return reinterpret_cast<jlong>(delegate); |
| 127 } | 128 } |
| 128 | 129 |
| 129 static jlong CreateAdapterForTesting(JNIEnv* env, | 130 static jlong CreateUploadDataStreamForTesting(JNIEnv* env, |
| 130 jobject jupload_data_stream, | 131 jobject jupload_data_stream, |
| 131 jlong jlength, | 132 jlong jlength, |
| 132 jlong jdelegate) { | 133 jlong jdelegate) { |
| 133 CronetUploadDataStreamDelegate* delegate = | 134 CronetUploadDataStreamDelegate* delegate = |
| 134 reinterpret_cast<CronetUploadDataStreamDelegate*>(jdelegate); | 135 reinterpret_cast<CronetUploadDataStreamDelegate*>(jdelegate); |
| 135 CronetUploadDataStreamAdapter* upload_adapter = | 136 CronetUploadDataStream* upload_data_stream = |
| 136 new CronetUploadDataStreamAdapter(delegate, jlength); | 137 new CronetUploadDataStream(delegate, jlength); |
| 137 return reinterpret_cast<jlong>(upload_adapter); | 138 return reinterpret_cast<jlong>(upload_data_stream); |
| 138 } | 139 } |
| 139 | 140 |
| 140 static void DestroyDelegate(JNIEnv* env, | 141 static void DestroyDelegate(JNIEnv* env, |
| 141 jclass jcronet_url_request_adapter, | 142 jclass jcronet_url_request_adapter, |
| 142 jlong jupload_data_stream_delegate) { | 143 jlong jupload_data_stream_delegate) { |
| 143 CronetUploadDataStreamDelegate* delegate = | 144 CronetUploadDataStreamDelegate* delegate = |
| 144 reinterpret_cast<CronetUploadDataStreamDelegate*>( | 145 reinterpret_cast<CronetUploadDataStreamDelegate*>( |
| 145 jupload_data_stream_delegate); | 146 jupload_data_stream_delegate); |
| 146 DCHECK(delegate != nullptr); | 147 DCHECK(delegate != nullptr); |
| 147 delete delegate; | 148 delete delegate; |
| 148 } | 149 } |
| 149 | 150 |
| 150 } // namespace cronet | 151 } // namespace cronet |
| OLD | NEW |