| Index: chrome/test/data/extensions/api_test/webrequest/test_blocking.html
|
| ===================================================================
|
| --- chrome/test/data/extensions/api_test/webrequest/test_blocking.html (revision 112565)
|
| +++ chrome/test/data/extensions/api_test/webrequest/test_blocking.html (working copy)
|
| @@ -1,634 +1,7 @@
|
| -<script src="framework.js">
|
| -</script>
|
| -<script>
|
| -var pass = chrome.test.callbackPass;
|
| -
|
| -// Constants as functions, not to be called until after runTests.
|
| -function getURLEchoUserAgent() {
|
| - return getServerURL('echoheader?User-Agent');
|
| -}
|
| -
|
| -function getURLSetCookie() {
|
| - return getServerURL('set-cookie?Foo=Bar');
|
| -}
|
| -
|
| -function getURLNonUTF8SetCookie() {
|
| - return getServerURL('set-header?Set-Cookie%3A%20Foo%3D%FE%D1');
|
| -}
|
| -
|
| -function getURLHttpSimpleLoad() {
|
| - return getServerURL('files/extensions/api_test/webrequest/simpleLoad/a.html');
|
| -}
|
| -function getURLHttpXHRData() {
|
| - return getServerURL('files/extensions/api_test/webrequest/xhr/data.json');
|
| -}
|
| -
|
| -function toCharCodes(str) {
|
| - var result = [];
|
| - for (var i = 0; i < str.length; ++i) {
|
| - result[i] = str.charCodeAt(i);
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -runTests([
|
| - // Navigates to a page with subresources, with a blocking handler that
|
| - // cancels the page request. The page will not load, and we should not
|
| - // see the subresources.
|
| - function complexLoadCancelled() {
|
| - expect(
|
| - [ // events
|
| - { label: "onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - type: "main_frame",
|
| - url: getURL("complexLoad/b.html"),
|
| - frameUrl: getURL("complexLoad/b.html")
|
| - },
|
| - retval: {cancel: true}
|
| - },
|
| - // Cancelling is considered an error.
|
| - { label: "onErrorOccurred",
|
| - event: "onErrorOccurred",
|
| - details: {
|
| - url: getURL("complexLoad/b.html"),
|
| - fromCache: false,
|
| - error: "net::ERR_BLOCKED_BY_CLIENT"
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["onBeforeRequest", "onErrorOccurred"]
|
| - ],
|
| - {}, // filter
|
| - ["blocking"]);
|
| - navigateAndWait(getURL("complexLoad/b.html"));
|
| - },
|
| -
|
| - // Navigates to a page with subresources, with a blocking handler that
|
| - // cancels the page request. The page will not load, and we should not
|
| - // see the subresources.
|
| - function simpleLoadCancelledOnReceiveHeaders() {
|
| - expect(
|
| - [ // events
|
| - { label: "onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - method: "GET",
|
| - type: "main_frame",
|
| - url: getURLHttpSimpleLoad(),
|
| - frameUrl: getURLHttpSimpleLoad()
|
| - },
|
| - retval: {cancel: false}
|
| - },
|
| - { label: "onBeforeSendHeaders",
|
| - event: "onBeforeSendHeaders",
|
| - details: {
|
| - url: getURLHttpSimpleLoad(),
|
| - // Note: no requestHeaders because we don't ask for them.
|
| - },
|
| - },
|
| - { label: "onSendHeaders",
|
| - event: "onSendHeaders",
|
| - details: {
|
| - url: getURLHttpSimpleLoad()
|
| - }
|
| - },
|
| - { label: "onHeadersReceived",
|
| - event: "onHeadersReceived",
|
| - details: {
|
| - url: getURLHttpSimpleLoad(),
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - },
|
| - retval: {cancel: true}
|
| - },
|
| - // Cancelling is considered an error.
|
| - { label: "onErrorOccurred",
|
| - event: "onErrorOccurred",
|
| - details: {
|
| - url: getURLHttpSimpleLoad(),
|
| - fromCache: false,
|
| - error: "net::ERR_BLOCKED_BY_CLIENT"
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
|
| - "onHeadersReceived", "onErrorOccurred"]
|
| - ],
|
| - {}, // filter
|
| - ["blocking"]);
|
| - navigateAndWait(getURLHttpSimpleLoad());
|
| - },
|
| -
|
| - // Navigates to a page with a blocking handler that redirects to a different
|
| - // page.
|
| - // TODO(mpcomplete): We should see an onBeforeRedirect as well, but our
|
| - // process switching logic cancels the original redirect request and
|
| - // starts a new one instead. See http://crbug.com/79520.
|
| - function complexLoadRedirected() {
|
| - expect(
|
| - [ // events
|
| - { label: "onBeforeRequest-1",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - url: getURL("complexLoad/a.html"),
|
| - frameUrl: getURL("complexLoad/a.html")
|
| - },
|
| - retval: {redirectUrl: getURL("simpleLoad/a.html")}
|
| - },
|
| - { label: "onErrorOccurred-1",
|
| - event: "onErrorOccurred",
|
| - details: {
|
| - url: getURL("complexLoad/a.html"),
|
| - fromCache: false,
|
| - error: "net::ERR_ABORTED"
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - { label: "onBeforeRequest-2",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - url: getURL("simpleLoad/a.html"),
|
| - frameUrl: getURL("simpleLoad/a.html"),
|
| - },
|
| - },
|
| - { label: "onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURL("simpleLoad/a.html"),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - statusLine: "HTTP/1.1 200 OK",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - { label: "onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURL("simpleLoad/a.html"),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - statusLine: "HTTP/1.1 200 OK",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["onBeforeRequest-1", "onErrorOccurred-1", "onBeforeRequest-2",
|
| - "onResponseStarted", "onCompleted"],
|
| - ],
|
| - {}, // filter
|
| - ["blocking"]);
|
| - navigateAndWait(getURL("complexLoad/a.html"));
|
| - },
|
| -
|
| - // Loads a testserver page that echoes the User-Agent header that was
|
| - // sent to fetch it. We modify the outgoing User-Agent in
|
| - // onBeforeSendHeaders, so we should see that modified version.
|
| - function modifyRequestHeaders() {
|
| - expect(
|
| - [ // events
|
| - { label: "onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - frameUrl: getURLEchoUserAgent()
|
| - }
|
| - },
|
| - { label: "onBeforeSendHeaders",
|
| - event: "onBeforeSendHeaders",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - // Note: no requestHeaders because we don't ask for them.
|
| - },
|
| - retval: {requestHeaders: [{name: "User-Agent", value: "FoobarUA"}]}
|
| - },
|
| - { label: "onSendHeaders",
|
| - event: "onSendHeaders",
|
| - details: {
|
| - url: getURLEchoUserAgent()
|
| - }
|
| - },
|
| - { label: "onHeadersReceived",
|
| - event: "onHeadersReceived",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - }
|
| - },
|
| - { label: "onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - ip: "127.0.0.1",
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - }
|
| - },
|
| - { label: "onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - ip: "127.0.0.1",
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
|
| - "onHeadersReceived", "onResponseStarted", "onCompleted"]
|
| - ],
|
| - {}, ["blocking"]);
|
| - // Check the page content for our modified User-Agent string.
|
| - navigateAndWait(getURLEchoUserAgent(), function() {
|
| - chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
|
| - chrome.test.assertTrue(request.pass, "Request header was not set.");
|
| - });
|
| - chrome.tabs.executeScript(tabId,
|
| - {
|
| - code: "chrome.extension.sendRequest(" +
|
| - "{pass: document.body.innerText.indexOf('FoobarUA') >= 0});"
|
| - });
|
| - });
|
| - },
|
| -
|
| - // Loads a testserver page that echoes the User-Agent header that was
|
| - // sent to fetch it. We modify the outgoing User-Agent in
|
| - // onBeforeSendHeaders, so we should see that modified version.
|
| - // In this version we check whether we can set binary header values.
|
| - function modifyBinaryRequestHeaders() {
|
| - expect(
|
| - [ // events
|
| - { label: "onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - frameUrl: getURLEchoUserAgent()
|
| - }
|
| - },
|
| - { label: "onBeforeSendHeaders",
|
| - event: "onBeforeSendHeaders",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - // Note: no requestHeaders because we don't ask for them.
|
| - },
|
| - retval: {requestHeaders: [{name: "User-Agent",
|
| - binaryValue: toCharCodes("FoobarUA")}]}
|
| - },
|
| - { label: "onSendHeaders",
|
| - event: "onSendHeaders",
|
| - details: {
|
| - url: getURLEchoUserAgent()
|
| - }
|
| - },
|
| - { label: "onHeadersReceived",
|
| - event: "onHeadersReceived",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - }
|
| - },
|
| - { label: "onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - ip: "127.0.0.1",
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - }
|
| - },
|
| - { label: "onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURLEchoUserAgent(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - ip: "127.0.0.1",
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
|
| - "onHeadersReceived", "onResponseStarted", "onCompleted"]
|
| - ],
|
| - {}, ["blocking"]);
|
| - // Check the page content for our modified User-Agent string.
|
| - navigateAndWait(getURLEchoUserAgent(), function() {
|
| - chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
|
| - chrome.test.assertTrue(request.pass, "Request header was not set.");
|
| - });
|
| - chrome.tabs.executeScript(tabId,
|
| - {
|
| - code: "chrome.extension.sendRequest(" +
|
| - "{pass: document.body.innerText.indexOf('FoobarUA') >= 0});"
|
| - });
|
| - });
|
| - },
|
| -
|
| - // Loads a testserver page that sets a cookie "Foo=Bar" but removes
|
| - // the cookies from the response headers so that they are not set.
|
| - function modifyResponseHeaders() {
|
| - expect(
|
| - [ // events
|
| - { label: "onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - method: "GET",
|
| - type: "main_frame",
|
| - url: getURLSetCookie(),
|
| - frameUrl: getURLSetCookie()
|
| - }
|
| - },
|
| - { label: "onBeforeSendHeaders",
|
| - event: "onBeforeSendHeaders",
|
| - details: {
|
| - url: getURLSetCookie(),
|
| - // Note: no requestHeaders because we don't ask for them.
|
| - },
|
| - },
|
| - { label: "onSendHeaders",
|
| - event: "onSendHeaders",
|
| - details: {
|
| - url: getURLSetCookie(),
|
| - }
|
| - },
|
| - { label: "onHeadersReceived",
|
| - event: "onHeadersReceived",
|
| - details: {
|
| - url: getURLSetCookie(),
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - responseHeadersExist: true,
|
| - },
|
| - retval_function: function(name, details) {
|
| - responseHeaders = details.responseHeaders;
|
| - var found = false;
|
| - for (var i = 0; i < responseHeaders.length; ++i) {
|
| - if (responseHeaders[i].name === "Set-Cookie" &&
|
| - responseHeaders[i].value.indexOf("Foo") != -1) {
|
| - found = true;
|
| - responseHeaders.splice(i);
|
| - break;
|
| - }
|
| - }
|
| - chrome.test.assertTrue(found);
|
| - return {responseHeaders: responseHeaders};
|
| - }
|
| - },
|
| - { label: "onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURLSetCookie(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - ip: "127.0.0.1",
|
| - responseHeadersExist: true,
|
| - }
|
| - },
|
| - { label: "onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURLSetCookie(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - ip: "127.0.0.1",
|
| - responseHeadersExist: true,
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
|
| - "onHeadersReceived", "onResponseStarted", "onCompleted"]
|
| - ],
|
| - {}, ["blocking", "responseHeaders"]);
|
| - // Check that the cookie was really removed.
|
| - navigateAndWait(getURLSetCookie(), function() {
|
| - chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
|
| - chrome.test.assertTrue(request.pass, "Cookie was not removed.");
|
| - });
|
| - chrome.tabs.executeScript(tabId,
|
| - { code: "chrome.extension.sendRequest(" +
|
| - "{pass: document.cookie.indexOf('Foo') == -1});"
|
| - });
|
| - });
|
| - },
|
| -
|
| - // Loads a testserver page that sets a cookie "Foo=U+FDD1" which is not a
|
| - // valid UTF-8 code point. Therefore, it cannot be passed to JavaScript
|
| - // as a normal string.
|
| - function handleNonUTF8InModifyResponseHeaders() {
|
| - expect(
|
| - [ // events
|
| - { label: "onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - method: "GET",
|
| - type: "main_frame",
|
| - url: getURLNonUTF8SetCookie(),
|
| - frameUrl: getURLNonUTF8SetCookie()
|
| - }
|
| - },
|
| - { label: "onBeforeSendHeaders",
|
| - event: "onBeforeSendHeaders",
|
| - details: {
|
| - url: getURLNonUTF8SetCookie(),
|
| - // Note: no requestHeaders because we don't ask for them.
|
| - },
|
| - },
|
| - { label: "onSendHeaders",
|
| - event: "onSendHeaders",
|
| - details: {
|
| - url: getURLNonUTF8SetCookie(),
|
| - }
|
| - },
|
| - { label: "onHeadersReceived",
|
| - event: "onHeadersReceived",
|
| - details: {
|
| - url: getURLNonUTF8SetCookie(),
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - responseHeadersExist: true,
|
| - },
|
| - retval_function: function(name, details) {
|
| - console.log(JSON.stringify(details));
|
| - responseHeaders = details.responseHeaders;
|
| - var found = false;
|
| - var expectedValue = [
|
| - "F".charCodeAt(0),
|
| - "o".charCodeAt(0),
|
| - "o".charCodeAt(0),
|
| - 0x3D, 0xFE, 0xD1
|
| - ];
|
| -
|
| - for (var i = 0; i < responseHeaders.length; ++i) {
|
| - if (responseHeaders[i].name === "Set-Cookie" &&
|
| - deepEq(responseHeaders[i].binaryValue, expectedValue)) {
|
| - found = true;
|
| - responseHeaders.splice(i);
|
| - break;
|
| - }
|
| - }
|
| - chrome.test.assertTrue(found);
|
| - return {responseHeaders: responseHeaders};
|
| - }
|
| - },
|
| - { label: "onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURLNonUTF8SetCookie(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - ip: "127.0.0.1",
|
| - responseHeadersExist: true,
|
| - }
|
| - },
|
| - { label: "onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURLNonUTF8SetCookie(),
|
| - fromCache: false,
|
| - statusCode: 200,
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - ip: "127.0.0.1",
|
| - responseHeadersExist: true,
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
|
| - "onHeadersReceived", "onResponseStarted", "onCompleted"]
|
| - ],
|
| - {}, ["blocking", "responseHeaders"]);
|
| - // Check that the cookie was really removed.
|
| - navigateAndWait(getURLNonUTF8SetCookie(), function() {
|
| - chrome.test.listenOnce(chrome.extension.onRequest, function(request) {
|
| - chrome.test.assertTrue(request.pass, "Cookie was not removed.");
|
| - });
|
| - chrome.tabs.executeScript(tabId,
|
| - { code: "chrome.extension.sendRequest(" +
|
| - "{pass: document.cookie.indexOf('Foo') == -1});"
|
| - });
|
| - });
|
| - },
|
| -
|
| - // Checks that XHR requests from ourself are invisible to blocking handlers.
|
| - function xhrsFromOurselfAreInvisible() {
|
| - expect(
|
| - [ // events
|
| - { label: "a-onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - url: getURL("simpleLoad/a.html"),
|
| - frameUrl: getURL("simpleLoad/a.html")
|
| - }
|
| - },
|
| - { label: "a-onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURL("simpleLoad/a.html"),
|
| - statusCode: 200,
|
| - fromCache: false,
|
| - statusLine: "HTTP/1.1 200 OK",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - { label: "a-onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURL("simpleLoad/a.html"),
|
| - statusCode: 200,
|
| - fromCache: false,
|
| - statusLine: "HTTP/1.1 200 OK",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - // We do not see onBeforeRequest for the XHR request here because it is
|
| - // handled by a blocking handler.
|
| - { label: "x-onSendHeaders",
|
| - event: "onSendHeaders",
|
| - details: {
|
| - url: getURLHttpXHRData(),
|
| - tabId: 1,
|
| - type: "xmlhttprequest",
|
| - }
|
| - },
|
| - { label: "x-onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURLHttpXHRData(),
|
| - statusCode: 200,
|
| - fromCache: false,
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - tabId: 1,
|
| - type: "xmlhttprequest",
|
| - ip: "127.0.0.1",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - { label: "x-onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURLHttpXHRData(),
|
| - statusCode: 200,
|
| - fromCache: false,
|
| - statusLine: "HTTP/1.0 200 OK",
|
| - tabId: 1,
|
| - type: "xmlhttprequest",
|
| - ip: "127.0.0.1",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - { label: "b-onBeforeRequest",
|
| - event: "onBeforeRequest",
|
| - details: {
|
| - url: getURL("complexLoad/b.jpg"),
|
| - frameUrl: getURL("complexLoad/b.jpg")
|
| - }
|
| - },
|
| - { label: "b-onResponseStarted",
|
| - event: "onResponseStarted",
|
| - details: {
|
| - url: getURL("complexLoad/b.jpg"),
|
| - statusCode: 200,
|
| - fromCache: false,
|
| - statusLine: "HTTP/1.1 200 OK",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - { label: "b-onCompleted",
|
| - event: "onCompleted",
|
| - details: {
|
| - url: getURL("complexLoad/b.jpg"),
|
| - statusCode: 200,
|
| - fromCache: false,
|
| - statusLine: "HTTP/1.1 200 OK",
|
| - // Request to chrome-extension:// url has no IP.
|
| - }
|
| - },
|
| - ],
|
| - [ // event order
|
| - ["a-onBeforeRequest", "a-onResponseStarted", "a-onCompleted",
|
| - "x-onSendHeaders", "x-onResponseStarted", "x-onCompleted",
|
| - "b-onBeforeRequest", "b-onResponseStarted", "b-onCompleted"]
|
| - ],
|
| - {}, ["blocking"]);
|
| - // Check the page content for our modified User-Agent string.
|
| - navigateAndWait(getURL("simpleLoad/a.html"), function() {
|
| - var req = new XMLHttpRequest();
|
| - var asynchronous = false;
|
| - req.open("GET", getURLHttpXHRData(), asynchronous);
|
| - req.send(null);
|
| - navigateAndWait(getURL("complexLoad/b.jpg"));
|
| - });
|
| - },
|
| -]);
|
| -</script>
|
| +<!--
|
| + * Copyright (c) 2011 The Chromium Authors. All rights reserved. Use of this
|
| + * source code is governed by a BSD-style license that can be found in the
|
| + * LICENSE file.
|
| +-->
|
| +<script src="framework.js"></script>
|
| +<script src="test_blocking.js"></script>
|
|
|