Skip to content

Commit f10daa6

Browse files
linesightclaude
andcommitted
macos: replace removed --in-process-renderer with --single-process
--in-process-renderer was removed from Chrome 130+. The flag no longer appears in content_switches.cc so passing it was a no-op, leaving the renderer as a full subprocess. That subprocess calls MachPortRendezvousClientMac::AcquirePorts() -> bootstrap_look_up, which returns 1102 (BOOTSTRAP_UNKNOWN_SERVICE) on unsigned CI runners because Chrome gives them a restricted bootstrap namespace. Without a working renderer, g_js_code_completed is never set and the tests fail. Switch to --single-process, which runs the renderer in the browser process and eliminates the renderer's bootstrap_look_up call entirely. Also drop the Python-interpreter codesigning step: ad-hoc signing never fixed the -67030 (errSecCSUnsigned) error from process_requirement.cc, and may have broken any valid Developer ID signature that python.org Python already carried. Our own compiled binaries (subprocess, cefpython_py*.so) still need ad-hoc signing since they ship unsigned from the build. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 1fcc5ce commit f10daa6

3 files changed

Lines changed: 19 additions & 21 deletions

File tree

.github/workflows/ci-macos.yml

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,11 @@ jobs:
118118
run: |
119119
cp -r build/artifacts/. cefpython3/
120120
chmod +x cefpython3/subprocess
121-
# Ad-hoc sign binaries so macOS process_requirement.cc validation
122-
# does not fail with -67030. That failure restricts the bootstrap
123-
# namespace for child processes and breaks MachPortRendezvousClient
124-
# bootstrap_look_up, causing all subprocesses to crash on startup.
121+
# Ad-hoc sign our compiled binaries so macOS allows them to run.
122+
# (Our freshly built binaries have no signature; unsigned binaries
123+
# are blocked on macOS 14+.)
125124
codesign --force --sign - cefpython3/subprocess
126125
for f in cefpython3/cefpython_py*.so; do codesign --force --sign - "$f"; done
127-
# Also sign the Python interpreter (the browser process). Without this,
128-
# process_requirement.cc fails with -67030 (errSecCSUnsigned) and Chrome
129-
# launches subprocesses with a restricted bootstrap namespace, preventing
130-
# bootstrap_look_up from finding the MachPortRendezvousServer service.
131-
codesign --force --sign - "$(python -c 'import sys; print(sys.executable)')"
132126
133127
- name: Run unit tests
134128
run: |

unittests/main_test.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,14 @@ def test_main(self):
185185
# Prevent macOS keychain authorization prompts during init
186186
# (matches CEF's own test infrastructure on macOS).
187187
switches["use-mock-keychain"] = ""
188-
# Chrome 130+ MachPortRendezvousServer uses bootstrap_check_in,
189-
# which requires a pre-declared launchd service. Without an app
190-
# bundle, CFBundleIdentifier is empty and registration fails —
191-
# renderer subprocesses crash on startup. Run the renderer
192-
# in-process to skip subprocess Mach port rendezvous entirely.
193-
switches["in-process-renderer"] = ""
188+
# Chrome 130+ MachPortRendezvousServer registers via
189+
# bootstrap_check_in; renderer subprocesses look up the service
190+
# via bootstrap_look_up, which fails on unsigned CI processes
191+
# because Chrome gives them a restricted bootstrap namespace.
192+
# --in-process-renderer was removed from Chrome 130+.
193+
# --single-process runs the renderer in the browser process,
194+
# eliminating renderer subprocess bootstrap_look_up failures.
195+
switches["single-process"] = ""
194196
# Run network service in-process to avoid Mach port rendezvous
195197
# failures for utility subprocesses on macOS CI runners.
196198
# The feature string in Chrome 130+ is "NetworkServiceInProcess2".

unittests/osr_test.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,14 @@ def test_osr(self):
143143
# Prevent macOS keychain authorization prompts during init
144144
# (matches CEF's own test infrastructure on macOS).
145145
switches["use-mock-keychain"] = ""
146-
# Chrome 130+ MachPortRendezvousServer uses bootstrap_check_in,
147-
# which requires a pre-declared launchd service. Without an app
148-
# bundle, CFBundleIdentifier is empty and registration fails —
149-
# renderer subprocesses crash on startup. Run the renderer
150-
# in-process to skip subprocess Mach port rendezvous entirely.
151-
switches["in-process-renderer"] = ""
146+
# Chrome 130+ MachPortRendezvousServer registers via
147+
# bootstrap_check_in; renderer subprocesses look up the service
148+
# via bootstrap_look_up, which fails on unsigned CI processes
149+
# because Chrome gives them a restricted bootstrap namespace.
150+
# --in-process-renderer was removed from Chrome 130+.
151+
# --single-process runs the renderer in the browser process,
152+
# eliminating renderer subprocess bootstrap_look_up failures.
153+
switches["single-process"] = ""
152154
# Run network service in-process to avoid Mach port rendezvous
153155
# failures for utility subprocesses on macOS CI runners.
154156
# The feature string in Chrome 130+ is "NetworkServiceInProcess2".

0 commit comments

Comments
 (0)