Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- Manifest: dom/security/test/unit/xpcshell.toml
const { HttpServer } = ChromeUtils.importESModule(
);
const { NetUtil } = ChromeUtils.importESModule(
"resource://gre/modules/NetUtil.sys.mjs"
);
// Since this test creates a TYPE_DOCUMENT channel via javascript, it will
// end up using the wrong LoadInfo constructor. Setting this pref will disable
// the ContentPolicyType assertion in the constructor.
Services.prefs.setBoolPref("network.loadinfo.skip_type_assertion", true);
ChromeUtils.defineLazyGetter(this, "URL", function () {
});
var httpserver = null;
var channel = null;
var curTest = null;
var testpath = "/footpath";
var tests = [
{
description: "should not set request header for TYPE_OTHER",
expectingHeader: false,
contentType: Ci.nsIContentPolicy.TYPE_OTHER,
},
{
description: "should set request header for TYPE_DOCUMENT",
expectingHeader: true,
contentType: Ci.nsIContentPolicy.TYPE_DOCUMENT,
},
{
description: "should set request header for TYPE_SUBDOCUMENT",
expectingHeader: true,
contentType: Ci.nsIContentPolicy.TYPE_SUBDOCUMENT,
},
{
description: "should not set request header for TYPE_IMAGE",
expectingHeader: false,
contentType: Ci.nsIContentPolicy.TYPE_IMAGE,
},
];
function ChannelListener() {}
ChannelListener.prototype = {
onStartRequest() {},
onDataAvailable() {
do_throw("Should not get any data!");
},
onStopRequest(request) {
var upgrade_insecure_header = false;
try {
if (request.getRequestHeader("Upgrade-Insecure-Requests")) {
upgrade_insecure_header = true;
}
} catch (e) {
// exception is thrown if header is not available on the request
}
// debug
// dump("executing test: " + curTest.description);
Assert.equal(upgrade_insecure_header, curTest.expectingHeader);
run_next_test();
},
};
function setupChannel(aContentType) {
var chan = NetUtil.newChannel({
uri: URL + testpath,
loadUsingSystemPrincipal: true,
contentPolicyType: aContentType,
});
chan.QueryInterface(Ci.nsIHttpChannel);
chan.requestMethod = "GET";
return chan;
}
function serverHandler() {
// no need to perform anything here
}
function run_next_test() {
curTest = tests.shift();
if (!curTest) {
httpserver.stop(do_test_finished);
return;
}
channel = setupChannel(curTest.contentType);
channel.asyncOpen(new ChannelListener());
}
function run_test() {
do_get_profile();
// set up the test environment
httpserver = new HttpServer();
httpserver.registerPathHandler(testpath, serverHandler);
httpserver.start(-1);
run_next_test();
do_test_pending();
}