Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"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.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.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
);
}