|
|
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 |
|