Sophie

Sophie

distrib > Mandriva > 2009.0 > x86_64 > media > main-testing-src > by-pkgid > e2806d1ea9081063551936fb954453b9 > files > 6

kompozer-0.7.10-3.1mdv2009.0.src.rpm

--- mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in.fixextensionsmanager	2004-10-12 08:19:47.000000000 +0200
+++ mozilla/toolkit/mozapps/extensions/src/nsExtensionManager.js.in	2005-01-18 15:45:41.324642191 +0100
@@ -20,6 +20,7 @@
  *
  * Contributor(s):
  *  Ben Goodger <ben@bengoodger.com>
+ *  Mike Hommey <mh@glandium.org>
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
@@ -144,6 +145,19 @@
 }
 
 // Returns the file at the appropriate point in a directory hierarchy under
+// the specified key. Does NOT create the file NOR the directories along the
+// way.
+function getFileNoCreateDir(aKey, aPathToFile)
+{
+  var subdirs = [];
+  for (var i = 0; i < aPathToFile.length - 1; ++i)
+    subdirs.push(aPathToFile[i]);
+  var file = getDirNoCreate(aKey, subdirs);
+  file.append(aPathToFile[aPathToFile.length - 1]);
+  return file;
+}
+
+// Returns the file at the appropriate point in a directory hierarchy under
 // the specified key, creating directories along the way if necessary. Does
 // NOT create the file.
 function getFile(aKey, aPathToFile)
@@ -675,9 +689,17 @@
 function nsInstallLogReader(aExtensionID, aIsProfile, aListener)
 {
   this._isProfile = aIsProfile;
-  this.uninstallLog = getFile(getDirKey(aIsProfile),
+  this.uninstallLog = getFileNoCreateDir(getDirKey(aIsProfile),
                               [DIR_EXTENSIONS, aExtensionID, 
                                DIR_UNINSTALL, FILE_UNINSTALL_LOG]);
+  // If the uninstall Log doesn't exist in profile, let's give a try in
+  // global extension pool.
+  if (aIsProfile && !this.uninstallLog.exists()) {
+    this._isProfile = false;
+    this.uninstallLog = getFileNoCreateDir(getDirKey(false),
+                                           [DIR_EXTENSIONS, aExtensionID,
+                                            DIR_UNINSTALL, FILE_UNINSTALL_LOG]);
+  }
   this._listener = aListener
 }
 
@@ -829,26 +851,20 @@
   {
     // extension,{GUID} or theme,{GUID}
     var parts = aLine.split(",");
-    var manifest = getFile(KEY_APPDIR, 
+    var manifest = getFileNoCreateDir(KEY_APPDIR, 
                            [DIR_EXTENSIONS, parts[1], FILE_INSTALL_MANIFEST]);
     if (parts.length != 2)
       return;
       
-    if (!manifest.exists()) {
-      defaultManifest = defaultFile = getFile(KEY_DEFAULTS, 
-                                              [DIR_DEFAULTS_EXTENSIONS, parts[1], FILE_INSTALL_MANIFEST]);
-      var extensionDir = getDir(KEY_APPDIR, [DIR_EXTENSIONS, parts[1]]);
-      defaultManifest.copyTo(extensionDir, FILE_INSTALL_MANIFEST);
-      manifest = getFile(KEY_APPDIR, 
-                         [DIR_EXTENSIONS, parts[1], FILE_INSTALL_MANIFEST]);
-    }
-    switch (parts[0]) {
-    case this.TOKEN_EXTENSION:
-      this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_EXTENSION, manifest);
-      break;
-    case this.TOKEN_THEME:
-      this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_THEME, manifest);
-      break;
+    if (manifest.exists()) {
+      switch (parts[0]) {
+      case this.TOKEN_EXTENSION:
+        this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_EXTENSION, manifest);
+        break;
+      case this.TOKEN_THEME:
+        this._manager.ensurePreConfiguredItem(parts[1], nsIUpdateItem.TYPE_THEME, manifest);
+        break;
+      }
     }
   }
 };
@@ -929,7 +945,7 @@
     this._installExtensionFiles();
     
     // Load the metadata datasource
-    var metadataFile = getFile(this._extDirKey, 
+    var metadataFile = getFileNoCreateDir(this._extDirKey, 
                                [DIR_EXTENSIONS, aExtensionID, FILE_INSTALL_MANIFEST]);
     
     this._metadataDS = getInstallManifest(metadataFile);
@@ -969,10 +985,12 @@
   
   _installExtensionFiles: function nsExtensionInstaller__installExtensionFiles ()
   {
-    var sourceXPI = getFile(this._extDirKey, 
+    var sourceXPI = getFileNoCreateDir(this._extDirKey, 
                             [DIR_EXTENSIONS, DIR_TEMP, 
                              this._extensionID, 
                              this._extensionID + ".xpi"]);
+    if (!sourceXPI.exists())
+      return;
     var zipReader = Components.classes["@mozilla.org/libjar/zip-reader;1"]
                               .createInstance(Components.interfaces.nsIZipReader);
     zipReader.init(sourceXPI);
@@ -1752,6 +1770,9 @@
       // Write bin/components.ini
       var manifest = getFile(KEY_APPDIR, [FILE_COMPONENT_MANIFEST]);
       this._writeProfileFile(manifest, this._getComponentsDir, false);
+
+      // Update the Defaults Manifest
+      this._writeDefaults(false);
     }
   },
 
@@ -2002,6 +2023,34 @@
     this._ds.insertForthcomingItem(aItemID, aItemType, false);
     var metadataDS = getInstallManifest(aManifest);
     this._ds.addItemMetadata(aItemID, aItemType, metadataDS, false);
+
+    // Check whether the extension is installable (firefox_version fitting between
+    // em:MaxVersion and em:MinVersion)
+    var extensionID = this.canInstallItem(metadataDS);
+    // |extensionID| must be a GUID string, not a number - a number means failure.
+    if (isNaN(parseInt(extensionID))) {
+      // Do install the extension, meaning we register its chrome and components
+      if (!this._extInstaller)
+          this._extInstaller = new nsExtensionInstaller(this._ds);
+      try {
+          this._extInstaller.install(aItemID, false);
+      }
+      catch (e) {
+          // If the installation failed, we disable the extension in addition
+	  // to _not_ uninstalling it (which would fail anyway because it
+	  // would be done at launch time... as a user).
+	  this._ds.setItemProperty(aItemID, this._ds._emR("toBeUninstalled"),
+	                           null, false, aItemType);
+          this._ds.setItemProperty(aItemID, this._ds._emR("disabled"),
+                                   this._ds._emL("true"), false, aItemType);
+      }
+    } else {
+      // disable extensions that aren't installable
+      this._ds.setItemProperty(aItemID, this._ds._emR("disabled"),
+                              this._ds._emL("true"), false, aItemType);
+    }
+    // Force locking pre-configured items.
+    this._ds.lockUnlockItem(aItemID, true);
   },
   
   checkForMismatches: function nsExtensionManager_checkForMismatches () 
@@ -2028,22 +2077,31 @@
       if (items.length > 0) {
         for (var i = 0; i < items.length; ++i) {
           // Now disable the extension so it won't hurt anything. 
+	  var alreadyDisabled = this._ds.getItemProperty(items[i].id, "disabled");
           var itemType = getItemType(this._ds._getResourceForItem(items[i].id).Value);
           if (itemType != -1 && itemType & nsIUpdateItem.TYPE_EXTENSION)
-            this.disableExtension(items[i].id);
+            if (!alreadyDisabled) this.disableExtension(items[i].id);
           else if (itemType & nsIUpdateItem.TYPE_THEME) {
             if (gPref.prefHasUserValue(PREF_GENERAL_SKINS_SELECTEDSKIN))
               gPref.clearUserPref(PREF_GENERAL_SKINS_SELECTEDSKIN);
-            this._ds.disableTheme(items[i].id);
+            if (!alreadyDisabled) this._ds.disableTheme(items[i].id);
           }
         }
-        var updates = Components.classes["@mozilla.org/updates/update-service;1"]
-                                .getService(Components.interfaces.nsIUpdateService);
-        updates.checkForUpdates(items, items.length, nsIUpdateItem.TYPE_ADDON, 
-                                nsIUpdateService.SOURCE_EVENT_MISMATCH,
-                                null);
+	// We want to eliminate locked extensions
+	newitems = [];
+	for (var i = 0; i < items.length; ++i) {
+	  if (!this._ds.getItemProperty(items[i].id, "locked"))
+	    newitems.push(items[i]);
+	}
+	if (newitems.length > 0) {
+          var updates = Components.classes["@mozilla.org/updates/update-service;1"]
+                                  .getService(Components.interfaces.nsIUpdateService);
+          updates.checkForUpdates(newitems, newitems.length, nsIUpdateItem.TYPE_ADDON, 
+                                  nsIUpdateService.SOURCE_EVENT_MISMATCH,
+                                  null);
         
-        needsRestart = true;
+          needsRestart = true;
+	}
       }
     }
     
@@ -2133,6 +2191,11 @@
         validExtensions.push({ sourceDir: sourceDir, isProfile: isProfile });
     }
     
+    // Debian hook to insert defaults/syspref into defaults.ini
+    if ((aFile.leafName == FILE_DEFAULTS) && aIsProfile == false) {
+      validExtensions.push({ sourceDir: getDirNoCreate(getDirKey(false), [DIR_DEFAULTS, "syspref"]), isProfile: false });
+    }
+
     var lines = ["[Extra Files]\r\n",
                  "Count=" + validExtensions.length + "\r\n"];
     for (i = 0; i < lines.length; ++i)
@@ -2545,16 +2608,16 @@
       this._extEnabler = new nsExtensionEnabler(this._ds);
       
     var isProfile = this._ds.isProfileItem(aExtensionID);
-    this._extEnabler.enable(aExtensionID, isProfile, aDisable);
+    this._extEnabler.enable(aExtensionID, true, aDisable);
 
     // clear temporary flags
     this._ds.setItemProperty(aExtensionID, 
                              this._ds._emR("toBeEnabled"),
-                             null, isProfile,
+                             null, true,
                              nsIUpdateItem.TYPE_EXTENSION);
     this._ds.setItemProperty(aExtensionID, 
                              this._ds._emR("toBeDisabled"),
-                             null, isProfile,
+                             null, true,
                              nsIUpdateItem.TYPE_EXTENSION);
   },
   
@@ -3090,8 +3153,10 @@
   checkForUpdates: function (aItem, aVersionUpdateOnly)
   {
     // A preference setting can disable updating for this item
+    // We'll also skip locked items.
     try {
-      if (!gPref.getBoolPref(PREF_EM_ITEM_UPDATE_ENABLED.replace(/%UUID%/, aItem.id))) {
+      if (this._updater._emDS.getItemProperty(aItem.id, "locked") ||
+          !gPref.getBoolPref(PREF_EM_ITEM_UPDATE_ENABLED.replace(/%UUID%/, aItem.id))) {
         gOS.notifyObservers(null, "Update:Extension:Item-Ended", "");
         this._updater._checkForDone();
         return;
@@ -3557,7 +3622,7 @@
   
   isProfileItem: function nsExtensionsDataSource_isProfileItem (aItemID)
   {
-    return this.getItemProperty(aItemID, "installLocation") != "global";
+    return this.getItemProperty(aItemID, "installLocation") == "profile";
   },
   
   _setProperty: function nsExtensionsDataSource__setProperty (aDS, aSource, aProperty, aNewValue)
@@ -3845,26 +3910,26 @@
   enableExtension: function nsExtensionsDataSource_enableExtension (aExtensionID)
   {
     this.setItemProperty(aExtensionID, this._emR("toBeEnabled"), 
-                         this._emL("true"), this.isProfileItem(aExtensionID), 
+                         this._emL("true"), true,
                          nsIUpdateItem.TYPE_EXTENSION);
     this.setItemProperty(aExtensionID, this._emR("toBeDisabled"), 
-                         null, this.isProfileItem(aExtensionID), 
+                         null, true,
                          nsIUpdateItem.TYPE_EXTENSION);
     this.setItemProperty(aExtensionID, this._emR("disabled"), 
-                         null, this.isProfileItem(aExtensionID), 
+                         null, true,
                          nsIUpdateItem.TYPE_EXTENSION);
   },
   
   disableExtension: function nsExtensionsDataSource_disableExtension (aExtensionID)
   {
     this.setItemProperty(aExtensionID, this._emR("toBeDisabled"), 
-                         this._emL("true"), this.isProfileItem(aExtensionID), 
+                         this._emL("true"), true,
                          nsIUpdateItem.TYPE_EXTENSION);
     this.setItemProperty(aExtensionID, this._emR("toBeEnabled"), 
-                         null, this.isProfileItem(aExtensionID), 
+                         null, true,
                          nsIUpdateItem.TYPE_EXTENSION);
     this.setItemProperty(aExtensionID, this._emR("disabled"), 
-                         this._emL("true"), this.isProfileItem(aExtensionID), 
+                         this._emL("true"), true, 
                          nsIUpdateItem.TYPE_EXTENSION);
   },