Blame SOURCES/0001-catch-more-errors-on-extensions-enable-and-disable.patch

b97e22
From fdc15b08eb034ea2be03c16510475891516ff6f2 Mon Sep 17 00:00:00 2001
b97e22
From: Sebastien Lafargue <slaf66@gmail.com>
b97e22
Date: Fri, 25 Oct 2013 15:28:11 +0200
b97e22
Subject: [PATCH] catch more errors on extensions enable() and disable()
b97e22
b97e22
https://bugzilla.gnome.org/show_bug.cgi?id=688331
b97e22
---
b97e22
 js/ui/extensionSystem.js | 50 +++++++++++++++++++++++++++---------------------
b97e22
 1 file changed, 28 insertions(+), 22 deletions(-)
b97e22
b97e22
diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js
b97e22
index 8c12e97..8a75392 100644
b97e22
--- a/js/ui/extensionSystem.js
b97e22
+++ b/js/ui/extensionSystem.js
b97e22
@@ -76,7 +76,11 @@ function disableExtension(uuid) {
b97e22
         theme.unload_stylesheet(extension.stylesheet.get_path());
b97e22
     }
b97e22
 
b97e22
-    extension.stateObj.disable();
b97e22
+    try {
b97e22
+        extension.stateObj.disable();
b97e22
+    } catch(e) {
b97e22
+        logExtensionError(uuid, e);
b97e22
+    }
b97e22
 
b97e22
     for (let i = 0; i < order.length; i++) {
b97e22
         let uuid = order[i];
b97e22
@@ -89,8 +93,10 @@ function disableExtension(uuid) {
b97e22
 
b97e22
     extensionOrder.splice(orderIdx, 1);
b97e22
 
b97e22
-    extension.state = ExtensionState.DISABLED;
b97e22
-    _signals.emit('extension-state-changed', extension);
b97e22
+    if ( extension.state != ExtensionState.ERROR ) {
b97e22
+        extension.state = ExtensionState.DISABLED;
b97e22
+        _signals.emit('extension-state-changed', extension);
b97e22
+    }
b97e22
 }
b97e22
 
b97e22
 function enableExtension(uuid) {
b97e22
@@ -117,10 +123,15 @@ function enableExtension(uuid) {
b97e22
         }
b97e22
     }
b97e22
 
b97e22
-    extension.stateObj.enable();
b97e22
-
b97e22
-    extension.state = ExtensionState.ENABLED;
b97e22
-    _signals.emit('extension-state-changed', extension);
b97e22
+    try {
b97e22
+        extension.stateObj.enable();
b97e22
+        extension.state = ExtensionState.ENABLED;
b97e22
+        _signals.emit('extension-state-changed', extension);
b97e22
+        return;
b97e22
+    } catch(e) {
b97e22
+        logExtensionError(uuid, e);
b97e22
+        return;
b97e22
+    }
b97e22
 }
b97e22
 
b97e22
 function logExtensionError(uuid, error) {
b97e22
@@ -150,7 +161,8 @@ function loadExtension(extension) {
b97e22
     } else {
b97e22
         let enabled = enabledExtensions.indexOf(extension.uuid) != -1;
b97e22
         if (enabled) {
b97e22
-            initExtension(extension.uuid);
b97e22
+            if (!initExtension(extension.uuid))
b97e22
+                return;
b97e22
             if (extension.state == ExtensionState.DISABLED)
b97e22
                 enableExtension(extension.uuid);
b97e22
         } else {
b97e22
@@ -205,7 +217,12 @@ function initExtension(uuid) {
b97e22
     extensionModule = extension.imports.extension;
b97e22
 
b97e22
     if (extensionModule.init) {
b97e22
-        extensionState = extensionModule.init(extension);
b97e22
+        try {
b97e22
+            extensionState = extensionModule.init(extension);
b97e22
+        } catch(e) {
b97e22
+            logExtensionError(uuid, e);
b97e22
+            return false;
b97e22
+        }
b97e22
     }
b97e22
 
b97e22
     if (!extensionState)
b97e22
@@ -214,6 +231,7 @@ function initExtension(uuid) {
b97e22
 
b97e22
     extension.state = ExtensionState.DISABLED;
b97e22
     _signals.emit('extension-loaded', uuid);
b97e22
+    return true;
b97e22
 }
b97e22
 
b97e22
 function getEnabledExtensions() {
b97e22
@@ -235,11 +253,7 @@ function onEnabledExtensionsChanged() {
b97e22
     newEnabledExtensions.filter(function(uuid) {
b97e22
         return enabledExtensions.indexOf(uuid) == -1;
b97e22
     }).forEach(function(uuid) {
b97e22
-        try {
b97e22
             enableExtension(uuid);
b97e22
-        } catch(e) {
b97e22
-            logExtensionError(uuid, e);
b97e22
-        }
b97e22
     });
b97e22
 
b97e22
     // Find and disable all the newly disabled extensions: UUIDs found in the
b97e22
@@ -247,11 +261,7 @@ function onEnabledExtensionsChanged() {
b97e22
     enabledExtensions.filter(function(item) {
b97e22
         return newEnabledExtensions.indexOf(item) == -1;
b97e22
     }).forEach(function(uuid) {
b97e22
-        try {
b97e22
             disableExtension(uuid);
b97e22
-        } catch(e) {
b97e22
-            logExtensionError(uuid, e);
b97e22
-        }
b97e22
     });
b97e22
 
b97e22
     enabledExtensions = newEnabledExtensions;
b97e22
@@ -263,11 +273,7 @@ function _loadExtensions() {
b97e22
 
b97e22
     let finder = new ExtensionUtils.ExtensionFinder();
b97e22
     finder.connect('extension-found', function(signals, extension) {
b97e22
-        try {
b97e22
-            loadExtension(extension);
b97e22
-        } catch(e) {
b97e22
-            logExtensionError(extension.uuid, e);
b97e22
-        }
b97e22
+        loadExtension(extension);
b97e22
     });
b97e22
     finder.scanExtensions();
b97e22
 }
b97e22
-- 
b97e22
1.8.4.2
b97e22