extensionSystem: Require Extensions app for updates

While we don't technically need the app to download and apply
updates, we do require it for notifying the user about available
updates and listing extensions with pending updates.

So instead of intransparently applying updates in the background
without the user noticing, disable updates altogether if the
Extensions app is not installed.

https://gitlab.gnome.org/GNOME/gnome-shell/issues/2346
This commit is contained in:
Florian Müllner 2020-03-11 20:09:11 +01:00 committed by Florian Müllner
parent cc347bf6d8
commit 660a2b6e62
2 changed files with 14 additions and 0 deletions

View File

@ -108,6 +108,9 @@ function gotExtensionZipFile(session, message, uuid, dir, callback, errback) {
} }
function downloadExtensionUpdate(uuid) { function downloadExtensionUpdate(uuid) {
if (!Main.extensionManager.updatesSupported)
return;
let dir = Gio.File.new_for_path( let dir = Gio.File.new_for_path(
GLib.build_filenamev([global.userdatadir, 'extension-updates', uuid])); GLib.build_filenamev([global.userdatadir, 'extension-updates', uuid]));
@ -126,6 +129,9 @@ function downloadExtensionUpdate(uuid) {
} }
function checkForUpdates() { function checkForUpdates() {
if (!Main.extensionManager.updatesSupported)
return;
let metadatas = {}; let metadatas = {};
Main.extensionManager.getUuids().forEach(uuid => { Main.extensionManager.getUuids().forEach(uuid => {
let extension = Main.extensionManager.lookup(uuid); let extension = Main.extensionManager.lookup(uuid);

View File

@ -60,6 +60,11 @@ var ExtensionManager = class {
ExtensionDownloader.checkForUpdates(); ExtensionDownloader.checkForUpdates();
} }
get updatesSupported() {
const appSys = Shell.AppSystem.get_default();
return appSys.lookup_app('org.gnome.Extensions.desktop') !== null;
}
lookup(uuid) { lookup(uuid) {
return this._extensions.get(uuid); return this._extensions.get(uuid);
} }
@ -481,6 +486,9 @@ var ExtensionManager = class {
} }
_installExtensionUpdates() { _installExtensionUpdates() {
if (!this.updatesSupported)
return;
FileUtils.collectFromDatadirs('extension-updates', true, (dir, info) => { FileUtils.collectFromDatadirs('extension-updates', true, (dir, info) => {
let fileType = info.get_file_type(); let fileType = info.get_file_type();
if (fileType !== Gio.FileType.DIRECTORY) if (fileType !== Gio.FileType.DIRECTORY)