Index: chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java |
index 7c6ccb38bc737891664f5ace3b09ebee4922aeba..5dbfe4437126df8340fa28a92fa3806cee9ed633 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java |
@@ -6,6 +6,7 @@ package org.chromium.chrome.browser; |
import android.annotation.SuppressLint; |
import android.content.Context; |
+import android.net.Uri; |
import android.os.AsyncTask; |
import android.os.StrictMode; |
import android.os.SystemClock; |
@@ -227,24 +228,29 @@ public final class WarmupManager { |
*/ |
public void maybePreconnectUrlAndSubResources(Profile profile, String url) { |
ThreadUtils.assertOnUiThread(); |
- if (!DataReductionProxySettings.getInstance().isDataReductionProxyEnabled()) { |
- // If there is already a DNS request in flight for this URL, then |
- // the preconnection will start by issuing a DNS request for the |
- // same domain, as the result is not cached. However, such a DNS |
- // request has already been sent from this class, so it is better to |
- // wait for the answer to come back before preconnecting. Otherwise, |
- // the preconnection logic will wait for the result of the second |
- // DNS request, which should arrive after the result of the first |
- // one. Note that we however need to wait for the main thread to be |
- // available in this case, since the preconnection will be sent from |
- // AsyncTask.onPostExecute(), which may delay it. |
- if (mDnsRequestsInFlight.contains(url)) { |
- // Note that if two requests come for the same URL with two |
- // different profiles, the last one will win. |
- mPendingPreconnectWithProfile.put(url, profile); |
- } else { |
- nativePreconnectUrlAndSubresources(profile, url); |
- } |
+ |
+ Uri uri = Uri.parse(url); |
+ if (uri == null) return; |
+ // HTTP connections will not be used when the data reduction proxy is enabled. |
+ if (DataReductionProxySettings.getInstance().isDataReductionProxyEnabled() |
+ && UrlConstants.HTTP_SCHEME.equals(uri.normalizeScheme().getScheme())) { |
+ return; |
+ } |
+ |
+ // If there is already a DNS request in flight for this URL, then the preconnection will |
+ // start by issuing a DNS request for the same domain, as the result is not cached. However, |
+ // such a DNS request has already been sent from this class, so it is better to wait for the |
+ // answer to come back before preconnecting. Otherwise, the preconnection logic will wait |
+ // for the result of the second DNS request, which should arrive after the result of the |
+ // first one. Note that we however need to wait for the main thread to be available in this |
+ // case, since the preconnection will be sent from AsyncTask.onPostExecute(), which may |
+ // delay it. |
+ if (mDnsRequestsInFlight.contains(url)) { |
+ // Note that if two requests come for the same URL with two different profiles, the last |
+ // one will win. |
+ mPendingPreconnectWithProfile.put(url, profile); |
+ } else { |
+ nativePreconnectUrlAndSubresources(profile, url); |
} |
} |