diff options
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_navigation.js')
-rw-r--r-- | devtools/client/debugger/test/mochitest/browser_dbg_navigation.js | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_navigation.js b/devtools/client/debugger/test/mochitest/browser_dbg_navigation.js new file mode 100644 index 000000000..df48601e6 --- /dev/null +++ b/devtools/client/debugger/test/mochitest/browser_dbg_navigation.js @@ -0,0 +1,75 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Check tab attach/navigation. + */ + +const TAB1_URL = EXAMPLE_URL + "doc_empty-tab-01.html"; +const TAB2_URL = EXAMPLE_URL + "doc_empty-tab-02.html"; + +var gClient; + +function test() { + if (!DebuggerServer.initialized) { + DebuggerServer.init(); + DebuggerServer.addBrowserActors(); + } + + let transport = DebuggerServer.connectPipe(); + gClient = new DebuggerClient(transport); + gClient.connect().then(([aType, aTraits]) => { + is(aType, "browser", + "Root actor should identify itself as a browser."); + + addTab(TAB1_URL) + .then(() => attachTabActorForUrl(gClient, TAB1_URL)) + .then(testNavigate) + .then(testDetach) + .then(finish) + .then(null, aError => { + ok(false, "Got an error: " + aError.message + "\n" + aError.stack); + }); + }); +} + +function testNavigate([aGrip, aResponse]) { + let outstanding = [promise.defer(), promise.defer()]; + + gClient.addListener("tabNavigated", function onTabNavigated(aEvent, aPacket) { + is(aPacket.url, TAB2_URL, + "Got a tab navigation notification."); + + if (aPacket.state == "start") { + ok(true, "Tab started to navigate."); + outstanding[0].resolve(); + } else { + ok(true, "Tab finished navigating."); + gClient.removeListener("tabNavigated", onTabNavigated); + outstanding[1].resolve(); + } + }); + + gBrowser.selectedBrowser.loadURI(TAB2_URL); + return promise.all(outstanding.map(e => e.promise)) + .then(() => aGrip.actor); +} + +function testDetach(aActor) { + let deferred = promise.defer(); + + gClient.addOneTimeListener("tabDetached", (aType, aPacket) => { + ok(true, "Got a tab detach notification."); + is(aPacket.from, aActor, "tab detach message comes from the expected actor"); + deferred.resolve(gClient.close()); + }); + + removeTab(gBrowser.selectedTab); + return deferred.promise; +} + +registerCleanupFunction(function () { + gClient = null; +}); |