browser_script_loader_js_cache_module.js (13459B)
1 // ev, unordered, and runJSCacheTests are defined in head.js 2 3 add_task(async function testDiskCache_modules() { 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 await runJSCacheTests([ 14 // A small module shouldn't be saved to the disk. 15 { 16 title: "small module", 17 module: true, 18 items: [ 19 { 20 file: "file_js_cache_small.js", 21 events: [ 22 ev("load:source", "file_js_cache_small.js"), 23 ev("evaluate:module", "file_js_cache_small.js"), 24 ev("diskcache:disabled", "file_js_cache_small.js"), 25 ], 26 }, 27 { 28 file: "file_js_cache_small.js", 29 events: [ 30 ev("load:source", "file_js_cache_small.js"), 31 ev("evaluate:module", "file_js_cache_small.js"), 32 ev("diskcache:disabled", "file_js_cache_small.js"), 33 ], 34 }, 35 { 36 file: "file_js_cache_small.js", 37 events: [ 38 ev("load:source", "file_js_cache_small.js"), 39 ev("evaluate:module", "file_js_cache_small.js"), 40 ev("diskcache:disabled", "file_js_cache_small.js"), 41 ], 42 }, 43 { 44 file: "file_js_cache_small.js", 45 events: [ 46 ev("load:source", "file_js_cache_small.js"), 47 ev("evaluate:module", "file_js_cache_small.js"), 48 ev("diskcache:disabled", "file_js_cache_small.js"), 49 ], 50 }, 51 ], 52 }, 53 54 // A large module file should be saved to the disk. 55 { 56 title: "large module", 57 module: true, 58 items: [ 59 { 60 file: "file_js_cache_large.js", 61 events: [ 62 ev("load:source", "file_js_cache_large.js"), 63 ev("evaluate:module", "file_js_cache_large.js"), 64 ev("diskcache:disabled", "file_js_cache_large.js"), 65 ], 66 }, 67 { 68 file: "file_js_cache_large.js", 69 events: [ 70 ev("load:source", "file_js_cache_large.js"), 71 ev("evaluate:module", "file_js_cache_large.js"), 72 ev("diskcache:disabled", "file_js_cache_large.js"), 73 ], 74 }, 75 { 76 file: "file_js_cache_large.js", 77 events: [ 78 ev("load:source", "file_js_cache_large.js"), 79 ev("evaluate:module", "file_js_cache_large.js"), 80 ev("diskcache:disabled", "file_js_cache_large.js"), 81 ], 82 }, 83 { 84 file: "file_js_cache_large.js", 85 events: [ 86 ev("load:source", "file_js_cache_large.js"), 87 ev("evaluate:module", "file_js_cache_large.js"), 88 ev("diskcache:register", "file_js_cache_large.js"), 89 ev("diskcache:saved", "file_js_cache_large.js", false), 90 ], 91 }, 92 ], 93 }, 94 95 // All imported modules should be saved to the disk. 96 { 97 title: "imported modules", 98 module: true, 99 items: [ 100 { 101 file: "file_js_cache_importer.mjs", 102 events: [ 103 ev("load:source", "file_js_cache_importer.mjs"), 104 unordered([ 105 ev("load:source", "file_js_cache_imported1.mjs", false), 106 ev("load:source", "file_js_cache_imported2.mjs", false), 107 ev("load:source", "file_js_cache_imported3.mjs", false), 108 ]), 109 ev("evaluate:module", "file_js_cache_importer.mjs"), 110 ev("diskcache:disabled", "file_js_cache_importer.mjs"), 111 // non-top-level modules that don't pass the condition 112 // don't emit events. 113 ], 114 }, 115 { 116 file: "file_js_cache_importer.mjs", 117 events: [ 118 ev("load:source", "file_js_cache_importer.mjs"), 119 unordered([ 120 ev("load:source", "file_js_cache_imported1.mjs", false), 121 ev("load:source", "file_js_cache_imported2.mjs", false), 122 ev("load:source", "file_js_cache_imported3.mjs", false), 123 ]), 124 ev("evaluate:module", "file_js_cache_importer.mjs"), 125 ev("diskcache:disabled", "file_js_cache_importer.mjs"), 126 ], 127 }, 128 { 129 file: "file_js_cache_importer.mjs", 130 events: [ 131 ev("load:source", "file_js_cache_importer.mjs"), 132 unordered([ 133 ev("load:source", "file_js_cache_imported1.mjs", false), 134 ev("load:source", "file_js_cache_imported2.mjs", false), 135 ev("load:source", "file_js_cache_imported3.mjs", false), 136 ]), 137 ev("evaluate:module", "file_js_cache_importer.mjs"), 138 ev("diskcache:disabled", "file_js_cache_importer.mjs"), 139 ], 140 }, 141 { 142 file: "file_js_cache_importer.mjs", 143 events: [ 144 ev("load:source", "file_js_cache_importer.mjs"), 145 unordered([ 146 ev("load:source", "file_js_cache_imported1.mjs", false), 147 ev("load:source", "file_js_cache_imported2.mjs", false), 148 ev("load:source", "file_js_cache_imported3.mjs", false), 149 ]), 150 ev("evaluate:module", "file_js_cache_importer.mjs"), 151 ev("diskcache:register", "file_js_cache_importer.mjs"), 152 unordered([ 153 ev("diskcache:register", "file_js_cache_imported1.mjs", false), 154 ev("diskcache:register", "file_js_cache_imported2.mjs", false), 155 ev("diskcache:register", "file_js_cache_imported3.mjs", false), 156 ]), 157 ev("diskcache:saved", "file_js_cache_importer.mjs", false), 158 unordered([ 159 ev("diskcache:saved", "file_js_cache_imported1.mjs", false), 160 ev("diskcache:saved", "file_js_cache_imported2.mjs", false), 161 ev("diskcache:saved", "file_js_cache_imported3.mjs", false), 162 ]), 163 ], 164 }, 165 { 166 file: "file_js_cache_importer.mjs", 167 events: [ 168 ev("load:diskcache", "file_js_cache_importer.mjs"), 169 unordered([ 170 ev("load:diskcache", "file_js_cache_imported1.mjs", false), 171 ev("load:diskcache", "file_js_cache_imported2.mjs", false), 172 ev("load:diskcache", "file_js_cache_imported3.mjs", false), 173 ]), 174 ev("evaluate:module", "file_js_cache_importer.mjs"), 175 ev("diskcache:disabled", "file_js_cache_importer.mjs"), 176 ], 177 }, 178 ], 179 }, 180 ]); 181 182 await SpecialPowers.popPrefEnv(); 183 }); 184 185 add_task(async function testMemoryCache_modules() { 186 if (!AppConstants.NIGHTLY_BUILD) { 187 todo(false, "navigation cache is not yet enabled on non-nightly"); 188 return; 189 } 190 191 await SpecialPowers.pushPrefEnv({ 192 set: [ 193 ["dom.expose_test_interfaces", true], 194 ["dom.script_loader.bytecode_cache.enabled", true], 195 ["dom.script_loader.bytecode_cache.strategy", 0], 196 ["dom.script_loader.experimental.navigation_cache", true], 197 ], 198 }); 199 200 await runJSCacheTests([ 201 // A small module shouldn't be saved to the disk. 202 { 203 title: "small module", 204 module: true, 205 items: [ 206 { 207 file: "file_js_cache_small.js", 208 events: [ 209 ev("load:source", "file_js_cache_small.js"), 210 ev("memorycache:saved", "file_js_cache_small.js"), 211 ev("evaluate:module", "file_js_cache_small.js"), 212 ev("diskcache:noschedule"), 213 ], 214 }, 215 { 216 file: "file_js_cache_small.js", 217 events: [ 218 ev("load:memorycache", "file_js_cache_small.js"), 219 ev("evaluate:module", "file_js_cache_small.js"), 220 ev("diskcache:noschedule"), 221 ], 222 }, 223 { 224 file: "file_js_cache_small.js", 225 events: [ 226 ev("load:memorycache", "file_js_cache_small.js"), 227 ev("evaluate:module", "file_js_cache_small.js"), 228 ev("diskcache:noschedule"), 229 ], 230 }, 231 { 232 file: "file_js_cache_small.js", 233 events: [ 234 ev("load:memorycache", "file_js_cache_small.js"), 235 ev("evaluate:module", "file_js_cache_small.js"), 236 ev("diskcache:noschedule"), 237 ], 238 }, 239 ], 240 }, 241 242 // A large module file should be saved to the disk. 243 { 244 title: "large module", 245 module: true, 246 items: [ 247 { 248 file: "file_js_cache_large.js", 249 events: [ 250 ev("load:source", "file_js_cache_large.js"), 251 ev("memorycache:saved", "file_js_cache_large.js"), 252 ev("evaluate:module", "file_js_cache_large.js"), 253 ev("diskcache:noschedule"), 254 ], 255 }, 256 { 257 file: "file_js_cache_large.js", 258 events: [ 259 ev("load:memorycache", "file_js_cache_large.js"), 260 ev("evaluate:module", "file_js_cache_large.js"), 261 ev("diskcache:noschedule"), 262 ], 263 }, 264 { 265 file: "file_js_cache_large.js", 266 events: [ 267 ev("load:memorycache", "file_js_cache_large.js"), 268 ev("evaluate:module", "file_js_cache_large.js"), 269 ev("diskcache:noschedule"), 270 ], 271 }, 272 { 273 file: "file_js_cache_large.js", 274 events: [ 275 ev("load:memorycache", "file_js_cache_large.js"), 276 ev("evaluate:module", "file_js_cache_large.js"), 277 ev("diskcache:saved", "file_js_cache_large.js", false), 278 ], 279 }, 280 { 281 file: "file_js_cache_large.js", 282 events: [ 283 ev("load:memorycache", "file_js_cache_large.js"), 284 ev("evaluate:module", "file_js_cache_large.js"), 285 ev("diskcache:noschedule"), 286 ], 287 }, 288 ], 289 }, 290 291 // All imported modules should be saved to the disk. 292 { 293 title: "imported modules", 294 module: true, 295 items: [ 296 { 297 file: "file_js_cache_importer.mjs", 298 events: [ 299 ev("load:source", "file_js_cache_importer.mjs"), 300 ev("memorycache:saved", "file_js_cache_importer.mjs"), 301 unordered([ 302 ev("load:source", "file_js_cache_imported1.mjs", false), 303 ev("memorycache:saved", "file_js_cache_imported1.mjs", false), 304 ev("load:source", "file_js_cache_imported2.mjs", false), 305 ev("memorycache:saved", "file_js_cache_imported2.mjs", false), 306 ev("load:source", "file_js_cache_imported3.mjs", false), 307 ev("memorycache:saved", "file_js_cache_imported3.mjs", false), 308 ]), 309 ev("evaluate:module", "file_js_cache_importer.mjs"), 310 ev("diskcache:noschedule"), 311 ], 312 }, 313 { 314 file: "file_js_cache_importer.mjs", 315 events: [ 316 ev("load:memorycache", "file_js_cache_importer.mjs"), 317 unordered([ 318 ev("load:memorycache", "file_js_cache_imported1.mjs", false), 319 ev("load:memorycache", "file_js_cache_imported2.mjs", false), 320 ev("load:memorycache", "file_js_cache_imported3.mjs", false), 321 ]), 322 ev("evaluate:module", "file_js_cache_importer.mjs"), 323 ev("diskcache:noschedule"), 324 ], 325 }, 326 { 327 file: "file_js_cache_importer.mjs", 328 events: [ 329 ev("load:memorycache", "file_js_cache_importer.mjs"), 330 unordered([ 331 ev("load:memorycache", "file_js_cache_imported1.mjs", false), 332 ev("load:memorycache", "file_js_cache_imported2.mjs", false), 333 ev("load:memorycache", "file_js_cache_imported3.mjs", false), 334 ]), 335 ev("evaluate:module", "file_js_cache_importer.mjs"), 336 ev("diskcache:noschedule"), 337 ], 338 }, 339 { 340 file: "file_js_cache_importer.mjs", 341 events: [ 342 ev("load:memorycache", "file_js_cache_importer.mjs"), 343 unordered([ 344 ev("load:memorycache", "file_js_cache_imported1.mjs", false), 345 ev("load:memorycache", "file_js_cache_imported2.mjs", false), 346 ev("load:memorycache", "file_js_cache_imported3.mjs", false), 347 ]), 348 ev("evaluate:module", "file_js_cache_importer.mjs"), 349 // SharedScriptCache iterates over unordered hashmap while 350 // saving. 351 unordered([ 352 ev("diskcache:saved", "file_js_cache_importer.mjs", false), 353 ev("diskcache:saved", "file_js_cache_imported1.mjs", false), 354 ev("diskcache:saved", "file_js_cache_imported2.mjs", false), 355 ev("diskcache:saved", "file_js_cache_imported3.mjs", false), 356 ]), 357 ], 358 }, 359 { 360 file: "file_js_cache_importer.mjs", 361 events: [ 362 ev("load:memorycache", "file_js_cache_importer.mjs"), 363 unordered([ 364 ev("load:memorycache", "file_js_cache_imported1.mjs", false), 365 ev("load:memorycache", "file_js_cache_imported2.mjs", false), 366 ev("load:memorycache", "file_js_cache_imported3.mjs", false), 367 ]), 368 ev("evaluate:module", "file_js_cache_importer.mjs"), 369 ev("diskcache:noschedule"), 370 ], 371 }, 372 ], 373 }, 374 ]); 375 376 await SpecialPowers.popPrefEnv(); 377 });