| Index: components/cronet/android/java/src/org/chromium/net/UrlRequest.java
|
| diff --git a/components/cronet/android/java/src/org/chromium/net/UrlRequest.java b/components/cronet/android/java/src/org/chromium/net/UrlRequest.java
|
| index 0d978a4781034cfe60574ef13f79db9f647a47b9..7cf9ef44b05725a961d7e73d2c7ac24c32f8f86e 100644
|
| --- a/components/cronet/android/java/src/org/chromium/net/UrlRequest.java
|
| +++ b/components/cronet/android/java/src/org/chromium/net/UrlRequest.java
|
| @@ -35,10 +35,10 @@ public class UrlRequest {
|
| private final Map<String, String> mHeaders;
|
| private final WritableByteChannel mSink;
|
| private Map<String, String> mAdditionalHeaders;
|
| - private String mPostBodyContentType;
|
| + private String mUploadContentType;
|
| private String mMethod;
|
| - private byte[] mPostBody;
|
| - private ReadableByteChannel mPostBodyChannel;
|
| + private byte[] mUploadData;
|
| + private ReadableByteChannel mUploadChannel;
|
| private WritableByteChannel mOutputChannel;
|
| private IOException mSinkException;
|
| private volatile boolean mStarted;
|
| @@ -107,9 +107,9 @@ public class UrlRequest {
|
| public void setUploadData(String contentType, byte[] data) {
|
| synchronized (mLock) {
|
| validateNotStarted();
|
| - mPostBodyContentType = contentType;
|
| - mPostBody = data;
|
| - mPostBodyChannel = null;
|
| + mUploadContentType = contentType;
|
| + mUploadData = data;
|
| + mUploadChannel = null;
|
| }
|
| }
|
|
|
| @@ -126,10 +126,10 @@ public class UrlRequest {
|
| ReadableByteChannel channel, long contentLength) {
|
| synchronized (mLock) {
|
| validateNotStarted();
|
| - mPostBodyContentType = contentType;
|
| - mPostBodyChannel = channel;
|
| + mUploadContentType = contentType;
|
| + mUploadChannel = channel;
|
| mUploadContentLength = contentLength;
|
| - mPostBody = null;
|
| + mUploadData = null;
|
| }
|
| }
|
|
|
| @@ -158,8 +158,8 @@ public class UrlRequest {
|
|
|
| String method = mMethod;
|
| if (method == null &&
|
| - ((mPostBody != null && mPostBody.length > 0) ||
|
| - mPostBodyChannel != null)) {
|
| + ((mUploadData != null && mUploadData.length > 0) ||
|
| + mUploadChannel != null)) {
|
| // Default to POST if there is data to upload but no method was
|
| // specified.
|
| method = "POST";
|
| @@ -184,12 +184,12 @@ public class UrlRequest {
|
| }
|
| }
|
|
|
| - if (mPostBody != null && mPostBody.length > 0) {
|
| - nativeSetUploadData(mUrlRequestPeer, mPostBodyContentType,
|
| - mPostBody);
|
| - } else if (mPostBodyChannel != null) {
|
| - nativeSetUploadChannel(mUrlRequestPeer, mPostBodyContentType,
|
| - mPostBodyChannel, mUploadContentLength);
|
| + if (mUploadData != null && mUploadData.length > 0) {
|
| + nativeSetUploadData(mUrlRequestPeer, mUploadContentType,
|
| + mUploadData);
|
| + } else if (mUploadChannel != null) {
|
| + nativeSetUploadChannel(mUrlRequestPeer, mUploadContentType,
|
| + mUploadContentLength);
|
| }
|
|
|
| nativeStart(mUrlRequestPeer);
|
| @@ -358,6 +358,36 @@ public class UrlRequest {
|
| headersMap.get(name).add(value);
|
| }
|
|
|
| + /**
|
| + * Reads a sequence of bytes from upload channel into the given buffer.
|
| + * @param dest The buffer into which bytes are to be transferred.
|
| + * @return Returns number of bytes read (could be 0) or -1 and closes
|
| + * the channel if error occured.
|
| + */
|
| + @SuppressWarnings("unused")
|
| + @CalledByNative
|
| + private int readFromUploadChannel(ByteBuffer dest) {
|
| + if (mUploadChannel == null || !mUploadChannel.isOpen())
|
| + return -1;
|
| + try {
|
| + int result = mUploadChannel.read(dest);
|
| + if (result < 0) {
|
| + mUploadChannel.close();
|
| + return 0;
|
| + }
|
| + return result;
|
| + } catch (IOException e) {
|
| + mSinkException = e;
|
| + try {
|
| + mUploadChannel.close();
|
| + } catch (IOException ignored) {
|
| + // Ignore this exception.
|
| + }
|
| + cancel();
|
| + return -1;
|
| + }
|
| + }
|
| +
|
| private void validateNotRecycled() {
|
| if (mRecycled) {
|
| throw new IllegalStateException("Accessing recycled request");
|
| @@ -392,8 +422,7 @@ public class UrlRequest {
|
| String contentType, byte[] content);
|
|
|
| private native void nativeSetUploadChannel(long urlRequestPeer,
|
| - String contentType, ReadableByteChannel content,
|
| - long contentLength);
|
| + String contentType, long contentLength);
|
|
|
| private native void nativeStart(long urlRequestPeer);
|
|
|
|
|