diff options
author | fsamuel <fsamuel@chromium.org> | 2014-10-09 19:40:58 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-10 02:41:44 +0000 |
commit | b4110230c811dd23cc336c9d679c6c3d13a64440 (patch) | |
tree | b6bee44f0d2e3c096e4ed934c063c6ce13077bab /extensions | |
parent | e20e3b27eda108409b5b1005af1dd988264efec7 (diff) | |
download | chromium_src-b4110230c811dd23cc336c9d679c6c3d13a64440.zip chromium_src-b4110230c811dd23cc336c9d679c6c3d13a64440.tar.gz chromium_src-b4110230c811dd23cc336c9d679c6c3d13a64440.tar.bz2 |
<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}
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/browser/guest_view/web_view/web_view_apitest.cc | 35 | ||||
-rw-r--r-- | extensions/test/data/web_view/apitest/main.js | 48 |
2 files changed, 83 insertions, 0 deletions
diff --git a/extensions/browser/guest_view/web_view/web_view_apitest.cc b/extensions/browser/guest_view/web_view/web_view_apitest.cc index 81955e0..6672a33 100644 --- a/extensions/browser/guest_view/web_view/web_view_apitest.cc +++ b/extensions/browser/guest_view/web_view/web_view_apitest.cc @@ -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) { diff --git a/extensions/test/data/web_view/apitest/main.js b/extensions/test/data/web_view/apitest/main.js index 29d6920..1287723 100644 --- a/extensions/test/data/web_view/apitest/main.js +++ b/extensions/test/data/web_view/apitest/main.js @@ -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 }; |