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

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

Issue 99683006: [Android WebView] Only send extra headers for the main page (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: bulach's comments addressed Created 7 years 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 f283b2dc1f54a176abb65a5a9f8dcc995cbb49a7..eed3e5aa1de3d93035091f64a70ceee856624ce5 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
@@ -5,18 +5,25 @@
package org.chromium.android_webview.test;
import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Pair;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
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.test.util.Feature;
import org.chromium.content.browser.LoadUrlParams;
import org.chromium.content.browser.test.util.CallbackHelper;
+import org.chromium.content.browser.test.util.HistoryUtils;
import org.chromium.net.test.util.TestWebServer;
import java.util.concurrent.TimeUnit;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -93,6 +100,40 @@ public class LoadUrlTest extends AwTestBase {
TimeUnit.SECONDS);
}
+ private static List<Pair<String, String>> createHeadersList(String[] namesAndValues) {
+ List<Pair<String, String>> result = new ArrayList<Pair<String, String>>();
+ for (int i = 0; i < namesAndValues.length; i += 2)
+ result.add(Pair.create(namesAndValues[i], namesAndValues[i + 1]));
+ return result;
+ }
+
+ private static Map<String, String> createHeadersMap(String[] namesAndValues) {
+ Map<String, String> result = new HashMap<String, String>();
+ for (int i = 0; i < namesAndValues.length; i += 2)
+ result.put(namesAndValues[i], namesAndValues[i + 1]);
+ return result;
+ }
+
+ private void validateRequestHeaders(String[] refNamesAndValues,
+ HttpRequest request) {
+ for (int i = 0; i < refNamesAndValues.length; i += 2) {
+ Header[] matchingHeaders = request.getHeaders(refNamesAndValues[i]);
+ assertEquals(1, matchingHeaders.length);
+
+ Header header = matchingHeaders[0];
+ assertEquals(refNamesAndValues[i].toLowerCase(), header.getName());
+ assertEquals(refNamesAndValues[i + 1], header.getValue());
+ }
+ }
+
+ private void validateNoRequestHeaders(String[] refNamesAndValues,
+ HttpRequest request) {
+ for (int i = 0; i < refNamesAndValues.length; i += 2) {
+ Header[] matchingHeaders = request.getHeaders(refNamesAndValues[i]);
+ assertEquals(0, matchingHeaders.length);
+ }
+ }
+
@SmallTest
@Feature({"AndroidWebView"})
public void testLoadUrlWithExtraHeaders() throws Throwable {
@@ -104,30 +145,187 @@ public class LoadUrlTest extends AwTestBase {
TestWebServer webServer = null;
try {
webServer = new TestWebServer(false);
+ 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, "<html><body>foo</body></html>", null);
+ final String url = webServer.setResponse(
+ path,
+ CommonResources.getOnImageLoadedHtml(CommonResources.FAVICON_FILENAME),
+ null);
+ String[] extraHeaders = {
+ "X-ExtraHeaders1", "extra-header-data1",
+ "x-extraHeaders2", "EXTRA-HEADER-DATA2"
+ };
- String[] headerNames = {"X-ExtraHeaders1", "x-extraHeaders2"};
- String[] headerValues = {"extra-header-data1", "EXTRA-HEADER-DATA2"};
- Map<String, String> extraHeaders = new HashMap<String, String>();
- for (int i = 0; i < headerNames.length; ++i) {
- extraHeaders.put(headerNames[i], headerValues[i]);
- }
+ 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 {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView"})
+ public void testNoOverridingOfExistingHeaders() throws Throwable {
+ final TestAwContentsClient contentsClient = new TestAwContentsClient();
+ final AwTestContainerView testContainerView =
+ createAwTestContainerViewOnMainSync(contentsClient);
+ final AwContents awContents = testContainerView.getAwContents();
+
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ 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", "007"
+ };
loadUrlWithExtraHeadersSync(awContents,
contentsClient.getOnPageFinishedHelper(),
url,
- extraHeaders);
+ createHeadersMap(extraHeaders));
+ Header[] matchingHeaders = webServer.getLastRequest(path).getHeaders(extraHeaders[0]);
+ assertEquals(1, matchingHeaders.length);
+ Header header = matchingHeaders[0];
+ assertEquals(extraHeaders[0].toLowerCase(), header.getName().toLowerCase());
+ // Just check that the value is there, and it's not the one we provided.
+ assertTrue(header.getValue().length() > 0);
+ assertFalse(extraHeaders[1].equals(header.getValue()));
+ } finally {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
- HttpRequest request = webServer.getLastRequest(path);
- for (int i = 0; i < headerNames.length; ++i) {
- Header[] matchingHeaders = request.getHeaders(headerNames[i]);
- assertEquals(1, matchingHeaders.length);
+ @SmallTest
+ @Feature({"AndroidWebView"})
+ public void testReloadWithExtraHeaders() throws Throwable {
+ final TestAwContentsClient contentsClient = new TestAwContentsClient();
+ final AwTestContainerView testContainerView =
+ createAwTestContainerViewOnMainSync(contentsClient);
+ final AwContents awContents = testContainerView.getAwContents();
- Header header = matchingHeaders[0];
- assertEquals(headerNames[i].toLowerCase(), header.getName());
- assertEquals(headerValues[i], header.getValue());
- }
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ 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 {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView"})
+ public void testRedirectAndReloadWithExtraHeaders() throws Throwable {
+ final TestAwContentsClient contentsClient = new TestAwContentsClient();
+ final AwTestContainerView testContainerView =
+ createAwTestContainerViewOnMainSync(contentsClient);
+ final AwContents awContents = testContainerView.getAwContents();
+
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ 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 {
+ if (webServer != null) webServer.shutdown();
+ }
+ }
+
+ @SmallTest
+ @Feature({"AndroidWebView"})
+ public void testRendererNavigationAndGoBackWithExtraHeaders() throws Throwable {
+ final TestAwContentsClient contentsClient = new TestAwContentsClient();
+ final AwTestContainerView testContainerView =
+ createAwTestContainerViewOnMainSync(contentsClient);
+ final AwContents awContents = testContainerView.getAwContents();
+ final AwSettings settings = getAwSettingsOnUiThread(awContents);
+ settings.setJavaScriptEnabled(true);
+
+ TestWebServer webServer = null;
+ try {
+ webServer = new TestWebServer(false);
+ 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_SECONDS, TimeUnit.SECONDS);
+ // No extra headers for the page navigated via clicking.
+ validateNoRequestHeaders(extraHeaders, webServer.getLastRequest(nextPath));
+
+ HistoryUtils.goBackSync(getInstrumentation(),
+ awContents.getContentViewCore(),
+ contentsClient.getOnPageFinishedHelper());
+ assertEquals(2, webServer.getRequestCount(path));
+ validateRequestHeaders(extraHeaders, webServer.getLastRequest(path));
} finally {
if (webServer != null) webServer.shutdown();
}
« no previous file with comments | « android_webview/javatests/src/org/chromium/android_webview/test/AwTestBase.java ('k') | android_webview/native/aw_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698