Finch kill switch feature for background tab.
Adds the CCTBackgroundTab (ChromeFeatureList::CCT_BACKGROUND_TAB) feature
which is enabled by default.
BUG=708173
Review-Url: https://codereview.chromium.org/2837873002
Cr-Commit-Position: refs/heads/master@{#467281}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
index 965b9f5..1e5cd8b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -146,6 +146,7 @@
public static final String ANDROID_PAY_INTEGRATION_V2 = "AndroidPayIntegrationV2";
public static final String ANDROID_PAYMENT_APPS = "AndroidPaymentApps";
public static final String AUTOFILL_SCAN_CARDHOLDER_NAME = "AutofillScanCardholderName";
+ public static final String CCT_BACKGROUND_TAB = "CCTBackgroundTab";
public static final String CCT_EXTERNAL_LINK_HANDLING = "CCTExternalLinkHandling";
public static final String CCT_POST_MESSAGE_API = "CCTPostMessageAPI";
public static final String CHROME_HOME = "ChromeHome";
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 41e9313..0bd3d07c 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
@@ -987,6 +987,10 @@
WarmupManager warmupManager = WarmupManager.getInstance();
Profile profile = Profile.getLastUsedProfile();
boolean preconnect = true, createSpareWebContents = true;
+ if (speculationMode == SpeculationParams.HIDDEN_TAB
+ && !ChromeFeatureList.isEnabled(ChromeFeatureList.CCT_BACKGROUND_TAB)) {
+ speculationMode = SpeculationParams.PRERENDER;
+ }
switch (speculationMode) {
case SpeculationParams.PREFETCH:
boolean didPrefetch = new ResourcePrefetchPredictor(profile).startPrefetching(url);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
index 3b1ca31..324d7fd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java
@@ -57,6 +57,7 @@
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.IntentHandler;
@@ -1810,14 +1811,33 @@
testSpeculateCorrectUrl(CustomTabsConnection.SpeculationParams.HIDDEN_TAB);
}
+ /**
+ * Test that a hidden tab speculation is executed as a prerender if the |CCT_BACKGROUND_TAB|
+ * feature is disabled.
+ **/
+ @SmallTest
+ @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
+ @RetryOnFailure
+ @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
+ "disable-features=" + ChromeFeatureList.CCT_BACKGROUND_TAB})
+ public void testHiddenTabDisabled() throws Exception {
+ testSpeculateCorrectUrl(CustomTabsConnection.SpeculationParams.HIDDEN_TAB,
+ CustomTabsConnection.SpeculationParams.PRERENDER);
+ }
+
private void testSpeculateCorrectUrl(int speculationMode) throws Exception {
+ testSpeculateCorrectUrl(speculationMode, speculationMode);
+ }
+
+ private void testSpeculateCorrectUrl(int requestedSpeculationMode, int usedSpeculationMode)
+ throws Exception {
Context context = getInstrumentation().getTargetContext().getApplicationContext();
final CustomTabsConnection connection = warmUpAndWait();
CustomTabsSessionToken token = CustomTabsSessionToken.createDummySessionTokenForTesting();
connection.newSession(token);
- connection.setSpeculationModeForSession(token, speculationMode);
+ connection.setSpeculationModeForSession(token, requestedSpeculationMode);
assertTrue(connection.mayLaunchUrl(token, Uri.parse(mTestPage), null, null));
- ensureCompletedSpeculationForUrl(connection, mTestPage, speculationMode);
+ ensureCompletedSpeculationForUrl(connection, mTestPage, usedSpeculationMode);
try {
startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCustomTabIntent(
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index a4e23df..0fa47fd2 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -48,6 +48,7 @@
&kAndroidPayIntegrationV1,
&kAndroidPayIntegrationV2,
&kAndroidPaymentApps,
+ &kCCTBackgroundTab,
&kCCTExternalLinkHandling,
&kCCTPostMessageAPI,
&kChromeHomeFeature,
@@ -111,6 +112,9 @@
const base::Feature kAndroidPaymentApps{"AndroidPaymentApps",
base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kCCTBackgroundTab{"CCTBackgroundTab",
+ base::FEATURE_ENABLED_BY_DEFAULT};
+
const base::Feature kCCTExternalLinkHandling{"CCTExternalLinkHandling",
base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h
index c228997c..d6a079f 100644
--- a/chrome/browser/android/chrome_feature_list.h
+++ b/chrome/browser/android/chrome_feature_list.h
@@ -16,6 +16,7 @@
extern const base::Feature kAndroidPayIntegrationV1;
extern const base::Feature kAndroidPayIntegrationV2;
extern const base::Feature kAndroidPaymentApps;
+extern const base::Feature kCCTBackgroundTab;
extern const base::Feature kCCTExternalLinkHandling;
extern const base::Feature kCCTPostMessageAPI;
extern const base::Feature kChromeHomeFeature;