Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

"use strict";
const server = createHttpServer();
const gServerUrl = `http://localhost:${server.identity.primaryPort}`;
server.registerPathHandler("/dummy", (request, response) => {
response.setStatusLine(request.httpVersion, 200, "OK");
response.write("ok");
});
add_task(async function test_cancel_with_reason() {
let ext = ExtensionTestUtils.loadExtension({
manifest: {
browser_specific_settings: { gecko: { id: "cancel@test" } },
permissions: ["webRequest", "webRequestBlocking", "<all_urls>"],
},
background() {
browser.webRequest.onBeforeRequest.addListener(
() => {
return { cancel: true };
},
{ urls: ["*://*/*"] },
["blocking"]
);
},
});
await ext.startup();
let data = await new Promise(resolve => {
let ssm = Services.scriptSecurityManager;
let channel = NetUtil.newChannel({
uri: `${gServerUrl}/dummy`,
loadingPrincipal:
ssm.createContentPrincipalFromOrigin("http://localhost"),
contentPolicyType: Ci.nsIContentPolicy.TYPE_XMLHTTPREQUEST,
securityFlags: Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
});
channel.asyncOpen({
QueryInterface: ChromeUtils.generateQI(["nsIStreamListener"]),
onStartRequest() {},
onStopRequest(request) {
let properties = request.QueryInterface(Ci.nsIPropertyBag);
let id = properties.getProperty("cancelledByExtension");
let reason = request.loadInfo.requestBlockingReason;
resolve({ reason, id });
},
onDataAvailable() {},
});
});
Assert.equal(
Ci.nsILoadInfo.BLOCKING_REASON_EXTENSION_WEBREQUEST,
data.reason,
"extension cancelled request"
);
Assert.equal(
ext.id,
data.id,
"extension id attached to channel property bag"
);
await ext.unload();
});