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

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

Issue 2748013004: CustomTabs: Base version for prerender switch (Closed)
Patch Set: Small fixes 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..bd38e643e0fb5b0e0befffae414d74d3d0469bd7 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
@@ -83,7 +83,8 @@ public class CustomTabsConnection {
@VisibleForTesting
static final String DEBUG_OVERRIDE_KEY =
"android.support.customtabs.maylaunchurl.DEBUG_OVERRIDE";
- private static final int NO_OVERRIDE = 0;
+ @VisibleForTesting
+ static final int NO_OVERRIDE = 0;
@VisibleForTesting
static final int NO_PRERENDERING = 1;
@VisibleForTesting
@@ -96,31 +97,30 @@ public class CustomTabsConnection {
static final class SpeculationParams {
public final CustomTabsSessionToken session;
public final String url;
+ public final int debugOverrideValue;
ahemery1 2017/03/21 15:15:57 Replaces prefetchOnly to have a record of what the
Benoit L 2017/03/21 15:56:41 I would prefer a name like "mode", or something al
// Only for prerender.
public final WebContents webContents;
public final String referrer;
public final Bundle extras;
- public final boolean prefetchOnly;
+ static SpeculationParams forPrefetch(CustomTabsSessionToken session, String url) {
ahemery1 2017/03/21 15:15:58 Just reordered.
Benoit L 2017/03/21 15:56:41 why? Not an issue, but why reordering code?
+ return new SpeculationParams(session, url, PREFETCH_ONLY, null, null, null);
+ }
static SpeculationParams forPrerender(CustomTabsSessionToken session, String url,
WebContents webcontents, String referrer, Bundle extras) {
- return new SpeculationParams(session, url, webcontents, referrer, extras, false);
- }
-
- static SpeculationParams forPrefetch(CustomTabsSessionToken session, String url) {
- return new SpeculationParams(session, url, null, null, null, true);
+ return new SpeculationParams(session, url, NO_OVERRIDE, webcontents, referrer, extras);
}
private SpeculationParams(CustomTabsSessionToken session, String url,
- WebContents webContents, String referrer, Bundle extras, boolean prefetchOnly) {
+ int debugOverrideValue, WebContents webContents, String referrer, Bundle extras) {
this.session = session;
this.url = url;
+ this.debugOverrideValue = debugOverrideValue;
this.webContents = webContents;
this.referrer = referrer;
this.extras = extras;
- this.prefetchOnly = prefetchOnly;
}
}
@@ -333,6 +333,8 @@ public class CustomTabsConnection {
didStartPrefetch = new ResourcePrefetchPredictor(profile).startPrefetching(url);
if (didStartPrefetch) mSpeculation = SpeculationParams.forPrefetch(session, url);
} else if (debugOverrideValue != NO_PRERENDERING) {
+ // Last one wins and cancels the previous prerender.
ahemery1 2017/03/21 15:15:57 This was moved from inside the prerenderUrl() func
Benoit L 2017/03/21 15:56:41 nit: Is it possible to isolate the changes between
+ cancelPrerender(null);
didStartPrerender = prerenderUrl(session, url, extras, uid);
}
}
@@ -587,7 +589,7 @@ public class CustomTabsConnection {
return null;
}
- if (mSpeculation.prefetchOnly) {
+ if (mSpeculation.debugOverrideValue == PREFETCH_ONLY) {
Profile profile = Profile.getLastUsedProfile();
new ResourcePrefetchPredictor(profile).stopPrefetching(mSpeculation.url);
mSpeculation = null;
@@ -901,16 +903,27 @@ public class CustomTabsConnection {
}
/** Cancels a prerender for a given session, or any session if null. */
+ @VisibleForTesting
void cancelPrerender(CustomTabsSessionToken session) {
- ThreadUtils.assertOnUiThread();
- if (mSpeculation != null && (session == null || session.equals(mSpeculation.session))
- && mSpeculation.webContents != null) {
- mExternalPrerenderHandler.cancelCurrentPrerender();
- mSpeculation.webContents.destroy();
- mSpeculation = null;
+ if (mSpeculation == null) return;
+ if (session != null && !session.equals(mSpeculation.session)) return;
+ switch (mSpeculation.debugOverrideValue) {
+ case NO_OVERRIDE:
+ cancelNoOverridePrerender(session);
+ break;
+ default:
+ return;
}
}
+ private void cancelNoOverridePrerender(CustomTabsSessionToken session) {
+ ThreadUtils.assertOnUiThread();
+ if (mSpeculation.webContents == null) return;
+ mExternalPrerenderHandler.cancelCurrentPrerender();
+ mSpeculation.webContents.destroy();
+ mSpeculation = null;
+ }
+
/**
* Tries to request a prerender for a given URL.
*
@@ -923,12 +936,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.
- if (!mayPrerender(session) && !TextUtils.isEmpty(url)) return false;
ahemery1 2017/03/21 15:15:57 Unnecessary duplicate.
if (!mWarmupHasBeenCalled.get()) return false;
- // Last one wins and cancels the previous prerender.
- cancelPrerender(null);
- if (TextUtils.isEmpty(url)) return false;
ahemery1 2017/03/21 15:15:57 Extracted because behavior is more general than ju
+
boolean throttle = !shouldPrerenderOnCellularForSession(session);
if (throttle && !mClientManager.isPrerenderingAllowed(uid)) return false;
@@ -947,18 +956,17 @@ public class CustomTabsConnection {
referrer = getReferrerForSession(session).getUrl();
}
if (referrer == null) referrer = "";
- Pair<WebContents, WebContents> webContentsPair = mExternalPrerenderHandler.addPrerender(
- 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(
- session, url, dummyWebContents, referrer, extras);
+ mSpeculation =
+ SpeculationParams.forPrerender(session, url, dummyWebContents, referrer, extras);
RecordHistogram.recordBooleanHistogram("CustomTabs.PrerenderSessionUsesDefaultParameters",
mClientManager.usesDefaultSessionParameters(session));

Powered by Google App Engine
This is Rietveld 408576698