[Pkg-mozext-commits] [tabmixplus] 08/32: Replace eval of gBrowserInit._delayedStartup with wrapped function, fix incompatibility with Multiple Tab Handler extension

David Prévot taffit at moszumanska.debian.org
Sun Feb 7 19:23:12 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository tabmixplus.

commit 6ce467de4d6c6cee8113fa22e14b0dcc65d2bf24
Author: onemen <tabmix.onemen at gmail.com>
Date:   Mon Dec 28 23:32:45 2015 +0200

    Replace eval of gBrowserInit._delayedStartup with wrapped function, fix incompatibility with Multiple Tab Handler extension
---
 chrome/content/links/setup.js     | 73 +++++++++++++++++++--------------------
 chrome/content/minit/tablib.js    |  1 -
 chrome/content/session/session.js |  2 +-
 chrome/content/tabmix.js          | 18 +++-------
 modules/Services.jsm              |  8 -----
 5 files changed, 42 insertions(+), 60 deletions(-)

diff --git a/chrome/content/links/setup.js b/chrome/content/links/setup.js
index f56ac00..319878b 100644
--- a/chrome/content/links/setup.js
+++ b/chrome/content/links/setup.js
@@ -123,47 +123,46 @@ Tabmix.beforeBrowserInitOnLoad = function() {
       }
     }
 
-    var loadOnStartup;
     if (prepareLoadOnStartup) {
-      // move this code from gBrowserInit.onLoad to gBrowserInit._delayedStartup after bug 756313
-      loadOnStartup =
-        '  if (uriToLoad && uriToLoad != "about:blank") {' +
-        '    for (let i = 0; i < gBrowser.tabs.length ; i++) {' +
-        '      gBrowser.tabs[i].loadOnStartup = true;' +
-        '    }' +
-        '  }' +
-        '  if (uriToLoad == TabmixSvc.aboutBlank || "tabmixdata" in window) {' +
-        '    gBrowser.selectedBrowser.stop();' +
-        '  }\n' +
-        '    $&';
-    }
-
-    // At the moment we must init TabmixSessionManager before sessionStore.init
-    var fn;
-    if (typeof gBrowserInit.__treestyletab___delayedStartup == "function") {
-      fn = "gBrowserInit.__treestyletab___delayedStartup";
+      Tabmix.prepareLoadOnStartup = function() {
+        let uriToLoad = gBrowserInit._getUriToLoad();
+        if (uriToLoad && uriToLoad != TabmixSvc.aboutBlank) {
+          let tabs = gBrowser.tabs;
+          for (let tab of tabs) {
+            tab.loadOnStartup = true;
+          }
+        }
+        if (uriToLoad == TabmixSvc.aboutBlank || "tabmixdata" in window) {
+          gBrowser.selectedBrowser.stop();
+        }
+      };
     } else {
-      fn = "gBrowserInit._delayedStartup";
+      Tabmix.prepareLoadOnStartup = function() { };
     }
 
-    let insertionPoint = "PlacesToolbarHelper.init();";
-    this.changeCode(gBrowserInit, fn)._replace(
-      '{',
-      '{\n' +
-      '  Tabmix.runningDelayedStartup = true;\n'
-    )._replace(
-      'Services.obs.addObserver', loadOnStartup, {check: !!loadOnStartup}
-    )._replace(
-      insertionPoint,
-      'try {' +
-      '  Tabmix.beforeSessionStoreInit();' +
-      '} catch (ex) {Tabmix.assert(ex);}\n' +
-      '    $&'
-    )._replace(
-      /(\})(\)?)$/,
-      '  Tabmix.runningDelayedStartup = false;\n' +
-      '$1$2'
-    ).toCode();
+    Tabmix.originalFunctions.gBrowserInit__delayedStartup = gBrowserInit._delayedStartup;
+    gBrowserInit._delayedStartup = function() {
+      try {
+        Tabmix.beforeDelayedStartup();
+      } catch (ex) {
+        Tabmix.assert(ex);
+      }
+
+      let result;
+      try {
+        // we use runningDelayedStartup in gBrowser.swapBrowsersAndCloseOther
+        Tabmix.runningDelayedStartup = true;
+        result = Tabmix.originalFunctions.gBrowserInit__delayedStartup.apply(this, arguments);
+      } finally {
+        Tabmix.runningDelayedStartup = false;
+      }
+
+      Tabmix.prepareLoadOnStartup();
+      TabmixSessionManager.init();
+      Tabmix.initialization.run("afterDelayedStartup");
+
+      return result;
+    };
 
     // look for installed extensions that are incompatible with tabmix
     if (this.firstWindowInSession && this.prefs.getBoolPref("disableIncompatible")) {
diff --git a/chrome/content/minit/tablib.js b/chrome/content/minit/tablib.js
index ca99ed8..a11a034 100644
--- a/chrome/content/minit/tablib.js
+++ b/chrome/content/minit/tablib.js
@@ -1687,7 +1687,6 @@ var tablib = { // eslint-disable-line
           return;
         }
         Tabmix._afterTabduplicated = true;
-        TabmixSessionManager.init();
         let url = aOtherTab.linkedBrowser.currentURI.spec;
         gBrowser.tabContainer.adjustTabstrip(true, url);
       }
diff --git a/chrome/content/session/session.js b/chrome/content/session/session.js
index 3b2f71e..cb8dc65 100644
--- a/chrome/content/session/session.js
+++ b/chrome/content/session/session.js
@@ -256,7 +256,7 @@ var TabmixSessionManager = { // jshint ignore:line
     return (this.prefBranch = Services.prefs.getBranch("extensions.tabmix.sessions."));
   },
 
-  // call by Tabmix.beforeSessionStoreInit
+  // call by Tabmix.beforeDelayedStartup
   init: function SM_init() {
     if (this._inited)
       return;
diff --git a/chrome/content/tabmix.js b/chrome/content/tabmix.js
index 5c7b53d..6c460f6 100644
--- a/chrome/content/tabmix.js
+++ b/chrome/content/tabmix.js
@@ -42,21 +42,13 @@ Tabmix.startup = function TMP_startup() {
 };
 
 // we call this function from gBrowserInit._delayedStartup, see setup.js
-Tabmix.beforeSessionStoreInit = function TMP_beforeSessionStoreInit() {
-  // when gBrowserInit._delayedStartup broke by extension we don't get
-  // "browser-delayed-startup-finished" notification
-  setTimeout(function() {
-    Tabmix.initialization.run("delayedStartup");
-  }, 25);
-
+Tabmix.beforeDelayedStartup = function() {
   if (this.isFirstWindow) {
     let tmp = {};
     Cu.import("resource://tabmixplus/extensions/AddonManager.jsm", tmp);
     TMP_SessionStore.setService(1, true);
   }
 
-  TabmixSessionManager.init();
-
   // if we call these functions earlier we get this warning:
   // XUL box for _moz_generated_content_before element contained an inline #text child
   // by calling getBoundingClientRect
@@ -111,7 +103,7 @@ Tabmix.sessionInitialized = function() {
 };
 
 // we call gTMPprefObserver.miscellaneousRules to add some dynamic rules
-// from Tabmix.delayedStartup
+// from Tabmix.afterDelayedStartup
 Tabmix.getButtonsHeight = function() {
   if (gBrowser.tabContainer.orient == "horizontal") {
     let tabBar = gBrowser.tabContainer;
@@ -166,7 +158,7 @@ Tabmix.getAfterTabsButtonsWidth = function TMP_getAfterTabsButtonsWidth() {
   }
 };
 
-Tabmix.delayedStartup = function TMP_delayedStartup() {
+Tabmix.afterDelayedStartup = function() {
   TabmixTabbar._enablePositionCheck = true;
 
   TMP_TabView.init();
@@ -525,7 +517,7 @@ var TMP_eventListener = {
     Tabmix.Shortcuts.onWindowOpen(window);
 
     // if treeStyleTab extension installed we call this from
-    // Tabmix.delayedStartup
+    // Tabmix.afterDelayedStartup
     if (!Tabmix.extensions.treeStyleTab)
       Tabmix.navToolbox.tabStripAreaChanged();
 
@@ -1136,7 +1128,7 @@ Tabmix.initialization = {
   onContentLoaded: {id: 2, obj: "TMP_eventListener"},
   beforeBrowserInitOnLoad: {id: 3, obj: "Tabmix"},
   onWindowOpen: {id: 4, obj: "TMP_eventListener"},
-  delayedStartup: {id: 5, obj: "Tabmix"},
+  afterDelayedStartup: {id: 5, obj: "Tabmix"},
 
   get isValidWindow() {
     /**
diff --git a/modules/Services.jsm b/modules/Services.jsm
index dc8b848..1858384 100644
--- a/modules/Services.jsm
+++ b/modules/Services.jsm
@@ -166,7 +166,6 @@ this.TabmixSvc = {
 
       this.addMissingPrefs();
 
-      Services.obs.addObserver(this, "browser-delayed-startup-finished", true);
       Services.obs.addObserver(this, "quit-application", true);
 
       if (isVersion(190))
@@ -209,13 +208,6 @@ this.TabmixSvc = {
           delete TabmixSvc.SessionStoreGlobal;
           delete TabmixSvc.SessionStore;
           break;
-        case "browser-delayed-startup-finished":
-          try {
-            aSubject.Tabmix.initialization.run("delayedStartup");
-          } catch (ex) {
-            TabmixSvc.console.assert(ex);
-          }
-          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