fix(chromium): replay execution contexts when connecting to Android WebView - #42447
Merged
Pavel Feldman (pavelfeldman) merged 1 commit intoAug 28, 2026
Conversation
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
…ebView Android WebView's devtools endpoint sometimes acknowledges Runtime.enable without replaying the pre-existing execution contexts, leaving the main world unknown forever. Cycle Runtime.disable/enable until the default context is reported. This behavior is gated on a new internal isWebView connect option, so regular Chrome over CDP is unaffected. Playwright's own Android webview attach sets the bit automatically.
Pavel Feldman (pavelfeldman)
force-pushed
the
webview-cdp-runtime-replay
branch
from
August 28, 2026 21:21
f6eab39 to
73a689c
Compare
Yury Semikhatsky (yury-s)
approved these changes
Aug 28, 2026
| // Android WebView's devtools endpoint sometimes acknowledges Runtime.enable | ||
| // without replaying the pre-existing execution contexts. Cycle | ||
| // Runtime.disable/enable until the default context is reported. | ||
| for (let attempt = 0; attempt < 10; ++attempt) { |
There was a problem hiding this comment.
We need a more reliable mechanism, I'm pretty sure 10x won't be enough in some cases!
Contributor
Test results for "tests 1"1 flaky51252 passed, 1240 skipped Merge workflow run. |
Contributor
Test results for "MCP"8259 passed, 1361 skipped Merge workflow run. |
Pavel Feldman (pavelfeldman)
merged commit Aug 28, 2026
eca9e03
into
microsoft:main
45 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Android WebView's devtools endpoint sometimes acknowledges
Runtime.enablewithout replaying the pre-existing execution contexts, leaving the main world unknown forever and any page interaction hanging.After frame session initialization, if no default (main world) execution context has been reported, cycle
Runtime.disable/Runtime.enableuntil it shows up (250ms between attempts, bounded at 10). A healthy endpoint pays nothing: replayedexecutionContextCreatedevents arrive before theRuntime.enableresponse on the ordered transport, so the first check exits the loop immediately. Re-announced contexts from the re-enable are already handled byframe.contextCreated, which replaces an existing world context.The workaround is gated on a new internal
isWebViewconnect-over-CDP option so regular Chrome over CDP is unaffected; Playwright's own Android webview attach (AndroidDevice.connectToWebView) sets the bit automatically, while Clank launch does not.