michael@0: var tab1, tab2; michael@0: michael@0: function focus_in_navbar() michael@0: { michael@0: var parent = document.activeElement.parentNode; michael@0: while (parent && parent.id != "nav-bar") michael@0: parent = parent.parentNode; michael@0: michael@0: return parent != null; michael@0: } michael@0: michael@0: function test() michael@0: { michael@0: waitForExplicitFinish(); michael@0: michael@0: tab1 = gBrowser.addTab("about:blank", {skipAnimation: true}); michael@0: tab2 = gBrowser.addTab("about:blank", {skipAnimation: true}); michael@0: michael@0: EventUtils.synthesizeMouseAtCenter(tab1, {}); michael@0: setTimeout(step2, 0); michael@0: } michael@0: michael@0: function step2() michael@0: { michael@0: is(gBrowser.selectedTab, tab1, "1st click on tab1 selects tab"); michael@0: isnot(document.activeElement, tab1, "1st click on tab1 does not activate tab"); michael@0: michael@0: EventUtils.synthesizeMouseAtCenter(tab1, {}); michael@0: setTimeout(step3, 0); michael@0: } michael@0: michael@0: function step3() michael@0: { michael@0: is(gBrowser.selectedTab, tab1, "2nd click on selected tab1 keeps tab selected"); michael@0: isnot(document.activeElement, tab1, "2nd click on selected tab1 does not activate tab"); michael@0: michael@0: ok(true, "focusing URLBar then sending 1 Shift+Tab."); michael@0: gURLBar.focus(); michael@0: EventUtils.synthesizeKey("VK_TAB", {shiftKey: true}); michael@0: is(gBrowser.selectedTab, tab1, "tab key to selected tab1 keeps tab selected"); michael@0: is(document.activeElement, tab1, "tab key to selected tab1 activates tab"); michael@0: michael@0: EventUtils.synthesizeMouseAtCenter(tab1, {}); michael@0: setTimeout(step4, 0); michael@0: } michael@0: michael@0: function step4() michael@0: { michael@0: is(gBrowser.selectedTab, tab1, "3rd click on activated tab1 keeps tab selected"); michael@0: is(document.activeElement, tab1, "3rd click on activated tab1 keeps tab activated"); michael@0: michael@0: EventUtils.synthesizeMouseAtCenter(tab2, {}); michael@0: setTimeout(step5, 0); michael@0: } michael@0: michael@0: function step5() michael@0: { michael@0: // The tabbox selects a tab within a setTimeout in a bubbling mousedown event michael@0: // listener, and focuses the current tab if another tab previously had focus. michael@0: is(gBrowser.selectedTab, tab2, "click on tab2 while tab1 is activated selects tab"); michael@0: is(document.activeElement, tab2, "click on tab2 while tab1 is activated activates tab"); michael@0: michael@0: ok(true, "focusing content then sending middle-button mousedown to tab2."); michael@0: gBrowser.selectedBrowser.focus(); michael@0: EventUtils.synthesizeMouseAtCenter(tab2, {button: 1, type: "mousedown"}); michael@0: setTimeout(step6, 0); michael@0: } michael@0: michael@0: function step6() michael@0: { michael@0: is(gBrowser.selectedTab, tab2, "middle-button mousedown on selected tab2 keeps tab selected"); michael@0: isnot(document.activeElement, tab2, "middle-button mousedown on selected tab2 does not activate tab"); michael@0: michael@0: gBrowser.removeTab(tab2); michael@0: gBrowser.removeTab(tab1); michael@0: michael@0: finish(); michael@0: }