michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: loadAndWait("data:text/plain,1", function () { michael@0: loadAndWait("data:text/plain,2", function () { michael@0: loadAndWait("data:text/plain,3", runTests); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function runTests() { michael@0: duplicate(0, "maintained the original index", function () { michael@0: gBrowser.removeCurrentTab(); michael@0: michael@0: duplicate(-1, "went back", function () { michael@0: duplicate(1, "went forward", function () { michael@0: gBrowser.removeCurrentTab(); michael@0: gBrowser.removeCurrentTab(); michael@0: gBrowser.addTab(); michael@0: gBrowser.removeCurrentTab(); michael@0: finish(); michael@0: }); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function duplicate(delta, msg, cb) { michael@0: var start = gBrowser.sessionHistory.index; michael@0: michael@0: duplicateTabIn(gBrowser.selectedTab, "tab", delta); michael@0: let tab = gBrowser.selectedTab; michael@0: michael@0: tab.addEventListener("SSTabRestored", function tabRestoredListener() { michael@0: tab.removeEventListener("SSTabRestored", tabRestoredListener, false); michael@0: is(gBrowser.sessionHistory.index, start + delta, msg); michael@0: executeSoon(cb); michael@0: }, false); michael@0: } michael@0: michael@0: function loadAndWait(url, cb) { michael@0: gBrowser.selectedBrowser.addEventListener("load", function () { michael@0: gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true); michael@0: executeSoon(cb); michael@0: }, true); michael@0: michael@0: gBrowser.loadURI(url); michael@0: }