chrome-devtools-frontend 1.0.1675430 → 1.0.1678416
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/AUTHORS +1 -0
- package/WATCHLISTS +0 -4
- package/front_end/core/common/EventTarget.ts +0 -5
- package/front_end/core/common/Settings.ts +0 -66
- package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
- package/front_end/core/host/UserMetrics.ts +5 -0
- package/front_end/core/root/Runtime.ts +5 -5
- package/front_end/core/sdk/CSSMetadata.ts +5 -9
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +16 -34
- package/front_end/core/sdk/DebuggerModel.ts +92 -57
- package/front_end/core/sdk/EmulationModel.ts +2 -1
- package/front_end/core/sdk/NetworkManager.ts +16 -2
- package/front_end/core/sdk/OverlayModel.ts +19 -9
- package/front_end/core/sdk/OverlayPersistentHighlighter.ts +10 -4
- package/front_end/core/sdk/ResourceTreeModel.ts +20 -1
- package/front_end/core/sdk/SDKSettings.ts +117 -0
- package/front_end/core/sdk/Script.ts +9 -53
- package/front_end/core/sdk/sdk-meta.ts +0 -431
- package/front_end/devtools_compatibility.js +1 -0
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +213 -23
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +6 -5
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +14 -15
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +157 -0
- package/front_end/entrypoints/main/MainImpl.ts +32 -0
- package/front_end/entrypoints/shell/shell.ts +0 -1
- package/front_end/foundation/Universe.ts +8 -0
- package/front_end/generated/InspectorBackendCommands.ts +8 -8
- package/front_end/generated/SupportedCSSProperties.ts +53 -4
- package/front_end/generated/protocol-mapping.d.ts +27 -21
- package/front_end/generated/protocol-proxy-api.d.ts +22 -17
- package/front_end/generated/protocol.ts +43 -18
- package/front_end/models/ai_assistance/AiAgent2.ts +47 -2
- package/front_end/models/ai_assistance/AiConversation.ts +22 -5
- package/front_end/models/ai_assistance/README.md +52 -26
- package/front_end/models/ai_assistance/agents/AiAgent.ts +54 -8
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +7 -194
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +21 -87
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -1
- package/front_end/models/ai_assistance/ai_assistance.ts +24 -0
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +124 -0
- package/front_end/models/ai_assistance/contexts/StorageContext.ts +100 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +69 -1
- package/front_end/models/ai_assistance/skills/README.md +63 -1
- package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
- package/front_end/models/ai_assistance/skills/SkillRegistry.ts +4 -0
- package/front_end/models/ai_assistance/skills/accessibility.md +7 -0
- package/front_end/models/ai_assistance/skills/performance.md +15 -1
- package/front_end/models/ai_assistance/skills/sources.md +16 -0
- package/front_end/models/ai_assistance/skills/storage.md +31 -0
- package/front_end/models/ai_assistance/tools/GetDetailedCallTree.ts +107 -0
- package/front_end/models/ai_assistance/tools/GetFunctionCode.ts +122 -0
- package/front_end/models/ai_assistance/tools/GetResourceContent.ts +127 -0
- package/front_end/models/ai_assistance/tools/GetSourceContent.ts +101 -0
- package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +83 -0
- package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +106 -0
- package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +104 -0
- package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +95 -0
- package/front_end/models/ai_assistance/tools/ListSources.ts +116 -0
- package/front_end/models/ai_assistance/tools/RunLighthouse.ts +89 -0
- package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +90 -0
- package/front_end/models/ai_assistance/tools/Tool.ts +26 -1
- package/front_end/models/ai_assistance/tools/ToolRegistry.ts +22 -0
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -0
- package/front_end/models/bindings/CompilerScriptMapping.ts +4 -0
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
- package/front_end/models/bindings/ResourceScriptMapping.ts +3 -201
- package/front_end/models/bindings/SASSSourceMapping.ts +6 -0
- package/front_end/models/breakpoints/BreakpointManager.ts +2 -49
- package/front_end/models/comment_manager/CommentManager.ts +141 -0
- package/front_end/models/comment_manager/comment_manager.ts +9 -0
- package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +27 -0
- package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +10 -2
- package/front_end/models/issues_manager/descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
- package/front_end/models/issues_manager/descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
- package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +6 -6
- package/front_end/models/persistence/IsolatedFileSystem.ts +7 -8
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -2
- package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
- package/front_end/models/persistence/persistence-meta.ts +9 -9
- package/front_end/models/trace/types/TraceEvents.ts +36 -0
- package/front_end/panels/accessibility/ARIAAttributesView.ts +3 -3
- package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +25 -0
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +36 -36
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +9 -0
- package/front_end/panels/accessibility/AccessibilityStrings.ts +168 -168
- package/front_end/panels/accessibility/SourceOrderView.ts +7 -7
- package/front_end/panels/accessibility/accessibility-meta.ts +2 -2
- package/front_end/panels/accessibility/accessibility.ts +2 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +5 -5
- package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +2 -3
- package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +92 -12
- package/front_end/panels/ai_assistance/components/chatMessage.css +6 -0
- package/front_end/panels/application/ApplicationPanelSidebar.ts +10 -4
- package/front_end/panels/application/IndexedDBViews.ts +65 -63
- package/front_end/panels/application/StorageView.ts +116 -45
- package/front_end/panels/application/WebMCPView.ts +16 -7
- package/front_end/panels/application/application-meta.ts +11 -0
- package/front_end/panels/application/components/AdsView.ts +1 -1
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +5 -5
- package/front_end/panels/common/BadgeNotification.ts +8 -8
- package/front_end/panels/common/ExtensionPanel.ts +9 -8
- package/front_end/panels/common/ExtensionServer.ts +21 -1
- package/front_end/panels/common/GdpSignUpDialog.ts +16 -16
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +5 -6
- package/front_end/panels/common/PersistenceUtils.ts +2 -2
- package/front_end/panels/common/common.ts +0 -97
- package/front_end/panels/console/ConsoleInsightTeaser.ts +2 -2
- package/front_end/panels/console/ConsolePanel.ts +4 -0
- package/front_end/panels/console/ConsolePinPane.ts +2 -2
- package/front_end/panels/console/ConsolePrompt.ts +12 -0
- package/front_end/panels/console/ConsoleView.ts +31 -20
- package/front_end/panels/console/ConsoleViewMessage.ts +37 -13
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewModel.ts +1 -1
- package/front_end/panels/elements/ElementStatePaneWidget.ts +2 -1
- package/front_end/panels/elements/ElementsTreeElement.ts +455 -372
- package/front_end/panels/elements/LayoutPane.ts +2 -8
- package/front_end/panels/elements/StylePropertyTreeElement.ts +16 -15
- package/front_end/panels/elements/elements-meta.ts +152 -10
- package/front_end/panels/elements/elements.ts +0 -2
- package/front_end/panels/emulation/DeviceModeView.ts +9 -1
- package/front_end/panels/event_listeners/EventListenersView.ts +8 -4
- package/front_end/panels/issues/AffectedTrackingSitesView.ts +25 -14
- package/front_end/panels/lighthouse/LighthouseController.ts +3 -2
- package/front_end/panels/media/PlayerMessagesView.ts +149 -68
- package/front_end/panels/network/BinaryResourceView.ts +134 -81
- package/front_end/panels/network/EventSourceMessagesView.ts +10 -10
- package/front_end/panels/network/FetchHeaderCommenting.ts +291 -0
- package/front_end/panels/network/NetworkConfigView.ts +10 -10
- package/front_end/panels/network/NetworkDataGridNode.ts +14 -14
- package/front_end/panels/network/NetworkItemView.ts +27 -28
- package/front_end/panels/network/NetworkLogView.ts +137 -38
- package/front_end/panels/network/NetworkLogViewColumns.ts +35 -35
- package/front_end/panels/network/NetworkManageCustomHeadersView.ts +1 -1
- package/front_end/panels/network/NetworkPanel.ts +2 -2
- package/front_end/panels/network/RequestConditionsDrawer.ts +5 -5
- package/front_end/panels/network/RequestCookiesView.ts +4 -4
- package/front_end/panels/network/RequestHeadersView.ts +5 -5
- package/front_end/panels/network/RequestPayloadView.ts +4 -3
- package/front_end/panels/network/RequestTimingView.ts +8 -8
- package/front_end/panels/network/ResourceChunkView.ts +1 -1
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +1 -1
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +16 -16
- package/front_end/panels/network/binaryResourceView.css +14 -12
- package/front_end/panels/network/components/DirectSocketConnectionView.ts +2 -2
- package/front_end/panels/network/components/HeaderSectionRow.ts +1 -1
- package/front_end/panels/network/components/RequestTrustTokensView.ts +2 -2
- package/front_end/panels/network/network-meta.ts +1 -1
- package/front_end/panels/network/network.ts +2 -0
- package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +0 -1
- package/front_end/panels/profiler/HeapSnapshotView.ts +0 -2
- package/front_end/panels/profiler/heapProfiler.css +0 -9
- package/front_end/panels/recorder/RecorderPanel.ts +2 -3
- package/front_end/panels/screencast/ScreencastView.ts +148 -138
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +2 -2
- package/front_end/panels/sources/BreakpointsView.ts +2 -2
- package/front_end/panels/sources/DebuggerPlugin.ts +10 -59
- package/front_end/panels/sources/NavigatorView.ts +2 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +1 -1
- package/front_end/panels/sources/SourcesPanel.ts +23 -73
- package/front_end/panels/sources/SourcesView.ts +248 -157
- package/front_end/panels/sources/TabbedEditorContainer.ts +118 -23
- package/front_end/panels/sources/UISourceCodeFrame.ts +5 -9
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +4 -2
- package/front_end/panels/sources/sources-meta.ts +52 -0
- package/front_end/panels/timeline/TimelineController.ts +36 -64
- package/front_end/panels/timeline/TimelinePanel.ts +11 -8
- package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
- package/front_end/panels/timeline/timelinePanel.css +0 -10
- package/front_end/panels/utils/utils.ts +7 -7
- package/front_end/services/tracing/PerformanceTracing.ts +5 -17
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
- package/front_end/third_party/codemirror.next/package.json +2 -2
- package/front_end/third_party/codemirror.next/rebuild.sh +4 -1
- package/front_end/ui/comments/CommentAnchorResolver.ts +430 -35
- package/front_end/ui/comments/CommentOverlayManager.ts +635 -0
- package/front_end/ui/comments/CommentsOverlayWidget.ts +134 -0
- package/front_end/ui/comments/comments.ts +4 -0
- package/front_end/ui/comments/commentsOverlay.css +49 -0
- package/front_end/{panels/common → ui/components/dialogs}/FreDialog.ts +6 -6
- package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +96 -0
- package/front_end/ui/components/dialogs/dialogs.ts +4 -0
- package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionDisclaimer.ts +13 -13
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +7 -6
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionTeaser.ts +43 -46
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +22 -26
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationTeaser.ts +10 -10
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationUpgradeDialog.ts +5 -5
- package/front_end/ui/components/text_editor/text_editor.ts +4 -0
- package/front_end/ui/legacy/Toolbar.ts +1 -1
- package/front_end/ui/legacy/UIUtils.ts +0 -56
- package/front_end/ui/legacy/View.ts +10 -4
- package/front_end/ui/legacy/Widget.ts +10 -1
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +2 -1
- package/front_end/ui/legacy/components/color_picker/ContrastOverlay.ts +5 -4
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +11 -3
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +507 -209
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +5 -0
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -16
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +5 -12
- package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +38 -20
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +12 -2
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +37 -6
- package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +22 -4
- package/front_end/ui/settings/SettingUIRegistration.ts +55 -6
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/mcp/mcp.ts +6 -1
- package/package.json +6 -6
- package/front_end/Images/toolbarResizerVertical.png +0 -0
- package/front_end/emulated_devices/MotoG4-landscape.svg +0 -155
- package/front_end/emulated_devices/MotoG4-portrait.svg +0 -155
- package/front_end/emulated_devices/Nexus5X-landscape.svg +0 -19
- package/front_end/emulated_devices/Nexus5X-portrait.svg +0 -19
- package/front_end/emulated_devices/Nexus6P-landscape.svg +0 -50
- package/front_end/emulated_devices/Nexus6P-portrait.svg +0 -54
- package/front_end/emulated_devices/google-nest-hub-horizontal.png +0 -0
- package/front_end/emulated_devices/google-nest-hub-max-horizontal.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-2x.png +0 -0
- package/front_end/emulated_devices/iPad-landscape.svg +0 -73
- package/front_end/emulated_devices/iPad-portrait.svg +0 -76
- package/front_end/emulated_devices/iPhone5-landscape.svg +0 -99
- package/front_end/emulated_devices/iPhone5-portrait.svg +0 -83
- package/front_end/emulated_devices/iPhone6-landscape.svg +0 -111
- package/front_end/emulated_devices/iPhone6-portrait.svg +0 -116
- package/front_end/emulated_devices/iPhone6Plus-landscape.svg +0 -118
- package/front_end/emulated_devices/iPhone6Plus-portrait.svg +0 -116
- package/front_end/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/README.md +0 -9
- package/front_end/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/iPad-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPad-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/optimized_images.gni +0 -53
- package/front_end/models/ai_assistance/agents/README.md +0 -136
- package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +0 -89
- package/front_end/ui/legacy/components/object_ui/object_ui-meta.ts +0 -27
- /package/front_end/{panels/common → ui/components/dialogs}/freDialog.css +0 -0
- /package/front_end/{panels/common/common.css → ui/components/dialogs/typeToAllowDialog.css} +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionDisclaimer.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionTeaser.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationTeaser.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationUpgradeDialog.css +0 -0
|
@@ -14,21 +14,21 @@ import {AccessibilitySubPane} from './AccessibilitySubPane.js';
|
|
|
14
14
|
|
|
15
15
|
const UIStrings = {
|
|
16
16
|
/**
|
|
17
|
-
* @description Name of a
|
|
18
|
-
* 'source order' (the order in which the HTML elements show up in the source code)
|
|
19
|
-
* Accessibility panel.
|
|
17
|
+
* @description Name of a feature that allows the developer to view the contents of the page in the
|
|
18
|
+
* 'source order' (the order in which the HTML elements show up in the source code) under the
|
|
19
|
+
* Accessibility tab in the Elements panel.
|
|
20
20
|
*/
|
|
21
|
-
sourceOrderViewer: 'Source
|
|
21
|
+
sourceOrderViewer: 'Source order viewer',
|
|
22
22
|
/**
|
|
23
|
-
* @description Text in
|
|
23
|
+
* @description Text in the source order viewer under the Accessibility tab of the Elements panel shown when the selected node has no child elements.
|
|
24
24
|
*/
|
|
25
25
|
noSourceOrderInformation: 'No source order information available',
|
|
26
26
|
/**
|
|
27
|
-
* @description Text in
|
|
27
|
+
* @description Text in the source order viewer under the Accessibility tab of the Elements panel shown when the selected node has many child elements.
|
|
28
28
|
*/
|
|
29
29
|
thereMayBeADelayInDisplaying: 'There may be a delay in displaying source order for elements with many children',
|
|
30
30
|
/**
|
|
31
|
-
* @description Checkbox label in
|
|
31
|
+
* @description Checkbox label in the source order viewer under the Accessibility tab of the Elements panel. Source order
|
|
32
32
|
* means the order in which the HTML elements show up in the source code.
|
|
33
33
|
*/
|
|
34
34
|
showSourceOrder: 'Show source order',
|
|
@@ -11,11 +11,11 @@ let loadedAccessibilityModule: (typeof Accessibility|undefined);
|
|
|
11
11
|
|
|
12
12
|
const UIStrings = {
|
|
13
13
|
/**
|
|
14
|
-
* @description
|
|
14
|
+
* @description Title of the Accessibility tab in the Elements panel.
|
|
15
15
|
*/
|
|
16
16
|
accessibility: 'Accessibility',
|
|
17
17
|
/**
|
|
18
|
-
* @description Command for showing the
|
|
18
|
+
* @description Command for showing the Accessibility tab in the Elements panel.
|
|
19
19
|
*/
|
|
20
20
|
shoAccessibility: 'Show Accessibility',
|
|
21
21
|
} as const;
|
|
@@ -2,6 +2,7 @@
|
|
|
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 * as AccessibilityAnnouncementRecordingView from './AccessibilityAnnouncementRecordingView.js';
|
|
5
6
|
import * as AccessibilityNodeView from './AccessibilityNodeView.js';
|
|
6
7
|
import * as AccessibilitySidebarView from './AccessibilitySidebarView.js';
|
|
7
8
|
import * as AccessibilityStrings from './AccessibilityStrings.js';
|
|
@@ -10,6 +11,7 @@ import * as ARIAAttributesView from './ARIAAttributesView.js';
|
|
|
10
11
|
import * as ARIAMetadata from './ARIAMetadata.js';
|
|
11
12
|
|
|
12
13
|
export {
|
|
14
|
+
AccessibilityAnnouncementRecordingView,
|
|
13
15
|
AccessibilityNodeView,
|
|
14
16
|
AccessibilitySidebarView,
|
|
15
17
|
AccessibilityStrings,
|
|
@@ -543,12 +543,12 @@ function createPerformanceTraceContext(focus: AiAssistanceModel.AIContext.AgentF
|
|
|
543
543
|
return new AiAssistanceModel.PerformanceTraceContext.PerformanceTraceContext(focus);
|
|
544
544
|
}
|
|
545
545
|
|
|
546
|
-
function createStorageContext(item: AiAssistanceModel.StorageItem.StorageItem|
|
|
547
|
-
|
|
546
|
+
function createStorageContext(item: AiAssistanceModel.StorageItem.StorageItem|
|
|
547
|
+
null): AiAssistanceModel.StorageContext.StorageContext|null {
|
|
548
548
|
if (!item) {
|
|
549
549
|
return null;
|
|
550
550
|
}
|
|
551
|
-
return new AiAssistanceModel.
|
|
551
|
+
return new AiAssistanceModel.StorageContext.StorageContext(item);
|
|
552
552
|
}
|
|
553
553
|
|
|
554
554
|
/**
|
|
@@ -606,7 +606,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
606
606
|
#selectedRequest: AiAssistanceModel.RequestContext.RequestContext|null = null;
|
|
607
607
|
|
|
608
608
|
#selectedAccessibility: AiAssistanceModel.AccessibilityContext.AccessibilityContext|null = null;
|
|
609
|
-
#selectedStorage: AiAssistanceModel.
|
|
609
|
+
#selectedStorage: AiAssistanceModel.StorageContext.StorageContext|null = null;
|
|
610
610
|
|
|
611
611
|
// Messages displayed in the `ChatView` component.
|
|
612
612
|
|
|
@@ -1640,7 +1640,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1640
1640
|
|
|
1641
1641
|
} else if (data instanceof AiAssistanceModel.AccessibilityContext.AccessibilityContext) {
|
|
1642
1642
|
this.#selectedAccessibility = data;
|
|
1643
|
-
} else if (data instanceof AiAssistanceModel.
|
|
1643
|
+
} else if (data instanceof AiAssistanceModel.StorageContext.StorageContext) {
|
|
1644
1644
|
this.#selectedStorage = data;
|
|
1645
1645
|
}
|
|
1646
1646
|
|
|
@@ -110,9 +110,8 @@ export class AIv2MarkdownRenderer extends MarkdownView.MarkdownView.MarkdownInsi
|
|
|
110
110
|
return html`${fallbackText}`;
|
|
111
111
|
}
|
|
112
112
|
if (href.startsWith('#file-')) {
|
|
113
|
-
const file = AiAssistanceModel.
|
|
114
|
-
file => AiAssistanceModel.
|
|
115
|
-
Number(href.substring(6)));
|
|
113
|
+
const file = AiAssistanceModel.ListSources.ListSourcesTool.getUISourceCodes().find(
|
|
114
|
+
file => AiAssistanceModel.ListSources.ListSourcesTool.uiSourceCodeId.get(file) === Number(href.substring(6)));
|
|
116
115
|
|
|
117
116
|
if (file) {
|
|
118
117
|
return this.#revealableLink(file, file.name());
|
|
@@ -194,7 +194,7 @@ function getContextRemoveLabel(context: AiAssistanceModel.AiAgent.ConversationCo
|
|
|
194
194
|
if (context instanceof AiAssistanceModel.PerformanceTraceContext.PerformanceTraceContext) {
|
|
195
195
|
return lockedString(UIStringsNotTranslate.removeContextPerfInsight);
|
|
196
196
|
}
|
|
197
|
-
if (context instanceof AiAssistanceModel.
|
|
197
|
+
if (context instanceof AiAssistanceModel.StorageContext.StorageContext) {
|
|
198
198
|
return lockedString(UIStringsNotTranslate.removeContextStorage);
|
|
199
199
|
}
|
|
200
200
|
return lockedString(UIStringsNotTranslate.removeContext);
|
|
@@ -371,7 +371,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
371
371
|
html`<devtools-icon class="icon" name="performance" title="Lighthouse"></devtools-icon>` :
|
|
372
372
|
input.context instanceof AiAssistanceModel.PerformanceTraceContext.PerformanceTraceContext ?
|
|
373
373
|
html`<devtools-icon class="icon" name="performance" title="Performance"></devtools-icon>` :
|
|
374
|
-
input.context instanceof AiAssistanceModel.
|
|
374
|
+
input.context instanceof AiAssistanceModel.StorageContext.StorageContext ?
|
|
375
375
|
html`<devtools-icon class="icon" name="table" title="Storage"></devtools-icon>` :
|
|
376
376
|
Lit.nothing}
|
|
377
377
|
<span
|
|
@@ -15,8 +15,9 @@ import type * as Protocol from '../../../generated/protocol.js';
|
|
|
15
15
|
import type {
|
|
16
16
|
AiWidget, BottomUpTreeAiWidget, ComputedStyleAiWidget, CoreVitalsAiWidget, DomTreeAiWidget, LighthouseReportAiWidget,
|
|
17
17
|
NetworkRequestGeneralHeadersAiWidget, NetworkRequestsListAiWidget, NetworkTrackAiWidget, PerfInsightAiWidget,
|
|
18
|
-
PerformanceTraceAiWidget, SourceCodeAiWidget, SourceFileAiWidget, SourceFilesListAiWidget,
|
|
19
|
-
TimelineEventSummaryAiWidget,
|
|
18
|
+
PerformanceTraceAiWidget, SourceCodeAiWidget, SourceFileAiWidget, SourceFilesListAiWidget, StorageBreakdownAiWidget,
|
|
19
|
+
StylePropertiesAiWidget, TimelineEventSummaryAiWidget,
|
|
20
|
+
TimelineRangeSummaryAiWidget} from '../../../models/ai_assistance/agents/AiAgent.js';
|
|
20
21
|
import * as AiAssistanceModel from '../../../models/ai_assistance/ai_assistance.js';
|
|
21
22
|
import * as ComputedStyle from '../../../models/computed_style/computed_style.js';
|
|
22
23
|
import * as Formatter from '../../../models/formatter/formatter.js';
|
|
@@ -31,9 +32,11 @@ import type * as MarkdownView from '../../../ui/components/markdown_view/markdow
|
|
|
31
32
|
import type {MarkdownLitRenderer} from '../../../ui/components/markdown_view/MarkdownView.js';
|
|
32
33
|
import * as Snackbars from '../../../ui/components/snackbars/snackbars.js';
|
|
33
34
|
import * as UIHelpers from '../../../ui/helpers/helpers.js';
|
|
35
|
+
import type * as PerfUI from '../../../ui/legacy/components/perf_ui/perf_ui.js';
|
|
34
36
|
import * as UI from '../../../ui/legacy/legacy.js';
|
|
35
37
|
import * as Lit from '../../../ui/lit/lit.js';
|
|
36
38
|
import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
|
|
39
|
+
import * as Application from '../../application/application.js';
|
|
37
40
|
import * as Elements from '../../elements/elements.js';
|
|
38
41
|
import * as Lighthouse from '../../lighthouse/lighthouse.js';
|
|
39
42
|
import * as NetworkForward from '../../network/forward/forward.js';
|
|
@@ -421,6 +424,14 @@ const UIStringsNotTranslate = {
|
|
|
421
424
|
* @description Title for the source files list widget.
|
|
422
425
|
*/
|
|
423
426
|
inspectedFileNames: 'Inspected file names',
|
|
427
|
+
/**
|
|
428
|
+
* @description Title for the storage breakdown widget.
|
|
429
|
+
*/
|
|
430
|
+
storageBreakdown: 'Storage breakdown',
|
|
431
|
+
/**
|
|
432
|
+
* @description Accessible label for the reveal button in the storage breakdown widget.
|
|
433
|
+
*/
|
|
434
|
+
revealStorageBreakdown: 'Reveal storage breakdown in Application panel',
|
|
424
435
|
} as const;
|
|
425
436
|
|
|
426
437
|
/**
|
|
@@ -1006,6 +1017,51 @@ async function resolveNode(backendNodeId: Protocol.DOM.BackendNodeId): Promise<S
|
|
|
1006
1017
|
return resolved;
|
|
1007
1018
|
}
|
|
1008
1019
|
|
|
1020
|
+
async function makeStorageBreakdownWidget(widgetData: StorageBreakdownAiWidget): Promise<WidgetMakerResponse|null> {
|
|
1021
|
+
const target = SDK.TargetManager.TargetManager.instance().primaryPageTarget();
|
|
1022
|
+
if (!target) {
|
|
1023
|
+
return null;
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
const breakdown = widgetData.data.usageBreakdown;
|
|
1027
|
+
const total = breakdown.reduce((sum, item) => sum + item.bytes, 0);
|
|
1028
|
+
|
|
1029
|
+
const slices = breakdown.map(item => {
|
|
1030
|
+
const color = Application.StorageView.storagePieColors.get(item.storageType as Protocol.Storage.StorageType) ||
|
|
1031
|
+
'rgb(180, 180, 180)';
|
|
1032
|
+
const title = Application.StorageView.StorageView.getStorageTypeNameForWidget(item.storageType);
|
|
1033
|
+
|
|
1034
|
+
return {
|
|
1035
|
+
value: item.bytes,
|
|
1036
|
+
color,
|
|
1037
|
+
title,
|
|
1038
|
+
};
|
|
1039
|
+
});
|
|
1040
|
+
|
|
1041
|
+
const chartData: PerfUI.PieChart.PieChartData = {
|
|
1042
|
+
chartName: lockedString(UIStringsNotTranslate.storageBreakdown),
|
|
1043
|
+
size: 110,
|
|
1044
|
+
formatter: val => AiAssistanceModel.UnitFormatters.bytes(val),
|
|
1045
|
+
showLegend: true,
|
|
1046
|
+
total,
|
|
1047
|
+
slices,
|
|
1048
|
+
};
|
|
1049
|
+
|
|
1050
|
+
const renderedWidget = html`
|
|
1051
|
+
<div class="storage-breakdown-widget">
|
|
1052
|
+
<devtools-perf-piechart .data=${chartData}></devtools-perf-piechart>
|
|
1053
|
+
</div>
|
|
1054
|
+
`;
|
|
1055
|
+
|
|
1056
|
+
return {
|
|
1057
|
+
renderedWidget,
|
|
1058
|
+
title: lockedString(UIStringsNotTranslate.storageBreakdown),
|
|
1059
|
+
revealable: new Application.StorageView.StorageRevealable(target),
|
|
1060
|
+
accessibleRevealLabel: lockedString(UIStringsNotTranslate.revealStorageBreakdown),
|
|
1061
|
+
jslogContext: 'storage-breakdown-widget',
|
|
1062
|
+
};
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1009
1065
|
async function makeComputedStyleWidget(widgetData: ComputedStyleAiWidget): Promise<WidgetMakerResponse|null> {
|
|
1010
1066
|
const domNodeForId = await resolveNode(widgetData.data.backendNodeId);
|
|
1011
1067
|
if (!domNodeForId) {
|
|
@@ -1678,6 +1734,9 @@ export function getWidgetSignature(widget: AiWidget): string {
|
|
|
1678
1734
|
return `${widget.name}:${widget.data.url}:${widget.data.line ?? ''}:${widget.data.column ?? ''}`;
|
|
1679
1735
|
case 'NETWORK_REQUESTS_LIST':
|
|
1680
1736
|
return `${widget.name}:${widget.data.requests.map(r => r.requestId()).join(',')}`;
|
|
1737
|
+
case 'STORAGE_BREAKDOWN':
|
|
1738
|
+
return `${widget.name}:${widget.data.totalUsageBytes}:${
|
|
1739
|
+
widget.data.usageBreakdown.map(e => `${e.storageType}_${e.bytes}`).join(',')}`;
|
|
1681
1740
|
default:
|
|
1682
1741
|
Platform.assertNever(widget, 'Unknown AiWidget name');
|
|
1683
1742
|
}
|
|
@@ -1785,17 +1844,27 @@ async function renderWidgets(
|
|
|
1785
1844
|
case 'SOURCE_CODE':
|
|
1786
1845
|
response = await makeSourceCodeWidget(widgetData);
|
|
1787
1846
|
break;
|
|
1847
|
+
case 'STORAGE_BREAKDOWN':
|
|
1848
|
+
response = await makeStorageBreakdownWidget(widgetData);
|
|
1849
|
+
break;
|
|
1788
1850
|
default:
|
|
1789
1851
|
Platform.assertNever(widgetData, 'Unknown AiWidget name');
|
|
1790
1852
|
}
|
|
1791
1853
|
return renderWidgetResponse(response);
|
|
1792
1854
|
}));
|
|
1793
1855
|
|
|
1856
|
+
// Omit the wrapper element entirely if every widget maker resolved to Lit.nothing
|
|
1857
|
+
// so empty container elements do not occupy vertical layout space in the chat stream.
|
|
1858
|
+
const renderedItems = ui.filter(item => item !== Lit.nothing);
|
|
1859
|
+
if (renderedItems.length === 0) {
|
|
1860
|
+
return Lit.nothing;
|
|
1861
|
+
}
|
|
1862
|
+
|
|
1794
1863
|
if (options.wrapperClass) {
|
|
1795
|
-
return html`<div class=${options.wrapperClass}>${
|
|
1864
|
+
return html`<div class=${options.wrapperClass}>${renderedItems}</div>`;
|
|
1796
1865
|
}
|
|
1797
1866
|
|
|
1798
|
-
return html`${
|
|
1867
|
+
return html`${renderedItems}`;
|
|
1799
1868
|
}
|
|
1800
1869
|
|
|
1801
1870
|
function renderSideEffectConfirmationUi(step: Step): Lit.LitTemplate {
|
|
@@ -2334,19 +2403,30 @@ async function makeNetworkTrackWidget(widgetData: NetworkTrackAiWidget): Promise
|
|
|
2334
2403
|
}
|
|
2335
2404
|
|
|
2336
2405
|
async function makeLighthouseReportWidget(widgetData: LighthouseReportAiWidget): Promise<WidgetMakerResponse|null> {
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2406
|
+
let reportEl: HTMLElement|null = null;
|
|
2407
|
+
try {
|
|
2408
|
+
// Snapshot mode audits only collect individual audit results and do not generate
|
|
2409
|
+
// top-level category score gauges.
|
|
2410
|
+
reportEl =
|
|
2411
|
+
Lighthouse.LighthouseReportRenderer.LighthouseReportRenderer.renderLighthouseScores(widgetData.data.report);
|
|
2412
|
+
} catch {
|
|
2413
|
+
reportEl = null;
|
|
2341
2414
|
}
|
|
2342
|
-
|
|
2343
2415
|
const snapshotReport = widgetData.data.snapshotReport;
|
|
2416
|
+
const revealLighthouseLabel = lockedString(UIStringsNotTranslate.revealLighthouse);
|
|
2417
|
+
|
|
2418
|
+
// When score gauges are rendered, the widget header displays the title "Lighthouse report"
|
|
2419
|
+
// and the header button defaults to "Reveal". When score gauges are absent (snapshot mode),
|
|
2420
|
+
// no header is rendered, so customRevealTitle labels the standalone button ("Reveal Lighthouse report").
|
|
2421
|
+
const title = reportEl ? lockedString(UIStringsNotTranslate.lighthouseReport) : null;
|
|
2422
|
+
const customRevealTitle = reportEl ? undefined : revealLighthouseLabel;
|
|
2344
2423
|
|
|
2345
2424
|
return {
|
|
2346
|
-
renderedWidget: html`<div class="lighthouse-report-widget">${reportEl}</div
|
|
2425
|
+
renderedWidget: reportEl ? html`<div class="lighthouse-report-widget">${reportEl}</div>` : null,
|
|
2347
2426
|
revealable: new Lighthouse.LighthousePanel.ActiveLighthouseReport(widgetData.data.report),
|
|
2348
|
-
accessibleRevealLabel:
|
|
2349
|
-
|
|
2427
|
+
accessibleRevealLabel: revealLighthouseLabel,
|
|
2428
|
+
customRevealTitle,
|
|
2429
|
+
title,
|
|
2350
2430
|
jslogContext: snapshotReport ? 'lighthouse-snapshot-report-widget' : 'lighthouse-report-widget',
|
|
2351
2431
|
};
|
|
2352
2432
|
}
|
|
@@ -339,6 +339,7 @@ export class ApplicationPanelSidebar extends UI.Widget.VBox implements SDK.Targe
|
|
|
339
339
|
reportingApiTreeElement: ReportingApiTreeElement;
|
|
340
340
|
webMcpTreeElement?: WebMCPTreeElement;
|
|
341
341
|
adsTreeElement?: ApplicationPanelTreeElement;
|
|
342
|
+
storageTreeElement?: StorageTreeElement;
|
|
342
343
|
deviceBoundSessionsRootTreeElement: DeviceBoundSessionsRootTreeElement|undefined;
|
|
343
344
|
deviceBoundSessionsModel: DeviceBoundSessionsModel|undefined;
|
|
344
345
|
preloadingSummaryTreeElement: PreloadingSummaryTreeElement|undefined;
|
|
@@ -378,8 +379,8 @@ export class ApplicationPanelSidebar extends UI.Widget.VBox implements SDK.Targe
|
|
|
378
379
|
manifestTreeElement.generateChildren();
|
|
379
380
|
this.serviceWorkersTreeElement = new ServiceWorkersTreeElement(panel);
|
|
380
381
|
this.applicationTreeElement.appendChild(this.serviceWorkersTreeElement);
|
|
381
|
-
|
|
382
|
-
this.applicationTreeElement.appendChild(
|
|
382
|
+
this.storageTreeElement = new StorageTreeElement(panel);
|
|
383
|
+
this.applicationTreeElement.appendChild(this.storageTreeElement);
|
|
383
384
|
if (Root.Runtime.hostConfig.devToolsWebMCPSupport?.enabled) {
|
|
384
385
|
this.webMcpTreeElement = new WebMCPTreeElement(panel);
|
|
385
386
|
this.applicationTreeElement.appendChild(this.webMcpTreeElement);
|
|
@@ -937,6 +938,11 @@ export class ApplicationPanelSidebar extends UI.Widget.VBox implements SDK.Targe
|
|
|
937
938
|
}
|
|
938
939
|
}
|
|
939
940
|
|
|
941
|
+
// Selects the Storage tree element in the sidebar (which opens the StorageView component for the main Storage tab).
|
|
942
|
+
showStorage(): void {
|
|
943
|
+
this.storageTreeElement?.select();
|
|
944
|
+
}
|
|
945
|
+
|
|
940
946
|
private onmousemove(event: MouseEvent): void {
|
|
941
947
|
const nodeUnderMouse = (event.target as Node);
|
|
942
948
|
if (!nodeUnderMouse) {
|
|
@@ -1140,7 +1146,7 @@ export class AppManifestTreeElement extends ApplicationPanelTreeElement {
|
|
|
1140
1146
|
}
|
|
1141
1147
|
}
|
|
1142
1148
|
|
|
1143
|
-
export class
|
|
1149
|
+
export class StorageTreeElement extends ApplicationPanelTreeElement {
|
|
1144
1150
|
private view?: StorageView;
|
|
1145
1151
|
constructor(storagePanel: ResourcesPanel) {
|
|
1146
1152
|
super(storagePanel, i18nString(UIStrings.storage), false, 'storage');
|
|
@@ -1149,7 +1155,7 @@ export class ClearStorageTreeElement extends ApplicationPanelTreeElement {
|
|
|
1149
1155
|
}
|
|
1150
1156
|
|
|
1151
1157
|
override get itemURL(): Platform.DevToolsPath.UrlString {
|
|
1152
|
-
return '
|
|
1158
|
+
return 'storage://' as Platform.DevToolsPath.UrlString;
|
|
1153
1159
|
}
|
|
1154
1160
|
|
|
1155
1161
|
override onselect(selectedByUser?: boolean): boolean {
|
|
@@ -254,7 +254,6 @@ export interface IndexedDBDataViewInput {
|
|
|
254
254
|
onKeyFilterChange: (value: string) => void;
|
|
255
255
|
onRowSelected: (rowNumber: number) => void;
|
|
256
256
|
deleteEntry: (entry: Entry) => Promise<void>;
|
|
257
|
-
populateContextMenu: (e: CustomEvent<UI.ContextMenu.ContextMenu>, entry: Entry) => void;
|
|
258
257
|
}
|
|
259
258
|
|
|
260
259
|
const renderKeyPathString = (keyPathString: string): LitTemplate => {
|
|
@@ -272,6 +271,21 @@ const renderKeyColumnHeader = (prefix: string, keyPath: string|string[]|null|und
|
|
|
272
271
|
renderKeyPathString(keyPath)})`;
|
|
273
272
|
};
|
|
274
273
|
|
|
274
|
+
const populateContextMenu = (e: CustomEvent<UI.ContextMenu.ContextMenu>): void => {
|
|
275
|
+
const row = e.currentTarget as HTMLElement;
|
|
276
|
+
const widgetElement = row.querySelector('.value-column devtools-widget');
|
|
277
|
+
const widget = widgetElement ? UI.Widget.Widget.get(widgetElement) as ObjectPropertiesSectionWidget : null;
|
|
278
|
+
if (widget?.objectTree) {
|
|
279
|
+
const contextMenu = e.detail;
|
|
280
|
+
contextMenu.revealSection().appendItem(i18nString(UIStrings.expandRecursively), () => {
|
|
281
|
+
void widget.expandRecursively();
|
|
282
|
+
}, {jslogContext: 'expand-recursively'});
|
|
283
|
+
contextMenu.revealSection().appendItem(i18nString(UIStrings.collapse), () => {
|
|
284
|
+
widget.expanded = false;
|
|
285
|
+
}, {jslogContext: 'collapse'});
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
|
|
275
289
|
const renderDataGrid = (input: IndexedDBDataViewInput): LitTemplate => {
|
|
276
290
|
const keyPath = input.isIndex && input.index ? input.index.keyPath : input.objectStore.keyPath;
|
|
277
291
|
// clang-format off
|
|
@@ -284,17 +298,20 @@ const renderDataGrid = (input: IndexedDBDataViewInput): LitTemplate => {
|
|
|
284
298
|
${input.isIndex ? html`<th id="primary-key">${renderKeyColumnHeader(i18nString(UIStrings.primaryKey), input.objectStore.keyPath)}</th>` : nothing}
|
|
285
299
|
<th id="value">${i18nString(UIStrings.valueString)}</th>
|
|
286
300
|
</tr>
|
|
287
|
-
${repeat(input.entries, (_entry, index) => index, (entry, index) =>
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
301
|
+
${repeat(input.entries, (_entry, index) => index, (entry, index) => {
|
|
302
|
+
return html`
|
|
303
|
+
<tr ?selected=${index + input.skipCount === input.selectedRowNumber}
|
|
304
|
+
class="data-grid-data-row"
|
|
305
|
+
@select=${() => input.onRowSelected(index + input.skipCount)}
|
|
306
|
+
@delete=${() => input.deleteEntry(entry)}
|
|
307
|
+
@contextmenu=${populateContextMenu}>
|
|
308
|
+
<td>${index + input.skipCount}</td>
|
|
309
|
+
<td>${widget(ObjectPropertiesSectionWidget, {value: entry.key})}</td>
|
|
310
|
+
${input.isIndex ? html`<td>${widget(ObjectPropertiesSectionWidget, {value: entry.primaryKey})}</td>`
|
|
311
|
+
: nothing}
|
|
312
|
+
<td class="value-column">${widget(ObjectPropertiesSectionWidget, {value: entry.value})}</td>
|
|
313
|
+
</tr>`;
|
|
314
|
+
})}
|
|
298
315
|
</table>`}>
|
|
299
316
|
</devtools-data-grid>`;
|
|
300
317
|
// clang-format on
|
|
@@ -467,31 +484,6 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
467
484
|
this.updateData(false);
|
|
468
485
|
}
|
|
469
486
|
|
|
470
|
-
private populateContextMenu(e: CustomEvent<UI.ContextMenu.ContextMenu>, {value}: Entry): void {
|
|
471
|
-
const contextMenu = e.detail;
|
|
472
|
-
if (value && value.hasChildren) {
|
|
473
|
-
const tr = e.currentTarget as HTMLElement;
|
|
474
|
-
const valueTd = tr.querySelector('.value-column');
|
|
475
|
-
if (valueTd) {
|
|
476
|
-
const widgetEl = valueTd.querySelector('devtools-widget');
|
|
477
|
-
if (widgetEl) {
|
|
478
|
-
const widget = UI.Widget.Widget.get(widgetEl);
|
|
479
|
-
if (widget instanceof ObjectPropertiesSectionWidget) {
|
|
480
|
-
const objectUi = widget.objectPropertiesSection;
|
|
481
|
-
if (objectUi) {
|
|
482
|
-
contextMenu.revealSection().appendItem(i18nString(UIStrings.expandRecursively), () => {
|
|
483
|
-
void objectUi.objectTreeElement().expandRecursively();
|
|
484
|
-
}, {jslogContext: 'expand-recursively'});
|
|
485
|
-
contextMenu.revealSection().appendItem(i18nString(UIStrings.collapse), () => {
|
|
486
|
-
objectUi.objectTreeElement().collapse();
|
|
487
|
-
}, {jslogContext: 'collapse'});
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
|
|
495
487
|
refreshData(): void {
|
|
496
488
|
this.updateData(true);
|
|
497
489
|
}
|
|
@@ -683,43 +675,33 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
683
675
|
},
|
|
684
676
|
onRowSelected: this.onRowSelected.bind(this),
|
|
685
677
|
deleteEntry: this.deleteEntry.bind(this),
|
|
686
|
-
populateContextMenu: this.populateContextMenu.bind(this),
|
|
687
678
|
},
|
|
688
679
|
undefined, this.element);
|
|
689
680
|
}
|
|
690
681
|
}
|
|
691
682
|
|
|
692
683
|
interface ObjectPropertiesSectionWidgetInput {
|
|
693
|
-
|
|
694
|
-
}
|
|
695
|
-
|
|
696
|
-
interface ObjectPropertiesSectionWidgetOutput {
|
|
697
|
-
objectPropSection: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection|null;
|
|
684
|
+
objectTree: ObjectUI.ObjectPropertiesSection.ObjectTree|null;
|
|
698
685
|
}
|
|
699
686
|
|
|
700
687
|
type ObjectPropertiesSectionWidgetView = (
|
|
701
688
|
input: ObjectPropertiesSectionWidgetInput,
|
|
702
|
-
output:
|
|
689
|
+
output: void,
|
|
703
690
|
target: HTMLElement,
|
|
704
691
|
) => void;
|
|
705
692
|
|
|
706
693
|
const OBJECT_PROPERTIES_SECTION_WIDGET_DEFAULT_VIEW: ObjectPropertiesSectionWidgetView = (input, output, target) => {
|
|
707
|
-
if (!input.
|
|
708
|
-
output.objectPropSection = null;
|
|
694
|
+
if (!input.objectTree) {
|
|
709
695
|
render(nothing, target);
|
|
710
696
|
return;
|
|
711
697
|
}
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
const element = input.value.hasChildren ? objectPropSection.element : objectPropSection.titleElement;
|
|
717
|
-
render(html`${element}`, target);
|
|
698
|
+
render(ObjectUI.ObjectPropertiesSection.defaultObjectPresentation(input.objectTree, undefined /* linkifier */,
|
|
699
|
+
true /* skipProto */, true /* readOnly */),
|
|
700
|
+
target);
|
|
718
701
|
};
|
|
719
702
|
|
|
720
|
-
class ObjectPropertiesSectionWidget extends UI.Widget.Widget {
|
|
721
|
-
#
|
|
722
|
-
#objectPropSection: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection|null = null;
|
|
703
|
+
export class ObjectPropertiesSectionWidget extends UI.Widget.Widget {
|
|
704
|
+
#objectTree: ObjectUI.ObjectPropertiesSection.ObjectTree|null = null;
|
|
723
705
|
readonly #view: ObjectPropertiesSectionWidgetView;
|
|
724
706
|
|
|
725
707
|
constructor(element?: HTMLElement, view = OBJECT_PROPERTIES_SECTION_WIDGET_DEFAULT_VIEW) {
|
|
@@ -728,20 +710,40 @@ class ObjectPropertiesSectionWidget extends UI.Widget.Widget {
|
|
|
728
710
|
}
|
|
729
711
|
|
|
730
712
|
set value(value: SDK.RemoteObject.RemoteObject|null) {
|
|
731
|
-
if (
|
|
732
|
-
|
|
713
|
+
if (value) {
|
|
714
|
+
this.#objectTree = new ObjectUI.ObjectPropertiesSection.ObjectTree(value, {
|
|
715
|
+
readOnly: true,
|
|
716
|
+
propertiesMode: ObjectUI.ObjectPropertiesSection.ObjectPropertiesMode.OWN_AND_INTERNAL_AND_INHERITED,
|
|
717
|
+
});
|
|
718
|
+
} else {
|
|
719
|
+
this.#objectTree = null;
|
|
733
720
|
}
|
|
734
|
-
this.#value = value;
|
|
735
721
|
this.requestUpdate();
|
|
736
722
|
}
|
|
737
723
|
|
|
738
|
-
get
|
|
739
|
-
return this.#
|
|
724
|
+
get objectTree(): ObjectUI.ObjectPropertiesSection.ObjectTree|null {
|
|
725
|
+
return this.#objectTree;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
get expanded(): boolean {
|
|
729
|
+
return this.#objectTree?.expanded ?? false;
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
set expanded(expanded: boolean) {
|
|
733
|
+
if (this.#objectTree) {
|
|
734
|
+
this.#objectTree.expanded = expanded;
|
|
735
|
+
this.requestUpdate();
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
async expandRecursively(): Promise<void> {
|
|
740
|
+
if (this.#objectTree) {
|
|
741
|
+
await this.#objectTree.expandRecursively(ObjectUI.ObjectPropertiesSection.EXPANDABLE_MAX_DEPTH);
|
|
742
|
+
this.requestUpdate();
|
|
743
|
+
}
|
|
740
744
|
}
|
|
741
745
|
|
|
742
746
|
override performUpdate(): void {
|
|
743
|
-
|
|
744
|
-
this.#view({value: this.#value}, output, this.contentElement);
|
|
745
|
-
this.#objectPropSection = output.objectPropSection;
|
|
747
|
+
this.#view({objectTree: this.#objectTree}, undefined, this.contentElement);
|
|
746
748
|
}
|
|
747
749
|
}
|