chrome-devtools-frontend 1.0.1721762 → 1.0.1726686
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/skills/review-ui-widgets/SKILL.md +7 -7
- package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +12 -0
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +3 -3
- package/.agents/skills/ui-widgets/SKILL.md +2 -1
- package/docs/cookbook/dependencies.md +57 -11
- package/docs/get_the_code.md +15 -0
- package/front_end/core/i18n/collect-ui-strings.js +58 -12
- package/front_end/core/i18n/i18nImpl.ts +1 -1
- package/front_end/core/root/Runtime.ts +1 -1
- package/front_end/core/sdk/ResourceTreeModel.ts +16 -0
- package/front_end/core/sdk/WebAuthnModel.ts +17 -10
- package/front_end/entrypoints/js_app/js_app.ts +2 -5
- package/front_end/entrypoints/node_app/node_app.ts +2 -3
- package/front_end/generated/InspectorBackendCommands.ts +3 -3
- package/front_end/generated/protocol.ts +17 -0
- package/front_end/models/ai_assistance/skills/lighthouse.md +2 -1
- package/front_end/models/ai_assistance/skills/network.md +1 -0
- package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +26 -2
- package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +1 -1
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +2 -7
- package/front_end/models/ai_assistance/tools/RunLighthouse.ts +2 -2
- package/front_end/models/comment_manager/CD4ABridge.ts +4 -0
- package/front_end/models/comment_manager/CommentManager.ts +0 -6
- package/front_end/models/comment_manager/CommentThread.ts +39 -19
- package/front_end/models/elements/StyleChanges.ts +66 -0
- package/front_end/models/trace/EventsSerializer.ts +2 -7
- package/front_end/models/trace/ModelImpl.ts +0 -2
- package/front_end/models/trace/handlers/FlowsHandler.ts +37 -29
- package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +13 -6
- package/front_end/models/trace/helpers/SyntheticEvents.ts +10 -37
- package/front_end/models/trace/insights/RenderBlocking.ts +3 -1
- package/front_end/models/trace/lantern/simulation/Simulator.ts +4 -0
- package/front_end/models/trace/lantern/types/Lantern.ts +1 -0
- package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +92 -0
- package/front_end/panels/accessibility/SourceOrderView.ts +1 -1
- package/front_end/panels/accessibility/accessibilityAnnouncementRecordingListView.css +3 -1
- package/front_end/panels/accessibility/accessibilityAnnouncementRecordingView.css +12 -1
- package/front_end/panels/application/ApplicationPanelSidebar.ts +90 -0
- package/front_end/panels/application/StorageView.ts +348 -254
- package/front_end/panels/application/SubAppsView.ts +159 -0
- package/front_end/panels/application/application.ts +2 -0
- package/front_end/panels/application/preloading/PreloadingView.ts +360 -336
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +3 -3
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +6 -3
- package/front_end/panels/application/preloading/components/RuleSetGrid.ts +17 -17
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -2
- package/front_end/panels/application/preloading/preloadingView.css +12 -4
- package/front_end/panels/application/preloading/preloadingViewDropDown.css +1 -1
- package/front_end/panels/application/storageView.css +16 -21
- package/front_end/panels/application/subAppsView.css +21 -0
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -2
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +6 -8
- package/front_end/panels/comments/CommentsPane.ts +26 -9
- package/front_end/panels/comments/commentsPane.css +25 -6
- package/front_end/panels/common/CommentThreadWidget.ts +2 -2
- package/front_end/panels/common/CommentsOverlayWidget.ts +94 -35
- package/front_end/panels/common/commentThreadWidget.css +17 -0
- package/front_end/panels/common/commentsOverlay.css +5 -10
- package/front_end/panels/common/common-meta.ts +11 -1
- package/front_end/panels/elements/ClassesPaneWidget.ts +133 -89
- package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +7 -33
- package/front_end/panels/elements/DOMTreeElementWidget.ts +3 -1
- package/front_end/panels/elements/DOMTreeWidget.ts +19 -3
- package/front_end/panels/elements/ElementStatePaneWidget.ts +11 -1
- package/front_end/panels/elements/PropertyRenderer.ts +3 -2
- package/front_end/panels/elements/StyleEditorWidget.ts +87 -39
- package/front_end/panels/elements/StylePropertiesSection.ts +32 -5
- package/front_end/panels/elements/StylePropertyTreeElement.ts +227 -162
- package/front_end/panels/elements/StylesSidebarPane.ts +1 -0
- package/front_end/panels/event_listeners/EventListenersView.ts +11 -8
- package/front_end/panels/layer_viewer/Layers3DView.ts +21 -37
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
- package/front_end/panels/network/NetworkConfigView.ts +12 -10
- package/front_end/panels/network/NetworkDataGridNode.ts +3 -1
- package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
- package/front_end/panels/network/RequestPayloadView.ts +12 -5
- package/front_end/panels/network/networkConfigView.css +8 -8
- package/front_end/panels/profiler/HeapProfileView.ts +28 -6
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +7 -3
- package/front_end/panels/protocol_monitor/JSONEditor.ts +0 -1
- package/front_end/panels/recorder/RecorderPanel.ts +2 -2
- package/front_end/panels/screencast/ScreencastView.ts +3 -6
- package/front_end/panels/security/SecurityPanelSidebar.ts +0 -31
- package/front_end/panels/settings/SettingsScreen.ts +1 -1
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +9 -16
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +358 -345
- package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +136 -121
- package/front_end/panels/sources/NavigatorView.ts +105 -45
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +8 -5
- package/front_end/panels/sources/SourcesNavigator.ts +421 -213
- package/front_end/panels/sources/SourcesPanel.ts +9 -5
- package/front_end/panels/sources/TabbedEditorContainer.ts +41 -18
- package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +10 -5
- package/front_end/panels/sources/sources-meta.ts +4 -15
- package/front_end/panels/sources/sourcesNavigator.css +5 -0
- package/front_end/panels/timeline/ModificationsManager.ts +0 -2
- package/front_end/panels/timeline/README.md +2 -0
- package/front_end/panels/timeline/TimelineCommentContext.ts +171 -0
- package/front_end/panels/timeline/TimelineCommentController.ts +168 -30
- package/front_end/panels/timeline/TimelinePanel.ts +4 -0
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
- package/front_end/panels/timeline/timeline.ts +2 -0
- package/front_end/panels/timeline/utils/Treemap.ts +8 -0
- package/front_end/panels/webauthn/WebauthnPane.ts +15 -13
- 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/es5-iife/puppeteer-core-browser.d.ts +113 -3
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +21311 -20981
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +36 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +22 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +20 -18
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts +20 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +40 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js +41 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js +23 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Input.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js +13 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js +18 -11
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js +8 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +24 -12
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js +13 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts +22 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js +75 -9
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts +18 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js +8 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +65 -26
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js +19 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js +4 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js +4 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js +95 -8
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts +0 -8
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +8 -24
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js +5 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts +9 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js +10 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts +10 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js +30 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js +33 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +1 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +113 -3
- package/front_end/third_party/puppeteer/package/package.json +4 -4
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +42 -0
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +25 -22
- package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +22 -2
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +45 -2
- package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +79 -32
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +32 -12
- package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +18 -2
- package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +21 -13
- package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +12 -2
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +37 -16
- package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +14 -11
- package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +7 -1
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +101 -14
- package/front_end/third_party/puppeteer/package/src/cdp/NetworkEventManager.ts +26 -6
- package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +111 -29
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +37 -1
- package/front_end/third_party/puppeteer/package/src/cdp/ScreenRecording.ts +5 -4
- package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +5 -0
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +122 -7
- package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +13 -33
- package/front_end/third_party/puppeteer/package/src/common/BrowserWebSocketTransport.ts +10 -5
- package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +10 -0
- package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +12 -0
- package/front_end/third_party/puppeteer/package/src/common/util.ts +39 -5
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/Poller.ts +35 -3
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +4 -2
- package/front_end/third_party/puppeteer/package/src/node/NodeWebSocketTransport.ts +5 -0
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/encoding.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/comments/CommentAnchorResolver.ts +3 -0
- package/front_end/ui/comments/CommentOverlayManager.ts +2 -4
- package/front_end/ui/components/lists/List.ts +14 -1
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +23 -14
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +3 -0
- package/front_end/ui/helpers/OpenInNewTab.ts +8 -0
- package/front_end/ui/legacy/LinkContextMenuProvider.ts +1 -1
- package/front_end/ui/legacy/ListWidget.ts +14 -18
- package/front_end/ui/legacy/TabbedPane.ts +46 -3
- package/front_end/ui/legacy/Toolbar.ts +0 -1
- package/front_end/ui/legacy/Treeoutline.ts +10 -3
- package/front_end/ui/legacy/UIUtils.ts +5 -2
- package/front_end/ui/legacy/components/inline_editor/Swatches.ts +19 -6
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +20 -11
- package/front_end/ui/legacy/components/source_frame/XMLView.ts +27 -7
- package/front_end/ui/visual_logging/KnownContextValues.ts +5 -0
- package/package.json +1 -1
|
@@ -1834,6 +1834,7 @@ export class StylesSidebarPane extends StylesSidebarPaneBase implements StylesCo
|
|
|
1834
1834
|
}
|
|
1835
1835
|
|
|
1836
1836
|
#cleanupAiCodeCompletion(): void {
|
|
1837
|
+
this.#aiCodeCompletionSummaryToolbar?.detach();
|
|
1837
1838
|
this.#aiCodeCompletionSummaryToolbarContainer?.remove();
|
|
1838
1839
|
this.#aiCodeCompletionSummaryToolbarContainer = undefined;
|
|
1839
1840
|
this.#aiCodeCompletionSummaryToolbar = undefined;
|
|
@@ -64,7 +64,6 @@ interface ViewInput {
|
|
|
64
64
|
togglePassiveListener(listener: SDK.DOMDebuggerModel.EventListener): void;
|
|
65
65
|
removeListener(listener: SDK.DOMDebuggerModel.EventListener): boolean;
|
|
66
66
|
reveal(object: SDK.RemoteObject.RemoteObject): void;
|
|
67
|
-
linkifier: Components.Linkifier.Linkifier;
|
|
68
67
|
listeners: Map<string, ListenerEntry[]>;
|
|
69
68
|
filter?: {showFramework: boolean, showPassive: boolean, showBlocking: boolean};
|
|
70
69
|
}
|
|
@@ -167,7 +166,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
167
166
|
?hidden=${shouldHide(listener)}>
|
|
168
167
|
<span class=event-listener-details>
|
|
169
168
|
${ObjectUI.ObjectPropertiesSection.renderPropertyValue(
|
|
170
|
-
object, /* wasThrown */ false, /* showPreview */ false
|
|
169
|
+
object, /* wasThrown */ false, /* showPreview */ false)}
|
|
171
170
|
<devtools-button
|
|
172
171
|
.iconName=${'bin'}
|
|
173
172
|
.variant=${Buttons.Button.Variant.ICON}
|
|
@@ -184,9 +183,16 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
184
183
|
${i18nString(UIStrings.togglePassive)}
|
|
185
184
|
</button>` : Lit.nothing}
|
|
186
185
|
<span class=event-listener-tree-subtitle>
|
|
187
|
-
${
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
${widget(Components.Linkifier.ScriptLocationLink, {
|
|
187
|
+
target: listener.location().debuggerModel.target(),
|
|
188
|
+
scriptId: listener.location().scriptId,
|
|
189
|
+
sourceURL: listener.sourceURL(),
|
|
190
|
+
lineNumber: listener.location().lineNumber,
|
|
191
|
+
options: {
|
|
192
|
+
columnNumber: listener.location().columnNumber,
|
|
193
|
+
tabStop: true,
|
|
194
|
+
},
|
|
195
|
+
})}
|
|
190
196
|
</span>
|
|
191
197
|
</span>
|
|
192
198
|
<ul role=group ${widget(ObjectUI.ObjectPropertiesSection.ObjectTreeWidget, {objectTree})} ${
|
|
@@ -205,7 +211,6 @@ export class EventListenersView extends UI.Widget.VBox {
|
|
|
205
211
|
#filter: {showFramework: boolean, showPassive: boolean, showBlocking: boolean}|undefined;
|
|
206
212
|
#view: View;
|
|
207
213
|
#listeners?: Map<string, ListenerEntry[]>;
|
|
208
|
-
#linkifier = new Components.Linkifier.Linkifier();
|
|
209
214
|
constructor(element?: HTMLElement, view: View = DEFAULT_VIEW) {
|
|
210
215
|
super(element);
|
|
211
216
|
this.#view = view;
|
|
@@ -278,9 +283,7 @@ export class EventListenersView extends UI.Widget.VBox {
|
|
|
278
283
|
void Common.Revealer.reveal(object);
|
|
279
284
|
}
|
|
280
285
|
},
|
|
281
|
-
linkifier: this.#linkifier,
|
|
282
286
|
};
|
|
283
|
-
this.#linkifier.reset();
|
|
284
287
|
this.#view(input, {}, this.contentElement);
|
|
285
288
|
this.eventListenersArrivedForTest();
|
|
286
289
|
}
|
|
@@ -168,11 +168,11 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
168
168
|
private whiteTexture?: WebGLTexture|null;
|
|
169
169
|
private gl?: WebGLRenderingContext|null;
|
|
170
170
|
private dimensionsForAutoscale?: {width: number, height: number};
|
|
171
|
-
private needsUpdate?: boolean;
|
|
172
171
|
private updateScheduled?: boolean;
|
|
173
172
|
private panelToolbar: UI.Toolbar.Toolbar;
|
|
174
|
-
private showSlowScrollRectsSetting
|
|
175
|
-
private showPaintsSetting
|
|
173
|
+
private readonly showSlowScrollRectsSetting: Common.Settings.Setting<boolean>;
|
|
174
|
+
private readonly showPaintsSetting: Common.Settings.Setting<boolean>;
|
|
175
|
+
readonly #chromeWindowSetting: Common.Settings.Setting<boolean>;
|
|
176
176
|
private mouseDownX?: number;
|
|
177
177
|
private mouseDownY?: number;
|
|
178
178
|
|
|
@@ -197,10 +197,8 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
197
197
|
SettingsUI.LayerViewerSettings.showPaintsSettingDescriptor, this.panelToolbar);
|
|
198
198
|
this.showSlowScrollRectsSetting = this.createVisibilitySetting(
|
|
199
199
|
SettingsUI.LayerViewerSettings.showSlowScrollRectsSettingDescriptor, this.panelToolbar);
|
|
200
|
-
this
|
|
201
|
-
|
|
202
|
-
.resolve(SettingsUI.LayerViewerSettings.chromeWindowSettingDescriptor)
|
|
203
|
-
.addChangeListener(this.updateData, this);
|
|
200
|
+
this.#chromeWindowSetting =
|
|
201
|
+
Common.Settings.Settings.instance().resolve(SettingsUI.LayerViewerSettings.chromeWindowSettingDescriptor);
|
|
204
202
|
|
|
205
203
|
this.performUpdate();
|
|
206
204
|
|
|
@@ -216,8 +214,6 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
216
214
|
|
|
217
215
|
this.snapshotLayers = new Map();
|
|
218
216
|
this.layerViewHost.setLayerSnapshotMap(this.snapshotLayers);
|
|
219
|
-
|
|
220
|
-
this.layerViewHost.showInternalLayersSetting().addChangeListener(this.updateData, this);
|
|
221
217
|
}
|
|
222
218
|
|
|
223
219
|
override performUpdate(): void {
|
|
@@ -242,7 +238,7 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
242
238
|
this.layerTree = layerTree;
|
|
243
239
|
this.layerTexture = null;
|
|
244
240
|
delete this.oldTextureScale;
|
|
245
|
-
if (this.
|
|
241
|
+
if (this.showPaintsSetting.get()) {
|
|
246
242
|
this.textureManager.setLayerTree(layerTree);
|
|
247
243
|
}
|
|
248
244
|
this.updateData();
|
|
@@ -268,19 +264,24 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
268
264
|
}
|
|
269
265
|
|
|
270
266
|
override willHide(): void {
|
|
271
|
-
|
|
267
|
+
this.showPaintsSetting.removeChangeListener(this.updatePaints, this);
|
|
268
|
+
this.showSlowScrollRectsSetting.removeChangeListener(this.updateData, this);
|
|
269
|
+
this.#chromeWindowSetting.removeChangeListener(this.updateData, this);
|
|
270
|
+
this.layerViewHost.showInternalLayersSetting().removeChangeListener(this.updateData, this);
|
|
272
271
|
this.textureManager.suspend();
|
|
272
|
+
super.willHide();
|
|
273
273
|
}
|
|
274
274
|
|
|
275
275
|
override wasShown(): void {
|
|
276
276
|
super.wasShown();
|
|
277
|
+
this.showPaintsSetting.addChangeListener(this.updatePaints, this);
|
|
278
|
+
this.showSlowScrollRectsSetting.addChangeListener(this.updateData, this);
|
|
279
|
+
this.#chromeWindowSetting.addChangeListener(this.updateData, this);
|
|
280
|
+
this.layerViewHost.showInternalLayersSetting().addChangeListener(this.updateData, this);
|
|
277
281
|
this.textureManager.resume();
|
|
278
|
-
if (!this.needsUpdate) {
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
282
|
this.performUpdate();
|
|
282
283
|
this.resizeCanvas();
|
|
283
|
-
this.
|
|
284
|
+
this.updatePaints();
|
|
284
285
|
}
|
|
285
286
|
|
|
286
287
|
updateLayerSnapshot(layer: SDK.LayerTreeBase.Layer): void {
|
|
@@ -632,7 +633,7 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
632
633
|
this.layerTree.forEachLayer(this.calculateLayerRect.bind(this));
|
|
633
634
|
}
|
|
634
635
|
|
|
635
|
-
if (this.showSlowScrollRectsSetting
|
|
636
|
+
if (this.showSlowScrollRectsSetting.get() && this.layerTree) {
|
|
636
637
|
this.layerTree.forEachLayer(this.calculateLayerScrollRects.bind(this));
|
|
637
638
|
}
|
|
638
639
|
|
|
@@ -643,7 +644,7 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
643
644
|
rect.setVertices(layer.quad(), this.depthForLayer(layer));
|
|
644
645
|
rect.texture = this.layerTexture.texture;
|
|
645
646
|
this.appendRect(rect);
|
|
646
|
-
} else if (this.
|
|
647
|
+
} else if (this.showPaintsSetting.get() && this.layerTree) {
|
|
647
648
|
this.layerTree.forEachLayer(this.calculateLayerTileRects.bind(this));
|
|
648
649
|
}
|
|
649
650
|
}
|
|
@@ -731,9 +732,8 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
731
732
|
return;
|
|
732
733
|
}
|
|
733
734
|
|
|
734
|
-
const drawChrome =
|
|
735
|
-
|
|
736
|
-
this.chromeTextures.length >= 3 && this.chromeTextures.indexOf(undefined) < 0;
|
|
735
|
+
const drawChrome = this.#chromeWindowSetting.get() && this.chromeTextures.length >= 3 &&
|
|
736
|
+
this.chromeTextures.indexOf(undefined) < 0;
|
|
737
737
|
const z = (this.maxDepth + 1) * LayerSpacing;
|
|
738
738
|
const borderWidth = Math.ceil(ViewportBorderWidth * this.scale);
|
|
739
739
|
let vertices: number[] = [viewport.width, 0, z, viewport.width, viewport.height, z, 0, viewport.height, z, 0, 0, z];
|
|
@@ -803,7 +803,6 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
803
803
|
|
|
804
804
|
updateData(): void {
|
|
805
805
|
if (!this.isShowing()) {
|
|
806
|
-
this.needsUpdate = true;
|
|
807
806
|
return;
|
|
808
807
|
}
|
|
809
808
|
// Debounce into the next frame (double rAF).
|
|
@@ -878,7 +877,6 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
878
877
|
descriptor: Common.Settings.SettingDescriptor<boolean>,
|
|
879
878
|
toolbar: UI.Toolbar.Toolbar): Common.Settings.Setting<boolean> {
|
|
880
879
|
const setting = Common.Settings.Settings.instance().resolve(descriptor);
|
|
881
|
-
setting.addChangeListener(this.updateData, this);
|
|
882
880
|
toolbar.appendToolbarItem(new UI.Toolbar.ToolbarSettingCheckbox(setting));
|
|
883
881
|
return setting;
|
|
884
882
|
}
|
|
@@ -935,18 +933,13 @@ export class Layers3DView extends Layers3DViewBase
|
|
|
935
933
|
}
|
|
936
934
|
|
|
937
935
|
private updatePaints(): void {
|
|
938
|
-
if (this.
|
|
936
|
+
if (this.showPaintsSetting.get()) {
|
|
939
937
|
this.textureManager.setLayerTree(this.layerTree);
|
|
940
|
-
this.textureManager.forceUpdate();
|
|
941
938
|
} else {
|
|
942
939
|
this.textureManager.reset();
|
|
943
940
|
}
|
|
944
941
|
this.updateData();
|
|
945
942
|
}
|
|
946
|
-
|
|
947
|
-
private showPaints(): boolean {
|
|
948
|
-
return this.showPaintsSetting ? this.showPaintsSetting.get() : false;
|
|
949
|
-
}
|
|
950
943
|
}
|
|
951
944
|
|
|
952
945
|
export enum OutlineType {
|
|
@@ -1088,9 +1081,6 @@ export class LayerTextureManager {
|
|
|
1088
1081
|
}
|
|
1089
1082
|
});
|
|
1090
1083
|
}
|
|
1091
|
-
if (!oldLayers.length) {
|
|
1092
|
-
this.forceUpdate();
|
|
1093
|
-
}
|
|
1094
1084
|
for (const layer of oldLayers) {
|
|
1095
1085
|
if (newLayers.has(layer)) {
|
|
1096
1086
|
continue;
|
|
@@ -1149,12 +1139,6 @@ export class LayerTextureManager {
|
|
|
1149
1139
|
}
|
|
1150
1140
|
}
|
|
1151
1141
|
|
|
1152
|
-
forceUpdate(): void {
|
|
1153
|
-
this.queue.forEach(layer => this.updateLayer(layer));
|
|
1154
|
-
this.queue = [];
|
|
1155
|
-
void this.update();
|
|
1156
|
-
}
|
|
1157
|
-
|
|
1158
1142
|
private update(): Promise<void> {
|
|
1159
1143
|
const layer = this.queue.shift();
|
|
1160
1144
|
if (!layer) {
|
|
@@ -65,7 +65,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: undefined, target: HTMLE
|
|
|
65
65
|
return html`
|
|
66
66
|
<devtools-checkbox
|
|
67
67
|
title=${valueTypeToLocalizedString(type)}
|
|
68
|
-
|
|
68
|
+
.checked=${input.valueTypes.has(type)}
|
|
69
69
|
@change=${(e: Event) => {
|
|
70
70
|
const checkbox = e.target as HTMLInputElement;
|
|
71
71
|
input.onToggle(type, checkbox.checked);
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
|
-
import '../settings/emulation/components/components.js';
|
|
6
|
-
|
|
7
5
|
import * as Common from '../../core/common/common.js';
|
|
8
6
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
9
7
|
import * as Platform from '../../core/platform/platform.js';
|
|
@@ -14,7 +12,7 @@ import * as UI from '../../ui/legacy/legacy.js';
|
|
|
14
12
|
import {Directives, html, type LitTemplate, render} from '../../ui/lit/lit.js';
|
|
15
13
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
16
14
|
import * as MobileThrottling from '../mobile_throttling/mobile_throttling.js';
|
|
17
|
-
import
|
|
15
|
+
import * as EmulationComponents from '../settings/emulation/components/components.js';
|
|
18
16
|
|
|
19
17
|
import networkConfigViewStyles from './networkConfigView.css.js';
|
|
20
18
|
|
|
@@ -195,13 +193,17 @@ function renderUserAgentSection(input: NetworkConfigViewInput, output: NetworkCo
|
|
|
195
193
|
</devtools-checkbox>
|
|
196
194
|
<div class=${Directives.classMap({'network-config-ua-custom': true, checked: input.useCustomUA})}>
|
|
197
195
|
${renderUserAgentSelectAndInput(input, output, title)}
|
|
198
|
-
<devtools-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
196
|
+
<devtools-widget
|
|
197
|
+
class="user-agent-client-hints-form"
|
|
198
|
+
@clienthintschange=${(e: CustomEvent<Protocol.Emulation.UserAgentMetadata>) =>
|
|
199
|
+
input.onClientHintsChange(e.detail)}
|
|
200
|
+
@clienthintssubmit=${(e: CustomEvent<Protocol.Emulation.UserAgentMetadata>) =>
|
|
201
|
+
input.onClientHintsSubmit(e.detail)}
|
|
202
|
+
${UI.Widget.widget(EmulationComponents.UserAgentClientHintsForm.UserAgentClientHintsForm, {
|
|
203
|
+
value: input.clientHintsValue,
|
|
204
|
+
disabled: !input.useCustomUA,
|
|
205
|
+
})}>
|
|
206
|
+
</devtools-widget>
|
|
205
207
|
</div>
|
|
206
208
|
<span class="status-text">${input.clientHintsStatusText}</span>
|
|
207
209
|
`);
|
|
@@ -1367,7 +1367,9 @@ export class NetworkRequestNode extends NetworkNode {
|
|
|
1367
1367
|
}
|
|
1368
1368
|
|
|
1369
1369
|
private openInNewTab(): void {
|
|
1370
|
-
|
|
1370
|
+
// Only open URLs with web-safe schemes. Do not open privileged or other non-web-safe
|
|
1371
|
+
// schemes (such as `chrome:`, `devtools:`, `file:`, or `blob:devtools:`).
|
|
1372
|
+
if (!Common.ParsedURL.hasWebSafeScheme(this.requestInternal.url())) {
|
|
1371
1373
|
return;
|
|
1372
1374
|
}
|
|
1373
1375
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(this.requestInternal.url());
|
|
@@ -150,7 +150,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
150
150
|
<style>${requestConditionsDrawerStyles}</style>
|
|
151
151
|
<devtools-toolbar jslog=${VisualLogging.toolbar()}>
|
|
152
152
|
<devtools-checkbox
|
|
153
|
-
|
|
153
|
+
.checked=${input.enabled}
|
|
154
154
|
@click=${input.toggleEnabled}
|
|
155
155
|
.jslogContext=${'network.enable-request-blocking'}>
|
|
156
156
|
${i18nString(UIStrings.enableBlockingAndThrottling)}
|
|
@@ -125,7 +125,7 @@ export interface ViewInput {
|
|
|
125
125
|
queryParameters: SDK.NetworkRequest.NameValue[]|null;
|
|
126
126
|
objectTree: ObjectUI.ObjectPropertiesSection.ObjectTree|null;
|
|
127
127
|
onPayloadContextMenu(contextMenu: UI.ContextMenu.ContextMenu): void;
|
|
128
|
-
onPayloadToggle(expanded: boolean): void;
|
|
128
|
+
onPayloadToggle(expanded: boolean, recursively?: boolean): void;
|
|
129
129
|
|
|
130
130
|
/** Raw binary content data for the request body (when base64-encoded by backend). */
|
|
131
131
|
binaryPayloadContentData: TextUtils.ContentData.ContentData|null;
|
|
@@ -204,7 +204,9 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
204
204
|
<li role=treeitem class="source-code object-properties-section-root-element object-properties-section"
|
|
205
205
|
toggle-on-click
|
|
206
206
|
?open=${objectTree.expanded}
|
|
207
|
-
@expand=${
|
|
207
|
+
@expand=${
|
|
208
|
+
(e: UI.TreeOutline.TreeViewElement.ExpandEvent) =>
|
|
209
|
+
input.onPayloadToggle(e.detail.expanded, e.detail.recursively)}
|
|
208
210
|
@contextmenu=${onPayloadContextMenu}>
|
|
209
211
|
${objectTree.object.description}
|
|
210
212
|
${objectTree.object.hasChildren ? ObjectUI.ObjectPropertiesSection.renderObjectTree(objectTree) : nothing}
|
|
@@ -500,10 +502,15 @@ export class RequestPayloadView extends UI.Widget.VBox {
|
|
|
500
502
|
},
|
|
501
503
|
);
|
|
502
504
|
},
|
|
503
|
-
onPayloadToggle: (expanded: boolean): void => {
|
|
504
|
-
if (this.#objectTree) {
|
|
505
|
-
|
|
505
|
+
onPayloadToggle: (expanded: boolean, recursively = false): void => {
|
|
506
|
+
if (!this.#objectTree) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
if (expanded && recursively) {
|
|
510
|
+
void this.#objectTree.expandRecursively();
|
|
511
|
+
return;
|
|
506
512
|
}
|
|
513
|
+
this.#objectTree.expanded = expanded;
|
|
507
514
|
},
|
|
508
515
|
binaryPayloadContentData: this.#binaryPayloadContentData,
|
|
509
516
|
requestUrl: this.request?.url() ?? Platform.DevToolsPath.EmptyUrlString,
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
flex: 2 0 200px;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
.network-config-fields span:first-of-type {
|
|
29
|
+
.network-config-fields > span:first-of-type {
|
|
30
30
|
padding: 3px 0;
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -74,12 +74,12 @@
|
|
|
74
74
|
line-height: var(--sys-size-9);
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
.network-config-ua input {
|
|
77
|
+
.network-config-ua-custom > input {
|
|
78
78
|
display: block;
|
|
79
79
|
width: calc(100% - var(--sys-size-9));
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
.network-config-ua input[type="text"],
|
|
82
|
+
.network-config-ua-custom > input[type="text"],
|
|
83
83
|
.network-config-ua select {
|
|
84
84
|
margin-top: var(--sys-size-5);
|
|
85
85
|
}
|
|
@@ -92,20 +92,20 @@
|
|
|
92
92
|
.network-config-ua-custom {
|
|
93
93
|
padding-bottom: var(--sys-size-5);
|
|
94
94
|
|
|
95
|
-
input,
|
|
96
|
-
|
|
95
|
+
> input,
|
|
96
|
+
> .user-agent-client-hints-form {
|
|
97
97
|
opacity: 38%;
|
|
98
98
|
pointer-events: none;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
&.checked input,
|
|
102
|
-
&.checked
|
|
101
|
+
&.checked > input,
|
|
102
|
+
&.checked > .user-agent-client-hints-form {
|
|
103
103
|
opacity: revert;
|
|
104
104
|
pointer-events: revert;
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
.user-agent-client-hints-form {
|
|
109
109
|
display: block;
|
|
110
110
|
margin-top: var(--sys-size-7);
|
|
111
111
|
width: min(100%, 400px);
|
|
@@ -409,19 +409,41 @@ export class HeapProfileView extends UI.View.SimpleView implements UI.Searchable
|
|
|
409
409
|
}
|
|
410
410
|
|
|
411
411
|
#setupTimelineOverview(): void {
|
|
412
|
-
|
|
412
|
+
// Only the profile that is being recorded receives stats updates. Profiles
|
|
413
|
+
// loaded from a file are also marked as being recorded while they load.
|
|
414
|
+
if (this.profileType.hasTemporaryView() && !this.profileHeader.fromFile() &&
|
|
415
|
+
this.profileType.profileBeingRecorded() === this.profileHeader) {
|
|
413
416
|
this.timelineOverview.addEventListener(Events.IDS_RANGE_CHANGED, this.onIdsRangeChanged.bind(this));
|
|
414
417
|
this.timelineOverview.start();
|
|
415
418
|
|
|
416
419
|
this.profileType.addEventListener(SamplingHeapProfileType.Events.STATS_UPDATE, this.onStatsUpdate, this);
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
this.timelineOverview.stop();
|
|
420
|
-
this.timelineOverview.updateGrid();
|
|
421
|
-
});
|
|
420
|
+
this.profileType.addEventListener(ProfileEvents.PROFILE_COMPLETE, this.#onProfileComplete, this);
|
|
421
|
+
this.profileType.addEventListener(ProfileEvents.REMOVE_PROFILE_HEADER, this.#onProfileRemoved, this);
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
424
|
|
|
425
|
+
#onProfileComplete({data: profile}: Common.EventTarget.EventTargetEvent<ProfileHeader>): void {
|
|
426
|
+
if (profile !== this.profileHeader) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
this.#stopTimelineTracking();
|
|
430
|
+
this.timelineOverview.updateGrid();
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
#onProfileRemoved({data: profile}: Common.EventTarget.EventTargetEvent<ProfileHeader>): void {
|
|
434
|
+
// A profile that is removed while it is being recorded never completes.
|
|
435
|
+
if (profile === this.profileHeader) {
|
|
436
|
+
this.#stopTimelineTracking();
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
#stopTimelineTracking(): void {
|
|
441
|
+
this.profileType.removeEventListener(SamplingHeapProfileType.Events.STATS_UPDATE, this.onStatsUpdate, this);
|
|
442
|
+
this.profileType.removeEventListener(ProfileEvents.PROFILE_COMPLETE, this.#onProfileComplete, this);
|
|
443
|
+
this.profileType.removeEventListener(ProfileEvents.REMOVE_PROFILE_HEADER, this.#onProfileRemoved, this);
|
|
444
|
+
this.timelineOverview.stop();
|
|
445
|
+
}
|
|
446
|
+
|
|
425
447
|
override async toolbarItems(): Promise<TemplateResult> {
|
|
426
448
|
const currentViewType = this.viewType.get();
|
|
427
449
|
const isFlame = currentViewType === ViewTypes.FLAME;
|
|
@@ -533,14 +533,18 @@ export class HeapSnapshotViewportDataGrid extends HeapSnapshotSortableDataGrid {
|
|
|
533
533
|
const scrollBottom = scrollTop + this.scrollContainer.offsetHeight;
|
|
534
534
|
if (height >= scrollTop && height < scrollBottom) {
|
|
535
535
|
if (!node.dataGrid) {
|
|
536
|
-
this.updateVisibleNodes(
|
|
536
|
+
this.updateVisibleNodes(true);
|
|
537
537
|
}
|
|
538
538
|
return Promise.resolve(node);
|
|
539
539
|
}
|
|
540
540
|
|
|
541
541
|
const scrollGap = 40;
|
|
542
542
|
this.scrollContainer.scrollTop = Math.max(0, height - scrollGap);
|
|
543
|
-
this.updateVisibleNodes(
|
|
543
|
+
this.updateVisibleNodes(true);
|
|
544
|
+
if (!node.dataGrid) {
|
|
545
|
+
this.scrollContainer.scrollTop = Math.max(0, height - scrollGap);
|
|
546
|
+
this.updateVisibleNodes(true);
|
|
547
|
+
}
|
|
544
548
|
return new Promise(resolve => {
|
|
545
549
|
if (this.scrollToResolveCallback) {
|
|
546
550
|
this.scrollToResolveCallback();
|
|
@@ -551,7 +555,7 @@ export class HeapSnapshotViewportDataGrid extends HeapSnapshotSortableDataGrid {
|
|
|
551
555
|
if (!this.scrollToResolveCallback) {
|
|
552
556
|
return;
|
|
553
557
|
}
|
|
554
|
-
this.updateVisibleNodes(
|
|
558
|
+
this.updateVisibleNodes(!node.dataGrid);
|
|
555
559
|
this.scrollToResolveCallback();
|
|
556
560
|
this.scrollToResolveCallback = null;
|
|
557
561
|
});
|
|
@@ -241,7 +241,7 @@ export interface ViewInput {
|
|
|
241
241
|
onRemoveBreakpoint: (index: number) => void;
|
|
242
242
|
onExtensionViewClosed: () => void;
|
|
243
243
|
onExportMenuClosed: () => void;
|
|
244
|
-
onExportOptionSelected: (event: Menus.
|
|
244
|
+
onExportOptionSelected: (event: Menus.Menu.MenuItemSelectedEvent) => void;
|
|
245
245
|
onRecordingFinished: () => void;
|
|
246
246
|
handleAddAssertionEvent: () => void;
|
|
247
247
|
onSetRecording: (event: Event) => void;
|
|
@@ -1594,7 +1594,7 @@ export class RecorderPanel extends UI.Widget.VBox<DocumentFragment> {
|
|
|
1594
1594
|
}
|
|
1595
1595
|
}
|
|
1596
1596
|
|
|
1597
|
-
async #onExportOptionSelected(event: Menus.
|
|
1597
|
+
async #onExportOptionSelected(event: Menus.Menu.MenuItemSelectedEvent): Promise<void> {
|
|
1598
1598
|
if (typeof event.itemValue !== 'string') {
|
|
1599
1599
|
throw new Error('Invalid export option value');
|
|
1600
1600
|
}
|
|
@@ -455,9 +455,8 @@ export class ScreencastView extends UI.Widget.Widget implements SDK.OverlayModel
|
|
|
455
455
|
this.resourceTreeModel = screenCaptureModel.target().model(SDK.ResourceTreeModel.ResourceTreeModel);
|
|
456
456
|
this.networkManager = screenCaptureModel.target().model(SDK.NetworkManager.NetworkManager);
|
|
457
457
|
this.inputModel = screenCaptureModel.target().model(InputModel);
|
|
458
|
-
this.createNavigationBar();
|
|
459
|
-
this.updateGlasspane();
|
|
460
458
|
if (this.isShowing()) {
|
|
459
|
+
this.createNavigationBar();
|
|
461
460
|
this.#scheduleCasting();
|
|
462
461
|
}
|
|
463
462
|
} else {
|
|
@@ -494,6 +493,7 @@ export class ScreencastView extends UI.Widget.Widget implements SDK.OverlayModel
|
|
|
494
493
|
super.wasShown();
|
|
495
494
|
SDK.TargetManager.TargetManager.instance().addEventListener(SDK.TargetManager.Events.SUSPEND_STATE_CHANGED,
|
|
496
495
|
this.onSuspendStateChange, this);
|
|
496
|
+
this.createNavigationBar();
|
|
497
497
|
this.updateGlasspane();
|
|
498
498
|
this.#scheduleCasting();
|
|
499
499
|
this.requestUpdate();
|
|
@@ -539,14 +539,11 @@ export class ScreencastView extends UI.Widget.Widget implements SDK.OverlayModel
|
|
|
539
539
|
delete this.deferredCasting;
|
|
540
540
|
}
|
|
541
541
|
this.stopCasting();
|
|
542
|
+
this.#cleanup();
|
|
542
543
|
SDK.TargetManager.TargetManager.instance().removeEventListener(SDK.TargetManager.Events.SUSPEND_STATE_CHANGED,
|
|
543
544
|
this.onSuspendStateChange, this);
|
|
544
545
|
}
|
|
545
546
|
|
|
546
|
-
override onDetach(): void {
|
|
547
|
-
this.#cleanup();
|
|
548
|
-
}
|
|
549
|
-
|
|
550
547
|
private async startCasting(): Promise<void> {
|
|
551
548
|
if (!this.#screenCaptureModel) {
|
|
552
549
|
return;
|
|
@@ -272,37 +272,6 @@ export class SecurityPanelSidebar extends UI.Widget.VBox {
|
|
|
272
272
|
this.requestUpdate();
|
|
273
273
|
}
|
|
274
274
|
|
|
275
|
-
// Used in web tests
|
|
276
|
-
elementsByOrigin(): Map<string, {
|
|
277
|
-
select: (omitFocus?: boolean, selectedByUser?: boolean) => void,
|
|
278
|
-
showElement: () => void,
|
|
279
|
-
origin: () => string,
|
|
280
|
-
securityState: () => Protocol.Security.SecurityState | undefined,
|
|
281
|
-
}> {
|
|
282
|
-
const map = new Map<string, {
|
|
283
|
-
select: (omitFocus?: boolean, selectedByUser?: boolean) => void,
|
|
284
|
-
showElement: () => void,
|
|
285
|
-
origin: () => string,
|
|
286
|
-
securityState: () => Protocol.Security.SecurityState | undefined,
|
|
287
|
-
}>();
|
|
288
|
-
for (const [origin, state] of this.#origins.entries()) {
|
|
289
|
-
const element = {
|
|
290
|
-
select: () => {
|
|
291
|
-
this.#selectedElementId = origin;
|
|
292
|
-
this.requestUpdate();
|
|
293
|
-
this.#onShowOrigin?.(origin);
|
|
294
|
-
},
|
|
295
|
-
showElement: () => {
|
|
296
|
-
this.#onShowOrigin?.(origin);
|
|
297
|
-
},
|
|
298
|
-
origin: () => origin,
|
|
299
|
-
securityState: () => state,
|
|
300
|
-
};
|
|
301
|
-
map.set(origin, element);
|
|
302
|
-
}
|
|
303
|
-
return map;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
275
|
set selectedOrigin(origin: Platform.DevToolsPath.UrlString|null) {
|
|
307
276
|
this.#selectedElementId = origin ?? 'overview';
|
|
308
277
|
this.requestUpdate();
|
|
@@ -442,7 +442,7 @@ export const EXPERIMENTS_SETTINGS_TAB_DEFAULT_VIEW: ExperimentsSettingsTabView =
|
|
|
442
442
|
class="experiment-label"
|
|
443
443
|
name=${experiment.name}
|
|
444
444
|
title=${experiment.title}
|
|
445
|
-
|
|
445
|
+
.checked=${experiment.isEnabled()}
|
|
446
446
|
.jslogContext=${experiment.name}
|
|
447
447
|
@click=${(e: Event) => {
|
|
448
448
|
const checkbox = e.currentTarget as UI.UIUtils.CheckboxLabel;
|
|
@@ -260,6 +260,7 @@ export class DevicesSettingsTab extends UI.Widget.VBox implements
|
|
|
260
260
|
private muteUpdate: boolean;
|
|
261
261
|
private emulatedDevicesList: EmulationModel.EmulatedDevices.EmulatedDevicesList;
|
|
262
262
|
private editor?: UI.ListWidget.Editor<EmulationModel.EmulatedDevices.EmulatedDevice>;
|
|
263
|
+
readonly #userAgentClientHintsForm = new EmulationComponents.UserAgentClientHintsForm.UserAgentClientHintsForm();
|
|
263
264
|
|
|
264
265
|
constructor() {
|
|
265
266
|
super({jslog: `${VisualLogging.pane('devices')}`});
|
|
@@ -471,10 +472,7 @@ export class DevicesSettingsTab extends UI.Widget.VBox implements
|
|
|
471
472
|
uaType === EmulationModel.DeviceModeModel.UA.DESKTOP_TOUCH) {
|
|
472
473
|
device.capabilities.push(EmulationModel.EmulatedDevices.Capability.TOUCH);
|
|
473
474
|
}
|
|
474
|
-
const userAgentControlValue =
|
|
475
|
-
(editor.control('ua-metadata') as
|
|
476
|
-
UI.ListWidget.CustomEditorControl<EmulationComponents.UserAgentClientHintsForm.UserAgentClientHintsFormData>)
|
|
477
|
-
.value.metaData;
|
|
475
|
+
const userAgentControlValue = this.#userAgentClientHintsForm.value.metaData;
|
|
478
476
|
const hasUserAgentOverride = device.userAgent.trim().length > 0;
|
|
479
477
|
device.userAgentMetadata = null;
|
|
480
478
|
if (hasUserAgentOverride && userAgentControlValue) {
|
|
@@ -517,9 +515,7 @@ export class DevicesSettingsTab extends UI.Widget.VBox implements
|
|
|
517
515
|
device.touch() ? EmulationModel.DeviceModeModel.UA.DESKTOP_TOUCH : EmulationModel.DeviceModeModel.UA.DESKTOP;
|
|
518
516
|
}
|
|
519
517
|
editor.control('ua-type').value = uaType;
|
|
520
|
-
|
|
521
|
-
UI.ListWidget.CustomEditorControl<EmulationComponents.UserAgentClientHintsForm.UserAgentClientHintsFormData>)
|
|
522
|
-
.value = {metaData: device.userAgentMetadata || undefined};
|
|
518
|
+
this.#userAgentClientHintsForm.value = {metaData: device.userAgentMetadata || undefined};
|
|
523
519
|
return editor;
|
|
524
520
|
}
|
|
525
521
|
|
|
@@ -693,19 +689,16 @@ export class DevicesSettingsTab extends UI.Widget.VBox implements
|
|
|
693
689
|
uaType.classList.add('device-edit-fixed');
|
|
694
690
|
ua.appendChild(uaType);
|
|
695
691
|
|
|
696
|
-
const uaMetadata =
|
|
697
|
-
'ua-metadata', EmulationComponents.UserAgentClientHintsForm.UserAgentClientHintsForm,
|
|
698
|
-
userAgentMetadataValidator);
|
|
692
|
+
const uaMetadata = this.#userAgentClientHintsForm;
|
|
699
693
|
uaMetadata.value = {};
|
|
700
|
-
uaMetadata.addEventListener(
|
|
701
|
-
|
|
694
|
+
uaMetadata.addEventListener(EmulationComponents.UserAgentClientHintsForm.Events.CLIENT_HINTS_CHANGE,
|
|
695
|
+
() => editor.requestValidation());
|
|
696
|
+
// The editor content is not in the DOM yet, so show the form as a root widget.
|
|
697
|
+
uaMetadata.show(content, undefined, /* suppressOrphanWidgetError= */ true);
|
|
698
|
+
editor.addCustomControl(uaMetadata.element, () => uaMetadata.validate());
|
|
702
699
|
|
|
703
700
|
return editor;
|
|
704
701
|
|
|
705
|
-
function userAgentMetadataValidator(): UI.ListWidget.ValidatorResult {
|
|
706
|
-
return uaMetadata.validate();
|
|
707
|
-
}
|
|
708
|
-
|
|
709
702
|
function userAgentValidator(
|
|
710
703
|
_item: EmulationModel.EmulatedDevices.EmulatedDevice, _index: number,
|
|
711
704
|
input: UI.ListWidget.EditorControl): UI.ListWidget.ValidatorResult {
|