diff --git a/modules/base.js b/modules/base.js index 11b34234..eedcd8df 100644 --- a/modules/base.js +++ b/modules/base.js @@ -1109,6 +1109,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { return null; }, + // this is used only for obsolete API call on non-E10S windows getTabFromFrame : function TSTBase_getTabFromFrame(aFrame, aTabBrowser) { var b = aTabBrowser || this.browser; @@ -1259,27 +1260,27 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { this.browser ; }, - getFrameFromTabBrowserElements : function TSTBase_getFrameFromTabBrowserElements(aFrameOrTabBrowser) + getBrowserFromTabBrowserElements : function TSTBase_getBrowserFromTabBrowserElements(aTarget) { - var frame = aFrameOrTabBrowser; - if (frame == '[object XULElement]') { - if (frame.localName == 'tab') { - frame = frame.linkedBrowser.contentWindow; - } - else if (frame.localName == 'browser') { - frame = frame.contentWindow; - } - else { - frame = this.getTabBrowserFromChild(frame); - if (!frame) - return null; - frame = frame.contentWindow; - } - } - if (!frame) - frame = this.browser.contentWindow; + if (aTarget == '[object XULElement]') { + if (aTarget.localName == 'tab') + return aTarget.linkedBrowser; - return frame; + if (aTarget.localName == 'browser') + return aTarget; + + aTarget = this.getTabBrowserFromChild(aTarget); + if (aTarget) + return aTarget.selectedTab.linkedBrowser; + else + return null; + } + if (aTarget == '[object Window]' || aTarget == '[object ChromeWindow]') { + let tab = this.getTabFromFrame(aTarget, this.getTabBrowserFromFrame(aTarget)); + if (tab) + return tab.linkedBrowser; + } + return this.browser.selectedTab.linkedBrowser; }, /* get tab(s) */ @@ -1538,18 +1539,18 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { /* notify "ready to open child tab(s)" */ - readyToOpenChildTab : function TSTBase_readyToOpenChildTab(aFrameOrTabBrowser, aMultiple, aInsertBefore) /* PUBLIC API */ + readyToOpenChildTab : function TSTBase_readyToOpenChildTab(aTabOrSomething, aMultiple, aInsertBefore) /* PUBLIC API */ { if (!utils.getTreePref('autoAttach')) return false; - var frame = this.getFrameFromTabBrowserElements(aFrameOrTabBrowser); - if (!frame) + var browser = this.getBrowserFromTabBrowserElements(aTabOrSomething); + if (!browser) return false; - var ownerBrowser = this.getTabBrowserFromFrame(frame); + var ownerBrowser = this.getTabBrowserFromFrame(browser); - var parentTab = this.getTabFromFrame(frame, ownerBrowser); + var parentTab = this.getTabFromBrowser(browser, ownerBrowser); if (!parentTab || parentTab.getAttribute('pinned') == 'true') return false; @@ -1593,15 +1594,15 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { return false; }, - readyToOpenNextSiblingTab : function TSTBase_readyToOpenNextSiblingTab(aFrameOrTabBrowser) /* PUBLIC API */ + readyToOpenNextSiblingTab : function TSTBase_readyToOpenNextSiblingTab(aTabOrSomething) /* PUBLIC API */ { - var frame = this.getFrameFromTabBrowserElements(aFrameOrTabBrowser); - if (!frame) + var browser = this.getBrowserFromTabBrowserElements(aTabOrSomething); + if (!browser) return false; - var ownerBrowser = this.getTabBrowserFromFrame(frame); + var ownerBrowser = this.getTabBrowserFromChild(browser); - var tab = this.getTabFromFrame(frame, ownerBrowser); + var tab = this.getTabFromBrowser(browser, ownerBrowser); if (!tab || tab.getAttribute('pinned') == 'true') return false; @@ -1654,13 +1655,13 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { if (!utils.getTreePref('autoAttach')) return false; - var frame = this.getFrameFromTabBrowserElements(aFrameOrTabBrowser); - if (!frame) + var browser = this.getBrowserFromTabBrowserElements(aTabOrSomething); + if (!browser) return false; - this.stopToOpenChildTab(frame); + this.stopToOpenChildTab(browser); - var ownerBrowser = this.getTabBrowserFromFrame(frame); + var ownerBrowser = this.getTabBrowserFromFrame(browser); ownerBrowser.treeStyleTab.readiedToAttachNewTabGroup = true; ownerBrowser.treeStyleTab.readiedToAttachMultiple = true; ownerBrowser.treeStyleTab.multipleCount = 0; @@ -1691,13 +1692,13 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { return false; }, - stopToOpenChildTab : function TSTBase_stopToOpenChildTab(aFrameOrTabBrowser) /* PUBLIC API */ + stopToOpenChildTab : function TSTBase_stopToOpenChildTab(aTabOrSomething) /* PUBLIC API */ { - var frame = this.getFrameFromTabBrowserElements(aFrameOrTabBrowser); - if (!frame) + var browser = this.getBrowserFromTabBrowserElements(aTabOrSomething); + if (!browser) return false; - var ownerBrowser = this.getTabBrowserFromFrame(frame); + var ownerBrowser = this.getTabBrowserFromChild(browser); ownerBrowser.treeStyleTab.readiedToAttachNewTab = false; ownerBrowser.treeStyleTab.readiedToAttachNewTabGroup = false; ownerBrowser.treeStyleTab.readiedToAttachMultiple = false; @@ -1710,13 +1711,13 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { return true; }, - checkToOpenChildTab : function TSTBase_checkToOpenChildTab(aFrameOrTabBrowser) /* PUBLIC API */ + checkToOpenChildTab : function TSTBase_checkToOpenChildTab(aTabOrSomething) /* PUBLIC API */ { - var frame = this.getFrameFromTabBrowserElements(aFrameOrTabBrowser); - if (!frame) + var browser = this.getBrowserFromTabBrowserElements(aTabOrSomething); + if (!browser) return false; - var ownerBrowser = this.getTabBrowserFromFrame(frame); + var ownerBrowser = this.getTabBrowserFromChild(browser); return !!(ownerBrowser.treeStyleTab.readiedToAttachNewTab || ownerBrowser.treeStyleTab.readiedToAttachNewTabGroup); }, @@ -1727,11 +1728,11 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, { kNEWTAB_OPEN_AS_NEXT_SIBLING : 3, readyToOpenRelatedTabAs : function TSTBase_readyToOpenRelatedTabAs(aBaseTab, aBehavior) { - var frame = this.getFrameFromTabBrowserElements(aBaseTab); - if (!frame) + var browser = this.getBrowserFromTabBrowserElements(aBaseTab); + if (!browser) return; - aBaseTab = this.getTabFromFrame(frame, this.getTabBrowserFromFrame(frame)); + aBaseTab = this.getTabFromBrowser(browser, this.getTabBrowserFromChild(browser)); switch (aBehavior) { diff --git a/modules/browser.js b/modules/browser.js index 115009ad..34a45c72 100644 --- a/modules/browser.js +++ b/modules/browser.js @@ -3764,6 +3764,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, { if (!tab.selected && this.mTabBrowser.currentURI.spec == 'about:sessionrestore') { + // because this is a chrome document, E10S is not applied. let frame = this.mTabBrowser.contentWindow; frame = frame.wrappedJSObject || frame; let tree = frame.document.getElementById('tabList'); diff --git a/tests/unit/treestyletab_tabUtils.test.js b/tests/unit/treestyletab_tabUtils.test.js index 382b3f61..8f07b9d9 100644 --- a/tests/unit/treestyletab_tabUtils.test.js +++ b/tests/unit/treestyletab_tabUtils.test.js @@ -79,33 +79,27 @@ function test_getTabBrowserFromFrame() assertTabBrowserFrame(gBrowser, null); } -function test_getFrameFromTabBrowserElements() +function test_getBrowserFromTabBrowserElements() { - function assertFrameTabBrowser(aExpected, aArgument) + function assertBrowser(aExpected, aArgument) { - assert.equals(aExpected, sv.getFrameFromTabBrowserElements(aArgument)); + assert.equals(aExpected, sv.getBrowserFromTabBrowserElements(aArgument)); } - var tab, frame; + var tab, browser; tab = gBrowser.selectedTab; - frame = gBrowser.contentWindow; - assertFrameTabBrowser(frame, frame); - assertFrameTabBrowser(frame, tab); - assertFrameTabBrowser(frame, tab.linkedBrowser); - assertFrameTabBrowser(frame, tab.ownerDocument.getAnonymousNodes(tab)[0]); + browser = tab.linkedBrowser; + assertBrowser(browser, browser); + assertBrowser(browser, tab); + assertBrowser(browser, tab.linkedBrowser); + assertBrowser(browser, tab.ownerDocument.getAnonymousNodes(tab)[0]); - assertFrameTabBrowser(tabs[2].linkedBrowser.contentWindow, tabs[2]); - frame = tabs[2].linkedBrowser.contentWindow.frames[1]; - assertFrameTabBrowser(frame, frame); + assertBrowser(tabs[2].linkedBrowser, tabs[2]); - assertFrameTabBrowser(tabs[3].linkedBrowser.contentWindow, tabs[3]); - frame = tabs[3].linkedBrowser.contentWindow.frames[0]; - assertFrameTabBrowser(frame, frame); - - assertFrameTabBrowser(gBrowser.contentWindow, null); - assertFrameTabBrowser(gBrowser.contentWindow, gBrowser); - assert.isNull(sv.getFrameFromTabBrowserElements(gBrowser.parentNode)); + assertBrowser(browser, null); + assertBrowser(browser, gBrowser); + assert.isNull(sv.getBrowserFromTabBrowserElements(gBrowser.parentNode)); } function test_tabID()