From 080f2a9ea8fa24da92fd7a3e81d347bf861f387e Mon Sep 17 00:00:00 2001 From: durawat <68513612+durawat@users.noreply.github.com> Date: Fri, 1 May 2026 19:24:36 -0400 Subject: [PATCH] gh-125231 register firefox channels as Mozilla controller --- Doc/library/webbrowser.rst | 6 ++++++ Lib/webbrowser.py | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst index 389648d4f393e4..5fbb54679b3096 100644 --- a/Doc/library/webbrowser.rst +++ b/Doc/library/webbrowser.rst @@ -186,6 +186,8 @@ for the controller classes, all defined in this module. +------------------------+-----------------------------------------+-------+ | ``'iosbrowser'`` | ``IOSBrowser`` | \(4) | +------------------------+-----------------------------------------+-------+ +| ``'firefox-'`` | ``Mozilla('mozilla')`` | \(5) | ++------------------------+-----------------------------------------+-------+ Notes: @@ -205,6 +207,10 @@ Notes: (4) Only on iOS. +(5) + firefox- are Firefox channels, such as firefox-dev, firefox-aurora, + firefox-beta, firefox-nightly, etc. + .. versionadded:: 3.2 A new :class:`!MacOSXOSAScript` class has been added and is used on Mac instead of the previous :class:`!MacOSX` class. diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 97aad6eea509eb..1830eec483c054 100644 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -7,6 +7,7 @@ import sys import subprocess import threading +import glob __all__ = ["Error", "open", "open_new", "open_new_tab", "get", "register"] @@ -486,6 +487,16 @@ def register_X_browsers(): if shutil.which("microsoft-edge"): register("microsoft-edge", None, Edge("microsoft-edge")) + # firefox-dev, firefox-aurora,firefox-beta, firefox-nightly, etc. + firefox_channels = { + name + for path_dir in os.environ["PATH"].split(os.pathsep) + for exe in glob.glob(os.path.join(path_dir, "firefox-*")) + if (name := os.path.basename(exe)) and shutil.which(name) + } + + for browser in firefox_channels: + register(browser, None, Mozilla(browser)) def register_standard_browsers(): global _tryorder