Index: components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java |
diff --git a/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java b/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java |
index 70f65d7f69f22388aa64e30ef3805a1d6c00ac7a..3beed58dc5d01868fb1cec3d690befd4e9b23df8 100644 |
--- a/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java |
+++ b/components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java |
@@ -14,6 +14,7 @@ import org.chromium.net.UrlRequestListener; |
import java.io.IOException; |
import java.io.InputStream; |
import java.net.HttpURLConnection; |
+import java.net.MalformedURLException; |
import java.net.URL; |
import java.nio.ByteBuffer; |
@@ -31,6 +32,7 @@ public class CronetHttpURLConnection extends HttpURLConnection { |
private CronetInputStream mInputStream; |
private ResponseInfo mResponseInfo; |
private ByteBuffer mResponseByteBuffer; |
+ private boolean mOnRedirectCalled = false; |
protected CronetHttpURLConnection(URL url, |
UrlRequestContext urlRequestContext) { |
@@ -107,6 +109,12 @@ public class CronetHttpURLConnection extends HttpURLConnection { |
@Override |
public InputStream getInputStream() throws IOException { |
connect(); |
+ if (mResponseInfo == null) { |
+ throw new IOException(); |
+ } |
+ if (!instanceFollowRedirects && mOnRedirectCalled) { |
+ throw new IOException("Cannot read response body of a redirect."); |
+ } |
return mInputStream; |
} |
@@ -176,7 +184,18 @@ public class CronetHttpURLConnection extends HttpURLConnection { |
@Override |
public void onRedirect(UrlRequest request, ResponseInfo info, |
String newLocationUrl) { |
- // TODO(xunjieli): Handle redirect and test it. |
+ mOnRedirectCalled = true; |
+ if (instanceFollowRedirects) { |
+ try { |
+ url = new URL(newLocationUrl); |
+ } catch (MalformedURLException e) { |
+ // Ignored. |
+ } |
+ } else { |
+ mResponseInfo = info; |
+ mRequest.cancel(); |
+ setResponseDataCompleted(); |
+ } |
} |
@Override |