108 lines
2.9 KiB
JavaScript
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();
|
|
}
|