chrome-devtools-frontend 1.0.1578729 → 1.0.1581449
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/prompts/creating-a-model.md +51 -0
- package/docs/cookbook/devtools_on_devtools.md +2 -2
- package/docs/feature-specs/elements-gutter-decorators.md +40 -0
- package/docs/feature-specs/elements-tree-edit-html.md +14 -0
- package/docs/feature-specs/elements-tree-node-title.md +46 -0
- package/docs/feature-specs/elements-tree-selection-and-hover.md +31 -0
- package/docs/feature-specs/images/elements-gutter-decorators-multiple.png +0 -0
- package/docs/get_the_code.md +3 -3
- package/front_end/core/host/UserMetrics.ts +3 -7
- package/front_end/core/root/Runtime.ts +0 -1
- package/front_end/core/sdk/NetworkManager.ts +0 -35
- package/front_end/core/sdk/OverlayModel.ts +10 -0
- package/front_end/devtools_compatibility.js +4 -0
- package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -0
- package/front_end/entrypoints/greendev_floaty/FloatyEntrypoint.ts +530 -0
- package/front_end/entrypoints/greendev_floaty/floaty.css +258 -0
- package/front_end/entrypoints/greendev_floaty/floaty.html +31 -0
- package/front_end/entrypoints/greendev_floaty/greendev_floaty.ts +422 -0
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +0 -38
- package/front_end/generated/ARIAProperties.js +0 -6
- package/front_end/generated/InspectorBackendCommands.ts +10 -4
- package/front_end/generated/SupportedCSSProperties.js +39 -31
- package/front_end/generated/protocol-mapping.d.ts +12 -0
- package/front_end/generated/protocol-proxy-api.d.ts +12 -0
- package/front_end/generated/protocol.ts +57 -2
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.snapshot.txt +32 -2
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +110 -6
- package/front_end/models/computed_style/computed_style.ts +9 -0
- package/front_end/models/issues_manager/CorsIssue.ts +11 -14
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +33 -4
- package/front_end/panels/ai_assistance/components/ChatInput.ts +52 -19
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -4
- package/front_end/panels/ai_assistance/components/ChatView.ts +4 -0
- package/front_end/panels/ai_assistance/components/chatInput.css +10 -3
- package/front_end/panels/application/DeviceBoundSessionsView.ts +51 -76
- package/front_end/panels/changes/changesSidebar.css +5 -0
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +2 -2
- package/front_end/panels/common/AiCodeGenerationUpgradeDialog.ts +4 -4
- package/front_end/panels/common/ExtensionPanel.ts +4 -0
- package/front_end/panels/common/FreDialog.ts +4 -0
- package/front_end/panels/coverage/CoverageListView.ts +18 -3
- package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +89 -0
- package/front_end/panels/elements/ComputedStyleWidget.ts +12 -8
- package/front_end/panels/elements/ElementsPanel.ts +4 -3
- package/front_end/panels/elements/ElementsSidebarPane.ts +11 -8
- package/front_end/panels/elements/ElementsTreeElement.ts +92 -121
- package/front_end/panels/elements/ElementsTreeOutline.ts +26 -15
- package/front_end/panels/elements/MetricsSidebarPane.ts +2 -2
- package/front_end/panels/elements/PlatformFontsWidget.ts +7 -5
- package/front_end/panels/elements/PropertiesWidget.ts +3 -6
- package/front_end/panels/elements/StylesSidebarPane.ts +4 -3
- package/front_end/panels/elements/elements.ts +4 -3
- package/front_end/panels/elements/elementsTreeOutline.css +16 -5
- package/front_end/panels/greendev/GreenDevPanel.css +241 -0
- package/front_end/panels/greendev/GreenDevPanel.ts +308 -0
- package/front_end/panels/greendev/GreenDevShared.ts +13 -0
- package/front_end/panels/greendev/greendev-meta.ts +52 -0
- package/front_end/panels/greendev/greendev.ts +9 -0
- package/front_end/panels/issues/CorsIssueDetailsView.ts +4 -4
- package/front_end/panels/lighthouse/LighthouseStartView.ts +1 -1
- package/front_end/panels/lighthouse/lighthouseStartView.css +6 -0
- package/front_end/panels/network/NetworkLogView.ts +2 -5
- package/front_end/panels/security/SecurityPanel.ts +0 -4
- package/front_end/panels/security/SecurityPanelSidebar.ts +2 -42
- package/front_end/panels/security/security-meta.ts +2 -14
- package/front_end/panels/security/security.ts +0 -4
- package/front_end/panels/settings/EditFileSystemView.ts +8 -8
- package/front_end/panels/settings/SettingsScreen.ts +4 -4
- package/front_end/panels/sources/SourcesSearchScope.ts +2 -1
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +47 -26
- package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +121 -39
- package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +106 -101
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +35 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js +19 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts +16 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +21 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +6 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts +13 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js +56 -36
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js +32 -8
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js +32 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js +20 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +25 -8
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js +23 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +10 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts +29 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js +46 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js +18 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js +13 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +7 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +43 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js +34 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/utils.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Cookie.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/XPathQuerySelector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js +2 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/PuppeteerNode.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +129 -3
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +233 -65
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +35 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js +19 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts +16 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Frame.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +21 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +6 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts +13 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js +56 -36
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js +30 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js +32 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js +20 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +25 -8
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js +23 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +10 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/UserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts +29 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js +46 -6
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js +19 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js +14 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +7 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +43 -8
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js +31 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/utils.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/injected/XPathQuerySelector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js +2 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/ChromeLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/PuppeteerNode.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +129 -3
- package/front_end/third_party/puppeteer/package/package.json +4 -4
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +46 -0
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +21 -0
- package/front_end/third_party/puppeteer/package/src/api/Frame.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +23 -0
- package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +88 -56
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +33 -8
- package/front_end/third_party/puppeteer/package/src/bidi/BrowserContext.ts +61 -3
- package/front_end/third_party/puppeteer/package/src/bidi/Frame.ts +23 -2
- package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +29 -8
- package/front_end/third_party/puppeteer/package/src/bidi/core/Browser.ts +30 -0
- package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +13 -2
- package/front_end/third_party/puppeteer/package/src/bidi/core/UserContext.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +85 -8
- package/front_end/third_party/puppeteer/package/src/cdp/BrowserContext.ts +36 -1
- package/front_end/third_party/puppeteer/package/src/cdp/ExecutionContext.ts +5 -5
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +23 -2
- package/front_end/third_party/puppeteer/package/src/cdp/JSHandle.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +60 -8
- package/front_end/third_party/puppeteer/package/src/cdp/utils.ts +36 -3
- package/front_end/third_party/puppeteer/package/src/common/Cookie.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/XPathQuerySelector.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +1 -0
- package/front_end/third_party/puppeteer/package/src/node/ChromeLauncher.ts +2 -0
- package/front_end/third_party/puppeteer/package/src/node/LaunchOptions.ts +4 -0
- package/front_end/third_party/puppeteer/package/src/node/PuppeteerNode.ts +8 -6
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/text_editor/AutocompleteHistory.ts +2 -1
- package/front_end/ui/components/text_editor/TextEditorHistory.ts +1 -1
- package/front_end/ui/legacy/InplaceEditor.ts +1 -1
- package/front_end/ui/legacy/SearchableView.ts +5 -2
- package/front_end/ui/legacy/Widget.ts +15 -0
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +6 -0
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +50 -1
- package/front_end/ui/legacy/components/data_grid/SortableDataGrid.ts +59 -9
- package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +2 -1
- package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +28 -15
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +2 -2
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +2 -3
- package/front_end/ui/visual_logging/Debugging.ts +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
- package/mcp/mcp.ts +1 -0
- package/package.json +1 -1
- package/front_end/panels/security/CookieControlsTreeElement.ts +0 -21
- package/front_end/panels/security/CookieControlsView.ts +0 -447
- package/front_end/panels/security/CookieReportTreeElement.ts +0 -21
- package/front_end/panels/security/CookieReportView.ts +0 -549
- package/front_end/panels/security/cookieControlsView.css +0 -139
- package/front_end/panels/security/cookieReportView.css +0 -90
- /package/front_end/{panels/elements → models/computed_style}/ComputedStyleModel.ts +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Creating or Migrating a Model in DevTools
|
|
2
|
+
|
|
3
|
+
This guide outlines the standard procedure for creating a new model or migrating an existing one to `front_end/models/`.
|
|
4
|
+
|
|
5
|
+
## 0. Preparation (Before you start)
|
|
6
|
+
* **Baseline:** Run existing tests for the code you are moving to ensure they pass *before* you touch anything.
|
|
7
|
+
* `npm run test -- front_end/<old_location>`
|
|
8
|
+
* **Impact Analysis:** Search for usages of the class/file to understand the scope of refactoring.
|
|
9
|
+
* `grep -r "ClassName" front_end/`
|
|
10
|
+
|
|
11
|
+
## 1. File Structure
|
|
12
|
+
* **Location:** `front_end/models/<model_name>/` (must be lowercase).
|
|
13
|
+
* **Entrypoint:** Create a barrel file `front_end/models/<model_name>/<model_name>.ts` that exports the model's public API.
|
|
14
|
+
* **Implementation:** The actual logic goes in `<ClassName>.ts`.
|
|
15
|
+
* **Tests:** Unit tests go in `<ClassName>.test.ts` alongside the implementation.
|
|
16
|
+
|
|
17
|
+
## 2. Build Configuration (`BUILD.gn`)
|
|
18
|
+
Every model requires a `BUILD.gn` file in its directory with three specific targets:
|
|
19
|
+
|
|
20
|
+
1. **`devtools_module("<model_name>")`**: Lists implementation source files (`sources`) and dependencies (`deps`).
|
|
21
|
+
* **Crucial:** Do NOT include the barrel file (`<model_name>.ts`) in `sources`.
|
|
22
|
+
2. **`devtools_entrypoint("bundle")`**: Defines the barrel file (`entrypoint = "<model_name>.ts"`).
|
|
23
|
+
* **Crucial:** Must depend on the module target: `deps = [ ":<model_name>" ]`.
|
|
24
|
+
3. **`ts_library("unittests")`**: Lists test files and test-only dependencies.
|
|
25
|
+
* **Crucial:** Must depend on the bundle: `deps = [ ":bundle" ]`.
|
|
26
|
+
|
|
27
|
+
## 3. Global Registration (Crucial)
|
|
28
|
+
The build system does not auto-detect new modules. You must manually register them in **`config/gni/devtools_grd_files.gni`**:
|
|
29
|
+
|
|
30
|
+
* **Bundled (Release) Build:** Add the new barrel file path (e.g., `front_end/models/<model_name>/<model_name>.js`) to the `grd_files_bundled_sources` list.
|
|
31
|
+
* **Unbundled (Debug) Build:** Add all other implementation files (e.g., `front_end/models/<model_name>/<ClassName>.js`) to the `grd_files_unbundled_sources` list.
|
|
32
|
+
* **Test Runner:** Add the new model's unittest target (e.g., `models/<model_name>:unittests`) to the `deps` list in **`front_end/BUILD.gn`**.
|
|
33
|
+
|
|
34
|
+
## 4. Refactoring Imports & Exports
|
|
35
|
+
* **Consumers:** Update all files importing the model to use the new entrypoint:
|
|
36
|
+
`import * as ModelName from '../../models/<model_name>/<model_name>.js';`
|
|
37
|
+
* **Old Barrel File (Migration only):** If moving a file, **remove** its export from the original directory's barrel file (e.g., `front_end/panels/elements/elements.ts`).
|
|
38
|
+
* **Internal Imports:** Files *within* the model directory must import each other via relative paths (e.g., `./OtherClass.js`), **never** via the model's own barrel file.
|
|
39
|
+
|
|
40
|
+
## 5. Verification Checklist
|
|
41
|
+
1. **Build:** `autoninja -C out/Default` (Ensures BUILD.gn and GRD files are correct).
|
|
42
|
+
2. **Lint:** `npm run lint` (Checks style and formatting).
|
|
43
|
+
3. **Test:**
|
|
44
|
+
* `npm run test -- front_end/models/<model_name>` (New tests).
|
|
45
|
+
* `npm run test -- front_end/<old_location>` (Regression check for previous owner).
|
|
46
|
+
|
|
47
|
+
## Common Pitfalls
|
|
48
|
+
* **Circular Dependencies:** Occur when internal files import from the directory's own barrel file.
|
|
49
|
+
* **Missing Tests:** Failing to add the target to `front_end/BUILD.gn` means tests exist but never run.
|
|
50
|
+
* **Legacy Exports:** Forgetting to remove the class from the old location's `files` or `exports` allows old patterns to persist.
|
|
51
|
+
* **Build Errors:** Including the barrel file in `devtools_module` sources causes duplicate definition errors.
|
|
@@ -44,7 +44,7 @@ set up your Chrome or Chromium instance for earlier versions of M-136 and M-135.
|
|
|
44
44
|
Then in your `devtools-frontend` checkout, use
|
|
45
45
|
|
|
46
46
|
```bash
|
|
47
|
-
./third_party/chrome/chrome-linux/chrome \
|
|
47
|
+
./third_party/chrome/chrome-linux/chrome-linux64/chrome \
|
|
48
48
|
--disable-infobars \
|
|
49
49
|
--custom-devtools-frontend=file://$(realpath out/Default/gen/front_end)
|
|
50
50
|
```
|
|
@@ -52,7 +52,7 @@ Then in your `devtools-frontend` checkout, use
|
|
|
52
52
|
on Linux or
|
|
53
53
|
|
|
54
54
|
```bash
|
|
55
|
-
./third_party/chrome/chrome-mac/Google\ Chrome\ for\ Testing.app/Contents/MacOS/Google\ Chrome\ for\ Testing \
|
|
55
|
+
./third_party/chrome/chrome-mac-{arm64|x64}/chrome-mac-{arm64|x64}/Google\ Chrome\ for\ Testing.app/Contents/MacOS/Google\ Chrome\ for\ Testing \
|
|
56
56
|
--disable-infobars \
|
|
57
57
|
--disable-features=MediaRouter \
|
|
58
58
|
--custom-devtools-frontend=file://$(realpath out/Default/gen/front_end) \
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Requirements Specification: Elements Panel Gutter & Decoration Logic
|
|
2
|
+
|
|
3
|
+
## 1. Overview
|
|
4
|
+
The gutter area in the Elements panel DOM tree serves as a visual indicator for state markers (decorations) associated with DOM nodes. These decorations provide users with "at-a-glance" information about the node or its subtree, such as active breakpoints or framework-specific annotations.
|
|
5
|
+
|
|
6
|
+
## 2. Functional Requirements
|
|
7
|
+
|
|
8
|
+
### 2.1 Decoration Visibility
|
|
9
|
+
* **Target Nodes**: Decorations must only appear on **Element** nodes (e.g., `<div>`, `<body>`). They must not appear on text nodes or closing tags.
|
|
10
|
+
* **Visual Indicators**: Active states must be represented by colored markers (dots) within the gutter to the left of the element's tag.
|
|
11
|
+
* **Multiple States**: If a node has multiple active states (e.g., multiple types of breakpoints), the gutter must display markers for all of them.
|
|
12
|
+
* **Layout**: Markers must be arranged horizontally.
|
|
13
|
+
* **Spacing**: Markers must be tightly packed, with each subsequent marker offset by exactly `3px` to the right of the previous one (creating a stacked or dense visual line).
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
### 2.2 Parent/Child Aggregation Logic
|
|
17
|
+
The visibility of decorations depends on the expansion state of the node to ensure users don't miss information hidden inside collapsed regions.
|
|
18
|
+
|
|
19
|
+
* **Collapsed State (Summary View)**:
|
|
20
|
+
* The gutter must display markers for the node's **own** decorations.
|
|
21
|
+
* The gutter must **also** display markers for any **descendant** nodes that have decorations. This acts as a summary, alerting the user that a reflected state exists somewhere inside the collapsed subtree.
|
|
22
|
+
* **Expanded State (Direct View)**:
|
|
23
|
+
* The gutter must **only** display markers for the node's **own** decorations.
|
|
24
|
+
* Markers for descendant nodes must be hidden from the parent's gutter, as they will be directly visible on the child nodes themselves.
|
|
25
|
+
* **Style**: Descendant markers visible in the collapsed state must be rendered with `50%` opacity to visually distinguish them from the node's own decorations.
|
|
26
|
+
|
|
27
|
+
### 2.3 Tooltip Behavior
|
|
28
|
+
Hovering over the decoration markers in the gutter must display a consolidated tooltip containing:
|
|
29
|
+
* **Own Decorations**: A list of titles for all decorations active on the current node.
|
|
30
|
+
* **Descendant Decorations** (Collapsed State Only): A separate list of titles for decorations found within the subtree, clearly labeled to distinguish them from the parent's own states (e.g., under a "Children:" header).
|
|
31
|
+
|
|
32
|
+
### 2.4 Layout & Positioning
|
|
33
|
+
* **Indentation Tracking**: The decoration container must dynamically adjust its position to match the indentation level of the tree element. It should always appear to the left of the opening tag, regardless of how deep the node is in the DOM hierarchy.
|
|
34
|
+
* **Gutter Alignment**: The markers must align consistent with the "gutter" column effectively creating a vertical channel for status indicators down the left side of the tree.
|
|
35
|
+
|
|
36
|
+
### 2.5 User Interaction
|
|
37
|
+
* **Menu Access**: Clicking on the gutter area (often visualized with a "..." icon or actionable space) must trigger the context menu for that node, allowing access to actions related to the decorations (e.g., removing a breakpoint).
|
|
38
|
+
|
|
39
|
+
### 2.6 Performance
|
|
40
|
+
* **Throttled Updates**: Changes to decorations must be batched or throttled. Visually updating the markers should not occur synchronously with every minor internal state change to prevent UI flickering during rapid DOM updates.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# HTML Edit View in Elements Tree
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
The HTML Edit View allows developers to freely edit the HTML of a DOM node directly in the Elements panel. When active, it replaces the standard tree item representation with a fully functional CodeMirror editor instance.
|
|
5
|
+
|
|
6
|
+
## Requirements
|
|
7
|
+
1. **Triggering**: Users can trigger the HTML edit view via keyboard shortcuts (`F2` on a selected node), or via the Context Menu ("Edit as HTML").
|
|
8
|
+
2. **Editor UI**: When activated, the tree element's inline attributes, tags, and descendant nodes are hidden. A CodeMirror editor instance is shown in place of the node.
|
|
9
|
+
3. **Behavior**:
|
|
10
|
+
- The editor is populated with the node's `outerHTML` (or relevant subset).
|
|
11
|
+
- It supports syntax highlighting, auto-completion of tags, and proper indentation.
|
|
12
|
+
- If the user clicks outside the editor or presses `Cmd+Enter` / `Ctrl+Enter`, the edit is committed.
|
|
13
|
+
- If the user presses `Escape`, the edit is aborted.
|
|
14
|
+
4. **State Management**: Upon committing or aborting, the tree element restores its standard view, and any updated DOM state is reflected.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Requirements Specification: Elements Panel Tree Node Title
|
|
2
|
+
|
|
3
|
+
## 1. Overview
|
|
4
|
+
The Elements panel represents the DOM tree as a collection of nodes. Each node's primary visual representation—its "title"—is a dynamic string of text, interactive links, and syntax-highlighted code. This specification documents the expected user-facing behaviors of the node title rendering across various DOM node types, ensuring a rich, interactive, and accurate representation of the document structure.
|
|
5
|
+
|
|
6
|
+
## 2. Node Types and Rendering Rules
|
|
7
|
+
|
|
8
|
+
### 2.1 Element Nodes (`Node.ELEMENT_NODE`)
|
|
9
|
+
Element nodes are the most common nodes in the tree. Their rendering depends on their state:
|
|
10
|
+
* **Standard Tags**: Rendered as `<tagName attribute="value">` for opening tags and `</tagName>` for closing tags. The tag names are syntax-highlighted.
|
|
11
|
+
* **Pseudo-Elements**: Rendered as `::pseudo-element-name(identifier)`.
|
|
12
|
+
* **Inline Text Nodes**: If an element contains only a text node and no other children (e.g., `<div>Hello</div>`), it is rendered entirely on one line: `<tagName>Hello</tagName>`. The text content has its whitespace collapsed, and HTML entities are syntax-highlighted.
|
|
13
|
+
* **Collapsed Expandable Elements**: When an element with children is collapsed, the title renders the opening tag, a clickable expand button (`▶`), a visually hidden `…` (for accessibility and layout tests), and the closing tag, all on one line.
|
|
14
|
+
|
|
15
|
+
### 2.2 Attributes
|
|
16
|
+
Attributes within Element nodes have complex interactive behaviors:
|
|
17
|
+
* **Formatting**: Rendered natively as `name="value"`. If an attribute has no value, the `="value"` part is omitted unless explicitly forced.
|
|
18
|
+
* **HTML Entities**: Unicode sequences and entities within attribute values are syntax-highlighted.
|
|
19
|
+
* **Linkification (URLs)**: Values of `src` and `href` attributes, as well as complex `srcset` definitions in `<img>`, `<source>`, and `<image>` tags, are automatically detected. They are rendered as clickable links that open the resource or show an image preview popover on hover.
|
|
20
|
+
* **Linkification (DOM Relations)**: Attributes that establish DOM relationships (`popovertarget`, `interesttarget`, `commandfor`) are parsed. Their values are rendered as clickable links that, when clicked, reveal the target DOM node in the Elements panel. Tooltips will read: "Reveal Popover Target", "Reveal Interest Target", or "Reveal Command For Target" respectively.
|
|
21
|
+
|
|
22
|
+
### 2.3 Text Nodes (`Node.TEXT_NODE`)
|
|
23
|
+
* **Standard Text**: Rendered surrounded by double quotes (`"text"`). HTML entities within the text are highlighted.
|
|
24
|
+
* **JavaScript inside `<script>`**: If the parent is a `<script>` tag, the text is treated as code. Quotes are omitted, whitespace is trimmed, and the content is passed through the JavaScript syntax highlighter.
|
|
25
|
+
* **CSS inside `<style>`**: If the parent is a `<style>` tag, the text is treated as code. Quotes are omitted, whitespace is trimmed, and the content is passed through the CSS syntax highlighter.
|
|
26
|
+
|
|
27
|
+
### 2.4 Other Node Types
|
|
28
|
+
* **Comment Nodes (`Node.COMMENT_NODE`)**: Rendered exactly as `<!-- comment text -->`.
|
|
29
|
+
* **Doctype Nodes (`Node.DOCUMENT_TYPE_NODE`)**: Rendered in the format `<!DOCTYPE name PUBLIC "publicId" "systemId" [internalSubset]>`. Only the applicable parts of the doctype are displayed.
|
|
30
|
+
* **CDATA Sections (`Node.CDATA_SECTION_NODE`)**: Rendered as `<![CDATA[text]]>`.
|
|
31
|
+
* **Document Nodes (`Node.DOCUMENT_NODE`)**: Rendered as `#document (url)` where the URL is a clickable link.
|
|
32
|
+
* **Document Fragments (`Node.DOCUMENT_FRAGMENT_NODE`)**: Rendered as the fragment name, with whitespace collapsed (e.g., `#document-fragment`). Shadow roots also receive specific CSS classes to indent them appropriately (`shadow-root`, `shadow-root-deep`, etc.).
|
|
33
|
+
|
|
34
|
+
## 3. Dynamic Highlighting and Interactions
|
|
35
|
+
|
|
36
|
+
### 3.1 DOM Update Flash (Animations)
|
|
37
|
+
When the DevTools backend reports a change to a node (via an `ElementUpdateRecord`), the specific portion of the title that changed must briefly flash with a purple highlight (`dom-update-highlight` CSS animation):
|
|
38
|
+
* If an attribute was added/modified, the attribute value flashes.
|
|
39
|
+
* If children were added/removed (and the element is not expanded), the tag name flashes.
|
|
40
|
+
* If text content changed, the text node itself flashes.
|
|
41
|
+
|
|
42
|
+
### 3.2 Search Result Highlighting
|
|
43
|
+
When a user executes a search within the Elements panel (Ctrl/Cmd + F), matches found within the text representation of the node title are highlighted with a distinct yellow background span. This highlight spans across Tag names, attributes, and text values.
|
|
44
|
+
|
|
45
|
+
### 3.3 Adorners
|
|
46
|
+
Specific semantic markers like `slot`, `grid`, `flex`, and `popover` markers are appended to the title but managed via a separate layout/adorner system, overlaying on the line.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Requirements Specification: Elements Panel Tree Selection and Hover
|
|
2
|
+
|
|
3
|
+
## 1. Overview
|
|
4
|
+
The Elements panel DOM tree visualizes the structure of the inspected page. As users navigate this tree—either by clicking or hovering—the panel provides visual feedback to indicate the currently active node and offers contextual actions like a console hint and an AI assistance button.
|
|
5
|
+
|
|
6
|
+
## 2. Functional Requirements
|
|
7
|
+
|
|
8
|
+
### 2.1 Selection State
|
|
9
|
+
* **Visual Indicator**: When a tree node is selected, its entire row must be highlighted visually. This is achieved by rendering a background spanning the full width of the tree, visually anchoring the node.
|
|
10
|
+
* **Full Row Coverage**: The selection highlight must extend to the left edge of the panel, accounting for the dynamic indentation of the DOM tree structure.
|
|
11
|
+
* **Behavior on Deselection**: When a node loses selection focus, the visual highlight must be removed immediately.
|
|
12
|
+
|
|
13
|
+
### 2.2 Console Hint (`== $0`)
|
|
14
|
+
* **Visibility**: The `$0` hint must only appear on the currently selected tree node.
|
|
15
|
+
* **Placement**: It must be positioned to the right of the closing tag or the node's text content.
|
|
16
|
+
* **Tooltip**: Hovering over the hint must display a tooltip explaining its purpose: `Use $0 in the console to refer to this element.`
|
|
17
|
+
* **Accessibility**: The hint itself should be marked hidden from screen readers (`aria-hidden="true"`) to prevent redundancy, as the selection state inherently implies `$0` context to power users.
|
|
18
|
+
|
|
19
|
+
### 2.3 Floating AI Assistance Button
|
|
20
|
+
* **Eligibility**: The AI button must only appear for valid `Element` nodes (e.g., `<button>`, `<div>`). It must not appear on text nodes, comments, but does appear for closing tags.
|
|
21
|
+
* **Visibility Conditions**:
|
|
22
|
+
* The button must be visible when the node is actively hovered by the user's cursor.
|
|
23
|
+
* The button must also be visible when the node currently holds the selection state (even if not hovered).
|
|
24
|
+
* **Action**: Clicking the button must:
|
|
25
|
+
* Select the node (if it wasn't already selected).
|
|
26
|
+
* Open the AI assistance panel with the context of the selected node.
|
|
27
|
+
* Not propagate the click event to the underlying row (which might otherwise cause tree expansion/collapse).
|
|
28
|
+
* **Visual Design**: It should render as a floating button using the standard DevTools AI icon, with the tooltip matching the registered AI action title.
|
|
29
|
+
|
|
30
|
+
## 3. Implementation Details (Declarative UI)
|
|
31
|
+
The selection background, `$0` hint, and AI floating button are integrated into the primary Lit-html render cycle (`DEFAULT_VIEW`) for the tree element. This replaces previous imperative DOM creation strategies, routing all visibility and styling updates through a unified state object passed to the view.
|
package/docs/get_the_code.md
CHANGED
|
@@ -250,19 +250,19 @@ This works with Chromium 79 or later.
|
|
|
250
250
|
To run on **Mac**:
|
|
251
251
|
|
|
252
252
|
```bash
|
|
253
|
-
<path-to-devtools-frontend>./third_party/chrome/chrome-mac/Google\ Chrome\ for\ Testing.app/Contents/MacOS/Google\ Chrome\ for\ Testing --disable-infobars --disable-features=MediaRouter --custom-devtools-frontend=file://$(realpath out/Default/gen/front_end) --use-mock-keychain
|
|
253
|
+
<path-to-devtools-frontend>./third_party/chrome/chrome-mac-{arm64|x64}/chrome-mac-{arm64|x64}/Google\ Chrome\ for\ Testing.app/Contents/MacOS/Google\ Chrome\ for\ Testing --disable-infobars --disable-features=MediaRouter --custom-devtools-frontend=file://$(realpath out/Default/gen/front_end) --use-mock-keychain
|
|
254
254
|
```
|
|
255
255
|
|
|
256
256
|
To run on **Linux**:
|
|
257
257
|
|
|
258
258
|
```bash
|
|
259
|
-
<path-to-devtools-frontend>./third_party/chrome/chrome-linux/chrome --disable-infobars --custom-devtools-frontend=file://$(realpath out/Default/gen/front_end)
|
|
259
|
+
<path-to-devtools-frontend>./third_party/chrome/chrome-linux/chrome-linux64/chrome --disable-infobars --custom-devtools-frontend=file://$(realpath out/Default/gen/front_end)
|
|
260
260
|
```
|
|
261
261
|
|
|
262
262
|
To run on **Windows**:
|
|
263
263
|
|
|
264
264
|
```bash
|
|
265
|
-
<path-to-devtools-frontend>\third_party\chrome\chrome-win\chrome.exe --disable-infobars --custom-devtools-frontend="<path-to-devtools-frontend>\out\Default\gen\front_end"
|
|
265
|
+
<path-to-devtools-frontend>\third_party\chrome\chrome-win\chrome-win64\chrome.exe --disable-infobars --custom-devtools-frontend="<path-to-devtools-frontend>\out\Default\gen\front_end"
|
|
266
266
|
```
|
|
267
267
|
|
|
268
268
|
Note that `$(realpath out/Default/gen/front_end)` expands to the absolute path to build artifacts for DevTools frontend.
|
|
@@ -906,7 +906,7 @@ export enum IssueCreated {
|
|
|
906
906
|
'SharedArrayBufferIssue::TransferIssue' = 36,
|
|
907
907
|
'SharedArrayBufferIssue::CreationIssue' = 37,
|
|
908
908
|
LowTextContrastIssue = 41,
|
|
909
|
-
'CorsIssue::
|
|
909
|
+
'CorsIssue::InsecureLocalNetwork' = 42,
|
|
910
910
|
'CorsIssue::InvalidHeaders' = 44,
|
|
911
911
|
'CorsIssue::WildcardOriginWithCredentials' = 45,
|
|
912
912
|
'CorsIssue::PreflightResponseInvalid' = 46,
|
|
@@ -925,7 +925,6 @@ export enum IssueCreated {
|
|
|
925
925
|
DeprecationIssue = 60,
|
|
926
926
|
'ClientHintIssue::MetaTagAllowListInvalidOrigin' = 61,
|
|
927
927
|
'ClientHintIssue::MetaTagModifiedHTML' = 62,
|
|
928
|
-
'CorsIssue::PreflightAllowPrivateNetworkError' = 63,
|
|
929
928
|
'GenericIssue::CrossOriginPortalPostMessageError' = 64,
|
|
930
929
|
'GenericIssue::FormLabelForNameError' = 65,
|
|
931
930
|
'GenericIssue::FormDuplicateIdForInputError' = 66,
|
|
@@ -940,10 +939,6 @@ export enum IssueCreated {
|
|
|
940
939
|
'GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError' = 75,
|
|
941
940
|
'StylesheetLoadingIssue::LateImportRule' = 76,
|
|
942
941
|
'StylesheetLoadingIssue::RequestFailed' = 77,
|
|
943
|
-
'CorsIssue::PreflightMissingPrivateNetworkAccessId' = 78,
|
|
944
|
-
'CorsIssue::PreflightMissingPrivateNetworkAccessName' = 79,
|
|
945
|
-
'CorsIssue::PrivateNetworkAccessPermissionUnavailable' = 80,
|
|
946
|
-
'CorsIssue::PrivateNetworkAccessPermissionDenied' = 81,
|
|
947
942
|
'CookieIssue::WarnThirdPartyPhaseout::ReadCookie' = 82,
|
|
948
943
|
'CookieIssue::WarnThirdPartyPhaseout::SetCookie' = 83,
|
|
949
944
|
'CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie' = 84,
|
|
@@ -976,8 +971,9 @@ export enum IssueCreated {
|
|
|
976
971
|
'CorsIssue::LocalNetworkAccessPermissionDenied' = 111,
|
|
977
972
|
'SRIMessageSignatureIssue::ValidationFailedIntegrityMismatch' = 112,
|
|
978
973
|
'ElementAccessibilityIssue::InteractiveContentSummaryDescendant' = 113,
|
|
974
|
+
'CorsIssue::InvalidLocalNetworkAccess' = 114,
|
|
979
975
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
980
|
-
MAX_VALUE =
|
|
976
|
+
MAX_VALUE = 115,
|
|
981
977
|
}
|
|
982
978
|
|
|
983
979
|
export const enum DeveloperResourceLoaded {
|
|
@@ -631,7 +631,6 @@ export type HostConfig = Platform.TypeScriptUtilities.RecursivePartial<{
|
|
|
631
631
|
devToolsAiCodeGeneration: HostConfigAiCodeGeneration,
|
|
632
632
|
devToolsVeLogging: HostConfigVeLogging,
|
|
633
633
|
devToolsWellKnown: HostConfigWellKnown,
|
|
634
|
-
devToolsPrivacyUI: HostConfigPrivacyUI,
|
|
635
634
|
devToolsIndividualRequestThrottling: DevToolsIndividualRequestThrottling,
|
|
636
635
|
/**
|
|
637
636
|
* OffTheRecord here indicates that the user's profile is either incognito,
|
|
@@ -158,14 +158,6 @@ export class NetworkManager extends SDKModel<EventTypes> {
|
|
|
158
158
|
void this.#networkAgent.invoke_setCacheDisabled({cacheDisabled: true});
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
-
if (Root.Runtime.hostConfig.devToolsPrivacyUI?.enabled &&
|
|
162
|
-
Root.Runtime.hostConfig.thirdPartyCookieControls?.managedBlockThirdPartyCookies !== true &&
|
|
163
|
-
(Common.Settings.Settings.instance().createSetting('cookie-control-override-enabled', undefined).get() ||
|
|
164
|
-
Common.Settings.Settings.instance().createSetting('grace-period-mitigation-disabled', undefined).get() ||
|
|
165
|
-
Common.Settings.Settings.instance().createSetting('heuristic-mitigation-disabled', undefined).get())) {
|
|
166
|
-
this.cookieControlFlagsSettingChanged();
|
|
167
|
-
}
|
|
168
|
-
|
|
169
161
|
void this.#networkAgent.invoke_enable({
|
|
170
162
|
maxPostDataSize: MAX_EAGER_POST_REQUEST_BODY_LENGTH,
|
|
171
163
|
enableDurableMessages: Root.Runtime.hostConfig.devToolsEnableDurableMessages?.enabled,
|
|
@@ -184,16 +176,6 @@ export class NetworkManager extends SDKModel<EventTypes> {
|
|
|
184
176
|
Common.Settings.Settings.instance()
|
|
185
177
|
.moduleSetting('cache-disabled')
|
|
186
178
|
.addChangeListener(this.cacheDisabledSettingChanged, this);
|
|
187
|
-
|
|
188
|
-
Common.Settings.Settings.instance()
|
|
189
|
-
.createSetting('cookie-control-override-enabled', undefined)
|
|
190
|
-
.addChangeListener(this.cookieControlFlagsSettingChanged, this);
|
|
191
|
-
Common.Settings.Settings.instance()
|
|
192
|
-
.createSetting('grace-period-mitigation-disabled', undefined)
|
|
193
|
-
.addChangeListener(this.cookieControlFlagsSettingChanged, this);
|
|
194
|
-
Common.Settings.Settings.instance()
|
|
195
|
-
.createSetting('heuristic-mitigation-disabled', undefined)
|
|
196
|
-
.addChangeListener(this.cookieControlFlagsSettingChanged, this);
|
|
197
179
|
}
|
|
198
180
|
|
|
199
181
|
static forRequest(request: NetworkRequest): NetworkManager|null {
|
|
@@ -346,23 +328,6 @@ export class NetworkManager extends SDKModel<EventTypes> {
|
|
|
346
328
|
void this.#networkAgent.invoke_setCacheDisabled({cacheDisabled: enabled});
|
|
347
329
|
}
|
|
348
330
|
|
|
349
|
-
private cookieControlFlagsSettingChanged(): void {
|
|
350
|
-
const overridesEnabled =
|
|
351
|
-
Boolean(Common.Settings.Settings.instance().createSetting('cookie-control-override-enabled', undefined).get());
|
|
352
|
-
const gracePeriodEnabled = overridesEnabled ?
|
|
353
|
-
Boolean(
|
|
354
|
-
Common.Settings.Settings.instance().createSetting('grace-period-mitigation-disabled', undefined).get()) :
|
|
355
|
-
false;
|
|
356
|
-
const heuristicEnabled = overridesEnabled ?
|
|
357
|
-
Boolean(Common.Settings.Settings.instance().createSetting('heuristic-mitigation-disabled', undefined).get()) :
|
|
358
|
-
false;
|
|
359
|
-
void this.#networkAgent.invoke_setCookieControls({
|
|
360
|
-
enableThirdPartyCookieRestriction: overridesEnabled,
|
|
361
|
-
disableThirdPartyCookieMetadata: gracePeriodEnabled,
|
|
362
|
-
disableThirdPartyCookieHeuristics: heuristicEnabled,
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
|
|
366
331
|
override dispose(): void {
|
|
367
332
|
Common.Settings.Settings.instance()
|
|
368
333
|
.moduleSetting('cache-disabled')
|
|
@@ -791,6 +791,12 @@ export class OverlayModel extends SDKModel<EventTypes> implements ProtocolProxyA
|
|
|
791
791
|
async hasStyleSheetText(url: Platform.DevToolsPath.UrlString): Promise<boolean> {
|
|
792
792
|
return await this.#windowControls.initializeStyleSheetText(url);
|
|
793
793
|
}
|
|
794
|
+
|
|
795
|
+
inspectPanelShowRequested(_event: Protocol.Overlay.InspectNodeRequestedEvent): void {
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
inspectedElementWindowRestored(_event: Protocol.Overlay.InspectNodeRequestedEvent): void {
|
|
799
|
+
}
|
|
794
800
|
}
|
|
795
801
|
|
|
796
802
|
export class WindowControls {
|
|
@@ -925,6 +931,8 @@ export const enum Events {
|
|
|
925
931
|
PERSISTENT_FLEX_CONTAINER_OVERLAY_STATE_CHANGED = 'PersistentFlexContainerOverlayStateChanged',
|
|
926
932
|
PERSISTENT_SCROLL_SNAP_OVERLAY_STATE_CHANGED = 'PersistentScrollSnapOverlayStateChanged',
|
|
927
933
|
PERSISTENT_CONTAINER_QUERY_OVERLAY_STATE_CHANGED = 'PersistentContainerQueryOverlayStateChanged',
|
|
934
|
+
INSPECT_PANEL_SHOW_REQUESTED = 'InspectPanelShowRequested',
|
|
935
|
+
INSPECTED_ELEMENT_WINDOW_RESTORED = 'InspectedElementWindowRestored',
|
|
928
936
|
}
|
|
929
937
|
|
|
930
938
|
export interface ChangedNodeId {
|
|
@@ -941,6 +949,8 @@ export interface EventTypes {
|
|
|
941
949
|
[Events.PERSISTENT_FLEX_CONTAINER_OVERLAY_STATE_CHANGED]: ChangedNodeId;
|
|
942
950
|
[Events.PERSISTENT_SCROLL_SNAP_OVERLAY_STATE_CHANGED]: ChangedNodeId;
|
|
943
951
|
[Events.PERSISTENT_CONTAINER_QUERY_OVERLAY_STATE_CHANGED]: ChangedNodeId;
|
|
952
|
+
[Events.INSPECT_PANEL_SHOW_REQUESTED]: number;
|
|
953
|
+
[Events.INSPECTED_ELEMENT_WINDOW_RESTORED]: number;
|
|
944
954
|
}
|
|
945
955
|
|
|
946
956
|
export interface Highlighter {
|
|
@@ -1036,6 +1036,10 @@
|
|
|
1036
1036
|
DevToolsAPI.sendMessageToEmbedder('setChromeFlag', [featureName, value], null);
|
|
1037
1037
|
}
|
|
1038
1038
|
|
|
1039
|
+
requestRestart() {
|
|
1040
|
+
DevToolsAPI.sendMessageToEmbedder('requestRestart', [], null);
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1039
1043
|
// Backward-compatible methods below this line --------------------------------------------
|
|
1040
1044
|
/**
|
|
1041
1045
|
* Support for legacy front-ends (<M65).
|
|
@@ -5,6 +5,7 @@ import '../shell/shell.js';
|
|
|
5
5
|
import '../../panels/css_overview/css_overview-meta.js';
|
|
6
6
|
import '../../panels/elements/elements-meta.js';
|
|
7
7
|
import '../../panels/browser_debugger/browser_debugger-meta.js';
|
|
8
|
+
import '../../panels/greendev/greendev-meta.js';
|
|
8
9
|
import '../../panels/network/network-meta.js';
|
|
9
10
|
import '../../panels/security/security-meta.js';
|
|
10
11
|
import '../../panels/emulation/emulation-meta.js';
|