Highlights
🐛 webinspector cdp no longer comes up blank on a page that is already being inspected
Opening a debuggable that another DevTools window was still attached to produced an empty frontend: no console output, and every expression typed into it silently swallowed. WebKit serves a single inspector session per debuggable, so the bridge serializes sessions per page — but the page endpoint accepted the websocket before taking that lock and then waited on it forever. The frontend saw a perfectly good connection and simply never got an answer.
A DevTools tab left open in a background tab or another window holds its page for as long as it lives, so this was not a narrow race. JSContexts took the worst of it: the debuggable outlives every frontend that ever inspected it, and js_app.html is nothing but the console, so a blocked session showed up as a completely empty window.
A new connection now takes the page over, the way Safari's own Web Inspector does. The superseded frontend gets its websocket closed and shows a disconnect rather than going quietly dead, and a burst of connections arriving together is still served one after another instead of evicting each other.
pymobiledevice3 webinspector cdp
# then open http://127.0.0.1:9222/ and pick the same JSContext from a second windowWhat's Changed
Full Changelog: v11.2.0...v11.2.1