fune/toolkit/modules/tests/browser/browser_WebRequest_ancestors.js

54 lines
1.9 KiB
JavaScript

"use strict";
// This test requires an XMLHttpRequest constructor which isn't
// associated with a window.
const {XMLHttpRequest} = Cu.Sandbox(window, {wantGlobalProperties: ["XMLHttpRequest"]});
var {WebRequest} = ChromeUtils.import("resource://gre/modules/WebRequest.jsm", {});
var {PromiseUtils} = ChromeUtils.import("resource://gre/modules/PromiseUtils.jsm", {});
add_task(async function test_ancestors_exist() {
let deferred = PromiseUtils.defer();
function onBeforeRequest(details) {
info(`onBeforeRequest ${details.url}`);
ok(typeof details.frameAncestors === "object", `ancestors exists [${typeof details.frameAncestors}]`);
deferred.resolve();
}
WebRequest.onBeforeRequest.addListener(onBeforeRequest, {urls: new MatchPatternSet(["http://mochi.test/test/*"])}, ["blocking"]);
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://mochi.test:8888/test/");
await deferred.promise;
BrowserTestUtils.removeTab(tab);
WebRequest.onBeforeRequest.removeListener(onBeforeRequest);
});
add_task(async function test_ancestors_null() {
let deferred = PromiseUtils.defer();
function onBeforeRequest(details) {
info(`onBeforeRequest ${details.url}`);
ok(details.frameAncestors === undefined, "ancestors do not exist");
deferred.resolve();
}
WebRequest.onBeforeRequest.addListener(onBeforeRequest, null, ["blocking"]);
function fetch(url) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.mozBackgroundRequest = true;
xhr.open("GET", url);
xhr.onload = () => { resolve(xhr.responseText); };
xhr.onerror = () => { reject(xhr.status); };
// use a different contextId to avoid auth cache.
xhr.setOriginAttributes({userContextId: 1});
xhr.send();
});
}
await fetch("http://mochi.test:8888/test/");
await deferred.promise;
WebRequest.onBeforeRequest.removeListener(onBeforeRequest);
});