Chromium Code Reviews| Index: components/cronet/android/java/src/org/chromium/net/HttpUrlConnectionUrlRequest.java |
| diff --git a/components/cronet/android/java/src/org/chromium/net/HttpUrlConnectionUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/HttpUrlConnectionUrlRequest.java |
| index e815812d1eb277068ec492a47b1d65bafee46a7d..460ff16a01070142d36cd9656955553430637284 100644 |
| --- a/components/cronet/android/java/src/org/chromium/net/HttpUrlConnectionUrlRequest.java |
| +++ b/components/cronet/android/java/src/org/chromium/net/HttpUrlConnectionUrlRequest.java |
| @@ -14,10 +14,12 @@ import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| import java.net.HttpURLConnection; |
| +import java.net.ProtocolException; |
| import java.net.URL; |
| import java.nio.ByteBuffer; |
| import java.nio.channels.ReadableByteChannel; |
| import java.nio.channels.WritableByteChannel; |
| +import java.util.List; |
| import java.util.Map; |
| import java.util.Map.Entry; |
| import java.util.concurrent.ExecutorService; |
| @@ -55,6 +57,8 @@ class HttpUrlConnectionUrlRequest implements HttpUrlRequest { |
| private int mContentLength; |
| + private long mUploadContentLength; |
| + |
| private long mContentLengthLimit; |
| private boolean mCancelIfContentLengthOverLimit; |
| @@ -79,6 +83,8 @@ class HttpUrlConnectionUrlRequest implements HttpUrlRequest { |
| private boolean mCanceled; |
| + private String mMethod; |
| + |
| private InputStream mResponseStream; |
| private final Object mLock; |
| @@ -162,11 +168,23 @@ class HttpUrlConnectionUrlRequest implements HttpUrlRequest { |
| public void setUploadChannel(String contentType, |
| ReadableByteChannel channel, long contentLength) { |
| validateNotStarted(); |
| + mUploadContentLength = contentLength; |
| mPostContentType = contentType; |
| mPostDataChannel = channel; |
| mPostData = null; |
| } |
| + |
| + @Override |
| + public void setHttpMethod(String method) { |
| + validateNotStarted(); |
| + if (!("PUT".equals(method) || "POST".equals(method))) { |
| + throw new IllegalArgumentException( |
| + "Only PUT and POST are allowed."); |
| + } |
| + mMethod = method; |
| + } |
| + |
| @Override |
| public void start() { |
| getExecutor().execute(new Runnable() { |
| @@ -188,6 +206,16 @@ class HttpUrlConnectionUrlRequest implements HttpUrlRequest { |
| URL url = new URL(mUrl); |
| mConnection = (HttpURLConnection)url.openConnection(); |
| + // If configured, use the provided http verb. |
| + if (mMethod != null) { |
| + try { |
| + mConnection.setRequestMethod(mMethod); |
| + } catch (ProtocolException e) { |
| + // Since request hasn't started earlier, it |
| + // must be an illegal HTTP verb. |
| + throw new IllegalArgumentException(e); |
| + } |
| + } |
| mConnection.setConnectTimeout(CONNECT_TIMEOUT); |
| mConnection.setReadTimeout(READ_TIMEOUT); |
| mConnection.setInstanceFollowRedirects(true); |
| @@ -290,7 +318,8 @@ class HttpUrlConnectionUrlRequest implements HttpUrlRequest { |
| uploadStream = mConnection.getOutputStream(); |
| uploadStream.write(mPostData); |
| } else { |
| - mConnection.setChunkedStreamingMode(MAX_CHUNK_SIZE); |
| + mConnection.setFixedLengthStreamingMode( |
| + (int)mUploadContentLength); |
|
mmenke
2014/07/11 20:04:05
Not really a big fan of casting and just crossing
mef
2014/07/14 15:02:17
Done.
|
| uploadStream = mConnection.getOutputStream(); |
| byte[] bytes = new byte[MAX_CHUNK_SIZE]; |
| ByteBuffer byteBuffer = ByteBuffer.wrap(bytes); |
| @@ -450,7 +479,14 @@ class HttpUrlConnectionUrlRequest implements HttpUrlRequest { |
| if (mConnection == null) { |
| throw new IllegalStateException("Response headers not available"); |
| } |
| - return mConnection.getHeaderField(name); |
| + Map<String, List<String>> headerFields = mConnection.getHeaderFields(); |
| + if (headerFields != null) { |
| + List<String> headerValues = headerFields.get(name); |
| + if (headerValues != null) { |
| + return TextUtils.join(", ", headerValues); |
| + } |
| + } |
| + return null; |
| } |
| private void validateNotStarted() { |