diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /dom/tests/mochitest/script/test_bug1656248.html | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/tests/mochitest/script/test_bug1656248.html')
-rw-r--r-- | dom/tests/mochitest/script/test_bug1656248.html | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/dom/tests/mochitest/script/test_bug1656248.html b/dom/tests/mochitest/script/test_bug1656248.html new file mode 100644 index 0000000000..af043ec25e --- /dev/null +++ b/dom/tests/mochitest/script/test_bug1656248.html @@ -0,0 +1,104 @@ +<!DOCTYPE html> +<html> +<!-- +Repeated reload an iframe. When iframe's script is loaded from the bytecode +cache, dynamic module import should still resolve modules based on the +script's URL. +--> +<head> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> + + <script> + const iframeId = "test_iframe"; + + let count = 0; + let waitForLoadOrEncode = true; + + function startTest() { + SimpleTest.waitForExplicitFinish(); + + // Setting dom.expose_test_interfaces pref causes the + // nsScriptLoadRequest to fire event on script tags, with information + // about its internal state. The ScriptLoader source send events to + // trace these and resolve a promise with the path taken by the + // script loader. + // + // Setting dom.script_loader.bytecode_cache.strategy to -1 causes the + // nsScriptLoadRequest to force all the conditions necessary to make a + // script be saved as bytecode in the alternate data storage provided + // by the channel (necko cache). + SpecialPowers.pushPrefEnv({ + set: [ + ['dom.script_loader.bytecode_cache.enabled', true], + ['dom.expose_test_interfaces', true], + ["dom.script_loader.bytecode_cache.strategy", -1] + ]}).then(nextIteration); + } + + function nextIteration() { + let iframe = document.getElementById(iframeId) + if (iframe) { + document.body.removeChild(iframe); + } + + iframe = document.createElement("iframe"); + document.body.appendChild(iframe); + iframe.id = iframeId; + + var iwin = iframe.contentWindow; + iwin.addEventListener("scriptloader_bytecode_saved", + handleScriptLoaderEvent); + iwin.addEventListener("scriptloader_bytecode_failed", + handleScriptLoaderEvent); + iwin.addEventListener("scriptloader_load_bytecode", + handleScriptLoaderEvent); + + iframe.src = "bug1656248_frame.html"; + } + + function handleScriptLoaderEvent(event) { + ok(true, `handleScriptLoaderEvent received ${event.type}`); + + if (!waitForLoadOrEncode) { + return; + } + + if (event.type === 'scriptloader_load_bytecode') { + ok(true, "Script loaded from bytecode") + waitForLoadOrEncode = false; + nextIteration(); + return; + } + + if (event.type === 'scriptloader_bytecode_saved') { + ok(true, "Bytecode encoding succeeded") + waitForLoadOrEncode = false; + nextIteration(); + return; + } + + if (event.type === 'scriptloader_bytecode_failed') { + ok(false, "Bytecode encoding failed") + SimpleTest.finish(); + return; + } + } + + function checkResult(result) { + is(result, 42, "Module was loaded successfully"); + + count++; + if (count === 3) { + SimpleTest.finish(); + return; + } + + if (!waitForLoadOrEncode) { + nextIteration(); + } + } + </script> +</head> + +<body onload="startTest()"></body> |