Commit b4110230 authored by fsamuel's avatar fsamuel Committed by Commit bot

<webview>: Add additional WebRequest API test coverage.

This CL adds a test which verifies that we read and change HTTP headers.

BUG=352293
TBR=rockot@chromium.org

Review URL: https://codereview.chromium.org/640603005

Cr-Commit-Position: refs/heads/master@{#299047}
parent e20e3b27
......@@ -69,6 +69,7 @@ using ui::MenuModel;
namespace {
const char kEmptyResponsePath[] = "/close-socket";
const char kRedirectResponsePath[] = "/server-redirect";
const char kUserAgentRedirectResponsePath[] = "/detect-user-agent";
const char kRedirectResponseFullPath[] =
"/extensions/platform_apps/web_view/shim/guest_redirect.html";
......@@ -470,6 +471,28 @@ class WebViewTest : public extensions::PlatformAppBrowserTest {
}
}
// Handles |request| by serving a redirect response if the |User-Agent| is
// foobar.
static scoped_ptr<net::test_server::HttpResponse> UserAgentResponseHandler(
const std::string& path,
const GURL& redirect_target,
const net::test_server::HttpRequest& request) {
if (!StartsWithASCII(path, request.relative_url, true))
return scoped_ptr<net::test_server::HttpResponse>();
std::map<std::string, std::string>::const_iterator it =
request.headers.find("User-Agent");
EXPECT_TRUE(it != request.headers.end());
if (!StartsWithASCII("foobar", it->second, true))
return scoped_ptr<net::test_server::HttpResponse>();
scoped_ptr<net::test_server::BasicHttpResponse> http_response(
new net::test_server::BasicHttpResponse);
http_response->set_code(net::HTTP_MOVED_PERMANENTLY);
http_response->AddCustomHeader("Location", redirect_target.spec());
return http_response.PassAs<net::test_server::HttpResponse>();
}
// Handles |request| by serving a redirect response.
static scoped_ptr<net::test_server::HttpResponse> RedirectResponseHandler(
const std::string& path,
......@@ -537,6 +560,12 @@ class WebViewTest : public extensions::PlatformAppBrowserTest {
embedded_test_server()->RegisterRequestHandler(
base::Bind(&WebViewTest::EmptyResponseHandler, kEmptyResponsePath));
embedded_test_server()->RegisterRequestHandler(
base::Bind(
&WebViewTest::UserAgentResponseHandler,
kUserAgentRedirectResponsePath,
embedded_test_server()->GetURL(kRedirectResponseFullPath)));
}
LoadAndLaunchPlatformApp(app_location.c_str(), "Launched");
......@@ -1028,6 +1057,12 @@ IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestWebRequestAPI) {
TestHelper("testWebRequestAPI", "web_view/shim", NEEDS_TEST_SERVER);
}
IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestWebRequestAPIWithHeaders) {
TestHelper("testWebRequestAPIWithHeaders",
"web_view/shim",
NEEDS_TEST_SERVER);
}
IN_PROC_BROWSER_TEST_F(WebViewTest, Shim_TestWebRequestAPIGoogleProperty) {
TestHelper("testWebRequestAPIGoogleProperty",
"web_view/shim",
......
......@@ -24,6 +24,7 @@ embedder.setUp_ = function(config) {
'/extensions/platform_apps/web_view/shim/guest.html';
embedder.noReferrerGuestURL = embedder.baseGuestURL +
'/extensions/platform_apps/web_view/shim/guest_noreferrer.html';
embedder.detectUserAgentURL = embedder.baseGuestURL + '/detect-user-agent';
embedder.redirectGuestURL = embedder.baseGuestURL + '/server-redirect';
embedder.redirectGuestURLDest = embedder.baseGuestURL +
'/extensions/platform_apps/web_view/shim/guest_redirect.html';
......@@ -1083,6 +1084,52 @@ function testWebRequestAPI() {
document.body.appendChild(webview);
}
// This test verifies that the WebRequest API onBeforeSendHeaders event fires on
// webview and supports headers. This tests verifies that we can modify HTTP
// headers via the WebRequest API and those modified headers will be sent to the
// HTTP server.
function testWebRequestAPIWithHeaders() {
var webview = new WebView();
var requestFilter = {
urls: ['<all_urls>']
};
var extraInfoSpec = ['requestHeaders', 'blocking'];
webview.request.onBeforeSendHeaders.addListener(function(details) {
var headers = details.requestHeaders;
for( var i = 0, l = headers.length; i < l; ++i ) {
if (headers[i].name == 'User-Agent') {
headers[i].value = 'foobar';
break;
}
}
var blockingResponse = {};
blockingResponse.requestHeaders = headers;
return blockingResponse;
}, requestFilter, extraInfoSpec);
var loadstartCalled = false;
webview.addEventListener('loadstart', function(e) {
embedder.test.assertTrue(e.isTopLevel);
embedder.test.assertEq(embedder.detectUserAgentURL, e.url);
loadstartCalled = true;
});
webview.addEventListener('loadredirect', function(e) {
embedder.test.assertTrue(e.isTopLevel);
embedder.test.assertEq(embedder.detectUserAgentURL,
e.oldUrl.replace('127.0.0.1', 'localhost'));
embedder.test.assertEq(embedder.redirectGuestURLDest,
e.newUrl.replace('127.0.0.1', 'localhost'));
if (loadstartCalled) {
embedder.test.succeed();
} else {
embedder.test.fail();
}
});
webview.src = embedder.detectUserAgentURL;
document.body.appendChild(webview);
}
// This test verifies that the basic use cases of the declarative WebRequest API
// work as expected. This test demonstrates that rules can be added prior to
// navigation and attachment.
......@@ -1976,6 +2023,7 @@ embedder.test.testList = {
'testDeclarativeWebRequestAPISendMessage':
testDeclarativeWebRequestAPISendMessage,
'testWebRequestAPI': testWebRequestAPI,
'testWebRequestAPIWithHeaders': testWebRequestAPIWithHeaders,
'testWebRequestAPIGoogleProperty': testWebRequestAPIGoogleProperty,
'testWebRequestListenerSurvivesReparenting':
testWebRequestListenerSurvivesReparenting,
......
......@@ -36,6 +36,7 @@ namespace {
const char kEmptyResponsePath[] = "/close-socket";
const char kRedirectResponsePath[] = "/server-redirect";
const char kRedirectResponseFullPath[] = "/guest_redirect.html";
const char kUserAgentRedirectResponsePath[] = "/detect-user-agent";
const char kTestDataDirectory[] = "testDataDirectory";
const char kTestServerPort[] = "testServer.port";
const char kTestWebSocketPort[] = "testWebSocketPort";
......@@ -47,6 +48,28 @@ class EmptyHttpResponse : public net::test_server::HttpResponse {
}
};
// Handles |request| by serving a redirect response if the |User-Agent| is
// foobar.
static scoped_ptr<net::test_server::HttpResponse> UserAgentResponseHandler(
const std::string& path,
const GURL& redirect_target,
const net::test_server::HttpRequest& request) {
if (!StartsWithASCII(path, request.relative_url, true))
return scoped_ptr<net::test_server::HttpResponse>();
std::map<std::string, std::string>::const_iterator it =
request.headers.find("User-Agent");
EXPECT_TRUE(it != request.headers.end());
if (!StartsWithASCII("foobar", it->second, true))
return scoped_ptr<net::test_server::HttpResponse>();
scoped_ptr<net::test_server::BasicHttpResponse> http_response(
new net::test_server::BasicHttpResponse);
http_response->set_code(net::HTTP_MOVED_PERMANENTLY);
http_response->AddCustomHeader("Location", redirect_target.spec());
return http_response.PassAs<net::test_server::HttpResponse>();
}
// Handles |request| by serving a redirect response.
scoped_ptr<net::test_server::HttpResponse> RedirectResponseHandler(
const std::string& path,
......@@ -147,6 +170,12 @@ void WebViewAPITest::StartTestServer() {
embedded_test_server()->RegisterRequestHandler(
base::Bind(&EmptyResponseHandler, kEmptyResponsePath));
embedded_test_server()->RegisterRequestHandler(
base::Bind(
&UserAgentResponseHandler,
kUserAgentRedirectResponsePath,
embedded_test_server()->GetURL(kRedirectResponseFullPath)));
}
void WebViewAPITest::StopTestServer() {
......@@ -469,6 +498,12 @@ IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestWebRequestAPI) {
StopTestServer();
}
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestWebRequestAPIWithHeaders) {
StartTestServer();
RunTest("testWebRequestAPIWithHeaders", "web_view/apitest");
StopTestServer();
}
// Tests the existence of WebRequest API event objects on the request
// object, on the webview element, and hanging directly off webview.
IN_PROC_BROWSER_TEST_F(WebViewAPITest, TestWebRequestAPIExistence) {
......
......@@ -14,6 +14,7 @@ embedder.setUp_ = function(config) {
embedder.emptyGuestURL = embedder.baseGuestURL + '/empty_guest.html';
embedder.noReferrerGuestURL =
embedder.baseGuestURL + '/guest_noreferrer.html';
embedder.detectUserAgentURL = embedder.baseGuestURL + '/detect-user-agent';
embedder.redirectGuestURL = embedder.baseGuestURL + '/server-redirect';
embedder.redirectGuestURLDest =
embedder.baseGuestURL + '/guest_redirect.html';
......@@ -1549,6 +1550,52 @@ function testWebRequestAPI() {
document.body.appendChild(webview);
}
// This test verifies that the WebRequest API onBeforeSendHeaders event fires on
// webview and supports headers. This tests verifies that we can modify HTTP
// headers via the WebRequest API and those modified headers will be sent to the
// HTTP server.
function testWebRequestAPIWithHeaders() {
var webview = new WebView();
var requestFilter = {
urls: ['<all_urls>']
};
var extraInfoSpec = ['requestHeaders', 'blocking'];
webview.request.onBeforeSendHeaders.addListener(function(details) {
var headers = details.requestHeaders;
for( var i = 0, l = headers.length; i < l; ++i ) {
if (headers[i].name == 'User-Agent') {
headers[i].value = 'foobar';
break;
}
}
var blockingResponse = {};
blockingResponse.requestHeaders = headers;
return blockingResponse;
}, requestFilter, extraInfoSpec);
var loadstartCalled = false;
webview.addEventListener('loadstart', function(e) {
embedder.test.assertTrue(e.isTopLevel);
embedder.test.assertEq(embedder.detectUserAgentURL, e.url);
loadstartCalled = true;
});
webview.addEventListener('loadredirect', function(e) {
embedder.test.assertTrue(e.isTopLevel);
embedder.test.assertEq(embedder.detectUserAgentURL,
e.oldUrl.replace('127.0.0.1', 'localhost'));
embedder.test.assertEq(embedder.redirectGuestURLDest,
e.newUrl.replace('127.0.0.1', 'localhost'));
if (loadstartCalled) {
embedder.test.succeed();
} else {
embedder.test.fail();
}
});
webview.src = embedder.detectUserAgentURL;
document.body.appendChild(webview);
}
function testWebRequestAPIExistence() {
var apiPropertiesToCheck = [
// Declarative WebRequest API.
......@@ -1672,6 +1719,7 @@ embedder.test.testList = {
'testResizeWebviewResizesContent': testResizeWebviewResizesContent,
'testTerminateAfterExit': testTerminateAfterExit,
'testWebRequestAPI': testWebRequestAPI,
'testWebRequestAPIWithHeaders': testWebRequestAPIWithHeaders,
'testWebRequestAPIExistence': testWebRequestAPIExistence,
'testWebRequestAPIGoogleProperty': testWebRequestAPIGoogleProperty
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment