Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 /**
5 * Tests that enteredFrame packets are sent on frame entry and
6 * exitedFrame packets are sent on frame exit. Tests that the "name"
7 * trace type works for function declarations.
8 */
10 var gDebuggee;
11 var gClient;
12 var gTraceClient;
14 function run_test()
15 {
16 initTestTracerServer();
17 gDebuggee = addTestGlobal("test-tracer-actor");
18 gClient = new DebuggerClient(DebuggerServer.connectPipe());
19 gClient.connect(function() {
20 attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) {
21 gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) {
22 gTraceClient = aTraceClient;
23 test_enter_exit_frame();
24 });
25 });
26 });
27 do_test_pending();
28 }
30 function test_enter_exit_frame()
31 {
32 let tracesSeen = 0;
33 let traceNames = [];
34 let traceStopped = promise.defer();
36 gClient.addListener("traces", function onTraces(aEvent, { traces }) {
37 for (let t of traces) {
38 tracesSeen++;
40 if (t.type == "enteredFrame") {
41 do_check_eq(t.type, "enteredFrame",
42 'enteredFrame response should have type "enteredFrame"');
43 do_check_eq(typeof t.sequence, "number",
44 'enteredFrame response should have sequence number');
45 do_check_true(!isNaN(t.sequence),
46 'enteredFrame sequence should be a number');
47 do_check_eq(typeof t.name, "string",
48 'enteredFrame response should have function name');
49 traceNames[t.sequence] = t.name;
50 } else {
51 do_check_eq(t.type, "exitedFrame",
52 'exitedFrame response should have type "exitedFrame"');
53 do_check_eq(typeof t.sequence, "number",
54 'exitedFrame response should have sequence number');
55 do_check_true(!isNaN(t.sequence),
56 'exitedFrame sequence should be a number');
57 }
59 if (tracesSeen == 10) {
60 gClient.removeListener("traces", onTraces);
61 traceStopped.resolve();
62 }
63 }
64 });
66 start_trace()
67 .then(eval_code)
68 .then(() => traceStopped.promise)
69 .then(stop_trace)
70 .then(function() {
71 do_check_eq(traceNames[2], "baz",
72 'Should have entered "baz" frame in third packet');
73 do_check_eq(traceNames[3], "bar",
74 'Should have entered "bar" frame in fourth packet');
75 do_check_eq(traceNames[4], "foo",
76 'Should have entered "foo" frame in fifth packet');
77 finishClient(gClient);
78 });
79 }
81 function start_trace()
82 {
83 let deferred = promise.defer();
84 gTraceClient.startTrace(["name"], null, function() { deferred.resolve(); });
85 return deferred.promise;
86 }
88 function eval_code()
89 {
90 gDebuggee.eval("(" + function() {
91 function foo() {
92 return;
93 }
94 function bar() {
95 return foo();
96 }
97 function baz() {
98 return bar();
99 }
100 baz();
101 } + ")()");
102 }
104 function stop_trace()
105 {
106 let deferred = promise.defer();
107 gTraceClient.stopTrace(null, function() { deferred.resolve(); });
108 return deferred.promise;
109 }