addon-sdk/source/test/addons/page-mod-debugger-pre/main.js

branch
TOR_BUG_9701
changeset 10
ac0c01689b40
equal deleted inserted replaced
-1:000000000000 0:f92c9da17238
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 "use strict";
5
6 const { Cu } = require('chrome');
7 const { PageMod } = require('sdk/page-mod');
8 const tabs = require('sdk/tabs');
9 const promise = require('sdk/core/promise')
10 const { getMostRecentBrowserWindow } = require('sdk/window/utils');
11 const { data } = require('sdk/self');
12 const { set } = require('sdk/preferences/service');
13
14 const { DebuggerServer } = Cu.import('resource://gre/modules/devtools/dbg-server.jsm', {});
15 const { DebuggerClient } = Cu.import('resource://gre/modules/devtools/dbg-client.jsm', {});
16
17 let gClient;
18 let ok;
19 let testName = 'testDebugger';
20 let iframeURL = 'data:text/html;charset=utf-8,' + testName;
21 let TAB_URL = 'data:text/html;charset=utf-8,' + encodeURIComponent('<iframe src="' + iframeURL + '" />');
22 TAB_URL = data.url('index.html');
23 let mod;
24
25 exports.testDebugger = function(assert, done) {
26 ok = assert.ok.bind(assert);
27 assert.pass('starting test');
28 set('devtools.debugger.log', true);
29
30 mod = PageMod({
31 include: TAB_URL,
32 attachTo: ['existing', 'top', 'frame'],
33 contentScriptFile: data.url('script.js'),
34 });
35 ok(true, 'PageMod was created');
36
37 if (!DebuggerServer.initialized) {
38 DebuggerServer.init(() => true);
39 DebuggerServer.addBrowserActors();
40 }
41
42 let transport = DebuggerServer.connectPipe();
43 gClient = new DebuggerClient(transport);
44 gClient.connect((aType, aTraits) => {
45 tabs.open({
46 url: TAB_URL,
47 onLoad: function(tab) {
48 assert.pass('tab loaded');
49
50 attachTabActorForUrl(gClient, TAB_URL).
51 then(_ => { assert.pass('attachTabActorForUrl called'); return _; }).
52 then(attachThread).
53 then(testDebuggerStatement).
54 then(_ => { assert.pass('testDebuggerStatement called') }).
55 then(closeConnection).
56 then(_ => { assert.pass('closeConnection called') }).
57 then(done).
58 then(null, aError => {
59 ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
60 });
61 }
62 });
63 });
64 }
65
66 function attachThread([aGrip, aResponse]) {
67 let deferred = promise.defer();
68
69 // Now attach and resume...
70 gClient.request({ to: aResponse.threadActor, type: "attach" }, () => {
71 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
72 ok(true, "Pause wasn't called before we've attached.");
73 deferred.resolve([aGrip, aResponse]);
74 });
75 });
76
77 return deferred.promise;
78 }
79
80 function testDebuggerStatement([aGrip, aResponse]) {
81 let deferred = promise.defer();
82 ok(aGrip, 'aGrip existss')
83
84 gClient.addListener("paused", (aEvent, aPacket) => {
85 ok(true, 'there was a pause event');
86 gClient.request({ to: aResponse.threadActor, type: "resume" }, () => {
87 ok(true, "The pause handler was triggered on a debugger statement.");
88 deferred.resolve();
89 });
90 });
91
92 let debuggee = getMostRecentBrowserWindow().gBrowser.selectedTab.linkedBrowser.contentWindow.wrappedJSObject;
93 debuggee.runDebuggerStatement();
94 ok(true, 'called runDebuggerStatement');
95
96 return deferred.promise;
97 }
98
99 function getTabActorForUrl(aClient, aUrl) {
100 let deferred = promise.defer();
101
102 aClient.listTabs(aResponse => {
103 let tabActor = aResponse.tabs.filter(aGrip => aGrip.url == aUrl).pop();
104 deferred.resolve(tabActor);
105 });
106
107 return deferred.promise;
108 }
109
110 function attachTabActorForUrl(aClient, aUrl) {
111 let deferred = promise.defer();
112
113 getTabActorForUrl(aClient, aUrl).then(aGrip => {
114 aClient.attachTab(aGrip.actor, aResponse => {
115 deferred.resolve([aGrip, aResponse]);
116 });
117 });
118
119 return deferred.promise;
120 }
121
122 function closeConnection() {
123 let deferred = promise.defer();
124 gClient.close(deferred.resolve);
125 return deferred.promise;
126 }
127
128 require('sdk/test/runner').runTestsFromModule(module);

mercurial