Files
Alexandre Poirot f9c72a3393 Bug 1970328 - [devtools] Use content principal for test global in xpcshell tests. r=devtools-reviewers,jdescottes
This better replicate a web page as they aren't using system principal.
This will help landing the following revision where the DevToolsServer will now be running in the shared privileged global
and can no longer debug globals in that shared global.

Differential Revision: https://phabricator.services.mozilla.com/D252529
2025-06-11 16:01:28 +00:00

110 lines
2.6 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/**
* Verify that when two of the "same" source are loaded concurrently (like e10s
* frame scripts), breakpoints get hit in scripts defined by all sources.
*/
var gDebuggee;
add_task(
threadFrontTest(async ({ threadFront, debuggee }) => {
gDebuggee = debuggee;
await testBreakpoint(threadFront);
})
);
const testBreakpoint = async function (threadFront) {
evalSetupCode();
// Load the test source once.
evalTestCode();
equal(
gDebuggee.functions.length,
1,
"The test code should have added a function."
);
// Set a breakpoint in the test source.
const source = await getSource(threadFront, "test.js");
setBreakpoint(threadFront, { sourceUrl: source.url, line: 3 });
// Load the test source again.
evalTestCode();
equal(
gDebuggee.functions.length,
2,
"The test code should have added another function."
);
// Should hit our breakpoint in a script defined by the first instance of the
// test source.
const bpPause1 = await executeOnNextTickAndWaitForPause(
() => gDebuggee.eval("functions[0]()"),
threadFront
);
equal(
bpPause1.why.type,
"breakpoint",
"Should pause because of hitting our breakpoint (not debugger statement)."
);
const dbgStmtPause1 = await executeOnNextTickAndWaitForPause(
() => resume(threadFront),
threadFront
);
equal(
dbgStmtPause1.why.type,
"debuggerStatement",
"And we should hit the debugger statement after the pause."
);
await resume(threadFront);
// Should also hit our breakpoint in a script defined by the second instance
// of the test source.
const bpPause2 = await executeOnNextTickAndWaitForPause(
() => gDebuggee.eval("functions[1]()"),
threadFront
);
equal(
bpPause2.why.type,
"breakpoint",
"Should pause because of hitting our breakpoint (not debugger statement)."
);
const dbgStmtPause2 = await executeOnNextTickAndWaitForPause(
() => resume(threadFront),
threadFront
);
equal(
dbgStmtPause2.why.type,
"debuggerStatement",
"And we should hit the debugger statement after the pause."
);
};
function evalSetupCode() {
Cu.evalInSandbox("this.functions = [];", gDebuggee, "1.8", "setup.js", 1);
}
function evalTestCode() {
Cu.evalInSandbox(
` // 1
this.functions.push(function () { // 2
var setBreakpointHere = 1; // 3
debugger; // 4
}); // 5
`,
gDebuggee,
"1.8",
"test.js",
1
);
}