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 the behavior of the debugger statement.
6 */
8 const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html";
10 let gClient;
12 function test() {
13 if (!DebuggerServer.initialized) {
14 DebuggerServer.init(() => true);
15 DebuggerServer.addBrowserActors();
16 }
18 let transport = DebuggerServer.connectPipe();
19 gClient = new DebuggerClient(transport);
20 gClient.connect((aType, aTraits) => {
21 is(aType, "browser",
22 "Root actor should identify itself as a browser.");
24 addTab(TAB_URL)
25 .then(() => attachTabActorForUrl(gClient, TAB_URL))
26 .then(testEarlyDebuggerStatement)
27 .then(testDebuggerStatement)
28 .then(closeConnection)
29 .then(finish)
30 .then(null, aError => {
31 ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
32 });
33 });
34 }
36 function testEarlyDebuggerStatement([aGrip, aResponse]) {
37 let deferred = promise.defer();
39 let onPaused = function(aEvent, aPacket) {
40 ok(false, "Pause shouldn't be called before we've attached!");
41 deferred.reject();
42 };
44 gClient.addListener("paused", onPaused);
46 // This should continue without nesting an event loop and calling
47 // the onPaused hook, because we haven't attached yet.
48 let debuggee = gBrowser.selectedTab.linkedBrowser.contentWindow.wrappedJSObject;
49 debuggee.runDebuggerStatement();
51 gClient.removeListener("paused", onPaused);
53 // Now attach and resume...
54 gClient.request({ to: aResponse.threadActor, type: "attach" }, () => {
55 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
56 ok(true, "Pause wasn't called before we've attached.");
57 deferred.resolve([aGrip, aResponse]);
58 });
59 });
61 return deferred.promise;
62 }
64 function testDebuggerStatement([aGrip, aResponse]) {
65 let deferred = promise.defer();
67 gClient.addListener("paused", (aEvent, aPacket) => {
68 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
69 ok(true, "The pause handler was triggered on a debugger statement.");
70 deferred.resolve();
71 });
72 });
74 // Reach around the debugging protocol and execute the debugger statement.
75 let debuggee = gBrowser.selectedTab.linkedBrowser.contentWindow.wrappedJSObject;
76 debuggee.runDebuggerStatement();
77 }
79 function closeConnection() {
80 let deferred = promise.defer();
81 gClient.close(deferred.resolve);
82 return deferred.promise;
83 }
85 registerCleanupFunction(function() {
86 removeTab(gBrowser.selectedTab);
87 gClient = null;
88 });