OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser; | 5 package org.chromium.chrome.browser; |
6 | 6 |
7 import android.annotation.SuppressLint; | 7 import android.annotation.SuppressLint; |
8 import android.content.Context; | 8 import android.content.Context; |
9 import android.net.Uri; | |
9 import android.os.AsyncTask; | 10 import android.os.AsyncTask; |
10 import android.os.StrictMode; | 11 import android.os.StrictMode; |
11 import android.os.SystemClock; | 12 import android.os.SystemClock; |
13 import android.text.TextUtils; | |
12 import android.view.ContextThemeWrapper; | 14 import android.view.ContextThemeWrapper; |
13 import android.view.InflateException; | 15 import android.view.InflateException; |
14 import android.view.LayoutInflater; | 16 import android.view.LayoutInflater; |
15 import android.view.View; | 17 import android.view.View; |
16 import android.view.ViewGroup; | 18 import android.view.ViewGroup; |
17 import android.view.ViewStub; | 19 import android.view.ViewStub; |
18 import android.widget.FrameLayout; | 20 import android.widget.FrameLayout; |
19 | 21 |
20 import org.chromium.base.Log; | 22 import org.chromium.base.Log; |
21 import org.chromium.base.SysUtils; | 23 import org.chromium.base.SysUtils; |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
220 } | 222 } |
221 } | 223 } |
222 | 224 |
223 /** Asynchronously preconnects to a given URL if the data reduction proxy is not in use. | 225 /** Asynchronously preconnects to a given URL if the data reduction proxy is not in use. |
224 * | 226 * |
225 * @param profile The profile to use for the preconnection. | 227 * @param profile The profile to use for the preconnection. |
226 * @param url The URL we want to preconnect to. | 228 * @param url The URL we want to preconnect to. |
227 */ | 229 */ |
228 public void maybePreconnectUrlAndSubResources(Profile profile, String url) { | 230 public void maybePreconnectUrlAndSubResources(Profile profile, String url) { |
229 ThreadUtils.assertOnUiThread(); | 231 ThreadUtils.assertOnUiThread(); |
230 if (!DataReductionProxySettings.getInstance().isDataReductionProxyEnable d()) { | 232 |
231 // If there is already a DNS request in flight for this URL, then | 233 Uri uri = Uri.parse(url); |
232 // the preconnection will start by issuing a DNS request for the | 234 if (uri == null) return; |
233 // same domain, as the result is not cached. However, such a DNS | 235 // HTTP connections will not be used when the data reduction proxy is en abled. |
234 // request has already been sent from this class, so it is better to | 236 if (DataReductionProxySettings.getInstance().isDataReductionProxyEnabled () |
235 // wait for the answer to come back before preconnecting. Otherwise, | 237 && TextUtils.equals(UrlConstants.HTTP_SCHEME, uri.normalizeSchem e().getScheme())) { |
Bernhard Bauer
2017/07/10 12:13:44
Nit: TextUtils.equals feels like overkill here --
Benoit L
2017/07/10 12:35:38
Done.
| |
236 // the preconnection logic will wait for the result of the second | 238 return; |
237 // DNS request, which should arrive after the result of the first | 239 } |
238 // one. Note that we however need to wait for the main thread to be | 240 |
239 // available in this case, since the preconnection will be sent from | 241 // If there is already a DNS request in flight for this URL, then the pr econnection will |
240 // AsyncTask.onPostExecute(), which may delay it. | 242 // start by issuing a DNS request for the same domain, as the result is not cached. However, |
241 if (mDnsRequestsInFlight.contains(url)) { | 243 // such a DNS request has already been sent from this class, so it is be tter to wait for the |
242 // Note that if two requests come for the same URL with two | 244 // answer to come back before preconnecting. Otherwise, the preconnectio n logic will wait |
243 // different profiles, the last one will win. | 245 // for the result of the second DNS request, which should arrive after t he result of the |
244 mPendingPreconnectWithProfile.put(url, profile); | 246 // first one. Note that we however need to wait for the main thread to b e available in this |
245 } else { | 247 // case, since the preconnection will be sent from AsyncTask.onPostExecu te(), which may |
246 nativePreconnectUrlAndSubresources(profile, url); | 248 // delay it. |
247 } | 249 if (mDnsRequestsInFlight.contains(url)) { |
250 // Note that if two requests come for the same URL with two differen t profiles, the last | |
251 // one will win. | |
252 mPendingPreconnectWithProfile.put(url, profile); | |
253 } else { | |
254 nativePreconnectUrlAndSubresources(profile, url); | |
248 } | 255 } |
249 } | 256 } |
250 | 257 |
251 /** | 258 /** |
252 * Creates and initializes a spare WebContents, to be used in a subsequent n avigation. | 259 * Creates and initializes a spare WebContents, to be used in a subsequent n avigation. |
253 * | 260 * |
254 * This creates a renderer that is suitable for any navigation. It can be pi cked up by any tab. | 261 * This creates a renderer that is suitable for any navigation. It can be pi cked up by any tab. |
255 * Can be called multiple times, and must be called from the UI thread. | 262 * Can be called multiple times, and must be called from the UI thread. |
256 * Note that this is a no-op on low-end devices. | 263 * Note that this is a no-op on low-end devices. |
257 */ | 264 */ |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
308 mObserver = null; | 315 mObserver = null; |
309 } | 316 } |
310 | 317 |
311 private static void recordWebContentsStatus(int status) { | 318 private static void recordWebContentsStatus(int status) { |
312 RecordHistogram.recordEnumeratedHistogram( | 319 RecordHistogram.recordEnumeratedHistogram( |
313 WEBCONTENTS_STATUS_HISTOGRAM, status, WEBCONTENTS_STATUS_COUNT); | 320 WEBCONTENTS_STATUS_HISTOGRAM, status, WEBCONTENTS_STATUS_COUNT); |
314 } | 321 } |
315 | 322 |
316 private static native void nativePreconnectUrlAndSubresources(Profile profil e, String url); | 323 private static native void nativePreconnectUrlAndSubresources(Profile profil e, String url); |
317 } | 324 } |
OLD | NEW |