Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1431)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java

Issue 1232123009: customtabs: Pre-create a renderer in mayLaunchUrl(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
index 045aef059bd1ec91fbbf1d01033d8bd8ceddde3f..3f9e8ac998e6d9d59a5dcc90e9172bd9d70f7802 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -40,11 +40,13 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.WarmupManager;
+import org.chromium.chrome.browser.WebContentsFactory;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.init.ChromeBrowserInitializer;
import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.content.browser.ChildProcessLauncher;
+import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.Referrer;
@@ -136,6 +138,7 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
private final AtomicBoolean mWarmupHasBeenCalled = new AtomicBoolean();
private ExternalPrerenderHandler mExternalPrerenderHandler;
private PrerenderedUrlParams mPrerender;
+ private WebContents mSpareWebContents;
/** Per-session values. */
private static class SessionParams {
@@ -278,6 +281,24 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
return true;
}
+ /**
+ * Creates a spare {@link WebContents}, if none exists.
+ *
+ * Navigating to "about:blank" forces a lot of initialization to take place
+ * here. This improves PLT. This navigation is never registered in the history, as
+ * "about:blank" is filtered by CanAddURLToHistory.
+ *
+ * TODO(lizeb): Replace this with a cleaner method. See crbug.com/521729.
+ */
+ private void createSpareWebContents() {
+ ThreadUtils.assertOnUiThread();
+ if (mSpareWebContents != null) return;
+ mSpareWebContents = WebContentsFactory.createWebContents(false, false);
+ if (mSpareWebContents != null) {
+ mSpareWebContents.getNavigationController().loadUrl(new LoadUrlParams("about:blank"));
+ }
+ }
+
@Override
public boolean mayLaunchUrl(ICustomTabsCallback callback, Uri url, final Bundle extras,
List<Bundle> otherLikelyBundles) {
@@ -308,8 +329,12 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
warmupManager.maybePreconnectUrlAndSubResources(
Profile.getLastUsedProfile(), urlString);
}
- // Calling with a null or empty url cancels a current prerender.
- if (!noPrerendering) prerenderUrl(session, urlString, extras);
+ if (!noPrerendering && mayPrerender()) {
+ // Calling with a null or empty url cancels a current prerender.
+ prerenderUrl(session, urlString, extras);
+ } else {
+ createSpareWebContents();
+ }
}
});
return true;
@@ -321,6 +346,22 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
}
/**
+ * @return a spare WebContents, or null.
+ *
+ * This WebContents has already navigated to "about:blank". You have to call
+ * {@link LoadUrlParams.setShouldReplaceCurrentEntry(true)} for the next
+ * navigation to ensure that a back navigation doesn't lead to about:blank.
+ *
+ * TODO(lizeb): Update this when crbug.com/521729 is fixed.
+ */
+ WebContents takeSpareWebContents() {
+ ThreadUtils.assertOnUiThread();
+ WebContents result = mSpareWebContents;
+ mSpareWebContents = null;
+ return result;
+ }
+
+ /**
* Registers a launch of a |url| for a given |session|.
*
* This is used for accounting.

Powered by Google App Engine
This is Rietveld 408576698