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 CronetUploadDataStream::InitInternal was never called, |
68 // and |network_task_runner_| will be NULL. | 68 // |upload_data_stream_| 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 |