test_bug482935.html (2061B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test bug 482935</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href=" /tests/SimpleTest/test.css" /> 7 </head> 8 <body onload="onWindowLoad()"> 9 <script class="testbody" type="text/javascript"> 10 11 var url = "bug482935.sjs"; 12 13 function clearCache() { 14 if (SpecialPowers.isMainProcess()) { 15 SpecialPowers.Cc["@mozilla.org/netwerk/cache-storage-service;1"]. 16 getService(SpecialPowers.Ci.nsICacheStorageService). 17 clear(); 18 } 19 } 20 21 // Tests that the response is cached if the request is cancelled 22 // after it has reached state 4 23 function testCancelInPhase4() { 24 25 clearCache(); 26 27 // First request - should be loaded from server 28 var xhr = new XMLHttpRequest(); 29 xhr.addEventListener("readystatechange", function() { 30 if (xhr.readyState < xhr.DONE) return; 31 is(xhr.readyState, xhr.DONE, "wrong readyState"); 32 xhr.abort(); 33 SimpleTest.executeSoon(function() { 34 // This request was cancelled, so the responseText should be empty string 35 is(xhr.responseText, "", "Expected empty response to cancelled request"); 36 37 // Second request - should be found in cache 38 var xhr2 = new XMLHttpRequest(); 39 40 xhr2.addEventListener("load", function() { 41 is(xhr2.responseText, "0", "Received fresh value for second request"); 42 SimpleTest.finish(); 43 }); 44 45 xhr2.open("GET", url); 46 xhr2.setRequestHeader("X-Request", "1", false); 47 48 try { xhr2.send(); } 49 catch(e) { 50 is(xhr2.status, "200", "Exception!"); 51 } 52 }); 53 }); 54 55 xhr.open("GET", url, true); 56 xhr.setRequestHeader("X-Request", "0", false); 57 try { xhr.send(); } 58 catch(e) { 59 is("Nothing", "Exception", "Boom: " + e); 60 } 61 } 62 63 function onWindowLoad() { 64 // Disable rcwn to make cache behavior deterministic. 65 SpecialPowers.pushPrefEnv({set: [["network.http.rcwn.enabled", false]]}, 66 testCancelInPhase4); 67 } 68 69 SimpleTest.waitForExplicitFinish(); 70 </script> 71 </body> 72 </html>