summaryrefslogtreecommitdiff
path: root/netwerk/test/unit/test_cache_jar.js
diff options
context:
space:
mode:
Diffstat (limited to 'netwerk/test/unit/test_cache_jar.js')
-rw-r--r--netwerk/test/unit/test_cache_jar.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/netwerk/test/unit/test_cache_jar.js b/netwerk/test/unit/test_cache_jar.js
new file mode 100644
index 0000000000..126e811f86
--- /dev/null
+++ b/netwerk/test/unit/test_cache_jar.js
@@ -0,0 +1,126 @@
+Cu.import("resource://testing-common/httpd.js");
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/NetUtil.jsm");
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyGetter(this, "URL", function() {
+ return "http://localhost:" + httpserv.identity.primaryPort + "/cached";
+});
+
+var httpserv = null;
+var handlers_called = 0;
+
+function cached_handler(metadata, response) {
+ response.setHeader("Content-Type", "text/plain", false);
+ response.setHeader("Cache-Control", "max-age=10000", false);
+ response.setStatusLine(metadata.httpVersion, 200, "OK");
+ var body = "0123456789";
+ response.bodyOutputStream.write(body, body.length);
+ handlers_called++;
+}
+
+function makeChan(url, appId, inIsolatedMozBrowser, userContextId) {
+ var chan = NetUtil.newChannel({uri: url, loadUsingSystemPrincipal: true})
+ .QueryInterface(Ci.nsIHttpChannel);
+ chan.loadInfo.originAttributes = { appId: appId,
+ inIsolatedMozBrowser: inIsolatedMozBrowser,
+ userContextId: userContextId,
+ };
+ return chan;
+}
+
+// [appId, inIsolatedMozBrowser, userContextId, expected_handlers_called]
+var firstTests = [
+ [0, false, 0, 1], [0, true, 0, 1], [1, false, 0, 1], [1, true, 0, 1],
+ [0, false, 1, 1], [0, true, 1, 1], [1, false, 1, 1], [1, true, 1, 1]
+];
+var secondTests = [
+ [0, false, 0, 0], [0, true, 0, 0], [1, false, 0, 0], [1, true, 0, 1],
+ [0, false, 1, 0], [0, true, 1, 0], [1, false, 1, 0], [1, true, 1, 0]
+];
+var thirdTests = [
+ [0, false, 0, 0], [0, true, 0, 0], [1, false, 0, 1], [1, true, 0, 1],
+ [0, false, 1, 0], [0, true, 1, 0], [1, false, 1, 0], [1, true, 1, 0]
+];
+var fourthTests = [
+ [0, false, 0, 0], [0, true, 0, 0], [1, false, 0, 0], [1, true, 0, 0],
+ [0, false, 1, 1], [0, true, 1, 0], [1, false, 1, 0], [1, true, 1, 0]
+];
+
+function run_all_tests() {
+ for (let test of firstTests) {
+ handlers_called = 0;
+ var chan = makeChan(URL, test[0], test[1], test[2]);
+ chan.asyncOpen2(new ChannelListener(doneFirstLoad, test[3]));
+ yield undefined;
+ }
+
+ // We can't easily cause webapp data to be cleared from the child process, so skip
+ // the rest of these tests.
+ let procType = Cc["@mozilla.org/xre/runtime;1"].getService(Ci.nsIXULRuntime).processType;
+ if (procType != Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT)
+ return;
+
+ let attrs_inBrowser = JSON.stringify({ appId:1, inIsolatedMozBrowser:true });
+ let attrs_notInBrowser = JSON.stringify({ appId:1 });
+
+ Services.obs.notifyObservers(null, "clear-origin-attributes-data", attrs_inBrowser);
+
+ for (let test of secondTests) {
+ handlers_called = 0;
+ var chan = makeChan(URL, test[0], test[1], test[2]);
+ chan.asyncOpen2(new ChannelListener(doneFirstLoad, test[3]));
+ yield undefined;
+ }
+
+ Services.obs.notifyObservers(null, "clear-origin-attributes-data", attrs_notInBrowser);
+ Services.obs.notifyObservers(null, "clear-origin-attributes-data", attrs_inBrowser);
+
+ for (let test of thirdTests) {
+ handlers_called = 0;
+ var chan = makeChan(URL, test[0], test[1], test[2]);
+ chan.asyncOpen2(new ChannelListener(doneFirstLoad, test[3]));
+ yield undefined;
+ }
+
+ let attrs_userContextId = JSON.stringify({ userContextId: 1 });
+ Services.obs.notifyObservers(null, "clear-origin-attributes-data", attrs_userContextId);
+
+ for (let test of fourthTests) {
+ handlers_called = 0;
+ var chan = makeChan(URL, test[0], test[1], test[2]);
+ chan.asyncOpen2(new ChannelListener(doneFirstLoad, test[3]));
+ yield undefined;
+ }
+}
+
+var gTests;
+function run_test() {
+ do_get_profile();
+ if (!newCacheBackEndUsed()) {
+ do_check_true(true, "This test checks only cache2 specific behavior.");
+ return;
+ }
+ do_test_pending();
+ httpserv = new HttpServer();
+ httpserv.registerPathHandler("/cached", cached_handler);
+ httpserv.start(-1);
+ gTests = run_all_tests();
+ gTests.next();
+}
+
+function doneFirstLoad(req, buffer, expected) {
+ // Load it again, make sure it hits the cache
+ var oa = req.loadInfo.originAttributes;
+ var chan = makeChan(URL, oa.appId, oa.isInIsolatedMozBrowserElement, oa.userContextId);
+ chan.asyncOpen2(new ChannelListener(doneSecondLoad, expected));
+}
+
+function doneSecondLoad(req, buffer, expected) {
+ do_check_eq(handlers_called, expected);
+ try {
+ gTests.next();
+ } catch (x) {
+ do_test_finished();
+ }
+}