From b4110230c811dd23cc336c9d679c6c3d13a64440 Mon Sep 17 00:00:00 2001 From: fsamuel Date: Thu, 9 Oct 2014 19:40:58 -0700 Subject: : 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} --- .../guest_view/web_view/web_view_apitest.cc | 35 ++++++++++++++++ extensions/test/data/web_view/apitest/main.js | 48 ++++++++++++++++++++++ 2 files changed, 83 insertions(+) (limited to 'extensions') 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 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(); + + std::map::const_iterator it = + request.headers.find("User-Agent"); + EXPECT_TRUE(it != request.headers.end()); + if (!StartsWithASCII("foobar", it->second, true)) + return scoped_ptr(); + + scoped_ptr 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(); +} + // Handles |request| by serving a redirect response. scoped_ptr 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: [''] + }; + 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 }; -- cgit v1.1