Index: components/cronet/android/org_chromium_net_UrlRequest.cc |
diff --git a/components/cronet/android/org_chromium_net_UrlRequest.cc b/components/cronet/android/org_chromium_net_UrlRequest.cc |
index e38f93fcd35cabe0f45fba5e52b30ac4b031a3d4..4f71b6363ee3aa0f6de2c7071da389acf24d0785 100644 |
--- a/components/cronet/android/org_chromium_net_UrlRequest.cc |
+++ b/components/cronet/android/org_chromium_net_UrlRequest.cc |
@@ -11,14 +11,15 @@ |
#include "components/cronet/android/url_request_context_adapter.h" |
#include "jni/UrlRequest_jni.h" |
#include "net/base/net_errors.h" |
#include "net/base/request_priority.h" |
#include "net/http/http_response_headers.h" |
using base::android::ConvertUTF8ToJavaString; |
+using base::android::CheckException; |
namespace cronet { |
namespace { |
net::RequestPriority ConvertRequestPriority(jint request_priority) { |
switch (request_priority) { |
case REQUEST_PRIORITY_IDLE: |
@@ -57,14 +58,19 @@ void SetPostContentType(JNIEnv* env, |
class JniURLRequestAdapterDelegate |
: public URLRequestAdapter::URLRequestAdapterDelegate { |
public: |
JniURLRequestAdapterDelegate(JNIEnv* env, jobject owner) { |
owner_ = env->NewGlobalRef(owner); |
} |
+ virtual void OnAppendChunkCompleted(URLRequestAdapter* request) OVERRIDE { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ cronet::Java_UrlRequest_onAppendChunkCompleted(env, owner_); |
+ } |
+ |
virtual void OnResponseStarted(URLRequestAdapter* request) OVERRIDE { |
JNIEnv* env = base::android::AttachCurrentThread(); |
cronet::Java_UrlRequest_onResponseStarted(env, owner_); |
} |
virtual void OnBytesRead(URLRequestAdapter* request) OVERRIDE { |
int bytes_read = request->bytes_read(); |
@@ -192,14 +198,41 @@ static void SetUploadChannel(JNIEnv* env, |
URLRequestAdapter* request = |
reinterpret_cast<URLRequestAdapter*>(urlRequestAdapter); |
SetPostContentType(env, request, content_type); |
request->SetUploadChannel(env, content_length); |
} |
+static void EnableChunkedUpload(JNIEnv* env, |
+ jobject object, |
+ jlong urlRequestAdapter, |
+ jstring content_type) { |
+ URLRequestAdapter* request = |
+ reinterpret_cast<URLRequestAdapter*>(urlRequestAdapter); |
+ SetPostContentType(env, request, content_type); |
+ |
+ request->EnableChunkedUpload(); |
+} |
+ |
+static void AppendChunk(JNIEnv* env, |
+ jobject object, |
+ jlong urlRequestAdapter, |
+ jobject chunk_byte_buffer, |
+ jint chunk_size, |
+ jboolean is_last_chunk) { |
+ URLRequestAdapter* request = |
+ reinterpret_cast<URLRequestAdapter*>(urlRequestAdapter); |
+ CHECK(request != NULL); |
+ |
+ if (chunk_byte_buffer != NULL) { |
+ void* chunk = env->GetDirectBufferAddress(chunk_byte_buffer); |
+ request->AppendChunk( |
+ reinterpret_cast<const char*>(chunk), chunk_size, is_last_chunk); |
+ } |
+} |
/* synchronized */ |
static void Start(JNIEnv* env, jobject object, jlong urlRequestAdapter) { |
URLRequestAdapter* request = |
reinterpret_cast<URLRequestAdapter*>(urlRequestAdapter); |
if (request != NULL) { |
request->Start(); |