Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
"use strict";
const { JSObjectsTestUtils } = ChromeUtils.importESModule(
);
JSObjectsTestUtils.init(this);
// Note that XPCShellContentUtils will already be initialized by JSObjectsTestUtils
const { XPCShellContentUtils } = ChromeUtils.importESModule(
);
const EXPECTED_VALUES_FILE = "test_javascript_logging.snapshot.mjs";
add_task(async function () {
// Create a content page in order to better simulate a real world page
const contentPage = await XPCShellContentUtils.loadContentPage(
);
await JSObjectsTestUtils.runTest(EXPECTED_VALUES_FILE, async function (arg) {
// Because the test page runs in a content process, we have to execute most of the test logic via `spawn`
return contentPage.spawn([arg], async ({ context, expression }) => {
const { CONTEXTS } = ChromeUtils.importESModule(
);
const { JSTracer } = ChromeUtils.importESModule(
"resource://devtools/server/tracer/tracer.sys.mjs"
);
const systemPrincipal =
Services.scriptSecurityManager.getSystemPrincipal();
const chromeSandbox = Cu.Sandbox(systemPrincipal);
let ref;
try {
if (context == CONTEXTS.CHROME) {
ref = Cu.evalInSandbox(
expression,
chromeSandbox,
null,
"test sandbox"
);
} else {
ref = this.content.eval(expression);
}
} catch (e) {
ref = e;
}
const str = JSTracer.objectToString(ref);
// Silence any async rejection
if (ref instanceof this.content.Promise) {
// eslint-disable-next-line max-nested-callbacks
ref.catch(function () {});
}
return str;
});
});
info("Close content page");
await contentPage.close();
});