From bb1c0957f1389b8ea08ecfe66ff60dc5221334cc Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Sat, 12 Sep 2026 14:25:58 +0200 Subject: [PATCH 1/2] feat(webext): try to determine app_id from native messaging binary environment --- webext/app/credential_manager_shim.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/webext/app/credential_manager_shim.py b/webext/app/credential_manager_shim.py index e1b5fff..d8ef915 100755 --- a/webext/app/credential_manager_shim.py +++ b/webext/app/credential_manager_shim.py @@ -8,6 +8,8 @@ from enum import Enum import json import logging +import os +from pathlib import Path import re import secrets import signal @@ -473,6 +475,24 @@ async def get_passkey(interface, options, origin, top_origin): return response_json +def discover_app_id(): + desktop_file_name = os.environ.get("GIO_LAUNCHED_DESKTOP_FILE") + if not desktop_file_name: + logging.debug("Browser was not launched from a desktop entry.") + return None + + browser_pid = os.getppid() + launched_pid = os.environ.get("GIO_LAUNCHED_DESKTOP_FILE_PID") + if launched_pid != str(browser_pid): + logging.debug( + f"Ignoring {desktop_file_name} from GIO_LAUNCHED_DESKTOP_FILE environment," + f"it comes from process {launched_pid}, not the browser at {browser_pid}." + ) + return None + + return Path(desktop_file_name).stem + + async def get_interface(): global INTERFACE if INTERFACE and INTERFACE.bus.connected: @@ -480,10 +500,12 @@ async def get_interface(): bus = await MessageBus().connect() logging.debug("Connected to bus") - import os logging.info(os.getcwd()) + app_id = discover_app_id() or APP_ID + logging.info(f"Registering with the portal as {app_id}") + msg = Message( "org.freedesktop.portal.Desktop", "/org/freedesktop/portal/desktop", @@ -491,7 +513,7 @@ async def get_interface(): "Register", signature="sa{sv}", body=[ - APP_ID, + app_id, {}, ], ) From a3bad01c57dddb712e67353193177f35c5ccbf2f Mon Sep 17 00:00:00 2001 From: Mike Beaumont Date: Wed, 23 Sep 2026 10:52:30 +0200 Subject: [PATCH 2/2] feat: don't check PIDs --- webext/app/credential_manager_shim.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/webext/app/credential_manager_shim.py b/webext/app/credential_manager_shim.py index d8ef915..3f910d7 100755 --- a/webext/app/credential_manager_shim.py +++ b/webext/app/credential_manager_shim.py @@ -481,15 +481,6 @@ def discover_app_id(): logging.debug("Browser was not launched from a desktop entry.") return None - browser_pid = os.getppid() - launched_pid = os.environ.get("GIO_LAUNCHED_DESKTOP_FILE_PID") - if launched_pid != str(browser_pid): - logging.debug( - f"Ignoring {desktop_file_name} from GIO_LAUNCHED_DESKTOP_FILE environment," - f"it comes from process {launched_pid}, not the browser at {browser_pid}." - ) - return None - return Path(desktop_file_name).stem