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

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

Issue 2748013004: CustomTabs: Base version for prerender switch (Closed)
Patch Set: Base version Created 3 years, 9 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 4c3eee8e7a1e3ffcf42febc2b7ac428fd24caedf..da7d69700fa42a9cf0f4bee91abd9f3b1815d6b4 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
@@ -89,6 +89,11 @@ public class CustomTabsConnection {
@VisibleForTesting
static final int PREFETCH_ONLY = 2;
+ @VisibleForTesting
+ static final String PRERENDER_MODE_KEY = "android.support.customtabs.PRERENDER_MODE";
+ @VisibleForTesting
+ static final int DEFAULT_PRERENDER = 0;
ahemery 2017/03/16 17:28:35 Not sure of the name
+
private static AtomicReference<CustomTabsConnection> sInstance = new AtomicReference<>();
/** Holds the parameters for the current speculation. */
@@ -126,6 +131,8 @@ public class CustomTabsConnection {
@VisibleForTesting
SpeculationParams mSpeculation;
+ @VisibleForTesting
+ int mPrerenderMode;
protected final Application mApplication;
protected final ClientManager mClientManager;
private final boolean mLogRequests;
@@ -333,7 +340,7 @@ public class CustomTabsConnection {
didStartPrefetch = new ResourcePrefetchPredictor(profile).startPrefetching(url);
if (didStartPrefetch) mSpeculation = SpeculationParams.forPrefetch(session, url);
} else if (debugOverrideValue != NO_PRERENDERING) {
- didStartPrerender = prerenderUrl(session, url, extras, uid);
+ didStartPrerender = startPrerender(session, url, extras, uid);
}
}
preconnectUrls(otherLikelyBundles);
@@ -900,8 +907,19 @@ public class CustomTabsConnection {
return !cm.isActiveNetworkMetered() || shouldPrerenderOnCellularForSession(session);
}
- /** Cancels a prerender for a given session, or any session if null. */
+ @VisibleForTesting
void cancelPrerender(CustomTabsSessionToken session) {
ahemery 2017/03/16 17:28:35 Generic function to cancel the prerendering of a U
+ switch (mPrerenderMode) {
+ case DEFAULT_PRERENDER:
+ cancelWebContentsPrerender(session);
+ break;
+ default:
+ return;
+ }
+ }
+
+ /** Cancels a prerender for a given session, or any session if null. */
+ private void cancelWebContentsPrerender(CustomTabsSessionToken session) {
ahemery 2017/03/16 17:28:35 Version targeting what we know typically as "prere
ThreadUtils.assertOnUiThread();
if (mSpeculation != null && (session == null || session.equals(mSpeculation.session))
&& mSpeculation.webContents != null) {
@@ -911,6 +929,18 @@ public class CustomTabsConnection {
}
}
+ private boolean startPrerender(
ahemery 2017/03/16 17:28:35 Generic function to start prerendering a URL
+ CustomTabsSessionToken session, String url, Bundle extras, int uid) {
+ // Last one wins and cancels the previous prerender.
+ cancelPrerender(null);
+ switch (mPrerenderMode) {
+ case DEFAULT_PRERENDER:
+ return prerenderUrl(session, url, extras, uid);
+ default:
+ return false;
+ }
+ }
+
/**
* Tries to request a prerender for a given URL.
*
@@ -923,12 +953,8 @@ public class CustomTabsConnection {
private boolean prerenderUrl(
CustomTabsSessionToken session, String url, Bundle extras, int uid) {
ThreadUtils.assertOnUiThread();
- // Ignores mayPrerender() for an empty URL, since it cancels an existing prerender.
ahemery 2017/03/16 17:28:35 This is already done in maylaunchUrl and it makes
- if (!mayPrerender(session) && !TextUtils.isEmpty(url)) return false;
if (!mWarmupHasBeenCalled.get()) return false;
- // Last one wins and cancels the previous prerender.
- cancelPrerender(null);
- if (TextUtils.isEmpty(url)) return false;
+
boolean throttle = !shouldPrerenderOnCellularForSession(session);
if (throttle && !mClientManager.isPrerenderingAllowed(uid)) return false;
@@ -947,18 +973,17 @@ public class CustomTabsConnection {
referrer = getReferrerForSession(session).getUrl();
}
if (referrer == null) referrer = "";
- Pair<WebContents, WebContents> webContentsPair = mExternalPrerenderHandler.addPrerender(
ahemery 2017/03/16 17:28:35 Auto formatting
- Profile.getLastUsedProfile(), url, referrer,
- contentBounds,
- shouldPrerenderOnCellularForSession(session));
+ Pair<WebContents, WebContents> webContentsPair =
+ mExternalPrerenderHandler.addPrerender(Profile.getLastUsedProfile(), url, referrer,
+ contentBounds, shouldPrerenderOnCellularForSession(session));
if (webContentsPair == null) return false;
WebContents dummyWebContents = webContentsPair.first;
if (webContentsPair.second != null) {
mClientManager.resetPostMessageHandlerForSession(session, webContentsPair.second);
}
if (throttle) mClientManager.registerPrerenderRequest(uid, url);
- mSpeculation = SpeculationParams.forPrerender(
ahemery 2017/03/16 17:28:35 Auto formatting
- session, url, dummyWebContents, referrer, extras);
+ mSpeculation =
+ SpeculationParams.forPrerender(session, url, dummyWebContents, referrer, extras);
RecordHistogram.recordBooleanHistogram("CustomTabs.PrerenderSessionUsesDefaultParameters",
mClientManager.usesDefaultSessionParameters(session));
@@ -980,4 +1005,13 @@ public class CustomTabsConnection {
void setForcePrerender(boolean force) {
mForcePrerenderForTesting = force;
}
+
+ @VisibleForTesting
+ void setPrerenderMode(int mode) {
ahemery 2017/03/16 17:28:35 The new switch that enables toggling between usual
+ if (mPrerenderMode != mode) {
+ // Remove all existing speculations when switching mode
+ cancelPrerender(null);
+ mPrerenderMode = mode;
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698