build: Add option to disable portal-helper

The portal login window uses WebKit, which is a security-sensitive
component that not all vendors want to support.

Support that case with a build option, and update the captive
portal handler to use the user's default browser if the portal-helper
is disabled.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3408>
This commit is contained in:
Florian Müllner 2024-06-12 13:13:41 +02:00 committed by Marge Bot
parent 4ab1ccf3f2
commit 1403747863
9 changed files with 43 additions and 12 deletions

View File

@ -1 +1,9 @@
install_subdir('hicolor', install_dir: icondir)
excluded_icons=[]
if not have_portal_helper
excluded_icons += [
'scalable/apps/org.gnome.Shell.CaptivePortal.svg',
'symbolic/apps/org.gnome.Shell.CaptivePortal-symbolic.svg',
]
endif
install_subdir('hicolor',
install_dir: icondir, exclude_files: excluded_icons)

View File

@ -6,7 +6,7 @@ desktop_files = [
]
service_files = []
if have_networkmanager
if have_portal_helper
desktop_files += 'org.gnome.Shell.PortalHelper.desktop'
service_files += 'org.gnome.Shell.PortalHelper.service'
endif

View File

@ -8,9 +8,11 @@ js_resources = gnome.compile_resources(
dependencies: [config_js]
)
portal_resources = gnome.compile_resources(
'portal-resources', 'portal-resources.gresource.xml',
source_dir: ['.', meson.current_build_dir()],
c_name: 'portal_js_resources',
dependencies: [config_js]
)
if have_portal_helper
portal_resources = gnome.compile_resources(
'portal-resources', 'portal-resources.gresource.xml',
source_dir: ['.', meson.current_build_dir()],
c_name: 'portal_js_resources',
dependencies: [config_js]
)
endif

View File

@ -7,6 +7,8 @@ export const PACKAGE_NAME = '@PACKAGE_NAME@';
export const PACKAGE_VERSION = '@PACKAGE_VERSION@';
/* 1 if networkmanager is available, 0 otherwise */
export const HAVE_NETWORKMANAGER = @HAVE_NETWORKMANAGER@;
/* 1 if portal helper is enabled, 0 otherwise */
export const HAVE_PORTAL_HELPER = @HAVE_PORTAL_HELPER@;
/* gettext package */
export const GETTEXT_PACKAGE = '@GETTEXT_PACKAGE@';
/* locale dir */

View File

@ -4,6 +4,7 @@ jsconf.set('PACKAGE_VERSION', meson.project_version())
jsconf.set('GETTEXT_PACKAGE', meson.project_name())
jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper)
jsconf.set('datadir', datadir)
jsconf.set('libexecdir', libexecdir)

View File

@ -10,6 +10,7 @@ import Polkit from 'gi://Polkit';
import Shell from 'gi://Shell';
import St from 'gi://St';
import * as Config from '../../misc/config.js';
import * as Main from '../main.js';
import * as PopupMenu from '../popupMenu.js';
import * as MessageTray from '../messageTray.js';
@ -1984,7 +1985,13 @@ class CaptivePortalHandler extends Signals.EventEmitter {
}
_onNotificationActivated(path) {
this._launchPortalHelper(path).catch(logError);
const context = global.create_app_launch_context(
global.get_current_time(), -1);
if (Config.HAVE_PORTAL_HELPER)
this._launchPortalHelper(path, context).catch(logError);
else
Gio.AppInfo.launch_default_for_uri(this._checkUri, context);
Main.overview.hide();
Main.panel.closeCalendar();
@ -2007,8 +2014,7 @@ class CaptivePortalHandler extends Signals.EventEmitter {
}
}
async _launchPortalHelper(path) {
const timestamp = global.get_current_time();
async _launchPortalHelper(path, context) {
if (!this._portalHelperProxy) {
this._portalHelperProxy = new Gio.DBusProxy({
g_connection: Gio.DBus.session,
@ -2030,6 +2036,7 @@ class CaptivePortalHandler extends Signals.EventEmitter {
}
}
const {timestamp} = context;
this._portalHelperProxy?.AuthenticateAsync(path, this._checkUri, timestamp).catch(logError);
this._connectivityQueue.add(path);
}

View File

@ -107,6 +107,11 @@ else
have_networkmanager = false
endif
have_portal_helper = get_option('portal_helper')
if have_portal_helper and not have_networkmanager
error('Portal helper requires networkmanager support')
endif
if get_option('camera_monitor')
libpipewire_dep = dependency('libpipewire-0.3', version: pipewire_req)
have_pipewire = true

View File

@ -40,6 +40,12 @@ option('networkmanager',
description: 'Enable NetworkManager support'
)
option('portal_helper',
type: 'boolean',
value: true,
description: 'Enable build-in network portal login'
)
option('systemd',
type: 'boolean',
value: true,

View File

@ -286,7 +286,7 @@ executable('gnome-shell', 'main.c',
install: true
)
if have_networkmanager
if have_portal_helper
executable('gnome-shell-portal-helper',
'gnome-shell-portal-helper.c', portal_resources,
c_args: tools_cflags,