michael@0: var expected = ["TabOpen", "onStateChange", "onLocationChange", "onLinkIconAvailable"]; michael@0: var actual = []; michael@0: var tabIndex = -1; michael@0: this.__defineGetter__("tab", function () gBrowser.tabs[tabIndex]); michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: tabIndex = gBrowser.tabs.length; michael@0: gBrowser.addTabsProgressListener(progressListener); michael@0: gBrowser.tabContainer.addEventListener("TabOpen", TabOpen, false); michael@0: gBrowser.addTab("data:text/html,"); michael@0: } michael@0: michael@0: function record(aName) { michael@0: info("got " + aName); michael@0: if (actual.indexOf(aName) == -1) michael@0: actual.push(aName); michael@0: if (actual.length == expected.length) { michael@0: is(actual.toString(), expected.toString(), michael@0: "got events and progress notifications in expected order"); michael@0: gBrowser.removeTab(tab); michael@0: gBrowser.removeTabsProgressListener(progressListener); michael@0: gBrowser.tabContainer.removeEventListener("TabOpen", TabOpen, false); michael@0: finish(); michael@0: } michael@0: } michael@0: michael@0: function TabOpen(aEvent) { michael@0: if (aEvent.target == tab) michael@0: record(arguments.callee.name); michael@0: } michael@0: michael@0: var progressListener = { michael@0: onLocationChange: function onLocationChange(aBrowser) { michael@0: if (aBrowser == tab.linkedBrowser) michael@0: record(arguments.callee.name); michael@0: }, michael@0: onStateChange: function onStateChange(aBrowser) { michael@0: if (aBrowser == tab.linkedBrowser) michael@0: record(arguments.callee.name); michael@0: }, michael@0: onLinkIconAvailable: function onLinkIconAvailable(aBrowser, aIconURL) { michael@0: if (aBrowser == tab.linkedBrowser && michael@0: aIconURL == "about:logo") michael@0: record(arguments.callee.name); michael@0: } michael@0: };