Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: debug
- Manifest: dom/security/test/unit/xpcshell.toml
const { HttpServer } = ChromeUtils.importESModule(
);
const { NetUtil } = ChromeUtils.importESModule(
"resource://gre/modules/NetUtil.sys.mjs"
);
const TEST_PATH = "/https_only_https_first_port";
var httpserver = null;
var channel = null;
var curTest = null;
const TESTS = [
{
description: "Test 1 - Default Port (scheme: http, port: default)",
expectedScheme: "https",
expectedPort: -1, // -1 == default
},
{
description: "Test 2 - Explicit Default Port (scheme: http, port: 80)",
expectedScheme: "https",
expectedPort: -1, // -1 == default
},
{
description: "Test 3 - Explicit Custom Port (scheme: http, port: 8888)",
expectedScheme: "https",
expectedPort: 8888,
},
{
description:
"Test 4 - Explicit Default Port for https (scheme: https, port: 443)",
expectedScheme: "https",
expectedPort: -1, // -1 == default
},
];
function ChannelListener() {}
ChannelListener.prototype = {
onStartRequest() {
// dummy implementation
},
onDataAvailable() {
do_throw("Should not get any data!");
},
onStopRequest(request) {
var chan = request.QueryInterface(Ci.nsIChannel);
let requestURL = chan.URI;
Assert.equal(
requestURL.scheme,
curTest.expectedScheme,
curTest.description
);
Assert.equal(requestURL.port, curTest.expectedPort, curTest.description);
Assert.equal(requestURL.host, "test1.example.com", curTest.description);
run_next_test();
},
};
function setUpPrefs() {
// set up the required prefs
Services.prefs.setBoolPref("dom.security.https_first", true);
Services.prefs.setBoolPref("dom.security.https_only_mode", false);
}
function setUpChannel() {
var chan = NetUtil.newChannel({
uri: curTest.url + TEST_PATH,
loadingPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
contentPolicyType: Ci.nsIContentPolicy.TYPE_DOCUMENT,
securityFlags: Ci.nsILoadInfo.SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
});
chan.QueryInterface(Ci.nsIHttpChannel);
chan.requestMethod = "GET";
return chan;
}
function serverHandler() {
// dummy implementation
}
function run_next_test() {
curTest = TESTS.shift();
if (!curTest) {
httpserver.stop(do_test_finished);
return;
}
channel = setUpChannel();
channel.asyncOpen(new ChannelListener());
}
function run_test() {
do_get_profile();
do_test_pending();
// set up the test environment
httpserver = new HttpServer();
httpserver.registerPathHandler(TEST_PATH, serverHandler);
httpserver.start(-1);
// set up prefs
setUpPrefs();
// run the tests
run_next_test();
}