1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 let sb = new Cu.Sandbox("https://example.com",
7 { wantGlobalProperties: ["DOMException"] });
8 Cu.exportFunction(function() {
10 }, sb, { defineAs: "func" });
11 // By default, the stacks of things running in a sandbox will contain the
12 // actual evalInSandbox() call location. To override that, we have to pass an
14 let threw = Cu.evalInSandbox("var threw; try { func(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
18 // Check what the sandbox could see from this exception.
19 Assert.ok(!Cu.evalInSandbox("exn.filename", sb).includes("/unit/"));
20 Assert.equal(Cu.evalInSandbox("exn.fileName", sb), undefined);
21 Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
22 Assert.equal(Cu.evalInSandbox("exn.message", sb), "An exception was thrown");
23 Assert.equal(Cu.evalInSandbox("exn.name", sb), "InvalidStateError");
25 Cu.exportFunction(function() {
26 throw new Error("Hello");
27 }, sb, { defineAs: "func2" });
28 threw = Cu.evalInSandbox("var threw; try { func2(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
31 Assert.ok(!Cu.evalInSandbox("exn.filename", sb).includes("/unit/"));
32 Assert.equal(Cu.evalInSandbox("exn.fileName", sb), undefined);
33 Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
34 Assert.equal(Cu.evalInSandbox("exn.message", sb), "An exception was thrown");
35 Assert.equal(Cu.evalInSandbox("exn.name", sb), "InvalidStateError");
37 let ctor = Cu.evalInSandbox("TypeError", sb);
38 Cu.exportFunction(function() {
39 throw new ctor("Hello");
40 }, sb, { defineAs: "func3" });
41 threw = Cu.evalInSandbox("var threw; try { func3(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
44 Assert.ok(!Cu.evalInSandbox("exn.fileName", sb).includes("/unit/"));
45 Assert.equal(Cu.evalInSandbox("exn.filename", sb), undefined);
46 Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
47 Assert.equal(Cu.evalInSandbox("exn.message", sb), "Hello");
48 Assert.equal(Cu.evalInSandbox("exn.name", sb), "TypeError");
50 ctor = Cu.evalInSandbox("DOMException", sb);
51 Cu.exportFunction(function() {
52 throw new ctor("Goodbye", "InvalidAccessError");
53 }, sb, { defineAs: "func4" });
54 threw = Cu.evalInSandbox("var threw; try { func4(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
57 Assert.ok(!Cu.evalInSandbox("exn.filename", sb).includes("/unit/"));
58 Assert.equal(Cu.evalInSandbox("exn.fileName", sb), undefined);
59 Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
60 Assert.equal(Cu.evalInSandbox("exn.message", sb), "Goodbye");
61 Assert.equal(Cu.evalInSandbox("exn.name", sb), "InvalidAccessError");