From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- js/src/tests/non262/ShadowRealms/ccw.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 js/src/tests/non262/ShadowRealms/ccw.js (limited to 'js/src/tests/non262/ShadowRealms/ccw.js') diff --git a/js/src/tests/non262/ShadowRealms/ccw.js b/js/src/tests/non262/ShadowRealms/ccw.js new file mode 100644 index 0000000000..7596f15823 --- /dev/null +++ b/js/src/tests/non262/ShadowRealms/ccw.js @@ -0,0 +1,33 @@ +// |reftest| shell-option(--enable-shadow-realms) skip-if(!xulRuntime.shell) + +var g = newGlobal({ newCompartment: true }); + +var sr = g.evaluate(`new ShadowRealm()`); + + +// sr should be a CCW to a ShadowRealm. +ShadowRealm.prototype.evaluate.call(sr, "var x = 10"); +assertEq(sr.evaluate("x"), 10); + +// wrappedf should *not* be a CCW, because we're using this realm's ShadowRealm.prototype.evaluate, +// and so the active realm when invoking will be this current realm. +// +// However, the target function (wrappedf's f) comes from another compartment, and will have to be a CCW. +var wrappedf = ShadowRealm.prototype.evaluate.call(sr, "function f() { return 10; }; f"); +assertEq(wrappedf(), 10); + +var evaluate_from_other_realm = g.evaluate('ShadowRealm.prototype.evaluate'); + +// wrappedb should be a CCW, since the callee of the .call comes from the other +// compartment. +var wrappedb = evaluate_from_other_realm.call(sr, "function b() { return 12; }; b"); +assertEq(wrappedb(), 12); + +nukeAllCCWs() +// This throws, but the dead object message is lost and replaced with the wrapped function +// object message. +assertThrowsInstanceOf(() => wrappedf(), TypeError); +assertThrowsInstanceOf(() => wrappedb(), TypeError); + +if (typeof reportCompare === 'function') + reportCompare(true, true); \ No newline at end of file -- cgit v1.2.3