michael@0: var gPageA = null; michael@0: var gPageB = null; michael@0: michael@0: // cached data from events michael@0: var gTabOpenPageA = null; michael@0: var gTabOpenPageB = null; michael@0: var gTabOpenCount = 0; michael@0: var gTabCloseCount = 0; michael@0: var gTabMoveCount = 0; michael@0: var gPageLoadCount = 0; michael@0: michael@0: var rootDir = getRootDirectory(gTestPath); michael@0: const CHROMEROOT = rootDir; michael@0: michael@0: function test() { michael@0: waitForExplicitFinish(); michael@0: michael@0: var windows = Application.windows; michael@0: ok(windows, "Check access to browser windows"); michael@0: is(windows.length, 1, "There should be one browser window open"); michael@0: michael@0: var activeWin = Application.activeWindow; michael@0: activeWin.events.addListener("TabOpen", onTabOpen); michael@0: activeWin.events.addListener("TabClose", onTabClose); michael@0: activeWin.events.addListener("TabMove", onTabMove); michael@0: michael@0: gPageA = activeWin.open(makeURI(CHROMEROOT + "ContentA.html")); michael@0: gPageA.events.addListener("load", onPageAFirstLoad); michael@0: michael@0: is(activeWin.tabs.length, 2, "Checking length of 'Browser.tabs' after opening 1 additional tab"); michael@0: michael@0: function onPageAFirstLoad(event) { michael@0: gPageA.events.removeListener("load", onPageAFirstLoad); michael@0: is(gPageA.uri.spec, event.data.uri.spec, "Checking event browser tab is equal to page A"); michael@0: michael@0: gPageB = activeWin.open(makeURI(CHROMEROOT + "ContentB.html")); michael@0: gPageB.events.addListener("load", delayAfterOpen); michael@0: gPageB.focus(); michael@0: michael@0: is(activeWin.tabs.length, 3, "Checking length of 'Browser.tabs' after opening a second additional tab"); michael@0: is(activeWin.activeTab.index, gPageB.index, "Checking 'Browser.activeTab' after setting focus"); michael@0: } michael@0: michael@0: function delayAfterOpen() { michael@0: executeSoon(afterOpen); michael@0: } michael@0: michael@0: // need to wait for the url's to be refreshed during the load michael@0: function afterOpen(event) { michael@0: gPageB.events.removeListener("load", delayAfterOpen); michael@0: // check actuals michael@0: is(gPageA.uri.spec, CHROMEROOT + "ContentA.html", "Checking 'BrowserTab.uri' after opening"); michael@0: is(gPageB.uri.spec, CHROMEROOT + "ContentB.html", "Checking 'BrowserTab.uri' after opening"); michael@0: michael@0: // check event michael@0: is(gTabOpenCount, 2, "Checking event handler for tab open"); michael@0: // check cached values from TabOpen event michael@0: is(gPageA.uri.spec, gTabOpenPageA.uri.spec, "Checking first browser tab open is equal to page A"); michael@0: is(gPageB.uri.spec, gTabOpenPageB.uri.spec, "Checking second browser tab open is equal to page B"); michael@0: michael@0: // test document access michael@0: var test1 = gPageA.document.getElementById("test1"); michael@0: ok(test1, "Checking existence of element in content DOM"); michael@0: is(test1.innerHTML, "A", "Checking content of element in content DOM"); michael@0: michael@0: // test moving tab michael@0: is(gTabMoveCount, 0, "Checking initial tab move count"); michael@0: michael@0: // move the tab michael@0: gPageA.moveToEnd(); michael@0: is(gPageA.index, 2, "Checking index after moving tab"); michael@0: michael@0: // check event michael@0: is(gTabMoveCount, 1, "Checking event handler for tab move"); michael@0: michael@0: gBrowser.addProgressListener({ michael@0: onStateChange: function (webProgress, request, stateFlags, status) { michael@0: info("onStateChange: " + stateFlags); michael@0: michael@0: const complete = Ci.nsIWebProgressListener.STATE_IS_WINDOW + michael@0: Ci.nsIWebProgressListener.STATE_IS_NETWORK + michael@0: Ci.nsIWebProgressListener.STATE_STOP; michael@0: if ((stateFlags & complete) == complete) { michael@0: gBrowser.removeProgressListener(this); michael@0: onPageBLoadComplete(); michael@0: } michael@0: }, michael@0: onLocationChange: function () 0, michael@0: onProgressChange: function () 0, michael@0: onStatusChange: function () 0, michael@0: onSecurityChange: function () 0 michael@0: }); michael@0: michael@0: // test loading new content with a frame into a tab michael@0: // the event will be checked in onPageBLoadComplete michael@0: gPageB.events.addListener("load", onPageBLoadWithFrames); michael@0: gPageB.load(makeURI(CHROMEROOT + "ContentWithFrames.html")); michael@0: } michael@0: michael@0: function onPageBLoadWithFrames(event) { michael@0: gPageLoadCount++; michael@0: info("onPageBLoadWithFrames: " + gPageLoadCount); michael@0: } michael@0: michael@0: function onPageBLoadComplete() { michael@0: gPageB.events.removeListener("load", onPageBLoadWithFrames); michael@0: // check page load with frame event michael@0: is(gPageLoadCount, 1, "Checking load count after loading new content with a frame"); michael@0: michael@0: // test loading new content into a tab michael@0: // the event will be checked in onPageASecondLoad michael@0: gPageA.events.addListener("load", onPageASecondLoad); michael@0: gPageA.load(makeURI(CHROMEROOT + "ContentB.html")); michael@0: } michael@0: michael@0: function onPageASecondLoad(event) { michael@0: gPageA.events.removeListener("load", onPageASecondLoad); michael@0: is(gPageA.uri.spec, CHROMEROOT + "ContentB.html", "Checking 'BrowserTab.uri' after loading new content"); michael@0: michael@0: // start testing closing tabs michael@0: // the event will be checked in afterClose michael@0: // use executeSoon so the onPageASecondLoad michael@0: // has a chance to finish first michael@0: gPageA.close(); michael@0: gPageB.close(); michael@0: michael@0: is(gTabCloseCount, 2, "Checking that tabs closed"); michael@0: is(activeWin.tabs.length, 1, "Checking length of 'Browser.tabs' after closing 2 tabs"); michael@0: finish(); michael@0: } michael@0: } michael@0: function onTabOpen(event) { michael@0: gTabOpenCount++; michael@0: michael@0: // cache these values so we can check them later (after loading completes) michael@0: if (gTabOpenCount == 1) michael@0: gTabOpenPageA = event.data; michael@0: michael@0: if (gTabOpenCount == 2) michael@0: gTabOpenPageB = event.data; michael@0: } michael@0: function onTabClose(event) { michael@0: gTabCloseCount++; michael@0: } michael@0: michael@0: function onTabMove(event) { michael@0: gTabMoveCount++; michael@0: }