Commit dcf4daa0 authored by Mike Perry's avatar Mike Perry
Browse files

Add firefox 3.5 version of session store component.

parent 39505586
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
--- nsSessionStore3.js.orig	2009-02-25 02:23:59.000000000 -0800
+++ nsSessionStore3.js	2009-02-26 07:01:10.000000000 -0800
@@ -99,9 +99,21 @@
--- nsSessionStore3.js.orig	2009-11-18 17:22:53.000000000 -0800
+++ nsSessionStore3.js	2009-11-18 17:23:42.000000000 -0800
@@ -99,9 +99,22 @@
   "Subframes", "Plugins", "Javascript", "MetaRedirects", "Images"
 ];
 
@@ -13,7 +13,8 @@
+var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
+  .getService(Components.interfaces.nsIVersionComparator);
+
+if(versionChecker.compare(appInfo.version, "3.0a1") >= 0) {
+if(versionChecker.compare(appInfo.version, "3.0a1") >= 0
+        && versionChecker.compare(appInfo.version, "3.5a1") <= 0) {
+    is_FF3 = true;
+    // module for JSON conversion (needed for the nsISessionStore API)
+    Cu.import("resource://gre/modules/JSON.jsm");
@@ -25,7 +26,7 @@
 
 function debug(aMsg) {
   aMsg = ("SessionStore: " + aMsg).replace(/\S{80}/g, "$&\n");
@@ -112,6 +124,9 @@
@@ -112,6 +125,9 @@
 /* :::::::: The Service ::::::::::::::: */
 
 function SessionStoreService() {
@@ -35,7 +36,7 @@
 }
 
 SessionStoreService.prototype = {
@@ -857,9 +872,26 @@
@@ -862,9 +878,26 @@
     var tabbrowser = aWindow.getBrowser();
     var tabs = tabbrowser.mTabs;
     var tabsData = this._windows[aWindow.__SSi].tabs = [];
@@ -65,7 +66,7 @@
     
     this._windows[aWindow.__SSi].selected = tabbrowser.mTabBox.selectedIndex + 1;
   },
@@ -892,6 +924,7 @@
@@ -897,6 +930,7 @@
     if (history && browser.parentNode.__SS_data &&
         browser.parentNode.__SS_data.entries[history.index] && !aFullData) {
       tabData = browser.parentNode.__SS_data;
@@ -73,7 +74,7 @@
       tabData.index = history.index + 1;
     }
     else if (history && history.count > 0) {
@@ -1109,7 +1142,7 @@
@@ -1114,7 +1148,7 @@
     for (var i = 0; i < browsers.length; i++) {
       try {
         var tabData = this._windows[aWindow.__SSi].tabs[i];
@@ -82,7 +83,7 @@
             browsers[i].parentNode.__SS_data && browsers[i].parentNode.__SS_data._tab)
           continue; // ignore incompletely initialized tabs
         this._updateTextAndScrollDataForTab(aWindow, browsers[i], tabData);
@@ -2182,5 +2215,23 @@
@@ -2187,5 +2221,23 @@
   }
 };
 
+9 −3
Original line number Diff line number Diff line
@@ -105,7 +105,8 @@ var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
  .getService(Components.interfaces.nsIVersionComparator);

if(versionChecker.compare(appInfo.version, "3.0a1") >= 0) {
if(versionChecker.compare(appInfo.version, "3.0a1") >= 0
        && versionChecker.compare(appInfo.version, "3.5a1") <= 0) {
    is_FF3 = true;
    // module for JSON conversion (needed for the nsISessionStore API)
    Cu.import("resource://gre/modules/JSON.jsm");
@@ -394,8 +395,13 @@ SessionStoreService.prototype = {
        break;
      case "TabOpen":
      case "TabClose":
        var panelID = aEvent.originalTarget.linkedPanel;
        var tabpanel = aEvent.originalTarget.ownerDocument.getElementById(panelID);
        let target = aEvent.originalTarget;
        let panelID = target.linkedPanel;
        let ownerDoc = target.ownerDocument;
        let bindingParent = ownerDoc.getBindingParent(target);
        let tabpanel =
          ownerDoc.getAnonymousElementByAttribute(bindingParent, "id",
                                                  panelID);
        if (aEvent.type == "TabOpen") {
          this.onTabAdd(aEvent.currentTarget.ownerDocument.defaultView, tabpanel);
        }
+108 −0
Original line number Diff line number Diff line
--- ./nsSessionStore.js	2009-11-02 15:01:50.000000000 -0800
+++ ./nsSessionStore35.js	2009-11-18 17:02:54.000000000 -0800
@@ -106,7 +106,20 @@
   "Subframes", "Plugins", "Javascript", "MetaRedirects", "Images"
 ];
 
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+var is_FF35 = false;
+var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
+  .getService(Components.interfaces.nsIXULAppInfo);
+var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"]
+  .getService(Components.interfaces.nsIVersionComparator);
+
+if(versionChecker.compare(appInfo.version, "3.5a1") >= 0
+        && versionChecker.compare(appInfo.version, "3.6a1") <= 0) {
+    is_FF35 = true;
+    Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+} else {
+    is_FF35 = false;
+    var XPCOMUtils = { generateQI: function() { return null; } };
+}
 
 function debug(aMsg) {
   aMsg = ("SessionStore: " + aMsg).replace(/\S{80}/g, "$&\n");
@@ -117,6 +130,9 @@
 /* :::::::: The Service ::::::::::::::: */
 
 function SessionStoreService() {
+  this.logger = Components.classes["@torproject.org/torbutton-logger;1"]
+      .getService(Components.interfaces.nsISupports).wrappedJSObject;
+  this.logger.log(3, "Component Load: New SessionStoreService @mozilla.org/browser/sessionstore;1");
 }
 
 SessionStoreService.prototype = {
@@ -1064,9 +1080,26 @@
     var tabbrowser = aWindow.getBrowser();
     var tabs = tabbrowser.mTabs;
     var tabsData = this._windows[aWindow.__SSi].tabs = [];
-    
-    for (var i = 0; i < tabs.length; i++)
-      tabsData.push(this._collectTabData(tabs[i]));
+    var prefs = Components.classes["@mozilla.org/preferences-service;1"]
+        .getService(Components.interfaces.nsIPrefBranch);
+    var bypass_tor = prefs.getBoolPref("extensions.torbutton.notor_sessionstore");
+    var bypass_nontor = prefs.getBoolPref("extensions.torbutton.nonontor_sessionstore");
+  
+    for (var i = 0; i < tabs.length; i++) {
+      if(typeof(tabs[i].linkedBrowser.__tb_tor_fetched) != "undefined") {
+          if(bypass_tor && tabs[i].linkedBrowser.__tb_tor_fetched) {
+              this.logger.log(2, "Skipping saving tor tab: "+tabs[i].linkedBrowser.currentURI.spec);
+              continue; 
+          }
+          if(bypass_nontor && !tabs[i].linkedBrowser.__tb_tor_fetched) {
+              this.logger.log(2, "Skipping saving non-tor tab: "+tabs[i].linkedBrowser.currentURI.spec);
+              continue; 
+          }
+      }
+      this.logger.log(2, "Saving tab: "+tabs[i].linkedBrowser.currentURI.spec);
+      var tabData = this._collectTabData(tabs[i]);
+      if(tabData) tabsData.push(tabData);
+    }
     
     this._windows[aWindow.__SSi].selected = tabbrowser.mTabBox.selectedIndex + 1;
   },
@@ -1102,6 +1135,7 @@
         browser.parentNode.__SS_data.entries[history.index] &&
         history.index < this._sessionhistory_max_entries - 1 && !aFullData) {
       tabData = browser.parentNode.__SS_data;
+      if(!tabData) return null;
       tabData.index = history.index + 1;
     }
     else if (history && history.count > 0) {
@@ -1336,7 +1370,8 @@
     for (var i = 0; i < browsers.length; i++) {
       try {
         var tabData = this._windows[aWindow.__SSi].tabs[i];
-        if (browsers[i].parentNode.__SS_data &&
+        if (!tabData || tabData.entries.length == 0 ||
+            browsers[i].parentNode.__SS_data &&
             browsers[i].parentNode.__SS_data._tabStillLoading)
           continue; // ignore incompletely initialized tabs
         this._updateTextAndScrollDataForTab(aWindow, browsers[i], tabData);
@@ -2919,5 +2954,23 @@
          (prevChar == "." || prevChar == "/");
 }
 
-function NSGetModule(aComMgr, aFileSpec)
-  XPCOMUtils.generateModule([SessionStoreService]);
+const NoModule = {
+  getClassObject: function(aCompMgr, aCID, aIID) {
+    Components.returnCode = Cr.NS_ERROR_NOT_REGISTERED;
+    return null;
+  },
+  registerSelf: function(aCompMgr, aFileSpec, aLocation, aType) { return; },
+  unregisterSelf: function(aCompMgr, aLocation, aType) { return; },
+  canUnload: function(aCompMgr) { return true; }
+};
+
+
+function NSGetModule(aComMgr, aFileSpec) {
+  var prefs = Components.classes["@mozilla.org/preferences-service;1"]
+        .getService(Components.interfaces.nsIPrefBranch);
+  if(is_FF35) {
+      return XPCOMUtils.generateModule([SessionStoreService]);
+  } else {
+      return NoModule;
+  }
+}
+2976 −0

File added.

Preview size limit exceeded, changes collapsed.