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

Unified Diff: chrome/test/data/extensions/api_test/webrequest/framework.js

Issue 7606010: Revert r96075 Split ExtensionWebRequestApiTest.WebRequestEvents into multiple (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 months 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: chrome/test/data/extensions/api_test/webrequest/framework.js
diff --git a/chrome/test/data/extensions/api_test/webrequest/framework.js b/chrome/test/data/extensions/api_test/webrequest/framework.js
deleted file mode 100644
index 7f84d0039afa19feafd7d31d213d0a6663897f2a..0000000000000000000000000000000000000000
--- a/chrome/test/data/extensions/api_test/webrequest/framework.js
+++ /dev/null
@@ -1,237 +0,0 @@
-var getURL = chrome.extension.getURL;
-var deepEq = chrome.test.checkDeepEq;
-var expectedEventData;
-var capturedEventData;
-var expectedEventOrder;
-var tabId;
-var testServerPort;
-var eventsCaptured;
-
-function runTests(tests) {
- chrome.tabs.create({url: "about:blank"}, function(tab) {
- tabId = tab.id;
- chrome.test.getConfig(function(config) {
- testServerPort = config.testServer.port;
- chrome.test.runTests(tests);
- });
- });
-}
-
-// Returns an URL from the test server, fixing up the port. Must be called
-// from within a test case passed to runTests.
-function getServerURL(path) {
- if (!testServerPort)
- throw new Error("Called getServerURL outside of runTests.");
- return "http://www.a.com:" + testServerPort + "/" + path;
-}
-
-// Helper to advance to the next test only when the tab has finished loading.
-// This is because tabs.update can sometimes fail if the tab is in the middle
-// of a navigation (from the previous test), resulting in flakiness.
-function navigateAndWait(url, callback) {
- var done = chrome.test.listenForever(chrome.tabs.onUpdated,
- function (_, info, tab) {
- if (tab.id == tabId && info.status == "complete") {
- if (callback) callback();
- done();
- }
- });
- chrome.tabs.update(tabId, {url: url});
-}
-
-// data: array of extected events, each one is a dictionary:
-// { label: "<unique identifier>",
-// event: "<webrequest event type>",
-// details: { <expected details of the webrequest event> },
-// retval: { <dictionary that the event handler shall return> } (optional)
-// }
-// order: an array of sequences, e.g. [ ["a", "b", "c"], ["d", "e"] ] means that
-// event with label "a" needs to occur before event with label "b". The
-// relative order of "a" and "d" does not matter.
-// filter: filter dictionary passed on to the event subscription of the
-// webRequest API.
-// extraInfoSpec: the union of all desired extraInfoSpecs for the events.
-function expect(data, order, filter, extraInfoSpec) {
- expectedEventData = data;
- capturedEventData = [];
- expectedEventOrder = order;
- eventsCaptured = chrome.test.callbackAdded();
- tabAndFrameUrls = {}; // Maps "{tabId}-{frameId}" to the URL of the frame.
- removeListeners();
- initListeners(filter || {}, extraInfoSpec || []);
-}
-
-function checkExpectations() {
- if (capturedEventData.length < expectedEventData.length) {
- return;
- }
- if (capturedEventData.length > expectedEventData.length) {
- chrome.test.fail("Recorded too many events. " +
- JSON.stringify(capturedEventData));
- return;
- }
- // We have ensured that capturedEventData contains exactly the same elements
- // as expectedEventData. Now we need to verify the ordering.
- // Step 1: build positions such that
- // positions[<event-label>]=<position of this event in capturedEventData>
- var curPos = 0;
- var positions = {}
- capturedEventData.forEach(function (event) {
- chrome.test.assertTrue(event.hasOwnProperty("label"));
- positions[event.label] = curPos;
- curPos++;
- });
- // Step 2: check that elements arrived in correct order
- expectedEventOrder.forEach(function (order) {
- var previousLabel = undefined;
- order.forEach(function(label) {
- if (previousLabel === undefined) {
- previousLabel = label;
- return;
- }
- chrome.test.assertTrue(positions[previousLabel] < positions[label],
- "Event " + previousLabel + " is supposed to arrive before " +
- label + ".");
- previousLabel = label;
- });
- });
-
- eventsCaptured();
-}
-
-// Simple check to see that we have a User-Agent header, and that it contains
-// an expected value. This is a basic check that the request headers are valid.
-function checkUserAgent(headers) {
- for (var i in headers) {
- if (headers[i].name.toLowerCase() == "user-agent")
- return headers[i].value.toLowerCase().indexOf("chrome") != -1;
- }
- return false;
-}
-
-function captureEvent(name, details) {
- // Ignore system-level requests like safebrowsing updates and favicon fetches
- // since they are unpredictable.
- if (details.tabId == -1 || details.type == "other" ||
- details.url.match(/\/favicon.ico$/) ||
- details.url.match(/https:\/\/dl.google.com/))
- return;
-
- // Pull the extra per-event options out of the expected data. These let
- // us specify special return values per event.
- var currentIndex = capturedEventData.length;
- var extraOptions;
- if (expectedEventData.length > currentIndex) {
- retval = expectedEventData[currentIndex].retval;
- }
-
- // Check that the frameId can be used to reliably determine the URL of the
- // frame that caused requests.
- if (name == "onBeforeRequest") {
- chrome.test.assertTrue('frameId' in details &&
- typeof details.frameId === 'number');
- chrome.test.assertTrue('tabId' in details &&
- typeof details.tabId === 'number');
- var key = details.tabId + "-" + details.frameId;
- if (details.type == "main_frame" || details.type == "sub_frame") {
- tabAndFrameUrls[key] = details.url;
- }
- details.frameUrl = tabAndFrameUrls[key] || "unknown frame URL";
- }
- delete details.frameId;
-
- delete details.requestId;
- delete details.timeStamp;
- if (details.requestHeaders) {
- details.requestHeadersValid = checkUserAgent(details.requestHeaders);
- delete details.requestHeaders;
- }
- if (details.responseHeaders) {
- details.responseHeadersExist = true;
- delete details.responseHeaders;
- }
-
- // find |details| in expectedEventData
- var found = false;
- var label = undefined;
- expectedEventData.forEach(function (exp) {
- if (deepEq(exp.event, name) && deepEq(exp.details, details)) {
- if (found) {
- chrome.test.fail("Received event twice '" + name + "':" +
- JSON.stringify(details));
- } else {
- found = true;
- label = exp.label;
- }
- }
- });
- if (!found) {
- chrome.test.fail("Received unexpected event '" + name + "':" +
- JSON.stringify(details));
- }
-
- capturedEventData.push({label: label, event: name, details: details});
- checkExpectations();
- return retval;
-}
-
-// Simple array intersection. We use this to filter extraInfoSpec so
-// that only the allowed specs are sent to each listener.
-function intersect(array1, array2) {
- return array1.filter(function(x) { return array2.indexOf(x) != -1; });
-}
-
-function initListeners(filter, extraInfoSpec) {
- chrome.experimental.webRequest.onBeforeRequest.addListener(
- function(details) {
- return captureEvent("onBeforeRequest", details);
- }, filter, intersect(extraInfoSpec, ["blocking"]));
- chrome.experimental.webRequest.onBeforeSendHeaders.addListener(
- function(details) {
- return captureEvent("onBeforeSendHeaders", details);
- }, filter, intersect(extraInfoSpec, ["blocking", "requestHeaders"]));
- chrome.experimental.webRequest.onSendHeaders.addListener(
- function(details) {
- return captureEvent("onSendHeaders", details);
- }, filter, intersect(extraInfoSpec, ["requestHeaders"]));
- chrome.experimental.webRequest.onAuthRequired.addListener(
- function(details) {
- return captureEvent("onAuthRequired", details);
- }, filter, intersect(extraInfoSpec, ["responseHeaders", "statusLine"]));
- chrome.experimental.webRequest.onResponseStarted.addListener(
- function(details) {
- return captureEvent("onResponseStarted", details);
- }, filter, intersect(extraInfoSpec, ["responseHeaders", "statusLine"]));
- chrome.experimental.webRequest.onBeforeRedirect.addListener(
- function(details) {
- return captureEvent("onBeforeRedirect", details);
- }, filter, intersect(extraInfoSpec, ["responseHeaders", "statusLine"]));
- chrome.experimental.webRequest.onCompleted.addListener(
- function(details) {
- return captureEvent("onCompleted", details);
- }, filter, intersect(extraInfoSpec, ["responseHeaders", "statusLine"]));
- chrome.experimental.webRequest.onErrorOccurred.addListener(
- function(details) {
- return captureEvent("onErrorOccurred", details);
- }, filter);
-}
-
-function removeListeners() {
- function helper(event) {
- // Note: We're poking at the internal event data, but it's easier than
- // the alternative. If this starts failing, we just need to update this
- // helper.
- for (var cb in event.callbackMap_) {
- event.removeListener(cb);
- }
- chrome.test.assertFalse(event.hasListeners());
- }
- helper(chrome.experimental.webRequest.onBeforeRequest);
- helper(chrome.experimental.webRequest.onBeforeSendHeaders);
- helper(chrome.experimental.webRequest.onAuthRequired);
- helper(chrome.experimental.webRequest.onSendHeaders);
- helper(chrome.experimental.webRequest.onResponseStarted);
- helper(chrome.experimental.webRequest.onBeforeRedirect);
- helper(chrome.experimental.webRequest.onCompleted);
- helper(chrome.experimental.webRequest.onErrorOccurred);
-}

Powered by Google App Engine
This is Rietveld 408576698