Fix url load params for StartupTabPreloader
Really, the code in StartupTabPreloader should be reusing the Tab
Creator code, but that's a bigger refactor and this needs to be merged
back (and also I don't want to do it :) ).
The initial preloader implementation forgot to set the transition type
for the LoadUrlParams, which happened to default to a value that mostly
works, but failed to record that we were coming from an intent, and so
it broke intent redirects.
The test for this case didn't catch it because the test extraneously
started Chrome to a blank page before running the test, as that's what
the test suite did.
Bug: 1039612
Change-Id: I38e918f6e6576a37f5b1c0c893497f3f1b488560
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2067246
Reviewed-by: Yaron Friedman <yfriedman@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Commit-Queue: Michael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#744532}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java b/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java
index 93d039d..eabc5c5 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTabPreloader.java
@@ -32,6 +32,7 @@
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.common.Referrer;
import org.chromium.network.mojom.ReferrerPolicy;
+import org.chromium.ui.base.PageTransition;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.url.GURL;
@@ -180,6 +181,9 @@
if (referrer != null && !referrer.isEmpty()) {
mLoadUrlParams.setReferrer(new Referrer(referrer, ReferrerPolicy.DEFAULT));
}
+ int transition = IntentHandler.getTransitionTypeFromIntent(
+ intent, PageTransition.LINK | PageTransition.FROM_API);
+ mLoadUrlParams.setTransitionType(transition);
// Create a detached tab, but don't add it to the tab model yet. We'll do that
// later if the loadUrlParams etc... match.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
index f97f66c9..35ded7ea 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
@@ -128,7 +128,6 @@
@Before
public void setUp() throws Exception {
- mActivityTestRule.startMainActivityOnBlankPage();
IntentFilter filter = new IntentFilter(Intent.ACTION_VIEW);
filter.addCategory(Intent.CATEGORY_BROWSABLE);
filter.addDataScheme("market");
@@ -295,6 +294,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationFromTimer() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(mTestServer.getURL(NAVIGATION_FROM_TIMEOUT_PAGE), false, false);
}
@@ -302,6 +302,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationFromTimerInSubFrame() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(
mTestServer.getURL(NAVIGATION_FROM_TIMEOUT_PARENT_FRAME_PAGE), false, false);
}
@@ -310,6 +311,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationFromUserGesture() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(
mTestServer.getURL(NAVIGATION_FROM_USER_GESTURE_PAGE), true, true);
}
@@ -317,6 +319,7 @@
@Test
@SmallTest
public void testNavigationFromUserGestureInSubFrame() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(
mTestServer.getURL(NAVIGATION_FROM_USER_GESTURE_PARENT_FRAME_PAGE), true, true);
}
@@ -325,6 +328,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationFromXHRCallback() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(
mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_PAGE), true, true);
}
@@ -333,6 +337,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationFromXHRCallbackInSubFrame() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(
mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_PARENT_FRAME_PAGE), true, true);
}
@@ -341,6 +346,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationFromXHRCallbackAndShortTimeout() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(
mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_AND_SHORT_TIMEOUT_PAGE), true,
true);
@@ -350,6 +356,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationFromXHRCallbackAndLongTimeout() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(
mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_AND_LONG_TIMEOUT_PAGE), true,
false);
@@ -359,6 +366,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationWithFallbackURL() {
+ mActivityTestRule.startMainActivityOnBlankPage();
String fallbackUrl = mTestServer.getURL(FALLBACK_LANDING_PATH);
String originalUrl = mTestServer.getURL(NAVIGATION_WITH_FALLBACK_URL_PAGE + "?replace_text="
+ Base64.encodeToString(
@@ -373,6 +381,7 @@
@SmallTest
@RetryOnFailure
public void testNavigationWithFallbackURLInSubFrame() {
+ mActivityTestRule.startMainActivityOnBlankPage();
// The replace_text parameters for NAVIGATION_WITH_FALLBACK_URL_PAGE, which is loaded in
// the iframe in NAVIGATION_WITH_FALLBACK_URL_PARENT_FRAME_PAGE, have to go through the
// embedded test server twice and, as such, have to be base64-encoded twice.
@@ -401,6 +410,7 @@
@SmallTest
@RetryOnFailure
public void testOpenWindowFromUserGesture() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(mTestServer.getURL(OPEN_WINDOW_FROM_USER_GESTURE_PAGE), true,
true, true, null, true);
}
@@ -409,6 +419,7 @@
@SmallTest
@RetryOnFailure
public void testOpenWindowFromLinkUserGesture() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(mTestServer.getURL(OPEN_WINDOW_FROM_LINK_USER_GESTURE_PAGE),
true, true, true, null, true, "link");
}
@@ -417,6 +428,7 @@
@SmallTest
@RetryOnFailure
public void testOpenWindowFromSvgUserGesture() {
+ mActivityTestRule.startMainActivityOnBlankPage();
loadUrlAndWaitForIntentUrl(mTestServer.getURL(OPEN_WINDOW_FROM_SVG_USER_GESTURE_PAGE), true,
true, true, null, true, "link");
}
@@ -425,12 +437,13 @@
@SmallTest
@RetryOnFailure
public void testRedirectionFromIntent() {
+ // Test cold-start.
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(mTestServer.getURL(NAVIGATION_FROM_JAVA_REDIRECTION_PAGE)));
Context targetContext = InstrumentationRegistry.getTargetContext();
intent.setClassName(targetContext, ChromeLauncherActivity.class.getName());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- targetContext.startActivity(intent);
+ InstrumentationRegistry.getInstrumentation().startActivitySync(intent);
CriteriaHelper.pollUiThread(Criteria.equals(1, new Callable<Integer>() {
@Override
@@ -438,5 +451,16 @@
return mActivityMonitor.getHits();
}
}));
+
+ // Test warm start.
+ mActivityTestRule.startMainActivityOnBlankPage();
+ targetContext.startActivity(intent);
+
+ CriteriaHelper.pollUiThread(Criteria.equals(2, new Callable<Integer>() {
+ @Override
+ public Integer call() {
+ return mActivityMonitor.getHits();
+ }
+ }));
}
}