| <!DOCTYPE html> |
| <!DOCTYPE html> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| promise_test(async () => { |
| // Having the expected prototype is used to demonstrate that the object was |
| // in fact cloned, and is not the original object leaking between worlds. |
| testRunner.evaluateScriptInIsolatedWorld(1, |
| `window.addEventListener("toisolatedworld", e => { |
| window.dispatchEvent(new PortalActivateEvent("tomainworld", {data: { |
| hasRightPrototype: Object.getPrototypeOf(e.data) === Object.prototype, |
| foo: e.data.foo |
| }})); |
| });`); |
| |
| const data = { foo: 42 }; |
| |
| const replyPromise = new Promise((resolve, reject) => { |
| window.addEventListener("tomainworld", e => resolve(e), { once: true }); |
| }); |
| window.dispatchEvent(new PortalActivateEvent("toisolatedworld", { data })); |
| const reply = await replyPromise; |
| const replyData = reply.data; |
| assert_equals(Object.getPrototypeOf(replyData), Object.prototype); |
| assert_true(replyData.hasRightPrototype); |
| assert_equals(replyData.foo, 42); |
| assert_equals(replyData, reply.data, "an additional access should not produce a new object"); |
| }, "A clone should be used in an isolated world, but only one clone"); |
| </script> |