Index: chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java |
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 0ac226a62e4bc7448f604057e12b47446ee52f6c..084a60d077a2cdb8af6dd34de3045bd90dc772a0 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 |
@@ -11,9 +11,11 @@ import android.content.Context; |
import android.content.Intent; |
import android.content.IntentFilter; |
import android.net.Uri; |
+import android.os.Environment; |
import android.os.SystemClock; |
import android.test.suitebuilder.annotation.SmallTest; |
import android.text.TextUtils; |
+import android.util.Base64; |
import org.chromium.base.test.util.Restriction; |
import org.chromium.chrome.browser.ChromeActivity; |
@@ -24,13 +26,14 @@ import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver; |
import org.chromium.chrome.test.ChromeActivityTestCaseBase; |
import org.chromium.chrome.test.util.ChromeRestriction; |
-import org.chromium.chrome.test.util.TestHttpServerClient; |
import org.chromium.content.browser.test.util.CallbackHelper; |
import org.chromium.content.browser.test.util.Criteria; |
import org.chromium.content.browser.test.util.CriteriaHelper; |
import org.chromium.content_public.browser.LoadUrlParams; |
+import org.chromium.net.test.EmbeddedTestServer; |
import org.chromium.ui.base.PageTransition; |
+import java.io.UnsupportedEncodingException; |
import java.util.concurrent.TimeUnit; |
import java.util.concurrent.TimeoutException; |
@@ -38,32 +41,32 @@ import java.util.concurrent.TimeoutException; |
* Test suite for verifying the behavior of various URL overriding actions. |
*/ |
public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity> { |
- private static final String BASE_URL = "chrome/test/data/android/url_overriding/"; |
+ private static final String BASE_PATH = "/chrome/test/data/android/url_overriding/"; |
private static final String NAVIGATION_FROM_TIMEOUT_PAGE = |
- BASE_URL + "navigation_from_timer.html"; |
+ BASE_PATH + "navigation_from_timer.html"; |
private static final String NAVIGATION_FROM_TIMEOUT_PARENT_FRAME_PAGE = |
- BASE_URL + "navigation_from_timer_parent_frame.html"; |
+ BASE_PATH + "navigation_from_timer_parent_frame.html"; |
private static final String NAVIGATION_FROM_USER_GESTURE_PAGE = |
- BASE_URL + "navigation_from_user_gesture.html"; |
+ BASE_PATH + "navigation_from_user_gesture.html"; |
private static final String NAVIGATION_FROM_USER_GESTURE_PARENT_FRAME_PAGE = |
- BASE_URL + "navigation_from_user_gesture_parent_frame.html"; |
+ BASE_PATH + "navigation_from_user_gesture_parent_frame.html"; |
private static final String NAVIGATION_FROM_XHR_CALLBACK_PAGE = |
- BASE_URL + "navigation_from_xhr_callback.html"; |
+ BASE_PATH + "navigation_from_xhr_callback.html"; |
private static final String NAVIGATION_FROM_XHR_CALLBACK_PARENT_FRAME_PAGE = |
- BASE_URL + "navigation_from_xhr_callback_parent_frame.html"; |
+ BASE_PATH + "navigation_from_xhr_callback_parent_frame.html"; |
private static final String NAVIGATION_FROM_XHR_CALLBACK_AND_SHORT_TIMEOUT_PAGE = |
- BASE_URL + "navigation_from_xhr_callback_and_short_timeout.html"; |
+ BASE_PATH + "navigation_from_xhr_callback_and_short_timeout.html"; |
private static final String NAVIGATION_FROM_XHR_CALLBACK_AND_LONG_TIMEOUT_PAGE = |
- BASE_URL + "navigation_from_xhr_callback_and_long_timeout.html"; |
+ BASE_PATH + "navigation_from_xhr_callback_and_long_timeout.html"; |
private static final String NAVIGATION_WITH_FALLBACK_URL_PAGE = |
- BASE_URL + "navigation_with_fallback_url.html"; |
+ BASE_PATH + "navigation_with_fallback_url.html"; |
private static final String NAVIGATION_WITH_FALLBACK_URL_PARENT_FRAME_PAGE = |
- BASE_URL + "navigation_with_fallback_url_parent_frame.html"; |
- private static final String FALLBACK_LANDING_URL = BASE_URL + "hello.html"; |
+ BASE_PATH + "navigation_with_fallback_url_parent_frame.html"; |
+ private static final String FALLBACK_LANDING_PATH = BASE_PATH + "hello.html"; |
private static final String OPEN_WINDOW_FROM_USER_GESTURE_PAGE = |
- BASE_URL + "open_window_from_user_gesture.html"; |
+ BASE_PATH + "open_window_from_user_gesture.html"; |
private static final String NAVIGATION_FROM_JAVA_REDIRECTION_PAGE = |
- BASE_URL + "navigation_from_java_redirection.html"; |
+ BASE_PATH + "navigation_from_java_redirection.html"; |
private static class TestTabObserver extends EmptyTabObserver { |
private final CallbackHelper mFinishCallback; |
@@ -101,9 +104,11 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity |
} |
private ActivityMonitor mActivityMonitor; |
+ private EmbeddedTestServer mTestServer; |
public UrlOverridingTest() { |
super(ChromeActivity.class); |
+ mSkipCheckHttpServer = true; |
} |
@Override |
@@ -114,6 +119,14 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity |
filter.addDataScheme("market"); |
mActivityMonitor = getInstrumentation().addMonitor( |
filter, new Instrumentation.ActivityResult(Activity.RESULT_OK, null), true); |
+ mTestServer = EmbeddedTestServer.createAndStartFileServer( |
+ getInstrumentation().getContext(), Environment.getExternalStorageDirectory()); |
+ } |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
+ mTestServer.stopAndDestroyServer(); |
+ super.tearDown(); |
} |
private void loadUrlAndWaitForIntentUrl(final String url, boolean needClick, |
@@ -197,6 +210,8 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity |
.getLastOverrideUrlLoadingResultForTests())) { |
return false; |
} |
+ updateFailureReason("Expected: " + expectedFinalUrl + " actual: " |
+ + tab.getUrl()); |
return expectedFinalUrl == null |
|| TextUtils.equals(expectedFinalUrl, tab.getUrl()); |
} |
@@ -206,81 +221,104 @@ public class UrlOverridingTest extends ChromeActivityTestCaseBase<ChromeActivity |
@SmallTest |
public void testNavigationFromTimer() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_TIMEOUT_PAGE), false, false, true); |
+ mTestServer.getURL(NAVIGATION_FROM_TIMEOUT_PAGE), false, false, true); |
} |
@SmallTest |
public void testNavigationFromTimerInSubFrame() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_TIMEOUT_PARENT_FRAME_PAGE), false, |
+ mTestServer.getURL(NAVIGATION_FROM_TIMEOUT_PARENT_FRAME_PAGE), false, |
false, false); |
} |
@SmallTest |
public void testNavigationFromUserGesture() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_USER_GESTURE_PAGE), true, true, true); |
+ mTestServer.getURL(NAVIGATION_FROM_USER_GESTURE_PAGE), true, true, true); |
} |
@SmallTest |
public void testNavigationFromUserGestureInSubFrame() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_USER_GESTURE_PARENT_FRAME_PAGE), true, |
+ mTestServer.getURL(NAVIGATION_FROM_USER_GESTURE_PARENT_FRAME_PAGE), true, |
true, false); |
} |
@SmallTest |
public void testNavigationFromXHRCallback() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_XHR_CALLBACK_PAGE), true, true, true); |
+ mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_PAGE), true, true, true); |
} |
@SmallTest |
public void testNavigationFromXHRCallbackInSubFrame() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_XHR_CALLBACK_PARENT_FRAME_PAGE), true, |
+ mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_PARENT_FRAME_PAGE), true, |
true, false); |
} |
@SmallTest |
public void testNavigationFromXHRCallbackAndShortTimeout() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_XHR_CALLBACK_AND_SHORT_TIMEOUT_PAGE), |
+ mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_AND_SHORT_TIMEOUT_PAGE), |
true, true, true); |
} |
@SmallTest |
public void testNavigationFromXHRCallbackAndLongTimeout() throws InterruptedException { |
loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_FROM_XHR_CALLBACK_AND_LONG_TIMEOUT_PAGE), |
+ mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_AND_LONG_TIMEOUT_PAGE), |
true, false, true); |
} |
@SmallTest |
- public void testNavigationWithFallbackURL() throws InterruptedException { |
- loadUrlAndWaitForIntentUrl(TestHttpServerClient.getUrl(NAVIGATION_WITH_FALLBACK_URL_PAGE), |
- true, 0, false, TestHttpServerClient.getUrl(FALLBACK_LANDING_URL), true); |
+ public void testNavigationWithFallbackURL() |
+ throws InterruptedException, UnsupportedEncodingException { |
+ String fallbackUrl = mTestServer.getURL(FALLBACK_LANDING_PATH); |
+ String originalUrl = mTestServer.getURL( |
+ NAVIGATION_WITH_FALLBACK_URL_PAGE + "?replace_text=" |
+ + Base64.encodeToString("PARAM_FALLBACK_URL".getBytes("utf-8"), Base64.URL_SAFE) |
+ + ":" + Base64.encodeToString(fallbackUrl.getBytes("utf-8"), Base64.URL_SAFE)); |
+ loadUrlAndWaitForIntentUrl(originalUrl, true, 0, false, fallbackUrl, true); |
} |
@SmallTest |
- public void testNavigationWithFallbackURLInSubFrame() throws InterruptedException { |
+ public void testNavigationWithFallbackURLInSubFrame() |
+ throws InterruptedException, UnsupportedEncodingException { |
+ // 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. |
+ String fallbackUrl = mTestServer.getURL(FALLBACK_LANDING_PATH); |
+ byte[] paramBase64Name = "PARAM_BASE64_NAME".getBytes("utf-8"); |
+ byte[] base64ParamFallbackUrl = Base64.encode("PARAM_FALLBACK_URL".getBytes("utf-8"), |
+ Base64.URL_SAFE); |
+ byte[] paramBase64Value = "PARAM_BASE64_VALUE".getBytes("utf-8"); |
+ byte[] base64FallbackUrl = Base64.encode(fallbackUrl.getBytes("utf-8"), Base64.URL_SAFE); |
+ |
+ String originalUrl = mTestServer.getURL( |
+ NAVIGATION_WITH_FALLBACK_URL_PARENT_FRAME_PAGE |
+ + "?replace_text=" |
+ + Base64.encodeToString(paramBase64Name, Base64.URL_SAFE) + ":" |
+ + Base64.encodeToString(base64ParamFallbackUrl, Base64.URL_SAFE) |
+ + "&replace_text=" |
+ + Base64.encodeToString(paramBase64Value, Base64.URL_SAFE) + ":" |
+ + Base64.encodeToString(base64FallbackUrl, Base64.URL_SAFE)); |
+ |
// Fallback URL from a subframe will not trigger main or sub frame navigation. |
- loadUrlAndWaitForIntentUrl( |
- TestHttpServerClient.getUrl(NAVIGATION_WITH_FALLBACK_URL_PARENT_FRAME_PAGE), true, |
- false, false); |
+ loadUrlAndWaitForIntentUrl(originalUrl, true, false, false); |
} |
@SmallTest |
@Restriction(ChromeRestriction.RESTRICTION_TYPE_TABLET) |
public void testOpenWindowFromUserGesture() throws InterruptedException { |
- loadUrlAndWaitForIntentUrl(TestHttpServerClient.getUrl(OPEN_WINDOW_FROM_USER_GESTURE_PAGE), |
+ loadUrlAndWaitForIntentUrl(mTestServer.getURL(OPEN_WINDOW_FROM_USER_GESTURE_PAGE), |
true, 1, true, null, true); |
} |
@SmallTest |
public void testRedirectionFromIntent() throws InterruptedException { |
Intent intent = new Intent(Intent.ACTION_VIEW, |
- Uri.parse(TestHttpServerClient.getUrl(NAVIGATION_FROM_JAVA_REDIRECTION_PAGE))); |
+ Uri.parse(mTestServer.getURL(NAVIGATION_FROM_JAVA_REDIRECTION_PAGE))); |
Context targetContext = getInstrumentation().getTargetContext(); |
intent.setClassName(targetContext, ChromeLauncherActivity.class.getName()); |
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |