chrome-devtools-frontend 1.0.1664496 → 1.0.1665921
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/devtools-testing-guidance/SKILL.md +48 -0
- package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +3 -3
- package/.agents/skills/repro-flaky-tests/SKILL.md +2 -2
- package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +7 -1
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +2 -0
- package/.agents/skills/version-control/SKILL.md +4 -3
- package/docs/ui_engineering.md +89 -0
- package/eslint.config.mjs +9 -2
- package/front_end/Images/rollup.config.mjs +1 -1
- package/front_end/Tests.js +15 -16
- package/front_end/core/common/Gzip.ts +2 -2
- package/front_end/core/common/Settings.ts +4 -20
- package/front_end/core/common/Srcset.ts +1 -1
- package/front_end/core/common/VersionController.ts +1 -1
- package/front_end/core/host/AidaClient.ts +19 -4
- package/front_end/core/host/AidaGcaTranslation.ts +2 -2
- package/front_end/core/host/GcaClient.ts +2 -2
- package/front_end/core/host/GdpClient.ts +3 -3
- package/front_end/core/host/InspectorFrontendHostStub.ts +1 -1
- package/front_end/core/host/ResourceLoader.ts +15 -15
- package/front_end/core/protocol_client/DevToolsCDPConnection.ts +2 -2
- package/front_end/core/protocol_client/InspectorBackend.ts +1 -1
- package/front_end/core/root/Runtime.ts +0 -1
- package/front_end/core/sdk/CSSMatchedStyles.ts +78 -3
- package/front_end/core/sdk/CSSMetadata.ts +17 -12
- package/front_end/core/sdk/CSSProperty.ts +1 -1
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +2 -2
- package/front_end/core/sdk/CSSRule.ts +3 -3
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +3 -3
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +1 -1
- package/front_end/core/sdk/Connections.ts +1 -1
- package/front_end/core/sdk/DebuggerModel.ts +13 -13
- package/front_end/core/sdk/NetworkManager.ts +19 -19
- package/front_end/core/sdk/NetworkRequest.ts +57 -57
- package/front_end/core/sdk/OverlayModel.ts +1 -1
- package/front_end/core/sdk/PageResourceLoader.ts +2 -2
- package/front_end/core/sdk/RehydratingConnection.ts +5 -5
- package/front_end/core/sdk/ScreenCaptureModel.ts +1 -1
- package/front_end/core/sdk/Script.ts +2 -2
- package/front_end/core/sdk/ServerTiming.ts +7 -7
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +1 -1
- package/front_end/core/sdk/ServiceWorkerManager.ts +11 -11
- package/front_end/core/sdk/SourceMapScopeChainEntry.ts +2 -2
- package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
- package/front_end/core/sdk/StorageKeyManager.ts +1 -1
- package/front_end/core/sdk/sdk-meta.ts +98 -98
- package/front_end/devtools_compatibility.js +15 -13
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +4 -8
- package/front_end/entrypoints/main/MainImpl.ts +2 -3
- package/front_end/entrypoints/main/main-meta.ts +1 -16
- package/front_end/entrypoints/shell/shell.ts +1 -0
- package/front_end/entrypoints/trace_app/trace_app.ts +1 -0
- package/front_end/foundation/README.md +1 -1
- package/front_end/foundation/Universe.test.api.ts +73 -0
- package/front_end/foundation/Universe.ts +22 -0
- package/front_end/generated/InspectorBackendCommands.ts +2 -2
- package/front_end/generated/SupportedCSSProperties.js +1 -1
- package/front_end/generated/protocol.ts +19 -0
- package/front_end/models/ai_assistance/AiAgent2.ts +1 -1
- package/front_end/models/ai_assistance/AiConversation.ts +1 -1
- package/front_end/models/ai_assistance/BuiltInAi.ts +1 -1
- package/front_end/models/ai_assistance/ChangeManager.ts +0 -70
- package/front_end/models/ai_assistance/ExtensionScope.ts +2 -36
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +9 -9
- package/front_end/models/ai_assistance/agents/AiAgent.ts +10 -2
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +4 -4
- package/front_end/models/ai_assistance/agents/ExecuteJavascript.ts +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +21 -21
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +4 -4
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +1 -1
- package/front_end/models/ai_assistance/ai_assistance.ts +0 -5
- package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +11 -4
- package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +8 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +14 -11
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +2 -2
- package/front_end/models/ai_assistance/performance/AICallTree.ts +2 -2
- package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +1 -1
- package/front_end/models/ai_assistance/tools/GetNetworkRequestDetails.ts +9 -2
- package/front_end/models/ai_assistance/tools/GetStyles.ts +4 -4
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +2 -5
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -2
- package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -2
- package/front_end/models/badges/badges-meta.ts +27 -0
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -3
- package/front_end/models/bindings/ContentProviderBasedProject.ts +1 -1
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +6 -7
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +5 -4
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +72 -29
- package/front_end/models/bindings/ResourceMapping.ts +38 -32
- package/front_end/models/bindings/ResourceScriptMapping.ts +5 -7
- package/front_end/models/breakpoints/BreakpointManager.ts +2 -1
- package/front_end/models/har/Writer.ts +2 -2
- package/front_end/models/issues_manager/ElementAccessibilityIssue.ts +1 -1
- package/front_end/models/issues_manager/GenericIssue.ts +1 -1
- package/front_end/models/issues_manager/IssuesManager.ts +14 -5
- package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +1 -1
- package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +2 -2
- package/front_end/models/issues_manager/SourceFrameIssuesManager.ts +13 -2
- package/front_end/models/issues_manager/issues_manager.ts +0 -2
- package/front_end/models/live-metrics/LiveMetrics.ts +22 -5
- package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +1 -1
- package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +10 -4
- package/front_end/models/logs/logs-meta.ts +23 -16
- package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +2 -2
- package/front_end/models/persistence/IsolatedFileSystem.ts +1 -1
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +1 -1
- package/front_end/models/source_map_scopes/NamesResolver.ts +104 -86
- package/front_end/models/source_map_scopes/ScopeChainModel.ts +6 -2
- package/front_end/models/stack_trace/StackTraceModel.ts +1 -1
- package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +1 -1
- package/front_end/models/trace/handlers/UserTimingsHandler.ts +17 -6
- package/front_end/models/trace/helpers/SamplesIntegrator.ts +1 -1
- package/front_end/models/trace/helpers/Timing.ts +1 -1
- package/front_end/models/trace/insights/Common.ts +1 -1
- package/front_end/models/trace/insights/DocumentLatency.ts +3 -3
- package/front_end/models/trace/insights/LCPDiscovery.ts +1 -1
- package/front_end/models/trace/insights/ModernHTTP.ts +1 -1
- package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +2 -2
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +14 -9
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +2 -15
- package/front_end/panels/ai_assistance/ai_assistance.ts +1 -2
- package/front_end/panels/ai_assistance/components/ChatInput.ts +23 -19
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +9 -18
- package/front_end/panels/ai_assistance/components/ChatView.ts +2 -35
- package/front_end/panels/ai_assistance/components/DisabledWidget.ts +1 -1
- package/front_end/panels/ai_assistance/components/ExploreWidget.ts +4 -4
- package/front_end/panels/ai_assistance/components/ImageResize.ts +74 -0
- package/front_end/panels/ai_assistance/components/WalkthroughView.ts +2 -2
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +28 -29
- package/front_end/panels/animation/AnimationTimeline.ts +3 -3
- package/front_end/panels/animation/animationTimeline.css +0 -2
- package/front_end/panels/application/AppManifestView.ts +1 -1
- package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -1
- package/front_end/panels/application/CookieItemsView.ts +1 -1
- package/front_end/panels/application/CrashReportContextView.ts +3 -3
- package/front_end/panels/application/DeviceBoundSessionsModel.ts +1 -1
- package/front_end/panels/application/DeviceBoundSessionsTreeElement.ts +1 -1
- package/front_end/panels/application/DeviceBoundSessionsView.ts +1 -1
- package/front_end/panels/application/IndexedDBViews.ts +1 -1
- package/front_end/panels/application/KeyValueStorageItemsView.ts +1 -1
- package/front_end/panels/application/OriginTrialTreeView.ts +1 -1
- package/front_end/panels/application/ServiceWorkersView.ts +6 -6
- package/front_end/panels/application/StorageBucketsTreeElement.ts +1 -1
- package/front_end/panels/application/StorageItemsToolbar.ts +3 -3
- package/front_end/panels/application/WebMCPView.ts +7 -5
- package/front_end/panels/application/components/AdsView.ts +21 -6
- package/front_end/panels/application/components/BackForwardCacheView.ts +2 -2
- package/front_end/panels/application/components/ProtocolHandlersView.ts +1 -1
- package/front_end/panels/application/components/StorageMetadataView.ts +1 -1
- package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +2 -2
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +2 -1
- package/front_end/panels/application/preloading/components/PreloadingString.ts +3 -3
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -1
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +1 -1
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +2 -2
- package/front_end/panels/changes/ChangesSidebar.ts +2 -2
- package/front_end/panels/changes/ChangesView.ts +4 -5
- package/front_end/panels/changes/CombinedDiffView.ts +3 -3
- package/front_end/panels/changes/changes-meta.ts +2 -2
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +3 -3
- package/front_end/panels/common/BadgeNotification.ts +8 -8
- package/front_end/panels/common/DOMLinkifier.ts +1 -1
- package/front_end/panels/common/GdpSignUpDialog.ts +2 -2
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +1 -1
- package/front_end/panels/common/aiCodeCompletionDisclaimer.css +0 -1
- package/front_end/panels/console/ConsoleInsightTeaser.ts +1 -1
- package/front_end/panels/console/ConsolePinPane.ts +3 -3
- package/front_end/panels/console/ConsolePrompt.ts +6 -4
- package/front_end/panels/console/ConsoleSidebar.ts +8 -10
- package/front_end/panels/console_counters/WarningErrorCounter.ts +10 -11
- package/front_end/panels/coverage/CoverageView.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +1 -1
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +1 -1
- package/front_end/panels/elements/CSSRuleValidator.ts +1 -1
- package/front_end/panels/elements/ComputedStyleWidget.ts +3 -2
- package/front_end/panels/elements/ElementsTreeElement.ts +3 -3
- package/front_end/panels/elements/EventListenersWidget.ts +1 -3
- package/front_end/panels/elements/LayoutPane.ts +23 -13
- package/front_end/panels/elements/StandaloneStylesContainer.ts +7 -7
- package/front_end/panels/elements/StylePropertiesSection.ts +33 -5
- package/front_end/panels/elements/StylePropertyTreeElement.ts +5 -5
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +6 -6
- package/front_end/panels/elements/StylesSidebarPane.ts +4 -3
- package/front_end/panels/elements/elements-meta.ts +18 -2
- package/front_end/panels/emulation/DeviceModeToolbar.ts +100 -40
- package/front_end/panels/emulation/DeviceModeView.ts +5 -4
- package/front_end/panels/emulation/MediaQueryInspector.ts +35 -19
- package/front_end/panels/event_listeners/EventListenersView.ts +4 -4
- package/front_end/panels/explain/components/ConsoleInsight.ts +8 -9
- package/front_end/panels/explain/explain-meta.ts +3 -3
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +135 -167
- package/front_end/panels/layer_viewer/Layers3DView.ts +10 -23
- package/front_end/panels/layer_viewer/layer_viewer-meta.ts +27 -0
- package/front_end/panels/lighthouse/LighthouseController.ts +44 -55
- package/front_end/panels/lighthouse/LighthousePanel.ts +9 -9
- package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseStartView.ts +9 -12
- package/front_end/panels/lighthouse/LighthouseStatusView.ts +33 -33
- package/front_end/panels/lighthouse/RadioSetting.ts +1 -1
- package/front_end/panels/lighthouse/lighthouse-meta.ts +131 -1
- package/front_end/panels/media/EventDisplayTable.ts +67 -94
- package/front_end/panels/media/PlayerListView.ts +1 -1
- package/front_end/panels/media/eventDisplayTable.css +9 -4
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +5 -5
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +1 -1
- package/front_end/panels/network/EventSourceMessagesView.ts +98 -107
- package/front_end/panels/network/NetworkLogViewColumns.ts +1 -1
- package/front_end/panels/network/NetworkWaterfallColumn.ts +1 -1
- package/front_end/panels/network/RequestConditionsDrawer.ts +2 -2
- package/front_end/panels/network/RequestCookiesView.ts +2 -2
- package/front_end/panels/network/RequestHeadersView.ts +5 -5
- package/front_end/panels/network/RequestPayloadView.ts +4 -4
- package/front_end/panels/network/RequestTimingView.ts +2 -2
- package/front_end/panels/network/components/DirectSocketConnectionView.ts +1 -1
- package/front_end/panels/network/eventSourceMessagesView.css +12 -3
- package/front_end/panels/network/networkTimingTable.css +2 -2
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +1 -1
- package/front_end/panels/profiler/BottomUpProfileDataGrid.ts +25 -29
- package/front_end/panels/profiler/HeapProfileView.ts +308 -247
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +13 -3
- package/front_end/panels/profiler/HeapSnapshotView.ts +30 -10
- package/front_end/panels/profiler/HeapTimelineOverview.ts +5 -2
- package/front_end/panels/profiler/ProfileDataGrid.ts +128 -157
- package/front_end/panels/profiler/ProfileFlameChartDataProvider.ts +17 -5
- package/front_end/panels/profiler/ProfilesPanel.ts +2 -2
- package/front_end/panels/profiler/TopDownProfileDataGrid.ts +17 -21
- package/front_end/panels/profiler/profilesPanel.css +9 -13
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +2 -2
- package/front_end/panels/recorder/CreateRecordingView.ts +4 -4
- package/front_end/panels/recorder/RecorderPanel.ts +6 -6
- package/front_end/panels/recorder/RecordingView.ts +1 -1
- package/front_end/panels/recorder/ReplaySection.ts +1 -1
- package/front_end/panels/recorder/StepView.ts +1 -1
- package/front_end/panels/recorder/injected/rollup.config.mjs +1 -1
- package/front_end/panels/search/SearchView.ts +1 -1
- package/front_end/panels/security/SecurityPanel.ts +54 -41
- package/front_end/panels/sensors/LocationsSettingsTab.ts +246 -233
- package/front_end/panels/sensors/SensorsView.ts +1 -1
- package/front_end/panels/settings/AISettingsTab.ts +11 -10
- package/front_end/panels/settings/SettingsScreen.ts +29 -24
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +2 -2
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +5 -5
- package/front_end/panels/sources/BreakpointEditDialog.ts +2 -2
- package/front_end/panels/sources/BreakpointsView.ts +1 -1
- package/front_end/panels/sources/CallStackSidebarPane.ts +2 -2
- package/front_end/panels/sources/DebuggerPausedMessage.ts +2 -2
- package/front_end/panels/sources/DebuggerPlugin.ts +25 -22
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +3 -1
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -5
- package/front_end/panels/sources/sources-meta.ts +1 -1
- package/front_end/panels/timeline/CountersGraph.ts +1 -2
- package/front_end/panels/timeline/ExtensionTrackAppender.ts +1 -1
- package/front_end/panels/timeline/TimelineDetailsView.ts +2 -2
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +2 -2
- package/front_end/panels/timeline/TimelineFlameChartView.ts +4 -4
- package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.ts +53 -81
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +10 -3
- package/front_end/panels/timeline/TimelineUIUtils.ts +18 -4
- package/front_end/panels/timeline/TrackConfigBanner.ts +1 -1
- package/front_end/panels/timeline/components/ExportTraceOptions.ts +1 -1
- package/front_end/panels/timeline/components/LayoutShiftDetails.ts +8 -9
- package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +1 -1
- package/front_end/panels/timeline/components/TimelineRangeSummaryView.ts +1 -1
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +2 -2
- package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +1 -1
- package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +1 -1
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +2 -2
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +5 -0
- package/front_end/panels/timeline/overlays/components/TimespanBreakdownOverlay.ts +13 -8
- package/front_end/panels/timeline/overlays/components/timespanBreakdownOverlay.css +1 -0
- package/front_end/panels/timeline/timeline-meta.ts +169 -0
- package/front_end/panels/timeline/timelineFlameChartView.css +5 -0
- package/front_end/panels/webauthn/WebauthnPane.ts +1 -1
- package/front_end/panels/whats_new/ReleaseNoteText.ts +9 -9
- package/front_end/panels/whats_new/resources/WNDT.md +7 -8
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/web-vitals/README.chromium +2 -2
- package/front_end/third_party/web-vitals/package/README.md +120 -19
- package/front_end/third_party/web-vitals/package/attribution.d.ts +16 -0
- package/front_end/third_party/web-vitals/package/attribution.js +18 -0
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onCLS.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.d.ts +1 -7
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onFCP.js +53 -32
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.d.ts +2 -2
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onINP.js +43 -12
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onLCP.js +21 -3
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/attribution/onTTFB.js +30 -24
- package/front_end/third_party/web-vitals/package/dist/modules/lib/FCPEntryManager.d.ts +3 -0
- package/front_end/third_party/web-vitals/package/dist/modules/lib/FCPEntryManager.js +18 -0
- package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.d.ts +2 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/InteractionManager.js +18 -2
- package/front_end/third_party/web-vitals/package/dist/modules/lib/LCPEntryManager.d.ts +1 -0
- package/front_end/third_party/web-vitals/package/dist/modules/lib/LCPEntryManager.js +1 -0
- package/front_end/third_party/web-vitals/package/dist/modules/lib/bindReporter.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/generateUniqueID.js +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getLoadState.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getLoadState.js +7 -7
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getSelector.js +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/getVisibilityWatcher.js +4 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.d.ts +7 -3
- package/front_end/third_party/web-vitals/package/dist/modules/lib/initMetric.js +20 -11
- package/front_end/third_party/web-vitals/package/dist/modules/lib/initUnique.js +8 -3
- package/front_end/third_party/web-vitals/package/dist/modules/lib/observe.d.ts +3 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/observe.js +19 -4
- package/front_end/third_party/web-vitals/package/dist/modules/lib/polyfills/interactionCountPolyfill.js +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/lib/softNavs.d.ts +3 -0
- package/front_end/third_party/web-vitals/package/dist/modules/lib/softNavs.js +38 -0
- package/front_end/third_party/web-vitals/package/dist/modules/lib/whenIdleOrHidden.js +5 -1
- package/front_end/third_party/web-vitals/package/dist/modules/onCLS.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/onCLS.js +30 -11
- package/front_end/third_party/web-vitals/package/dist/modules/onFCP.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/onFCP.js +36 -4
- package/front_end/third_party/web-vitals/package/dist/modules/onINP.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/onINP.js +42 -22
- package/front_end/third_party/web-vitals/package/dist/modules/onLCP.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/onLCP.js +109 -30
- package/front_end/third_party/web-vitals/package/dist/modules/onTTFB.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/onTTFB.js +25 -7
- package/front_end/third_party/web-vitals/package/dist/modules/types/base.d.ts +24 -1
- package/front_end/third_party/web-vitals/package/dist/modules/types/fcp.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/types/inp.d.ts +14 -6
- package/front_end/third_party/web-vitals/package/dist/modules/types/lcp.d.ts +1 -1
- package/front_end/third_party/web-vitals/package/dist/modules/types/ttfb.d.ts +2 -2
- package/front_end/third_party/web-vitals/package/dist/modules/types.d.ts +26 -4
- package/front_end/third_party/web-vitals/package/package.json +21 -22
- package/front_end/third_party/web-vitals/package/src/attribution/onCLS.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/attribution/onFCP.ts +62 -39
- package/front_end/third_party/web-vitals/package/src/attribution/onINP.ts +52 -15
- package/front_end/third_party/web-vitals/package/src/attribution/onLCP.ts +25 -7
- package/front_end/third_party/web-vitals/package/src/attribution/onTTFB.ts +43 -37
- package/front_end/third_party/web-vitals/package/src/lib/{polyfills/getFirstHiddenTimePolyfill.ts → FCPEntryManager.ts} +4 -14
- package/front_end/third_party/web-vitals/package/src/lib/InteractionManager.ts +22 -2
- package/front_end/third_party/web-vitals/package/src/lib/LCPEntryManager.ts +1 -0
- package/front_end/third_party/web-vitals/package/src/lib/bindReporter.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/lib/generateUniqueID.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/lib/getLoadState.ts +11 -12
- package/front_end/third_party/web-vitals/package/src/lib/getSelector.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/lib/getVisibilityWatcher.ts +4 -1
- package/front_end/third_party/web-vitals/package/src/lib/initMetric.ts +24 -11
- package/front_end/third_party/web-vitals/package/src/lib/initUnique.ts +12 -4
- package/front_end/third_party/web-vitals/package/src/lib/observe.ts +26 -5
- package/front_end/third_party/web-vitals/package/src/lib/polyfills/interactionCountPolyfill.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/lib/softNavs.ts +48 -0
- package/front_end/third_party/web-vitals/package/src/lib/whenIdleOrHidden.ts +12 -4
- package/front_end/third_party/web-vitals/package/src/onCLS.ts +75 -18
- package/front_end/third_party/web-vitals/package/src/onFCP.ts +66 -7
- package/front_end/third_party/web-vitals/package/src/onINP.ts +100 -39
- package/front_end/third_party/web-vitals/package/src/onLCP.ts +169 -34
- package/front_end/third_party/web-vitals/package/src/onTTFB.ts +50 -13
- package/front_end/third_party/web-vitals/package/src/types/base.ts +31 -10
- package/front_end/third_party/web-vitals/package/src/types/fcp.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/types/inp.ts +14 -6
- package/front_end/third_party/web-vitals/package/src/types/lcp.ts +1 -1
- package/front_end/third_party/web-vitals/package/src/types/ttfb.ts +2 -2
- package/front_end/third_party/web-vitals/package/src/types.ts +32 -9
- package/front_end/third_party/web-vitals/patches/0001-Add-onEachInteraction-to-onINP-options.patch +11 -11
- package/front_end/third_party/web-vitals/rebuild.sh +2 -2
- package/front_end/third_party/web-vitals/web-vitals-tsconfig.json +2 -0
- package/front_end/ui/components/buttons/Button.ts +16 -0
- package/front_end/ui/components/dialogs/Dialog.ts +1 -1
- package/front_end/ui/components/highlighting/HighlightManager.ts +6 -1
- package/front_end/ui/components/highlighting/highlighting.ts +1 -1
- package/front_end/ui/components/icon_button/FileSourceIcon.ts +1 -1
- package/front_end/ui/components/linkifier/LinkifierImpl.ts +1 -1
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +2 -2
- package/front_end/ui/components/settings/SettingCheckbox.ts +12 -7
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +2 -2
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +6 -6
- package/front_end/ui/components/text_editor/javascript.ts +3 -1
- package/front_end/ui/components/tooltips/Tooltip.ts +1 -1
- package/front_end/ui/legacy/ContextMenu.ts +12 -2
- package/front_end/ui/legacy/ListControl.ts +1 -1
- package/front_end/ui/legacy/SelectMenu.docs.ts +17 -19
- package/front_end/ui/legacy/Toolbar.ts +4 -1
- package/front_end/ui/legacy/Treeoutline.ts +1 -1
- package/front_end/ui/legacy/components/color_picker/spectrum.css +1 -2
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +50 -4
- package/front_end/ui/legacy/components/object_ui/JavaScriptREPL.ts +3 -1
- package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +4 -4
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +8 -7
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +14 -11
- package/front_end/ui/legacy/components/quick_open/QuickOpen.ts +1 -1
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +15 -5
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +4 -4
- package/front_end/ui/legacy/components/utils/Linkifier.ts +5 -1
- package/front_end/ui/lit/render.ts +1 -1
- package/front_end/ui/settings/SettingUIRegistration.ts +8 -3
- package/front_end/ui/visual_logging/KnownContextValues.ts +8 -0
- package/front_end/ui/visual_logging/LoggingEvents.ts +1 -1
- package/inspector_overlay/main.ts +1 -1
- package/mcp/mcp.ts +5 -4
- package/package.json +13 -13
- package/front_end/models/ai_assistance/AgentProject.ts +0 -261
- package/front_end/models/ai_assistance/agents/PatchAgent.ts +0 -306
- package/front_end/models/issues_manager/CheckFormsIssuesTrigger.ts +0 -45
- package/front_end/models/text_utils/text_utils.ts +0 -5
- package/front_end/panels/ai_assistance/PatchWidget.ts +0 -867
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +0 -368
- package/front_end/panels/ai_assistance/selectWorkspaceDialog.css +0 -92
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
// Copyright 2014 The Chromium Authors
|
|
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
|
-
/* eslint-disable @devtools/no-imperative-dom-api */
|
|
5
4
|
|
|
6
|
-
import '../../ui/legacy/
|
|
5
|
+
import '../../ui/legacy/components/data_grid/data_grid.js';
|
|
7
6
|
|
|
8
7
|
import * as Common from '../../core/common/common.js';
|
|
9
8
|
import * as Host from '../../core/host/host.js';
|
|
10
9
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
11
10
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
12
|
-
import * as
|
|
11
|
+
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
13
12
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
13
|
+
import {Directives, html, render} from '../../ui/lit/lit.js';
|
|
14
14
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
15
15
|
|
|
16
16
|
import eventSourceMessagesViewStyles from './eventSourceMessagesView.css.js';
|
|
17
17
|
|
|
18
|
+
const {repeat} = Directives;
|
|
19
|
+
|
|
18
20
|
const UIStrings = {
|
|
19
21
|
/**
|
|
20
22
|
* @description Text in Event Source Messages View of the Network panel
|
|
@@ -51,67 +53,89 @@ const UIStrings = {
|
|
|
51
53
|
} as const;
|
|
52
54
|
const str_ = i18n.i18n.registerUIStrings('panels/network/EventSourceMessagesView.ts', UIStrings);
|
|
53
55
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
56
|
+
|
|
57
|
+
export interface ViewInput {
|
|
58
|
+
messages: readonly SDK.NetworkRequest.EventSourceMessage[];
|
|
59
|
+
filterSetting: Common.Settings.Setting<string>;
|
|
60
|
+
onClear: () => void;
|
|
61
|
+
onFilterChanged: (event: Event) => void;
|
|
62
|
+
onRowContextMenu: (message: SDK.NetworkRequest.EventSourceMessage, event: MouseEvent) => void;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export type View = (input: ViewInput, output: unknown, target: HTMLElement) => void;
|
|
66
|
+
|
|
67
|
+
export const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
68
|
+
// clang-format off
|
|
69
|
+
render(html`
|
|
70
|
+
<style>
|
|
71
|
+
${eventSourceMessagesViewStyles}
|
|
72
|
+
</style>
|
|
73
|
+
<div class="event-source-messages-view">
|
|
74
|
+
<devtools-toolbar>
|
|
75
|
+
<devtools-button title=${i18nString(UIStrings.clearAll)} .iconName=${'clear'}
|
|
76
|
+
@click=${input.onClear}
|
|
77
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}
|
|
78
|
+
.jslogContext=${'clear'}></devtools-button>
|
|
79
|
+
<devtools-toolbar-input
|
|
80
|
+
type="filter"
|
|
81
|
+
placeholder=${i18nString(UIStrings.filterByRegex)}
|
|
82
|
+
@change=${input.onFilterChanged}
|
|
83
|
+
.value=${input.filterSetting.get()}
|
|
84
|
+
style="flex-grow: 0.4"></devtools-toolbar-input>
|
|
85
|
+
</devtools-toolbar>
|
|
86
|
+
<devtools-data-grid name=${i18nString(UIStrings.eventSource)} autoscroll striped
|
|
87
|
+
.template=${html`
|
|
88
|
+
<table>
|
|
89
|
+
<thead>
|
|
90
|
+
<tr>
|
|
91
|
+
<th id="id" weight="8" sortable>${i18nString(UIStrings.id)}</th>
|
|
92
|
+
<th id="type" weight="8" sortable>${i18nString(UIStrings.type)}</th>
|
|
93
|
+
<th id="data" weight="88">${i18nString(UIStrings.data)}</th>
|
|
94
|
+
<th id="time" weight="8" sortable sort="ascending">${i18nString(UIStrings.time)}</th>
|
|
95
|
+
</tr>
|
|
96
|
+
</thead>
|
|
97
|
+
<tbody>
|
|
98
|
+
${repeat(input.messages, message => message, message => {
|
|
99
|
+
const date = new Date(message.time * 1000);
|
|
100
|
+
return html`<tr @contextmenu=${(e: MouseEvent) => {
|
|
101
|
+
e.preventDefault();
|
|
102
|
+
input.onRowContextMenu(message, e);
|
|
103
|
+
}}>
|
|
104
|
+
<td>${message.eventId}</td>
|
|
105
|
+
<td>${message.eventName}</td>
|
|
106
|
+
<td>${message.data}</td>
|
|
107
|
+
<td title=${date.toLocaleString()} data-value=${message.time}>${formatTime(date)}</td></tr>`;
|
|
108
|
+
})}
|
|
109
|
+
</tbody>
|
|
110
|
+
</table>
|
|
111
|
+
`}>
|
|
112
|
+
</devtools-data-grid>
|
|
113
|
+
</div>
|
|
114
|
+
`, target);
|
|
115
|
+
// clang-format on
|
|
116
|
+
};
|
|
117
|
+
|
|
54
118
|
export class EventSourceMessagesView extends UI.Widget.VBox {
|
|
55
119
|
private readonly request: SDK.NetworkRequest.NetworkRequest;
|
|
56
|
-
private
|
|
57
|
-
private
|
|
58
|
-
|
|
59
|
-
private readonly filterTextInput: UI.Toolbar.ToolbarInput;
|
|
60
|
-
private filterRegex: RegExp|null;
|
|
120
|
+
private messageFilterSetting: Common.Settings.Setting<string>;
|
|
121
|
+
private filterRegex: RegExp|null = null;
|
|
122
|
+
#view: View;
|
|
61
123
|
|
|
62
|
-
|
|
63
|
-
Common.Settings.Settings.instance().createSetting('network-event-source-message-filter', '');
|
|
64
|
-
|
|
65
|
-
constructor(request: SDK.NetworkRequest.NetworkRequest) {
|
|
124
|
+
constructor(request: SDK.NetworkRequest.NetworkRequest, view: View = DEFAULT_VIEW) {
|
|
66
125
|
super({jslog: `${VisualLogging.pane('event-stream').track({resize: true})}`});
|
|
67
|
-
this
|
|
68
|
-
|
|
69
|
-
this.element.classList.add('event-source-messages-view');
|
|
126
|
+
this.#view = view;
|
|
70
127
|
this.request = request;
|
|
71
128
|
|
|
72
|
-
this.
|
|
73
|
-
|
|
74
|
-
this.clearAllButton = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clearAll), 'clear');
|
|
75
|
-
this.clearAllButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, this.clearMessages, this);
|
|
76
|
-
this.mainToolbar.appendToolbarItem(this.clearAllButton);
|
|
77
|
-
|
|
78
|
-
const placeholder = i18nString(UIStrings.filterByRegex);
|
|
79
|
-
this.filterTextInput = new UI.Toolbar.ToolbarFilter(placeholder, 0.4);
|
|
80
|
-
this.filterTextInput.addEventListener(UI.Toolbar.ToolbarInput.Event.TEXT_CHANGED, this.updateFilterSetting, this);
|
|
129
|
+
this.messageFilterSetting =
|
|
130
|
+
Common.Settings.Settings.instance().createSetting('network-event-source-message-filter', '');
|
|
81
131
|
const filter = this.messageFilterSetting.get();
|
|
82
|
-
this.filterRegex = null;
|
|
83
132
|
this.setFilter(filter);
|
|
84
|
-
if (filter) {
|
|
85
|
-
this.filterTextInput.setValue(filter);
|
|
86
|
-
}
|
|
87
|
-
this.mainToolbar.appendToolbarItem(this.filterTextInput);
|
|
88
|
-
|
|
89
|
-
const columns: DataGrid.DataGrid.ColumnDescriptor[] = [
|
|
90
|
-
{id: 'id', title: i18nString(UIStrings.id), sortable: true, weight: 8},
|
|
91
|
-
{id: 'type', title: i18nString(UIStrings.type), sortable: true, weight: 8},
|
|
92
|
-
{id: 'data', title: i18nString(UIStrings.data), sortable: false, weight: 88},
|
|
93
|
-
{id: 'time', title: i18nString(UIStrings.time), sortable: true, weight: 8},
|
|
94
|
-
];
|
|
95
|
-
|
|
96
|
-
this.dataGrid = new DataGrid.SortableDataGrid.SortableDataGrid({
|
|
97
|
-
displayName: i18nString(UIStrings.eventSource),
|
|
98
|
-
columns,
|
|
99
|
-
});
|
|
100
|
-
this.dataGrid.setStriped(true);
|
|
101
|
-
this.dataGrid.setEnableAutoScrollToBottom(true);
|
|
102
|
-
this.dataGrid.setRowContextMenuCallback(this.onRowContextMenu.bind(this));
|
|
103
|
-
this.dataGrid.markColumnAsSortedBy('time', DataGrid.DataGrid.Order.Ascending);
|
|
104
|
-
this.sortItems();
|
|
105
|
-
this.dataGrid.addEventListener(DataGrid.DataGrid.Events.SORTING_CHANGED, this.sortItems, this);
|
|
106
|
-
|
|
107
|
-
this.dataGrid.setName('event-source-messages-view');
|
|
108
|
-
this.dataGrid.asWidget().show(this.element);
|
|
109
133
|
}
|
|
110
134
|
|
|
111
135
|
override wasShown(): void {
|
|
112
136
|
super.wasShown();
|
|
113
|
-
this.refresh();
|
|
114
137
|
this.request.addEventListener(SDK.NetworkRequest.Events.EVENT_SOURCE_MESSAGE_ADDED, this.messageAdded, this);
|
|
138
|
+
this.requestUpdate();
|
|
115
139
|
}
|
|
116
140
|
|
|
117
141
|
override willHide(): void {
|
|
@@ -124,7 +148,7 @@ export class EventSourceMessagesView extends UI.Widget.VBox {
|
|
|
124
148
|
if (!this.messageFilter(message)) {
|
|
125
149
|
return;
|
|
126
150
|
}
|
|
127
|
-
this.
|
|
151
|
+
this.requestUpdate();
|
|
128
152
|
}
|
|
129
153
|
|
|
130
154
|
private messageFilter(message: SDK.NetworkRequest.EventSourceMessage): boolean {
|
|
@@ -134,14 +158,15 @@ export class EventSourceMessagesView extends UI.Widget.VBox {
|
|
|
134
158
|
|
|
135
159
|
private clearMessages(): void {
|
|
136
160
|
clearMessageOffsets.set(this.request, this.request.eventSourceMessages().length);
|
|
137
|
-
this.
|
|
161
|
+
this.requestUpdate();
|
|
138
162
|
}
|
|
139
163
|
|
|
140
|
-
private
|
|
141
|
-
const
|
|
164
|
+
private onFilterChanged(event: Event): void {
|
|
165
|
+
const inputElement = event.target as UI.Toolbar.ToolbarInputElement;
|
|
166
|
+
const text = inputElement.value;
|
|
142
167
|
this.messageFilterSetting.set(text);
|
|
143
168
|
this.setFilter(text);
|
|
144
|
-
this.
|
|
169
|
+
this.requestUpdate();
|
|
145
170
|
}
|
|
146
171
|
|
|
147
172
|
private setFilter(text: string): void {
|
|
@@ -156,71 +181,37 @@ export class EventSourceMessagesView extends UI.Widget.VBox {
|
|
|
156
181
|
}
|
|
157
182
|
}
|
|
158
183
|
|
|
159
|
-
private
|
|
160
|
-
const
|
|
161
|
-
if (!sortColumnId) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
const comparator =
|
|
165
|
-
(Comparators[sortColumnId] as
|
|
166
|
-
((arg0: DataGrid.SortableDataGrid.SortableDataGridNode<EventSourceMessageNode>,
|
|
167
|
-
arg1: DataGrid.SortableDataGrid.SortableDataGridNode<EventSourceMessageNode>) => number) |
|
|
168
|
-
undefined);
|
|
169
|
-
if (!comparator) {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
this.dataGrid.sortNodes(comparator, !this.dataGrid.isSortOrderAscending());
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
private onRowContextMenu(
|
|
176
|
-
contextMenu: UI.ContextMenu.ContextMenu,
|
|
177
|
-
node: DataGrid.DataGrid.DataGridNode<DataGrid.ViewportDataGrid.ViewportDataGridNode<
|
|
178
|
-
DataGrid.SortableDataGrid.SortableDataGridNode<EventSourceMessageNode>>>): void {
|
|
184
|
+
private onRowContextMenu(message: SDK.NetworkRequest.EventSourceMessage, event: MouseEvent): void {
|
|
185
|
+
const contextMenu = new UI.ContextMenu.ContextMenu(event);
|
|
179
186
|
contextMenu.clipboardSection().appendItem(
|
|
180
187
|
i18nString(UIStrings.copyMessage),
|
|
181
188
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText.bind(
|
|
182
|
-
Host.InspectorFrontendHost.InspectorFrontendHostInstance,
|
|
189
|
+
Host.InspectorFrontendHost.InspectorFrontendHostInstance, message.data),
|
|
183
190
|
{jslogContext: 'copy'});
|
|
191
|
+
void contextMenu.show();
|
|
184
192
|
}
|
|
185
193
|
|
|
186
|
-
|
|
187
|
-
this.dataGrid.rootNode().removeChildren();
|
|
188
|
-
|
|
194
|
+
override performUpdate(): void {
|
|
189
195
|
let messages = this.request.eventSourceMessages();
|
|
190
196
|
const offset = clearMessageOffsets.get(this.request) || 0;
|
|
191
197
|
messages = messages.slice(offset);
|
|
192
198
|
messages = messages.filter(this.messageFilter.bind(this));
|
|
193
|
-
messages.forEach(message => this.dataGrid.insertChild(new EventSourceMessageNode(message)));
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
199
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
UI.Tooltip.Tooltip.install(timeNode, time.toLocaleString());
|
|
207
|
-
super({id: message.eventId, type: message.eventName, data: message.data, time: timeNode});
|
|
208
|
-
this.message = message;
|
|
200
|
+
const input: ViewInput = {
|
|
201
|
+
messages,
|
|
202
|
+
filterSetting: this.messageFilterSetting,
|
|
203
|
+
onClear: this.clearMessages.bind(this),
|
|
204
|
+
onFilterChanged: this.onFilterChanged.bind(this),
|
|
205
|
+
onRowContextMenu: this.onRowContextMenu.bind(this),
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
this.#view(input, {}, this.contentElement);
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
|
|
212
|
-
function
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const aValue = fieldGetter(a.message);
|
|
216
|
-
const bValue = fieldGetter(b.message);
|
|
217
|
-
return aValue < bValue ? -1 : aValue > bValue ? 1 : 0;
|
|
212
|
+
function formatTime(d: Date): string {
|
|
213
|
+
return ('0' + d.getHours()).substr(-2) + ':' + ('0' + d.getMinutes()).substr(-2) + ':' +
|
|
214
|
+
('0' + d.getSeconds()).substr(-2) + '.' + ('00' + d.getMilliseconds()).substr(-3);
|
|
218
215
|
}
|
|
219
216
|
|
|
220
|
-
export const Comparators: Record<string, (arg0: EventSourceMessageNode, arg1: EventSourceMessageNode) => number> = {
|
|
221
|
-
id: eventSourceMessageNodeComparator.bind(null, message => message.eventId),
|
|
222
|
-
type: eventSourceMessageNodeComparator.bind(null, message => message.eventName),
|
|
223
|
-
time: eventSourceMessageNodeComparator.bind(null, message => message.time),
|
|
224
|
-
};
|
|
225
|
-
|
|
226
217
|
const clearMessageOffsets = new WeakMap<SDK.NetworkRequest.NetworkRequest, number>();
|
|
@@ -137,7 +137,7 @@ export class NetworkWaterfallColumn extends UI.Widget.VBox {
|
|
|
137
137
|
NetworkTimeCalculator.RequestTimeRangeNames.SERVICE_WORKER,
|
|
138
138
|
{fillStyle: RequestTimeRangeNameToColor[NetworkTimeCalculator.RequestTimeRangeNames.SERVICE_WORKER]});
|
|
139
139
|
styleMap.set(NetworkTimeCalculator.RequestTimeRangeNames.SERVICE_WORKER_PREPARATION, {
|
|
140
|
-
fillStyle: RequestTimeRangeNameToColor[NetworkTimeCalculator.RequestTimeRangeNames.SERVICE_WORKER_PREPARATION]
|
|
140
|
+
fillStyle: RequestTimeRangeNameToColor[NetworkTimeCalculator.RequestTimeRangeNames.SERVICE_WORKER_PREPARATION],
|
|
141
141
|
});
|
|
142
142
|
styleMap.set(NetworkTimeCalculator.RequestTimeRangeNames.SERVICE_WORKER_RESPOND_WITH, {
|
|
143
143
|
fillStyle: RequestTimeRangeNameToColor[NetworkTimeCalculator.RequestTimeRangeNames.SERVICE_WORKER_RESPOND_WITH],
|
|
@@ -199,7 +199,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
199
199
|
onCancel: input.onCancel,
|
|
200
200
|
onBeginEdit: input.onBeginEdit,
|
|
201
201
|
validator: val => input.validator(condition, val),
|
|
202
|
-
lookUpRequestCount: input.lookUpRequestCount
|
|
202
|
+
lookUpRequestCount: input.lookUpRequestCount,
|
|
203
203
|
})}
|
|
204
204
|
</div>
|
|
205
205
|
`)}
|
|
@@ -223,7 +223,7 @@ function renderItem({
|
|
|
223
223
|
onCancel,
|
|
224
224
|
onBeginEdit,
|
|
225
225
|
validator,
|
|
226
|
-
lookUpRequestCount
|
|
226
|
+
lookUpRequestCount,
|
|
227
227
|
}: {
|
|
228
228
|
condition: SDK.NetworkManager.RequestCondition,
|
|
229
229
|
editing: boolean,
|
|
@@ -115,13 +115,13 @@ export const DEFAULT_VIEW: ViewFunction = (input, _output, target) => {
|
|
|
115
115
|
${input.requestCookies.cookies.length > 0 ? html`
|
|
116
116
|
<devtools-widget ${widget(CookieTable.CookiesTable.CookiesTable, {
|
|
117
117
|
cookiesData: input.requestCookies,
|
|
118
|
-
inline: true
|
|
118
|
+
inline: true,
|
|
119
119
|
})} class="cookie-table cookies-panel-item"></devtools-widget>
|
|
120
120
|
` : Lit.nothing}
|
|
121
121
|
|
|
122
122
|
<div class="cookies-panel-item site-has-cookies-in-other-partition ${input.siteHasCookieInOtherPartition ? '' : 'hidden'}">
|
|
123
123
|
${uiI18n.getFormatLocalizedStringTemplate(str_, UIStrings.siteHasCookieInOtherPartition, {
|
|
124
|
-
PH1: html`<devtools-link href="https://developer.chrome.com/en/docs/privacy-sandbox/chips/" .jslogContext=${'learn-more'}>${i18nString(UIStrings.learnMore)}</devtools-link
|
|
124
|
+
PH1: html`<devtools-link href="https://developer.chrome.com/en/docs/privacy-sandbox/chips/" .jslogContext=${'learn-more'}>${i18nString(UIStrings.learnMore)}</devtools-link>`,
|
|
125
125
|
})}
|
|
126
126
|
</div>
|
|
127
127
|
|
|
@@ -193,7 +193,7 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
|
193
193
|
toReveal: input.toReveal,
|
|
194
194
|
} as NetworkComponents.ResponseHeaderSection
|
|
195
195
|
.ResponseHeaderSectionData}></devtools-early-hints-header-section>
|
|
196
|
-
|
|
196
|
+
`,
|
|
197
197
|
})}
|
|
198
198
|
${renderCategory({
|
|
199
199
|
name: 'response-headers',
|
|
@@ -212,7 +212,7 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
|
212
212
|
toReveal: input.toReveal,
|
|
213
213
|
} as NetworkComponents.ResponseHeaderSection.ResponseHeaderSectionData} jslog=${
|
|
214
214
|
VisualLogging.section('response-headers')}></devtools-response-header-section>
|
|
215
|
-
|
|
215
|
+
`,
|
|
216
216
|
})}
|
|
217
217
|
${renderCategory({
|
|
218
218
|
name: 'request-headers',
|
|
@@ -228,11 +228,11 @@ export const DEFAULT_VIEW: View = (input, _output, target) => {
|
|
|
228
228
|
<devtools-widget ${widget(NetworkComponents.RequestHeaderSection.RequestHeaderSection, {
|
|
229
229
|
request: input.request,
|
|
230
230
|
toReveal: input.toReveal,
|
|
231
|
-
})} jslog=${VisualLogging.section('request-headers')}></devtools-widget
|
|
231
|
+
})} jslog=${VisualLogging.section('request-headers')}></devtools-widget>`,
|
|
232
232
|
})}
|
|
233
233
|
`,
|
|
234
|
-
|
|
235
|
-
|
|
234
|
+
// clang-format on
|
|
235
|
+
target, {container: {attributes: {jslog: `${VisualLogging.pane('headers').track({resize: true})}`}}});
|
|
236
236
|
};
|
|
237
237
|
|
|
238
238
|
/**
|
|
@@ -167,7 +167,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
167
167
|
@contextmenu=${copyValueContextmenu(
|
|
168
168
|
i18nString(UIStrings.copyValue),
|
|
169
169
|
() => decodeURIComponent(param.value),
|
|
170
|
-
'copy-value'
|
|
170
|
+
'copy-value',
|
|
171
171
|
)}>
|
|
172
172
|
${param.name !== '' ? html`
|
|
173
173
|
${RequestPayloadView.formatParameter(param.name, 'payload-name', decodeParameters)}
|
|
@@ -175,7 +175,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
175
175
|
` : RequestPayloadView.formatParameter(
|
|
176
176
|
i18nString(UIStrings.empty),
|
|
177
177
|
'empty-request-payload',
|
|
178
|
-
decodeParameters
|
|
178
|
+
decodeParameters,
|
|
179
179
|
)}
|
|
180
180
|
</li>
|
|
181
181
|
`;
|
|
@@ -255,7 +255,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
255
255
|
{
|
|
256
256
|
decode: input.decodeQueryParameters,
|
|
257
257
|
toggleDecode: () => input.setDecodeQueryParameters(!input.decodeQueryParameters),
|
|
258
|
-
}
|
|
258
|
+
},
|
|
259
259
|
)}
|
|
260
260
|
@expanded=${(e: UI.TreeOutline.TreeViewElement.ExpandEvent) =>
|
|
261
261
|
queryStringExpandedSetting.set(e.detail.expanded)}
|
|
@@ -287,7 +287,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
287
287
|
{
|
|
288
288
|
decode: input.decodeFormParameters,
|
|
289
289
|
toggleDecode: () => input.setDecodeFormParameters(!input.decodeFormParameters),
|
|
290
|
-
}
|
|
290
|
+
},
|
|
291
291
|
)}
|
|
292
292
|
@expanded=${(e: UI.TreeOutline.TreeViewElement.ExpandEvent) => formDataExpandedSetting.set(e.detail.expanded)}
|
|
293
293
|
?open=${formDataExpandedSetting.get()}
|
|
@@ -457,7 +457,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
457
457
|
|
|
458
458
|
const throttledRequestTitle = input.wasThrottled ? i18nString(UIStrings.wasThrottled, {
|
|
459
459
|
PH1: typeof input.wasThrottled.conditions.title === 'string' ? input.wasThrottled.conditions.title :
|
|
460
|
-
input.wasThrottled.conditions.title()
|
|
460
|
+
input.wasThrottled.conditions.title(),
|
|
461
461
|
}) :
|
|
462
462
|
undefined;
|
|
463
463
|
|
|
@@ -486,7 +486,7 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
486
486
|
<table
|
|
487
487
|
class=${classes}
|
|
488
488
|
jslog=${VisualLogging.pane('timing').track({
|
|
489
|
-
resize: true
|
|
489
|
+
resize: true,
|
|
490
490
|
})}>
|
|
491
491
|
<colgroup>
|
|
492
492
|
<col class=labels>
|
|
@@ -290,7 +290,7 @@ export class DirectSocketConnectionView extends UI.Widget.Widget<ShadowRoot> {
|
|
|
290
290
|
},
|
|
291
291
|
onCopyRow: () => {
|
|
292
292
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue);
|
|
293
|
-
}
|
|
293
|
+
},
|
|
294
294
|
};
|
|
295
295
|
this.#view(viewInput, undefined, this.contentElement);
|
|
296
296
|
}
|
|
@@ -4,7 +4,16 @@
|
|
|
4
4
|
* found in the LICENSE file.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
@scope to (devtools-widget > *) {
|
|
8
|
+
.event-source-messages-view {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
height: 100%;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.event-source-messages-view devtools-data-grid {
|
|
16
|
+
flex: auto;
|
|
17
|
+
border: none;
|
|
18
|
+
}
|
|
10
19
|
}
|
|
@@ -78,7 +78,7 @@ table.network-timing-table > tr:not(.network-timing-table-header, .network-timin
|
|
|
78
78
|
.network-timing-bar {
|
|
79
79
|
position: absolute;
|
|
80
80
|
min-width: 1px;
|
|
81
|
-
inset: 0 attr(data-right %) 0 attr(data-left %);
|
|
81
|
+
inset: 0 attr(data-right %) 0 attr(data-left %);
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
.network-timing-bar-title {
|
|
@@ -218,7 +218,7 @@ td.throttled {
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
.network-timing-bar.server-timing {
|
|
221
|
-
background-color: attr(data-background type(<color>), var(--sys-color-neutral-container));
|
|
221
|
+
background-color: attr(data-background type(<color>), var(--sys-color-neutral-container));
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
tr.synthetic {
|
|
@@ -84,7 +84,7 @@ const DEFAULT_VIEW: PerformanceMonitorView = (input, output, target) => {
|
|
|
84
84
|
<devtools-widget ${widget(ControlPane, {
|
|
85
85
|
onMetricChanged: input.onMetricChanged,
|
|
86
86
|
chartsInfo: input.chartsInfo,
|
|
87
|
-
metrics: input.metrics
|
|
87
|
+
metrics: input.metrics,
|
|
88
88
|
})} class=${classMap({suspended: input.suspended})}></devtools-widget>
|
|
89
89
|
<div class="perfmon-chart-container ${classMap({suspended: input.suspended})}">
|
|
90
90
|
<canvas tabindex="-1" aria-label=${i18nString(UIStrings.graphsDisplayingARealtimeViewOf)}
|
|
@@ -36,7 +36,7 @@ import * as Platform from '../../core/platform/platform.js';
|
|
|
36
36
|
import type * as CPUProfile from '../../models/cpu_profile/cpu_profile.js';
|
|
37
37
|
import type * as UI from '../../ui/legacy/legacy.js';
|
|
38
38
|
|
|
39
|
-
import {type Formatter,
|
|
39
|
+
import {type Formatter, ProfileDataGridTree, ProfileEntry} from './ProfileDataGrid.js';
|
|
40
40
|
import type {TopDownProfileDataGridTree} from './TopDownProfileDataGrid.js';
|
|
41
41
|
|
|
42
42
|
export interface NodeInfo {
|
|
@@ -45,7 +45,7 @@ export interface NodeInfo {
|
|
|
45
45
|
totalAccountedFor: boolean;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
export class
|
|
48
|
+
export class BottomUpProfileEntry extends ProfileEntry {
|
|
49
49
|
remainingNodeInfos: NodeInfo[]|undefined;
|
|
50
50
|
|
|
51
51
|
constructor(profileNode: CPUProfile.ProfileTreeModel.ProfileNode, owningTree: TopDownProfileDataGridTree) {
|
|
@@ -53,7 +53,7 @@ export class BottomUpProfileDataGridNode extends ProfileDataGridNode {
|
|
|
53
53
|
this.remainingNodeInfos = [];
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
static sharedPopulate(container:
|
|
56
|
+
static sharedPopulate(container: BottomUpProfileEntry|BottomUpProfileDataGridTree): void {
|
|
57
57
|
if (container.remainingNodeInfos === undefined) {
|
|
58
58
|
return;
|
|
59
59
|
}
|
|
@@ -64,8 +64,7 @@ export class BottomUpProfileDataGridNode extends ProfileDataGridNode {
|
|
|
64
64
|
const nodeInfo = remainingNodeInfos[index];
|
|
65
65
|
const ancestor = nodeInfo.ancestor;
|
|
66
66
|
const focusNode = nodeInfo.focusNode;
|
|
67
|
-
let child:
|
|
68
|
-
(container.findChild(ancestor) as BottomUpProfileDataGridNode | null);
|
|
67
|
+
let child: BottomUpProfileEntry|null = (container.findChild(ancestor) as BottomUpProfileEntry | null);
|
|
69
68
|
|
|
70
69
|
// If we already have this child, then merge the data together.
|
|
71
70
|
if (child) {
|
|
@@ -77,7 +76,7 @@ export class BottomUpProfileDataGridNode extends ProfileDataGridNode {
|
|
|
77
76
|
child.total += focusNode.total;
|
|
78
77
|
}
|
|
79
78
|
} else {
|
|
80
|
-
child = new
|
|
79
|
+
child = new BottomUpProfileEntry(ancestor, (container.tree as TopDownProfileDataGridTree));
|
|
81
80
|
|
|
82
81
|
if (ancestor !== focusNode) {
|
|
83
82
|
// But the actual statistics from the "root" node (bottom of the callstack).
|
|
@@ -101,16 +100,16 @@ export class BottomUpProfileDataGridNode extends ProfileDataGridNode {
|
|
|
101
100
|
delete container.remainingNodeInfos;
|
|
102
101
|
}
|
|
103
102
|
|
|
104
|
-
|
|
103
|
+
takePropertiesFromProfileEntry(profileEntry: ProfileEntry): void {
|
|
105
104
|
this.save();
|
|
106
|
-
this.self =
|
|
107
|
-
this.total =
|
|
105
|
+
this.self = profileEntry.self;
|
|
106
|
+
this.total = profileEntry.total;
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
/**
|
|
111
110
|
* When focusing, we keep just the members of the callstack.
|
|
112
111
|
*/
|
|
113
|
-
keepOnlyChild(child:
|
|
112
|
+
keepOnlyChild(child: ProfileEntry): void {
|
|
114
113
|
this.save();
|
|
115
114
|
|
|
116
115
|
this.removeChildren();
|
|
@@ -128,7 +127,7 @@ export class BottomUpProfileDataGridNode extends ProfileDataGridNode {
|
|
|
128
127
|
let index = this.children.length;
|
|
129
128
|
|
|
130
129
|
while (index--) {
|
|
131
|
-
(children[index] as
|
|
130
|
+
(children[index] as BottomUpProfileEntry).exclude(aCallUID);
|
|
132
131
|
}
|
|
133
132
|
|
|
134
133
|
const child = this.childrenByCallUID.get(aCallUID);
|
|
@@ -146,13 +145,13 @@ export class BottomUpProfileDataGridNode extends ProfileDataGridNode {
|
|
|
146
145
|
}
|
|
147
146
|
}
|
|
148
147
|
|
|
149
|
-
override merge(child:
|
|
148
|
+
override merge(child: ProfileEntry, shouldAbsorb: boolean): void {
|
|
150
149
|
this.self -= child.self;
|
|
151
150
|
super.merge(child, shouldAbsorb);
|
|
152
151
|
}
|
|
153
152
|
|
|
154
153
|
override populateChildren(): void {
|
|
155
|
-
|
|
154
|
+
BottomUpProfileEntry.sharedPopulate(this);
|
|
156
155
|
}
|
|
157
156
|
|
|
158
157
|
willHaveChildren(profileNode: CPUProfile.ProfileTreeModel.ProfileNode): boolean {
|
|
@@ -231,7 +230,7 @@ export class BottomUpProfileDataGridTree extends ProfileDataGridTree {
|
|
|
231
230
|
}
|
|
232
231
|
|
|
233
232
|
// Populate the top level nodes.
|
|
234
|
-
|
|
233
|
+
ProfileEntry.populate(this);
|
|
235
234
|
|
|
236
235
|
return this;
|
|
237
236
|
}
|
|
@@ -239,32 +238,33 @@ export class BottomUpProfileDataGridTree extends ProfileDataGridTree {
|
|
|
239
238
|
/**
|
|
240
239
|
* When focusing, we keep the entire callstack up to this ancestor.
|
|
241
240
|
*/
|
|
242
|
-
override focus(profileDataGridNode:
|
|
241
|
+
override focus(profileDataGridNode: ProfileEntry): void {
|
|
243
242
|
if (!profileDataGridNode) {
|
|
244
243
|
return;
|
|
245
244
|
}
|
|
246
245
|
|
|
247
246
|
this.save();
|
|
248
247
|
|
|
249
|
-
let currentNode:
|
|
250
|
-
let focusNode: (
|
|
248
|
+
let currentNode: ProfileEntry = profileDataGridNode;
|
|
249
|
+
let focusNode: (ProfileEntry&BottomUpProfileEntry)|ProfileEntry = profileDataGridNode;
|
|
251
250
|
|
|
252
|
-
while (currentNode
|
|
253
|
-
currentNode.
|
|
251
|
+
while (currentNode instanceof BottomUpProfileEntry && currentNode.parent) {
|
|
252
|
+
currentNode.takePropertiesFromProfileEntry(profileDataGridNode);
|
|
254
253
|
|
|
255
254
|
focusNode = currentNode;
|
|
256
|
-
currentNode = (currentNode.parent as
|
|
255
|
+
currentNode = (currentNode.parent as ProfileEntry);
|
|
257
256
|
|
|
258
|
-
if (currentNode instanceof
|
|
257
|
+
if (currentNode instanceof BottomUpProfileEntry) {
|
|
259
258
|
currentNode.keepOnlyChild(focusNode);
|
|
260
259
|
}
|
|
261
260
|
}
|
|
262
261
|
|
|
263
|
-
this.
|
|
262
|
+
this.removeChildren();
|
|
263
|
+
this.appendChild(focusNode);
|
|
264
264
|
this.total = profileDataGridNode.total;
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
-
override exclude(profileDataGridNode:
|
|
267
|
+
override exclude(profileDataGridNode: ProfileEntry): void {
|
|
268
268
|
if (!profileDataGridNode) {
|
|
269
269
|
return;
|
|
270
270
|
}
|
|
@@ -284,15 +284,11 @@ export class BottomUpProfileDataGridTree extends ProfileDataGridTree {
|
|
|
284
284
|
const count = children.length;
|
|
285
285
|
|
|
286
286
|
for (let index = 0; index < count; ++index) {
|
|
287
|
-
(children[index] as
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
if (this.lastComparator) {
|
|
291
|
-
this.sort(this.lastComparator, true);
|
|
287
|
+
(children[index] as BottomUpProfileEntry).exclude(excludedCallUID);
|
|
292
288
|
}
|
|
293
289
|
}
|
|
294
290
|
|
|
295
291
|
override populateChildren(): void {
|
|
296
|
-
|
|
292
|
+
BottomUpProfileEntry.sharedPopulate(this);
|
|
297
293
|
}
|
|
298
294
|
}
|