Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / netwerk / test / unit / test_cache_jar.js
blob1ab93980a60cc79bc2f2c5a1f21f64e8ef61fae2
1 "use strict";
3 const { HttpServer } = ChromeUtils.importESModule(
4 "resource://testing-common/httpd.sys.mjs"
5 );
7 ChromeUtils.defineLazyGetter(this, "URL", function () {
8 return "http://localhost:" + httpserv.identity.primaryPort + "/cached";
9 });
11 var httpserv = null;
12 var handlers_called = 0;
14 function cached_handler(metadata, response) {
15 response.setHeader("Content-Type", "text/plain", false);
16 response.setHeader("Cache-Control", "max-age=10000", false);
17 response.setStatusLine(metadata.httpVersion, 200, "OK");
18 var body = "0123456789";
19 response.bodyOutputStream.write(body, body.length);
20 handlers_called++;
23 function makeChan(url, userContextId) {
24 var chan = NetUtil.newChannel({
25 uri: url,
26 loadUsingSystemPrincipal: true,
27 }).QueryInterface(Ci.nsIHttpChannel);
28 chan.loadInfo.originAttributes = { userContextId };
29 return chan;
32 // [userContextId, expected_handlers_called]
33 var firstTests = [
34 [0, 1],
35 [1, 1],
37 var secondTests = [
38 [0, 0],
39 [1, 1],
40 [1, 0],
43 async function run_all_tests() {
44 for (let test of firstTests) {
45 handlers_called = 0;
46 await test_channel(...test);
49 // We can't easily cause webapp data to be cleared from the child process, so skip
50 // the rest of these tests.
51 let procType = Services.appinfo.processType;
52 if (procType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT) {
53 return;
56 Services.clearData.deleteDataFromOriginAttributesPattern({
57 userContextId: 1,
58 });
60 for (let test of secondTests) {
61 handlers_called = 0;
62 await test_channel(...test);
66 function run_test() {
67 do_get_profile();
69 do_test_pending();
71 Services.prefs.setBoolPref("network.http.rcwn.enabled", false);
73 httpserv = new HttpServer();
74 httpserv.registerPathHandler("/cached", cached_handler);
75 httpserv.start(-1);
76 run_all_tests().then(() => {
77 do_test_finished();
78 });
81 function test_channel(userContextId, expected) {
82 return new Promise(resolve => {
83 var chan = makeChan(URL, userContextId);
84 chan.asyncOpen(
85 new ChannelListener(doneFirstLoad.bind(null, resolve), expected)
87 });
90 function doneFirstLoad(resolve, req, buffer, expected) {
91 // Load it again, make sure it hits the cache
92 var oa = req.loadInfo.originAttributes;
93 var chan = makeChan(URL, oa.userContextId);
94 chan.asyncOpen(
95 new ChannelListener(doneSecondLoad.bind(null, resolve), expected)
99 function doneSecondLoad(resolve, req, buffer, expected) {
100 Assert.equal(handlers_called, expected);
101 resolve();