Source code

Revision control

Copy as Markdown

Other Tools

/* global NetUtil, ChannelListener */
"use strict";
function inChildProcess() {
return (
// eslint-disable-next-line mozilla/use-services
Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime)
.processType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT
);
}
let uri = null;
function makeChan() {
return NetUtil.newChannel({
uri,
loadUsingSystemPrincipal: true,
}).QueryInterface(Ci.nsIHttpChannel);
}
function OpenChannelPromise(aChannel, aClosure) {
return new Promise(resolve => {
function processResponse(request, buffer, context) {
aClosure(request.QueryInterface(Ci.nsIHttpChannel), buffer, context);
resolve();
}
aChannel.asyncOpen(new ChannelListener(processResponse, null));
});
}
// This test doesn't do much, except to communicate with the parent, and get
// URL we need to connect to.
add_task(async function setup() {
ok(inChildProcess(), "Sanity check. This should run in the child process");
// Initialize the URL. Parent runs the server
do_send_remote_message("start-test");
uri = await do_await_remote_message("start-test-done");
});
// This test performs a request, and checks that no cookie header are visible
// to the child process
add_task(async function test1() {
let chan = makeChan();
await OpenChannelPromise(chan, (request, buffer) => {
equal(buffer, "response");
Assert.throws(
() => request.getRequestHeader("Cookie"),
/NS_ERROR_NOT_AVAILABLE/,
"Cookie header should not be visible on request in the child"
);
Assert.throws(
() => request.getResponseHeader("Set-Cookie"),
/NS_ERROR_NOT_AVAILABLE/,
"Cookie header should not be visible on response in the child"
);
});
// We also check that a cookie was saved by the Set-Cookie header
// in the parent.
do_send_remote_message("check-cookie-count");
let count = await do_await_remote_message("check-cookie-count-done");
equal(count, 1);
});
// This test communicates with the parent, to locally save a new cookie.
// Then it performs another request, makes sure no cookie headers are visible,
// after which it checks that both cookies are visible to the parent.
add_task(async function test2() {
do_send_remote_message("set-cookie");
await do_await_remote_message("set-cookie-done");
let chan = makeChan();
await OpenChannelPromise(chan, (request, buffer) => {
equal(buffer, "response");
Assert.throws(
() => request.getRequestHeader("Cookie"),
/NS_ERROR_NOT_AVAILABLE/,
"Cookie header should not be visible on request in the child"
);
Assert.throws(
() => request.getResponseHeader("Set-Cookie"),
/NS_ERROR_NOT_AVAILABLE/,
"Cookie header should not be visible on response in the child"
);
});
// We should have two cookies. One set by the Set-Cookie header sent by the
// server, and one that was manually set in the parent.
do_send_remote_message("second-check-cookie-count");
let count = await do_await_remote_message("second-check-cookie-count-done");
equal(count, 2);
});