chrome-devtools-frontend 1.0.1662289 → 1.0.1664496
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/{creating-a-model → devtools-model-management}/SKILL.md +0 -1
- package/.agents/skills/devtools-unicode-escaping/SKILL.md +64 -0
- package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +2 -1
- package/.agents/skills/fixing-skipped-tests/SKILL.md +3 -3
- package/.agents/skills/merging-devtools-module/SKILL.md +1 -1
- package/.agents/skills/migrate-chromium-test/SKILL.md +32 -6
- package/.agents/skills/repro-flaky-tests/SKILL.md +71 -31
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +1 -0
- package/docs/ui_engineering.md +2 -0
- package/eslint.config.mjs +1 -0
- package/front_end/core/common/SettingRegistration.ts +0 -5
- package/front_end/core/common/Settings.ts +144 -3
- package/front_end/core/platform/StringUtilities.ts +38 -6
- package/front_end/core/protocol_client/PuppeteerDevToolsConnection.ts +112 -0
- package/front_end/core/sdk/CPUProfilerModel.ts +21 -13
- package/front_end/core/sdk/CSSContainerQuery.ts +1 -1
- package/front_end/core/sdk/CSSLayer.ts +1 -1
- package/front_end/core/sdk/CSSMedia.ts +1 -1
- package/front_end/core/sdk/CSSModel.ts +1 -1
- package/front_end/core/sdk/CSSNavigation.ts +1 -1
- package/front_end/core/sdk/CSSProperty.ts +1 -1
- package/front_end/core/sdk/CSSQuery.ts +1 -1
- package/front_end/core/sdk/CSSRule.ts +1 -1
- package/front_end/core/sdk/CSSScope.ts +1 -1
- package/front_end/core/sdk/CSSStartingStyle.ts +1 -1
- package/front_end/core/sdk/CSSStyleDeclaration.ts +1 -1
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +1 -1
- package/front_end/core/sdk/CSSSupports.ts +1 -1
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +1 -1
- package/front_end/core/sdk/NetworkManager.ts +1 -1
- package/front_end/core/sdk/NetworkRequest.ts +7 -7
- package/front_end/core/sdk/Resource.ts +1 -1
- package/front_end/core/sdk/ScopeTreeCache.ts +1 -1
- package/front_end/core/sdk/Script.ts +1 -1
- package/front_end/core/sdk/ServerSentEvents.ts +1 -1
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +0 -10
- package/front_end/core/sdk/SourceMap.ts +1 -1
- package/front_end/core/sdk/SourceMapScopesInfo.ts +1 -1
- package/front_end/core/sdk/StorageBucketsModel.ts +0 -10
- package/front_end/core/sdk/sdk-meta.ts +3 -4
- package/front_end/{models → core}/text_utils/ContentProvider.ts +4 -6
- package/front_end/{models → core}/text_utils/StaticContentProvider.ts +4 -6
- package/front_end/{models → core}/text_utils/StreamingContentData.ts +1 -2
- package/front_end/{models → core}/text_utils/TextRange.ts +6 -3
- package/front_end/{models → core}/text_utils/TextUtils.ts +7 -7
- package/front_end/{models → core}/text_utils/WasmDisassembly.ts +2 -2
- package/front_end/core/text_utils/text_utils.ts +27 -0
- package/front_end/entrypoints/formatter_worker/AcornTokenizer.ts +1 -1
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshotLoader.ts +1 -1
- package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +0 -13
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +8 -3
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +3 -3
- package/front_end/entrypoints/main/MainImpl.ts +21 -3
- package/front_end/foundation/Universe.ts +16 -0
- package/front_end/generated/InspectorBackendCommands.ts +2 -14
- package/front_end/generated/protocol-mapping.d.ts +0 -53
- package/front_end/generated/protocol-proxy-api.d.ts +0 -46
- package/front_end/generated/protocol.ts +0 -148
- package/front_end/models/ai_assistance/AgentProject.ts +1 -1
- package/front_end/models/ai_assistance/AiAgent2.ts +3 -3
- package/front_end/models/ai_assistance/AiConversation.ts +21 -10
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +21 -10
- package/front_end/models/ai_assistance/ChangeManager.ts +2 -2
- package/front_end/models/ai_assistance/ExtensionScope.ts +6 -2
- package/front_end/models/ai_assistance/agents/AccessibilityAgent.ts +4 -7
- package/front_end/models/ai_assistance/agents/AiAgent.ts +9 -2
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +19 -11
- package/front_end/models/ai_assistance/agents/PerformanceAgent.snapshot.txt +2 -2
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +23 -10
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +19 -18
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +3 -4
- package/front_end/models/ai_assistance/contexts/FileContext.ts +7 -3
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +39 -11
- package/front_end/models/ai_assistance/data_formatters/FileFormatter.ts +6 -3
- package/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.ts +1 -1
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +4 -4
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +8 -8
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +76 -3
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +11 -1
- package/front_end/models/badges/AiExplorerBadge.ts +8 -3
- package/front_end/models/badges/Badge.ts +1 -0
- package/front_end/models/badges/UserBadges.ts +43 -23
- package/front_end/models/bindings/CompilerScriptMapping.ts +1 -1
- package/front_end/models/bindings/ContentProviderBasedProject.ts +1 -1
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -2
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +1 -1
- package/front_end/models/bindings/DefaultScriptMapping.ts +1 -1
- package/front_end/models/bindings/FileUtils.ts +1 -1
- package/front_end/models/bindings/NetworkProject.ts +16 -4
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +7 -10
- package/front_end/models/bindings/ResourceMapping.ts +1 -1
- package/front_end/models/bindings/ResourceScriptMapping.ts +1 -1
- package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
- package/front_end/models/bindings/StylesSourceMapping.ts +1 -1
- package/front_end/models/breakpoints/BreakpointManager.ts +1 -1
- package/front_end/models/crux-manager/CrUXManager.ts +1 -1
- package/front_end/models/emulation/DeviceModeModel.ts +67 -5
- package/front_end/models/emulation/EmulatedDevices.ts +3 -2
- package/front_end/models/extensions/RecorderPluginManager.ts +10 -6
- package/front_end/models/har/Importer.ts +1 -1
- package/front_end/models/har/Log.snapshot.txt +193 -0
- package/front_end/models/har/Log.ts +3 -2
- package/front_end/models/har/Writer.ts +1 -1
- package/front_end/models/issues_manager/IssueAggregator.ts +9 -0
- package/front_end/models/issues_manager/IssuesManager.ts +5 -0
- package/front_end/models/issues_manager/LazyLoadImageIssue.ts +76 -0
- package/front_end/models/issues_manager/descriptions/lazyLoadImageZeroSize.md +7 -0
- package/front_end/models/issues_manager/issues_manager.ts +2 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +9 -10
- package/front_end/models/live-metrics/LiveMetrics.ts +2 -3
- package/front_end/models/logs/NetworkLog.ts +4 -3
- package/front_end/models/logs/logs-meta.ts +3 -3
- package/front_end/models/network_time_calculator/NetworkTimeCalculator.ts +4 -4
- package/front_end/models/persistence/Automapping.ts +1 -1
- package/front_end/models/persistence/AutomaticFileSystemWorkspaceBinding.ts +2 -2
- package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +1 -1
- package/front_end/models/persistence/IsolatedFileSystem.ts +2 -2
- package/front_end/models/persistence/NetworkPersistenceManager.ts +1 -1
- package/front_end/models/persistence/PersistenceImpl.ts +1 -1
- package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
- package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +8 -6
- package/front_end/models/source_map_scopes/NamesResolver.ts +37 -31
- package/front_end/models/stack_trace/StackTrace.ts +17 -0
- package/front_end/models/text_utils/text_utils.ts +2 -24
- package/front_end/models/trace/insights/ImageDelivery.ts +2 -2
- package/front_end/models/trace/insights/LegacyJavaScript.ts +1 -1
- package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
- package/front_end/models/trace/insights/ThirdParties.ts +1 -1
- package/front_end/models/workspace/FileManager.ts +1 -1
- package/front_end/models/workspace/UISourceCode.ts +1 -1
- package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +1 -1
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +1 -1
- package/front_end/panels/accessibility/AccessibilityStrings.ts +2 -2
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +1 -1
- package/front_end/panels/ai_assistance/ExportConversation.ts +1 -1
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +1 -1
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +1 -1
- package/front_end/panels/application/AppManifestView.ts +4 -4
- package/front_end/panels/application/ApplicationPanelSidebar.ts +1 -2
- package/front_end/panels/application/CrashReportContextView.ts +1 -1
- package/front_end/panels/application/DOMStorageItemsView.ts +1 -1
- package/front_end/panels/application/DeviceBoundSessionsView.ts +4 -4
- package/front_end/panels/application/ExtensionStorageItemsView.ts +1 -1
- package/front_end/panels/application/FrameDetailsView.ts +1 -1
- package/front_end/panels/application/IndexedDBModel.ts +0 -10
- package/front_end/panels/application/IndexedDBViews.ts +240 -164
- package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +12 -2
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +1 -1
- package/front_end/panels/application/SharedStorageModel.ts +0 -10
- package/front_end/panels/application/application.ts +2 -0
- package/front_end/panels/application/components/AdsView.ts +23 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +21 -5
- package/front_end/panels/application/components/CrashReportContextGrid.ts +1 -1
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +1 -1
- package/front_end/panels/application/components/TrustTokensView.ts +2 -2
- package/front_end/panels/application/components/adsView.css +21 -1
- package/front_end/panels/application/indexedDBViews.css +1 -1
- package/front_end/panels/application/preloading/PreloadingView.ts +1 -1
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +2 -2
- package/front_end/panels/application/preloading/components/PreloadingString.ts +2 -2
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +4 -4
- package/front_end/panels/autofill/AutofillView.ts +1 -1
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +1 -1
- package/front_end/panels/common/ExtensionServer.ts +1 -1
- package/front_end/panels/console/ConsoleFilter.ts +1 -1
- package/front_end/panels/console/ConsoleSidebar.ts +1 -1
- package/front_end/panels/console/ConsoleView.ts +1 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
- package/front_end/panels/console/PromptBuilder.ts +1 -1
- package/front_end/panels/coverage/CoverageDecorationManager.ts +9 -1
- package/front_end/panels/coverage/CoverageModel.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +1 -1
- package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +1 -1
- package/front_end/panels/elements/AccessibilityTreeView.ts +38 -3
- package/front_end/panels/elements/AdoptedStyleSheetTreeElement.ts +1 -1
- package/front_end/panels/elements/ElementIssueUtils.ts +2 -2
- package/front_end/panels/elements/ElementsTreeElement.ts +10 -3
- package/front_end/panels/elements/StandaloneStylesContainer.ts +1 -1
- package/front_end/panels/elements/StylePropertiesSection.ts +1 -1
- package/front_end/panels/elements/StylePropertyTreeElement.ts +1 -1
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
- package/front_end/panels/elements/StylesContainer.ts +1 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
- package/front_end/panels/elements/components/CSSPropertyDocsView.ts +1 -1
- package/front_end/panels/explain/components/ConsoleInsight.ts +2 -2
- package/front_end/panels/issues/AffectedLazyLoadImagesView.ts +76 -0
- package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
- package/front_end/panels/issues/CorsIssueDetailsView.ts +1 -1
- package/front_end/panels/issues/IssueView.ts +2 -0
- package/front_end/panels/issues/issues.ts +2 -0
- package/front_end/panels/layer_viewer/Layers3DView.ts +1 -1
- package/front_end/panels/lighthouse/LighthouseController.ts +5 -0
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +1 -1
- package/front_end/panels/network/BinaryResourceView.ts +1 -1
- package/front_end/panels/network/NetworkDataGridNode.ts +72 -8
- package/front_end/panels/network/NetworkLogView.ts +1 -1
- package/front_end/panels/network/NetworkLogViewColumns.ts +6 -6
- package/front_end/panels/network/NetworkPanel.ts +4 -4
- package/front_end/panels/network/NetworkSearchScope.ts +1 -1
- package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
- package/front_end/panels/network/RequestHTMLView.ts +1 -1
- package/front_end/panels/network/RequestInitiatorView.ts +24 -2
- package/front_end/panels/network/RequestPayloadView.ts +1 -1
- package/front_end/panels/network/RequestPreviewView.ts +1 -1
- package/front_end/panels/network/RequestResponseView.ts +1 -1
- 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 +1 -1
- package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
- package/front_end/panels/network/forward/UIRequestLocation.ts +1 -1
- package/front_end/panels/network/network-meta.ts +3 -3
- package/front_end/panels/network/networkLogView.css +5 -0
- package/front_end/panels/network/requestInitiatorViewTree.css +5 -0
- package/front_end/panels/profiler/HeapProfileView.ts +200 -81
- package/front_end/panels/profiler/HeapSnapshotView.ts +1 -1
- package/front_end/panels/profiler/ProfileDataGrid.ts +12 -8
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +1 -1
- package/front_end/panels/recorder/README.md +1 -2
- package/front_end/panels/recorder/RecorderPanel.ts +1861 -17
- package/front_end/panels/recorder/RecordingListView.ts +8 -37
- package/front_end/panels/recorder/RecordingView.ts +54 -27
- package/front_end/panels/recorder/SelectorPicker.ts +0 -13
- package/front_end/panels/recorder/StepEditor.ts +6 -14
- package/front_end/panels/recorder/StepView.ts +36 -105
- package/front_end/panels/recorder/recorder.ts +0 -2
- package/front_end/panels/search/SearchResultsPane.ts +1 -1
- package/front_end/panels/security/SecurityPanel.ts +3 -3
- package/front_end/panels/settings/AISettingsTab.ts +17 -4
- package/front_end/panels/settings/components/SyncSection.ts +4 -4
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +3 -3
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +1 -1
- package/front_end/panels/sources/BreakpointsView.ts +1 -1
- package/front_end/panels/sources/CoveragePlugin.ts +1 -1
- package/front_end/panels/sources/DebuggerPlugin.ts +4 -4
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +27 -3
- package/front_end/panels/sources/NavigatorView.ts +1 -1
- package/front_end/panels/sources/PersistenceActions.ts +1 -1
- package/front_end/panels/sources/SourcesNavigator.ts +1 -1
- package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
- package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
- package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
- package/front_end/panels/sources/components/HeadersView.ts +1 -1
- package/front_end/panels/sources/filteredUISourceCodeListProvider.css +12 -1
- package/front_end/panels/sources/sources-meta.ts +1 -1
- package/front_end/panels/timeline/StatusDialog.ts +1 -1
- package/front_end/panels/timeline/TimelineController.ts +24 -3
- package/front_end/panels/timeline/TimelinePanel.ts +116 -25
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +2 -2
- package/front_end/panels/timeline/TimelineUIUtils.ts +1 -1
- package/front_end/panels/timeline/components/CWVMetrics.ts +1 -1
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
- package/front_end/panels/timeline/timeline-meta.ts +13 -0
- package/front_end/services/tracing/TracingManager.ts +27 -2
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/lighthouse/README.chromium +2 -2
- package/front_end/third_party/lighthouse/lighthouse-dt-bundle.js +1418 -1413
- package/front_end/third_party/lighthouse/locales/en-US.json +12 -6
- package/front_end/third_party/lighthouse/locales/en-XL.json +12 -6
- package/front_end/third_party/lighthouse/report-assets/report-generator.mjs +1 -1
- package/front_end/third_party/puppeteer/puppeteer.ts +20 -1
- package/front_end/ui/components/highlighting/HighlightElement.ts +4 -1
- package/front_end/ui/components/highlighting/HighlightManager.ts +1 -1
- package/front_end/ui/components/highlighting/MarkupHighlight.ts +1 -1
- package/front_end/ui/components/markdown_view/MarkdownView.ts +46 -2
- package/front_end/ui/components/markdown_view/markdownView.css +23 -0
- package/front_end/ui/components/spinners/Spinner.ts +29 -32
- package/front_end/ui/components/spinners/spinner.css +32 -84
- package/front_end/ui/components/text_editor/config.ts +1 -1
- package/front_end/ui/components/tree_outline/TreeOutline.ts +7 -1
- package/front_end/ui/legacy/Infobar.ts +1 -1
- package/front_end/ui/legacy/InspectorView.ts +12 -7
- package/front_end/ui/legacy/SuggestBox.ts +1 -1
- package/front_end/ui/legacy/TextPrompt.ts +1 -1
- package/front_end/ui/legacy/Toolbar.ts +5 -2
- package/front_end/ui/legacy/Treeoutline.ts +40 -13
- package/front_end/ui/legacy/UIUtils.ts +25 -10
- package/front_end/ui/legacy/Widget.ts +17 -10
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +37 -8
- package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +1 -1
- package/front_end/ui/legacy/components/inline_editor/AnimationTimingUI.ts +27 -13
- package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +5 -2
- package/front_end/ui/legacy/components/inline_editor/CSSLinearEasingModel.ts +23 -0
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +223 -121
- package/front_end/ui/legacy/components/object_ui/RemoteObjectPreviewFormatter.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/objectValue.css +2 -1
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/BinaryResourceViewFactory.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/FontView.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/ImageView.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +105 -115
- package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/XMLView.ts +5 -1
- package/front_end/ui/legacy/components/source_frame/jsonView.css +4 -0
- package/front_end/ui/legacy/components/utils/Linkifier.ts +1 -1
- package/front_end/ui/legacy/inspectorCommon.css +10 -6
- package/front_end/ui/lit/lit.ts +1 -0
- package/front_end/ui/lit/render.ts +44 -10
- package/front_end/ui/lit/strip-whitespace.ts +23 -2
- package/front_end/ui/settings/SettingUIRegistration.ts +105 -0
- package/front_end/ui/settings/settings.ts +9 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +13 -0
- package/mcp/mcp.ts +1 -0
- package/package.json +1 -1
- package/front_end/panels/recorder/RecorderController.ts +0 -1759
- /package/.agents/skills/{verification → devtools-verification}/SKILL.md +0 -0
- /package/front_end/{models → core}/text_utils/CodeMirrorUtils.ts +0 -0
- /package/front_end/{models → core}/text_utils/ContentData.ts +0 -0
- /package/front_end/{models → core}/text_utils/Text.ts +0 -0
- /package/front_end/{models → core}/text_utils/TextCursor.ts +0 -0
- /package/front_end/{models → core}/text_utils/TextUtils.snapshot.txt +0 -0
- /package/front_end/panels/recorder/{recorderController.css → recorderPanel.css} +0 -0
|
@@ -159,13 +159,13 @@ const UIStrings = {
|
|
|
159
159
|
*/
|
|
160
160
|
noEvents: 'No events have been logged yet.',
|
|
161
161
|
/**
|
|
162
|
-
*@description Text to
|
|
162
|
+
*@description Text to keep the log of events after refreshing.
|
|
163
163
|
*/
|
|
164
|
-
preserveLog: '
|
|
164
|
+
preserveLog: 'Keep log',
|
|
165
165
|
/**
|
|
166
|
-
*@description Tooltip text that appears on the
|
|
166
|
+
*@description Tooltip text that appears on the keep log setting when hovering over it.
|
|
167
167
|
*/
|
|
168
|
-
doNotClearLogOnPageReload: '
|
|
168
|
+
doNotClearLogOnPageReload: 'Don’t clear log on page reload/navigation',
|
|
169
169
|
/**
|
|
170
170
|
*@description Label for the ID of a session.
|
|
171
171
|
*/
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
import * as Common from '../../core/common/common.js';
|
|
32
32
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
33
33
|
import type * as Platform from '../../core/platform/platform.js';
|
|
34
|
+
import * as TextUtils from '../../core/text_utils/text_utils.js';
|
|
34
35
|
import * as Protocol from '../../generated/protocol.js';
|
|
35
|
-
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
36
36
|
import * as JSON5 from '../../third_party/json5/json5.js';
|
|
37
37
|
import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
|
|
38
38
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -139,7 +139,7 @@ const UIStrings = {
|
|
|
139
139
|
/**
|
|
140
140
|
* @description Explanatory text in the Frame Details view
|
|
141
141
|
*/
|
|
142
|
-
theFramesSchemeIsInsecure: 'The frame
|
|
142
|
+
theFramesSchemeIsInsecure: 'The frame’s scheme is insecure',
|
|
143
143
|
/**
|
|
144
144
|
* @description This label specifies the server endpoints to which the server is reporting errors
|
|
145
145
|
*and warnings through the Report-to API. Following this label will be the URL of the server.
|
|
@@ -423,16 +423,6 @@ export class IndexedDBModel extends SDK.SDKModel.SDKModel<EventTypes> implements
|
|
|
423
423
|
cacheStorageContentUpdated(_event: Protocol.Storage.CacheStorageContentUpdatedEvent): void {
|
|
424
424
|
}
|
|
425
425
|
|
|
426
|
-
interestGroupAccessed(_event: Protocol.Storage.InterestGroupAccessedEvent): void {
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
interestGroupAuctionEventOccurred(_event: Protocol.Storage.InterestGroupAuctionEventOccurredEvent): void {
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
interestGroupAuctionNetworkRequestCreated(_event: Protocol.Storage.InterestGroupAuctionNetworkRequestCreatedEvent):
|
|
433
|
-
void {
|
|
434
|
-
}
|
|
435
|
-
|
|
436
426
|
sharedStorageAccessed(_event: Protocol.Storage.SharedStorageAccessedEvent): void {
|
|
437
427
|
}
|
|
438
428
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// Copyright 2012 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
5
|
import '../../ui/components/report_view/report_view.js';
|
|
7
6
|
import '../../ui/legacy/legacy.js';
|
|
@@ -234,6 +233,178 @@ declare global {
|
|
|
234
233
|
'devtools-idb-database-view': IDBDatabaseView;
|
|
235
234
|
}
|
|
236
235
|
}
|
|
236
|
+
export interface IndexedDBDataViewInput {
|
|
237
|
+
isIndex: boolean;
|
|
238
|
+
index: Index|null;
|
|
239
|
+
objectStore: ObjectStore;
|
|
240
|
+
entries: Entry[];
|
|
241
|
+
skipCount: number;
|
|
242
|
+
selectedRowNumber: number;
|
|
243
|
+
clearButtonEnabled: boolean;
|
|
244
|
+
hasMore: boolean;
|
|
245
|
+
keyFilter: string;
|
|
246
|
+
needsRefreshVisible: boolean;
|
|
247
|
+
metadata: ObjectStoreMetadata|null;
|
|
248
|
+
|
|
249
|
+
refreshButtonClicked: () => void;
|
|
250
|
+
clearButtonClicked: () => Promise<void>;
|
|
251
|
+
deleteButtonClicked: () => Promise<void>;
|
|
252
|
+
pageBackButtonClicked: () => void;
|
|
253
|
+
pageForwardButtonClicked: () => void;
|
|
254
|
+
onKeyFilterChange: (value: string) => void;
|
|
255
|
+
onRowSelected: (rowNumber: number) => void;
|
|
256
|
+
deleteEntry: (entry: Entry) => Promise<void>;
|
|
257
|
+
populateContextMenu: (e: CustomEvent<UI.ContextMenu.ContextMenu>, entry: Entry) => void;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
const renderKeyPathString = (keyPathString: string): LitTemplate => {
|
|
261
|
+
return html`"<span class="source-code indexed-db-key-path">${keyPathString}</span>"`;
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
const renderKeyColumnHeader = (prefix: string, keyPath: string|string[]|null|undefined): LitTemplate => {
|
|
265
|
+
if (keyPath === undefined || keyPath === null || keyPath === '') {
|
|
266
|
+
return html`${prefix}`;
|
|
267
|
+
}
|
|
268
|
+
return html`
|
|
269
|
+
${prefix} (${i18nString(UIStrings.keyPath)}${
|
|
270
|
+
Array.isArray(keyPath) ?
|
|
271
|
+
html`[${keyPath.map((path, i) => html`${i > 0 ? ', ' : ''}${renderKeyPathString(path)}`)}]` :
|
|
272
|
+
renderKeyPathString(keyPath)})`;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
const renderDataGrid = (input: IndexedDBDataViewInput): LitTemplate => {
|
|
276
|
+
const keyPath = input.isIndex && input.index ? input.index.keyPath : input.objectStore.keyPath;
|
|
277
|
+
// clang-format off
|
|
278
|
+
return html`<devtools-data-grid striped style="flex: auto;" name=${i18nString(UIStrings.indexedDb)} .template=${html`
|
|
279
|
+
<style>${indexedDBViewsStyles}</style>
|
|
280
|
+
<table>
|
|
281
|
+
<tr>
|
|
282
|
+
<th id="number" fixed width="50px">#</th>
|
|
283
|
+
<th id="key">${renderKeyColumnHeader(i18nString(UIStrings.keyString), keyPath)}</th>
|
|
284
|
+
${input.isIndex ? html`<th id="primary-key">${renderKeyColumnHeader(i18nString(UIStrings.primaryKey), input.objectStore.keyPath)}</th>` : nothing}
|
|
285
|
+
<th id="value">${i18nString(UIStrings.valueString)}</th>
|
|
286
|
+
</tr>
|
|
287
|
+
${repeat(input.entries, (_entry, index) => index, (entry, index) => html`
|
|
288
|
+
<tr ?selected=${index + input.skipCount === input.selectedRowNumber}
|
|
289
|
+
@select=${() => input.onRowSelected(index + input.skipCount)}
|
|
290
|
+
@delete=${() => input.deleteEntry(entry)}
|
|
291
|
+
@contextmenu=${(e: CustomEvent<UI.ContextMenu.ContextMenu>) => input.populateContextMenu(e, entry)}>
|
|
292
|
+
<td>${index + input.skipCount}</td>
|
|
293
|
+
<td>${widget(ObjectPropertiesSectionWidget, {value: entry.key})}</td>
|
|
294
|
+
${input.isIndex ? html`<td>${widget(ObjectPropertiesSectionWidget, {value: entry.primaryKey})}</td>` : nothing}
|
|
295
|
+
<td class="value-column">${widget(ObjectPropertiesSectionWidget, {value: entry.value})}</td>
|
|
296
|
+
</tr>`
|
|
297
|
+
)}
|
|
298
|
+
</table>`}>
|
|
299
|
+
</devtools-data-grid>`;
|
|
300
|
+
// clang-format on
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
const renderToolbar = (input: IndexedDBDataViewInput): LitTemplate => {
|
|
304
|
+
// clang-format off
|
|
305
|
+
return html`
|
|
306
|
+
<devtools-toolbar class="data-view-toolbar" jslog=${VisualLogging.toolbar()}>
|
|
307
|
+
<devtools-button
|
|
308
|
+
class="toolbar-button"
|
|
309
|
+
.iconName=${'refresh'}
|
|
310
|
+
.title=${i18nString(UIStrings.refresh)}
|
|
311
|
+
jslog=${VisualLogging.action('refresh').track({click: true})}
|
|
312
|
+
@click=${input.refreshButtonClicked}
|
|
313
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}
|
|
314
|
+
></devtools-button>
|
|
315
|
+
<devtools-button
|
|
316
|
+
class="toolbar-button"
|
|
317
|
+
.iconName=${'clear'}
|
|
318
|
+
.title=${i18nString(UIStrings.clearObjectStore)}
|
|
319
|
+
jslog=${VisualLogging.action('clear-all').track({click: true})}
|
|
320
|
+
@click=${input.clearButtonClicked}
|
|
321
|
+
.disabled=${input.isIndex || !input.clearButtonEnabled}
|
|
322
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
323
|
+
</devtools-button>
|
|
324
|
+
<devtools-button
|
|
325
|
+
class="toolbar-button"
|
|
326
|
+
.iconName=${'bin'}
|
|
327
|
+
.title=${i18nString(UIStrings.deleteSelected)}
|
|
328
|
+
jslog=${VisualLogging.action('delete-selected').track({click: true})}
|
|
329
|
+
@click=${input.deleteButtonClicked}
|
|
330
|
+
.disabled=${input.selectedRowNumber < 0 || input.entries.length === 0}
|
|
331
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
332
|
+
</devtools-button>
|
|
333
|
+
|
|
334
|
+
<div class="toolbar-divider"></div>
|
|
335
|
+
|
|
336
|
+
<devtools-button
|
|
337
|
+
class="toolbar-button"
|
|
338
|
+
.iconName=${'triangle-left'}
|
|
339
|
+
.title=${i18nString(UIStrings.showPreviousPage)}
|
|
340
|
+
.disabled=${input.skipCount <= 0}
|
|
341
|
+
@click=${input.pageBackButtonClicked}
|
|
342
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
343
|
+
</devtools-button>
|
|
344
|
+
<devtools-button
|
|
345
|
+
class="toolbar-button"
|
|
346
|
+
.iconName=${'triangle-right'}
|
|
347
|
+
.title=${i18nString(UIStrings.showNextPage)}
|
|
348
|
+
.disabled=${!input.hasMore}
|
|
349
|
+
@click=${input.pageForwardButtonClicked}
|
|
350
|
+
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
351
|
+
</devtools-button>
|
|
352
|
+
|
|
353
|
+
<devtools-toolbar-input
|
|
354
|
+
type="filter"
|
|
355
|
+
placeholder=${i18nString(UIStrings.filterByKey)}
|
|
356
|
+
class="key-filter-input"
|
|
357
|
+
.value=${input.keyFilter}
|
|
358
|
+
@change=${(e: CustomEvent<string>) => {
|
|
359
|
+
input.onKeyFilterChange(e.detail);
|
|
360
|
+
}}>
|
|
361
|
+
</devtools-toolbar-input>
|
|
362
|
+
|
|
363
|
+
${input.needsRefreshVisible ? html`
|
|
364
|
+
<div class="toolbar-divider"></div>
|
|
365
|
+
<div class="toolbar-item stale-data-warning" title=${
|
|
366
|
+
i18nString(
|
|
367
|
+
UIStrings
|
|
368
|
+
.someEntriesMayHaveBeenModified)}>
|
|
369
|
+
<devtools-icon name="warning" class="warning-icon"></devtools-icon>
|
|
370
|
+
<span>${i18nString(UIStrings.dataMayBeStale)}</span>
|
|
371
|
+
</div>
|
|
372
|
+
` : nothing}
|
|
373
|
+
</devtools-toolbar>`;
|
|
374
|
+
// clang-format on
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
const renderSummaryBar = (input: IndexedDBDataViewInput): LitTemplate => {
|
|
378
|
+
const metadata = input.metadata;
|
|
379
|
+
if (!metadata) {
|
|
380
|
+
return nothing;
|
|
381
|
+
}
|
|
382
|
+
// clang-format off
|
|
383
|
+
return html`
|
|
384
|
+
<div class="object-store-summary-bar">
|
|
385
|
+
<span>${i18nString(UIStrings.totalEntriesS, { PH1: String(metadata.entriesCount)})}</span>
|
|
386
|
+
${input.objectStore.autoIncrement ? html`
|
|
387
|
+
<span class="separator">\u2758</span>
|
|
388
|
+
<span>${i18nString(UIStrings.keyGeneratorValueS, {PH1: String(metadata.keyGeneratorValue)})}</span>`
|
|
389
|
+
: nothing}
|
|
390
|
+
</div>`;
|
|
391
|
+
// clang-format on
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
export type IDBDataViewView = (input: IndexedDBDataViewInput, output: undefined, target: HTMLElement) => void;
|
|
395
|
+
|
|
396
|
+
// clang-format off
|
|
397
|
+
export const IDB_DATA_VIEW_DEFAULT_VIEW: IDBDataViewView = (input, _output, target) => {
|
|
398
|
+
render(html`
|
|
399
|
+
${renderToolbar(input)}
|
|
400
|
+
<div class="data-grid-container">
|
|
401
|
+
${renderDataGrid(input)}
|
|
402
|
+
</div>
|
|
403
|
+
${renderSummaryBar(input)}
|
|
404
|
+
`, target, {container: {classes: ['indexed-db-data-view', 'storage-view']}});
|
|
405
|
+
};
|
|
406
|
+
// clang-format on
|
|
407
|
+
|
|
237
408
|
export class IDBDataView extends UI.View.SimpleView {
|
|
238
409
|
private readonly model: IndexedDBModel;
|
|
239
410
|
private readonly databaseId: DatabaseId;
|
|
@@ -259,14 +430,16 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
259
430
|
// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
|
|
260
431
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
261
432
|
private lastKey?: any;
|
|
433
|
+
readonly #view: IDBDataViewView;
|
|
262
434
|
|
|
263
435
|
constructor(model: IndexedDBModel, databaseId: DatabaseId, objectStore: ObjectStore, index: Index|null,
|
|
264
|
-
refreshObjectStoreCallback: () => void) {
|
|
436
|
+
refreshObjectStoreCallback: () => void, view = IDB_DATA_VIEW_DEFAULT_VIEW) {
|
|
265
437
|
super({
|
|
266
438
|
title: i18nString(UIStrings.idb),
|
|
267
439
|
viewId: 'idb',
|
|
268
440
|
jslog: `${VisualLogging.pane('indexed-db-data-view')}`,
|
|
269
441
|
});
|
|
442
|
+
this.#view = view;
|
|
270
443
|
this.registerRequiredCSS(indexedDBViewsStyles);
|
|
271
444
|
this.registerRequiredCSS(DataGrid.dataGridStyles);
|
|
272
445
|
|
|
@@ -275,8 +448,6 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
275
448
|
this.isIndex = Boolean(index);
|
|
276
449
|
this.refreshObjectStoreCallback = refreshObjectStoreCallback;
|
|
277
450
|
|
|
278
|
-
this.element.classList.add('indexed-db-data-view', 'storage-view');
|
|
279
|
-
|
|
280
451
|
this.clearingObjectStore = false;
|
|
281
452
|
|
|
282
453
|
this.pageSize = 50;
|
|
@@ -286,124 +457,6 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
286
457
|
this.update(objectStore, index);
|
|
287
458
|
}
|
|
288
459
|
|
|
289
|
-
private renderDataGrid(): LitTemplate {
|
|
290
|
-
const keyPath = this.isIndex && this.index ? this.index.keyPath : this.objectStore.keyPath;
|
|
291
|
-
// clang-format off
|
|
292
|
-
return html`<devtools-data-grid striped style="flex: auto;" name=${i18nString(UIStrings.indexedDb)} .template=${html`
|
|
293
|
-
<style>${indexedDBViewsStyles}</style>
|
|
294
|
-
<table>
|
|
295
|
-
<tr>
|
|
296
|
-
<th id="number" fixed width="50px">#</th>
|
|
297
|
-
<th id="key">${this.renderKeyColumnHeader(i18nString(UIStrings.keyString), keyPath)}</th>
|
|
298
|
-
${this.isIndex ? html`<th id="primary-key">${this.renderKeyColumnHeader(i18nString(UIStrings.primaryKey), this.objectStore.keyPath)}</th>` : nothing}
|
|
299
|
-
<th id="value">${i18nString(UIStrings.valueString)}</th>
|
|
300
|
-
</tr>
|
|
301
|
-
${repeat(this.entries, (_entry, index) => index, (entry, index) => html`
|
|
302
|
-
<tr ?selected=${index + this.skipCount === this.#selectedRowNumber}
|
|
303
|
-
@select=${() => this.onRowSelected(index + this.skipCount)}
|
|
304
|
-
@delete=${() => this.deleteEntry(entry)}
|
|
305
|
-
@contextmenu=${(e: CustomEvent<UI.ContextMenu.ContextMenu>) => this.populateContextMenu(e, entry)}>
|
|
306
|
-
<td>${index + this.skipCount}</td>
|
|
307
|
-
<td>${widget(ObjectPropertiesSectionWidget, {value: entry.key})}</td>
|
|
308
|
-
${this.isIndex ? html`<td>${widget(ObjectPropertiesSectionWidget, {value: entry.primaryKey})}</td>` : nothing}
|
|
309
|
-
<td class="value-column">${widget(ObjectPropertiesSectionWidget, {value: entry.value})}</td>
|
|
310
|
-
</tr>`
|
|
311
|
-
)}
|
|
312
|
-
</table>`}>
|
|
313
|
-
</devtools-data-grid>`;
|
|
314
|
-
// clang-format on
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
private renderKeyColumnHeader(prefix: string, keyPath: string|string[]|null|undefined): LitTemplate {
|
|
318
|
-
if (keyPath === undefined || keyPath === null || keyPath === '') {
|
|
319
|
-
return html`${prefix}`;
|
|
320
|
-
}
|
|
321
|
-
return html`
|
|
322
|
-
${prefix} (${i18nString(UIStrings.keyPath)}${
|
|
323
|
-
Array.isArray(keyPath) ?
|
|
324
|
-
html`[${keyPath.map((path, i) => html`${i > 0 ? ', ' : ''}${this.renderKeyPathString(path)}`)}]` :
|
|
325
|
-
this.renderKeyPathString(keyPath)})`;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
private renderKeyPathString(keyPathString: string): LitTemplate {
|
|
329
|
-
return html`"<span class="source-code indexed-db-key-path">${keyPathString}</span>"`;
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
private renderToolbar(): LitTemplate {
|
|
333
|
-
// clang-format off
|
|
334
|
-
return html`
|
|
335
|
-
<devtools-toolbar class="data-view-toolbar" jslog=${VisualLogging.toolbar()}>
|
|
336
|
-
<devtools-button
|
|
337
|
-
class="toolbar-button"
|
|
338
|
-
.iconName=${'refresh'}
|
|
339
|
-
.title=${i18nString(UIStrings.refresh)}
|
|
340
|
-
jslog=${VisualLogging.action('refresh').track({click: true})}
|
|
341
|
-
@click=${() => this.refreshButtonClicked()}
|
|
342
|
-
.variant=${Buttons.Button.Variant.TOOLBAR}
|
|
343
|
-
></devtools-button>
|
|
344
|
-
<devtools-button
|
|
345
|
-
class="toolbar-button"
|
|
346
|
-
.iconName=${'clear'}
|
|
347
|
-
.title=${i18nString(UIStrings.clearObjectStore)}
|
|
348
|
-
jslog=${VisualLogging.action('clear-all').track({click: true})}
|
|
349
|
-
@click=${() => this.clearButtonClicked()}
|
|
350
|
-
.disabled=${this.isIndex || !this.#clearButtonEnabled}
|
|
351
|
-
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
352
|
-
</devtools-button>
|
|
353
|
-
<devtools-button
|
|
354
|
-
class="toolbar-button"
|
|
355
|
-
.iconName=${'bin'}
|
|
356
|
-
.title=${i18nString(UIStrings.deleteSelected)}
|
|
357
|
-
jslog=${VisualLogging.action('delete-selected').track({click: true})}
|
|
358
|
-
@click=${() => this.deleteButtonClicked()}
|
|
359
|
-
.disabled=${this.#selectedRowNumber < 0 || this.entries.length === 0}
|
|
360
|
-
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
361
|
-
</devtools-button>
|
|
362
|
-
|
|
363
|
-
<div class="toolbar-divider"></div>
|
|
364
|
-
|
|
365
|
-
<devtools-button
|
|
366
|
-
class="toolbar-button"
|
|
367
|
-
.iconName=${'triangle-left'}
|
|
368
|
-
.title=${i18nString(UIStrings.showPreviousPage)}
|
|
369
|
-
.disabled=${this.skipCount <= 0}
|
|
370
|
-
@click=${() => this.pageBackButtonClicked()}
|
|
371
|
-
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
372
|
-
</devtools-button>
|
|
373
|
-
<devtools-button
|
|
374
|
-
class="toolbar-button"
|
|
375
|
-
.iconName=${'triangle-right'}
|
|
376
|
-
.title=${i18nString(UIStrings.showNextPage)}
|
|
377
|
-
.disabled=${!this.#hasMore}
|
|
378
|
-
@click=${() => this.pageForwardButtonClicked()}
|
|
379
|
-
.variant=${Buttons.Button.Variant.TOOLBAR}>
|
|
380
|
-
</devtools-button>
|
|
381
|
-
|
|
382
|
-
<devtools-toolbar-input
|
|
383
|
-
type="filter"
|
|
384
|
-
placeholder=${i18nString(UIStrings.filterByKey)}
|
|
385
|
-
class="key-filter-input"
|
|
386
|
-
.value=${this.#keyFilter}
|
|
387
|
-
@change=${(e: CustomEvent<string>) => {
|
|
388
|
-
this.#keyFilter = e.detail;
|
|
389
|
-
this.updateData(false);
|
|
390
|
-
}}>
|
|
391
|
-
</devtools-toolbar-input>
|
|
392
|
-
|
|
393
|
-
${this.#needsRefreshVisible ? html`
|
|
394
|
-
<div class="toolbar-divider"></div>
|
|
395
|
-
<div class="toolbar-item stale-data-warning" title=${
|
|
396
|
-
i18nString(
|
|
397
|
-
UIStrings
|
|
398
|
-
.someEntriesMayHaveBeenModified)}>
|
|
399
|
-
<devtools-icon name="warning" class="warning-icon"></devtools-icon>
|
|
400
|
-
<span>${i18nString(UIStrings.dataMayBeStale)}</span>
|
|
401
|
-
</div>
|
|
402
|
-
` : nothing}
|
|
403
|
-
</devtools-toolbar>`;
|
|
404
|
-
// clang-format on
|
|
405
|
-
}
|
|
406
|
-
|
|
407
460
|
private pageBackButtonClicked(): void {
|
|
408
461
|
this.skipCount = Math.max(0, this.skipCount - this.pageSize);
|
|
409
462
|
this.updateData(false);
|
|
@@ -519,23 +572,6 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
519
572
|
});
|
|
520
573
|
}
|
|
521
574
|
|
|
522
|
-
private renderSummaryBar(): LitTemplate {
|
|
523
|
-
const metadata = this.#metadata;
|
|
524
|
-
if (!metadata) {
|
|
525
|
-
return nothing;
|
|
526
|
-
}
|
|
527
|
-
// clang-format off
|
|
528
|
-
return html`
|
|
529
|
-
<div class="object-store-summary-bar">
|
|
530
|
-
<span>${i18nString(UIStrings.totalEntriesS, { PH1: String(metadata.entriesCount)})}</span>
|
|
531
|
-
${this.objectStore.autoIncrement ? html`
|
|
532
|
-
<span class="separator">\u2758</span>
|
|
533
|
-
<span>${i18nString(UIStrings.keyGeneratorValueS, {PH1: String(metadata.keyGeneratorValue)})}</span>`
|
|
534
|
-
: nothing}
|
|
535
|
-
</div>`;
|
|
536
|
-
// clang-format on
|
|
537
|
-
}
|
|
538
|
-
|
|
539
575
|
private updatedDataForTests(): void {
|
|
540
576
|
// Sniffed in tests.
|
|
541
577
|
}
|
|
@@ -548,6 +584,8 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
548
584
|
const ok =
|
|
549
585
|
await UI.UIUtils.ConfirmDialog.show(i18nString(UIStrings.objectStoreWillBeCleared),
|
|
550
586
|
i18nString(UIStrings.confirmClearObjectStore, {PH1: this.objectStore.name}),
|
|
587
|
+
// TODO(b/407750537): Fix the linter false positive
|
|
588
|
+
// eslint-disable-next-line @devtools/no-imperative-dom-api
|
|
551
589
|
this.element, {jslogContext: 'clear-object-store-confirmation'});
|
|
552
590
|
if (ok) {
|
|
553
591
|
this.#clearButtonEnabled = false;
|
|
@@ -622,22 +660,72 @@ export class IDBDataView extends UI.View.SimpleView {
|
|
|
622
660
|
}
|
|
623
661
|
|
|
624
662
|
override performUpdate(): void {
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
663
|
+
this.#view({
|
|
664
|
+
isIndex: this.isIndex,
|
|
665
|
+
index: this.index,
|
|
666
|
+
objectStore: this.objectStore,
|
|
667
|
+
entries: this.entries,
|
|
668
|
+
skipCount: this.skipCount,
|
|
669
|
+
selectedRowNumber: this.#selectedRowNumber,
|
|
670
|
+
clearButtonEnabled: this.#clearButtonEnabled,
|
|
671
|
+
hasMore: this.#hasMore,
|
|
672
|
+
keyFilter: this.#keyFilter,
|
|
673
|
+
needsRefreshVisible: this.#needsRefreshVisible,
|
|
674
|
+
metadata: this.#metadata,
|
|
675
|
+
refreshButtonClicked: this.refreshButtonClicked.bind(this),
|
|
676
|
+
clearButtonClicked: this.clearButtonClicked.bind(this),
|
|
677
|
+
deleteButtonClicked: this.deleteButtonClicked.bind(this),
|
|
678
|
+
pageBackButtonClicked: this.pageBackButtonClicked.bind(this),
|
|
679
|
+
pageForwardButtonClicked: this.pageForwardButtonClicked.bind(this),
|
|
680
|
+
onKeyFilterChange: (value: string) => {
|
|
681
|
+
this.#keyFilter = value;
|
|
682
|
+
this.updateData(false);
|
|
683
|
+
},
|
|
684
|
+
onRowSelected: this.onRowSelected.bind(this),
|
|
685
|
+
deleteEntry: this.deleteEntry.bind(this),
|
|
686
|
+
populateContextMenu: this.populateContextMenu.bind(this),
|
|
687
|
+
},
|
|
688
|
+
undefined, this.element);
|
|
635
689
|
}
|
|
636
690
|
}
|
|
637
691
|
|
|
692
|
+
interface ObjectPropertiesSectionWidgetInput {
|
|
693
|
+
value: SDK.RemoteObject.RemoteObject|null;
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
interface ObjectPropertiesSectionWidgetOutput {
|
|
697
|
+
objectPropSection: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection|null;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
type ObjectPropertiesSectionWidgetView = (
|
|
701
|
+
input: ObjectPropertiesSectionWidgetInput,
|
|
702
|
+
output: ObjectPropertiesSectionWidgetOutput,
|
|
703
|
+
target: HTMLElement,
|
|
704
|
+
) => void;
|
|
705
|
+
|
|
706
|
+
const OBJECT_PROPERTIES_SECTION_WIDGET_DEFAULT_VIEW: ObjectPropertiesSectionWidgetView = (input, output, target) => {
|
|
707
|
+
if (!input.value) {
|
|
708
|
+
output.objectPropSection = null;
|
|
709
|
+
render(nothing, target);
|
|
710
|
+
return;
|
|
711
|
+
}
|
|
712
|
+
const objectPropSection = ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection.defaultObjectPropertiesSection(
|
|
713
|
+
input.value, undefined /* linkifier */, true /* skipProto */, true /* readOnly */);
|
|
714
|
+
output.objectPropSection = objectPropSection;
|
|
715
|
+
|
|
716
|
+
const element = input.value.hasChildren ? objectPropSection.element : objectPropSection.titleElement;
|
|
717
|
+
render(html`${element}`, target);
|
|
718
|
+
};
|
|
719
|
+
|
|
638
720
|
class ObjectPropertiesSectionWidget extends UI.Widget.Widget {
|
|
639
721
|
#value: SDK.RemoteObject.RemoteObject|null = null;
|
|
640
722
|
#objectPropSection: ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection|null = null;
|
|
723
|
+
readonly #view: ObjectPropertiesSectionWidgetView;
|
|
724
|
+
|
|
725
|
+
constructor(element?: HTMLElement, view = OBJECT_PROPERTIES_SECTION_WIDGET_DEFAULT_VIEW) {
|
|
726
|
+
super(element);
|
|
727
|
+
this.#view = view;
|
|
728
|
+
}
|
|
641
729
|
|
|
642
730
|
set value(value: SDK.RemoteObject.RemoteObject|null) {
|
|
643
731
|
if (this.#value === value) {
|
|
@@ -652,20 +740,8 @@ class ObjectPropertiesSectionWidget extends UI.Widget.Widget {
|
|
|
652
740
|
}
|
|
653
741
|
|
|
654
742
|
override performUpdate(): void {
|
|
655
|
-
const
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
this.#objectPropSection = null;
|
|
659
|
-
return;
|
|
660
|
-
}
|
|
661
|
-
this.contentElement.removeChildren();
|
|
662
|
-
this.#objectPropSection = ObjectUI.ObjectPropertiesSection.ObjectPropertiesSection.defaultObjectPropertiesSection(
|
|
663
|
-
value, undefined /* linkifier */, true /* skipProto */, true /* readOnly */);
|
|
664
|
-
|
|
665
|
-
if (value.hasChildren) {
|
|
666
|
-
this.contentElement.appendChild(this.#objectPropSection.element);
|
|
667
|
-
} else {
|
|
668
|
-
this.contentElement.appendChild(this.#objectPropSection.titleElement);
|
|
669
|
-
}
|
|
743
|
+
const output: ObjectPropertiesSectionWidgetOutput = {objectPropSection: null};
|
|
744
|
+
this.#view({value: this.#value}, output, this.contentElement);
|
|
745
|
+
this.#objectPropSection = output.objectPropSection;
|
|
670
746
|
}
|
|
671
747
|
}
|
|
@@ -41,6 +41,8 @@ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
|
41
41
|
export class ServiceWorkerCacheTreeElement extends ExpandableApplicationPanelTreeElement {
|
|
42
42
|
private swCacheModels: Set<SDK.ServiceWorkerCacheModel.ServiceWorkerCacheModel>;
|
|
43
43
|
private swCacheTreeElements: Set<SWCacheTreeElement>;
|
|
44
|
+
private swCacheModelObserver?:
|
|
45
|
+
SDK.TargetManager.SDKModelObserver<SDK.ServiceWorkerCacheModel.ServiceWorkerCacheModel>;
|
|
44
46
|
private storageBucket?: Protocol.Storage.StorageBucket;
|
|
45
47
|
|
|
46
48
|
constructor(resourcesPanel: ResourcesPanel, storageBucket?: Protocol.Storage.StorageBucket) {
|
|
@@ -53,17 +55,25 @@ export class ServiceWorkerCacheTreeElement extends ExpandableApplicationPanelTre
|
|
|
53
55
|
this.swCacheModels = new Set();
|
|
54
56
|
this.swCacheTreeElements = new Set();
|
|
55
57
|
this.storageBucket = storageBucket;
|
|
58
|
+
this.initialize();
|
|
56
59
|
}
|
|
57
60
|
|
|
58
61
|
initialize(): void {
|
|
62
|
+
this.removeChildren();
|
|
59
63
|
this.swCacheModels.clear();
|
|
60
64
|
this.swCacheTreeElements.clear();
|
|
61
|
-
|
|
65
|
+
if (this.swCacheModelObserver) {
|
|
66
|
+
SDK.TargetManager.TargetManager.instance().unobserveModels(SDK.ServiceWorkerCacheModel.ServiceWorkerCacheModel,
|
|
67
|
+
this.swCacheModelObserver);
|
|
68
|
+
}
|
|
69
|
+
this.swCacheModelObserver = {
|
|
62
70
|
modelAdded: (model: SDK.ServiceWorkerCacheModel.ServiceWorkerCacheModel) =>
|
|
63
71
|
this.serviceWorkerCacheModelAdded(model),
|
|
64
72
|
modelRemoved: (model: SDK.ServiceWorkerCacheModel.ServiceWorkerCacheModel) =>
|
|
65
73
|
this.serviceWorkerCacheModelRemoved(model),
|
|
66
|
-
}
|
|
74
|
+
};
|
|
75
|
+
SDK.TargetManager.TargetManager.instance().observeModels(SDK.ServiceWorkerCacheModel.ServiceWorkerCacheModel,
|
|
76
|
+
this.swCacheModelObserver, {scoped: true});
|
|
67
77
|
}
|
|
68
78
|
|
|
69
79
|
override onattach(): void {
|
|
@@ -9,8 +9,8 @@ import * as Common from '../../core/common/common.js';
|
|
|
9
9
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
10
10
|
import * as Platform from '../../core/platform/platform.js';
|
|
11
11
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
12
|
+
import * as TextUtils from '../../core/text_utils/text_utils.js';
|
|
12
13
|
import type * as Protocol from '../../generated/protocol.js';
|
|
13
|
-
import * as TextUtils from '../../models/text_utils/text_utils.js';
|
|
14
14
|
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
|
|
15
15
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
16
16
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
@@ -227,16 +227,6 @@ export class SharedStorageModel extends SDK.SDKModel.SDKModel<EventTypes> implem
|
|
|
227
227
|
cacheStorageContentUpdated(_event: Protocol.Storage.CacheStorageContentUpdatedEvent): void {
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
interestGroupAccessed(_event: Protocol.Storage.InterestGroupAccessedEvent): void {
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
interestGroupAuctionEventOccurred(_event: Protocol.Storage.InterestGroupAuctionEventOccurredEvent): void {
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
interestGroupAuctionNetworkRequestCreated(_event: Protocol.Storage.InterestGroupAuctionNetworkRequestCreatedEvent):
|
|
237
|
-
void {
|
|
238
|
-
}
|
|
239
|
-
|
|
240
230
|
storageBucketCreatedOrUpdated(_event: Protocol.Storage.StorageBucketCreatedOrUpdatedEvent): void {
|
|
241
231
|
}
|
|
242
232
|
|
|
@@ -26,6 +26,7 @@ import * as PreloadingTreeElement from './PreloadingTreeElement.js';
|
|
|
26
26
|
import * as ReportingApiTreeElement from './ReportingApiTreeElement.js';
|
|
27
27
|
import * as ReportingApiView from './ReportingApiView.js';
|
|
28
28
|
import * as ResourcesPanel from './ResourcesPanel.js';
|
|
29
|
+
import * as ServiceWorkerCacheTreeElement from './ServiceWorkerCacheTreeElement.js';
|
|
29
30
|
import * as ServiceWorkerCacheViews from './ServiceWorkerCacheViews.js';
|
|
30
31
|
import * as ServiceWorkersView from './ServiceWorkersView.js';
|
|
31
32
|
import * as ServiceWorkerUpdateCycleView from './ServiceWorkerUpdateCycleView.js';
|
|
@@ -67,6 +68,7 @@ export {
|
|
|
67
68
|
ReportingApiTreeElement,
|
|
68
69
|
ReportingApiView,
|
|
69
70
|
ResourcesPanel,
|
|
71
|
+
ServiceWorkerCacheTreeElement,
|
|
70
72
|
ServiceWorkerCacheViews,
|
|
71
73
|
ServiceWorkersView,
|
|
72
74
|
ServiceWorkerUpdateCycleView,
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import '../../../ui/legacy/components/data_grid/data_grid.js';
|
|
6
6
|
|
|
7
|
+
import * as Common from '../../../core/common/common.js';
|
|
7
8
|
import * as i18n from '../../../core/i18n/i18n.js';
|
|
8
9
|
import * as SDK from '../../../core/sdk/sdk.js';
|
|
9
10
|
import type * as Protocol from '../../../generated/protocol.js';
|
|
@@ -14,6 +15,7 @@ import * as VisualLogging from '../../../ui/visual_logging/visual_logging.js';
|
|
|
14
15
|
import adsViewStyles from './adsView.css.js';
|
|
15
16
|
|
|
16
17
|
const {html} = Lit;
|
|
18
|
+
const {bindToSetting} = UI.UIUtils;
|
|
17
19
|
|
|
18
20
|
const UIStrings = {
|
|
19
21
|
/**
|
|
@@ -74,6 +76,19 @@ const UIStrings = {
|
|
|
74
76
|
* @description Accessible name for the ad iframes table.
|
|
75
77
|
*/
|
|
76
78
|
adIframes: 'Ad iframes',
|
|
79
|
+
/**
|
|
80
|
+
* @description Title for the settings section.
|
|
81
|
+
*/
|
|
82
|
+
settings: 'Settings',
|
|
83
|
+
/**
|
|
84
|
+
* @description The name of a checkbox setting. This setting highlights the
|
|
85
|
+
* rendering elements for ads that are found on the page.
|
|
86
|
+
*/
|
|
87
|
+
highlightAds: 'Highlight ads',
|
|
88
|
+
/**
|
|
89
|
+
* @description Explanation text for the 'Highlight ads' setting.
|
|
90
|
+
*/
|
|
91
|
+
highlightsElementsRedDetectedToBe: 'Highlights elements (red) detected to be ads.',
|
|
77
92
|
} as const;
|
|
78
93
|
|
|
79
94
|
const str_ = i18n.i18n.registerUIStrings('panels/application/components/AdsView.ts', UIStrings);
|
|
@@ -206,6 +221,14 @@ const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
206
221
|
</table>
|
|
207
222
|
</devtools-data-grid>
|
|
208
223
|
</div>
|
|
224
|
+
<div class="settings-title">${i18nString(UIStrings.settings)}</div>
|
|
225
|
+
<devtools-checkbox class="setting-container"
|
|
226
|
+
${bindToSetting(Common.Settings.Settings.instance().moduleSetting('show-ad-highlights'))}>
|
|
227
|
+
<div class="setting-text-container">
|
|
228
|
+
<div class="setting-label">${i18nString(UIStrings.highlightAds)}</div>
|
|
229
|
+
<div class="setting-explanation">${i18nString(UIStrings.highlightsElementsRedDetectedToBe)}</div>
|
|
230
|
+
</div>
|
|
231
|
+
</devtools-checkbox>
|
|
209
232
|
</div>
|
|
210
233
|
`, target);
|
|
211
234
|
// clang-format on
|