| <!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> |
| <script> |
| description("Test to ensure correct behaviour of ShadowRealm global scope"); |
| |
| promise_test(async t => { |
| const bootstrap = function() { |
| const shadowRealm = new ShadowRealm; |
| const install = shadowRealm.evaluate(`(function(name, fn) { |
| globalThis[name] = fn; |
| return; |
| })`); |
| install("debug", (...args) => { debug(...args); }); |
| return shadowRealm; |
| } |
| |
| debug(`Object.getPrototypeOf(globalThis) === Object.prototype`); |
| let shadowRealm = bootstrap(); |
| assert_equals(shadowRealm.evaluate("Object.getPrototypeOf(globalThis) === Object.prototype"), true); |
| |
| debug(`globalThis.__proto__ = { alpha: "omega" };`); |
| shadowRealm.evaluate(`try { |
| globalThis.__proto__ = { alpha: "omega" }; |
| "ok"; |
| } catch (e) { |
| debug("Failed to set globalThis.__proto__"); |
| }`); |
| assert_equals(shadowRealm.evaluate("globalThis.alpha"), "omega"); |
| |
| debug(`Object.setPrototypeOf(globalThis, { chuckle: "buckle" });`); |
| shadowRealm = bootstrap(); |
| shadowRealm.evaluate(`try { |
| Object.setPrototypeOf(globalThis, { chuckle: "buckle" }); |
| "ok"; |
| } catch (e) { |
| debug("Failure in Object.setPrototypeOf(globalThis)"); |
| }`); |
| assert_equals(shadowRealm.evaluate("globalThis.chuckle"), "buckle"); |
| |
| debug(`Reflect.setPrototypeOf(globalThis, { zoo: "moo" });`); |
| shadowRealm = bootstrap(); |
| shadowRealm.evaluate(`try { |
| Reflect.setPrototypeOf(globalThis, { zoo: "moo" }); |
| "ok"; |
| } catch (e) { |
| debug("Failure in Reflect.setPrototypeOf(globalThis)"); |
| }`); |
| assert_equals(shadowRealm.evaluate("globalThis.zoo"), "moo"); |
| }, "ShadowRealm global scope is an ordinary object"); |
| </script> |
| </body> |
| </html> |