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

Side by Side Diff: components/cronet/android/java/src/org/chromium/net/ChromiumUrlRequest.java

Issue 470443005: Cronet modifications to support AGSA. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Resync. Created 6 years, 4 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
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 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import android.util.Log; 7 import android.util.Log;
8 8
9 import org.apache.http.conn.ConnectTimeoutException; 9 import org.apache.http.conn.ConnectTimeoutException;
10 import org.chromium.base.CalledByNative; 10 import org.chromium.base.CalledByNative;
(...skipping 24 matching lines...) Expand all
35 private final ChromiumUrlRequestContext mRequestContext; 35 private final ChromiumUrlRequestContext mRequestContext;
36 private final String mUrl; 36 private final String mUrl;
37 private final int mPriority; 37 private final int mPriority;
38 private final Map<String, String> mHeaders; 38 private final Map<String, String> mHeaders;
39 private final WritableByteChannel mSink; 39 private final WritableByteChannel mSink;
40 private Map<String, String> mAdditionalHeaders; 40 private Map<String, String> mAdditionalHeaders;
41 private String mUploadContentType; 41 private String mUploadContentType;
42 private String mMethod; 42 private String mMethod;
43 private byte[] mUploadData; 43 private byte[] mUploadData;
44 private ReadableByteChannel mUploadChannel; 44 private ReadableByteChannel mUploadChannel;
45 private WritableByteChannel mOutputChannel; 45 private boolean mChunkedUpload;
46 private IOException mSinkException; 46 private IOException mSinkException;
47 private volatile boolean mStarted; 47 private volatile boolean mStarted;
48 private volatile boolean mCanceled; 48 private volatile boolean mCanceled;
49 private volatile boolean mRecycled; 49 private volatile boolean mRecycled;
50 private volatile boolean mFinished; 50 private volatile boolean mFinished;
51 private boolean mHeadersAvailable; 51 private boolean mHeadersAvailable;
52 private String mContentType; 52 private String mContentType;
53 private long mUploadContentLength; 53 private long mUploadContentLength;
54 private final HttpUrlRequestListener mListener; 54 private final HttpUrlRequestListener mListener;
55 private boolean mBufferFullResponse; 55 private boolean mBufferFullResponse;
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 * @param contentType MIME type of the upload content or null if this is not 210 * @param contentType MIME type of the upload content or null if this is not
211 * an upload. 211 * an upload.
212 * @param data The content that needs to be uploaded. 212 * @param data The content that needs to be uploaded.
213 */ 213 */
214 public void setUploadData(String contentType, byte[] data) { 214 public void setUploadData(String contentType, byte[] data) {
215 synchronized (mLock) { 215 synchronized (mLock) {
216 validateNotStarted(); 216 validateNotStarted();
217 mUploadContentType = contentType; 217 mUploadContentType = contentType;
218 mUploadData = data; 218 mUploadData = data;
219 mUploadChannel = null; 219 mUploadChannel = null;
220 mChunkedUpload = false;
220 } 221 }
221 } 222 }
222 223
223 /** 224 /**
224 * Sets a readable byte channel to upload as part of a POST or PUT request. 225 * Sets a readable byte channel to upload as part of a POST or PUT request.
225 * 226 *
226 * @param contentType MIME type of the upload content or null if this is not 227 * @param contentType MIME type of the upload content or null if this is not
227 * an upload request. 228 * an upload request.
228 * @param channel The channel to read to read upload data from if this is an 229 * @param channel The channel to read to read upload data from if this is an
229 * upload request. 230 * upload request.
230 * @param contentLength The length of data to upload. 231 * @param contentLength The length of data to upload.
231 */ 232 */
232 public void setUploadChannel(String contentType, 233 public void setUploadChannel(String contentType,
233 ReadableByteChannel channel, long contentLength) { 234 ReadableByteChannel channel, long contentLength) {
234 synchronized (mLock) { 235 synchronized (mLock) {
235 validateNotStarted(); 236 validateNotStarted();
236 mUploadContentType = contentType; 237 mUploadContentType = contentType;
237 mUploadChannel = channel; 238 mUploadChannel = channel;
238 mUploadContentLength = contentLength; 239 mUploadContentLength = contentLength;
239 mUploadData = null; 240 mUploadData = null;
241 mChunkedUpload = false;
242 }
243 }
244
245 /**
246 * Sets this request up for chunked uploading. To upload data call
247 * {@link #appendChunk(ByteBuffer, boolean)} after {@link #start()}.
248 *
249 * @param contentType MIME type of the post content or null if this is not a
250 * POST request.
251 */
252 public void setChunkedUpload(String contentType) {
253 synchronized (mLock) {
254 validateNotStarted();
255 mUploadContentType = contentType;
256 mChunkedUpload = true;
257 mUploadData = null;
258 mUploadChannel = null;
259 }
260 }
261
262 /**
263 * Uploads a new chunk. Must have called {@link #setChunkedUpload(String)}
264 * and {@link #start()}.
265 *
266 * @param chunk The data, which will not be modified. It must not be empty
267 * and its current position must be zero.
268 * @param isLastChunk Whether this chunk is the last one.
269 */
270 public void appendChunk(ByteBuffer chunk, boolean isLastChunk)
271 throws IOException {
272 if (!chunk.hasRemaining()) {
273 throw new IllegalArgumentException(
274 "Attempted to write empty buffer.");
275 }
276 if (chunk.position() != 0) {
277 throw new IllegalArgumentException("The position must be zero.");
278 }
279 synchronized (mLock) {
280 if (!mStarted) {
281 throw new IllegalStateException("Request not yet started.");
282 }
283 if (!mChunkedUpload) {
284 throw new IllegalStateException(
285 "Request not set for chunked uploadind.");
286 }
287 if (mUrlRequestAdapter == 0) {
288 throw new IOException("Native peer destroyed.");
289 }
290 nativeAppendChunk(mUrlRequestAdapter, chunk, chunk.limit(),
291 isLastChunk);
240 } 292 }
241 } 293 }
242 294
243 /** 295 /**
244 * Sets HTTP method for upload request. Only PUT or POST are allowed. 296 * Sets HTTP method for upload request. Only PUT or POST are allowed.
245 */ 297 */
246 public void setHttpMethod(String method) { 298 public void setHttpMethod(String method) {
247 validateNotStarted(); 299 validateNotStarted();
248 if (!("PUT".equals(method) || "POST".equals(method))) { 300 if (!("PUT".equals(method) || "POST".equals(method))) {
249 throw new IllegalArgumentException("Only PUT or POST are allowed."); 301 throw new IllegalArgumentException("Only PUT or POST are allowed.");
(...skipping 12 matching lines...) Expand all
262 } 314 }
263 315
264 validateNotStarted(); 316 validateNotStarted();
265 validateNotRecycled(); 317 validateNotRecycled();
266 318
267 mStarted = true; 319 mStarted = true;
268 320
269 String method = mMethod; 321 String method = mMethod;
270 if (method == null && 322 if (method == null &&
271 ((mUploadData != null && mUploadData.length > 0) || 323 ((mUploadData != null && mUploadData.length > 0) ||
272 mUploadChannel != null)) { 324 mUploadChannel != null || mChunkedUpload)) {
273 // Default to POST if there is data to upload but no method was 325 // Default to POST if there is data to upload but no method was
274 // specified. 326 // specified.
275 method = "POST"; 327 method = "POST";
276 } 328 }
277 329
278 if (method != null) { 330 if (method != null) {
279 nativeSetMethod(mUrlRequestAdapter, method); 331 nativeSetMethod(mUrlRequestAdapter, method);
280 } 332 }
281 333
282 if (mHeaders != null && !mHeaders.isEmpty()) { 334 if (mHeaders != null && !mHeaders.isEmpty()) {
(...skipping 10 matching lines...) Expand all
293 entry.getValue()); 345 entry.getValue());
294 } 346 }
295 } 347 }
296 348
297 if (mUploadData != null && mUploadData.length > 0) { 349 if (mUploadData != null && mUploadData.length > 0) {
298 nativeSetUploadData(mUrlRequestAdapter, mUploadContentType, 350 nativeSetUploadData(mUrlRequestAdapter, mUploadContentType,
299 mUploadData); 351 mUploadData);
300 } else if (mUploadChannel != null) { 352 } else if (mUploadChannel != null) {
301 nativeSetUploadChannel(mUrlRequestAdapter, mUploadContentType, 353 nativeSetUploadChannel(mUrlRequestAdapter, mUploadContentType,
302 mUploadContentLength); 354 mUploadContentLength);
355 } else if (mChunkedUpload) {
356 nativeEnableChunkedUpload(mUrlRequestAdapter,
357 mUploadContentType);
303 } 358 }
304 359
305 nativeStart(mUrlRequestAdapter); 360 nativeStart(mUrlRequestAdapter);
306 } 361 }
307 } 362 }
308 363
309 public void cancel() { 364 public void cancel() {
310 synchronized (mLock) { 365 synchronized (mLock) {
311 if (mCanceled) { 366 if (mCanceled) {
312 return; 367 return;
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
589 String value); 644 String value);
590 645
591 private native void nativeSetMethod(long urlRequestAdapter, String method); 646 private native void nativeSetMethod(long urlRequestAdapter, String method);
592 647
593 private native void nativeSetUploadData(long urlRequestAdapter, 648 private native void nativeSetUploadData(long urlRequestAdapter,
594 String contentType, byte[] content); 649 String contentType, byte[] content);
595 650
596 private native void nativeSetUploadChannel(long urlRequestAdapter, 651 private native void nativeSetUploadChannel(long urlRequestAdapter,
597 String contentType, long contentLength); 652 String contentType, long contentLength);
598 653
654 private native void nativeEnableChunkedUpload(long urlRequestAdapter,
655 String contentType);
656
657 private native void nativeAppendChunk(long urlRequestAdapter,
658 ByteBuffer chunk, int chunkSize, boolean isLastChunk);
659
599 private native void nativeStart(long urlRequestAdapter); 660 private native void nativeStart(long urlRequestAdapter);
600 661
601 private native void nativeCancel(long urlRequestAdapter); 662 private native void nativeCancel(long urlRequestAdapter);
602 663
603 private native void nativeDestroyRequestAdapter(long urlRequestAdapter); 664 private native void nativeDestroyRequestAdapter(long urlRequestAdapter);
604 665
605 private native int nativeGetErrorCode(long urlRequestAdapter); 666 private native int nativeGetErrorCode(long urlRequestAdapter);
606 667
607 private native int nativeGetHttpStatusCode(long urlRequestAdapter); 668 private native int nativeGetHttpStatusCode(long urlRequestAdapter);
608 669
609 private native String nativeGetErrorString(long urlRequestAdapter); 670 private native String nativeGetErrorString(long urlRequestAdapter);
610 671
611 private native String nativeGetContentType(long urlRequestAdapter); 672 private native String nativeGetContentType(long urlRequestAdapter);
612 673
613 private native long nativeGetContentLength(long urlRequestAdapter); 674 private native long nativeGetContentLength(long urlRequestAdapter);
614 675
615 private native String nativeGetHeader(long urlRequestAdapter, String name); 676 private native String nativeGetHeader(long urlRequestAdapter, String name);
616 677
617 private native void nativeGetAllHeaders(long urlRequestAdapter, 678 private native void nativeGetAllHeaders(long urlRequestAdapter,
618 ResponseHeadersMap headers); 679 ResponseHeadersMap headers);
619 680
620 // Explicit class to work around JNI-generator generics confusion. 681 // Explicit class to work around JNI-generator generics confusion.
621 private class ResponseHeadersMap extends HashMap<String, List<String>> { 682 private class ResponseHeadersMap extends HashMap<String, List<String>> {
622 } 683 }
623 } 684 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698