Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: components/cronet/android/cronet_upload_data_stream_delegate.cc

Issue 849903002: [Cronet] Upload support for async APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move delegate destructor to implementation file to avoid chromium style error Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "components/cronet/android/cronet_upload_data_stream_delegate.h"
6
7 #include <string>
8
9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h"
11 #include "base/bind.h"
12 #include "base/message_loop/message_loop_proxy.h"
13 #include "base/single_thread_task_runner.h"
14 #include "components/cronet/android/cronet_url_request_adapter.h"
15 #include "jni/CronetUploadDataStream_jni.h"
16
17 using base::android::ConvertUTF8ToJavaString;
18
19 namespace cronet {
20
21 CronetUploadDataStreamDelegate::CronetUploadDataStreamDelegate(
22 JNIEnv* env,
23 jobject jupload_data_stream) {
24 jupload_data_stream_.Reset(env, jupload_data_stream);
25 }
26
27 CronetUploadDataStreamDelegate::~CronetUploadDataStreamDelegate() {
28 }
29
30 void CronetUploadDataStreamDelegate::InitializeOnNetworkThread(
31 base::WeakPtr<CronetUploadDataStreamAdapter> adapter) {
32 DCHECK(!adapter_);
33 DCHECK(!network_task_runner_.get());
34
35 adapter_ = adapter;
36 network_task_runner_ = base::MessageLoopProxy::current();
37 DCHECK(network_task_runner_);
38 }
39
40 void CronetUploadDataStreamDelegate::Read(net::IOBuffer* buffer, int buf_len) {
41 DCHECK(adapter_);
42 DCHECK(network_task_runner_);
43 DCHECK(network_task_runner_->BelongsToCurrentThread());
44 DCHECK_GT(buf_len, 0);
45 DCHECK(!buffer_.get());
46 buffer_ = buffer;
47
48 // TODO(mmenke): Consider preserving the java buffer across reads, when the
49 // IOBuffer's data pointer and its length are unchanged.
50 JNIEnv* env = base::android::AttachCurrentThread();
51 base::android::ScopedJavaLocalRef<jobject> java_buffer(
52 env, env->NewDirectByteBuffer(buffer->data(), buf_len));
53 Java_CronetUploadDataStream_readData(env, jupload_data_stream_.obj(),
54 java_buffer.obj());
55 }
56
57 void CronetUploadDataStreamDelegate::Rewind() {
58 DCHECK(adapter_);
59 DCHECK(network_task_runner_->BelongsToCurrentThread());
60
61 JNIEnv* env = base::android::AttachCurrentThread();
62 Java_CronetUploadDataStream_rewind(env, jupload_data_stream_.obj());
63 }
64
65 void CronetUploadDataStreamDelegate::OnAdapterDestroyed() {
66 DCHECK(adapter_);
67 DCHECK(network_task_runner_->BelongsToCurrentThread());
68
69 JNIEnv* env = base::android::AttachCurrentThread();
70 Java_CronetUploadDataStream_onAdapterDestroyed(env,
71 jupload_data_stream_.obj());
72 }
73
74 void CronetUploadDataStreamDelegate::OnReadSucceeded(JNIEnv* env,
75 jobject jcaller,
76 int bytes_read,
77 bool final_chunk) {
78 DCHECK(!network_task_runner_->BelongsToCurrentThread());
79 DCHECK(bytes_read > 0 || (final_chunk && bytes_read == 0));
80
81 buffer_ = nullptr;
82 DCHECK(network_task_runner_->PostTask(
83 FROM_HERE, base::Bind(&CronetUploadDataStreamAdapter::OnReadSuccess,
84 adapter_, bytes_read, final_chunk)));
85 }
86
87 void CronetUploadDataStreamDelegate::OnRewindSucceeded(JNIEnv* env,
88 jobject jcaller) {
89 DCHECK(!network_task_runner_->BelongsToCurrentThread());
90
91 network_task_runner_->PostTask(
92 FROM_HERE,
93 base::Bind(&CronetUploadDataStreamAdapter::OnRewindSuccess, adapter_));
94 }
95
96 bool CronetUploadDataStreamDelegateRegisterJni(JNIEnv* env) {
97 return RegisterNativesImpl(env);
98 }
99
100 static jlong AttachUploadDataToRequest(JNIEnv* env,
101 jobject jupload_data_stream,
102 jlong jcronet_url_request_adapter,
103 jlong jlength) {
104 CronetURLRequestAdapter* request_adapter =
105 reinterpret_cast<CronetURLRequestAdapter*>(jcronet_url_request_adapter);
106 DCHECK(request_adapter != nullptr);
107
108 CronetUploadDataStreamDelegate* delegate =
109 new CronetUploadDataStreamDelegate(env, jupload_data_stream);
110
111 scoped_ptr<CronetUploadDataStreamAdapter> upload_adapter(
112 new CronetUploadDataStreamAdapter(delegate, jlength));
113
114 request_adapter->SetUpload(upload_adapter.Pass());
115
116 return reinterpret_cast<jlong>(delegate);
117 }
118
119 static jlong CreateDelegateForTesting(JNIEnv* env,
120 jobject jupload_data_stream) {
121 CronetUploadDataStreamDelegate* delegate =
122 new CronetUploadDataStreamDelegate(env, jupload_data_stream);
123 return reinterpret_cast<jlong>(delegate);
124 }
125
126 static jlong CreateAdapterForTesting(JNIEnv* env,
127 jobject jupload_data_stream,
128 jlong jlength,
129 jlong jdelegate) {
130 CronetUploadDataStreamDelegate* delegate =
131 reinterpret_cast<CronetUploadDataStreamDelegate*>(jdelegate);
132 CronetUploadDataStreamAdapter* upload_adapter =
133 new CronetUploadDataStreamAdapter(delegate, jlength);
134 return reinterpret_cast<jlong>(upload_adapter);
135 }
136
137 static void DestroyDelegate(JNIEnv* env,
138 jclass jcronet_url_request_adapter,
139 jlong jupload_data_stream_delegate) {
140 CronetUploadDataStreamDelegate* delegate =
141 reinterpret_cast<CronetUploadDataStreamDelegate*>(
142 jupload_data_stream_delegate);
143 DCHECK(delegate != nullptr);
144 delete delegate;
145 }
146
147 } // namespace cronet
OLDNEW
« no previous file with comments | « components/cronet/android/cronet_upload_data_stream_delegate.h ('k') | components/cronet/android/cronet_url_request_adapter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698