diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /addon-sdk/source/test/addons/page-mod-debugger-post/main.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'addon-sdk/source/test/addons/page-mod-debugger-post/main.js')
-rw-r--r-- | addon-sdk/source/test/addons/page-mod-debugger-post/main.js | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/addon-sdk/source/test/addons/page-mod-debugger-post/main.js b/addon-sdk/source/test/addons/page-mod-debugger-post/main.js new file mode 100644 index 000000000..703399c21 --- /dev/null +++ b/addon-sdk/source/test/addons/page-mod-debugger-post/main.js @@ -0,0 +1,136 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +const { Cu } = require('chrome'); +const { PageMod } = require('sdk/page-mod'); +const tabs = require('sdk/tabs'); +const { closeTab } = require('sdk/tabs/utils'); +const promise = require('sdk/core/promise') +const { getMostRecentBrowserWindow } = require('sdk/window/utils'); +const { data } = require('sdk/self'); +const { set } = require('sdk/preferences/service'); + +const { require: devtoolsRequire } = Cu.import("resource://devtools/shared/Loader.jsm", {}); +const { DebuggerServer } = devtoolsRequire("devtools/server/main"); +const { DebuggerClient } = devtoolsRequire("devtools/shared/client/main"); + +var gClient; +var ok; +var testName = 'testDebugger'; +var iframeURL = 'data:text/html;charset=utf-8,' + testName; +var TAB_URL = 'data:text/html;charset=utf-8,' + encodeURIComponent('<iframe src="' + iframeURL + '" />'); +TAB_URL = data.url('index.html'); +var mod; + +exports.testDebugger = function(assert, done) { + ok = assert.ok.bind(assert); + assert.pass('starting test'); + set('devtools.debugger.log', true); + + if (!DebuggerServer.initialized) { + DebuggerServer.init(); + DebuggerServer.addBrowserActors(); + } + + let transport = DebuggerServer.connectPipe(); + gClient = new DebuggerClient(transport); + gClient.connect((aType, aTraits) => { + tabs.open({ + url: TAB_URL, + onLoad: function(tab) { + assert.pass('tab loaded'); + + attachTabActorForUrl(gClient, TAB_URL). + then(_ => { assert.pass('attachTabActorForUrl called'); return _; }). + then(attachThread). + then(testDebuggerStatement). + then(_ => { assert.pass('testDebuggerStatement called') }). + then(closeConnection). + then(_ => { assert.pass('closeConnection called') }). + then(_ => { tab.close() }). + then(done). + then(null, aError => { + ok(false, "Got an error: " + aError.message + "\n" + aError.stack); + }); + } + }); + }); +} + +function attachThread([aGrip, aResponse]) { + let deferred = promise.defer(); + + // Now attach and resume... + gClient.request({ to: aResponse.threadActor, type: "attach" }, () => { + gClient.request({ to: aResponse.threadActor, type: "resume" }, () => { + ok(true, "Pause wasn't called before we've attached."); + deferred.resolve([aGrip, aResponse]); + }); + }); + + return deferred.promise; +} + +function testDebuggerStatement([aGrip, aResponse]) { + let deferred = promise.defer(); + ok(aGrip, 'aGrip existss') + + gClient.addListener("paused", (aEvent, aPacket) => { + ok(true, 'there was a pause event'); + gClient.request({ to: aResponse.threadActor, type: "resume" }, () => { + ok(true, "The pause handler was triggered on a debugger statement."); + deferred.resolve(); + }); + }); + + mod = PageMod({ + include: TAB_URL, + attachTo: ['existing', 'top', 'frame'], + contentScriptFile: data.url('script.js'), + onAttach: function(mod) { + ok(true, 'the page-mod was attached to ' + mod.tab.url); + + require('sdk/timers').setTimeout(function() { + let debuggee = getMostRecentBrowserWindow().gBrowser.selectedBrowser.contentWindow.wrappedJSObject; + debuggee.runDebuggerStatement(); + ok(true, 'called runDebuggerStatement'); + }, 500) + } + }); + ok(true, 'PageMod was created'); + + return deferred.promise; +} + +function getTabActorForUrl(aClient, aUrl) { + let deferred = promise.defer(); + + aClient.listTabs(aResponse => { + let tabActor = aResponse.tabs.filter(aGrip => aGrip.url == aUrl).pop(); + deferred.resolve(tabActor); + }); + + return deferred.promise; +} + +function attachTabActorForUrl(aClient, aUrl) { + let deferred = promise.defer(); + + getTabActorForUrl(aClient, aUrl).then(aGrip => { + aClient.attachTab(aGrip.actor, aResponse => { + deferred.resolve([aGrip, aResponse]); + }); + }); + + return deferred.promise; +} + +function closeConnection() { + let deferred = promise.defer(); + gClient.close(deferred.resolve); + return deferred.promise; +} + +require('sdk/test/runner').runTestsFromModule(module); |