chrome-devtools-frontend 1.0.1657110 → 1.0.1660788
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/devtools-ux-writing-refactor/SKILL.md +125 -0
- package/.agents/skills/migrate-chromium-test/SKILL.md +15 -70
- package/.agents/skills/repro-flaky-tests/SKILL.md +53 -0
- package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +37 -18
- package/.agents/skills/version-control/SKILL.md +8 -1
- package/AUTHORS +1 -0
- package/SECURITY.md +3 -0
- package/docs/get_the_code.md +6 -0
- package/front_end/Images/src/ads.svg +1 -0
- package/front_end/Tests.js +6 -6
- package/front_end/core/common/Gzip.ts +12 -5
- package/front_end/core/common/ResourceType.ts +19 -19
- package/front_end/core/common/Revealer.ts +15 -15
- package/front_end/core/common/SettingRegistration.ts +19 -19
- package/front_end/core/host/AidaClient.ts +35 -9
- package/front_end/core/host/GdpClient.ts +10 -7
- package/front_end/core/platform/StringUtilities.ts +35 -0
- package/front_end/core/sdk/AccessibilityModel.snapshot.txt +17 -0
- package/front_end/core/sdk/AccessibilityModel.ts +132 -2
- package/front_end/core/sdk/CPUThrottlingManager.ts +8 -5
- package/front_end/core/sdk/CSSMetadata.ts +110 -16
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +2 -5
- package/front_end/core/sdk/ConsoleModel.ts +5 -5
- package/front_end/core/sdk/DOMDebuggerModel.ts +5 -1
- package/front_end/core/sdk/DOMModel.ts +32 -18
- package/front_end/core/sdk/NetworkManager.ts +58 -14
- package/front_end/core/sdk/NetworkRequest.ts +37 -1
- package/front_end/core/sdk/OverlayModel.ts +45 -6
- package/front_end/core/sdk/ResourceTreeModel.ts +6 -7
- package/front_end/core/sdk/ScreenCaptureModel.ts +2 -2
- package/front_end/core/sdk/ServerTiming.ts +17 -13
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +4 -2
- package/front_end/core/sdk/ServiceWorkerManager.ts +19 -5
- package/front_end/core/sdk/TargetManager.ts +10 -1
- package/front_end/core/sdk/TraceObject.ts +4 -2
- package/front_end/core/sdk/sdk-meta.ts +170 -0
- package/front_end/design_system_tokens.css +0 -5
- package/front_end/entrypoints/devtools_app/devtools_app.ts +1 -1
- package/front_end/entrypoints/formatter_worker/CSSFormatter.ts +13 -4
- package/front_end/entrypoints/formatter_worker/FormattedContentBuilder.ts +5 -2
- package/front_end/entrypoints/formatter_worker/FormatterWorker.ts +23 -4
- package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +33 -10
- package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +8 -3
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +4 -4
- package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +2 -2
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +36 -37
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +15 -33
- package/front_end/entrypoints/js_app/js_app.ts +6 -5
- package/front_end/entrypoints/main/GlobalAiButton.ts +4 -4
- package/front_end/entrypoints/main/MainImpl.ts +25 -55
- package/front_end/entrypoints/main/main-meta.ts +50 -50
- package/front_end/entrypoints/node_app/app/NodeConnectionsPanel.ts +5 -5
- package/front_end/entrypoints/node_app/app/NodeMain.ts +3 -3
- package/front_end/entrypoints/node_app/node_app.ts +10 -9
- package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
- package/front_end/foundation/Universe.ts +76 -6
- package/front_end/generated/InspectorBackendCommands.ts +3 -3
- package/front_end/generated/SupportedCSSProperties.js +19 -12
- package/front_end/generated/protocol.ts +7 -1
- package/front_end/models/ai_assistance/AiConversation.ts +19 -17
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +37 -14
- package/front_end/models/ai_assistance/AiUtils.ts +38 -42
- package/front_end/models/ai_assistance/agents/AiAgent.ts +5 -1
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +3 -2
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -1
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +7 -5
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +270 -286
- package/front_end/models/ai_assistance/data_formatters/UnitFormatters.ts +20 -0
- package/front_end/models/ai_assistance/performance/AICallTree.ts +3 -1
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +3 -2
- package/front_end/models/autofill_manager/AutofillManager.ts +3 -1
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +8 -5
- package/front_end/models/bindings/CompilerScriptMapping.ts +2 -1
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +15 -16
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +6 -4
- package/front_end/models/bindings/FileUtils.ts +11 -12
- package/front_end/models/bindings/NetworkProject.ts +4 -0
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +2 -1
- package/front_end/models/bindings/ResourceUtils.ts +1 -1
- package/front_end/models/bindings/SASSSourceMapping.ts +8 -5
- package/front_end/models/emulation/DeviceModeModel.ts +14 -14
- package/front_end/models/emulation/EmulatedDevices.ts +392 -11
- package/front_end/models/extensions/ExtensionAPI.ts +6 -6
- package/front_end/models/extensions/LanguageExtensionEndpoint.ts +13 -12
- package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
- package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
- package/front_end/models/issues_manager/ConnectionAllowlistIssue.ts +1 -1
- package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +7 -7
- package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +2 -2
- package/front_end/models/issues_manager/CookieIssue.ts +6 -7
- package/front_end/models/issues_manager/CorsIssue.ts +3 -3
- package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
- package/front_end/models/issues_manager/DeprecationIssue.ts +3 -3
- package/front_end/models/issues_manager/EmailVerificationRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/GenericIssue.ts +7 -7
- package/front_end/models/issues_manager/HeavyAdIssue.ts +3 -3
- package/front_end/models/issues_manager/Issue.ts +8 -8
- package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
- package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +3 -3
- package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
- package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +2 -2
- package/front_end/models/issues_manager/SelectivePermissionsInterventionIssue.ts +2 -2
- package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +2 -2
- package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
- package/front_end/models/issues_manager/UnencodedDigestIssue.ts +3 -3
- package/front_end/models/javascript_metadata/NativeFunctions.js +5 -1
- package/front_end/models/stack_trace/StackTraceModel.ts +3 -3
- package/front_end/models/text_utils/ContentData.ts +27 -0
- package/front_end/models/trace/helpers/SamplesIntegrator.ts +21 -5
- package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +29 -14
- package/front_end/models/web_mcp/WebMCPModel.ts +24 -6
- package/front_end/models/workspace/IgnoreListManager.ts +6 -6
- package/front_end/models/workspace/UISourceCode.ts +3 -3
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +23 -12
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +25 -22
- package/front_end/panels/ai_assistance/ExportConversation.ts +3 -4
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +3 -3
- package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -0
- package/front_end/panels/ai_assistance/components/DisabledWidget.ts +2 -2
- package/front_end/panels/animation/AnimationTimeline.ts +17 -19
- package/front_end/panels/animation/AnimationUI.ts +5 -5
- package/front_end/panels/animation/animation-meta.ts +2 -2
- package/front_end/panels/application/ApplicationPanelSidebar.ts +13 -4
- package/front_end/panels/application/BackgroundServiceView.ts +2 -1
- package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -6
- package/front_end/panels/application/IndexedDBViews.ts +245 -262
- package/front_end/panels/application/OpenedWindowDetailsView.ts +1 -1
- package/front_end/panels/application/ResourcesPanel.ts +9 -2
- package/front_end/panels/application/ServiceWorkersView.ts +252 -211
- package/front_end/panels/application/StorageView.ts +97 -33
- package/front_end/panels/application/WebMCPView.ts +15 -1
- package/front_end/panels/application/components/AdsView.ts +1 -1
- package/front_end/panels/application/indexedDBViews.css +38 -9
- package/front_end/panels/application/preloading/helper/PreloadingForward.ts +2 -1
- package/front_end/panels/application/resourcesSidebar.css +5 -0
- package/front_end/panels/application/storageView.css +26 -9
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +5 -1
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +8 -6
- package/front_end/panels/common/DOMLinkifier.ts +1 -1
- package/front_end/panels/common/ExtensionServer.ts +119 -14
- package/front_end/panels/console/ConsoleContextSelector.ts +4 -4
- package/front_end/panels/console/ConsolePinPane.ts +12 -12
- package/front_end/panels/console/ConsolePrompt.ts +6 -6
- package/front_end/panels/console/ConsoleSidebar.ts +7 -7
- package/front_end/panels/console/ConsoleView.ts +45 -44
- package/front_end/panels/console/ConsoleViewMessage.ts +40 -40
- package/front_end/panels/console/SymbolizedErrorWidget.ts +2 -1
- package/front_end/panels/console/console-meta.ts +34 -34
- package/front_end/panels/console_counters/WarningErrorCounter.ts +2 -2
- package/front_end/panels/coverage/CoverageListView.ts +28 -28
- package/front_end/panels/coverage/CoverageModel.ts +2 -1
- package/front_end/panels/coverage/CoverageView.ts +23 -23
- package/front_end/panels/coverage/coverage-meta.ts +5 -5
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +36 -36
- package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +2 -2
- package/front_end/panels/css_overview/CSSOverviewStartView.ts +6 -6
- package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +6 -6
- package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
- package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +20 -21
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +6 -8
- package/front_end/panels/developer_resources/developer_resources-meta.ts +2 -2
- package/front_end/panels/elements/AccessibilityTreeUtils.ts +8 -102
- package/front_end/panels/elements/AccessibilityTreeView.ts +163 -70
- package/front_end/panels/elements/ElementsPanel.ts +17 -11
- package/front_end/panels/elements/ElementsTreeElement.ts +49 -2
- package/front_end/panels/elements/ElementsTreeOutline.ts +4 -4
- package/front_end/panels/elements/LayoutPane.ts +1 -1
- package/front_end/panels/elements/MetricsSidebarPane.ts +100 -34
- package/front_end/panels/elements/StylePropertiesSection.ts +2 -2
- package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -2
- package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
- package/front_end/panels/elements/components/AccessibilityTreeNode.ts +7 -18
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -2
- package/front_end/panels/elements/components/QueryContainer.ts +1 -1
- package/front_end/panels/issues/AffectedDirectivesView.ts +1 -1
- package/front_end/panels/issues/AffectedResourcesView.ts +2 -1
- package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
- package/front_end/panels/media/EventDisplayTable.ts +2 -2
- package/front_end/panels/media/EventTimelineView.ts +4 -4
- package/front_end/panels/media/MainView.ts +4 -4
- package/front_end/panels/media/PlayerDetailView.ts +5 -5
- package/front_end/panels/media/PlayerListView.ts +1 -1
- package/front_end/panels/media/PlayerMessagesView.ts +12 -12
- package/front_end/panels/media/PlayerPropertiesView.ts +17 -17
- package/front_end/panels/network/NetworkDataGridNode.ts +124 -36
- package/front_end/panels/network/NetworkLogView.ts +11 -2
- package/front_end/panels/network/NetworkLogViewColumns.ts +18 -0
- package/front_end/panels/network/NetworkPanel.ts +2 -1
- package/front_end/panels/network/NetworkWaterfallColumn.ts +1 -3
- package/front_end/panels/network/RequestConditionsDrawer.ts +2 -2
- package/front_end/panels/network/RequestPayloadView.ts +53 -7
- package/front_end/panels/network/RequestPreviewView.ts +7 -1
- package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
- package/front_end/panels/network/forward/UIFilter.ts +1 -0
- package/front_end/panels/network/networkPanel.css +1 -0
- package/front_end/panels/network/networkTimingTable.css +1 -1
- package/front_end/panels/network/requestPayloadView.css +10 -0
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +12 -12
- package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +2 -2
- package/front_end/panels/profiler/HeapProfileView.ts +563 -51
- package/front_end/panels/profiler/HeapSnapshotView.ts +15 -9
- package/front_end/panels/profiler/ProfilesPanel.ts +13 -7
- package/front_end/panels/profiler/WritableProfileHeader.ts +152 -0
- package/front_end/panels/profiler/profiler.ts +2 -2
- package/front_end/panels/protocol_monitor/JSONEditor.ts +10 -10
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +28 -32
- package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
- package/front_end/panels/recorder/RecorderController.ts +15 -15
- package/front_end/panels/recorder/RecorderEvents.ts +8 -0
- package/front_end/panels/recorder/components/CreateRecordingView.ts +11 -11
- package/front_end/panels/recorder/components/ExtensionView.ts +74 -83
- package/front_end/panels/recorder/components/RecordingListView.ts +3 -3
- package/front_end/panels/recorder/components/RecordingView.ts +13 -10
- package/front_end/panels/recorder/components/ReplaySection.ts +9 -9
- package/front_end/panels/recorder/components/StepEditor.ts +352 -321
- package/front_end/panels/recorder/components/StepView.ts +36 -37
- package/front_end/panels/recorder/components/recordingView.css +1 -1
- package/front_end/panels/recorder/models/RecorderSettings.ts +2 -2
- package/front_end/panels/recorder/recorder-meta.ts +7 -7
- package/front_end/panels/screencast/ScreencastApp.ts +1 -1
- package/front_end/panels/screencast/ScreencastView.ts +12 -12
- package/front_end/panels/search/SearchResultsPane.ts +4 -4
- package/front_end/panels/search/SearchView.ts +20 -20
- package/front_end/panels/security/SecurityModel.ts +7 -7
- package/front_end/panels/security/SecurityPanel.ts +99 -107
- package/front_end/panels/security/SecurityPanelSidebar.ts +7 -7
- package/front_end/panels/security/security-meta.ts +2 -2
- package/front_end/panels/sensors/LocationsSettingsTab.ts +19 -19
- package/front_end/panels/sensors/SensorsView.ts +27 -27
- package/front_end/panels/sensors/sensors-meta.ts +13 -167
- package/front_end/panels/settings/AISettingsTab.ts +98 -56
- package/front_end/panels/settings/EditFileSystemView.ts +2 -2
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +20 -20
- package/front_end/panels/settings/KeybindsSettingsTab.ts +20 -21
- package/front_end/panels/settings/SettingsScreen.ts +11 -11
- package/front_end/panels/settings/WorkspaceSettingsTab.ts +5 -5
- package/front_end/panels/settings/components/SyncSection.ts +12 -12
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +13 -13
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +31 -31
- package/front_end/panels/settings/emulation/emulation-meta.ts +1 -1
- package/front_end/panels/settings/settings-meta.ts +14 -14
- package/front_end/panels/sources/NavigatorView.ts +7 -6
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +83 -37
- package/front_end/panels/sources/SourcesNavigator.ts +20 -18
- package/front_end/panels/sources/SourcesView.ts +10 -1
- package/front_end/panels/sources/scopeChainSidebarPane.css +12 -4
- package/front_end/panels/sources/sources-meta.ts +4 -4
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +5 -2
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +2 -1
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +2 -1
- package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.ts +2 -1
- package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +4 -2
- package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +4 -2
- package/front_end/panels/timeline/components/insights/ImageRef.ts +2 -1
- package/front_end/panels/utils/utils.ts +7 -3
- package/front_end/panels/web_audio/WebAudioView.ts +17 -18
- package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
- package/front_end/panels/webauthn/WebauthnPane.ts +10 -10
- package/front_end/panels/whats_new/ReleaseNoteView.ts +1 -1
- package/front_end/panels/whats_new/whats_new-meta.ts +11 -11
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/lit/lib/async-directive.d.ts +2 -1
- package/front_end/third_party/lit/lib/async-directive.js +1 -1
- package/front_end/third_party/lit/lib/async-directive.js.map +1 -1
- package/front_end/third_party/lit/lib/decorators.d.ts +2 -1
- package/front_end/third_party/lit/lib/decorators.js.map +1 -1
- package/front_end/third_party/lit/lib/directive.d.ts +2 -1
- package/front_end/third_party/lit/lib/directive.js.map +1 -1
- package/front_end/third_party/lit/lib/directives.d.ts +2 -1
- package/front_end/third_party/lit/lib/directives.js +8 -8
- package/front_end/third_party/lit/lib/directives.js.map +1 -1
- package/front_end/third_party/lit/lib/lit.d.ts +2 -1
- package/front_end/third_party/lit/lib/lit.js +1 -1
- package/front_end/third_party/lit/lib/lit.js.map +1 -1
- package/front_end/third_party/lit/lib/static-html.d.ts +2 -1
- package/front_end/third_party/lit/lib/static-html.js +1 -1
- package/front_end/third_party/lit/lib/static-html.js.map +1 -1
- package/front_end/third_party/lit/package.json +2 -2
- package/front_end/third_party/lit/rebuild.sh +1 -1
- package/front_end/third_party/lit/src/async-directive.ts +5 -0
- package/front_end/ui/components/dialogs/Dialog.ts +1 -1
- package/front_end/ui/components/dialogs/ShortcutDialog.ts +1 -1
- package/front_end/ui/components/dialogs/shortcutDialog.css +15 -12
- package/front_end/ui/components/diff_view/DiffView.ts +2 -2
- package/front_end/ui/components/issue_counter/IssueCounter.ts +3 -3
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +5 -5
- package/front_end/ui/components/lists/List.ts +2 -2
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
- package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +5 -5
- package/front_end/ui/components/settings/SettingCheckbox.ts +1 -1
- package/front_end/ui/components/snackbars/Snackbar.ts +1 -1
- package/front_end/ui/components/survey_link/SurveyLink.ts +3 -3
- package/front_end/ui/components/text_editor/config.ts +2 -2
- package/front_end/ui/components/tree_outline/TreeOutline.ts +34 -1
- package/front_end/ui/legacy/ReportView.ts +5 -0
- package/front_end/ui/legacy/Treeoutline.ts +18 -0
- package/front_end/ui/legacy/View.ts +1 -1
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +2 -0
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -3
- package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
- package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +100 -36
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +7 -1
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +5 -0
- package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -2
- package/front_end/ui/legacy/inspectorCommon.css +5 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +4 -0
- package/mcp/mcp.ts +2 -0
- package/package.json +4 -4
- package/front_end/panels/profiler/ProfileView.ts +0 -610
|
@@ -131,7 +131,7 @@ async function maybeCreateLinkToElementsPanel(
|
|
|
131
131
|
}
|
|
132
132
|
});
|
|
133
133
|
linkElement.addEventListener('mouseleave', () => {
|
|
134
|
-
SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight();
|
|
134
|
+
SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(SDK.TargetManager.TargetManager.instance());
|
|
135
135
|
});
|
|
136
136
|
return linkElement;
|
|
137
137
|
}
|
|
@@ -9,6 +9,7 @@ import * as Platform from '../../core/platform/platform.js';
|
|
|
9
9
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
10
10
|
import * as SourceFrame from '../../ui/legacy/components/source_frame/source_frame.js';
|
|
11
11
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
12
|
+
import {render} from '../../ui/lit/lit.js';
|
|
12
13
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
13
14
|
|
|
14
15
|
import {ApplicationPanelSidebar, StorageCategoryView} from './ApplicationPanelSidebar.js';
|
|
@@ -135,8 +136,14 @@ export class ResourcesPanel extends UI.Panel.PanelWithSidebar {
|
|
|
135
136
|
this.storageViewToolbar.classList.toggle('hidden', true);
|
|
136
137
|
if (view instanceof UI.View.SimpleView) {
|
|
137
138
|
void view.toolbarItems().then(items => {
|
|
138
|
-
|
|
139
|
-
|
|
139
|
+
if (Array.isArray(items)) {
|
|
140
|
+
items.map(item => this.storageViewToolbar.appendToolbarItem(item));
|
|
141
|
+
this.storageViewToolbar.classList.toggle('hidden', !items.length);
|
|
142
|
+
} else {
|
|
143
|
+
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
144
|
+
render(items, this.storageViewToolbar);
|
|
145
|
+
this.storageViewToolbar.classList.toggle('hidden', false);
|
|
146
|
+
}
|
|
140
147
|
});
|
|
141
148
|
}
|
|
142
149
|
}
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
/* eslint-disable @devtools/no-imperative-dom-api */
|
|
5
5
|
|
|
6
|
+
import '../../ui/components/report_view/report_view.js';
|
|
7
|
+
import '../../ui/kit/kit.js';
|
|
8
|
+
|
|
6
9
|
import * as Common from '../../core/common/common.js';
|
|
7
10
|
import * as Host from '../../core/host/host.js';
|
|
8
11
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
@@ -10,10 +13,9 @@ import * as SDK from '../../core/sdk/sdk.js';
|
|
|
10
13
|
import type * as Protocol from '../../generated/protocol.js';
|
|
11
14
|
import * as NetworkForward from '../../panels/network/forward/forward.js';
|
|
12
15
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
13
|
-
import {Link} from '../../ui/kit/kit.js';
|
|
14
16
|
import * as Components from '../../ui/legacy/components/utils/utils.js';
|
|
15
17
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
16
|
-
import {html, type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
|
|
18
|
+
import {Directives, html, type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
|
|
17
19
|
import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
|
|
18
20
|
import * as MobileThrottling from '../mobile_throttling/mobile_throttling.js';
|
|
19
21
|
|
|
@@ -180,6 +182,10 @@ const UIStrings = {
|
|
|
180
182
|
} as const;
|
|
181
183
|
const str_ = i18n.i18n.registerUIStrings('panels/application/ServiceWorkersView.ts', UIStrings);
|
|
182
184
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
185
|
+
const {until} = Directives;
|
|
186
|
+
const {widget} = UI.Widget;
|
|
187
|
+
const {bindToSetting} = UI.UIUtils;
|
|
188
|
+
|
|
183
189
|
let throttleDisabledForDebugging = false;
|
|
184
190
|
export const setThrottleDisabledForDebugging = (enable: boolean): void => {
|
|
185
191
|
throttleDisabledForDebugging = enable;
|
|
@@ -188,7 +194,6 @@ export const setThrottleDisabledForDebugging = (enable: boolean): void => {
|
|
|
188
194
|
export class ServiceWorkersView extends UI.Widget.VBox implements
|
|
189
195
|
SDK.TargetManager.SDKModelObserver<SDK.ServiceWorkerManager.ServiceWorkerManager> {
|
|
190
196
|
currentWorkersView: UI.ReportView.ReportView;
|
|
191
|
-
private readonly toolbar: UI.Toolbar.Toolbar;
|
|
192
197
|
private readonly sections: Map<SDK.ServiceWorkerManager.ServiceWorkerRegistration, Section>;
|
|
193
198
|
private manager: SDK.ServiceWorkerManager.ServiceWorkerManager|null;
|
|
194
199
|
private securityOriginManager: SDK.SecurityOriginManager.SecurityOriginManager|null;
|
|
@@ -212,8 +217,6 @@ export class ServiceWorkersView extends UI.Widget.VBox implements
|
|
|
212
217
|
this.currentWorkersView.element.classList.add('service-workers-this-origin');
|
|
213
218
|
this.currentWorkersView.element.setAttribute('jslog', `${VisualLogging.section('this-origin')}`);
|
|
214
219
|
|
|
215
|
-
this.toolbar = this.currentWorkersView.createToolbar();
|
|
216
|
-
|
|
217
220
|
this.sections = new Map();
|
|
218
221
|
|
|
219
222
|
this.manager = null;
|
|
@@ -230,34 +233,44 @@ export class ServiceWorkersView extends UI.Widget.VBox implements
|
|
|
230
233
|
}
|
|
231
234
|
|
|
232
235
|
private createOthersOriginView(): void {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
236
|
+
// clang-format off
|
|
237
|
+
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
238
|
+
render(html`<div class="service-workers-other-origin"
|
|
239
|
+
jslog=${VisualLogging.section('other-origin')}>
|
|
240
|
+
<devtools-report>
|
|
241
|
+
<devtools-report-section-header>
|
|
242
|
+
${i18nString(UIStrings.serviceWorkersFromOtherOrigins)}
|
|
243
|
+
</devtools-report-section-header>
|
|
244
|
+
<devtools-report-section>
|
|
245
|
+
<devtools-link href="chrome://serviceworker-internals"
|
|
246
|
+
jslogcontext="view-all"
|
|
247
|
+
.allowPrivileged=${true}>
|
|
248
|
+
${i18nString(UIStrings.seeAllRegistrations)}
|
|
249
|
+
</devtools-link>
|
|
250
|
+
</devtools-report-section>
|
|
251
|
+
</devtools-report>
|
|
252
|
+
</div>`, this.contentElement);
|
|
253
|
+
// clang-format on
|
|
244
254
|
}
|
|
245
|
-
|
|
246
255
|
private setupToolbar(): void {
|
|
247
|
-
this.toolbar.appendToolbarItem(
|
|
248
|
-
MobileThrottling.ThrottlingManager.throttlingManager().createOfflineToolbarCheckbox());
|
|
249
256
|
const updateOnReloadSetting =
|
|
250
257
|
Common.Settings.Settings.instance().createSetting('service-worker-update-on-reload', false);
|
|
251
|
-
updateOnReloadSetting.setTitle(i18nString(UIStrings.updateOnReload));
|
|
252
|
-
const forceUpdate =
|
|
253
|
-
new UI.Toolbar.ToolbarSettingCheckbox(updateOnReloadSetting, i18nString(UIStrings.onPageReloadForceTheService));
|
|
254
|
-
this.toolbar.appendToolbarItem(forceUpdate);
|
|
255
258
|
const bypassServiceWorkerSetting =
|
|
256
259
|
Common.Settings.Settings.instance().createSetting('bypass-service-worker', false);
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
260
|
+
// clang-format off
|
|
261
|
+
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
262
|
+
render(html`<devtools-toolbar class="service-worker-toolbar">
|
|
263
|
+
${MobileThrottling.ThrottlingManager.throttlingManager().createOfflineToolbarCheckbox().element}
|
|
264
|
+
<devtools-checkbox title=${i18nString(UIStrings.onPageReloadForceTheService)}
|
|
265
|
+
${bindToSetting(updateOnReloadSetting)}>
|
|
266
|
+
${i18nString(UIStrings.updateOnReload)}
|
|
267
|
+
</devtools-checkbox>
|
|
268
|
+
<devtools-checkbox title=${i18nString(UIStrings.bypassTheServiceWorkerAndLoad)}
|
|
269
|
+
${bindToSetting(bypassServiceWorkerSetting)}>
|
|
270
|
+
${i18nString(UIStrings.bypassForNetwork)}
|
|
271
|
+
</devtools-checkbox>
|
|
272
|
+
</devtools-toolbar>`, this.currentWorkersView.getHeaderElement() as HTMLElement);
|
|
273
|
+
// clang-format on
|
|
261
274
|
}
|
|
262
275
|
|
|
263
276
|
modelAdded(serviceWorkerManager: SDK.ServiceWorkerManager.ServiceWorkerManager): void {
|
|
@@ -451,7 +464,7 @@ export class ServiceWorkersView extends UI.Widget.VBox implements
|
|
|
451
464
|
}
|
|
452
465
|
}
|
|
453
466
|
|
|
454
|
-
export class Section {
|
|
467
|
+
export class Section extends UI.Widget.VBox {
|
|
455
468
|
private manager: SDK.ServiceWorkerManager.ServiceWorkerManager;
|
|
456
469
|
section: UI.ReportView.Section;
|
|
457
470
|
registration: SDK.ServiceWorkerManager.ServiceWorkerRegistration;
|
|
@@ -460,20 +473,12 @@ export class Section {
|
|
|
460
473
|
private readonly syncTagNameSetting: Common.Settings.Setting<string>;
|
|
461
474
|
private readonly periodicSyncTagNameSetting: Common.Settings.Setting<string>;
|
|
462
475
|
private readonly updateCycleView: ServiceWorkerUpdateCycleView;
|
|
463
|
-
private readonly routerView: ApplicationComponents.ServiceWorkerRouterView.ServiceWorkerRouterView;
|
|
464
|
-
private readonly networkRequests: Buttons.Button.Button;
|
|
465
|
-
private readonly updateButton: Buttons.Button.Button;
|
|
466
|
-
private readonly deleteButton: Buttons.Button.Button;
|
|
467
|
-
private sourceField: HTMLElement;
|
|
468
|
-
private readonly statusField: HTMLElement;
|
|
469
|
-
private readonly clientsField: HTMLElement;
|
|
470
476
|
private readonly clientInfoCache: Map<string, Protocol.Target.TargetInfo>;
|
|
471
477
|
private readonly throttler: Common.Throttler.Throttler;
|
|
472
|
-
private updateCycleField?: HTMLElement;
|
|
473
|
-
private routerField?: HTMLElement;
|
|
474
478
|
|
|
475
479
|
constructor(manager: SDK.ServiceWorkerManager.ServiceWorkerManager, section: UI.ReportView.Section,
|
|
476
480
|
registration: SDK.ServiceWorkerManager.ServiceWorkerRegistration) {
|
|
481
|
+
super();
|
|
477
482
|
this.manager = manager;
|
|
478
483
|
this.section = section;
|
|
479
484
|
this.registration = registration;
|
|
@@ -486,76 +491,76 @@ export class Section {
|
|
|
486
491
|
Common.Settings.Settings.instance().createLocalSetting('periodic-sync-tag-name', 'test-tag-from-devtools');
|
|
487
492
|
|
|
488
493
|
this.updateCycleView = new ServiceWorkerUpdateCycleView(registration);
|
|
489
|
-
|
|
490
|
-
this.
|
|
491
|
-
this.
|
|
492
|
-
variant: Buttons.Button.Variant.TEXT,
|
|
493
|
-
title: i18nString(UIStrings.networkRequests),
|
|
494
|
-
jslogContext: 'show-network-requests',
|
|
495
|
-
};
|
|
496
|
-
this.networkRequests.textContent = i18nString(UIStrings.networkRequests);
|
|
497
|
-
this.networkRequests.addEventListener('click', this.networkRequestsClicked.bind(this));
|
|
498
|
-
this.section.appendButtonToHeader(this.networkRequests);
|
|
499
|
-
this.updateButton = UI.UIUtils.createTextButton(
|
|
500
|
-
i18nString(UIStrings.update), this.updateButtonClicked.bind(this),
|
|
501
|
-
{variant: Buttons.Button.Variant.TEXT, title: i18nString(UIStrings.update), jslogContext: 'update'});
|
|
502
|
-
this.section.appendButtonToHeader(this.updateButton);
|
|
503
|
-
this.deleteButton =
|
|
504
|
-
UI.UIUtils.createTextButton(i18nString(UIStrings.unregister), this.unregisterButtonClicked.bind(this), {
|
|
505
|
-
variant: Buttons.Button.Variant.TEXT,
|
|
506
|
-
title: i18nString(UIStrings.unregisterServiceWorker),
|
|
507
|
-
jslogContext: 'unregister',
|
|
508
|
-
});
|
|
509
|
-
this.section.appendButtonToHeader(this.deleteButton);
|
|
510
|
-
|
|
511
|
-
// Preserve the order.
|
|
512
|
-
this.sourceField = this.section.appendField(i18nString(UIStrings.source));
|
|
513
|
-
this.statusField = this.section.appendField(i18nString(UIStrings.status));
|
|
514
|
-
this.clientsField = this.section.appendField(i18nString(UIStrings.clients));
|
|
515
|
-
|
|
516
|
-
UI.DOMUtilities.appendStyle(this.section.getFieldElement(), serviceWorkersViewStyles,
|
|
517
|
-
serviceWorkerUpdateCycleViewStyles);
|
|
518
|
-
this.createSyncNotificationField(i18nString(UIStrings.pushString), this.pushNotificationDataSetting.get(),
|
|
519
|
-
i18nString(UIStrings.pushData), this.push.bind(this), 'push-message');
|
|
520
|
-
this.createSyncNotificationField(i18nString(UIStrings.syncString), this.syncTagNameSetting.get(),
|
|
521
|
-
i18nString(UIStrings.syncTag), this.sync.bind(this), 'sync-tag');
|
|
522
|
-
this.createSyncNotificationField(i18nString(UIStrings.periodicSync), this.periodicSyncTagNameSetting.get(),
|
|
523
|
-
i18nString(UIStrings.periodicSyncTag), tag => this.periodicSync(tag),
|
|
524
|
-
'periodic-sync-tag');
|
|
525
|
-
this.createUpdateCycleField();
|
|
526
|
-
this.maybeCreateRouterField();
|
|
494
|
+
|
|
495
|
+
this.registerRequiredCSS(serviceWorkersViewStyles, serviceWorkerUpdateCycleViewStyles);
|
|
496
|
+
this.show(this.section.getFieldElement());
|
|
527
497
|
|
|
528
498
|
this.clientInfoCache = new Map();
|
|
529
499
|
this.throttler = new Common.Throttler.Throttler(500);
|
|
530
500
|
}
|
|
531
501
|
|
|
532
|
-
private
|
|
533
|
-
|
|
534
|
-
const fieldElement = this.section.appendField(label);
|
|
502
|
+
private renderHeaderButtons(): LitTemplate {
|
|
503
|
+
// clang-format off
|
|
535
504
|
|
|
505
|
+
return html`
|
|
506
|
+
<devtools-button .data=${{
|
|
507
|
+
variant: Buttons.Button.Variant.TEXT,
|
|
508
|
+
title: i18nString(UIStrings.networkRequests),
|
|
509
|
+
jslogContext: 'show-network-requests'
|
|
510
|
+
} as Buttons.Button.ButtonData}
|
|
511
|
+
.disabled=${this.registration.isDeleted}
|
|
512
|
+
@click=${this.networkRequestsClicked.bind(this)}>
|
|
513
|
+
${i18nString(UIStrings.networkRequests)}
|
|
514
|
+
</devtools-button>
|
|
515
|
+
<devtools-button .data=${{
|
|
516
|
+
variant: Buttons.Button.Variant.TEXT,
|
|
517
|
+
title: i18nString(UIStrings.update),
|
|
518
|
+
jslogContext: 'update'
|
|
519
|
+
} as Buttons.Button.ButtonData}
|
|
520
|
+
.disabled=${this.registration.isDeleted}
|
|
521
|
+
@click=${this.updateButtonClicked.bind(this)}>
|
|
522
|
+
${i18nString(UIStrings.update)}
|
|
523
|
+
</devtools-button>
|
|
524
|
+
<devtools-button .data=${{
|
|
525
|
+
variant: Buttons.Button.Variant.TEXT,
|
|
526
|
+
title: i18nString(UIStrings.unregisterServiceWorker),
|
|
527
|
+
jslogContext: 'unregister'
|
|
528
|
+
} as Buttons.Button.ButtonData}
|
|
529
|
+
.disabled=${this.registration.isDeleted}
|
|
530
|
+
@click=${this.unregisterButtonClicked.bind(this)}>
|
|
531
|
+
${i18nString(UIStrings.unregister)}
|
|
532
|
+
</devtools-button>`;
|
|
533
|
+
// clang-format on
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
private renderSyncNotificationField(label: string, initialValue: string, placeholder: string,
|
|
537
|
+
callback: (arg0: string) => void, jslogContext: string): LitTemplate {
|
|
536
538
|
// clang-format off
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
<
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
539
|
+
return html`
|
|
540
|
+
<div class="report-field">
|
|
541
|
+
<div class="report-field-name">${label}</div>
|
|
542
|
+
<div class="report-field-value">
|
|
543
|
+
<form class="service-worker-editor-with-button" @submit=${(e: Event) => {
|
|
544
|
+
const {editor} = e.target as HTMLFormElement;
|
|
545
|
+
callback(editor.value || '');
|
|
546
|
+
e.consume(true);
|
|
547
|
+
}}>
|
|
548
|
+
<input name="editor" class="source-code service-worker-notification-editor harmony-input" type="text"
|
|
549
|
+
.value=${initialValue}
|
|
550
|
+
placeholder=${placeholder}
|
|
551
|
+
aria-label=${label}
|
|
552
|
+
.spellcheck=${false}
|
|
553
|
+
jslog=${VisualLogging.textField().track({change: true}).context(jslogContext)}
|
|
554
|
+
>
|
|
555
|
+
<devtools-button .data=${{
|
|
556
|
+
type: 'submit',
|
|
557
|
+
variant: Buttons.Button.Variant.OUTLINED,
|
|
558
|
+
jslogContext} as Buttons.Button.ButtonData}>
|
|
559
|
+
${label}
|
|
560
|
+
</devtools-button>
|
|
561
|
+
</form>
|
|
562
|
+
</div>
|
|
563
|
+
</div>`;
|
|
559
564
|
// clang-format on
|
|
560
565
|
}
|
|
561
566
|
|
|
@@ -564,7 +569,10 @@ export class Section {
|
|
|
564
569
|
void this.performUpdate();
|
|
565
570
|
return;
|
|
566
571
|
}
|
|
567
|
-
void this.throttler.schedule(
|
|
572
|
+
void this.throttler.schedule(() => {
|
|
573
|
+
this.requestUpdate();
|
|
574
|
+
return this.updateComplete;
|
|
575
|
+
});
|
|
568
576
|
}
|
|
569
577
|
|
|
570
578
|
private renderVersion(icon: string, label: string, content: LitTemplate = nothing): LitTemplate {
|
|
@@ -580,32 +588,43 @@ export class Section {
|
|
|
580
588
|
// clang-format on
|
|
581
589
|
}
|
|
582
590
|
|
|
583
|
-
private
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
if (info) {
|
|
590
|
-
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
591
|
-
render(this.renderClientInfo(info), clientLabelText);
|
|
592
|
-
}
|
|
593
|
-
void this.manager.target()
|
|
594
|
-
.targetAgent()
|
|
595
|
-
.invoke_getTargetInfo({targetId: client})
|
|
596
|
-
.then(this.onClientInfo.bind(this, clientLabelText));
|
|
591
|
+
private renderClientsField(version?: SDK.ServiceWorkerManager.ServiceWorkerVersion): LitTemplate {
|
|
592
|
+
if (!version?.controlledClients?.length) {
|
|
593
|
+
return html`<div class="report-field">
|
|
594
|
+
<div class="report-field-name">${i18nString(UIStrings.clients)}</div>
|
|
595
|
+
<div class="report-field-value"></div>
|
|
596
|
+
</div>`;
|
|
597
597
|
}
|
|
598
|
+
// clang-format off
|
|
599
|
+
return html`<div class="report-field">
|
|
600
|
+
<div class="report-field-name">${i18nString(UIStrings.clients)}</div>
|
|
601
|
+
<div class="report-field-value">
|
|
602
|
+
${version.controlledClients.map(client => html`
|
|
603
|
+
<div class="service-worker-client">
|
|
604
|
+
${until(this.renderClientInfo(client))}
|
|
605
|
+
</div>`)}
|
|
606
|
+
</div>
|
|
607
|
+
</div>`;
|
|
608
|
+
// clang-format on
|
|
598
609
|
}
|
|
599
610
|
|
|
600
|
-
private
|
|
611
|
+
private renderSourceField(version?: SDK.ServiceWorkerManager.ServiceWorkerVersion): LitTemplate {
|
|
612
|
+
if (!version) {
|
|
613
|
+
return html`<div class="report-field">
|
|
614
|
+
<div class="report-field-name">${i18nString(UIStrings.source)}</div>
|
|
615
|
+
<div class="report-field-value"></div>
|
|
616
|
+
</div>`;
|
|
617
|
+
}
|
|
601
618
|
const fileName = Common.ParsedURL.ParsedURL.extractName(version.scriptURL);
|
|
602
619
|
// clang-format off
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
<div class="report-field-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
620
|
+
|
|
621
|
+
return html`<div class="report-field">
|
|
622
|
+
<div class="report-field-name">${i18nString(UIStrings.source)}</div>
|
|
623
|
+
<div class="report-field-value">
|
|
624
|
+
<div class="report-field-value-filename">
|
|
625
|
+
${Components.Linkifier.Linkifier.renderLinkifiedUrl(version.scriptURL, {
|
|
626
|
+
text: fileName, tabStop: true, jslogContext: 'source-location'})}
|
|
627
|
+
${this.registration.errors.length ? html`
|
|
609
628
|
<button
|
|
610
629
|
class="devtools-link link"
|
|
611
630
|
tabindex="0"
|
|
@@ -615,24 +634,88 @@ export class Section {
|
|
|
615
634
|
</devtools-icon>
|
|
616
635
|
${this.registration.errors.length}
|
|
617
636
|
</button>` : nothing}
|
|
637
|
+
</div>
|
|
638
|
+
${version.scriptResponseTime !== undefined ? html`
|
|
639
|
+
<div class="report-field-value-subtitle">
|
|
640
|
+
${i18nString(UIStrings.receivedS, {PH1: new Date(version.scriptResponseTime * 1000).toLocaleString()})}
|
|
641
|
+
</div>
|
|
642
|
+
` : nothing}
|
|
618
643
|
</div>
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
644
|
+
</div>`;
|
|
645
|
+
// clang-format on
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
private renderStatusField(active?: SDK.ServiceWorkerManager.ServiceWorkerVersion,
|
|
649
|
+
waiting?: SDK.ServiceWorkerManager.ServiceWorkerVersion,
|
|
650
|
+
installing?: SDK.ServiceWorkerManager.ServiceWorkerVersion,
|
|
651
|
+
redundant?: SDK.ServiceWorkerManager.ServiceWorkerVersion): LitTemplate {
|
|
652
|
+
// clang-format off
|
|
653
|
+
|
|
654
|
+
return html`<div class="report-field">
|
|
655
|
+
<div class="report-field-name">${i18nString(UIStrings.status)}</div>
|
|
656
|
+
<div class="report-field-value">
|
|
657
|
+
<div class="service-worker-version-stack">
|
|
658
|
+
<div class="service-worker-version-stack-bar"></div>
|
|
659
|
+
${active ? this.renderVersion(
|
|
660
|
+
'service-worker-active-circle',
|
|
661
|
+
i18nString(UIStrings.sActivatedAndIsS, {
|
|
662
|
+
PH1: active.id,
|
|
663
|
+
PH2: SDK.ServiceWorkerManager.ServiceWorkerVersion.RunningStatus[active.currentState.runningStatus](),
|
|
664
|
+
}),
|
|
665
|
+
active.isRunning() || active.isStarting() ? html`
|
|
666
|
+
<devtools-button .data=${{jslogContext: 'stop', variant: Buttons.Button.Variant.OUTLINED} as Buttons.Button.ButtonData}
|
|
667
|
+
@click=${this.stopButtonClicked.bind(this, active.id)}>
|
|
668
|
+
${i18nString(UIStrings.stopString)}
|
|
669
|
+
</devtools-button>`
|
|
670
|
+
: active.isStartable() ? html`
|
|
671
|
+
<devtools-button .data=${{jslogContext: 'start', variant: Buttons.Button.Variant.OUTLINED} as Buttons.Button.ButtonData}
|
|
672
|
+
@click=${this.startButtonClicked.bind(this)}>
|
|
673
|
+
${i18nString(UIStrings.startString)}
|
|
674
|
+
</devtools-button>`
|
|
675
|
+
: nothing)
|
|
676
|
+
: redundant ? this.renderVersion(
|
|
677
|
+
'service-worker-redundant-circle',
|
|
678
|
+
i18nString(UIStrings.sIsRedundant, {PH1: redundant.id}))
|
|
679
|
+
: nothing}
|
|
680
|
+
${waiting ? this.renderVersion(
|
|
681
|
+
'service-worker-waiting-circle',
|
|
682
|
+
i18nString(UIStrings.sWaitingToActivate, {PH1: waiting.id}), html`
|
|
683
|
+
<devtools-button .data=${{
|
|
684
|
+
jslogContext: 'skip-waiting',
|
|
685
|
+
title: i18n.i18n.lockedString('skipWaiting'),
|
|
686
|
+
variant: Buttons.Button.Variant.OUTLINED} as Buttons.Button.ButtonData}
|
|
687
|
+
@click=${this.skipButtonClicked.bind(this)}>
|
|
688
|
+
${i18n.i18n.lockedString('skipWaiting')}
|
|
689
|
+
</devtools-button>
|
|
690
|
+
${waiting.scriptResponseTime !== undefined ? html`
|
|
691
|
+
<div class="service-worker-subtitle">
|
|
692
|
+
${i18nString(UIStrings.receivedS, {PH1: new Date(waiting.scriptResponseTime * 1000).toLocaleString()})}
|
|
693
|
+
</div>
|
|
694
|
+
` : nothing}
|
|
695
|
+
`,
|
|
696
|
+
) : nothing}
|
|
697
|
+
${installing ? this.renderVersion(
|
|
698
|
+
'service-worker-installing-circle',
|
|
699
|
+
i18nString(UIStrings.sTryingToInstall, {PH1: installing.id}),
|
|
700
|
+
installing.scriptResponseTime !== undefined ? html`
|
|
701
|
+
<div class="service-worker-subtitle">
|
|
702
|
+
${i18nString(UIStrings.receivedS, {PH1: new Date(installing.scriptResponseTime * 1000).toLocaleString()})}
|
|
703
|
+
</div>` : nothing) : nothing}
|
|
622
704
|
</div>
|
|
623
|
-
|
|
624
|
-
|
|
705
|
+
</div>
|
|
706
|
+
</div>`;
|
|
625
707
|
// clang-format on
|
|
626
708
|
}
|
|
627
709
|
|
|
628
|
-
|
|
710
|
+
override performUpdate(): Promise<void> {
|
|
629
711
|
const fingerprint = this.registration.fingerprint();
|
|
630
712
|
if (fingerprint === this.fingerprint) {
|
|
631
713
|
return Promise.resolve();
|
|
632
714
|
}
|
|
633
715
|
this.fingerprint = fingerprint;
|
|
634
716
|
|
|
635
|
-
|
|
717
|
+
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
718
|
+
render(this.renderHeaderButtons(), this.section.getHeaderElement());
|
|
636
719
|
|
|
637
720
|
const versions = this.registration.versionsByMode();
|
|
638
721
|
const scopeURL = this.registration.scopeURL;
|
|
@@ -647,66 +730,20 @@ export class Section {
|
|
|
647
730
|
// clang-format off
|
|
648
731
|
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
649
732
|
render(html`
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
: active.isStartable() ? html`
|
|
664
|
-
<devtools-button .data=${{jslogContext: 'start', variant: Buttons.Button.Variant.OUTLINED} as Buttons.Button.ButtonData}
|
|
665
|
-
@click=${this.startButtonClicked.bind(this)}>
|
|
666
|
-
${i18nString(UIStrings.startString)}
|
|
667
|
-
</devtools-button>`
|
|
668
|
-
: nothing)
|
|
669
|
-
: redundant ? this.renderVersion(
|
|
670
|
-
'service-worker-redundant-circle',
|
|
671
|
-
i18nString(UIStrings.sIsRedundant, {PH1: redundant.id}))
|
|
672
|
-
: nothing}
|
|
673
|
-
${waiting ? this.renderVersion(
|
|
674
|
-
'service-worker-waiting-circle',
|
|
675
|
-
i18nString(UIStrings.sWaitingToActivate, {PH1: waiting.id}), html`
|
|
676
|
-
<devtools-button .data=${{
|
|
677
|
-
jslogContext: 'skip-waiting',
|
|
678
|
-
title: i18n.i18n.lockedString('skipWaiting'),
|
|
679
|
-
variant: Buttons.Button.Variant.OUTLINED} as Buttons.Button.ButtonData}
|
|
680
|
-
@click=${this.skipButtonClicked.bind(this)}>
|
|
681
|
-
${i18n.i18n.lockedString('skipWaiting')}
|
|
682
|
-
</devtools-button>
|
|
683
|
-
${waiting.scriptResponseTime !== undefined ? html`
|
|
684
|
-
<div class="service-worker-subtitle">
|
|
685
|
-
${i18nString(UIStrings.receivedS, {PH1: new Date(waiting.scriptResponseTime * 1000).toLocaleString()})}
|
|
686
|
-
</div>
|
|
687
|
-
` : nothing}
|
|
688
|
-
`,
|
|
689
|
-
) : nothing}
|
|
690
|
-
${installing ? this.renderVersion(
|
|
691
|
-
'service-worker-installing-circle',
|
|
692
|
-
i18nString(UIStrings.sTryingToInstall, {PH1: installing.id}),
|
|
693
|
-
installing.scriptResponseTime !== undefined ? html`
|
|
694
|
-
<div class="service-worker-subtitle">
|
|
695
|
-
${i18nString(UIStrings.receivedS, {PH1: new Date(installing.scriptResponseTime * 1000).toLocaleString()})}
|
|
696
|
-
</div>` : nothing) : nothing}
|
|
697
|
-
</div>
|
|
698
|
-
`, this.statusField);
|
|
733
|
+
${this.renderSourceField(active ?? redundant)}
|
|
734
|
+
${this.renderStatusField(active, waiting, installing, redundant)}
|
|
735
|
+
${this.renderClientsField(active ?? redundant)}
|
|
736
|
+
${this.renderSyncNotificationField(i18nString(UIStrings.pushString), this.pushNotificationDataSetting.get(),
|
|
737
|
+
i18nString(UIStrings.pushData), this.push.bind(this), 'push-message')}
|
|
738
|
+
${this.renderSyncNotificationField(i18nString(UIStrings.syncString), this.syncTagNameSetting.get(),
|
|
739
|
+
i18nString(UIStrings.syncTag), this.sync.bind(this), 'sync-tag')}
|
|
740
|
+
${this.renderSyncNotificationField(i18nString(UIStrings.periodicSync), this.periodicSyncTagNameSetting.get(),
|
|
741
|
+
i18nString(UIStrings.periodicSyncTag), tag => this.periodicSync(tag),
|
|
742
|
+
'periodic-sync-tag')}
|
|
743
|
+
${this.renderUpdateCycleField()}
|
|
744
|
+
${this.renderRouterField()}
|
|
745
|
+
`, this.contentElement);
|
|
699
746
|
// clang-format on
|
|
700
|
-
|
|
701
|
-
if (active) {
|
|
702
|
-
this.updateSourceField(active);
|
|
703
|
-
this.updateClientsField(active);
|
|
704
|
-
this.maybeCreateRouterField();
|
|
705
|
-
} else if (redundant) {
|
|
706
|
-
this.updateSourceField(redundant);
|
|
707
|
-
this.updateClientsField(redundant);
|
|
708
|
-
}
|
|
709
|
-
|
|
710
747
|
this.updateCycleView.refresh();
|
|
711
748
|
|
|
712
749
|
return Promise.resolve();
|
|
@@ -716,29 +753,33 @@ export class Section {
|
|
|
716
753
|
this.manager.deleteRegistration(this.registration.id);
|
|
717
754
|
}
|
|
718
755
|
|
|
719
|
-
private
|
|
720
|
-
|
|
721
|
-
|
|
756
|
+
private renderUpdateCycleField(): LitTemplate {
|
|
757
|
+
return html`
|
|
758
|
+
<div class="report-field">
|
|
759
|
+
<div class="report-field-name">${i18nString(UIStrings.updateCycle)}</div>
|
|
760
|
+
<div class="report-field-value">
|
|
761
|
+
${this.updateCycleView.tableElement}
|
|
762
|
+
</div>
|
|
763
|
+
</div>`;
|
|
722
764
|
}
|
|
723
765
|
|
|
724
|
-
private
|
|
766
|
+
private renderRouterField(): LitTemplate {
|
|
725
767
|
const versions = this.registration.versionsByMode();
|
|
726
768
|
const active = versions.get(SDK.ServiceWorkerManager.ServiceWorkerVersion.Modes.ACTIVE);
|
|
727
769
|
const title = i18nString(UIStrings.routers);
|
|
728
770
|
if (active?.routerRules && active.routerRules.length > 0) {
|
|
729
771
|
// If there is at least one registered rule in the active version, append the router filed.
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
//
|
|
739
|
-
this.section.removeField(title);
|
|
740
|
-
this.routerField = undefined;
|
|
772
|
+
// clang-format off
|
|
773
|
+
return html`
|
|
774
|
+
<div class="report-field">
|
|
775
|
+
<div class="report-field-name">${title}</div>
|
|
776
|
+
<div class="report-field-value">
|
|
777
|
+
${widget(ApplicationComponents.ServiceWorkerRouterView.ServiceWorkerRouterView, { rules: active.routerRules })}
|
|
778
|
+
</div>
|
|
779
|
+
</div>`;
|
|
780
|
+
// clang-format on
|
|
741
781
|
}
|
|
782
|
+
return nothing;
|
|
742
783
|
}
|
|
743
784
|
|
|
744
785
|
private updateButtonClicked(): void {
|
|
@@ -771,17 +812,17 @@ export class Section {
|
|
|
771
812
|
void this.manager.dispatchPeriodicSyncEvent(this.registration.id, tag);
|
|
772
813
|
}
|
|
773
814
|
|
|
774
|
-
private
|
|
775
|
-
|
|
815
|
+
private async renderClientInfo(clientId: Protocol.Target.TargetID): Promise<LitTemplate|typeof nothing> {
|
|
816
|
+
let targetInfo = this.clientInfoCache.get(clientId);
|
|
776
817
|
if (!targetInfo) {
|
|
777
|
-
|
|
818
|
+
const response = await this.manager.target().targetAgent().invoke_getTargetInfo({targetId: clientId});
|
|
819
|
+
if (!response.targetInfo) {
|
|
820
|
+
return nothing;
|
|
821
|
+
}
|
|
822
|
+
targetInfo = response.targetInfo;
|
|
823
|
+
this.clientInfoCache.set(clientId, targetInfo);
|
|
778
824
|
}
|
|
779
|
-
this.clientInfoCache.set(targetInfo.targetId, targetInfo);
|
|
780
|
-
// eslint-disable-next-line @devtools/no-lit-render-outside-of-view
|
|
781
|
-
render(this.renderClientInfo(targetInfo), element);
|
|
782
|
-
}
|
|
783
825
|
|
|
784
|
-
private renderClientInfo(targetInfo: Protocol.Target.TargetInfo): LitTemplate {
|
|
785
826
|
if (targetInfo.type !== 'page' && targetInfo.type !== 'iframe') {
|
|
786
827
|
// clang-format off
|
|
787
828
|
return html`<span class="service-worker-client-string">
|