OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/org_chromium_net_UrlRequest.h" | 5 #include "components/cronet/android/org_chromium_net_UrlRequest.h" |
6 | 6 |
7 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "components/cronet/android/url_request_context_peer.h" | 10 #include "components/cronet/android/url_request_context_peer.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 | 63 |
64 virtual void OnResponseStarted(URLRequestPeer* request) OVERRIDE { | 64 virtual void OnResponseStarted(URLRequestPeer* request) OVERRIDE { |
65 JNIEnv* env = base::android::AttachCurrentThread(); | 65 JNIEnv* env = base::android::AttachCurrentThread(); |
66 cronet::Java_UrlRequest_onResponseStarted(env, owner_); | 66 cronet::Java_UrlRequest_onResponseStarted(env, owner_); |
67 } | 67 } |
68 | 68 |
69 virtual void OnBytesRead(URLRequestPeer* request) OVERRIDE { | 69 virtual void OnBytesRead(URLRequestPeer* request) OVERRIDE { |
70 int bytes_read = request->bytes_read(); | 70 int bytes_read = request->bytes_read(); |
71 if (bytes_read != 0) { | 71 if (bytes_read != 0) { |
72 JNIEnv* env = base::android::AttachCurrentThread(); | 72 JNIEnv* env = base::android::AttachCurrentThread(); |
73 jobject bytebuf = env->NewDirectByteBuffer(request->Data(), bytes_read); | 73 base::android::ScopedJavaLocalRef<jobject> java_buffer( |
74 cronet::Java_UrlRequest_onBytesRead(env, owner_, bytebuf); | 74 env, env->NewDirectByteBuffer(request->Data(), bytes_read)); |
75 env->DeleteLocalRef(bytebuf); | 75 cronet::Java_UrlRequest_onBytesRead(env, owner_, java_buffer.obj()); |
76 } | 76 } |
77 } | 77 } |
78 | 78 |
79 virtual void OnRequestFinished(URLRequestPeer* request) OVERRIDE { | 79 virtual void OnRequestFinished(URLRequestPeer* request) OVERRIDE { |
80 JNIEnv* env = base::android::AttachCurrentThread(); | 80 JNIEnv* env = base::android::AttachCurrentThread(); |
81 cronet::Java_UrlRequest_finish(env, owner_); | 81 cronet::Java_UrlRequest_finish(env, owner_); |
82 } | 82 } |
83 | 83 |
| 84 virtual int ReadFromUploadChannel(net::IOBuffer* buf, |
| 85 int buf_length) OVERRIDE { |
| 86 JNIEnv* env = base::android::AttachCurrentThread(); |
| 87 base::android::ScopedJavaLocalRef<jobject> java_buffer( |
| 88 env, env->NewDirectByteBuffer(buf->data(), buf_length)); |
| 89 jint bytes_read = cronet::Java_UrlRequest_readFromUploadChannel( |
| 90 env, owner_, java_buffer.obj()); |
| 91 return bytes_read; |
| 92 } |
| 93 |
84 protected: | 94 protected: |
85 virtual ~JniURLRequestPeerDelegate() { | 95 virtual ~JniURLRequestPeerDelegate() { |
86 JNIEnv* env = base::android::AttachCurrentThread(); | 96 JNIEnv* env = base::android::AttachCurrentThread(); |
87 env->DeleteGlobalRef(owner_); | 97 env->DeleteGlobalRef(owner_); |
88 } | 98 } |
89 | 99 |
90 private: | 100 private: |
91 jobject owner_; | 101 jobject owner_; |
92 | 102 |
93 DISALLOW_COPY_AND_ASSIGN(JniURLRequestPeerDelegate); | 103 DISALLOW_COPY_AND_ASSIGN(JniURLRequestPeerDelegate); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 size); | 178 size); |
169 env->ReleaseByteArrayElements(content, content_bytes, 0); | 179 env->ReleaseByteArrayElements(content, content_bytes, 0); |
170 } | 180 } |
171 } | 181 } |
172 } | 182 } |
173 | 183 |
174 static void SetUploadChannel(JNIEnv* env, | 184 static void SetUploadChannel(JNIEnv* env, |
175 jobject object, | 185 jobject object, |
176 jlong urlRequestPeer, | 186 jlong urlRequestPeer, |
177 jstring content_type, | 187 jstring content_type, |
178 jobject content, | |
179 jlong content_length) { | 188 jlong content_length) { |
180 URLRequestPeer* request = reinterpret_cast<URLRequestPeer*>(urlRequestPeer); | 189 URLRequestPeer* request = reinterpret_cast<URLRequestPeer*>(urlRequestPeer); |
181 SetPostContentType(env, request, content_type); | 190 SetPostContentType(env, request, content_type); |
182 | 191 |
183 request->SetUploadChannel(env, content, content_length); | 192 request->SetUploadChannel(env, content_length); |
184 } | 193 } |
185 | 194 |
186 | 195 |
187 /* synchronized */ | 196 /* synchronized */ |
188 static void Start(JNIEnv* env, jobject object, jlong urlRequestPeer) { | 197 static void Start(JNIEnv* env, jobject object, jlong urlRequestPeer) { |
189 URLRequestPeer* request = reinterpret_cast<URLRequestPeer*>(urlRequestPeer); | 198 URLRequestPeer* request = reinterpret_cast<URLRequestPeer*>(urlRequestPeer); |
190 if (request != NULL) { | 199 if (request != NULL) { |
191 request->Start(); | 200 request->Start(); |
192 } | 201 } |
193 } | 202 } |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 | 343 |
335 // Some implementations (notably HttpURLConnection) include a mapping for the | 344 // Some implementations (notably HttpURLConnection) include a mapping for the |
336 // null key; in HTTP's case, this maps to the HTTP status line. | 345 // null key; in HTTP's case, this maps to the HTTP status line. |
337 ScopedJavaLocalRef<jstring> status_line = | 346 ScopedJavaLocalRef<jstring> status_line = |
338 ConvertUTF8ToJavaString(env, headers->GetStatusLine()); | 347 ConvertUTF8ToJavaString(env, headers->GetStatusLine()); |
339 Java_UrlRequest_onAppendResponseHeader( | 348 Java_UrlRequest_onAppendResponseHeader( |
340 env, object, headersMap, NULL, status_line.Release()); | 349 env, object, headersMap, NULL, status_line.Release()); |
341 } | 350 } |
342 | 351 |
343 } // namespace cronet | 352 } // namespace cronet |
OLD | NEW |