<!DOCTYPE HTML> <html> <head> <title>Test bug 482935</title> <script src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href=" /tests/SimpleTest/test.css" /> </head> <body onload="onWindowLoad()"> <script class="testbody" type="text/javascript"> var url = "bug482935.sjs"; function clearCache() { if (SpecialPowers.isMainProcess()) { SpecialPowers.Cc["@mozilla.org/netwerk/cache-storage-service;1"]. getService(SpecialPowers.Ci.nsICacheStorageService). clear(); } } // Tests that the response is cached if the request is cancelled // after it has reached state 4 function testCancelInPhase4() { clearCache(); // First request - should be loaded from server var xhr = new XMLHttpRequest(); xhr.addEventListener("readystatechange", function() { if (xhr.readyState < xhr.DONE) return; is(xhr.readyState, xhr.DONE, "wrong readyState"); xhr.abort(); SimpleTest.executeSoon(function() { // This request was cancelled, so the responseText should be empty string is(xhr.responseText, "", "Expected empty response to cancelled request"); // Second request - should be found in cache var xhr2 = new XMLHttpRequest(); xhr2.addEventListener("load", function() { is(xhr2.responseText, "0", "Received fresh value for second request"); SimpleTest.finish(); }); xhr2.open("GET", url); xhr2.setRequestHeader("X-Request", "1", false); try { xhr2.send(); } catch(e) { is(xhr2.status, "200", "Exception!"); } }); }); xhr.open("GET", url, true); xhr.setRequestHeader("X-Request", "0", false); try { xhr.send(); } catch(e) { is("Nothing", "Exception", "Boom: " + e); } } function onWindowLoad() { // Disable rcwn to make cache behavior deterministic. SpecialPowers.pushPrefEnv({set: [["network.http.rcwn.enabled", false]]}, testCancelInPhase4); } SimpleTest.waitForExplicitFinish(); </script> </body> </html>