]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-87277: Don't look for X11 browsers on macOS in webbrowser (#24480)
authorRonald Oussoren <ronaldoussoren@mac.com>
Thu, 21 Dec 2023 13:43:38 +0000 (14:43 +0100)
committerGitHub <noreply@github.com>
Thu, 21 Dec 2023 13:43:38 +0000 (14:43 +0100)
The installation of XQuartz on macOS will unconditionally
set the $DISPLAY variable. The X11 server will be launched
when a program tries to access the display.  This results
in launching the X11 server when using the webbrowser module,
even though X11 browsers won't be used in practice.

Lib/test/test_webbrowser.py
Lib/webbrowser.py
Misc/NEWS.d/next/macOS/2023-12-21-09-41-42.gh-issue-87277.IF6EZZ.rst [new file with mode: 0644]

index 2d695bc883131f1b745ed2fb70f9fc7e94432d48..ca481c57c3d97241f801a27dcbbada4c517b2cc7 100644 (file)
@@ -272,6 +272,17 @@ class BrowserRegistrationTest(unittest.TestCase):
         self._check_registration(preferred=True)
 
 
+    @unittest.skipUnless(sys.platform == "darwin", "macOS specific test")
+    def test_no_xdg_settings_on_macOS(self):
+        # On macOS webbrowser should not use xdg-settings to
+        # look for X11 based browsers (for those users with
+        # XQuartz installed)
+        with mock.patch("subprocess.check_output") as ck_o:
+            webbrowser.register_standard_browsers()
+
+        ck_o.assert_not_called()
+
+
 class ImportTest(unittest.TestCase):
     def test_register(self):
         webbrowser = import_helper.import_fresh_module('webbrowser')
index 8b0628745c57fcea8b3d3cd212c3895172f2333b..6f9c6a6de177e6311e0363554d5565e17da52458 100755 (executable)
@@ -495,7 +495,12 @@ def register_standard_browsers():
             register("microsoft-edge", None, Edge("MicrosoftEdge.exe"))
     else:
         # Prefer X browsers if present
-        if os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY"):
+        #
+        # NOTE: Do not check for X11 browser on macOS,
+        # XQuartz installation sets a DISPLAY environment variable and will
+        # autostart when someone tries to access the display. Mac users in
+        # general don't need an X11 browser.
+        if sys.platform != "darwin" and (os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY")):
             try:
                 cmd = "xdg-settings get default-web-browser".split()
                 raw_result = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
diff --git a/Misc/NEWS.d/next/macOS/2023-12-21-09-41-42.gh-issue-87277.IF6EZZ.rst b/Misc/NEWS.d/next/macOS/2023-12-21-09-41-42.gh-issue-87277.IF6EZZ.rst
new file mode 100644 (file)
index 0000000..4ae55c0
--- /dev/null
@@ -0,0 +1,3 @@
+webbrowser: Don't look for X11 browsers on macOS. Those are generally not
+used and probing for them can result in starting XQuartz even if it isn't
+used otherwise.