extensionSystem: Add a method to unload an extension

https://bugzilla.gnome.org/show_bug.cgi?id=677586
This commit is contained in:
Jasper St. Pierre 2012-06-05 13:03:42 -04:00
parent 3290bfae68
commit 75570b7995
2 changed files with 20 additions and 11 deletions

View File

@ -41,22 +41,14 @@ function uninstallExtensionFromUUID(uuid) {
if (!extension) if (!extension)
return false; return false;
// Try to disable it -- if it's ERROR'd, we can't guarantee that,
// but it will be removed on next reboot, and hopefully nothing
// broke too much.
ExtensionSystem.disableExtension(uuid);
// Don't try to uninstall system extensions // Don't try to uninstall system extensions
if (extension.type != ExtensionUtils.ExtensionType.PER_USER) if (extension.type != ExtensionUtils.ExtensionType.PER_USER)
return false; return false;
extension.state = ExtensionSystem.ExtensionState.UNINSTALLED; if (!ExtensionSystem.unloadExtension(uuid))
_signals.emit('extension-state-changed', extension); return false;
delete ExtensionUtils.extensions[uuid];
FileUtils.recursivelyDeleteDir(Gio.file_new_for_path(extension.path));
FileUtils.recursivelyDeleteDir(extension.dir);
return true; return true;
} }

View File

@ -167,6 +167,23 @@ function loadExtension(extension) {
_signals.emit('extension-state-changed', extension); _signals.emit('extension-state-changed', extension);
} }
function unloadExtension(uuid) {
let extension = ExtensionUtils.extensions[uuid];
if (!extension)
return false;
// Try to disable it -- if it's ERROR'd, we can't guarantee that,
// but it will be removed on next reboot, and hopefully nothing
// broke too much.
disableExtension(uuid);
extension.state = ExtensionState.UNINSTALLED;
_signals.emit('extension-state-changed', extension);
delete ExtensionUtils.extensions[uuid];
return true;
}
function initExtension(uuid) { function initExtension(uuid) {
let extension = ExtensionUtils.extensions[uuid]; let extension = ExtensionUtils.extensions[uuid];
let dir = extension.dir; let dir = extension.dir;