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

Unified Diff: android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java

Issue 2687573002: [Android Webview] Refactor LoadUrlTest and work on embedded_test_server custom handler (Closed)
Patch Set: Change AwETS intent class name Created 3 years, 6 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: android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
index 9f402a79dbde720be5cda7a0eaec48e38103e264..5ac1e2500b23a697e7c945d88a3653d8c7b06faf 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/LoadUrlTest.java
@@ -7,8 +7,10 @@ package org.chromium.android_webview.test;
import android.support.test.filters.SmallTest;
import android.util.Pair;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
import org.chromium.android_webview.AwContents;
-import org.chromium.android_webview.AwSettings;
import org.chromium.android_webview.test.util.CommonResources;
import org.chromium.android_webview.test.util.JSUtils;
import org.chromium.base.annotations.SuppressFBWarnings;
@@ -17,6 +19,8 @@ import org.chromium.base.test.util.Feature;
import org.chromium.content.browser.test.util.HistoryUtils;
import org.chromium.net.test.util.TestWebServer;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -27,6 +31,21 @@ import java.util.concurrent.TimeUnit;
* Test suite for loadUrl().
*/
public class LoadUrlTest extends AwTestBase {
+ private AwEmbeddedTestServer mTestServer;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ mTestServer =
+ AwEmbeddedTestServer.createAndStartServer(getInstrumentation().getTargetContext());
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ mTestServer.stopAndDestroyServer();
+ super.tearDown();
+ }
+
@SmallTest
@Feature({"AndroidWebView"})
public void testDataUrl() throws Throwable {
@@ -111,20 +130,34 @@ public class LoadUrlTest extends AwTestBase {
return result;
}
- private void validateRequestHeaders(String[] refNamesAndValues, List<String> request) {
- List<String> matchingHeaders;
- for (int i = 0; i < refNamesAndValues.length; i += 2) {
- matchingHeaders = TestWebServer.getMatchingHeadersValues(request, refNamesAndValues[i]);
- assertEquals(1, matchingHeaders.size());
- assertEquals(refNamesAndValues[i + 1], matchingHeaders.get(0));
+ private void validateHeadersValue(final AwContents awContents,
+ final TestAwContentsClient contentsClient, String[] extraHeader,
+ boolean shouldHeaderExist) throws Exception {
+ String textContent = getJavaScriptResultBodyTextContent(awContents, contentsClient);
+ String[] header_values = textContent.split("\\\\n");
+ for (int i = 0; i < extraHeader.length; i += 2) {
+ assertEquals(shouldHeaderExist ? extraHeader[i + 1] : "None", header_values[i / 2]);
}
}
- private void validateNoRequestHeaders(String[] refNamesAndValues, List<String> request) {
- List<String> matchingHeaders;
- for (int i = 0; i < refNamesAndValues.length; i += 2) {
- matchingHeaders = TestWebServer.getMatchingHeadersValues(request, refNamesAndValues[i]);
- assertEquals(0, matchingHeaders.size());
+ private void validateHeadersFromJson(final AwContents awContents,
+ final TestAwContentsClient contentsClient, String[] extraHeader, String jsonName,
+ boolean shouldHeaderExist) throws Exception {
+ String textContent = getJavaScriptResultBodyTextContent(awContents, contentsClient)
+ .replaceAll("\\\\\"", "\"");
+ JSONObject jsonObject = new JSONObject(textContent);
+ JSONArray jsonArray = jsonObject.getJSONArray(jsonName);
+ for (int i = 0; i < extraHeader.length; i += 2) {
+ String header = jsonArray.getString(i / 2);
+ assertEquals(shouldHeaderExist ? extraHeader[i + 1] : "None", header);
+ }
+ }
+
+ private final String encodeUrl(String url) {
+ try {
+ return URLEncoder.encode(url, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ throw new AssertionError(e);
}
}
@@ -135,32 +168,26 @@ public class LoadUrlTest extends AwTestBase {
final AwTestContainerView testContainerView =
createAwTestContainerViewOnMainSync(contentsClient);
final AwContents awContents = testContainerView.getAwContents();
+ enableJavaScriptOnUiThread(awContents);
- TestWebServer webServer = TestWebServer.start();
- try {
- final String imagePath = "/" + CommonResources.FAVICON_FILENAME;
- webServer.setResponseBase64(imagePath,
- CommonResources.FAVICON_DATA_BASE64, CommonResources.getImagePngHeaders(true));
- final String path = "/load_url_with_extra_headers_test.html";
- final String url = webServer.setResponse(
- path,
- CommonResources.getOnImageLoadedHtml(CommonResources.FAVICON_FILENAME),
- null);
- String[] extraHeaders = {
- "X-ExtraHeaders1", "extra-header-data1",
- "x-extraHeaders2", "EXTRA-HEADER-DATA2"
- };
-
- loadUrlWithExtraHeadersSync(awContents,
- contentsClient.getOnPageFinishedHelper(),
- url,
- createHeadersMap(extraHeaders));
- validateRequestHeaders(extraHeaders, webServer.getLastRequest(path));
- // Verify that extra headers are only passed for the main resource.
- validateNoRequestHeaders(extraHeaders, webServer.getLastRequest(imagePath));
- } finally {
- webServer.shutdown();
- }
+ String[] extraHeaders = {
+ "X-ExtraHeaders1", "extra-header-data1", "x-extraHeaders2", "EXTRA-HEADER-DATA2"};
+
+ final String url1 = mTestServer.getURL("/image-response-if-header-not-exists?resource="
+ + encodeUrl(CommonResources.FAVICON_DATA_BASE64) + "&header=" + extraHeaders[0]
+ + "&header=" + extraHeaders[2]);
+ final String url2 = mTestServer.getURL("/image-onload-html?imagesrc=" + encodeUrl(url1)
+ + "&header=" + extraHeaders[0] + "&header=" + extraHeaders[2]);
+
+ TestAwContentsClient.OnReceivedTitleHelper onReceivedTitleHelper =
+ contentsClient.getOnReceivedTitleHelper();
+ int onReceivedTitleCallCount = onReceivedTitleHelper.getCallCount();
+ loadUrlWithExtraHeadersSync(awContents, contentsClient.getOnPageFinishedHelper(), url2,
+ createHeadersMap(extraHeaders));
+ // Verify that extra headers are passed to the loaded url.
+ validateHeadersValue(awContents, contentsClient, extraHeaders, true);
+ onReceivedTitleHelper.waitForCallback(onReceivedTitleCallCount);
+ assertEquals("5", onReceivedTitleHelper.getTitle());
}
@SmallTest
@@ -171,28 +198,17 @@ public class LoadUrlTest extends AwTestBase {
createAwTestContainerViewOnMainSync(contentsClient);
final AwContents awContents = testContainerView.getAwContents();
- TestWebServer webServer = TestWebServer.start();
- try {
- final String path = "/no_overriding_of_existing_headers_test.html";
- final String url = webServer.setResponse(
- path,
- "<html><body>foo</body></html>",
- null);
- String[] extraHeaders = {"user-agent", "Borewicz 07 & Bond 007"};
-
- loadUrlWithExtraHeadersSync(awContents,
- contentsClient.getOnPageFinishedHelper(),
- url,
- createHeadersMap(extraHeaders));
- List<String> matchingHeaders = TestWebServer.getMatchingHeadersValues(
- webServer.getLastRequest(path), extraHeaders[0]);
- assertEquals(1, matchingHeaders.size());
- // Just check that the value is there, and it's not the one we provided.
- assertTrue(matchingHeaders.get(0).length() > 0);
- assertFalse(extraHeaders[1].equals(matchingHeaders.get(0)));
- } finally {
- webServer.shutdown();
- }
+ enableJavaScriptOnUiThread(awContents);
+
+ final String url = mTestServer.getURL("/echoheader?user-agent");
+ String[] extraHeaders = {"user-agent", "Borewicz 07 & Bond 007"};
+
+ loadUrlWithExtraHeadersSync(awContents, contentsClient.getOnPageFinishedHelper(), url,
+ createHeadersMap(extraHeaders));
+ String header = getJavaScriptResultBodyTextContent(awContents, contentsClient);
+ // Just check that the value is there, and it's not the one we provided.
+ assertFalse(header.isEmpty());
+ assertFalse(extraHeaders[1].equals(header));
}
@SmallTest
@@ -202,30 +218,17 @@ public class LoadUrlTest extends AwTestBase {
final AwTestContainerView testContainerView =
createAwTestContainerViewOnMainSync(contentsClient);
final AwContents awContents = testContainerView.getAwContents();
-
- TestWebServer webServer = TestWebServer.start();
- try {
- final String path = "/reload_with_extra_headers_test.html";
- final String url = webServer.setResponse(path,
- "<html><body>foo</body></html>",
- createHeadersList(new String[] { "cache-control", "no-cache, no-store" }));
- String[] extraHeaders = {
- "X-ExtraHeaders1", "extra-header-data1",
- "x-extraHeaders2", "EXTRA-HEADER-DATA2"
- };
-
- loadUrlWithExtraHeadersSync(awContents,
- contentsClient.getOnPageFinishedHelper(),
- url,
- createHeadersMap(extraHeaders));
- validateRequestHeaders(extraHeaders, webServer.getLastRequest(path));
-
- reloadSync(awContents, contentsClient.getOnPageFinishedHelper());
- assertEquals(2, webServer.getRequestCount(path));
- validateRequestHeaders(extraHeaders, webServer.getLastRequest(path));
- } finally {
- webServer.shutdown();
- }
+ enableJavaScriptOnUiThread(awContents);
+ String[] extraHeaders = {
+ "X-ExtraHeaders1", "extra-header-data1", "x-extraHeaders2", "EXTRA-HEADER-DATA2"};
+ final String url =
+ mTestServer.getURL("/echoheader?" + extraHeaders[0] + "&" + extraHeaders[2]);
+
+ loadUrlWithExtraHeadersSync(awContents, contentsClient.getOnPageFinishedHelper(), url,
+ createHeadersMap(extraHeaders));
+ validateHeadersValue(awContents, contentsClient, extraHeaders, true);
+ reloadSync(awContents, contentsClient.getOnPageFinishedHelper());
+ validateHeadersValue(awContents, contentsClient, extraHeaders, true);
}
@SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@@ -236,35 +239,30 @@ public class LoadUrlTest extends AwTestBase {
final AwTestContainerView testContainerView =
createAwTestContainerViewOnMainSync(contentsClient);
final AwContents awContents = testContainerView.getAwContents();
-
- TestWebServer webServer = TestWebServer.start();
- try {
- final String path = "/redirect_and_reload_with_extra_headers_test.html";
- final String url = webServer.setResponse(path,
- "<html><body>foo</body></html>",
- createHeadersList(new String[] { "cache-control", "no-cache, no-store" }));
- final String redirectedPath = "/redirected.html";
- final String redirectedUrl = webServer.setRedirect(redirectedPath, path);
- String[] extraHeaders = {
- "X-ExtraHeaders1", "extra-header-data1",
- "x-extraHeaders2", "EXTRA-HEADER-DATA2"
- };
-
- loadUrlWithExtraHeadersSync(awContents,
- contentsClient.getOnPageFinishedHelper(),
- redirectedUrl,
- createHeadersMap(extraHeaders));
- validateRequestHeaders(extraHeaders, webServer.getLastRequest(path));
- validateRequestHeaders(extraHeaders, webServer.getLastRequest(redirectedPath));
-
- // WebView will only reload the main page.
- reloadSync(awContents, contentsClient.getOnPageFinishedHelper());
- assertEquals(2, webServer.getRequestCount(path));
- // No extra headers. This is consistent with legacy behavior.
- validateNoRequestHeaders(extraHeaders, webServer.getLastRequest(path));
- } finally {
- webServer.shutdown();
- }
+ final String echoRedirectedUrlHeader = "echo header";
+ final String echoInitialUrlHeader = "data content";
+
+ enableJavaScriptOnUiThread(awContents);
+
+ String[] extraHeaders = {
+ "X-ExtraHeaders1", "extra-header-data1", "x-extraHeaders2", "EXTRA-HEADER-DATA2"};
+ final String redirectedUrl = mTestServer.getURL("/echoheader-and-set-data?header="
+ + extraHeaders[0] + "&header=" + extraHeaders[2]);
+ final String initialUrl =
+ mTestServer.getURL("/server-redirect-echoheader?url=" + encodeUrl(redirectedUrl)
+ + "&header=" + extraHeaders[0] + "&header=" + extraHeaders[2]);
+ loadUrlWithExtraHeadersSync(awContents, contentsClient.getOnPageFinishedHelper(),
+ initialUrl, createHeadersMap(extraHeaders));
+ validateHeadersFromJson(
+ awContents, contentsClient, extraHeaders, echoRedirectedUrlHeader, true);
+ validateHeadersFromJson(
+ awContents, contentsClient, extraHeaders, echoInitialUrlHeader, true);
+
+ // WebView will only reload the main page.
+ reloadSync(awContents, contentsClient.getOnPageFinishedHelper());
+ // No extra headers. This is consistent with legacy behavior.
+ validateHeadersFromJson(
+ awContents, contentsClient, extraHeaders, echoRedirectedUrlHeader, false);
}
@SuppressFBWarnings("DLS_DEAD_LOCAL_STORE")
@@ -275,48 +273,31 @@ public class LoadUrlTest extends AwTestBase {
final AwTestContainerView testContainerView =
createAwTestContainerViewOnMainSync(contentsClient);
final AwContents awContents = testContainerView.getAwContents();
- final AwSettings settings = getAwSettingsOnUiThread(awContents);
- settings.setJavaScriptEnabled(true);
-
- TestWebServer webServer = TestWebServer.start();
- try {
- final String nextPath = "/next.html";
- final String nextUrl = webServer.setResponse(nextPath,
- "<html><body>Next!</body></html>",
- null);
- final String path = "/renderer_nav_and_go_back_with_extra_headers_test.html";
- final String url = webServer.setResponse(path,
- "<html><body><a id=\"next\" href=\"next.html\">Next!</a></body></html>",
- createHeadersList(new String[] { "cache-control", "no-cache, no-store" }));
- String[] extraHeaders = {
- "X-ExtraHeaders1", "extra-header-data1",
- "x-extraHeaders2", "EXTRA-HEADER-DATA2"
- };
-
- loadUrlWithExtraHeadersSync(awContents,
- contentsClient.getOnPageFinishedHelper(),
- url,
- createHeadersMap(extraHeaders));
- validateRequestHeaders(extraHeaders, webServer.getLastRequest(path));
-
- int currentCallCount = contentsClient.getOnPageFinishedHelper().getCallCount();
- JSUtils.clickOnLinkUsingJs(this,
- awContents,
- contentsClient.getOnEvaluateJavaScriptResultHelper(),
- "next");
- contentsClient.getOnPageFinishedHelper().waitForCallback(
- currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
- // No extra headers for the page navigated via clicking.
- validateNoRequestHeaders(extraHeaders, webServer.getLastRequest(nextPath));
-
- HistoryUtils.goBackSync(getInstrumentation(),
- awContents.getWebContents(),
- contentsClient.getOnPageFinishedHelper());
- assertEquals(2, webServer.getRequestCount(path));
- validateRequestHeaders(extraHeaders, webServer.getLastRequest(path));
- } finally {
- webServer.shutdown();
- }
+ enableJavaScriptOnUiThread(awContents);
+
+ String[] extraHeaders = {
+ "X-ExtraHeaders1", "extra-header-data1", "x-extraHeaders2", "EXTRA-HEADER-DATA2"};
+ final String redirectedUrl =
+ mTestServer.getURL("/echoheader?" + extraHeaders[0] + "&" + extraHeaders[2]);
+ final String initialUrl =
+ mTestServer.getURL("/click-redirect?url=" + encodeUrl(redirectedUrl)
+ + "&header=" + extraHeaders[0] + "&header=" + extraHeaders[2]);
+
+ loadUrlWithExtraHeadersSync(awContents, contentsClient.getOnPageFinishedHelper(),
+ initialUrl, createHeadersMap(extraHeaders));
+ validateHeadersValue(awContents, contentsClient, extraHeaders, true);
+
+ int currentCallCount = contentsClient.getOnPageFinishedHelper().getCallCount();
+ JSUtils.clickOnLinkUsingJs(
+ this, awContents, contentsClient.getOnEvaluateJavaScriptResultHelper(), "click");
+ contentsClient.getOnPageFinishedHelper().waitForCallback(
+ currentCallCount, 1, WAIT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ // No extra headers for the page navigated via clicking.
+ validateHeadersValue(awContents, contentsClient, extraHeaders, false);
+
+ HistoryUtils.goBackSync(getInstrumentation(), awContents.getWebContents(),
+ contentsClient.getOnPageFinishedHelper());
+ validateHeadersValue(awContents, contentsClient, extraHeaders, true);
}
private static class OnReceivedTitleClient extends TestAwContentsClient {
@@ -340,8 +321,7 @@ public class LoadUrlTest extends AwTestBase {
final AwTestContainerView testContainerView =
createAwTestContainerViewOnMainSync(contentsClient);
final AwContents awContents = testContainerView.getAwContents();
- final AwSettings settings = getAwSettingsOnUiThread(awContents);
- settings.setJavaScriptEnabled(true);
+ enableJavaScriptOnUiThread(awContents);
contentsClient.setOnReceivedTitleCallback(new Runnable() {
@Override
« no previous file with comments | « android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java ('k') | android_webview/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698