Mypal/dom/security/test/unit/test_csp_upgrade_insecure_r...

108 lines
2.9 KiB
JavaScript

var Cu = Components.utils;
var Ci = Components.interfaces;
var Cc = Components.classes;
Cu.import("resource://testing-common/httpd.js");
Cu.import("resource://gre/modules/NetUtil.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
var prefs = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefBranch);
// 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.
prefs.setBoolPref("network.loadinfo.skip_type_assertion", true);
XPCOMUtils.defineLazyGetter(this, "URL", function() {
return "http://localhost:" + httpserver.identity.primaryPort;
});
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_IMG",
expectingHeader: false,
contentType: Ci.nsIContentPolicy.TYPE_IMG
},
];
function ChannelListener() {
}
ChannelListener.prototype = {
onStartRequest: function(request, context) { },
onDataAvailable: function(request, context, stream, offset, count) {
do_throw("Should not get any data!");
},
onStopRequest: function(request, context, status) {
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);
do_check_eq(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(metadata, response) {
// 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.asyncOpen2(new ChannelListener());
}
function run_test() {
// set up the test environment
httpserver = new HttpServer();
httpserver.registerPathHandler(testpath, serverHandler);
httpserver.start(-1);
run_next_test();
do_test_pending();
}