| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><!-- webkit-test-runner [ jscOptions=--useShadowRealm=true ] --> |
| <html> |
| <head> |
| <script src="../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <script src =../resources/testharness.js></script> |
| <script src =../resources/testharnessreport.js></script> |
| <iframe src="resources/shadow-realm-iframe.html" sandbox="allow-scripts"></iframe> |
| <script> |
| description("Test to ensure ShadowRealms running in a sandboxed iframe do not access the parent window object"); |
| window.jsTestIsAsync = true; |
| |
| function wrappedLog(prefix) { |
| return function (msg) { |
| debug(prefix + ": " + msg); |
| }; |
| } |
| |
| debug("attached frames: " + window.frames.length); |
| let frame = window.frames[0]; |
| window.addEventListener("message", async () => { |
| let realm = frame.realm; |
| debug("detaching iframe"); |
| document.getElementsByTagName("iframe")[0].remove() |
| $vm.gc(); |
| frame = null; |
| const checkFn2 = await realm.importValue("./resources/example-module.js", "check"); |
| debug("dropping realm value") |
| realm = null; |
| $vm.gc(); |
| shouldBe(() => checkFn2(wrappedLog("shadowRealm")), |
| "true"); |
| finishJSTest(); |
| }); |
| </script> |
| <script src="../resources/js-test-post.js"></script> |
| </body> |
| </html> |