browser_script_loader_js_cache_sri_after_save.js (10247B)
1 // ev, unordered, and runJSCacheTests are defined in head.js 2 3 add_task(async function testDiskCache_SRIAfterSave() { 4 await SpecialPowers.pushPrefEnv({ 5 set: [ 6 ["dom.expose_test_interfaces", true], 7 ["dom.script_loader.bytecode_cache.enabled", true], 8 ["dom.script_loader.bytecode_cache.strategy", 0], 9 ["dom.script_loader.experimental.navigation_cache", false], 10 ], 11 }); 12 13 // If SRI is specified after the disk cache is created, it should 14 // fallback to the source, and then save again with the SRI. 15 await runJSCacheTests([ 16 { 17 title: "SRI on classic after save", 18 items: [ 19 { 20 file: "file_js_cache_large.js", 21 events: [ 22 ev("load:source", "file_js_cache_large.js"), 23 ev("evaluate:classic", "file_js_cache_large.js"), 24 ev("diskcache:disabled", "file_js_cache_large.js"), 25 ], 26 }, 27 { 28 file: "file_js_cache_large.js", 29 events: [ 30 ev("load:source", "file_js_cache_large.js"), 31 ev("evaluate:classic", "file_js_cache_large.js"), 32 ev("diskcache:disabled", "file_js_cache_large.js"), 33 ], 34 }, 35 { 36 file: "file_js_cache_large.js", 37 events: [ 38 ev("load:source", "file_js_cache_large.js"), 39 ev("evaluate:classic", "file_js_cache_large.js"), 40 ev("diskcache:disabled", "file_js_cache_large.js"), 41 ], 42 }, 43 { 44 file: "file_js_cache_large.js", 45 events: [ 46 ev("load:source", "file_js_cache_large.js"), 47 ev("evaluate:classic", "file_js_cache_large.js"), 48 ev("diskcache:register", "file_js_cache_large.js"), 49 ev("diskcache:saved", "file_js_cache_large.js", false), 50 ], 51 }, 52 { 53 file: "file_js_cache_large.js", 54 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 55 events: [ 56 ev("load:diskcache", "file_js_cache_large.js"), 57 ev("load:fallback", "file_js_cache_large.js"), 58 ev("load:source", "file_js_cache_large.js"), 59 ev("evaluate:classic", "file_js_cache_large.js"), 60 ev("diskcache:register", "file_js_cache_large.js"), 61 ev("diskcache:saved", "file_js_cache_large.js", false), 62 ], 63 }, 64 { 65 file: "file_js_cache_large.js", 66 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 67 events: [ 68 ev("load:diskcache", "file_js_cache_large.js"), 69 ev("evaluate:classic", "file_js_cache_large.js"), 70 ev("diskcache:disabled", "file_js_cache_large.js"), 71 ], 72 }, 73 ], 74 }, 75 76 { 77 title: "SRI on module after save", 78 module: true, 79 items: [ 80 { 81 file: "file_js_cache_large.js", 82 events: [ 83 ev("load:source", "file_js_cache_large.js"), 84 ev("evaluate:module", "file_js_cache_large.js"), 85 ev("diskcache:disabled", "file_js_cache_large.js"), 86 ], 87 }, 88 { 89 file: "file_js_cache_large.js", 90 events: [ 91 ev("load:source", "file_js_cache_large.js"), 92 ev("evaluate:module", "file_js_cache_large.js"), 93 ev("diskcache:disabled", "file_js_cache_large.js"), 94 ], 95 }, 96 { 97 file: "file_js_cache_large.js", 98 events: [ 99 ev("load:source", "file_js_cache_large.js"), 100 ev("evaluate:module", "file_js_cache_large.js"), 101 ev("diskcache:disabled", "file_js_cache_large.js"), 102 ], 103 }, 104 { 105 file: "file_js_cache_large.js", 106 events: [ 107 ev("load:source", "file_js_cache_large.js"), 108 ev("evaluate:module", "file_js_cache_large.js"), 109 ev("diskcache:register", "file_js_cache_large.js"), 110 ev("diskcache:saved", "file_js_cache_large.js", false), 111 ], 112 }, 113 { 114 file: "file_js_cache_large.js", 115 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 116 events: [ 117 ev("load:diskcache", "file_js_cache_large.js"), 118 ev("load:fallback", "file_js_cache_large.js"), 119 ev("load:source", "file_js_cache_large.js"), 120 ev("evaluate:module", "file_js_cache_large.js"), 121 ev("diskcache:register", "file_js_cache_large.js"), 122 ev("diskcache:saved", "file_js_cache_large.js", false), 123 ], 124 }, 125 { 126 file: "file_js_cache_large.js", 127 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 128 events: [ 129 ev("load:diskcache", "file_js_cache_large.js"), 130 ev("evaluate:module", "file_js_cache_large.js"), 131 ev("diskcache:disabled", "file_js_cache_large.js"), 132 ], 133 }, 134 ], 135 }, 136 ]); 137 138 await SpecialPowers.popPrefEnv(); 139 }); 140 141 add_task(async function testMemoryCache_SRIAfterSave() { 142 if (!AppConstants.NIGHTLY_BUILD) { 143 todo(false, "navigation cache is not yet enabled on non-nightly"); 144 return; 145 } 146 147 await SpecialPowers.pushPrefEnv({ 148 set: [ 149 ["dom.expose_test_interfaces", true], 150 ["dom.script_loader.bytecode_cache.enabled", true], 151 ["dom.script_loader.bytecode_cache.strategy", 0], 152 ["dom.script_loader.experimental.navigation_cache", true], 153 ], 154 }); 155 156 // If SRI is specified after the disk cache is created, it should 157 // fallback to the source, and then save again with the SRI. 158 await runJSCacheTests([ 159 { 160 title: "SRI on classic after save", 161 items: [ 162 { 163 file: "file_js_cache_large.js", 164 events: [ 165 ev("load:source", "file_js_cache_large.js"), 166 ev("memorycache:saved", "file_js_cache_large.js"), 167 ev("evaluate:classic", "file_js_cache_large.js"), 168 ev("diskcache:noschedule"), 169 ], 170 }, 171 { 172 file: "file_js_cache_large.js", 173 events: [ 174 ev("load:memorycache", "file_js_cache_large.js"), 175 ev("evaluate:classic", "file_js_cache_large.js"), 176 ev("diskcache:noschedule"), 177 ], 178 }, 179 { 180 file: "file_js_cache_large.js", 181 events: [ 182 ev("load:memorycache", "file_js_cache_large.js"), 183 ev("evaluate:classic", "file_js_cache_large.js"), 184 ev("diskcache:noschedule"), 185 ], 186 }, 187 { 188 file: "file_js_cache_large.js", 189 events: [ 190 ev("load:memorycache", "file_js_cache_large.js"), 191 ev("evaluate:classic", "file_js_cache_large.js"), 192 ev("diskcache:saved", "file_js_cache_large.js", false), 193 ], 194 }, 195 { 196 file: "file_js_cache_large.js", 197 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 198 events: [ 199 ev("load:diskcache", "file_js_cache_large.js"), 200 ev("load:fallback", "file_js_cache_large.js"), 201 ev("load:source", "file_js_cache_large.js"), 202 // At this point, the necko's fetch count is 3, 203 // because of the following: 204 // * 0-th item's source load 205 // * this items's diskcache load 206 // * this items's source load 207 ev("memorycache:saved", "file_js_cache_large.js"), 208 ev("evaluate:classic", "file_js_cache_large.js"), 209 ev("diskcache:noschedule"), 210 ], 211 }, 212 { 213 file: "file_js_cache_large.js", 214 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 215 events: [ 216 ev("load:memorycache", "file_js_cache_large.js"), 217 ev("evaluate:classic", "file_js_cache_large.js"), 218 // Loading again should save it. 219 ev("diskcache:saved", "file_js_cache_large.js", false), 220 ], 221 }, 222 ], 223 }, 224 225 { 226 title: "SRI on module after save", 227 module: true, 228 items: [ 229 { 230 file: "file_js_cache_large.js", 231 events: [ 232 ev("load:source", "file_js_cache_large.js"), 233 ev("memorycache:saved", "file_js_cache_large.js"), 234 ev("evaluate:module", "file_js_cache_large.js"), 235 ev("diskcache:noschedule"), 236 ], 237 }, 238 { 239 file: "file_js_cache_large.js", 240 events: [ 241 ev("load:memorycache", "file_js_cache_large.js"), 242 ev("evaluate:module", "file_js_cache_large.js"), 243 ev("diskcache:noschedule"), 244 ], 245 }, 246 { 247 file: "file_js_cache_large.js", 248 events: [ 249 ev("load:memorycache", "file_js_cache_large.js"), 250 ev("evaluate:module", "file_js_cache_large.js"), 251 ev("diskcache:noschedule"), 252 ], 253 }, 254 { 255 file: "file_js_cache_large.js", 256 events: [ 257 ev("load:memorycache", "file_js_cache_large.js"), 258 ev("evaluate:module", "file_js_cache_large.js"), 259 ev("diskcache:saved", "file_js_cache_large.js", false), 260 ], 261 }, 262 { 263 file: "file_js_cache_large.js", 264 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 265 events: [ 266 ev("load:diskcache", "file_js_cache_large.js"), 267 ev("load:fallback", "file_js_cache_large.js"), 268 ev("load:source", "file_js_cache_large.js"), 269 // At this point, the necko's fetch count is 3. 270 ev("memorycache:saved", "file_js_cache_large.js"), 271 ev("evaluate:module", "file_js_cache_large.js"), 272 ev("diskcache:noschedule"), 273 ], 274 }, 275 { 276 file: "file_js_cache_large.js", 277 sri: "sha384-vJ7r8qsSxGVQwKbj+5A1avW8CEb6bODkGULlUVOmqN81D6XQzaTFhspcWmO+PVSQ", 278 events: [ 279 ev("load:memorycache", "file_js_cache_large.js"), 280 ev("evaluate:module", "file_js_cache_large.js"), 281 ev("diskcache:saved", "file_js_cache_large.js", false), 282 ], 283 }, 284 ], 285 }, 286 ]); 287 288 await SpecialPowers.popPrefEnv(); 289 });