fix: use Chromium's native DevTools context menu and dialog paths#51805
Merged
Conversation
Previously DevTools context menus were implemented by overriding InspectorFrontendHost.showContextMenuAtPoint in JS and popping an Electron Menu on the inspected page's BrowserWindow. Since a detached DevTools window is not an Electron window, the menu was always anchored to (and focused) the inspected page's window. Remove the JS overrides and let Blink's native DevToolsHost.showContextMenuAtPoint path run instead: menu items arrive via WebContentsDelegate::HandleContextMenu and are shown as a native menu anchored to whichever widget hosts the DevTools view, with selections routed back through ExecuteCustomContextMenuCommand / NotifyContextMenuClosed. window.confirm in DevTools now works through a JavaScriptDialogManager on InspectableWebContents.
4 tasks
dsanders11
approved these changes
Jun 3, 2026
codebytere
approved these changes
Jun 3, 2026
|
Release Notes Persisted
|
Contributor
|
I was unable to backport this PR to "41-x-y" cleanly; |
Contributor
|
I have automatically backported this PR to "43-x-y", please check out #51863 |
Contributor
|
I have automatically backported this PR to "42-x-y", please check out #51864 |
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.
Description of Change
Right-clicking in a detached DevTools window showed the correct context menu but focused the inspected page's window instead of the DevTools window.
This happened because DevTools context menus were implemented by overriding
InspectorFrontendHost.showContextMenuAtPointin JS and popping an ElectronMenuongetOwnerBrowserWindow()— which for a detached DevTools window is the inspected page'sBrowserWindow, since the detached window is a plainviews::Widgetand not an Electron window.Rather than patching the override, this PR removes it and wires up the same native path Chromium uses:
DevToolsHost.showContextMenuAtPointdelivers the menu items to the browser asContextMenuParams::custom_itemsviaWebContentsDelegate::HandleContextMenu.InspectableWebContentsshows them as a native menu (newDevToolsContextMenuhelper,views::MenuRunner) anchored to whichever widget actually hosts the DevTools view, so focus stays where it should.ExecuteCustomContextMenuCommand/NotifyContextMenuClosed, which Blink forwards toDevToolsAPI.contextMenuItemSelected/contextMenuCleared— the same calls the JS override made manually.The
window.confirmoverride is likewise replaced with aJavaScriptDialogManageronInspectableWebContents, and the deadINSPECTOR_SELECT_FILEhandler is removed. DevTools menus also now display accelerators, which the JS path dropped.Refs #35651 and #49753, both symptoms of the previous approach.
Checklist
npm testpassesRelease Notes
Notes: Fixed the context menu in a detached DevTools window focusing the inspected page's window instead of the DevTools window.