| 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 a9222b5bd720c79ec4b449cfce2bb0c334fe487a..d08d27a4a148c9132447c0efceb3005f77de8945 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
|
| @@ -439,18 +439,24 @@ public class CronetHttpURLConnection extends HttpURLConnection {
|
| public void onReceivedRedirect(
|
| UrlRequest request, UrlResponseInfo info, String newLocationUrl) {
|
| mOnRedirectCalled = true;
|
| - if (instanceFollowRedirects) {
|
| - try {
|
| - url = new URL(newLocationUrl);
|
| - } catch (MalformedURLException e) {
|
| - // Ignored.
|
| + try {
|
| + URL newUrl = new URL(newLocationUrl);
|
| + boolean sameProtocol = newUrl.getProtocol().equals(url.getProtocol());
|
| + if (instanceFollowRedirects) {
|
| + // Update the url variable even if the redirect will not be
|
| + // followed due to different protocols.
|
| + url = newUrl;
|
| }
|
| - mRequest.followRedirect();
|
| - } else {
|
| - mResponseInfo = info;
|
| - mRequest.cancel();
|
| - setResponseDataCompleted();
|
| + if (instanceFollowRedirects && sameProtocol) {
|
| + mRequest.followRedirect();
|
| + return;
|
| + }
|
| + } catch (MalformedURLException e) {
|
| + // Ignored. Just cancel the request and not follow the redirect.
|
| }
|
| + mResponseInfo = info;
|
| + mRequest.cancel();
|
| + setResponseDataCompleted();
|
| }
|
|
|
| @Override
|
|
|