[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