[Pkg-mozext-commits] [tabmixplus] 21/34: [e10s] Stop using unsafe CPOW by MergeWindows.moveTabsFromPopups
David Prévot
taffit at moszumanska.debian.org
Mon Mar 9 23:28:08 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository tabmixplus.
commit ee2da45b13e6964ead8fb778f6f26fd915324b5b
Author: onemen <tabmix.onemen at gmail.com>
Date: Sun Feb 22 22:06:05 2015 +0200
[e10s] Stop using unsafe CPOW by MergeWindows.moveTabsFromPopups
---
chrome/content/content.js | 4 +++
modules/MergeWindows.jsm | 65 ++++++++++++++++++++++++++++++-----------------
modules/Utils.jsm | 13 ++++++++--
3 files changed, 56 insertions(+), 26 deletions(-)
diff --git a/chrome/content/content.js b/chrome/content/content.js
index 035928e..022933c 100644
--- a/chrome/content/content.js
+++ b/chrome/content/content.js
@@ -33,6 +33,7 @@ let TabmixContentHandler = {
"Tabmix:setScrollPosition",
"Tabmix:collectReloadData",
"Tabmix:isFrameInContent",
+ "Tabmix:collectOpener",
],
init: function () {
@@ -95,6 +96,9 @@ let TabmixContentHandler = {
let result = LinkNodeUtils.isFrameInContent(content, data.href, data.name);
sendAsyncMessage("Tabmix:isFrameInContentResult", {result: result});
break;
+ case "Tabmix:collectOpener":
+ sendSyncMessage("Tabmix:getOpener", {}, {opener: content.opener});
+ break;
}
},
diff --git a/modules/MergeWindows.jsm b/modules/MergeWindows.jsm
index 5b2cb5c..5e9e23f 100644
--- a/modules/MergeWindows.jsm
+++ b/modules/MergeWindows.jsm
@@ -118,6 +118,30 @@ this.MergeWindows = {
this.swapTabs(aTargetWindow, tabsToMove);
},
+ // tabs from popup windows open after opener or at the end
+ // other tabs open according to our openTabNext preference
+ // and move to place by tabbrowser.addTab
+ moveTabsFromPopups: function(newTab, aTab, openerWindow, tabbrowser) {
+ if (!newTab) {
+ newTab = aTab.__tabmixNewTab;
+ delete aTab.__tabmixNewTab;
+ tabbrowser = newTab.ownerDocument.defaultView.gBrowser;
+ }
+ let index = tabbrowser.tabs.length - 1;
+ if (openerWindow) {
+ // since we merge popup after all other tabs was merged,
+ // we only look for opener in the target window
+ let openerTab = openerWindow &&
+ tabbrowser._getTabForContentWindow(openerWindow.top);
+ if (openerTab)
+ index = openerTab._tPos + 1;
+ }
+ let lastRelatedTab = tabbrowser._lastRelatedTab;
+ tabbrowser.moveTabTo(newTab, index);
+ tabbrowser._lastRelatedTab = lastRelatedTab;
+ tabbrowser.swapBrowsersAndCloseOther(newTab, aTab);
+ },
+
// move tabs to a window
swapTabs: function TMP_swapTabs(aWindow, tabs) {
var currentWindow = TabmixSvc.topWin();
@@ -131,26 +155,7 @@ this.MergeWindows = {
var tabbrowser = aWindow.gBrowser;
- // tabs from popup windows open after opener or at the end
- // other tabs open according to our openTabNext preference
- // and move to place by tabbrowser.addTab
var placePopupNextToOpener = this.prefs.getBoolPref("placePopupNextToOpener");
- function moveTabsFromPopups(newTab, aTab) {
- let index = tabbrowser.tabs.length - 1;
- if (placePopupNextToOpener) {
- // since we merge popup after all other tabs was merged,
- // we only look for opener in the target window
- let openerWindow = aTab.linkedBrowser[TabmixSvc.contentWindowAsCPOW].opener;
- let openerTab = openerWindow &&
- tabbrowser._getTabForContentWindow(openerWindow.top);
- if (openerTab)
- index = openerTab._tPos + 1;
- }
- let lastRelatedTab = tabbrowser._lastRelatedTab;
- tabbrowser.moveTabTo(newTab, index);
- tabbrowser._lastRelatedTab = lastRelatedTab;
- }
-
var tabToSelect = null;
// make sure that the tabs will open in the same order
let prefVal = this.prefs.getBoolPref("openTabNextInverse");
@@ -166,11 +171,23 @@ this.MergeWindows = {
tab.removeAttribute("_TMP_selectAfterMerege");
tabToSelect = newTab;
}
- if (isPopup)
- moveTabsFromPopups(newTab, tab);
- // we don't keep tab attributs: visited, tabmix_selectedID
- // see in Tabmix.copyTabData list of attributs we copy to the new tab
- tabbrowser.swapBrowsersAndCloseOther(newTab, tab);
+ if (isPopup) {
+ let openerWindow;
+ if (placePopupNextToOpener) {
+ if (TabmixSvc.version(330) && tab.getAttribute("remote") == "true") {
+ tab.linkedBrowser.messageManager.sendAsyncMessage("Tabmix:collectOpener");
+ tab.__tabmixNewTab = newTab;
+ return;
+ }
+ openerWindow = tab.linkedBrowser.contentWindow.opener;
+ }
+ this.moveTabsFromPopups(newTab, tab, openerWindow, tabbrowser);
+ }
+ else {
+ // we don't keep tab attributs: visited, tabmix_selectedID
+ // see in Tabmix.copyTabData list of attributs we copy to the new tab
+ tabbrowser.swapBrowsersAndCloseOther(newTab, tab);
+ }
}
this.prefs.setBoolPref("openTabNextInverse", prefVal);
diff --git a/modules/Utils.jsm b/modules/Utils.jsm
index 1945a1b..1ee3720 100644
--- a/modules/Utils.jsm
+++ b/modules/Utils.jsm
@@ -10,6 +10,7 @@ const FMM_MESSAGES = [
"Tabmix:restorePermissionsComplete",
"Tabmix:updateScrollPosition",
"Tabmix:reloadTab",
+ "Tabmix:getOpener",
];
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
@@ -22,6 +23,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "DocShellCapabilities",
"resource://tabmixplus/DocShellCapabilities.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AutoReload",
"resource://tabmixplus/AutoReload.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "MergeWindows",
+ "resource://tabmixplus/MergeWindows.jsm");
this.TabmixUtils = {
initMessageManager: function(window) {
@@ -39,6 +42,7 @@ this.TabmixUtils = {
receiveMessage: function(message) {
let browser = message.target;
+ let win, tab;
switch (message.name) {
case "Tabmix:SetSyncHandler":
TabmixSvc.syncHandlers.set(browser.permanentKey, message.objects.syncHandler);
@@ -47,13 +51,18 @@ this.TabmixUtils = {
DocShellCapabilities.update(browser, message.data);
break;
case "Tabmix:updateScrollPosition":
- let win = browser.ownerDocument.defaultView;
- let tab = win.gBrowser.getTabForBrowser(browser);
+ win = browser.ownerDocument.defaultView;
+ tab = win.gBrowser.getTabForBrowser(browser);
win.TabmixSessionManager.updateScrollPosition(tab, message.data.scroll);
break;
case "Tabmix:reloadTab":
AutoReload.reloadRemoteTab(browser, message.data);
break;
+ case "Tabmix:getOpener":
+ win = browser.ownerDocument.defaultView;
+ tab = win.gBrowser.getTabForBrowser(browser);
+ MergeWindows.moveTabsFromPopups(null, tab, message.objects.opener);
+ break;
}
},
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tabmixplus.git
More information about the Pkg-mozext-commits
mailing list