test_resource_cache.html (3438B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for SharedSubResourceCache with redirect</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> 7 </head> 8 <body> 9 <iframe id="frame" src="about:blank"></iframe> 10 11 <script> 12 const us = window.location.href; 13 const baseURL = us.substring(0, us.lastIndexOf('/') + 1); 14 const serverFilename = "file_resource_cache_server.sjs"; 15 const frame = document.getElementById("frame"); 16 17 SimpleTest.waitForExplicitFinish(); 18 19 async function testReload({ src, clearCache, cacheable, desc }) { 20 // The iframe loads CSS with "file_resource_cache_server.sjs?redirect" URL. 21 // With the first access, it redirects to "file_resource_cache_server.sjs?red" 22 // that makes the body color "red". 23 // 24 // The redirect response has "Cache-Control: no-cache", and the request 25 // shouldn't be cached. 26 await new Promise(r => { 27 frame.addEventListener("load", r, { once: true }); 28 frame.src = src; 29 }); 30 31 is(frame.contentWindow.getComputedStyle(frame.contentDocument.body).color, 32 "rgb(255, 0, 0)", 33 `body color before reload with ${desc} should be red`); 34 35 if (clearCache) { 36 SpecialPowers.ChromeUtils.clearResourceCache({ 37 types: ["stylesheet", "script"], 38 }); 39 } 40 41 // Reload the iframe and wait for reload. 42 // 43 // With the second access, "file_resource_cache_server.sjs?redirect" redirects 44 // to "file_resource_cache_server.sjs?blue" that makes the body color "blue". 45 await new Promise(r => { 46 frame.addEventListener("load", r, { once: true }); 47 frame.contentWindow.location.reload(); 48 }); 49 50 if (cacheable) { 51 is(frame.contentWindow.getComputedStyle(frame.contentDocument.body).color, 52 "rgb(255, 0, 0)", 53 `body color after reload with ${desc} should be red`); 54 } else { 55 is(frame.contentWindow.getComputedStyle(frame.contentDocument.body).color, 56 "rgb(0, 0, 255)", 57 `body color after reload with ${desc} should be blue`); 58 } 59 } 60 61 async function reset() { 62 // Reset the server-side script state. 63 const resetResponse = await fetch(baseURL + serverFilename + "?reset"); 64 is(await resetResponse.text(), "reset", "server side is reset"); 65 66 // Reset the iframe. 67 await new Promise(r => { 68 frame.addEventListener("load", r, { once: true }); 69 frame.src = "about:blank"; 70 }); 71 72 // Clear cache. 73 SpecialPowers.ChromeUtils.clearResourceCache({ 74 types: ["stylesheet", "script"], 75 }); 76 } 77 78 async function doTest() { 79 await new Promise(r => window.addEventListener("load", r, { once: true })); 80 81 await testReload({ 82 src: "file_resource_cache_frame_not_cacheable.html", 83 clearCache: true, 84 cacheable: false, 85 desc: "clearing SharedSubResourceCache for not-cacheable", 86 }); 87 88 await reset(); 89 90 await testReload({ 91 src: "file_resource_cache_frame_not_cacheable.html", 92 clearCache: false, 93 cacheable: false, 94 desc: "not clearing SharedSubResourceCache for not-cacheable", 95 }); 96 97 await reset(); 98 99 await testReload({ 100 src: "file_resource_cache_frame_cacheable.html", 101 clearCache: true, 102 cacheable: true, 103 desc: "clearing SharedSubResourceCache for cacheable", 104 }); 105 106 await reset(); 107 108 await testReload({ 109 src: "file_resource_cache_frame_cacheable.html", 110 clearCache: false, 111 cacheable: true, 112 desc: "not clearing SharedSubResourceCache for cacheable", 113 }); 114 115 SimpleTest.finish(); 116 } 117 118 doTest(); 119 </script> 120 </body> 121 </html>