Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

// needs to be rooted
var cacheFlushObserver = {
observe() {
cacheFlushObserver = null;
do_send_remote_message("flushed");
},
};
// We get this from the child a bit later
var url = null;
// needs to be rooted
var cacheFlushObserver2 = {
observe() {
cacheFlushObserver2 = null;
openAltChannel();
},
};
function run_test() {
do_get_profile();
do_await_remote_message("flush").then(() => {
Services.cache2
.QueryInterface(Ci.nsICacheTesting)
.flush(cacheFlushObserver);
});
do_await_remote_message("done").then(() => {
sendCommand("URL;", load_channel);
});
run_test_in_child("../unit/test_alt-data_cross_process.js");
}
function load_channel(channelUrl) {
ok(channelUrl);
url = channelUrl; // save this to open the alt data channel later
var chan = make_channel(channelUrl);
var cc = chan.QueryInterface(Ci.nsICacheInfoChannel);
cc.preferAlternativeDataType("text/binary", "", Ci.nsICacheInfoChannel.ASYNC);
chan.asyncOpen(new ChannelListener(readTextData, null));
}
function make_channel(channelUrl) {
return NetUtil.newChannel({
uri: channelUrl,
loadUsingSystemPrincipal: true,
});
}
function readTextData(request, buffer) {
var cc = request.QueryInterface(Ci.nsICacheInfoChannel);
// Since we are in a different process from what that generated the alt-data,
// we should receive the original data, not processed content.
Assert.equal(cc.alternativeDataType, "");
Assert.equal(buffer, "response body");
// Now let's generate some alt-data in the parent, and make sure we can get it
var altContent = "altContentParentGenerated";
executeSoon(() => {
var os = cc.openAlternativeOutputStream(
"text/parent-binary",
altContent.length
);
os.write(altContent, altContent.length);
os.close();
executeSoon(() => {
Services.cache2
.QueryInterface(Ci.nsICacheTesting)
.flush(cacheFlushObserver2);
});
});
}
function openAltChannel() {
var chan = make_channel(url);
var cc = chan.QueryInterface(Ci.nsICacheInfoChannel);
cc.preferAlternativeDataType(
"text/parent-binary",
"",
Ci.nsICacheInfoChannel.ASYNC
);
chan.asyncOpen(new ChannelListener(readAltData, null));
}
function readAltData(request, buffer) {
var cc = request.QueryInterface(Ci.nsICacheInfoChannel);
// This was generated in the parent, so it's OK to get it.
Assert.equal(buffer, "altContentParentGenerated");
Assert.equal(cc.alternativeDataType, "text/parent-binary");
// FINISH
do_send_remote_message("finish");
}