blob: 50d070b41eb0bc025e7735ac3b8461aaba079b51 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
// Frame invalidatation should not follow 'debugger eval prev' links.
// This should not fail a 'frame.isDebuggee()' assertion.
// This version of the test requires only a single Debugger, and a single
// debuggee global.
var g = newGlobal({ newCompartment: true });
var dbg = new Debugger(g);
g.eval(`
function f() { debugger; }
`);
g.observeAll = observeAll;
dbg.onDebuggerStatement = first;
g.eval(`debugger;`);
var saved;
function first(frame) {
saved = frame;
dbg.onDebuggerStatement = second;
saved.eval(`f()`);
}
function second() {
saved.eval(`observeAll()`);
}
function observeAll() {
// Setting this hook causes `Debugger::updateExecutionObservabilityOfFrames`
// to walk the stack looking for frames running in `g` and marking them as
// debuggees. It should ignore 'debugger eval prev' links; if it does not, the
// traversal will jump from the frame for `second`'s eval directly to `saved`,
// the frame for the `g.eval` call. In particular, it will not visit the frame
// for the eval in `first`, which was never marked as a debuggee. (Simply
// being created for a `Debugger.Frame.prototype.eval` call doesn't
// necessarily mark you as a debuggee, if your behavior doesn't need to be
// observed.)
dbg.onEnterFrame = function () { };
}
|