michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: /** michael@0: * Check extension-added tab actor lifetimes. michael@0: */ michael@0: michael@0: const CHROME_URL = "chrome://mochitests/content/browser/browser/devtools/debugger/test/" michael@0: const ACTORS_URL = CHROME_URL + "testactors.js"; michael@0: const TAB_URL = EXAMPLE_URL + "doc_empty-tab-01.html"; michael@0: michael@0: let gClient; michael@0: michael@0: function test() { michael@0: if (!DebuggerServer.initialized) { michael@0: DebuggerServer.init(() => true); michael@0: DebuggerServer.addBrowserActors(); michael@0: } michael@0: michael@0: DebuggerServer.addActors(ACTORS_URL); michael@0: michael@0: let transport = DebuggerServer.connectPipe(); michael@0: gClient = new DebuggerClient(transport); michael@0: gClient.connect((aType, aTraits) => { michael@0: is(aType, "browser", michael@0: "Root actor should identify itself as a browser."); michael@0: michael@0: addTab(TAB_URL) michael@0: .then(() => attachTabActorForUrl(gClient, TAB_URL)) michael@0: .then(testTabActor) michael@0: .then(closeTab) michael@0: .then(closeConnection) michael@0: .then(finish) michael@0: .then(null, aError => { michael@0: ok(false, "Got an error: " + aError.message + "\n" + aError.stack); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function testTabActor([aGrip, aResponse]) { michael@0: let deferred = promise.defer(); michael@0: michael@0: ok(aGrip.testTabActor1, michael@0: "Found the test tab actor."); michael@0: ok(aGrip.testTabActor1.contains("test_one"), michael@0: "testTabActor1's actorPrefix should be used."); michael@0: michael@0: gClient.request({ to: aGrip.testTabActor1, type: "ping" }, aResponse => { michael@0: is(aResponse.pong, "pong", michael@0: "Actor should respond to requests."); michael@0: michael@0: deferred.resolve(aResponse.actor); michael@0: }); michael@0: michael@0: return deferred.promise; michael@0: } michael@0: michael@0: function closeTab(aTestActor) { michael@0: return removeTab(gBrowser.selectedTab).then(() => { michael@0: let deferred = promise.defer(); michael@0: michael@0: try { michael@0: gClient.request({ to: aTestActor, type: "ping" }, aResponse => { michael@0: ok(false, "testTabActor1 didn't go away with the tab."); michael@0: deferred.reject(aResponse); michael@0: }); michael@0: } catch(e) { michael@0: is(e.message, "'ping' request packet has no destination.", "testTabActor1 went away."); michael@0: deferred.resolve(); michael@0: } michael@0: michael@0: return deferred.promise; michael@0: }); michael@0: } michael@0: michael@0: function closeConnection() { michael@0: let deferred = promise.defer(); michael@0: gClient.close(deferred.resolve); michael@0: return deferred.promise; michael@0: } michael@0: michael@0: registerCleanupFunction(function() { michael@0: gClient = null; michael@0: });