Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
// tests the registerPrefixHandler API
ChromeUtils.defineLazyGetter(this, "BASE", function () {
});
function nocache(ch) {
ch.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE; // important!
}
function notFound(ch) {
Assert.equal(ch.responseStatus, 404);
Assert.ok(!ch.requestSucceeded);
}
function makeCheckOverride(magic) {
return function checkOverride(ch) {
Assert.equal(ch.responseStatus, 200);
Assert.equal(ch.responseStatusText, "OK");
Assert.ok(ch.requestSucceeded);
Assert.equal(ch.getResponseHeader("Override-Succeeded"), magic);
};
}
ChromeUtils.defineLazyGetter(this, "tests", function () {
return [
new Test(
BASE + "/prefix/dummy",
prefixHandler,
null,
makeCheckOverride("prefix")
),
new Test(
BASE + "/prefix/dummy",
pathHandler,
null,
makeCheckOverride("path")
),
new Test(
BASE + "/prefix/subpath/dummy",
longerPrefixHandler,
null,
makeCheckOverride("subpath")
),
new Test(BASE + "/prefix/dummy", removeHandlers, null, notFound),
new Test(
BASE + "/prefix/subpath/dummy",
newPrefixHandler,
null,
makeCheckOverride("subpath")
),
];
});
/** *************************
* registered prefix handler *
***************************/
function prefixHandler(channel) {
nocache(channel);
srv.registerPrefixHandler("/prefix/", makeOverride("prefix"));
}
/** ******************************
* registered path handler on top *
********************************/
function pathHandler(channel) {
nocache(channel);
srv.registerPathHandler("/prefix/dummy", makeOverride("path"));
}
/** ********************************
* registered longer prefix handler *
**********************************/
function longerPrefixHandler(channel) {
nocache(channel);
srv.registerPrefixHandler("/prefix/subpath/", makeOverride("subpath"));
}
/** **********************
* removed prefix handler *
************************/
function removeHandlers(channel) {
nocache(channel);
srv.registerPrefixHandler("/prefix/", null);
srv.registerPathHandler("/prefix/dummy", null);
}
/** ***************************
* re-register shorter handler *
*****************************/
function newPrefixHandler(channel) {
nocache(channel);
srv.registerPrefixHandler("/prefix/", makeOverride("prefix"));
}
var srv;
function run_test() {
// Ensure the profile exists.
do_get_profile();
srv = createServer();
srv.start(-1);
runHttpTests(tests, testComplete(srv));
}
// PATH HANDLERS
// generate an override
function makeOverride(magic) {
return function override(metadata, response) {
response.setStatusLine("1.1", 200, "OK");
response.setHeader("Override-Succeeded", magic, false);
var body = "success!";
response.bodyOutputStream.write(body, body.length);
};
}