From 5a43ee41032fe696a6907d3f32bc8f07c0e083fe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Feb 2024 02:09:24 +0100 Subject: [PATCH] Build 11-02-2024 (#21) Latest devtools frontend commit: [7e1c296](https://chromium.googlesource.com/devtools/devtools-frontend.git/+/7e1c2962306bf810375c1b010a693a79150b32da) Co-authored-by: GitHub --- public/core/common/AppProvider.d.ts | 2 +- public/core/common/AppProvider.js.map | 2 +- public/core/common/SettingRegistration.d.ts | 15 +- public/core/common/SettingRegistration.js.map | 2 +- public/core/common/Settings.d.ts | 2 +- public/core/common/Settings.js | 23 +- public/core/common/Settings.js.map | 2 +- public/core/host/InspectorFrontendHost.d.ts | 3 +- public/core/host/InspectorFrontendHost.js | 6 + public/core/host/InspectorFrontendHost.js.map | 2 +- .../core/host/InspectorFrontendHostAPI.d.ts | 7 + .../core/host/InspectorFrontendHostAPI.js.map | 2 +- public/core/host/UserMetrics.d.ts | 6 +- public/core/host/UserMetrics.js | 6 +- public/core/host/UserMetrics.js.map | 2 +- public/core/i18n/locales/en-US.json | 2 +- public/core/i18n/locales/en-XL.json | 2 +- public/core/i18n/locales/generated/en-US.json | 53 +++- public/core/i18n/locales/generated/en-XL.json | 53 +++- public/core/root/Runtime.d.ts | 17 +- public/core/root/Runtime.js | 22 +- public/core/root/Runtime.js.map | 2 +- public/core/sdk/CSSStyleSheetHeader.d.ts | 5 +- public/core/sdk/CSSStyleSheetHeader.js | 33 +-- public/core/sdk/CSSStyleSheetHeader.js.map | 2 +- .../CompilerSourceMappingContentProvider.d.ts | 3 +- .../CompilerSourceMappingContentProvider.js | 15 +- ...ompilerSourceMappingContentProvider.js.map | 2 +- public/core/sdk/Cookie.d.ts | 6 +- public/core/sdk/Cookie.js | 62 ++--- public/core/sdk/Cookie.js.map | 2 +- public/core/sdk/CookieModel.d.ts | 4 +- public/core/sdk/CookieModel.js | 8 +- public/core/sdk/CookieModel.js.map | 2 +- public/core/sdk/CookieParser.d.ts | 3 +- public/core/sdk/CookieParser.js | 40 ++- public/core/sdk/CookieParser.js.map | 2 +- public/core/sdk/NetworkRequest.d.ts | 6 +- public/core/sdk/NetworkRequest.js | 16 +- public/core/sdk/NetworkRequest.js.map | 2 +- public/core/sdk/Resource.d.ts | 4 +- public/core/sdk/Resource.js | 106 +++----- public/core/sdk/Resource.js.map | 2 +- public/devtools_resources.grd | 2 +- .../heap_snapshot_worker/HeapSnapshot.js | 26 +- .../heap_snapshot_worker/HeapSnapshot.js.map | 2 +- .../inspector_main/RenderingOptions.js | 2 +- .../inspector_main/RenderingOptions.js.map | 2 +- .../inspector_main/inspector_main-meta.js | 8 - .../inspector_main/inspector_main-meta.js.map | 2 +- public/entrypoints/main/MainImpl.js | 5 - public/entrypoints/main/MainImpl.js.map | 2 +- public/entrypoints/main/main-meta.js | 26 +- public/entrypoints/main/main-meta.js.map | 2 +- .../autofill_manager/AutofillManager.js | 4 +- .../autofill_manager/AutofillManager.js.map | 2 +- .../persistence/NetworkPersistenceManager.js | 2 +- .../NetworkPersistenceManager.js.map | 2 +- public/models/text_utils/ContentProvider.d.ts | 9 + public/models/text_utils/ContentProvider.js | 3 + .../models/text_utils/ContentProvider.js.map | 2 +- .../text_utils/StaticContentProvider.d.ts | 12 +- .../text_utils/StaticContentProvider.js | 29 ++- .../text_utils/StaticContentProvider.js.map | 2 +- .../text_utils/StreamingContentData.d.ts | 1 + .../models/text_utils/StreamingContentData.js | 3 + .../text_utils/StreamingContentData.js.map | 2 +- public/models/text_utils/TextUtils.d.ts | 8 + public/models/text_utils/TextUtils.js | 13 + public/models/text_utils/TextUtils.js.map | 2 +- public/models/trace/EntriesFilter.d.ts | 30 +-- public/models/trace/EntriesFilter.js | 83 +++---- public/models/trace/EntriesFilter.js.map | 2 +- .../panels/accessibility/AXBreadcrumbsPane.js | 4 +- .../accessibility/AXBreadcrumbsPane.js.map | 2 +- public/panels/animation/AnimationTimeline.js | 5 +- .../panels/animation/AnimationTimeline.js.map | 2 +- .../ServiceWorkerUpdateCycleView.js | 2 +- .../ServiceWorkerUpdateCycleView.js.map | 2 +- .../XHRBreakpointsSidebarPane.js | 11 +- .../XHRBreakpointsSidebarPane.js.map | 2 +- public/panels/changes/ChangesView.js | 2 +- public/panels/changes/ChangesView.js.map | 2 +- public/panels/console/ConsolePanel.js | 2 + public/panels/console/ConsolePanel.js.map | 2 +- public/panels/console/ConsolePrompt.js | 2 +- public/panels/console/ConsolePrompt.js.map | 2 +- public/panels/console/ConsoleViewMessage.js | 2 +- .../panels/console/ConsoleViewMessage.js.map | 2 +- .../console_counters/console_counters-meta.js | 4 - .../console_counters-meta.js.map | 2 +- public/panels/coverage/CoverageView.js | 2 +- public/panels/coverage/CoverageView.js.map | 2 +- .../panels/css_overview/CSSOverviewPanel.js | 2 +- .../css_overview/CSSOverviewPanel.js.map | 2 +- .../DeveloperResourcesView.js | 2 +- .../DeveloperResourcesView.js.map | 2 +- .../panels/elements/ElementStatePaneWidget.js | 2 +- .../elements/ElementStatePaneWidget.js.map | 2 +- public/panels/elements/ElementsTreeOutline.js | 2 +- .../elements/ElementsTreeOutline.js.map | 2 +- public/panels/elements/ImagePreviewPopover.js | 3 +- .../elements/ImagePreviewPopover.js.map | 2 +- .../elements/StylePropertyTreeElement.js | 2 +- .../elements/StylePropertyTreeElement.js.map | 2 +- public/panels/elements/StylesSidebarPane.js | 4 +- .../panels/elements/StylesSidebarPane.js.map | 2 +- .../components/AdornerSettingsPane.js | 3 +- .../components/AdornerSettingsPane.js.map | 2 +- public/panels/elements/elements-meta.js | 22 +- public/panels/elements/elements-meta.js.map | 2 +- public/panels/emulation/emulation-meta.js | 12 +- public/panels/emulation/emulation-meta.js.map | 2 +- public/panels/explain/ActionDelegate.js | 15 +- public/panels/explain/ActionDelegate.js.map | 2 +- public/panels/explain/InsightProvider.js | 5 +- public/panels/explain/InsightProvider.js.map | 2 +- .../explain/components/ConsoleInsight.d.ts | 6 +- .../explain/components/ConsoleInsight.js | 220 +++++++++++++--- .../explain/components/ConsoleInsight.js.map | 2 +- .../explain/components/consoleInsight.css.js | 17 +- ...s_entrypoint-meta-typescript-tsconfig.json | 3 + public/panels/explain/explain-meta.js | 23 +- public/panels/explain/explain-meta.js.map | 2 +- public/panels/explain/explain-tsconfig.json | 3 + public/panels/explain/meta-tsconfig.json | 2 +- .../LinearMemoryInspectorPane.js | 2 +- .../LinearMemoryInspectorPane.js.map | 2 +- .../LinearMemoryValueInterpreter.js | 4 +- .../LinearMemoryValueInterpreter.js.map | 2 +- .../components/ValueInterpreterDisplay.js | 2 +- .../components/ValueInterpreterDisplay.js.map | 2 +- .../components/ValueInterpreterSettings.js | 2 +- .../ValueInterpreterSettings.js.map | 2 +- public/panels/network/BlockedURLsPane.js | 2 +- public/panels/network/BlockedURLsPane.js.map | 2 +- .../network/EventSourceMessagesView.d.ts | 10 + .../panels/network/EventSourceMessagesView.js | 73 +++++- .../network/EventSourceMessagesView.js.map | 2 +- public/panels/network/NetworkConfigView.js | 2 +- .../panels/network/NetworkConfigView.js.map | 2 +- public/panels/network/NetworkItemView.js | 4 +- public/panels/network/NetworkItemView.js.map | 2 +- .../panels/network/NetworkLogViewColumns.js | 3 +- .../network/NetworkLogViewColumns.js.map | 2 +- .../panels/network/NetworkWaterfallColumn.js | 3 +- .../network/NetworkWaterfallColumn.js.map | 2 +- public/panels/network/RequestPayloadView.d.ts | 2 +- public/panels/network/RequestPayloadView.js | 13 +- .../panels/network/RequestPayloadView.js.map | 2 +- public/panels/network/RequestResponseView.js | 12 +- .../panels/network/RequestResponseView.js.map | 2 +- .../network/components/RequestHeadersView.js | 4 +- .../components/RequestHeadersView.js.map | 2 +- .../performance_monitor/PerformanceMonitor.js | 2 +- .../PerformanceMonitor.js.map | 2 +- .../profiler/HeapSnapshotDataGrids.d.ts | 4 +- .../panels/profiler/HeapSnapshotDataGrids.js | 8 +- .../profiler/HeapSnapshotDataGrids.js.map | 2 +- .../profiler/HeapSnapshotGridNodes.d.ts | 4 + .../panels/profiler/HeapSnapshotGridNodes.js | 20 +- .../profiler/HeapSnapshotGridNodes.js.map | 2 +- public/panels/profiler/HeapSnapshotView.js | 4 +- .../panels/profiler/HeapSnapshotView.js.map | 2 +- public/panels/profiler/LiveHeapProfileView.js | 2 +- .../profiler/LiveHeapProfileView.js.map | 2 +- public/panels/profiler/heapProfiler.css.js | 4 +- .../protocol_monitor/ProtocolMonitor.js | 2 +- .../protocol_monitor/ProtocolMonitor.js.map | 2 +- .../protocol_monitor/components/JSONEditor.js | 2 +- .../components/JSONEditor.js.map | 2 +- public/panels/recorder/RecorderController.js | 17 +- .../panels/recorder/RecorderController.js.map | 2 +- public/panels/recorder/RecorderPanel.js | 2 +- public/panels/recorder/RecorderPanel.js.map | 2 +- .../components/CreateRecordingView.js | 10 +- .../components/CreateRecordingView.js.map | 2 +- .../recorder/components/RecordingListView.js | 11 +- .../components/RecordingListView.js.map | 2 +- .../recorder/components/RecordingView.js | 27 +- .../recorder/components/RecordingView.js.map | 2 +- .../recorder/components/ReplayButton.js | 4 +- .../recorder/components/ReplayButton.js.map | 2 +- .../recorder/components/SelectButton.js | 4 +- .../recorder/components/SelectButton.js.map | 2 +- .../panels/recorder/components/StartView.js | 3 +- .../recorder/components/StartView.js.map | 2 +- .../panels/recorder/components/StepEditor.js | 32 ++- .../recorder/components/StepEditor.js.map | 2 +- public/panels/recorder/components/StepView.js | 10 +- .../recorder/components/StepView.js.map | 2 +- public/panels/screencast/screencast-meta.js | 5 - .../panels/screencast/screencast-meta.js.map | 2 +- public/panels/search/SearchView.js | 2 +- public/panels/search/SearchView.js.map | 2 +- public/panels/sensors/LocationsSettingsTab.js | 20 +- .../sensors/LocationsSettingsTab.js.map | 2 +- public/panels/sensors/SensorsView.js | 2 +- public/panels/sensors/SensorsView.js.map | 2 +- public/panels/settings/SettingsScreen.js | 7 +- public/panels/settings/SettingsScreen.js.map | 2 +- public/panels/sources/CoveragePlugin.js | 2 +- public/panels/sources/CoveragePlugin.js.map | 2 +- public/panels/sources/DebuggerPlugin.js | 21 +- public/panels/sources/DebuggerPlugin.js.map | 2 +- public/panels/sources/SourcesNavigator.js | 2 +- public/panels/sources/SourcesNavigator.js.map | 2 +- public/panels/sources/SourcesPanel.js | 11 +- public/panels/sources/SourcesPanel.js.map | 2 +- public/panels/sources/SourcesView.js | 3 + public/panels/sources/SourcesView.js.map | 2 +- .../panels/sources/TabbedEditorContainer.js | 2 +- .../sources/TabbedEditorContainer.js.map | 2 +- public/panels/sources/UISourceCodeFrame.js | 5 +- .../panels/sources/UISourceCodeFrame.js.map | 2 +- public/panels/sources/sources-meta.js | 4 - public/panels/sources/sources-meta.js.map | 2 +- .../timeline/CompatibilityTracksAppender.d.ts | 7 +- .../timeline/CompatibilityTracksAppender.js | 26 +- .../CompatibilityTracksAppender.js.map | 2 +- public/panels/timeline/ThreadAppender.d.ts | 4 +- public/panels/timeline/ThreadAppender.js | 28 +-- public/panels/timeline/ThreadAppender.js.map | 2 +- .../panels/timeline/TimelineFlameChartView.js | 1 + .../timeline/TimelineFlameChartView.js.map | 2 +- public/panels/web_audio/WebAudioView.js | 2 +- public/panels/web_audio/WebAudioView.js.map | 2 +- public/panels/webauthn/WebauthnPane.js | 2 +- public/panels/webauthn/WebauthnPane.js.map | 2 +- .../puppeteer-replay/package/lib/main.js | 17 +- .../lib/esm/puppeteer/api/Browser.d.ts | 19 +- .../lib/esm/puppeteer/api/Browser.d.ts.map | 2 +- .../lib/esm/puppeteer/api/Browser.js.map | 2 +- .../lib/esm/puppeteer/api/BrowserContext.d.ts | 21 +- .../esm/puppeteer/api/BrowserContext.d.ts.map | 2 +- .../lib/esm/puppeteer/api/BrowserContext.js | 11 +- .../esm/puppeteer/api/BrowserContext.js.map | 2 +- .../lib/esm/puppeteer/api/CDPSession.d.ts | 5 + .../lib/esm/puppeteer/api/CDPSession.d.ts.map | 2 +- .../lib/esm/puppeteer/api/CDPSession.js.map | 2 +- .../lib/esm/puppeteer/api/ElementHandle.d.ts | 80 ------ .../esm/puppeteer/api/ElementHandle.d.ts.map | 2 +- .../lib/esm/puppeteer/api/ElementHandle.js | 234 ++++-------------- .../esm/puppeteer/api/ElementHandle.js.map | 2 +- .../package/lib/esm/puppeteer/api/Frame.d.ts | 55 ---- .../lib/esm/puppeteer/api/Frame.d.ts.map | 2 +- .../package/lib/esm/puppeteer/api/Frame.js | 74 ------ .../lib/esm/puppeteer/api/Frame.js.map | 2 +- .../lib/esm/puppeteer/api/HTTPRequest.d.ts | 6 - .../esm/puppeteer/api/HTTPRequest.d.ts.map | 2 +- .../lib/esm/puppeteer/api/HTTPRequest.js.map | 2 +- .../package/lib/esm/puppeteer/api/Page.d.ts | 108 +------- .../lib/esm/puppeteer/api/Page.d.ts.map | 2 +- .../package/lib/esm/puppeteer/api/Page.js | 127 ++-------- .../package/lib/esm/puppeteer/api/Page.js.map | 2 +- .../esm/puppeteer/api/locators/locators.d.ts | 10 - .../puppeteer/api/locators/locators.d.ts.map | 2 +- .../esm/puppeteer/api/locators/locators.js | 5 - .../puppeteer/api/locators/locators.js.map | 2 +- .../lib/esm/puppeteer/bidi/Browser.d.ts | 2 +- .../lib/esm/puppeteer/bidi/Browser.d.ts.map | 2 +- .../package/lib/esm/puppeteer/bidi/Browser.js | 16 +- .../lib/esm/puppeteer/bidi/Browser.js.map | 2 +- .../esm/puppeteer/bidi/BrowserContext.d.ts | 1 + .../puppeteer/bidi/BrowserContext.d.ts.map | 2 +- .../lib/esm/puppeteer/bidi/BrowserContext.js | 17 +- .../esm/puppeteer/bidi/BrowserContext.js.map | 2 +- .../esm/puppeteer/bidi/BrowsingContext.d.ts | 5 + .../puppeteer/bidi/BrowsingContext.d.ts.map | 2 +- .../esm/puppeteer/bidi/BrowsingContext.js.map | 2 +- .../package/lib/esm/puppeteer/bidi/Page.d.ts | 9 +- .../lib/esm/puppeteer/bidi/Page.d.ts.map | 2 +- .../package/lib/esm/puppeteer/bidi/Page.js | 191 ++++++++++++-- .../lib/esm/puppeteer/bidi/Page.js.map | 2 +- .../package/lib/esm/puppeteer/bidi/Realm.d.ts | 5 + .../lib/esm/puppeteer/bidi/Realm.d.ts.map | 2 +- .../package/lib/esm/puppeteer/bidi/Realm.js | 5 + .../lib/esm/puppeteer/bidi/Realm.js.map | 2 +- .../lib/esm/puppeteer/bidi/core/Browser.d.ts | 1 - .../esm/puppeteer/bidi/core/Browser.d.ts.map | 2 +- .../lib/esm/puppeteer/bidi/core/Browser.js | 16 +- .../esm/puppeteer/bidi/core/Browser.js.map | 2 +- .../esm/puppeteer/bidi/core/Connection.d.ts | 22 ++ .../puppeteer/bidi/core/Connection.d.ts.map | 2 +- .../puppeteer/bidi/core/UserContext.d.ts.map | 2 +- .../esm/puppeteer/bidi/core/UserContext.js | 8 +- .../puppeteer/bidi/core/UserContext.js.map | 2 +- .../lib/esm/puppeteer/cdp/Binding.d.ts.map | 2 +- .../package/lib/esm/puppeteer/cdp/Binding.js | 5 + .../lib/esm/puppeteer/cdp/Binding.js.map | 2 +- .../lib/esm/puppeteer/cdp/Browser.d.ts | 2 +- .../lib/esm/puppeteer/cdp/Browser.d.ts.map | 2 +- .../package/lib/esm/puppeteer/cdp/Browser.js | 2 +- .../lib/esm/puppeteer/cdp/Browser.js.map | 2 +- .../package/lib/esm/puppeteer/cdp/Page.d.ts | 11 +- .../lib/esm/puppeteer/cdp/Page.d.ts.map | 2 +- .../package/lib/esm/puppeteer/cdp/Page.js | 19 +- .../package/lib/esm/puppeteer/cdp/Page.js.map | 2 +- .../cdp/PredefinedNetworkConditions.d.ts | 9 - .../cdp/PredefinedNetworkConditions.d.ts.map | 2 +- .../cdp/PredefinedNetworkConditions.js | 6 - .../cdp/PredefinedNetworkConditions.js.map | 2 +- .../lib/esm/puppeteer/cdp/WebWorker.d.ts | 3 +- .../lib/esm/puppeteer/cdp/WebWorker.d.ts.map | 2 +- .../lib/esm/puppeteer/cdp/WebWorker.js.map | 2 +- .../common/BrowserConnector.d.ts.map | 2 +- .../esm/puppeteer/common/BrowserConnector.js | 4 +- .../puppeteer/common/BrowserConnector.js.map | 2 +- .../esm/puppeteer/common/Configuration.d.ts | 16 +- .../puppeteer/common/Configuration.d.ts.map | 2 +- .../esm/puppeteer/common/ConsoleMessage.d.ts | 2 +- .../puppeteer/common/ConsoleMessage.d.ts.map | 2 +- .../lib/esm/puppeteer/common/Cookie.d.ts | 181 ++++++++++++++ .../lib/esm/puppeteer/common/Cookie.d.ts.map | 1 + .../lib/esm/puppeteer/common/Cookie.js | 7 + .../lib/esm/puppeteer/common/Cookie.js.map | 1 + .../lib/esm/puppeteer/common/Device.d.ts | 6 - .../lib/esm/puppeteer/common/Device.d.ts.map | 2 +- .../lib/esm/puppeteer/common/Device.js | 6 - .../lib/esm/puppeteer/common/Device.js.map | 2 +- .../lib/esm/puppeteer/common/Errors.d.ts | 45 +--- .../lib/esm/puppeteer/common/Errors.d.ts.map | 2 +- .../lib/esm/puppeteer/common/Errors.js | 39 +-- .../lib/esm/puppeteer/common/Errors.js.map | 2 +- .../esm/puppeteer/common/EventEmitter.d.ts | 14 -- .../puppeteer/common/EventEmitter.d.ts.map | 2 +- .../lib/esm/puppeteer/common/EventEmitter.js | 16 -- .../esm/puppeteer/common/EventEmitter.js.map | 2 +- .../lib/esm/puppeteer/common/PDFOptions.d.ts | 14 +- .../esm/puppeteer/common/PDFOptions.d.ts.map | 2 +- .../esm/puppeteer/common/PDFOptions.js.map | 2 +- .../puppeteer/common/ScriptInjector.d.ts.map | 2 +- .../esm/puppeteer/common/ScriptInjector.js | 5 + .../puppeteer/common/ScriptInjector.js.map | 2 +- .../lib/esm/puppeteer/common/common.d.ts | 2 +- .../lib/esm/puppeteer/common/common.d.ts.map | 2 +- .../lib/esm/puppeteer/common/common.js | 2 +- .../lib/esm/puppeteer/common/common.js.map | 2 +- .../lib/esm/puppeteer/common/util.d.ts | 9 +- .../lib/esm/puppeteer/common/util.d.ts.map | 2 +- .../package/lib/esm/puppeteer/common/util.js | 73 +++--- .../lib/esm/puppeteer/common/util.js.map | 2 +- .../lib/esm/puppeteer/generated/injected.d.ts | 2 +- .../esm/puppeteer/generated/injected.d.ts.map | 2 +- .../lib/esm/puppeteer/generated/injected.js | 2 +- .../esm/puppeteer/generated/injected.js.map | 2 +- .../lib/esm/puppeteer/generated/version.d.ts | 2 +- .../esm/puppeteer/generated/version.d.ts.map | 2 +- .../lib/esm/puppeteer/generated/version.js | 2 +- .../esm/puppeteer/generated/version.js.map | 2 +- .../lib/esm/puppeteer/injected/injected.d.ts | 2 +- .../lib/esm/puppeteer/injected/util.d.ts.map | 2 +- .../lib/esm/puppeteer/injected/util.js | 5 + .../lib/esm/puppeteer/injected/util.js.map | 2 +- .../esm/puppeteer/node/ChromeLauncher.d.ts | 2 +- .../puppeteer/node/ChromeLauncher.d.ts.map | 2 +- .../lib/esm/puppeteer/node/ChromeLauncher.js | 17 +- .../esm/puppeteer/node/ChromeLauncher.js.map | 2 +- .../puppeteer/node/FirefoxLauncher.d.ts.map | 2 +- .../lib/esm/puppeteer/node/FirefoxLauncher.js | 2 + .../esm/puppeteer/node/FirefoxLauncher.js.map | 2 +- .../lib/esm/puppeteer/node/LaunchOptions.d.ts | 13 +- .../esm/puppeteer/node/LaunchOptions.d.ts.map | 2 +- .../esm/puppeteer/node/ProductLauncher.d.ts | 2 +- .../puppeteer/node/ProductLauncher.d.ts.map | 2 +- .../lib/esm/puppeteer/node/ProductLauncher.js | 2 +- .../esm/puppeteer/node/ProductLauncher.js.map | 2 +- .../esm/puppeteer/node/PuppeteerNode.d.ts.map | 2 +- .../lib/esm/puppeteer/node/PuppeteerNode.js | 4 +- .../esm/puppeteer/node/PuppeteerNode.js.map | 2 +- .../lib/esm/puppeteer/util/Deferred.d.ts | 5 + .../lib/esm/puppeteer/util/Deferred.d.ts.map | 2 +- .../lib/esm/puppeteer/util/Deferred.js | 5 + .../lib/esm/puppeteer/util/Deferred.js.map | 2 +- .../package/lib/esm/puppeteer/util/Mutex.d.ts | 2 +- .../lib/esm/puppeteer/util/Mutex.d.ts.map | 2 +- .../package/lib/esm/puppeteer/util/Mutex.js | 5 + .../lib/esm/puppeteer/util/Mutex.js.map | 2 +- .../lib/esm/third_party/rxjs/rxjs.d.ts | 2 +- .../package/lib/esm/third_party/rxjs/rxjs.js | 6 +- .../puppeteer/puppeteer-tsconfig.json | 2 +- public/ui/components/data_grid/DataGrid.js | 5 +- .../ui/components/data_grid/DataGrid.js.map | 2 +- .../components/docs/console_insight/basic.js | 5 +- .../docs/console_insight/basic.js.map | 2 +- .../components/docs/console_insight/error.js | 5 +- .../docs/console_insight/error.js.map | 2 +- .../docs/console_insight/loading.js | 4 +- .../docs/console_insight/loading.js.map | 2 +- .../components/docs/console_insight/static.js | 5 +- .../docs/console_insight/static.js.map | 2 +- .../expandable_list/ExpandableList.js | 2 +- .../expandable_list/ExpandableList.js.map | 2 +- .../markdown_view/markdownView.css.js | 2 +- public/ui/components/menus/Menu.js | 3 +- public/ui/components/menus/Menu.js.map | 2 +- public/ui/components/menus/SelectMenu.d.ts | 11 +- public/ui/components/menus/SelectMenu.js | 22 +- public/ui/components/menus/SelectMenu.js.map | 2 +- .../ui/components/settings/SettingCheckbox.js | 4 + .../settings/SettingCheckbox.js.map | 2 +- .../suggestion_input/SuggestionInput.js | 10 +- .../suggestion_input/SuggestionInput.js.map | 2 +- .../ui/components/tree_outline/TreeOutline.js | 2 +- .../tree_outline/TreeOutline.js.map | 2 +- public/ui/legacy/ActionRegistration.d.ts | 20 +- public/ui/legacy/ActionRegistration.js | 11 +- public/ui/legacy/ActionRegistration.js.map | 2 +- public/ui/legacy/GlassPane.d.ts | 2 +- public/ui/legacy/GlassPane.js | 5 +- public/ui/legacy/GlassPane.js.map | 2 +- public/ui/legacy/InspectorView.js | 2 +- public/ui/legacy/InspectorView.js.map | 2 +- public/ui/legacy/ListWidget.d.ts | 3 +- public/ui/legacy/ListWidget.js | 13 +- public/ui/legacy/ListWidget.js.map | 2 +- public/ui/legacy/PopoverHelper.d.ts | 7 +- public/ui/legacy/PopoverHelper.js | 14 +- public/ui/legacy/PopoverHelper.js.map | 2 +- public/ui/legacy/SettingsUI.js | 3 + public/ui/legacy/SettingsUI.js.map | 2 +- public/ui/legacy/TabbedPane.js | 3 +- public/ui/legacy/TabbedPane.js.map | 2 +- public/ui/legacy/Toolbar.d.ts | 3 +- public/ui/legacy/Toolbar.js.map | 2 +- public/ui/legacy/Treeoutline.js | 2 +- public/ui/legacy/Treeoutline.js.map | 2 +- public/ui/legacy/ViewManager.d.ts | 3 +- public/ui/legacy/ViewManager.js.map | 2 +- public/ui/legacy/ViewRegistration.d.ts | 10 +- public/ui/legacy/ViewRegistration.js.map | 2 +- .../components/cookie_table/CookiesTable.d.ts | 1 + .../components/cookie_table/CookiesTable.js | 193 ++++++++------- .../cookie_table/CookiesTable.js.map | 2 +- .../legacy/components/data_grid/DataGrid.js | 3 +- .../components/data_grid/DataGrid.js.map | 2 +- .../legacy/components/perf_ui/FlameChart.d.ts | 1 + .../legacy/components/perf_ui/FlameChart.js | 62 +++-- .../components/perf_ui/FlameChart.js.map | 2 +- .../components/quick_open/CommandMenu.js | 2 +- .../components/quick_open/CommandMenu.js.map | 2 +- .../source_frame/ResourceSourceFrame.d.ts | 4 +- .../source_frame/ResourceSourceFrame.js | 24 +- .../source_frame/ResourceSourceFrame.js.map | 2 +- .../components/source_frame/SourceFrame.d.ts | 2 + .../components/source_frame/SourceFrame.js | 10 +- .../source_frame/SourceFrame.js.map | 2 +- public/ui/visual_logging/DomState.d.ts | 3 +- public/ui/visual_logging/DomState.js | 25 +- public/ui/visual_logging/DomState.js.map | 2 +- public/ui/visual_logging/LoggingConfig.d.ts | 5 +- public/ui/visual_logging/LoggingConfig.js | 6 +- public/ui/visual_logging/LoggingConfig.js.map | 2 +- public/ui/visual_logging/LoggingDriver.d.ts | 1 + public/ui/visual_logging/LoggingDriver.js | 49 +++- public/ui/visual_logging/LoggingDriver.js.map | 2 +- public/ui/visual_logging/LoggingEvents.d.ts | 1 + public/ui/visual_logging/LoggingEvents.js | 14 ++ public/ui/visual_logging/LoggingEvents.js.map | 2 +- public/ui/visual_logging/LoggingState.d.ts | 1 + public/ui/visual_logging/LoggingState.js | 10 +- public/ui/visual_logging/LoggingState.js.map | 2 +- public/ui/visual_logging/visual_logging.d.ts | 4 +- public/ui/visual_logging/visual_logging.js | 4 +- .../ui/visual_logging/visual_logging.js.map | 2 +- 465 files changed, 2336 insertions(+), 1990 deletions(-) create mode 100644 public/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts create mode 100644 public/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.d.ts.map create mode 100644 public/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.js create mode 100644 public/third_party/puppeteer/package/lib/esm/puppeteer/common/Cookie.js.map diff --git a/public/core/common/AppProvider.d.ts b/public/core/common/AppProvider.d.ts index effd68144..d401acfdc 100644 --- a/public/core/common/AppProvider.d.ts +++ b/public/core/common/AppProvider.d.ts @@ -7,6 +7,6 @@ export declare function registerAppProvider(registration: AppProviderRegistratio export declare function getRegisteredAppProviders(): AppProviderRegistration[]; export interface AppProviderRegistration { loadAppProvider: () => Promise; - condition?: Root.Runtime.ConditionName; + condition?: Root.Runtime.Condition; order: number; } diff --git a/public/core/common/AppProvider.js.map b/public/core/common/AppProvider.js.map index f39d34c3c..cdcfd22c2 100644 --- a/public/core/common/AppProvider.js.map +++ b/public/core/common/AppProvider.js.map @@ -1 +1 @@ -{"version":3,"file":"AppProvider.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/AppProvider.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B;AAE7B,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAQxC,MAAM,qBAAqB,GAA8B,EAAE,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,YAAqC;IACvE,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3C,CAAC;AACD,MAAM,UAAU,yBAAyB;IACvC,OAAO,qBAAqB;SACvB,MAAM,CACH,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAC,CAAC,CAAC;SAChH,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC;QACzC,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACT,CAAC","sourcesContent":["// Copyright 2019 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as Root from '../root/root.js';\n\nimport {type App} from './App.js';\n\nexport interface AppProvider {\n createApp(): App;\n}\n\nconst registeredAppProvider: AppProviderRegistration[] = [];\n\nexport function registerAppProvider(registration: AppProviderRegistration): void {\n registeredAppProvider.push(registration);\n}\nexport function getRegisteredAppProviders(): AppProviderRegistration[] {\n return registeredAppProvider\n .filter(\n provider => Root.Runtime.Runtime.isDescriptorEnabled({experiment: undefined, condition: provider.condition}))\n .sort((firstProvider, secondProvider) => {\n const order1 = firstProvider.order || 0;\n const order2 = secondProvider.order || 0;\n return order1 - order2;\n });\n}\nexport interface AppProviderRegistration {\n loadAppProvider: () => Promise;\n condition?: Root.Runtime.ConditionName;\n order: number;\n}\n"]} \ No newline at end of file +{"version":3,"file":"AppProvider.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/AppProvider.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,yEAAyE;AACzE,6BAA6B;AAE7B,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAQxC,MAAM,qBAAqB,GAA8B,EAAE,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,YAAqC;IACvE,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC3C,CAAC;AACD,MAAM,UAAU,yBAAyB;IACvC,OAAO,qBAAqB;SACvB,MAAM,CACH,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAC,CAAC,CAAC;SAChH,IAAI,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC;QACzC,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACT,CAAC","sourcesContent":["// Copyright 2019 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as Root from '../root/root.js';\n\nimport {type App} from './App.js';\n\nexport interface AppProvider {\n createApp(): App;\n}\n\nconst registeredAppProvider: AppProviderRegistration[] = [];\n\nexport function registerAppProvider(registration: AppProviderRegistration): void {\n registeredAppProvider.push(registration);\n}\nexport function getRegisteredAppProviders(): AppProviderRegistration[] {\n return registeredAppProvider\n .filter(\n provider => Root.Runtime.Runtime.isDescriptorEnabled({experiment: undefined, condition: provider.condition}))\n .sort((firstProvider, secondProvider) => {\n const order1 = firstProvider.order || 0;\n const order2 = secondProvider.order || 0;\n return order1 - order2;\n });\n}\nexport interface AppProviderRegistration {\n loadAppProvider: () => Promise;\n condition?: Root.Runtime.Condition;\n order: number;\n}\n"]} \ No newline at end of file diff --git a/public/core/common/SettingRegistration.d.ts b/public/core/common/SettingRegistration.d.ts index 493f240bf..fed8a7056 100644 --- a/public/core/common/SettingRegistration.d.ts +++ b/public/core/common/SettingRegistration.d.ts @@ -63,11 +63,6 @@ export interface SettingRegistration { * The title with which the setting is shown on screen. */ title?: () => Platform.UIString.LocalizedString; - /** - * The title with which the setting is shown on screen, if the platform running DevTools is 'mac'. - * If not set, the 'title' field will be used instead. - */ - titleMac?: () => Platform.UIString.LocalizedString; /** * The identifier of the setting. */ @@ -112,12 +107,12 @@ export interface SettingRegistration { */ experiment?: Root.Runtime.ExperimentName; /** - * A condition represented as a string the setting's availability depends on. Conditions come - * from the queryParamsObject defined in Runtime and just as the experiment field, they determine the availability - * of the setting. A condition can be negated by prepending a ‘!’ to the value of the condition - * property and in that case the behaviour of the setting's availability will be inverted. + * A condition is a function that will make the setting available if it + * returns true, and not available, otherwise. Make sure that objects you + * access from inside the condition function are ready at the time when the + * setting conditions are checked. */ - condition?: Root.Runtime.ConditionName; + condition?: Root.Runtime.Condition; /** * If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` propertiy. * If `disabled` is set, the setting will be disabled in the settings UI. In that case, `experiment` optionally can be diff --git a/public/core/common/SettingRegistration.js.map b/public/core/common/SettingRegistration.js.map index 9b973156f..ef188dc2f 100644 --- a/public/core/common/SettingRegistration.js.map +++ b/public/core/common/SettingRegistration.js.map @@ -1 +1 @@ -{"version":3,"file":"SettingRegistration.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/SettingRegistration.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as i18n from '../i18n/i18n.js';\nimport type * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {type SettingStorageType} from './Settings.js';\n\nconst UIStrings = {\n /**\n *@description Title of the Elements Panel\n */\n elements: 'Elements',\n /**\n *@description Text for DevTools appearance\n */\n appearance: 'Appearance',\n /**\n *@description Name of the Sources panel\n */\n sources: 'Sources',\n /**\n *@description Title of the Network tool\n */\n network: 'Network',\n /**\n *@description Text for the performance of something\n */\n performance: 'Performance',\n /**\n *@description Title of the Console tool\n */\n console: 'Console',\n /**\n *@description A title of the 'Persistence' setting category\n */\n persistence: 'Persistence',\n /**\n *@description Text that refers to the debugger\n */\n debugger: 'Debugger',\n /**\n *@description Text describing global shortcuts and settings that are available throughout the DevTools\n */\n global: 'Global',\n /**\n *@description Title of the Rendering tool\n */\n rendering: 'Rendering',\n /**\n *@description Title of a section on CSS Grid tooling\n */\n grid: 'Grid',\n /**\n *@description Text for the mobile platform, as opposed to desktop\n */\n mobile: 'Mobile',\n /**\n *@description Text for the memory of the page\n */\n memory: 'Memory',\n /**\n *@description Text for the extension of the page\n */\n extension: 'Extension',\n /**\n *@description Text for the adorner of the page\n */\n adorner: 'Adorner',\n /**\n * @description Header for the \"Sync\" section in the settings UI. The \"Sync\"\n * section allows users to configure which DevTools data is synced via Chrome Sync.\n */\n sync: 'Sync',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/common/SettingRegistration.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\nlet registeredSettings: Array = [];\nconst settingNameSet = new Set();\n\nexport function registerSettingExtension(registration: SettingRegistration): void {\n const settingName = registration.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n registeredSettings.push(registration);\n}\n\nexport function getRegisteredSettings(): Array {\n return registeredSettings.filter(\n setting =>\n Root.Runtime.Runtime.isDescriptorEnabled({experiment: setting.experiment, condition: setting.condition}));\n}\n\nexport function registerSettingsForTest(settings: Array, forceReset: boolean = false): void {\n if (registeredSettings.length === 0 || forceReset) {\n registeredSettings = settings;\n settingNameSet.clear();\n for (const setting of settings) {\n const settingName = setting.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n }\n }\n}\n\nexport function resetSettings(): void {\n registeredSettings = [];\n settingNameSet.clear();\n}\n\nexport function maybeRemoveSettingExtension(settingName: string): boolean {\n const settingIndex = registeredSettings.findIndex(setting => setting.settingName === settingName);\n if (settingIndex < 0 || !settingNameSet.delete(settingName)) {\n return false;\n }\n registeredSettings.splice(settingIndex, 1);\n return true;\n}\n\nexport const enum SettingCategory {\n NONE = '', // `NONE` must be a falsy value. Legacy code uses if-checks for the category.\n ELEMENTS = 'ELEMENTS',\n APPEARANCE = 'APPEARANCE',\n SOURCES = 'SOURCES',\n NETWORK = 'NETWORK',\n PERFORMANCE = 'PERFORMANCE',\n CONSOLE = 'CONSOLE',\n PERSISTENCE = 'PERSISTENCE',\n DEBUGGER = 'DEBUGGER',\n GLOBAL = 'GLOBAL',\n RENDERING = 'RENDERING',\n GRID = 'GRID',\n MOBILE = 'MOBILE',\n EMULATION = 'EMULATION',\n MEMORY = 'MEMORY',\n EXTENSIONS = 'EXTENSIONS',\n ADORNER = 'ADORNER',\n SYNC = 'SYNC',\n}\n\nexport function getLocalizedSettingsCategory(category: SettingCategory): Platform.UIString.LocalizedString {\n switch (category) {\n case SettingCategory.ELEMENTS:\n return i18nString(UIStrings.elements);\n case SettingCategory.APPEARANCE:\n return i18nString(UIStrings.appearance);\n case SettingCategory.SOURCES:\n return i18nString(UIStrings.sources);\n case SettingCategory.NETWORK:\n return i18nString(UIStrings.network);\n case SettingCategory.PERFORMANCE:\n return i18nString(UIStrings.performance);\n case SettingCategory.CONSOLE:\n return i18nString(UIStrings.console);\n case SettingCategory.PERSISTENCE:\n return i18nString(UIStrings.persistence);\n case SettingCategory.DEBUGGER:\n return i18nString(UIStrings.debugger);\n case SettingCategory.GLOBAL:\n return i18nString(UIStrings.global);\n case SettingCategory.RENDERING:\n return i18nString(UIStrings.rendering);\n case SettingCategory.GRID:\n return i18nString(UIStrings.grid);\n case SettingCategory.MOBILE:\n return i18nString(UIStrings.mobile);\n case SettingCategory.EMULATION:\n return i18nString(UIStrings.console);\n case SettingCategory.MEMORY:\n return i18nString(UIStrings.memory);\n case SettingCategory.EXTENSIONS:\n return i18nString(UIStrings.extension);\n case SettingCategory.ADORNER:\n return i18nString(UIStrings.adorner);\n case SettingCategory.NONE:\n return i18n.i18n.lockedString('');\n case SettingCategory.SYNC:\n return i18nString(UIStrings.sync);\n }\n}\n\nexport const enum SettingType {\n ARRAY = 'array',\n REGEX = 'regex',\n ENUM = 'enum',\n BOOLEAN = 'boolean',\n}\n\nexport interface RegExpSettingItem {\n /**\n * A regular expression matched against URLs for ignore listing.\n */\n pattern: string;\n /**\n * If true, ignore this rule.\n */\n disabled?: boolean;\n /**\n * When a rule is disabled due to requesting through a script's context menu\n * that it no longer be ignore listed, this field is set to the URL of that\n * script, so that if the user requests through the same context menu to\n * enable ignore listing, the rule can be reenabled.\n */\n disabledForUrl?: Platform.DevToolsPath.UrlString;\n}\n\nexport interface SettingRegistration {\n /**\n * The category with which the setting is displayed in the UI.\n */\n category?: SettingCategory;\n /**\n * Used to sort on screen the settings that belong to the same category.\n */\n order?: number;\n /**\n * The title with which the setting is shown on screen.\n */\n title?: () => Platform.UIString.LocalizedString;\n /**\n * The title with which the setting is shown on screen, if the platform running DevTools is 'mac'.\n * If not set, the 'title' field will be used instead.\n */\n titleMac?: () => Platform.UIString.LocalizedString;\n /**\n * The identifier of the setting.\n */\n settingName: string;\n /**\n * Determines how the possible values of the setting are expressed.\n *\n * - If the setting can only be enabled and disabled use BOOLEAN\n * - If the setting has a list of possible values use ENUM\n * - If each setting value is a set of objects use ARRAY\n * - If the setting value is a regular expression use REGEX\n */\n settingType: SettingType;\n /**\n * The value set by default to the setting.\n */\n defaultValue: unknown;\n /**\n * Words used to find a setting in the Command Menu.\n */\n tags?: Array<() => Platform.UIString.LocalizedString>;\n /**\n * The possible values the setting can have, each with a description composed of a title and an optional text.\n */\n options?: Array;\n /**\n * Whether DevTools must be reloaded for a change in the setting to take effect.\n */\n reloadRequired?: boolean;\n /**\n * Determines if the setting value is stored in the global, local or session storage.\n */\n storageType?: SettingStorageType;\n /**\n * A condition that, when present in the queryParamsObject of Runtime, constraints the value\n * of the setting to be changed only if the user set it.\n */\n userActionCondition?: string;\n /**\n * The name of the experiment a setting is associated with. Enabling and disabling the declared\n * experiment will enable and disable the setting respectively.\n */\n experiment?: Root.Runtime.ExperimentName;\n /**\n * A condition represented as a string the setting's availability depends on. Conditions come\n * from the queryParamsObject defined in Runtime and just as the experiment field, they determine the availability\n * of the setting. A condition can be negated by prepending a ‘!’ to the value of the condition\n * property and in that case the behaviour of the setting's availability will be inverted.\n */\n condition?: Root.Runtime.ConditionName;\n\n /**\n * If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` propertiy.\n * If `disabled` is set, the setting will be disabled in the settings UI. In that case, `experiment` optionally can be\n * set to link to an experiment (by experiment name). The information icon in the settings UI can then be clicked to\n * jump to the experiment. If a setting is not disabled, the experiment entry will be ignored.\n */\n deprecationNotice?: {disabled: boolean, warning: () => Platform.UIString.LocalizedString, experiment?: string};\n}\ninterface LocalizedSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n text?: () => Platform.UIString.LocalizedString;\n raw?: false;\n}\ninterface RawSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n /**\n * Text used to describe the option. Must be localized if 'raw' is false.\n */\n text?: string;\n raw: true;\n}\nexport type SettingExtensionOption = LocalizedSettingExtensionOption|RawSettingExtensionOption;\n"]} \ No newline at end of file +{"version":3,"file":"SettingRegistration.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/SettingRegistration.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport * as i18n from '../i18n/i18n.js';\nimport type * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {type SettingStorageType} from './Settings.js';\n\nconst UIStrings = {\n /**\n *@description Title of the Elements Panel\n */\n elements: 'Elements',\n /**\n *@description Text for DevTools appearance\n */\n appearance: 'Appearance',\n /**\n *@description Name of the Sources panel\n */\n sources: 'Sources',\n /**\n *@description Title of the Network tool\n */\n network: 'Network',\n /**\n *@description Text for the performance of something\n */\n performance: 'Performance',\n /**\n *@description Title of the Console tool\n */\n console: 'Console',\n /**\n *@description A title of the 'Persistence' setting category\n */\n persistence: 'Persistence',\n /**\n *@description Text that refers to the debugger\n */\n debugger: 'Debugger',\n /**\n *@description Text describing global shortcuts and settings that are available throughout the DevTools\n */\n global: 'Global',\n /**\n *@description Title of the Rendering tool\n */\n rendering: 'Rendering',\n /**\n *@description Title of a section on CSS Grid tooling\n */\n grid: 'Grid',\n /**\n *@description Text for the mobile platform, as opposed to desktop\n */\n mobile: 'Mobile',\n /**\n *@description Text for the memory of the page\n */\n memory: 'Memory',\n /**\n *@description Text for the extension of the page\n */\n extension: 'Extension',\n /**\n *@description Text for the adorner of the page\n */\n adorner: 'Adorner',\n /**\n * @description Header for the \"Sync\" section in the settings UI. The \"Sync\"\n * section allows users to configure which DevTools data is synced via Chrome Sync.\n */\n sync: 'Sync',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/common/SettingRegistration.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\nlet registeredSettings: Array = [];\nconst settingNameSet = new Set();\n\nexport function registerSettingExtension(registration: SettingRegistration): void {\n const settingName = registration.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n registeredSettings.push(registration);\n}\n\nexport function getRegisteredSettings(): Array {\n return registeredSettings.filter(\n setting =>\n Root.Runtime.Runtime.isDescriptorEnabled({experiment: setting.experiment, condition: setting.condition}));\n}\n\nexport function registerSettingsForTest(settings: Array, forceReset: boolean = false): void {\n if (registeredSettings.length === 0 || forceReset) {\n registeredSettings = settings;\n settingNameSet.clear();\n for (const setting of settings) {\n const settingName = setting.settingName;\n if (settingNameSet.has(settingName)) {\n throw new Error(`Duplicate setting name '${settingName}'`);\n }\n settingNameSet.add(settingName);\n }\n }\n}\n\nexport function resetSettings(): void {\n registeredSettings = [];\n settingNameSet.clear();\n}\n\nexport function maybeRemoveSettingExtension(settingName: string): boolean {\n const settingIndex = registeredSettings.findIndex(setting => setting.settingName === settingName);\n if (settingIndex < 0 || !settingNameSet.delete(settingName)) {\n return false;\n }\n registeredSettings.splice(settingIndex, 1);\n return true;\n}\n\nexport const enum SettingCategory {\n NONE = '', // `NONE` must be a falsy value. Legacy code uses if-checks for the category.\n ELEMENTS = 'ELEMENTS',\n APPEARANCE = 'APPEARANCE',\n SOURCES = 'SOURCES',\n NETWORK = 'NETWORK',\n PERFORMANCE = 'PERFORMANCE',\n CONSOLE = 'CONSOLE',\n PERSISTENCE = 'PERSISTENCE',\n DEBUGGER = 'DEBUGGER',\n GLOBAL = 'GLOBAL',\n RENDERING = 'RENDERING',\n GRID = 'GRID',\n MOBILE = 'MOBILE',\n EMULATION = 'EMULATION',\n MEMORY = 'MEMORY',\n EXTENSIONS = 'EXTENSIONS',\n ADORNER = 'ADORNER',\n SYNC = 'SYNC',\n}\n\nexport function getLocalizedSettingsCategory(category: SettingCategory): Platform.UIString.LocalizedString {\n switch (category) {\n case SettingCategory.ELEMENTS:\n return i18nString(UIStrings.elements);\n case SettingCategory.APPEARANCE:\n return i18nString(UIStrings.appearance);\n case SettingCategory.SOURCES:\n return i18nString(UIStrings.sources);\n case SettingCategory.NETWORK:\n return i18nString(UIStrings.network);\n case SettingCategory.PERFORMANCE:\n return i18nString(UIStrings.performance);\n case SettingCategory.CONSOLE:\n return i18nString(UIStrings.console);\n case SettingCategory.PERSISTENCE:\n return i18nString(UIStrings.persistence);\n case SettingCategory.DEBUGGER:\n return i18nString(UIStrings.debugger);\n case SettingCategory.GLOBAL:\n return i18nString(UIStrings.global);\n case SettingCategory.RENDERING:\n return i18nString(UIStrings.rendering);\n case SettingCategory.GRID:\n return i18nString(UIStrings.grid);\n case SettingCategory.MOBILE:\n return i18nString(UIStrings.mobile);\n case SettingCategory.EMULATION:\n return i18nString(UIStrings.console);\n case SettingCategory.MEMORY:\n return i18nString(UIStrings.memory);\n case SettingCategory.EXTENSIONS:\n return i18nString(UIStrings.extension);\n case SettingCategory.ADORNER:\n return i18nString(UIStrings.adorner);\n case SettingCategory.NONE:\n return i18n.i18n.lockedString('');\n case SettingCategory.SYNC:\n return i18nString(UIStrings.sync);\n }\n}\n\nexport const enum SettingType {\n ARRAY = 'array',\n REGEX = 'regex',\n ENUM = 'enum',\n BOOLEAN = 'boolean',\n}\n\nexport interface RegExpSettingItem {\n /**\n * A regular expression matched against URLs for ignore listing.\n */\n pattern: string;\n /**\n * If true, ignore this rule.\n */\n disabled?: boolean;\n /**\n * When a rule is disabled due to requesting through a script's context menu\n * that it no longer be ignore listed, this field is set to the URL of that\n * script, so that if the user requests through the same context menu to\n * enable ignore listing, the rule can be reenabled.\n */\n disabledForUrl?: Platform.DevToolsPath.UrlString;\n}\n\nexport interface SettingRegistration {\n /**\n * The category with which the setting is displayed in the UI.\n */\n category?: SettingCategory;\n /**\n * Used to sort on screen the settings that belong to the same category.\n */\n order?: number;\n /**\n * The title with which the setting is shown on screen.\n */\n title?: () => Platform.UIString.LocalizedString;\n /**\n * The identifier of the setting.\n */\n settingName: string;\n /**\n * Determines how the possible values of the setting are expressed.\n *\n * - If the setting can only be enabled and disabled use BOOLEAN\n * - If the setting has a list of possible values use ENUM\n * - If each setting value is a set of objects use ARRAY\n * - If the setting value is a regular expression use REGEX\n */\n settingType: SettingType;\n /**\n * The value set by default to the setting.\n */\n defaultValue: unknown;\n /**\n * Words used to find a setting in the Command Menu.\n */\n tags?: Array<() => Platform.UIString.LocalizedString>;\n /**\n * The possible values the setting can have, each with a description composed of a title and an optional text.\n */\n options?: Array;\n /**\n * Whether DevTools must be reloaded for a change in the setting to take effect.\n */\n reloadRequired?: boolean;\n /**\n * Determines if the setting value is stored in the global, local or session storage.\n */\n storageType?: SettingStorageType;\n /**\n * A condition that, when present in the queryParamsObject of Runtime, constraints the value\n * of the setting to be changed only if the user set it.\n */\n userActionCondition?: string;\n /**\n * The name of the experiment a setting is associated with. Enabling and disabling the declared\n * experiment will enable and disable the setting respectively.\n */\n experiment?: Root.Runtime.ExperimentName;\n /**\n * A condition is a function that will make the setting available if it\n * returns true, and not available, otherwise. Make sure that objects you\n * access from inside the condition function are ready at the time when the\n * setting conditions are checked.\n */\n condition?: Root.Runtime.Condition;\n\n /**\n * If a setting is deprecated, define this notice to show an appropriate warning according to the `warning` propertiy.\n * If `disabled` is set, the setting will be disabled in the settings UI. In that case, `experiment` optionally can be\n * set to link to an experiment (by experiment name). The information icon in the settings UI can then be clicked to\n * jump to the experiment. If a setting is not disabled, the experiment entry will be ignored.\n */\n deprecationNotice?: {disabled: boolean, warning: () => Platform.UIString.LocalizedString, experiment?: string};\n}\ninterface LocalizedSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n text?: () => Platform.UIString.LocalizedString;\n raw?: false;\n}\ninterface RawSettingExtensionOption {\n value: boolean|string;\n title: () => Platform.UIString.LocalizedString;\n /**\n * Text used to describe the option. Must be localized if 'raw' is false.\n */\n text?: string;\n raw: true;\n}\nexport type SettingExtensionOption = LocalizedSettingExtensionOption|RawSettingExtensionOption;\n"]} \ No newline at end of file diff --git a/public/core/common/Settings.d.ts b/public/core/common/Settings.d.ts index 5b434c36e..c962449e8 100644 --- a/public/core/common/Settings.d.ts +++ b/public/core/common/Settings.d.ts @@ -62,10 +62,10 @@ export declare class Deprecation { } export declare class Setting { #private; + readonly name: string; readonly defaultValue: V; private readonly eventSupport; readonly storage: SettingsStorage; - readonly name: string; constructor(name: string, defaultValue: V, eventSupport: ObjectWrapper, storage: SettingsStorage); setSerializer(serializer: Serializer): void; addChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): EventDescriptor; diff --git a/public/core/common/Settings.js b/public/core/common/Settings.js index 5acfb5e1e..324f66016 100644 --- a/public/core/common/Settings.js +++ b/public/core/common/Settings.js @@ -54,18 +54,12 @@ export class Settings { this.#registry = new Map(); this.moduleSettings = new Map(); for (const registration of getRegisteredSettings()) { - // TODO(b/320405843): remove normalization when kebab migration is complete const { settingName, defaultValue, storageType } = registration; const isRegex = registration.settingType === "regex" /* SettingType.REGEX */; const setting = isRegex && typeof defaultValue === 'string' ? this.createRegExpSetting(settingName, defaultValue, undefined, storageType) : this.createSetting(settingName, defaultValue, storageType); - if (Root.Runtime.Runtime.platform() === 'mac' && registration.titleMac) { - setting.setTitleFunction(registration.titleMac); - } - else { - setting.setTitleFunction(registration.title); - } + setting.setTitleFunction(registration.title); if (registration.userActionCondition) { setting.setRequiresUserAction(Boolean(Root.Runtime.Runtime.queryParam(registration.userActionCondition))); } @@ -122,8 +116,6 @@ export class Settings { // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration // eslint-disable-next-line @typescript-eslint/no-explicit-any moduleSetting(settingName) { - // TODO(b/320405843): remove normalization when kebab migration is complete - settingName = Settings.normalizeSettingName(settingName); const setting = this.moduleSettings.get(settingName); if (!setting) { throw new Error('No setting registered: ' + settingName); @@ -131,8 +123,6 @@ export class Settings { return setting; } settingForTest(settingName) { - // TODO(b/320405843): remove normalization when kebab migration is complete - settingName = Settings.normalizeSettingName(settingName); const setting = this.#registry.get(settingName); if (!setting) { throw new Error('No setting registered: ' + settingName); @@ -140,8 +130,6 @@ export class Settings { return setting; } createSetting(key, defaultValue, storageType) { - // TODO(b/320405843): remove normalization when kebab migration is complete - key = Settings.normalizeSettingName(key); const storage = this.storageFromType(storageType); let setting = this.#registry.get(key); if (!setting) { @@ -151,13 +139,9 @@ export class Settings { return setting; } createLocalSetting(key, defaultValue) { - // TODO(b/320405843): remove normalization when kebab migration is complete - key = Settings.normalizeSettingName(key); return this.createSetting(key, defaultValue, "Local" /* SettingStorageType.Local */); } createRegExpSetting(key, defaultValue, regexFlags, storageType) { - // TODO(b/320405843): remove normalization when kebab migration is complete - key = Settings.normalizeSettingName(key); if (!this.#registry.get(key)) { this.#registry.set(key, new RegExpSetting(key, defaultValue, this.#eventSupport, this.storageFromType(storageType), regexFlags)); } @@ -281,6 +265,7 @@ export class Deprecation { } } export class Setting { + name; defaultValue; eventSupport; storage; @@ -294,13 +279,11 @@ export class Setting { #hadUserAction; #disabled; #deprecation = null; - name; constructor(name, defaultValue, eventSupport, storage) { + this.name = name; this.defaultValue = defaultValue; this.eventSupport = eventSupport; this.storage = storage; - // TODO(b/320405843): remove normalization when kebab migration is complete - this.name = Settings.normalizeSettingName(name); storage.register(this.name); } setSerializer(serializer) { diff --git a/public/core/common/Settings.js.map b/public/core/common/Settings.js.map index dfecc7635..8d3b76540 100644 --- a/public/core/common/Settings.js.map +++ b/public/core/common/Settings.js.map @@ -1 +1 @@ -{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/Settings.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {Console} from './Console.js';\nimport {type EventDescriptor, type EventTargetEvent, type GenericEvents} from './EventTarget.js';\nimport {ObjectWrapper} from './Object.js';\nimport {\n getLocalizedSettingsCategory,\n getRegisteredSettings,\n maybeRemoveSettingExtension,\n type RegExpSettingItem,\n registerSettingExtension,\n registerSettingsForTest,\n resetSettings,\n SettingCategory,\n type SettingExtensionOption,\n type SettingRegistration,\n SettingType,\n} from './SettingRegistration.js';\n\nlet settingsInstance: Settings|undefined;\n\nexport class Settings {\n readonly #sessionStorage: SettingsStorage;\n settingNameSet: Set;\n orderValuesBySettingCategory: Map>;\n #eventSupport: ObjectWrapper;\n #registry: Map>;\n readonly moduleSettings: Map>;\n\n private constructor(\n readonly syncedStorage: SettingsStorage, readonly globalStorage: SettingsStorage,\n readonly localStorage: SettingsStorage) {\n this.#sessionStorage = new SettingsStorage({});\n\n this.settingNameSet = new Set();\n\n this.orderValuesBySettingCategory = new Map();\n\n this.#eventSupport = new ObjectWrapper();\n this.#registry = new Map();\n this.moduleSettings = new Map();\n\n for (const registration of getRegisteredSettings()) {\n // TODO(b/320405843): remove normalization when kebab migration is complete\n const {settingName, defaultValue, storageType} = registration;\n const isRegex = registration.settingType === SettingType.REGEX;\n\n const setting = isRegex && typeof defaultValue === 'string' ?\n this.createRegExpSetting(settingName, defaultValue, undefined, storageType) :\n this.createSetting(settingName, defaultValue, storageType);\n\n if (Root.Runtime.Runtime.platform() === 'mac' && registration.titleMac) {\n setting.setTitleFunction(registration.titleMac);\n } else {\n setting.setTitleFunction(registration.title);\n }\n if (registration.userActionCondition) {\n setting.setRequiresUserAction(Boolean(Root.Runtime.Runtime.queryParam(registration.userActionCondition)));\n }\n setting.setRegistration(registration);\n\n this.registerModuleSetting(setting);\n }\n }\n\n static hasInstance(): boolean {\n return typeof settingsInstance !== 'undefined';\n }\n\n static instance(opts: {\n forceNew: boolean|null,\n syncedStorage: SettingsStorage|null,\n globalStorage: SettingsStorage|null,\n localStorage: SettingsStorage|null,\n } = {forceNew: null, syncedStorage: null, globalStorage: null, localStorage: null}): Settings {\n const {forceNew, syncedStorage, globalStorage, localStorage} = opts;\n if (!settingsInstance || forceNew) {\n if (!syncedStorage || !globalStorage || !localStorage) {\n throw new Error(`Unable to create settings: global and local storage must be provided: ${new Error().stack}`);\n }\n\n settingsInstance = new Settings(syncedStorage, globalStorage, localStorage);\n }\n\n return settingsInstance;\n }\n\n static removeInstance(): void {\n settingsInstance = undefined;\n }\n\n private registerModuleSetting(setting: Setting): void {\n const settingName = setting.name;\n const category = setting.category();\n const order = setting.order();\n if (this.settingNameSet.has(settingName)) {\n throw new Error(`Duplicate Setting name '${settingName}'`);\n }\n if (category && order) {\n const orderValues = this.orderValuesBySettingCategory.get(category) || new Set();\n if (orderValues.has(order)) {\n throw new Error(`Duplicate order value '${order}' for settings category '${category}'`);\n }\n orderValues.add(order);\n this.orderValuesBySettingCategory.set(category, orderValues);\n }\n this.settingNameSet.add(settingName);\n this.moduleSettings.set(setting.name, setting);\n }\n\n static normalizeSettingName(name: string): string {\n if ([\n VersionController.GLOBAL_VERSION_SETTING_NAME,\n VersionController.SYNCED_VERSION_SETTING_NAME,\n VersionController.LOCAL_VERSION_SETTING_NAME,\n 'currentDockState',\n 'isUnderTest',\n ].includes(name)) {\n return name;\n }\n return Platform.StringUtilities.toKebabCase(name);\n }\n\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleSetting(settingName: string): Setting {\n // TODO(b/320405843): remove normalization when kebab migration is complete\n settingName = Settings.normalizeSettingName(settingName);\n const setting = this.moduleSettings.get(settingName) as Setting;\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n settingForTest(settingName: string): Setting {\n // TODO(b/320405843): remove normalization when kebab migration is complete\n settingName = Settings.normalizeSettingName(settingName);\n const setting = this.#registry.get(settingName);\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n createSetting(key: string, defaultValue: T, storageType?: SettingStorageType): Setting {\n // TODO(b/320405843): remove normalization when kebab migration is complete\n key = Settings.normalizeSettingName(key);\n const storage = this.storageFromType(storageType);\n let setting = (this.#registry.get(key) as Setting);\n if (!setting) {\n setting = new Setting(key, defaultValue, this.#eventSupport, storage);\n this.#registry.set(key, setting);\n }\n return setting;\n }\n\n createLocalSetting(key: string, defaultValue: T): Setting {\n // TODO(b/320405843): remove normalization when kebab migration is complete\n key = Settings.normalizeSettingName(key);\n return this.createSetting(key, defaultValue, SettingStorageType.Local);\n }\n\n createRegExpSetting(key: string, defaultValue: string, regexFlags?: string, storageType?: SettingStorageType):\n RegExpSetting {\n // TODO(b/320405843): remove normalization when kebab migration is complete\n key = Settings.normalizeSettingName(key);\n if (!this.#registry.get(key)) {\n this.#registry.set(\n key, new RegExpSetting(key, defaultValue, this.#eventSupport, this.storageFromType(storageType), regexFlags));\n }\n return this.#registry.get(key) as RegExpSetting;\n }\n\n clearAll(): void {\n this.globalStorage.removeAll();\n this.syncedStorage.removeAll();\n this.localStorage.removeAll();\n new VersionController().resetToCurrent();\n }\n\n private storageFromType(storageType?: SettingStorageType): SettingsStorage {\n switch (storageType) {\n case SettingStorageType.Local:\n return this.localStorage;\n case SettingStorageType.Session:\n return this.#sessionStorage;\n case SettingStorageType.Global:\n return this.globalStorage;\n case SettingStorageType.Synced:\n return this.syncedStorage;\n }\n return this.globalStorage;\n }\n\n getRegistry(): Map> {\n return this.#registry;\n }\n}\n\nexport interface SettingsBackingStore {\n register(setting: string): void;\n get(setting: string): Promise;\n set(setting: string, value: string): void;\n remove(setting: string): void;\n clear(): void;\n}\n\nexport const NOOP_STORAGE: SettingsBackingStore = {\n register: () => {},\n set: () => {},\n get: () => Promise.resolve(''),\n remove: () => {},\n clear: () => {},\n};\n\nexport class SettingsStorage {\n constructor(\n private object: Record, private readonly backingStore: SettingsBackingStore = NOOP_STORAGE,\n private readonly storagePrefix: string = '') {\n }\n\n register(name: string): void {\n name = this.storagePrefix + name;\n this.backingStore.register(name);\n }\n\n set(name: string, value: string): void {\n name = this.storagePrefix + name;\n this.object[name] = value;\n this.backingStore.set(name, value);\n }\n\n has(name: string): boolean {\n name = this.storagePrefix + name;\n return name in this.object;\n }\n\n get(name: string): string {\n name = this.storagePrefix + name;\n return this.object[name];\n }\n\n async forceGet(originalName: string): Promise {\n const name = this.storagePrefix + originalName;\n const value = await this.backingStore.get(name);\n if (value && value !== this.object[name]) {\n this.set(originalName, value);\n } else if (!value) {\n this.remove(originalName);\n }\n return value;\n }\n\n remove(name: string): void {\n name = this.storagePrefix + name;\n delete this.object[name];\n this.backingStore.remove(name);\n }\n\n removeAll(): void {\n this.object = {};\n this.backingStore.clear();\n }\n\n keys(): string[] {\n return Object.keys(this.object);\n }\n\n dumpSizes(): void {\n Console.instance().log('Ten largest settings: ');\n\n const sizes: {\n [x: string]: number,\n // @ts-expect-error __proto__ optimization\n } = {__proto__: null};\n for (const key in this.object) {\n sizes[key] = this.object[key].length;\n }\n const keys = Object.keys(sizes);\n\n function comparator(key1: string, key2: string): number {\n return sizes[key2] - sizes[key1];\n }\n\n keys.sort(comparator);\n\n for (let i = 0; i < 10 && i < keys.length; ++i) {\n Console.instance().log('Setting: \\'' + keys[i] + '\\', size: ' + sizes[keys[i]]);\n }\n }\n}\n\nfunction removeSetting(setting: {name: string, storage: SettingsStorage}): void {\n const name = setting.name;\n const settings = Settings.instance();\n\n settings.getRegistry().delete(name);\n settings.moduleSettings.delete(name);\n\n setting.storage.remove(name);\n}\n\nexport class Deprecation {\n readonly disabled: boolean;\n readonly warning: Platform.UIString.LocalizedString;\n readonly experiment?: Root.Runtime.Experiment;\n\n constructor({deprecationNotice}: SettingRegistration) {\n if (!deprecationNotice) {\n throw new Error('Cannot create deprecation info for a non-deprecated setting');\n }\n this.disabled = deprecationNotice.disabled;\n this.warning = deprecationNotice.warning();\n this.experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n }\n}\n\nexport class Setting {\n #titleFunction?: () => Platform.UIString.LocalizedString;\n #titleInternal!: string;\n #registration: SettingRegistration|null = null;\n #requiresUserAction?: boolean;\n #value?: V;\n // TODO(crbug.com/1172300) Type cannot be inferred without changes to consumers. See above.\n #serializer: Serializer = JSON;\n #hadUserAction?: boolean;\n #disabled?: boolean;\n #deprecation: Deprecation|null = null;\n readonly name: string;\n\n constructor(\n name: string, readonly defaultValue: V, private readonly eventSupport: ObjectWrapper,\n readonly storage: SettingsStorage) {\n // TODO(b/320405843): remove normalization when kebab migration is complete\n this.name = Settings.normalizeSettingName(name);\n storage.register(this.name);\n }\n\n setSerializer(serializer: Serializer): void {\n this.#serializer = serializer;\n }\n\n addChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): EventDescriptor {\n return this.eventSupport.addEventListener(this.name, listener, thisObject);\n }\n\n removeChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): void {\n this.eventSupport.removeEventListener(this.name, listener, thisObject);\n }\n\n title(): string {\n if (this.#titleInternal) {\n return this.#titleInternal;\n }\n if (this.#titleFunction) {\n return this.#titleFunction();\n }\n return '';\n }\n\n setTitleFunction(titleFunction: (() => Platform.UIString.LocalizedString)|undefined): void {\n if (titleFunction) {\n this.#titleFunction = titleFunction;\n }\n }\n\n setTitle(title: string): void {\n this.#titleInternal = title;\n }\n\n setRequiresUserAction(requiresUserAction: boolean): void {\n this.#requiresUserAction = requiresUserAction;\n }\n\n disabled(): boolean {\n return this.#disabled || false;\n }\n\n setDisabled(disabled: boolean): void {\n this.#disabled = disabled;\n this.eventSupport.dispatchEventToListeners(this.name);\n }\n\n get(): V {\n if (this.#requiresUserAction && !this.#hadUserAction) {\n return this.defaultValue;\n }\n\n if (typeof this.#value !== 'undefined') {\n return this.#value;\n }\n\n this.#value = this.defaultValue;\n if (this.storage.has(this.name)) {\n try {\n this.#value = this.#serializer.parse(this.storage.get(this.name));\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n return this.#value;\n }\n\n async forceGet(): Promise {\n const name = this.name;\n const oldValue = this.storage.get(name);\n const value = await this.storage.forceGet(name);\n this.#value = this.defaultValue;\n if (value) {\n try {\n this.#value = this.#serializer.parse(value);\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n\n if (oldValue !== value) {\n this.eventSupport.dispatchEventToListeners(this.name, this.#value);\n }\n\n return this.#value;\n }\n\n set(value: V): void {\n this.#hadUserAction = true;\n this.#value = value;\n try {\n const settingString = this.#serializer.stringify(value);\n try {\n this.storage.set(this.name, settingString);\n } catch (e) {\n this.printSettingsSavingError(e.message, this.name, settingString);\n }\n } catch (e) {\n Console.instance().error('Cannot stringify setting with name: ' + this.name + ', error: ' + e.message);\n }\n this.eventSupport.dispatchEventToListeners(this.name, value);\n }\n\n setRegistration(registration: SettingRegistration): void {\n this.#registration = registration;\n const {deprecationNotice} = registration;\n if (deprecationNotice?.disabled) {\n const experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n if ((!experiment || experiment.isEnabled())) {\n this.set(this.defaultValue);\n this.setDisabled(true);\n }\n }\n }\n\n type(): SettingType|null {\n if (this.#registration) {\n return this.#registration.settingType;\n }\n return null;\n }\n\n options(): SimpleSettingOption[] {\n if (this.#registration && this.#registration.options) {\n return this.#registration.options.map(opt => {\n const {value, title, text, raw} = opt;\n return {\n value: value,\n title: title(),\n text: typeof text === 'function' ? text() : text,\n raw: raw,\n };\n });\n }\n return [];\n }\n\n reloadRequired(): boolean|null {\n if (this.#registration) {\n return this.#registration.reloadRequired || null;\n }\n return null;\n }\n\n category(): SettingCategory|null {\n if (this.#registration) {\n return this.#registration.category || null;\n }\n return null;\n }\n\n tags(): string|null {\n if (this.#registration && this.#registration.tags) {\n // Get localized keys and separate by null character to prevent fuzzy matching from matching across them.\n return this.#registration.tags.map(tag => tag()).join('\\0');\n }\n return null;\n }\n\n order(): number|null {\n if (this.#registration) {\n return this.#registration.order || null;\n }\n return null;\n }\n\n get deprecation(): Deprecation|null {\n if (!this.#registration || !this.#registration.deprecationNotice) {\n return null;\n }\n if (!this.#deprecation) {\n this.#deprecation = new Deprecation(this.#registration);\n }\n return this.#deprecation;\n }\n\n private printSettingsSavingError(message: string, name: string, value: string): void {\n const errorMessage =\n 'Error saving setting with name: ' + this.name + ', value length: ' + value.length + '. Error: ' + message;\n console.error(errorMessage);\n Console.instance().error(errorMessage);\n this.storage.dumpSizes();\n }\n}\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RegExpSetting extends Setting {\n #regexFlags: string|undefined;\n #regex?: RegExp|null;\n\n constructor(\n name: string, defaultValue: string, eventSupport: ObjectWrapper, storage: SettingsStorage,\n regexFlags?: string) {\n super(name, defaultValue ? [{pattern: defaultValue}] : [], eventSupport, storage);\n this.#regexFlags = regexFlags;\n }\n\n override get(): string {\n const result = [];\n const items = this.getAsArray();\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n if (item.pattern && !item.disabled) {\n result.push(item.pattern);\n }\n }\n return result.join('|');\n }\n\n getAsArray(): RegExpSettingItem[] {\n return super.get();\n }\n\n override set(value: string): void {\n this.setAsArray([{pattern: value, disabled: false}]);\n }\n\n setAsArray(value: RegExpSettingItem[]): void {\n this.#regex = undefined;\n super.set(value);\n }\n\n asRegExp(): RegExp|null {\n if (typeof this.#regex !== 'undefined') {\n return this.#regex;\n }\n this.#regex = null;\n try {\n const pattern = this.get();\n if (pattern) {\n this.#regex = new RegExp(pattern, this.#regexFlags || '');\n }\n } catch (e) {\n }\n return this.#regex;\n }\n}\n\nexport class VersionController {\n static readonly GLOBAL_VERSION_SETTING_NAME = 'inspectorVersion';\n static readonly SYNCED_VERSION_SETTING_NAME = 'syncedInspectorVersion';\n static readonly LOCAL_VERSION_SETTING_NAME = 'localInspectorVersion';\n\n static readonly CURRENT_VERSION = 37;\n\n readonly #globalVersionSetting: Setting;\n readonly #syncedVersionSetting: Setting;\n readonly #localVersionSetting: Setting;\n\n constructor() {\n // If no version setting is found, we initialize with the current version and don't do anything.\n this.#globalVersionSetting = Settings.instance().createSetting(\n VersionController.GLOBAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.Global);\n this.#syncedVersionSetting = Settings.instance().createSetting(\n VersionController.SYNCED_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.Synced);\n this.#localVersionSetting = Settings.instance().createSetting(\n VersionController.LOCAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.Local);\n }\n\n /**\n * Force re-sets all version number settings to the current version without\n * running any migrations.\n */\n resetToCurrent(): void {\n this.#globalVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#syncedVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#localVersionSetting.set(VersionController.CURRENT_VERSION);\n }\n\n /**\n * Runs the appropriate migrations and updates the version settings accordingly.\n *\n * To determine what migrations to run we take the minimum of all version number settings.\n *\n * IMPORTANT: All migrations must be idempotent since they might be applied multiple times.\n */\n updateVersion(): void {\n const currentVersion = VersionController.CURRENT_VERSION;\n const minimumVersion =\n Math.min(this.#globalVersionSetting.get(), this.#syncedVersionSetting.get(), this.#localVersionSetting.get());\n const methodsToRun = this.methodsToRunToUpdateVersion(minimumVersion, currentVersion);\n console.assert(\n // @ts-ignore\n this[`updateVersionFrom${currentVersion}To${currentVersion + 1}`] === undefined,\n 'Unexpected migration method found. Increment CURRENT_VERSION or remove the method.');\n for (const method of methodsToRun) {\n // @ts-ignore Special version method matching\n this[method].call(this);\n }\n this.resetToCurrent();\n }\n\n private methodsToRunToUpdateVersion(oldVersion: number, currentVersion: number): string[] {\n const result = [];\n for (let i = oldVersion; i < currentVersion; ++i) {\n result.push('updateVersionFrom' + i + 'To' + (i + 1));\n }\n return result;\n }\n\n private updateVersionFrom0To1(): void {\n this.clearBreakpointsWhenTooMany(Settings.instance().createLocalSetting('breakpoints', []), 500000);\n }\n\n private updateVersionFrom1To2(): void {\n Settings.instance().createSetting('previouslyViewedFiles', []).set([]);\n }\n\n private updateVersionFrom2To3(): void {\n Settings.instance().createSetting('fileSystemMapping', {}).set({});\n removeSetting(Settings.instance().createSetting('fileMappingEntries', []));\n }\n\n private updateVersionFrom3To4(): void {\n const advancedMode = Settings.instance().createSetting('showHeaSnapshotObjectsHiddenProperties', false);\n moduleSetting('showAdvancedHeapSnapshotProperties').set(advancedMode.get());\n removeSetting(advancedMode);\n }\n\n private updateVersionFrom4To5(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n 'FileSystemViewSidebarWidth': 'fileSystemViewSplitViewState',\n 'elementsSidebarWidth': 'elementsPanelSplitViewState',\n 'StylesPaneSplitRatio': 'stylesPaneSplitViewState',\n 'heapSnapshotRetainersViewSize': 'heapSnapshotSplitViewState',\n 'InspectorView.splitView': 'InspectorView.splitViewState',\n 'InspectorView.screencastSplitView': 'InspectorView.screencastSplitViewState',\n 'Inspector.drawerSplitView': 'Inspector.drawerSplitViewState',\n 'layerDetailsSplitView': 'layerDetailsSplitViewState',\n 'networkSidebarWidth': 'networkPanelSplitViewState',\n 'sourcesSidebarWidth': 'sourcesPanelSplitViewState',\n 'scriptsPanelNavigatorSidebarWidth': 'sourcesPanelNavigatorSplitViewState',\n 'sourcesPanelSplitSidebarRatio': 'sourcesPanelDebuggerSidebarSplitViewState',\n 'timeline-details': 'timelinePanelDetailsSplitViewState',\n 'timeline-split': 'timelinePanelRecorsSplitViewState',\n 'timeline-view': 'timelinePanelTimelineStackSplitViewState',\n 'auditsSidebarWidth': 'auditsPanelSplitViewState',\n 'layersSidebarWidth': 'layersPanelSplitViewState',\n 'profilesSidebarWidth': 'profilesPanelSplitViewState',\n 'resourcesSidebarWidth': 'resourcesPanelSplitViewState',\n };\n const empty = {};\n for (const oldName in settingNames) {\n const newName = settingNames[oldName];\n const oldNameH = oldName + 'H';\n\n let newValue: {}|null = null;\n const oldSetting = Settings.instance().createSetting(oldName, empty);\n if (oldSetting.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.vertical = {};\n // @ts-expect-error\n newValue.vertical.size = oldSetting.get();\n removeSetting(oldSetting);\n }\n const oldSettingH = Settings.instance().createSetting(oldNameH, empty);\n if (oldSettingH.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.horizontal = {};\n // @ts-expect-error\n newValue.horizontal.size = oldSettingH.get();\n removeSetting(oldSettingH);\n }\n if (newValue) {\n Settings.instance().createSetting(newName, {}).set(newValue);\n }\n }\n }\n\n private updateVersionFrom5To6(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n 'debuggerSidebarHidden': 'sourcesPanelSplitViewState',\n 'navigatorHidden': 'sourcesPanelNavigatorSplitViewState',\n 'WebInspector.Drawer.showOnLoad': 'Inspector.drawerSplitViewState',\n };\n\n for (const oldName in settingNames) {\n const oldSetting = Settings.instance().createSetting(oldName, null);\n if (oldSetting.get() === null) {\n removeSetting(oldSetting);\n continue;\n }\n\n const newName = settingNames[oldName];\n const invert = oldName === 'WebInspector.Drawer.showOnLoad';\n const hidden = oldSetting.get() !== invert;\n removeSetting(oldSetting);\n const showMode = hidden ? 'OnlyMain' : 'Both';\n\n const newSetting = Settings.instance().createSetting(newName, {});\n const newValue = newSetting.get() || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical = newValue.vertical || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical.showMode = showMode;\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal = newValue.horizontal || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal.showMode = showMode;\n newSetting.set(newValue);\n }\n }\n\n private updateVersionFrom6To7(): void {\n const settingNames = {\n 'sourcesPanelNavigatorSplitViewState': 'sourcesPanelNavigatorSplitViewState',\n 'elementsPanelSplitViewState': 'elementsPanelSplitViewState',\n 'stylesPaneSplitViewState': 'stylesPaneSplitViewState',\n 'sourcesPanelDebuggerSidebarSplitViewState': 'sourcesPanelDebuggerSidebarSplitViewState',\n };\n\n const empty = {};\n for (const name in settingNames) {\n const setting =\n Settings.instance().createSetting<{vertical?: {size?: number}, horizontal?: {size?: number}}>(name, empty);\n const value = setting.get();\n if (value === empty) {\n continue;\n }\n // Zero out saved percentage sizes, and they will be restored to defaults.\n if (value.vertical && value.vertical.size && value.vertical.size < 1) {\n value.vertical.size = 0;\n }\n if (value.horizontal && value.horizontal.size && value.horizontal.size < 1) {\n value.horizontal.size = 0;\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom7To8(): void {\n }\n\n private updateVersionFrom8To9(): void {\n const settingNames = ['skipStackFramesPattern', 'workspaceFolderExcludePattern'];\n\n for (let i = 0; i < settingNames.length; ++i) {\n const setting = Settings.instance().createSetting(settingNames[i], '');\n let value = setting.get();\n if (!value) {\n return;\n }\n if (typeof value === 'string') {\n value = [value];\n }\n for (let j = 0; j < value.length; ++j) {\n if (typeof value[j] === 'string') {\n value[j] = {pattern: value[j]};\n }\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom9To10(): void {\n // This one is localStorage specific, which is fine.\n if (!window.localStorage) {\n return;\n }\n for (const key in window.localStorage) {\n if (key.startsWith('revision-history')) {\n window.localStorage.removeItem(key);\n }\n }\n }\n\n private updateVersionFrom10To11(): void {\n const oldSettingName = 'customDevicePresets';\n const newSettingName = 'customEmulatedDeviceList';\n const oldSetting = Settings.instance().createSetting(oldSettingName, undefined);\n const list = oldSetting.get();\n if (!Array.isArray(list)) {\n return;\n }\n const newList = [];\n for (let i = 0; i < list.length; ++i) {\n const value = list[i];\n const device: {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any,\n } = {};\n device['title'] = value['title'];\n device['type'] = 'unknown';\n device['user-agent'] = value['userAgent'];\n device['capabilities'] = [];\n if (value['touch']) {\n device['capabilities'].push('touch');\n }\n if (value['mobile']) {\n device['capabilities'].push('mobile');\n }\n device['screen'] = {};\n device['screen']['vertical'] = {width: value['width'], height: value['height']};\n device['screen']['horizontal'] = {width: value['height'], height: value['width']};\n device['screen']['device-pixel-ratio'] = value['deviceScaleFactor'];\n device['modes'] = [];\n device['show-by-default'] = true;\n device['show'] = 'Default';\n newList.push(device);\n }\n if (newList.length) {\n Settings.instance().createSetting(newSettingName, []).set(newList);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom11To12(): void {\n this.migrateSettingsFromLocalStorage();\n }\n\n private updateVersionFrom12To13(): void {\n this.migrateSettingsFromLocalStorage();\n removeSetting(Settings.instance().createSetting('timelineOverviewMode', ''));\n }\n\n private updateVersionFrom13To14(): void {\n const defaultValue = {'throughput': -1, 'latency': 0};\n Settings.instance().createSetting('networkConditions', defaultValue).set(defaultValue);\n }\n\n private updateVersionFrom14To15(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string[],\n } = {};\n for (const fileSystemPath in oldValue) {\n newValue[fileSystemPath] = [];\n for (const entry of oldValue[fileSystemPath]) {\n newValue[fileSystemPath].push(entry.path);\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom15To16(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const tabOrders = setting.get();\n for (const key of Object.keys(tabOrders)) {\n tabOrders[key] = (tabOrders[key] + 1) * 10;\n }\n setting.set(tabOrders);\n }\n\n private updateVersionFrom16To17(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('networkConditionsCustomProfiles', []);\n const oldValue = setting.get();\n const newValue = [];\n if (Array.isArray(oldValue)) {\n for (const preset of oldValue) {\n if (typeof preset.title === 'string' && typeof preset.value === 'object' &&\n typeof preset.value.throughput === 'number' && typeof preset.value.latency === 'number') {\n newValue.push({\n title: preset.title,\n value: {download: preset.value.throughput, upload: preset.value.throughput, latency: preset.value.latency},\n });\n }\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom17To18(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string,\n } = {};\n for (const oldKey in oldValue) {\n let newKey = oldKey.replace(/\\\\/g, '/');\n if (!newKey.startsWith('file://')) {\n if (newKey.startsWith('/')) {\n newKey = 'file://' + newKey;\n } else {\n newKey = 'file:///' + newKey;\n }\n }\n newValue[newKey] = oldValue[oldKey];\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom18To19(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const visibleColumnSettings = Settings.instance().createSetting('networkLogColumnsVisibility', defaultColumns);\n const visibleColumns = visibleColumnSettings.get();\n visibleColumns.name = true;\n visibleColumns.timeline = true;\n\n const configs: {\n [x: string]: {\n visible: number,\n },\n } = {};\n for (const columnId in visibleColumns) {\n if (!visibleColumns.hasOwnProperty(columnId)) {\n continue;\n }\n configs[columnId.toLowerCase()] = {visible: visibleColumns[columnId]};\n }\n const newSetting = Settings.instance().createSetting('networkLogColumns', {});\n newSetting.set(configs);\n removeSetting(visibleColumnSettings);\n }\n\n private updateVersionFrom19To20(): void {\n const oldSetting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const newSetting = Settings.instance().createSetting('panel-tabOrder', {});\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom20To21(): void {\n const networkColumns = Settings.instance().createSetting('networkLogColumns', {});\n const columns = (networkColumns.get() as {\n [x: string]: string,\n });\n delete columns['timeline'];\n delete columns['waterfall'];\n networkColumns.set(columns);\n }\n\n private updateVersionFrom21To22(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['url'] = breakpoint['sourceFileId'];\n delete breakpoint['sourceFileId'];\n }\n breakpointsSetting.set(breakpoints);\n }\n\n private updateVersionFrom22To23(): void {\n // This update is no-op.\n }\n\n private updateVersionFrom23To24(): void {\n const oldSetting = Settings.instance().createSetting('searchInContentScripts', false);\n const newSetting = Settings.instance().createSetting('searchInAnonymousAndContentScripts', false);\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom24To25(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const networkLogColumnsSetting = Settings.instance().createSetting('networkLogColumns', defaultColumns);\n const columns = networkLogColumnsSetting.get();\n delete columns.product;\n networkLogColumnsSetting.set(columns);\n }\n\n private updateVersionFrom25To26(): void {\n const oldSetting = Settings.instance().createSetting('messageURLFilters', {});\n const urls = Object.keys(oldSetting.get());\n const textFilter = urls.map(url => `-url:${url}`).join(' ');\n if (textFilter) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const textFilterSetting = Settings.instance().createSetting('console.textFilter', '');\n const suffix = textFilterSetting.get() ? ` ${textFilterSetting.get()}` : '';\n textFilterSetting.set(`${textFilter}${suffix}`);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom26To27(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits2', 'audits');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits2', 'audits');\n renameInStringSetting('panel-selectedTab', 'audits2', 'audits');\n }\n\n private updateVersionFrom27To28(): void {\n const setting = Settings.instance().createSetting('uiTheme', 'systemPreferred');\n if (setting.get() === 'default') {\n setting.set('systemPreferred');\n }\n }\n\n private updateVersionFrom28To29(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits', 'lighthouse');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits', 'lighthouse');\n renameInStringSetting('panel-selectedTab', 'audits', 'lighthouse');\n }\n\n private updateVersionFrom29To30(): void {\n // Create new location agnostic setting\n const closeableTabSetting = Settings.instance().createSetting('closeableTabs', {});\n\n // Read current settings\n const panelCloseableTabSetting = Settings.instance().createSetting('panel-closeableTabs', {});\n const drawerCloseableTabSetting = Settings.instance().createSetting('drawer-view-closeableTabs', {});\n const openTabsInPanel = panelCloseableTabSetting.get();\n const openTabsInDrawer = panelCloseableTabSetting.get();\n\n // Set #value of new setting\n const newValue = Object.assign(openTabsInDrawer, openTabsInPanel);\n closeableTabSetting.set(newValue);\n\n // Remove old settings\n removeSetting(panelCloseableTabSetting);\n removeSetting(drawerCloseableTabSetting);\n }\n\n private updateVersionFrom30To31(): void {\n // Remove recorder_recordings setting that was used for storing recordings\n // by an old recorder experiment.\n const recordingsSetting = Settings.instance().createSetting('recorder_recordings', []);\n removeSetting(recordingsSetting);\n }\n\n updateVersionFrom31To32(): void {\n // Introduce the new 'resourceTypeName' property on stored breakpoints. Prior to\n // this change we synchronized the breakpoint only by URL, but since we don't\n // know on which resource type the given breakpoint was set, we just assume\n // 'script' here to keep things simple.\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['resourceTypeName'] = 'script';\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom32To33(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const previouslyViewedFilesSetting = Settings.instance().createLocalSetting('previouslyViewedFiles', []);\n let previouslyViewedFiles = previouslyViewedFilesSetting.get();\n\n // Discard old 'previouslyViewedFiles' items that don't have a 'url' property.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n previouslyViewedFiles = previouslyViewedFiles.filter((previouslyViewedFile: any) => 'url' in previouslyViewedFile);\n\n // Introduce the new 'resourceTypeName' property on previously viewed files.\n // Prior to this change we only keyed them based on the URL, but since we\n // don't know which resource type the given file had, we just assume 'script'\n // here to keep things simple.\n for (const previouslyViewedFile of previouslyViewedFiles) {\n previouslyViewedFile['resourceTypeName'] = 'script';\n }\n\n previouslyViewedFilesSetting.set(previouslyViewedFiles);\n }\n\n updateVersionFrom33To34(): void {\n // Introduces the 'isLogpoint' property on stored breakpoints. This information was\n // previously encoded in the 'condition' itself. This migration leaves the condition\n // alone but ensures that 'isLogpoint' is accurate for already stored breakpoints.\n // This enables us to use the 'isLogpoint' property in code.\n // A separate migration will remove the special encoding from the condition itself\n // once all refactorings are done.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const isLogpoint =\n breakpoint.condition.startsWith(logpointPrefix) && breakpoint.condition.endsWith(logpointSuffix);\n breakpoint['isLogpoint'] = isLogpoint;\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom34To35(): void {\n // Uses the 'isLogpoint' property on stored breakpoints to remove the prefix/suffix\n // from logpoints. This way, we store the entered log point condition as the user\n // entered it.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const {condition, isLogpoint} = breakpoint;\n if (isLogpoint) {\n breakpoint.condition = condition.slice(logpointPrefix.length, condition.length - logpointSuffix.length);\n }\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom35To36(): void {\n // We have changed the default from 'false' to 'true' and this updates the existing setting just for once.\n Settings.instance().createSetting('showThirdPartyIssues', true).set(true);\n }\n\n updateVersionFrom36To37(): void {\n const updateStorage = (storage: SettingsStorage): void => {\n for (const key of storage.keys()) {\n const normalizedKey = Settings.normalizeSettingName(key);\n if (normalizedKey !== key) {\n storage.set(normalizedKey, storage.get(key));\n removeSetting({name: key, storage});\n }\n }\n };\n updateStorage(Settings.instance().globalStorage);\n updateStorage(Settings.instance().syncedStorage);\n updateStorage(Settings.instance().localStorage);\n\n for (const key of Settings.instance().globalStorage.keys()) {\n if ((key.startsWith('data-grid-') && key.endsWith('-column-weights')) || key.endsWith('-tab-order') ||\n key === 'views-location-override' || key === 'closeable-tabs') {\n const setting = Settings.instance().createSetting(key, {});\n setting.set(Platform.StringUtilities.toKebabCaseKeys(setting.get()));\n }\n if (key.endsWith('-selected-tab')) {\n const setting = Settings.instance().createSetting(key, '');\n setting.set(Platform.StringUtilities.toKebabCase(setting.get()));\n }\n }\n }\n\n /*\n * Any new migration should be added before this comment.\n *\n * IMPORTANT: Migrations must be idempotent, since they may be applied\n * multiple times! E.g. when renaming a setting one has to check that the\n * a setting with the new name does not yet exist.\n * ----------------------------------------------------------------------- */\n\n private migrateSettingsFromLocalStorage(): void {\n // This step migrates all the settings except for the ones below into the browser profile.\n const localSettings = new Set([\n 'advancedSearchConfig',\n 'breakpoints',\n 'consoleHistory',\n 'domBreakpoints',\n 'eventListenerBreakpoints',\n 'fileSystemMapping',\n 'lastSelectedSourcesSidebarPaneTab',\n 'previouslyViewedFiles',\n 'savedURLs',\n 'watchExpressions',\n 'workspaceExcludedFolders',\n 'xhrBreakpoints',\n ]);\n if (!window.localStorage) {\n return;\n }\n\n for (const key in window.localStorage) {\n if (localSettings.has(key)) {\n continue;\n }\n const value = window.localStorage[key];\n window.localStorage.removeItem(key);\n Settings.instance().globalStorage.set(key, value);\n }\n }\n\n private clearBreakpointsWhenTooMany(breakpointsSetting: Setting, maxBreakpointsCount: number): void {\n // If there are too many breakpoints in a storage, it is likely due to a recent bug that caused\n // periodical breakpoints duplication leading to inspector slowness.\n if (breakpointsSetting.get().length > maxBreakpointsCount) {\n breakpointsSetting.set([]);\n }\n }\n}\n\nexport const enum SettingStorageType {\n /**\n * Synced storage persists settings with the active Chrome profile but also\n * syncs the settings across devices via Chrome Sync.\n */\n Synced = 'Synced',\n /** Global storage persists settings with the active Chrome profile */\n Global = 'Global',\n /** Uses Window.localStorage */\n Local = 'Local',\n /** Session storage dies when DevTools window closes */\n Session = 'Session',\n}\n\nexport function moduleSetting(settingName: string): Setting {\n return Settings.instance().moduleSetting(settingName);\n}\n\nexport function settingForTest(settingName: string): Setting {\n return Settings.instance().settingForTest(settingName);\n}\n\nexport {\n getLocalizedSettingsCategory,\n getRegisteredSettings,\n maybeRemoveSettingExtension,\n registerSettingExtension,\n RegExpSettingItem,\n SettingCategory,\n SettingExtensionOption,\n SettingRegistration,\n SettingType,\n registerSettingsForTest,\n resetSettings,\n};\n\nexport interface Serializer {\n stringify: (value: I) => string;\n parse: (value: string) => O;\n}\n\nexport interface SimpleSettingOption {\n value: string|boolean;\n title: string;\n text?: string;\n raw?: boolean;\n}\n"]} \ No newline at end of file +{"version":3,"file":"Settings.js","sourceRoot":"","sources":["../../../../../../front_end/core/common/Settings.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {Console} from './Console.js';\nimport {type EventDescriptor, type EventTargetEvent, type GenericEvents} from './EventTarget.js';\nimport {ObjectWrapper} from './Object.js';\nimport {\n getLocalizedSettingsCategory,\n getRegisteredSettings,\n maybeRemoveSettingExtension,\n type RegExpSettingItem,\n registerSettingExtension,\n registerSettingsForTest,\n resetSettings,\n SettingCategory,\n type SettingExtensionOption,\n type SettingRegistration,\n SettingType,\n} from './SettingRegistration.js';\n\nlet settingsInstance: Settings|undefined;\n\nexport class Settings {\n readonly #sessionStorage: SettingsStorage;\n settingNameSet: Set;\n orderValuesBySettingCategory: Map>;\n #eventSupport: ObjectWrapper;\n #registry: Map>;\n readonly moduleSettings: Map>;\n\n private constructor(\n readonly syncedStorage: SettingsStorage, readonly globalStorage: SettingsStorage,\n readonly localStorage: SettingsStorage) {\n this.#sessionStorage = new SettingsStorage({});\n\n this.settingNameSet = new Set();\n\n this.orderValuesBySettingCategory = new Map();\n\n this.#eventSupport = new ObjectWrapper();\n this.#registry = new Map();\n this.moduleSettings = new Map();\n\n for (const registration of getRegisteredSettings()) {\n const {settingName, defaultValue, storageType} = registration;\n const isRegex = registration.settingType === SettingType.REGEX;\n\n const setting = isRegex && typeof defaultValue === 'string' ?\n this.createRegExpSetting(settingName, defaultValue, undefined, storageType) :\n this.createSetting(settingName, defaultValue, storageType);\n\n setting.setTitleFunction(registration.title);\n if (registration.userActionCondition) {\n setting.setRequiresUserAction(Boolean(Root.Runtime.Runtime.queryParam(registration.userActionCondition)));\n }\n setting.setRegistration(registration);\n\n this.registerModuleSetting(setting);\n }\n }\n\n static hasInstance(): boolean {\n return typeof settingsInstance !== 'undefined';\n }\n\n static instance(opts: {\n forceNew: boolean|null,\n syncedStorage: SettingsStorage|null,\n globalStorage: SettingsStorage|null,\n localStorage: SettingsStorage|null,\n } = {forceNew: null, syncedStorage: null, globalStorage: null, localStorage: null}): Settings {\n const {forceNew, syncedStorage, globalStorage, localStorage} = opts;\n if (!settingsInstance || forceNew) {\n if (!syncedStorage || !globalStorage || !localStorage) {\n throw new Error(`Unable to create settings: global and local storage must be provided: ${new Error().stack}`);\n }\n\n settingsInstance = new Settings(syncedStorage, globalStorage, localStorage);\n }\n\n return settingsInstance;\n }\n\n static removeInstance(): void {\n settingsInstance = undefined;\n }\n\n private registerModuleSetting(setting: Setting): void {\n const settingName = setting.name;\n const category = setting.category();\n const order = setting.order();\n if (this.settingNameSet.has(settingName)) {\n throw new Error(`Duplicate Setting name '${settingName}'`);\n }\n if (category && order) {\n const orderValues = this.orderValuesBySettingCategory.get(category) || new Set();\n if (orderValues.has(order)) {\n throw new Error(`Duplicate order value '${order}' for settings category '${category}'`);\n }\n orderValues.add(order);\n this.orderValuesBySettingCategory.set(category, orderValues);\n }\n this.settingNameSet.add(settingName);\n this.moduleSettings.set(setting.name, setting);\n }\n\n static normalizeSettingName(name: string): string {\n if ([\n VersionController.GLOBAL_VERSION_SETTING_NAME,\n VersionController.SYNCED_VERSION_SETTING_NAME,\n VersionController.LOCAL_VERSION_SETTING_NAME,\n 'currentDockState',\n 'isUnderTest',\n ].includes(name)) {\n return name;\n }\n return Platform.StringUtilities.toKebabCase(name);\n }\n\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n moduleSetting(settingName: string): Setting {\n const setting = this.moduleSettings.get(settingName) as Setting;\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n settingForTest(settingName: string): Setting {\n const setting = this.#registry.get(settingName);\n if (!setting) {\n throw new Error('No setting registered: ' + settingName);\n }\n return setting;\n }\n\n createSetting(key: string, defaultValue: T, storageType?: SettingStorageType): Setting {\n const storage = this.storageFromType(storageType);\n let setting = (this.#registry.get(key) as Setting);\n if (!setting) {\n setting = new Setting(key, defaultValue, this.#eventSupport, storage);\n this.#registry.set(key, setting);\n }\n return setting;\n }\n\n createLocalSetting(key: string, defaultValue: T): Setting {\n return this.createSetting(key, defaultValue, SettingStorageType.Local);\n }\n\n createRegExpSetting(key: string, defaultValue: string, regexFlags?: string, storageType?: SettingStorageType):\n RegExpSetting {\n if (!this.#registry.get(key)) {\n this.#registry.set(\n key, new RegExpSetting(key, defaultValue, this.#eventSupport, this.storageFromType(storageType), regexFlags));\n }\n return this.#registry.get(key) as RegExpSetting;\n }\n\n clearAll(): void {\n this.globalStorage.removeAll();\n this.syncedStorage.removeAll();\n this.localStorage.removeAll();\n new VersionController().resetToCurrent();\n }\n\n private storageFromType(storageType?: SettingStorageType): SettingsStorage {\n switch (storageType) {\n case SettingStorageType.Local:\n return this.localStorage;\n case SettingStorageType.Session:\n return this.#sessionStorage;\n case SettingStorageType.Global:\n return this.globalStorage;\n case SettingStorageType.Synced:\n return this.syncedStorage;\n }\n return this.globalStorage;\n }\n\n getRegistry(): Map> {\n return this.#registry;\n }\n}\n\nexport interface SettingsBackingStore {\n register(setting: string): void;\n get(setting: string): Promise;\n set(setting: string, value: string): void;\n remove(setting: string): void;\n clear(): void;\n}\n\nexport const NOOP_STORAGE: SettingsBackingStore = {\n register: () => {},\n set: () => {},\n get: () => Promise.resolve(''),\n remove: () => {},\n clear: () => {},\n};\n\nexport class SettingsStorage {\n constructor(\n private object: Record, private readonly backingStore: SettingsBackingStore = NOOP_STORAGE,\n private readonly storagePrefix: string = '') {\n }\n\n register(name: string): void {\n name = this.storagePrefix + name;\n this.backingStore.register(name);\n }\n\n set(name: string, value: string): void {\n name = this.storagePrefix + name;\n this.object[name] = value;\n this.backingStore.set(name, value);\n }\n\n has(name: string): boolean {\n name = this.storagePrefix + name;\n return name in this.object;\n }\n\n get(name: string): string {\n name = this.storagePrefix + name;\n return this.object[name];\n }\n\n async forceGet(originalName: string): Promise {\n const name = this.storagePrefix + originalName;\n const value = await this.backingStore.get(name);\n if (value && value !== this.object[name]) {\n this.set(originalName, value);\n } else if (!value) {\n this.remove(originalName);\n }\n return value;\n }\n\n remove(name: string): void {\n name = this.storagePrefix + name;\n delete this.object[name];\n this.backingStore.remove(name);\n }\n\n removeAll(): void {\n this.object = {};\n this.backingStore.clear();\n }\n\n keys(): string[] {\n return Object.keys(this.object);\n }\n\n dumpSizes(): void {\n Console.instance().log('Ten largest settings: ');\n\n const sizes: {\n [x: string]: number,\n // @ts-expect-error __proto__ optimization\n } = {__proto__: null};\n for (const key in this.object) {\n sizes[key] = this.object[key].length;\n }\n const keys = Object.keys(sizes);\n\n function comparator(key1: string, key2: string): number {\n return sizes[key2] - sizes[key1];\n }\n\n keys.sort(comparator);\n\n for (let i = 0; i < 10 && i < keys.length; ++i) {\n Console.instance().log('Setting: \\'' + keys[i] + '\\', size: ' + sizes[keys[i]]);\n }\n }\n}\n\nfunction removeSetting(setting: {name: string, storage: SettingsStorage}): void {\n const name = setting.name;\n const settings = Settings.instance();\n\n settings.getRegistry().delete(name);\n settings.moduleSettings.delete(name);\n\n setting.storage.remove(name);\n}\n\nexport class Deprecation {\n readonly disabled: boolean;\n readonly warning: Platform.UIString.LocalizedString;\n readonly experiment?: Root.Runtime.Experiment;\n\n constructor({deprecationNotice}: SettingRegistration) {\n if (!deprecationNotice) {\n throw new Error('Cannot create deprecation info for a non-deprecated setting');\n }\n this.disabled = deprecationNotice.disabled;\n this.warning = deprecationNotice.warning();\n this.experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n }\n}\n\nexport class Setting {\n #titleFunction?: () => Platform.UIString.LocalizedString;\n #titleInternal!: string;\n #registration: SettingRegistration|null = null;\n #requiresUserAction?: boolean;\n #value?: V;\n // TODO(crbug.com/1172300) Type cannot be inferred without changes to consumers. See above.\n #serializer: Serializer = JSON;\n #hadUserAction?: boolean;\n #disabled?: boolean;\n #deprecation: Deprecation|null = null;\n\n constructor(\n readonly name: string, readonly defaultValue: V, private readonly eventSupport: ObjectWrapper,\n readonly storage: SettingsStorage) {\n storage.register(this.name);\n }\n\n setSerializer(serializer: Serializer): void {\n this.#serializer = serializer;\n }\n\n addChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): EventDescriptor {\n return this.eventSupport.addEventListener(this.name, listener, thisObject);\n }\n\n removeChangeListener(listener: (arg0: EventTargetEvent) => void, thisObject?: Object): void {\n this.eventSupport.removeEventListener(this.name, listener, thisObject);\n }\n\n title(): string {\n if (this.#titleInternal) {\n return this.#titleInternal;\n }\n if (this.#titleFunction) {\n return this.#titleFunction();\n }\n return '';\n }\n\n setTitleFunction(titleFunction: (() => Platform.UIString.LocalizedString)|undefined): void {\n if (titleFunction) {\n this.#titleFunction = titleFunction;\n }\n }\n\n setTitle(title: string): void {\n this.#titleInternal = title;\n }\n\n setRequiresUserAction(requiresUserAction: boolean): void {\n this.#requiresUserAction = requiresUserAction;\n }\n\n disabled(): boolean {\n return this.#disabled || false;\n }\n\n setDisabled(disabled: boolean): void {\n this.#disabled = disabled;\n this.eventSupport.dispatchEventToListeners(this.name);\n }\n\n get(): V {\n if (this.#requiresUserAction && !this.#hadUserAction) {\n return this.defaultValue;\n }\n\n if (typeof this.#value !== 'undefined') {\n return this.#value;\n }\n\n this.#value = this.defaultValue;\n if (this.storage.has(this.name)) {\n try {\n this.#value = this.#serializer.parse(this.storage.get(this.name));\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n return this.#value;\n }\n\n async forceGet(): Promise {\n const name = this.name;\n const oldValue = this.storage.get(name);\n const value = await this.storage.forceGet(name);\n this.#value = this.defaultValue;\n if (value) {\n try {\n this.#value = this.#serializer.parse(value);\n } catch (e) {\n this.storage.remove(this.name);\n }\n }\n\n if (oldValue !== value) {\n this.eventSupport.dispatchEventToListeners(this.name, this.#value);\n }\n\n return this.#value;\n }\n\n set(value: V): void {\n this.#hadUserAction = true;\n this.#value = value;\n try {\n const settingString = this.#serializer.stringify(value);\n try {\n this.storage.set(this.name, settingString);\n } catch (e) {\n this.printSettingsSavingError(e.message, this.name, settingString);\n }\n } catch (e) {\n Console.instance().error('Cannot stringify setting with name: ' + this.name + ', error: ' + e.message);\n }\n this.eventSupport.dispatchEventToListeners(this.name, value);\n }\n\n setRegistration(registration: SettingRegistration): void {\n this.#registration = registration;\n const {deprecationNotice} = registration;\n if (deprecationNotice?.disabled) {\n const experiment = deprecationNotice.experiment ?\n Root.Runtime.experiments.allConfigurableExperiments().find(e => e.name === deprecationNotice.experiment) :\n undefined;\n if ((!experiment || experiment.isEnabled())) {\n this.set(this.defaultValue);\n this.setDisabled(true);\n }\n }\n }\n\n type(): SettingType|null {\n if (this.#registration) {\n return this.#registration.settingType;\n }\n return null;\n }\n\n options(): SimpleSettingOption[] {\n if (this.#registration && this.#registration.options) {\n return this.#registration.options.map(opt => {\n const {value, title, text, raw} = opt;\n return {\n value: value,\n title: title(),\n text: typeof text === 'function' ? text() : text,\n raw: raw,\n };\n });\n }\n return [];\n }\n\n reloadRequired(): boolean|null {\n if (this.#registration) {\n return this.#registration.reloadRequired || null;\n }\n return null;\n }\n\n category(): SettingCategory|null {\n if (this.#registration) {\n return this.#registration.category || null;\n }\n return null;\n }\n\n tags(): string|null {\n if (this.#registration && this.#registration.tags) {\n // Get localized keys and separate by null character to prevent fuzzy matching from matching across them.\n return this.#registration.tags.map(tag => tag()).join('\\0');\n }\n return null;\n }\n\n order(): number|null {\n if (this.#registration) {\n return this.#registration.order || null;\n }\n return null;\n }\n\n get deprecation(): Deprecation|null {\n if (!this.#registration || !this.#registration.deprecationNotice) {\n return null;\n }\n if (!this.#deprecation) {\n this.#deprecation = new Deprecation(this.#registration);\n }\n return this.#deprecation;\n }\n\n private printSettingsSavingError(message: string, name: string, value: string): void {\n const errorMessage =\n 'Error saving setting with name: ' + this.name + ', value length: ' + value.length + '. Error: ' + message;\n console.error(errorMessage);\n Console.instance().error(errorMessage);\n this.storage.dumpSizes();\n }\n}\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport class RegExpSetting extends Setting {\n #regexFlags: string|undefined;\n #regex?: RegExp|null;\n\n constructor(\n name: string, defaultValue: string, eventSupport: ObjectWrapper, storage: SettingsStorage,\n regexFlags?: string) {\n super(name, defaultValue ? [{pattern: defaultValue}] : [], eventSupport, storage);\n this.#regexFlags = regexFlags;\n }\n\n override get(): string {\n const result = [];\n const items = this.getAsArray();\n for (let i = 0; i < items.length; ++i) {\n const item = items[i];\n if (item.pattern && !item.disabled) {\n result.push(item.pattern);\n }\n }\n return result.join('|');\n }\n\n getAsArray(): RegExpSettingItem[] {\n return super.get();\n }\n\n override set(value: string): void {\n this.setAsArray([{pattern: value, disabled: false}]);\n }\n\n setAsArray(value: RegExpSettingItem[]): void {\n this.#regex = undefined;\n super.set(value);\n }\n\n asRegExp(): RegExp|null {\n if (typeof this.#regex !== 'undefined') {\n return this.#regex;\n }\n this.#regex = null;\n try {\n const pattern = this.get();\n if (pattern) {\n this.#regex = new RegExp(pattern, this.#regexFlags || '');\n }\n } catch (e) {\n }\n return this.#regex;\n }\n}\n\nexport class VersionController {\n static readonly GLOBAL_VERSION_SETTING_NAME = 'inspectorVersion';\n static readonly SYNCED_VERSION_SETTING_NAME = 'syncedInspectorVersion';\n static readonly LOCAL_VERSION_SETTING_NAME = 'localInspectorVersion';\n\n static readonly CURRENT_VERSION = 37;\n\n readonly #globalVersionSetting: Setting;\n readonly #syncedVersionSetting: Setting;\n readonly #localVersionSetting: Setting;\n\n constructor() {\n // If no version setting is found, we initialize with the current version and don't do anything.\n this.#globalVersionSetting = Settings.instance().createSetting(\n VersionController.GLOBAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.Global);\n this.#syncedVersionSetting = Settings.instance().createSetting(\n VersionController.SYNCED_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.Synced);\n this.#localVersionSetting = Settings.instance().createSetting(\n VersionController.LOCAL_VERSION_SETTING_NAME, VersionController.CURRENT_VERSION, SettingStorageType.Local);\n }\n\n /**\n * Force re-sets all version number settings to the current version without\n * running any migrations.\n */\n resetToCurrent(): void {\n this.#globalVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#syncedVersionSetting.set(VersionController.CURRENT_VERSION);\n this.#localVersionSetting.set(VersionController.CURRENT_VERSION);\n }\n\n /**\n * Runs the appropriate migrations and updates the version settings accordingly.\n *\n * To determine what migrations to run we take the minimum of all version number settings.\n *\n * IMPORTANT: All migrations must be idempotent since they might be applied multiple times.\n */\n updateVersion(): void {\n const currentVersion = VersionController.CURRENT_VERSION;\n const minimumVersion =\n Math.min(this.#globalVersionSetting.get(), this.#syncedVersionSetting.get(), this.#localVersionSetting.get());\n const methodsToRun = this.methodsToRunToUpdateVersion(minimumVersion, currentVersion);\n console.assert(\n // @ts-ignore\n this[`updateVersionFrom${currentVersion}To${currentVersion + 1}`] === undefined,\n 'Unexpected migration method found. Increment CURRENT_VERSION or remove the method.');\n for (const method of methodsToRun) {\n // @ts-ignore Special version method matching\n this[method].call(this);\n }\n this.resetToCurrent();\n }\n\n private methodsToRunToUpdateVersion(oldVersion: number, currentVersion: number): string[] {\n const result = [];\n for (let i = oldVersion; i < currentVersion; ++i) {\n result.push('updateVersionFrom' + i + 'To' + (i + 1));\n }\n return result;\n }\n\n private updateVersionFrom0To1(): void {\n this.clearBreakpointsWhenTooMany(Settings.instance().createLocalSetting('breakpoints', []), 500000);\n }\n\n private updateVersionFrom1To2(): void {\n Settings.instance().createSetting('previouslyViewedFiles', []).set([]);\n }\n\n private updateVersionFrom2To3(): void {\n Settings.instance().createSetting('fileSystemMapping', {}).set({});\n removeSetting(Settings.instance().createSetting('fileMappingEntries', []));\n }\n\n private updateVersionFrom3To4(): void {\n const advancedMode = Settings.instance().createSetting('showHeaSnapshotObjectsHiddenProperties', false);\n moduleSetting('showAdvancedHeapSnapshotProperties').set(advancedMode.get());\n removeSetting(advancedMode);\n }\n\n private updateVersionFrom4To5(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n 'FileSystemViewSidebarWidth': 'fileSystemViewSplitViewState',\n 'elementsSidebarWidth': 'elementsPanelSplitViewState',\n 'StylesPaneSplitRatio': 'stylesPaneSplitViewState',\n 'heapSnapshotRetainersViewSize': 'heapSnapshotSplitViewState',\n 'InspectorView.splitView': 'InspectorView.splitViewState',\n 'InspectorView.screencastSplitView': 'InspectorView.screencastSplitViewState',\n 'Inspector.drawerSplitView': 'Inspector.drawerSplitViewState',\n 'layerDetailsSplitView': 'layerDetailsSplitViewState',\n 'networkSidebarWidth': 'networkPanelSplitViewState',\n 'sourcesSidebarWidth': 'sourcesPanelSplitViewState',\n 'scriptsPanelNavigatorSidebarWidth': 'sourcesPanelNavigatorSplitViewState',\n 'sourcesPanelSplitSidebarRatio': 'sourcesPanelDebuggerSidebarSplitViewState',\n 'timeline-details': 'timelinePanelDetailsSplitViewState',\n 'timeline-split': 'timelinePanelRecorsSplitViewState',\n 'timeline-view': 'timelinePanelTimelineStackSplitViewState',\n 'auditsSidebarWidth': 'auditsPanelSplitViewState',\n 'layersSidebarWidth': 'layersPanelSplitViewState',\n 'profilesSidebarWidth': 'profilesPanelSplitViewState',\n 'resourcesSidebarWidth': 'resourcesPanelSplitViewState',\n };\n const empty = {};\n for (const oldName in settingNames) {\n const newName = settingNames[oldName];\n const oldNameH = oldName + 'H';\n\n let newValue: {}|null = null;\n const oldSetting = Settings.instance().createSetting(oldName, empty);\n if (oldSetting.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.vertical = {};\n // @ts-expect-error\n newValue.vertical.size = oldSetting.get();\n removeSetting(oldSetting);\n }\n const oldSettingH = Settings.instance().createSetting(oldNameH, empty);\n if (oldSettingH.get() !== empty) {\n newValue = newValue || {};\n // @ts-expect-error\n newValue.horizontal = {};\n // @ts-expect-error\n newValue.horizontal.size = oldSettingH.get();\n removeSetting(oldSettingH);\n }\n if (newValue) {\n Settings.instance().createSetting(newName, {}).set(newValue);\n }\n }\n }\n\n private updateVersionFrom5To6(): void {\n const settingNames: {\n [x: string]: string,\n } = {\n 'debuggerSidebarHidden': 'sourcesPanelSplitViewState',\n 'navigatorHidden': 'sourcesPanelNavigatorSplitViewState',\n 'WebInspector.Drawer.showOnLoad': 'Inspector.drawerSplitViewState',\n };\n\n for (const oldName in settingNames) {\n const oldSetting = Settings.instance().createSetting(oldName, null);\n if (oldSetting.get() === null) {\n removeSetting(oldSetting);\n continue;\n }\n\n const newName = settingNames[oldName];\n const invert = oldName === 'WebInspector.Drawer.showOnLoad';\n const hidden = oldSetting.get() !== invert;\n removeSetting(oldSetting);\n const showMode = hidden ? 'OnlyMain' : 'Both';\n\n const newSetting = Settings.instance().createSetting(newName, {});\n const newValue = newSetting.get() || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical = newValue.vertical || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.vertical.showMode = showMode;\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal = newValue.horizontal || {};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // @ts-expect-error\n newValue.horizontal.showMode = showMode;\n newSetting.set(newValue);\n }\n }\n\n private updateVersionFrom6To7(): void {\n const settingNames = {\n 'sourcesPanelNavigatorSplitViewState': 'sourcesPanelNavigatorSplitViewState',\n 'elementsPanelSplitViewState': 'elementsPanelSplitViewState',\n 'stylesPaneSplitViewState': 'stylesPaneSplitViewState',\n 'sourcesPanelDebuggerSidebarSplitViewState': 'sourcesPanelDebuggerSidebarSplitViewState',\n };\n\n const empty = {};\n for (const name in settingNames) {\n const setting =\n Settings.instance().createSetting<{vertical?: {size?: number}, horizontal?: {size?: number}}>(name, empty);\n const value = setting.get();\n if (value === empty) {\n continue;\n }\n // Zero out saved percentage sizes, and they will be restored to defaults.\n if (value.vertical && value.vertical.size && value.vertical.size < 1) {\n value.vertical.size = 0;\n }\n if (value.horizontal && value.horizontal.size && value.horizontal.size < 1) {\n value.horizontal.size = 0;\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom7To8(): void {\n }\n\n private updateVersionFrom8To9(): void {\n const settingNames = ['skipStackFramesPattern', 'workspaceFolderExcludePattern'];\n\n for (let i = 0; i < settingNames.length; ++i) {\n const setting = Settings.instance().createSetting(settingNames[i], '');\n let value = setting.get();\n if (!value) {\n return;\n }\n if (typeof value === 'string') {\n value = [value];\n }\n for (let j = 0; j < value.length; ++j) {\n if (typeof value[j] === 'string') {\n value[j] = {pattern: value[j]};\n }\n }\n setting.set(value);\n }\n }\n\n private updateVersionFrom9To10(): void {\n // This one is localStorage specific, which is fine.\n if (!window.localStorage) {\n return;\n }\n for (const key in window.localStorage) {\n if (key.startsWith('revision-history')) {\n window.localStorage.removeItem(key);\n }\n }\n }\n\n private updateVersionFrom10To11(): void {\n const oldSettingName = 'customDevicePresets';\n const newSettingName = 'customEmulatedDeviceList';\n const oldSetting = Settings.instance().createSetting(oldSettingName, undefined);\n const list = oldSetting.get();\n if (!Array.isArray(list)) {\n return;\n }\n const newList = [];\n for (let i = 0; i < list.length; ++i) {\n const value = list[i];\n const device: {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any,\n } = {};\n device['title'] = value['title'];\n device['type'] = 'unknown';\n device['user-agent'] = value['userAgent'];\n device['capabilities'] = [];\n if (value['touch']) {\n device['capabilities'].push('touch');\n }\n if (value['mobile']) {\n device['capabilities'].push('mobile');\n }\n device['screen'] = {};\n device['screen']['vertical'] = {width: value['width'], height: value['height']};\n device['screen']['horizontal'] = {width: value['height'], height: value['width']};\n device['screen']['device-pixel-ratio'] = value['deviceScaleFactor'];\n device['modes'] = [];\n device['show-by-default'] = true;\n device['show'] = 'Default';\n newList.push(device);\n }\n if (newList.length) {\n Settings.instance().createSetting(newSettingName, []).set(newList);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom11To12(): void {\n this.migrateSettingsFromLocalStorage();\n }\n\n private updateVersionFrom12To13(): void {\n this.migrateSettingsFromLocalStorage();\n removeSetting(Settings.instance().createSetting('timelineOverviewMode', ''));\n }\n\n private updateVersionFrom13To14(): void {\n const defaultValue = {'throughput': -1, 'latency': 0};\n Settings.instance().createSetting('networkConditions', defaultValue).set(defaultValue);\n }\n\n private updateVersionFrom14To15(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string[],\n } = {};\n for (const fileSystemPath in oldValue) {\n newValue[fileSystemPath] = [];\n for (const entry of oldValue[fileSystemPath]) {\n newValue[fileSystemPath].push(entry.path);\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom15To16(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const tabOrders = setting.get();\n for (const key of Object.keys(tabOrders)) {\n tabOrders[key] = (tabOrders[key] + 1) * 10;\n }\n setting.set(tabOrders);\n }\n\n private updateVersionFrom16To17(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting('networkConditionsCustomProfiles', []);\n const oldValue = setting.get();\n const newValue = [];\n if (Array.isArray(oldValue)) {\n for (const preset of oldValue) {\n if (typeof preset.title === 'string' && typeof preset.value === 'object' &&\n typeof preset.value.throughput === 'number' && typeof preset.value.latency === 'number') {\n newValue.push({\n title: preset.title,\n value: {download: preset.value.throughput, upload: preset.value.throughput, latency: preset.value.latency},\n });\n }\n }\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom17To18(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createLocalSetting('workspaceExcludedFolders', {});\n const oldValue = setting.get();\n const newValue: {\n [x: string]: string,\n } = {};\n for (const oldKey in oldValue) {\n let newKey = oldKey.replace(/\\\\/g, '/');\n if (!newKey.startsWith('file://')) {\n if (newKey.startsWith('/')) {\n newKey = 'file://' + newKey;\n } else {\n newKey = 'file:///' + newKey;\n }\n }\n newValue[newKey] = oldValue[oldKey];\n }\n setting.set(newValue);\n }\n\n private updateVersionFrom18To19(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const visibleColumnSettings = Settings.instance().createSetting('networkLogColumnsVisibility', defaultColumns);\n const visibleColumns = visibleColumnSettings.get();\n visibleColumns.name = true;\n visibleColumns.timeline = true;\n\n const configs: {\n [x: string]: {\n visible: number,\n },\n } = {};\n for (const columnId in visibleColumns) {\n if (!visibleColumns.hasOwnProperty(columnId)) {\n continue;\n }\n configs[columnId.toLowerCase()] = {visible: visibleColumns[columnId]};\n }\n const newSetting = Settings.instance().createSetting('networkLogColumns', {});\n newSetting.set(configs);\n removeSetting(visibleColumnSettings);\n }\n\n private updateVersionFrom19To20(): void {\n const oldSetting = Settings.instance().createSetting('InspectorView.panelOrder', {});\n const newSetting = Settings.instance().createSetting('panel-tabOrder', {});\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom20To21(): void {\n const networkColumns = Settings.instance().createSetting('networkLogColumns', {});\n const columns = (networkColumns.get() as {\n [x: string]: string,\n });\n delete columns['timeline'];\n delete columns['waterfall'];\n networkColumns.set(columns);\n }\n\n private updateVersionFrom21To22(): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['url'] = breakpoint['sourceFileId'];\n delete breakpoint['sourceFileId'];\n }\n breakpointsSetting.set(breakpoints);\n }\n\n private updateVersionFrom22To23(): void {\n // This update is no-op.\n }\n\n private updateVersionFrom23To24(): void {\n const oldSetting = Settings.instance().createSetting('searchInContentScripts', false);\n const newSetting = Settings.instance().createSetting('searchInAnonymousAndContentScripts', false);\n newSetting.set(oldSetting.get());\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom24To25(): void {\n const defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const networkLogColumnsSetting = Settings.instance().createSetting('networkLogColumns', defaultColumns);\n const columns = networkLogColumnsSetting.get();\n delete columns.product;\n networkLogColumnsSetting.set(columns);\n }\n\n private updateVersionFrom25To26(): void {\n const oldSetting = Settings.instance().createSetting('messageURLFilters', {});\n const urls = Object.keys(oldSetting.get());\n const textFilter = urls.map(url => `-url:${url}`).join(' ');\n if (textFilter) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const textFilterSetting = Settings.instance().createSetting('console.textFilter', '');\n const suffix = textFilterSetting.get() ? ` ${textFilterSetting.get()}` : '';\n textFilterSetting.set(`${textFilter}${suffix}`);\n }\n removeSetting(oldSetting);\n }\n\n private updateVersionFrom26To27(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits2', 'audits');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits2', 'audits');\n renameInStringSetting('panel-selectedTab', 'audits2', 'audits');\n }\n\n private updateVersionFrom27To28(): void {\n const setting = Settings.instance().createSetting('uiTheme', 'systemPreferred');\n if (setting.get() === 'default') {\n setting.set('systemPreferred');\n }\n }\n\n private updateVersionFrom28To29(): void {\n function renameKeyInObjectSetting(settingName: string, from: string, to: string): void {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const setting = Settings.instance().createSetting(settingName, {});\n const value = setting.get();\n if (from in value) {\n value[to] = value[from];\n delete value[from];\n setting.set(value);\n }\n }\n\n function renameInStringSetting(settingName: string, from: string, to: string): void {\n const setting = Settings.instance().createSetting(settingName, '');\n const value = setting.get();\n if (value === from) {\n setting.set(to);\n }\n }\n\n renameKeyInObjectSetting('panel-tabOrder', 'audits', 'lighthouse');\n renameKeyInObjectSetting('panel-closeableTabs', 'audits', 'lighthouse');\n renameInStringSetting('panel-selectedTab', 'audits', 'lighthouse');\n }\n\n private updateVersionFrom29To30(): void {\n // Create new location agnostic setting\n const closeableTabSetting = Settings.instance().createSetting('closeableTabs', {});\n\n // Read current settings\n const panelCloseableTabSetting = Settings.instance().createSetting('panel-closeableTabs', {});\n const drawerCloseableTabSetting = Settings.instance().createSetting('drawer-view-closeableTabs', {});\n const openTabsInPanel = panelCloseableTabSetting.get();\n const openTabsInDrawer = panelCloseableTabSetting.get();\n\n // Set #value of new setting\n const newValue = Object.assign(openTabsInDrawer, openTabsInPanel);\n closeableTabSetting.set(newValue);\n\n // Remove old settings\n removeSetting(panelCloseableTabSetting);\n removeSetting(drawerCloseableTabSetting);\n }\n\n private updateVersionFrom30To31(): void {\n // Remove recorder_recordings setting that was used for storing recordings\n // by an old recorder experiment.\n const recordingsSetting = Settings.instance().createSetting('recorder_recordings', []);\n removeSetting(recordingsSetting);\n }\n\n updateVersionFrom31To32(): void {\n // Introduce the new 'resourceTypeName' property on stored breakpoints. Prior to\n // this change we synchronized the breakpoint only by URL, but since we don't\n // know on which resource type the given breakpoint was set, we just assume\n // 'script' here to keep things simple.\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n breakpoint['resourceTypeName'] = 'script';\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom32To33(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const previouslyViewedFilesSetting = Settings.instance().createLocalSetting('previouslyViewedFiles', []);\n let previouslyViewedFiles = previouslyViewedFilesSetting.get();\n\n // Discard old 'previouslyViewedFiles' items that don't have a 'url' property.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n previouslyViewedFiles = previouslyViewedFiles.filter((previouslyViewedFile: any) => 'url' in previouslyViewedFile);\n\n // Introduce the new 'resourceTypeName' property on previously viewed files.\n // Prior to this change we only keyed them based on the URL, but since we\n // don't know which resource type the given file had, we just assume 'script'\n // here to keep things simple.\n for (const previouslyViewedFile of previouslyViewedFiles) {\n previouslyViewedFile['resourceTypeName'] = 'script';\n }\n\n previouslyViewedFilesSetting.set(previouslyViewedFiles);\n }\n\n updateVersionFrom33To34(): void {\n // Introduces the 'isLogpoint' property on stored breakpoints. This information was\n // previously encoded in the 'condition' itself. This migration leaves the condition\n // alone but ensures that 'isLogpoint' is accurate for already stored breakpoints.\n // This enables us to use the 'isLogpoint' property in code.\n // A separate migration will remove the special encoding from the condition itself\n // once all refactorings are done.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const isLogpoint =\n breakpoint.condition.startsWith(logpointPrefix) && breakpoint.condition.endsWith(logpointSuffix);\n breakpoint['isLogpoint'] = isLogpoint;\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom34To35(): void {\n // Uses the 'isLogpoint' property on stored breakpoints to remove the prefix/suffix\n // from logpoints. This way, we store the entered log point condition as the user\n // entered it.\n\n // The prefix/suffix are hardcoded here, since these constants will be removed in\n // the future.\n const logpointPrefix = '/** DEVTOOLS_LOGPOINT */ console.log(';\n const logpointSuffix = ')';\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const breakpointsSetting = Settings.instance().createLocalSetting('breakpoints', []);\n const breakpoints = breakpointsSetting.get();\n for (const breakpoint of breakpoints) {\n const {condition, isLogpoint} = breakpoint;\n if (isLogpoint) {\n breakpoint.condition = condition.slice(logpointPrefix.length, condition.length - logpointSuffix.length);\n }\n }\n breakpointsSetting.set(breakpoints);\n }\n\n updateVersionFrom35To36(): void {\n // We have changed the default from 'false' to 'true' and this updates the existing setting just for once.\n Settings.instance().createSetting('showThirdPartyIssues', true).set(true);\n }\n\n updateVersionFrom36To37(): void {\n const updateStorage = (storage: SettingsStorage): void => {\n for (const key of storage.keys()) {\n const normalizedKey = Settings.normalizeSettingName(key);\n if (normalizedKey !== key) {\n storage.set(normalizedKey, storage.get(key));\n removeSetting({name: key, storage});\n }\n }\n };\n updateStorage(Settings.instance().globalStorage);\n updateStorage(Settings.instance().syncedStorage);\n updateStorage(Settings.instance().localStorage);\n\n for (const key of Settings.instance().globalStorage.keys()) {\n if ((key.startsWith('data-grid-') && key.endsWith('-column-weights')) || key.endsWith('-tab-order') ||\n key === 'views-location-override' || key === 'closeable-tabs') {\n const setting = Settings.instance().createSetting(key, {});\n setting.set(Platform.StringUtilities.toKebabCaseKeys(setting.get()));\n }\n if (key.endsWith('-selected-tab')) {\n const setting = Settings.instance().createSetting(key, '');\n setting.set(Platform.StringUtilities.toKebabCase(setting.get()));\n }\n }\n }\n\n /*\n * Any new migration should be added before this comment.\n *\n * IMPORTANT: Migrations must be idempotent, since they may be applied\n * multiple times! E.g. when renaming a setting one has to check that the\n * a setting with the new name does not yet exist.\n * ----------------------------------------------------------------------- */\n\n private migrateSettingsFromLocalStorage(): void {\n // This step migrates all the settings except for the ones below into the browser profile.\n const localSettings = new Set([\n 'advancedSearchConfig',\n 'breakpoints',\n 'consoleHistory',\n 'domBreakpoints',\n 'eventListenerBreakpoints',\n 'fileSystemMapping',\n 'lastSelectedSourcesSidebarPaneTab',\n 'previouslyViewedFiles',\n 'savedURLs',\n 'watchExpressions',\n 'workspaceExcludedFolders',\n 'xhrBreakpoints',\n ]);\n if (!window.localStorage) {\n return;\n }\n\n for (const key in window.localStorage) {\n if (localSettings.has(key)) {\n continue;\n }\n const value = window.localStorage[key];\n window.localStorage.removeItem(key);\n Settings.instance().globalStorage.set(key, value);\n }\n }\n\n private clearBreakpointsWhenTooMany(breakpointsSetting: Setting, maxBreakpointsCount: number): void {\n // If there are too many breakpoints in a storage, it is likely due to a recent bug that caused\n // periodical breakpoints duplication leading to inspector slowness.\n if (breakpointsSetting.get().length > maxBreakpointsCount) {\n breakpointsSetting.set([]);\n }\n }\n}\n\nexport const enum SettingStorageType {\n /**\n * Synced storage persists settings with the active Chrome profile but also\n * syncs the settings across devices via Chrome Sync.\n */\n Synced = 'Synced',\n /** Global storage persists settings with the active Chrome profile */\n Global = 'Global',\n /** Uses Window.localStorage */\n Local = 'Local',\n /** Session storage dies when DevTools window closes */\n Session = 'Session',\n}\n\nexport function moduleSetting(settingName: string): Setting {\n return Settings.instance().moduleSetting(settingName);\n}\n\nexport function settingForTest(settingName: string): Setting {\n return Settings.instance().settingForTest(settingName);\n}\n\nexport {\n getLocalizedSettingsCategory,\n getRegisteredSettings,\n maybeRemoveSettingExtension,\n registerSettingExtension,\n RegExpSettingItem,\n SettingCategory,\n SettingExtensionOption,\n SettingRegistration,\n SettingType,\n registerSettingsForTest,\n resetSettings,\n};\n\nexport interface Serializer {\n stringify: (value: I) => string;\n parse: (value: string) => O;\n}\n\nexport interface SimpleSettingOption {\n value: string|boolean;\n title: string;\n text?: string;\n raw?: boolean;\n}\n"]} \ No newline at end of file diff --git a/public/core/host/InspectorFrontendHost.d.ts b/public/core/host/InspectorFrontendHost.d.ts index 8c88f6891..5811b9ef5 100644 --- a/public/core/host/InspectorFrontendHost.d.ts +++ b/public/core/host/InspectorFrontendHost.d.ts @@ -1,6 +1,6 @@ import * as Common from '../common/common.js'; import * as Platform from '../platform/platform.js'; -import { type CanShowSurveyResult, type ChangeEvent, type ClickEvent, type ContextMenuDescriptor, type DoAidaConversationResult, type DragEvent, type EnumeratedHistogram, type EventTypes, type ExtensionDescriptor, type HoverEvent, type ImpressionEvent, type InspectorFrontendHostAPI, type KeyDownEvent, type LoadNetworkResourceResult, type ShowSurveyResult, type SyncInformation } from './InspectorFrontendHostAPI.js'; +import { type CanShowSurveyResult, type ChangeEvent, type ClickEvent, type ContextMenuDescriptor, type DoAidaConversationResult, type DragEvent, type EnumeratedHistogram, type EventTypes, type ExtensionDescriptor, type HoverEvent, type ImpressionEvent, type InspectorFrontendHostAPI, type KeyDownEvent, type LoadNetworkResourceResult, type ResizeEvent, type ShowSurveyResult, type SyncInformation } from './InspectorFrontendHostAPI.js'; /** * The InspectorFrontendHostStub is a stub interface used the frontend is loaded like a webpage. Examples: * - devtools://devtools/bundled/devtools_app.html @@ -103,6 +103,7 @@ export declare class InspectorFrontendHostStub implements InspectorFrontendHostA initialTargetId(): Promise; doAidaConversation(request: string, callback: (result: DoAidaConversationResult) => void): void; recordImpression(event: ImpressionEvent): void; + recordResize(event: ResizeEvent): void; recordClick(event: ClickEvent): void; recordHover(event: HoverEvent): void; recordDrag(event: DragEvent): void; diff --git a/public/core/host/InspectorFrontendHost.js b/public/core/host/InspectorFrontendHost.js index 903da0813..c8733e2c9 100644 --- a/public/core/host/InspectorFrontendHost.js +++ b/public/core/host/InspectorFrontendHost.js @@ -361,6 +361,8 @@ export class InspectorFrontendHostStub { } recordImpression(event) { } + recordResize(event) { + } recordClick(event) { } recordHover(event) { @@ -421,6 +423,10 @@ class InspectorFrontendAPIImpl { InspectorFrontendHostInstance['doAidaConversation'] = globalThis.doAidaConversationForTesting; } + if ('getSyncInformationForTesting' in globalThis) { + InspectorFrontendHostInstance['getSyncInformation'] = + globalThis.getSyncInformationForTesting; + } } else { // Otherwise add stubs for missing methods that are declared in the interface. diff --git a/public/core/host/InspectorFrontendHost.js.map b/public/core/host/InspectorFrontendHost.js.map index 99f4bc91d..a6b163cfe 100644 --- a/public/core/host/InspectorFrontendHost.js.map +++ b/public/core/host/InspectorFrontendHost.js.map @@ -1 +1 @@ -{"version":3,"file":"InspectorFrontendHost.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport * as Common from '../common/common.js';\nimport * as i18n from '../i18n/i18n.js';\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {\n type CanShowSurveyResult,\n type ChangeEvent,\n type ClickEvent,\n type ContextMenuDescriptor,\n type DoAidaConversationResult,\n type DragEvent,\n type EnumeratedHistogram,\n EventDescriptors,\n Events,\n type EventTypes,\n type ExtensionDescriptor,\n type HoverEvent,\n type ImpressionEvent,\n type InspectorFrontendHostAPI,\n type KeyDownEvent,\n type LoadNetworkResourceResult,\n type ShowSurveyResult,\n type SyncInformation,\n} from './InspectorFrontendHostAPI.js';\nimport {streamWrite as resourceLoaderStreamWrite} from './ResourceLoader.js';\n\ninterface DecompressionStream extends GenericTransformStream {\n readonly format: string;\n}\ndeclare const DecompressionStream: {\n prototype: DecompressionStream,\n new (format: string): DecompressionStream,\n};\n\nconst UIStrings = {\n /**\n *@description Document title in Inspector Frontend Host of the DevTools window\n *@example {example.com} PH1\n */\n devtoolsS: 'DevTools - {PH1}',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/host/InspectorFrontendHost.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\n\nconst MAX_RECORDED_HISTOGRAMS_SIZE = 100;\nconst OVERRIDES_FILE_SYSTEM_PATH = '/overrides' as Platform.DevToolsPath.RawPathString;\n\n/**\n * The InspectorFrontendHostStub is a stub interface used the frontend is loaded like a webpage. Examples:\n * - devtools://devtools/bundled/devtools_app.html\n * - https://chrome-devtools-frontend.appspot.com/serve_rev/@030cc140435b0152645522b9864b75cac6c0a854/worker_app.html\n * - http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/xTARGET_IDx\n *\n * When the frontend runs within the native embedder, then the InspectorFrontendHostAPI methods are provided\n * by devtools_compatibility.js. Those leverage `DevToolsAPI.sendMessageToEmbedder()` which match up with\n * the embedder API defined here: https://source.chromium.org/search?q=f:devtools%20f:dispatcher%20f:cc%20symbol:CreateForDevToolsFrontend&sq=&ss=chromium%2Fchromium%2Fsrc\n * The native implementations live in devtools_ui_bindings.cc: https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/devtools/devtools_ui_bindings.cc\n */\nexport class InspectorFrontendHostStub implements InspectorFrontendHostAPI {\n readonly #urlsBeingSaved: Map;\n events!: Common.EventTarget.EventTarget;\n #fileSystem: FileSystem|null = null;\n\n recordedCountHistograms:\n {histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number}[] = [];\n recordedEnumeratedHistograms: {actionName: EnumeratedHistogram, actionCode: number}[] = [];\n recordedPerformanceHistograms: {histogramName: string, duration: number}[] = [];\n\n constructor() {\n this.#urlsBeingSaved = new Map();\n\n // Guard against errors should this file ever be imported at the top level\n // within a worker - in which case this constructor is run. If there's no\n // document, we can early exit.\n if (typeof document === 'undefined') {\n return;\n }\n\n function stopEventPropagation(this: InspectorFrontendHostAPI, event: KeyboardEvent): void {\n // Let browser handle Ctrl+/Ctrl- shortcuts in hosted mode.\n const zoomModifier = this.platform() === 'mac' ? event.metaKey : event.ctrlKey;\n if (zoomModifier && (event.key === '+' || event.key === '-')) {\n event.stopPropagation();\n }\n }\n\n document.addEventListener('keydown', event => {\n stopEventPropagation.call(this, (event as KeyboardEvent));\n }, true);\n }\n\n platform(): string {\n const userAgent = navigator.userAgent;\n if (userAgent.includes('Windows NT')) {\n return 'windows';\n }\n if (userAgent.includes('Mac OS X')) {\n return 'mac';\n }\n return 'linux';\n }\n\n loadCompleted(): void {\n }\n\n bringToFront(): void {\n }\n\n closeWindow(): void {\n }\n\n setIsDocked(isDocked: boolean, callback: () => void): void {\n window.setTimeout(callback, 0);\n }\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void {\n window.setTimeout(() => callback({surveyShown: false}), 0);\n }\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void {\n window.setTimeout(() => callback({canShowSurvey: false}), 0);\n }\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void {\n }\n\n inspectElementCompleted(): void {\n }\n\n setInjectedScriptForOrigin(origin: string, script: string): void {\n }\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void {\n document.title = i18nString(UIStrings.devtoolsS, {PH1: url.replace(/^https?:\\/\\//, '')});\n }\n\n copyText(text: string|null|undefined): void {\n if (text === undefined || text === null) {\n return;\n }\n void navigator.clipboard.writeText(text);\n }\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void {\n window.open(url, '_blank');\n }\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n Common.Console.Console.instance().error(\n 'Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect');\n }\n\n save(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean):\n void {\n let buffer = this.#urlsBeingSaved.get(url);\n if (!buffer) {\n buffer = [];\n this.#urlsBeingSaved.set(url, buffer);\n }\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.SavedURL, {url, fileSystemPath: url});\n }\n\n append(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string): void {\n const buffer = this.#urlsBeingSaved.get(url);\n if (buffer) {\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.AppendedToURL, url);\n }\n }\n\n close(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString): void {\n const buffer = this.#urlsBeingSaved.get(url) || [];\n this.#urlsBeingSaved.delete(url);\n let fileName = '';\n\n if (url) {\n try {\n const trimmed = Platform.StringUtilities.trimURL(url);\n fileName = Platform.StringUtilities.removeURLFragment(trimmed);\n } catch (error) {\n // If url is not a valid URL, it is probably a filename.\n fileName = url;\n }\n }\n\n const link = document.createElement('a');\n link.download = fileName;\n const blob = new Blob([buffer.join('')], {type: 'text/plain'});\n const blobUrl = URL.createObjectURL(blob);\n link.href = blobUrl;\n link.click();\n URL.revokeObjectURL(blobUrl);\n }\n\n sendMessageToBackend(message: string): void {\n }\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void {\n if (this.recordedCountHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedCountHistograms.shift();\n }\n this.recordedCountHistograms.push({histogramName, sample, min, exclusiveMax, bucketSize});\n }\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void {\n if (this.recordedEnumeratedHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedEnumeratedHistograms.shift();\n }\n this.recordedEnumeratedHistograms.push({actionName, actionCode});\n }\n\n recordPerformanceHistogram(histogramName: string, duration: number): void {\n if (this.recordedPerformanceHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedPerformanceHistograms.shift();\n }\n this.recordedPerformanceHistograms.push({histogramName, duration});\n }\n\n recordUserMetricsAction(umaName: string): void {\n }\n\n requestFileSystems(): void {\n this.events.dispatchEventToListeners(Events.FileSystemsLoaded, []);\n }\n\n addFileSystem(type?: string): void {\n const onFileSystem = (fs: FileSystem): void => {\n this.#fileSystem = fs;\n const fileSystem = {\n fileSystemName: 'sandboxedRequestedFileSystem',\n fileSystemPath: OVERRIDES_FILE_SYSTEM_PATH,\n rootURL: 'filesystem:devtools://devtools/isolated/',\n type: 'overrides',\n };\n this.events.dispatchEventToListeners(Events.FileSystemAdded, {fileSystem});\n };\n window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, onFileSystem);\n }\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n const removalCallback = (entries: Entry[]): void => {\n entries.forEach(entry => {\n if (entry.isDirectory) {\n (entry as DirectoryEntry).removeRecursively(() => {});\n } else if (entry.isFile) {\n entry.remove(() => {});\n }\n });\n };\n\n if (this.#fileSystem) {\n this.#fileSystem.root.createReader().readEntries(removalCallback);\n }\n\n this.#fileSystem = null;\n this.events.dispatchEventToListeners(Events.FileSystemRemoved, OVERRIDES_FILE_SYSTEM_PATH);\n }\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null {\n return this.#fileSystem;\n }\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void {\n // Read the first 3 bytes looking for the gzip signature in the file header\n function isGzip(ab: ArrayBuffer): boolean {\n const buf = new Uint8Array(ab);\n if (!buf || buf.length < 3) {\n return false;\n }\n\n // https://www.rfc-editor.org/rfc/rfc1952#page-6\n return buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x08;\n }\n fetch(url)\n .then(async result => {\n const resultArrayBuf = await result.arrayBuffer();\n let decoded: ReadableStream|ArrayBuffer = resultArrayBuf;\n if (isGzip(resultArrayBuf)) {\n const ds = new DecompressionStream('gzip');\n const writer = ds.writable.getWriter();\n void writer.write(resultArrayBuf);\n void writer.close();\n decoded = ds.readable;\n }\n const text = await new Response(decoded).text();\n return text;\n })\n .then(function(text) {\n resourceLoaderStreamWrite(streamId, text);\n callback({\n statusCode: 200,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n })\n .catch(function() {\n callback({\n statusCode: 404,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n });\n }\n\n registerPreference(name: string, options: {synced?: boolean}): void {\n }\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void {\n const prefs: {\n [x: string]: string,\n } = {};\n for (const name in window.localStorage) {\n prefs[name] = window.localStorage[name];\n }\n callback(prefs);\n }\n\n getPreference(name: string, callback: (arg0: string) => void): void {\n callback(window.localStorage[name]);\n }\n\n setPreference(name: string, value: string): void {\n window.localStorage[name] = value;\n }\n\n removePreference(name: string): void {\n delete window.localStorage[name];\n }\n\n clearPreferences(): void {\n window.localStorage.clear();\n }\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void {\n callback({\n isSyncActive: false,\n arePreferencesSynced: false,\n });\n }\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void {\n }\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void {\n }\n\n stopIndexing(requestId: number): void {\n }\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void {\n }\n\n zoomFactor(): number {\n return 1;\n }\n\n zoomIn(): void {\n }\n\n zoomOut(): void {\n }\n\n resetZoom(): void {\n }\n\n setWhitelistedShortcuts(shortcuts: string): void {\n }\n\n setEyeDropperActive(active: boolean): void {\n }\n\n showCertificateViewer(certChain: string[]): void {\n }\n\n reattach(callback: () => void): void {\n }\n\n readyForTest(): void {\n }\n\n connectionReady(): void {\n }\n\n setOpenNewWindowForPopups(value: boolean): void {\n }\n\n setDevicesDiscoveryConfig(config: Adb.Config): void {\n }\n\n setDevicesUpdatesEnabled(enabled: boolean): void {\n }\n\n performActionOnRemotePage(pageId: string, action: string): void {\n }\n\n openRemotePage(browserId: string, url: string): void {\n }\n\n openNodeFrontend(): void {\n }\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void {\n throw 'Soft context menu should be used';\n }\n\n isHostedMode(): boolean {\n return true;\n }\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void {\n // Extensions are not supported in hosted mode.\n }\n\n async initialTargetId(): Promise {\n return null;\n }\n\n doAidaConversation(request: string, callback: (result: DoAidaConversationResult) => void): void {\n callback({\n response: '{}',\n });\n }\n\n recordImpression(event: ImpressionEvent): void {\n }\n recordClick(event: ClickEvent): void {\n }\n recordHover(event: HoverEvent): void {\n }\n recordDrag(event: DragEvent): void {\n }\n recordChange(event: ChangeEvent): void {\n }\n recordKeyDown(event: KeyDownEvent): void {\n }\n}\n\n// @ts-ignore Global injected by devtools-compatibility.js\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport let InspectorFrontendHostInstance: InspectorFrontendHostStub = globalThis.InspectorFrontendHost;\n\nclass InspectorFrontendAPIImpl {\n constructor() {\n for (const descriptor of EventDescriptors) {\n // @ts-ignore Dispatcher magic\n this[descriptor[1]] = this.dispatch.bind(this, descriptor[0], descriptor[2], descriptor[3]);\n }\n }\n\n private dispatch(name: symbol, signature: string[], runOnceLoaded: boolean, ...params: string[]): void {\n // Single argument methods get dispatched with the param.\n if (signature.length < 2) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, params[0]);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n return;\n }\n const data: {\n [x: string]: string,\n } = {};\n for (let i = 0; i < signature.length; ++i) {\n data[signature[i]] = params[i];\n }\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, data);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n }\n\n streamWrite(id: number, chunk: string): void {\n resourceLoaderStreamWrite(id, chunk);\n }\n}\n\n(function(): void {\n\nfunction initializeInspectorFrontendHost(): void {\n let proto;\n if (!InspectorFrontendHostInstance) {\n // Instantiate stub for web-hosted mode if necessary.\n // @ts-ignore Global injected by devtools-compatibility.js\n globalThis.InspectorFrontendHost = InspectorFrontendHostInstance = new InspectorFrontendHostStub();\n if ('doAidaConversationForTesting' in globalThis) {\n InspectorFrontendHostInstance['doAidaConversation'] =\n (globalThis as unknown as {\n doAidaConversationForTesting: typeof InspectorFrontendHostInstance['doAidaConversation'],\n }).doAidaConversationForTesting;\n }\n } else {\n // Otherwise add stubs for missing methods that are declared in the interface.\n proto = InspectorFrontendHostStub.prototype;\n for (const name of Object.getOwnPropertyNames(proto)) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n // @ts-expect-error\n const stub = proto[name];\n // @ts-ignore Global injected by devtools-compatibility.js\n if (typeof stub !== 'function' || InspectorFrontendHostInstance[name]) {\n continue;\n }\n\n console.error(`Incompatible embedder: method Host.InspectorFrontendHost.${name} is missing. Using stub instead.`);\n // @ts-ignore Global injected by devtools-compatibility.js\n InspectorFrontendHostInstance[name] = stub;\n }\n }\n\n // Attach the events object.\n InspectorFrontendHostInstance.events = new Common.ObjectWrapper.ObjectWrapper();\n}\n\n// FIXME: This file is included into both apps, since the devtools_app needs the InspectorFrontendHostAPI only,\n// so the host instance should not be initialized there.\ninitializeInspectorFrontendHost();\n// @ts-ignore Global injected by devtools-compatibility.js\nglobalThis.InspectorFrontendAPI = new InspectorFrontendAPIImpl();\n})();\n\nexport function isUnderTest(prefs?: {\n [x: string]: string,\n}): boolean {\n // Integration tests rely on test queryParam.\n if (Root.Runtime.Runtime.queryParam('test')) {\n return true;\n }\n // Browser tests rely on prefs.\n if (prefs) {\n return prefs['isUnderTest'] === 'true';\n }\n return Common.Settings.Settings.hasInstance() &&\n Common.Settings.Settings.instance().createSetting('isUnderTest', false).get();\n}\n"]} \ No newline at end of file +{"version":3,"file":"InspectorFrontendHost.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHost.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2009 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n/* eslint-disable @typescript-eslint/no-unused-vars */\n\nimport * as Common from '../common/common.js';\nimport * as i18n from '../i18n/i18n.js';\nimport * as Platform from '../platform/platform.js';\nimport * as Root from '../root/root.js';\n\nimport {\n type CanShowSurveyResult,\n type ChangeEvent,\n type ClickEvent,\n type ContextMenuDescriptor,\n type DoAidaConversationResult,\n type DragEvent,\n type EnumeratedHistogram,\n EventDescriptors,\n Events,\n type EventTypes,\n type ExtensionDescriptor,\n type HoverEvent,\n type ImpressionEvent,\n type InspectorFrontendHostAPI,\n type KeyDownEvent,\n type LoadNetworkResourceResult,\n type ResizeEvent,\n type ShowSurveyResult,\n type SyncInformation,\n} from './InspectorFrontendHostAPI.js';\nimport {streamWrite as resourceLoaderStreamWrite} from './ResourceLoader.js';\n\ninterface DecompressionStream extends GenericTransformStream {\n readonly format: string;\n}\ndeclare const DecompressionStream: {\n prototype: DecompressionStream,\n new (format: string): DecompressionStream,\n};\n\nconst UIStrings = {\n /**\n *@description Document title in Inspector Frontend Host of the DevTools window\n *@example {example.com} PH1\n */\n devtoolsS: 'DevTools - {PH1}',\n};\nconst str_ = i18n.i18n.registerUIStrings('core/host/InspectorFrontendHost.ts', UIStrings);\nconst i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);\n\nconst MAX_RECORDED_HISTOGRAMS_SIZE = 100;\nconst OVERRIDES_FILE_SYSTEM_PATH = '/overrides' as Platform.DevToolsPath.RawPathString;\n\n/**\n * The InspectorFrontendHostStub is a stub interface used the frontend is loaded like a webpage. Examples:\n * - devtools://devtools/bundled/devtools_app.html\n * - https://chrome-devtools-frontend.appspot.com/serve_rev/@030cc140435b0152645522b9864b75cac6c0a854/worker_app.html\n * - http://localhost:9222/devtools/inspector.html?ws=localhost:9222/devtools/page/xTARGET_IDx\n *\n * When the frontend runs within the native embedder, then the InspectorFrontendHostAPI methods are provided\n * by devtools_compatibility.js. Those leverage `DevToolsAPI.sendMessageToEmbedder()` which match up with\n * the embedder API defined here: https://source.chromium.org/search?q=f:devtools%20f:dispatcher%20f:cc%20symbol:CreateForDevToolsFrontend&sq=&ss=chromium%2Fchromium%2Fsrc\n * The native implementations live in devtools_ui_bindings.cc: https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/devtools/devtools_ui_bindings.cc\n */\nexport class InspectorFrontendHostStub implements InspectorFrontendHostAPI {\n readonly #urlsBeingSaved: Map;\n events!: Common.EventTarget.EventTarget;\n #fileSystem: FileSystem|null = null;\n\n recordedCountHistograms:\n {histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number}[] = [];\n recordedEnumeratedHistograms: {actionName: EnumeratedHistogram, actionCode: number}[] = [];\n recordedPerformanceHistograms: {histogramName: string, duration: number}[] = [];\n\n constructor() {\n this.#urlsBeingSaved = new Map();\n\n // Guard against errors should this file ever be imported at the top level\n // within a worker - in which case this constructor is run. If there's no\n // document, we can early exit.\n if (typeof document === 'undefined') {\n return;\n }\n\n function stopEventPropagation(this: InspectorFrontendHostAPI, event: KeyboardEvent): void {\n // Let browser handle Ctrl+/Ctrl- shortcuts in hosted mode.\n const zoomModifier = this.platform() === 'mac' ? event.metaKey : event.ctrlKey;\n if (zoomModifier && (event.key === '+' || event.key === '-')) {\n event.stopPropagation();\n }\n }\n\n document.addEventListener('keydown', event => {\n stopEventPropagation.call(this, (event as KeyboardEvent));\n }, true);\n }\n\n platform(): string {\n const userAgent = navigator.userAgent;\n if (userAgent.includes('Windows NT')) {\n return 'windows';\n }\n if (userAgent.includes('Mac OS X')) {\n return 'mac';\n }\n return 'linux';\n }\n\n loadCompleted(): void {\n }\n\n bringToFront(): void {\n }\n\n closeWindow(): void {\n }\n\n setIsDocked(isDocked: boolean, callback: () => void): void {\n window.setTimeout(callback, 0);\n }\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void {\n window.setTimeout(() => callback({surveyShown: false}), 0);\n }\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void {\n window.setTimeout(() => callback({canShowSurvey: false}), 0);\n }\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void {\n }\n\n inspectElementCompleted(): void {\n }\n\n setInjectedScriptForOrigin(origin: string, script: string): void {\n }\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void {\n document.title = i18nString(UIStrings.devtoolsS, {PH1: url.replace(/^https?:\\/\\//, '')});\n }\n\n copyText(text: string|null|undefined): void {\n if (text === undefined || text === null) {\n return;\n }\n void navigator.clipboard.writeText(text);\n }\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void {\n window.open(url, '_blank');\n }\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n Common.Console.Console.instance().error(\n 'Show item in folder is not enabled in hosted mode. Please inspect using chrome://inspect');\n }\n\n save(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean):\n void {\n let buffer = this.#urlsBeingSaved.get(url);\n if (!buffer) {\n buffer = [];\n this.#urlsBeingSaved.set(url, buffer);\n }\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.SavedURL, {url, fileSystemPath: url});\n }\n\n append(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString, content: string): void {\n const buffer = this.#urlsBeingSaved.get(url);\n if (buffer) {\n buffer.push(content);\n this.events.dispatchEventToListeners(Events.AppendedToURL, url);\n }\n }\n\n close(url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString): void {\n const buffer = this.#urlsBeingSaved.get(url) || [];\n this.#urlsBeingSaved.delete(url);\n let fileName = '';\n\n if (url) {\n try {\n const trimmed = Platform.StringUtilities.trimURL(url);\n fileName = Platform.StringUtilities.removeURLFragment(trimmed);\n } catch (error) {\n // If url is not a valid URL, it is probably a filename.\n fileName = url;\n }\n }\n\n const link = document.createElement('a');\n link.download = fileName;\n const blob = new Blob([buffer.join('')], {type: 'text/plain'});\n const blobUrl = URL.createObjectURL(blob);\n link.href = blobUrl;\n link.click();\n URL.revokeObjectURL(blobUrl);\n }\n\n sendMessageToBackend(message: string): void {\n }\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void {\n if (this.recordedCountHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedCountHistograms.shift();\n }\n this.recordedCountHistograms.push({histogramName, sample, min, exclusiveMax, bucketSize});\n }\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void {\n if (this.recordedEnumeratedHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedEnumeratedHistograms.shift();\n }\n this.recordedEnumeratedHistograms.push({actionName, actionCode});\n }\n\n recordPerformanceHistogram(histogramName: string, duration: number): void {\n if (this.recordedPerformanceHistograms.length >= MAX_RECORDED_HISTOGRAMS_SIZE) {\n this.recordedPerformanceHistograms.shift();\n }\n this.recordedPerformanceHistograms.push({histogramName, duration});\n }\n\n recordUserMetricsAction(umaName: string): void {\n }\n\n requestFileSystems(): void {\n this.events.dispatchEventToListeners(Events.FileSystemsLoaded, []);\n }\n\n addFileSystem(type?: string): void {\n const onFileSystem = (fs: FileSystem): void => {\n this.#fileSystem = fs;\n const fileSystem = {\n fileSystemName: 'sandboxedRequestedFileSystem',\n fileSystemPath: OVERRIDES_FILE_SYSTEM_PATH,\n rootURL: 'filesystem:devtools://devtools/isolated/',\n type: 'overrides',\n };\n this.events.dispatchEventToListeners(Events.FileSystemAdded, {fileSystem});\n };\n window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, onFileSystem);\n }\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void {\n const removalCallback = (entries: Entry[]): void => {\n entries.forEach(entry => {\n if (entry.isDirectory) {\n (entry as DirectoryEntry).removeRecursively(() => {});\n } else if (entry.isFile) {\n entry.remove(() => {});\n }\n });\n };\n\n if (this.#fileSystem) {\n this.#fileSystem.root.createReader().readEntries(removalCallback);\n }\n\n this.#fileSystem = null;\n this.events.dispatchEventToListeners(Events.FileSystemRemoved, OVERRIDES_FILE_SYSTEM_PATH);\n }\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null {\n return this.#fileSystem;\n }\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void {\n // Read the first 3 bytes looking for the gzip signature in the file header\n function isGzip(ab: ArrayBuffer): boolean {\n const buf = new Uint8Array(ab);\n if (!buf || buf.length < 3) {\n return false;\n }\n\n // https://www.rfc-editor.org/rfc/rfc1952#page-6\n return buf[0] === 0x1F && buf[1] === 0x8B && buf[2] === 0x08;\n }\n fetch(url)\n .then(async result => {\n const resultArrayBuf = await result.arrayBuffer();\n let decoded: ReadableStream|ArrayBuffer = resultArrayBuf;\n if (isGzip(resultArrayBuf)) {\n const ds = new DecompressionStream('gzip');\n const writer = ds.writable.getWriter();\n void writer.write(resultArrayBuf);\n void writer.close();\n decoded = ds.readable;\n }\n const text = await new Response(decoded).text();\n return text;\n })\n .then(function(text) {\n resourceLoaderStreamWrite(streamId, text);\n callback({\n statusCode: 200,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n })\n .catch(function() {\n callback({\n statusCode: 404,\n headers: undefined,\n messageOverride: undefined,\n netError: undefined,\n netErrorName: undefined,\n urlValid: undefined,\n });\n });\n }\n\n registerPreference(name: string, options: {synced?: boolean}): void {\n }\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void {\n const prefs: {\n [x: string]: string,\n } = {};\n for (const name in window.localStorage) {\n prefs[name] = window.localStorage[name];\n }\n callback(prefs);\n }\n\n getPreference(name: string, callback: (arg0: string) => void): void {\n callback(window.localStorage[name]);\n }\n\n setPreference(name: string, value: string): void {\n window.localStorage[name] = value;\n }\n\n removePreference(name: string): void {\n delete window.localStorage[name];\n }\n\n clearPreferences(): void {\n window.localStorage.clear();\n }\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void {\n callback({\n isSyncActive: false,\n arePreferencesSynced: false,\n });\n }\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void {\n }\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void {\n }\n\n stopIndexing(requestId: number): void {\n }\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void {\n }\n\n zoomFactor(): number {\n return 1;\n }\n\n zoomIn(): void {\n }\n\n zoomOut(): void {\n }\n\n resetZoom(): void {\n }\n\n setWhitelistedShortcuts(shortcuts: string): void {\n }\n\n setEyeDropperActive(active: boolean): void {\n }\n\n showCertificateViewer(certChain: string[]): void {\n }\n\n reattach(callback: () => void): void {\n }\n\n readyForTest(): void {\n }\n\n connectionReady(): void {\n }\n\n setOpenNewWindowForPopups(value: boolean): void {\n }\n\n setDevicesDiscoveryConfig(config: Adb.Config): void {\n }\n\n setDevicesUpdatesEnabled(enabled: boolean): void {\n }\n\n performActionOnRemotePage(pageId: string, action: string): void {\n }\n\n openRemotePage(browserId: string, url: string): void {\n }\n\n openNodeFrontend(): void {\n }\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void {\n throw 'Soft context menu should be used';\n }\n\n isHostedMode(): boolean {\n return true;\n }\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void {\n // Extensions are not supported in hosted mode.\n }\n\n async initialTargetId(): Promise {\n return null;\n }\n\n doAidaConversation(request: string, callback: (result: DoAidaConversationResult) => void): void {\n callback({\n response: '{}',\n });\n }\n\n recordImpression(event: ImpressionEvent): void {\n }\n recordResize(event: ResizeEvent): void {\n }\n recordClick(event: ClickEvent): void {\n }\n recordHover(event: HoverEvent): void {\n }\n recordDrag(event: DragEvent): void {\n }\n recordChange(event: ChangeEvent): void {\n }\n recordKeyDown(event: KeyDownEvent): void {\n }\n}\n\n// @ts-ignore Global injected by devtools-compatibility.js\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport let InspectorFrontendHostInstance: InspectorFrontendHostStub = globalThis.InspectorFrontendHost;\n\nclass InspectorFrontendAPIImpl {\n constructor() {\n for (const descriptor of EventDescriptors) {\n // @ts-ignore Dispatcher magic\n this[descriptor[1]] = this.dispatch.bind(this, descriptor[0], descriptor[2], descriptor[3]);\n }\n }\n\n private dispatch(name: symbol, signature: string[], runOnceLoaded: boolean, ...params: string[]): void {\n // Single argument methods get dispatched with the param.\n if (signature.length < 2) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, params[0]);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n return;\n }\n const data: {\n [x: string]: string,\n } = {};\n for (let i = 0; i < signature.length; ++i) {\n data[signature[i]] = params[i];\n }\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n InspectorFrontendHostInstance.events.dispatchEventToListeners(name, data);\n } catch (error) {\n console.error(error + ' ' + error.stack);\n }\n }\n\n streamWrite(id: number, chunk: string): void {\n resourceLoaderStreamWrite(id, chunk);\n }\n}\n\n(function(): void {\n\nfunction initializeInspectorFrontendHost(): void {\n let proto;\n if (!InspectorFrontendHostInstance) {\n // Instantiate stub for web-hosted mode if necessary.\n // @ts-ignore Global injected by devtools-compatibility.js\n globalThis.InspectorFrontendHost = InspectorFrontendHostInstance = new InspectorFrontendHostStub();\n if ('doAidaConversationForTesting' in globalThis) {\n InspectorFrontendHostInstance['doAidaConversation'] =\n (globalThis as unknown as {\n doAidaConversationForTesting: typeof InspectorFrontendHostInstance['doAidaConversation'],\n }).doAidaConversationForTesting;\n }\n if ('getSyncInformationForTesting' in globalThis) {\n InspectorFrontendHostInstance['getSyncInformation'] =\n (globalThis as unknown as {\n getSyncInformationForTesting: typeof InspectorFrontendHostInstance['getSyncInformation'],\n }).getSyncInformationForTesting;\n }\n } else {\n // Otherwise add stubs for missing methods that are declared in the interface.\n proto = InspectorFrontendHostStub.prototype;\n for (const name of Object.getOwnPropertyNames(proto)) {\n // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)\n // @ts-expect-error\n const stub = proto[name];\n // @ts-ignore Global injected by devtools-compatibility.js\n if (typeof stub !== 'function' || InspectorFrontendHostInstance[name]) {\n continue;\n }\n\n console.error(`Incompatible embedder: method Host.InspectorFrontendHost.${name} is missing. Using stub instead.`);\n // @ts-ignore Global injected by devtools-compatibility.js\n InspectorFrontendHostInstance[name] = stub;\n }\n }\n\n // Attach the events object.\n InspectorFrontendHostInstance.events = new Common.ObjectWrapper.ObjectWrapper();\n}\n\n// FIXME: This file is included into both apps, since the devtools_app needs the InspectorFrontendHostAPI only,\n// so the host instance should not be initialized there.\ninitializeInspectorFrontendHost();\n// @ts-ignore Global injected by devtools-compatibility.js\nglobalThis.InspectorFrontendAPI = new InspectorFrontendAPIImpl();\n})();\n\nexport function isUnderTest(prefs?: {\n [x: string]: string,\n}): boolean {\n // Integration tests rely on test queryParam.\n if (Root.Runtime.Runtime.queryParam('test')) {\n return true;\n }\n // Browser tests rely on prefs.\n if (prefs) {\n return prefs['isUnderTest'] === 'true';\n }\n return Common.Settings.Settings.hasInstance() &&\n Common.Settings.Settings.instance().createSetting('isUnderTest', false).get();\n}\n"]} \ No newline at end of file diff --git a/public/core/host/InspectorFrontendHostAPI.d.ts b/public/core/host/InspectorFrontendHostAPI.d.ts index 756d2387a..8aaf85be2 100644 --- a/public/core/host/InspectorFrontendHostAPI.d.ts +++ b/public/core/host/InspectorFrontendHostAPI.d.ts @@ -93,10 +93,17 @@ export interface VisualElementImpression { type: number; parent?: number; context?: number; + width?: number; + height?: number; } export interface ImpressionEvent { impressions: VisualElementImpression[]; } +export interface ResizeEvent { + veid: number; + width?: number; + height?: number; +} export interface ClickEvent { veid: number; mouseButton: number; diff --git a/public/core/host/InspectorFrontendHostAPI.js.map b/public/core/host/InspectorFrontendHostAPI.js.map index 113c9464a..f5f4c099d 100644 --- a/public/core/host/InspectorFrontendHostAPI.js.map +++ b/public/core/host/InspectorFrontendHostAPI.js.map @@ -1 +1 @@ -{"version":3,"file":"InspectorFrontendHostAPI.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHostAPI.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2015 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Platform from '../../core/platform/platform.js';\n\nexport enum Events {\n AppendedToURL = 'appendedToURL',\n CanceledSaveURL = 'canceledSaveURL',\n ColorThemeChanged = 'colorThemeChanged',\n ContextMenuCleared = 'contextMenuCleared',\n ContextMenuItemSelected = 'contextMenuItemSelected',\n DeviceCountUpdated = 'deviceCountUpdated',\n DevicesDiscoveryConfigChanged = 'devicesDiscoveryConfigChanged',\n DevicesPortForwardingStatusChanged = 'devicesPortForwardingStatusChanged',\n DevicesUpdated = 'devicesUpdated',\n DispatchMessage = 'dispatchMessage',\n DispatchMessageChunk = 'dispatchMessageChunk',\n EnterInspectElementMode = 'enterInspectElementMode',\n EyeDropperPickedColor = 'eyeDropperPickedColor',\n FileSystemsLoaded = 'fileSystemsLoaded',\n FileSystemRemoved = 'fileSystemRemoved',\n FileSystemAdded = 'fileSystemAdded',\n FileSystemFilesChangedAddedRemoved = 'FileSystemFilesChangedAddedRemoved',\n IndexingTotalWorkCalculated = 'indexingTotalWorkCalculated',\n IndexingWorked = 'indexingWorked',\n IndexingDone = 'indexingDone',\n KeyEventUnhandled = 'keyEventUnhandled',\n ReattachRootTarget = 'reattachMainTarget',\n ReloadInspectedPage = 'reloadInspectedPage',\n RevealSourceLine = 'revealSourceLine',\n SavedURL = 'savedURL',\n SearchCompleted = 'searchCompleted',\n SetInspectedTabId = 'setInspectedTabId',\n SetUseSoftMenu = 'setUseSoftMenu',\n ShowPanel = 'showPanel',\n}\n\nexport const EventDescriptors = [\n [Events.AppendedToURL, 'appendedToURL', ['url']],\n [Events.CanceledSaveURL, 'canceledSaveURL', ['url']],\n [Events.ColorThemeChanged, 'colorThemeChanged', []],\n [Events.ContextMenuCleared, 'contextMenuCleared', []],\n [Events.ContextMenuItemSelected, 'contextMenuItemSelected', ['id']],\n [Events.DeviceCountUpdated, 'deviceCountUpdated', ['count']],\n [Events.DevicesDiscoveryConfigChanged, 'devicesDiscoveryConfigChanged', ['config']],\n [Events.DevicesPortForwardingStatusChanged, 'devicesPortForwardingStatusChanged', ['status']],\n [Events.DevicesUpdated, 'devicesUpdated', ['devices']],\n [Events.DispatchMessage, 'dispatchMessage', ['messageObject']],\n [Events.DispatchMessageChunk, 'dispatchMessageChunk', ['messageChunk', 'messageSize']],\n [Events.EnterInspectElementMode, 'enterInspectElementMode', []],\n [Events.EyeDropperPickedColor, 'eyeDropperPickedColor', ['color']],\n [Events.FileSystemsLoaded, 'fileSystemsLoaded', ['fileSystems']],\n [Events.FileSystemRemoved, 'fileSystemRemoved', ['fileSystemPath']],\n [Events.FileSystemAdded, 'fileSystemAdded', ['errorMessage', 'fileSystem']],\n [Events.FileSystemFilesChangedAddedRemoved, 'fileSystemFilesChangedAddedRemoved', ['changed', 'added', 'removed']],\n [Events.IndexingTotalWorkCalculated, 'indexingTotalWorkCalculated', ['requestId', 'fileSystemPath', 'totalWork']],\n [Events.IndexingWorked, 'indexingWorked', ['requestId', 'fileSystemPath', 'worked']],\n [Events.IndexingDone, 'indexingDone', ['requestId', 'fileSystemPath']],\n [Events.KeyEventUnhandled, 'keyEventUnhandled', ['event']],\n [Events.ReattachRootTarget, 'reattachMainTarget', []],\n [Events.ReloadInspectedPage, 'reloadInspectedPage', ['hard']],\n [Events.RevealSourceLine, 'revealSourceLine', ['url', 'lineNumber', 'columnNumber']],\n [Events.SavedURL, 'savedURL', ['url', 'fileSystemPath']],\n [Events.SearchCompleted, 'searchCompleted', ['requestId', 'fileSystemPath', 'files']],\n [Events.SetInspectedTabId, 'setInspectedTabId', ['tabId']],\n [Events.SetUseSoftMenu, 'setUseSoftMenu', ['useSoftMenu']],\n [Events.ShowPanel, 'showPanel', ['panelName']],\n];\n\nexport interface DispatchMessageChunkEvent {\n messageChunk: string;\n messageSize: number;\n}\n\nexport interface EyeDropperPickedColorEvent {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface DevToolsFileSystem {\n type: string;\n fileSystemName: string;\n rootURL: string;\n fileSystemPath: Platform.DevToolsPath.RawPathString;\n}\n\nexport interface FileSystemAddedEvent {\n errorMessage?: string;\n fileSystem: DevToolsFileSystem|null;\n}\n\nexport interface FilesChangedEvent {\n changed: Platform.DevToolsPath.RawPathString[];\n added: Platform.DevToolsPath.RawPathString[];\n removed: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface IndexingEvent {\n requestId: number;\n fileSystemPath: string;\n}\n\nexport interface IndexingTotalWorkCalculatedEvent extends IndexingEvent {\n totalWork: number;\n}\n\nexport interface IndexingWorkedEvent extends IndexingEvent {\n worked: number;\n}\n\nexport interface KeyEventUnhandledEvent {\n type: string;\n key: string;\n keyCode: number;\n modifiers: number;\n}\n\nexport interface RevealSourceLineEvent {\n url: Platform.DevToolsPath.UrlString;\n lineNumber: number;\n columnNumber: number;\n}\n\nexport interface SavedURLEvent {\n url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n fileSystemPath: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n}\n\nexport interface SearchCompletedEvent {\n requestId: number;\n files: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface DoAidaConversationResult {\n response: string;\n}\n\nexport interface VisualElementImpression {\n id: number;\n type: number;\n parent?: number;\n context?: number;\n}\n\nexport interface ImpressionEvent {\n impressions: VisualElementImpression[];\n}\n\nexport interface ClickEvent {\n veid: number;\n mouseButton: number;\n context?: number;\n doubleClick: boolean;\n}\n\nexport interface HoverEvent {\n veid: number;\n time?: number;\n context?: number;\n}\n\nexport interface DragEvent {\n veid: number;\n context?: number;\n}\n\nexport interface ChangeEvent {\n veid: number;\n context?: number;\n}\n\nexport interface KeyDownEvent {\n veid: number;\n context?: number;\n}\n\n// While `EventDescriptors` are used to dynamically dispatch host binding events,\n// the `EventTypes` \"type map\" is used for type-checking said events by TypeScript.\n// `EventTypes` is not used at runtime.\n// Please note that the \"dispatch\" side can't be type-checked as the dispatch is\n// done dynamically.\nexport type EventTypes = {\n [Events.AppendedToURL]: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString,\n [Events.CanceledSaveURL]: Platform.DevToolsPath.UrlString,\n [Events.ColorThemeChanged]: void,\n [Events.ContextMenuCleared]: void,\n [Events.ContextMenuItemSelected]: number,\n [Events.DeviceCountUpdated]: number,\n [Events.DevicesDiscoveryConfigChanged]: Adb.Config,\n [Events.DevicesPortForwardingStatusChanged]: void,\n [Events.DevicesUpdated]: void,\n [Events.DispatchMessage]: string,\n [Events.DispatchMessageChunk]: DispatchMessageChunkEvent,\n [Events.EnterInspectElementMode]: void,\n [Events.EyeDropperPickedColor]: EyeDropperPickedColorEvent,\n [Events.FileSystemsLoaded]: DevToolsFileSystem[],\n [Events.FileSystemRemoved]: Platform.DevToolsPath.RawPathString,\n [Events.FileSystemAdded]: FileSystemAddedEvent,\n [Events.FileSystemFilesChangedAddedRemoved]: FilesChangedEvent,\n [Events.IndexingTotalWorkCalculated]: IndexingTotalWorkCalculatedEvent,\n [Events.IndexingWorked]: IndexingWorkedEvent,\n [Events.IndexingDone]: IndexingEvent,\n [Events.KeyEventUnhandled]: KeyEventUnhandledEvent,\n [Events.ReattachRootTarget]: void,\n [Events.ReloadInspectedPage]: boolean,\n [Events.RevealSourceLine]: RevealSourceLineEvent,\n [Events.SavedURL]: SavedURLEvent,\n [Events.SearchCompleted]: SearchCompletedEvent,\n [Events.SetInspectedTabId]: string,\n [Events.SetUseSoftMenu]: boolean,\n [Events.ShowPanel]: string,\n};\n\nexport interface InspectorFrontendHostAPI {\n addFileSystem(type?: string): void;\n\n loadCompleted(): void;\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void;\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void;\n\n showCertificateViewer(certChain: string[]): void;\n\n setWhitelistedShortcuts(shortcuts: string): void;\n\n setEyeDropperActive(active: boolean): void;\n\n inspectElementCompleted(): void;\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void;\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n requestFileSystems(): void;\n\n save(url: Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean): void;\n\n append(url: Platform.DevToolsPath.UrlString, content: string): void;\n\n close(url: Platform.DevToolsPath.UrlString): void;\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void;\n\n stopIndexing(requestId: number): void;\n\n bringToFront(): void;\n\n closeWindow(): void;\n\n copyText(text: string|null|undefined): void;\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void;\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null;\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void;\n\n registerPreference(name: string, options: {synced?: boolean}): void;\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void;\n\n getPreference(name: string, callback: (arg0: string) => void): void;\n\n setPreference(name: string, value: string): void;\n\n removePreference(name: string): void;\n\n clearPreferences(): void;\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void;\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void;\n\n platform(): string;\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void;\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void;\n\n recordPerformanceHistogram(histogramName: string, duration: number): void;\n\n recordUserMetricsAction(umaName: string): void;\n\n sendMessageToBackend(message: string): void;\n\n setDevicesDiscoveryConfig(config: Adb.Config): void;\n\n setDevicesUpdatesEnabled(enabled: boolean): void;\n\n performActionOnRemotePage(pageId: string, action: string): void;\n\n openRemotePage(browserId: string, url: string): void;\n\n openNodeFrontend(): void;\n\n setInjectedScriptForOrigin(origin: string, script: string): void;\n\n setIsDocked(isDocked: boolean, callback: () => void): void;\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void;\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void;\n\n zoomFactor(): number;\n\n zoomIn(): void;\n\n zoomOut(): void;\n\n resetZoom(): void;\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void;\n\n reattach(callback: () => void): void;\n\n readyForTest(): void;\n\n connectionReady(): void;\n\n setOpenNewWindowForPopups(value: boolean): void;\n\n isHostedMode(): boolean;\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void;\n\n initialTargetId(): Promise;\n\n doAidaConversation: (request: string, cb: (result: DoAidaConversationResult) => void) => void;\n\n recordImpression(event: ImpressionEvent): void;\n recordClick(event: ClickEvent): void;\n recordHover(event: HoverEvent): void;\n recordDrag(event: DragEvent): void;\n recordChange(event: ChangeEvent): void;\n recordKeyDown(event: KeyDownEvent): void;\n}\n\nexport interface ContextMenuDescriptor {\n type: 'checkbox'|'item'|'separator'|'subMenu';\n id?: number;\n label?: string;\n enabled?: boolean;\n checked?: boolean;\n subItems?: ContextMenuDescriptor[];\n jslogContext?: string;\n}\nexport interface LoadNetworkResourceResult {\n statusCode: number;\n headers?: {\n [x: string]: string,\n };\n netError?: number;\n netErrorName?: string;\n urlValid?: boolean;\n messageOverride?: string;\n}\nexport interface ExtensionDescriptor {\n startPage: string;\n name: string;\n exposeExperimentalAPIs: boolean;\n hostsPolicy?: ExtensionHostsPolicy;\n allowFileAccess?: boolean;\n}\nexport interface ExtensionHostsPolicy {\n runtimeAllowedHosts: string[];\n runtimeBlockedHosts: string[];\n}\nexport interface ShowSurveyResult {\n surveyShown: boolean;\n}\nexport interface CanShowSurveyResult {\n canShowSurvey: boolean;\n}\nexport interface SyncInformation {\n /** Whether Chrome Sync is enabled and active */\n isSyncActive: boolean;\n /** Whether syncing of Chrome Settings is enabled via Chrome Sync is enabled */\n arePreferencesSynced?: boolean;\n /** The email of the account used for syncing */\n accountEmail?: string;\n /** The image of the account used for syncing. Its a base64 encoded PNG */\n accountImage?: string;\n}\n\n/**\n * Enum for recordPerformanceHistogram\n * Warning: There is another definition of this enum in the DevTools code\n * base, keep them in sync:\n * front_end/devtools_compatibility.js\n * @readonly\n */\nexport const enum EnumeratedHistogram {\n ActionTaken = 'DevTools.ActionTaken',\n BreakpointWithConditionAdded = 'DevTools.BreakpointWithConditionAdded',\n BreakpointEditDialogRevealedFrom = 'DevTools.BreakpointEditDialogRevealedFrom',\n PanelClosed = 'DevTools.PanelClosed',\n PanelShown = 'DevTools.PanelShown',\n PanelShownInLocation = 'DevTools.PanelShownInLocation',\n SidebarPaneShown = 'DevTools.SidebarPaneShown',\n KeyboardShortcutFired = 'DevTools.KeyboardShortcutFired',\n IssueCreated = 'DevTools.IssueCreated',\n IssuesPanelIssueExpanded = 'DevTools.IssuesPanelIssueExpanded',\n IssuesPanelOpenedFrom = 'DevTools.IssuesPanelOpenedFrom',\n IssuesPanelResourceOpened = 'DevTools.IssuesPanelResourceOpened',\n KeybindSetSettingChanged = 'DevTools.KeybindSetSettingChanged',\n ElementsSidebarTabShown = 'DevTools.Elements.SidebarTabShown',\n ExperimentEnabledAtLaunch = 'DevTools.ExperimentEnabledAtLaunch',\n ExperimentDisabledAtLaunch = 'DevTools.ExperimentDisabledAtLaunch',\n ExperimentEnabled = 'DevTools.ExperimentEnabled',\n ExperimentDisabled = 'DevTools.ExperimentDisabled',\n DeveloperResourceLoaded = 'DevTools.DeveloperResourceLoaded',\n DeveloperResourceScheme = 'DevTools.DeveloperResourceScheme',\n Language = 'DevTools.Language',\n SyncSetting = 'DevTools.SyncSetting',\n RecordingAssertion = 'DevTools.RecordingAssertion',\n RecordingCodeToggled = 'DevTools.RecordingCodeToggled',\n RecordingCopiedToClipboard = 'DevTools.RecordingCopiedToClipboard',\n RecordingEdited = 'DevTools.RecordingEdited',\n RecordingExported = 'DevTools.RecordingExported',\n RecordingReplayFinished = 'DevTools.RecordingReplayFinished',\n RecordingReplaySpeed = 'DevTools.RecordingReplaySpeed',\n RecordingReplayStarted = 'DevTools.RecordingReplayStarted',\n RecordingToggled = 'DevTools.RecordingToggled',\n SourcesSidebarTabShown = 'DevTools.Sources.SidebarTabShown',\n SourcesPanelFileDebugged = 'DevTools.SourcesPanelFileDebugged',\n SourcesPanelFileOpened = 'DevTools.SourcesPanelFileOpened',\n NetworkPanelResponsePreviewOpened = 'DevTools.NetworkPanelResponsePreviewOpened',\n StyleTextCopied = 'DevTools.StyleTextCopied',\n ManifestSectionSelected = 'DevTools.ManifestSectionSelected',\n CSSHintShown = 'DevTools.CSSHintShown',\n LighthouseModeRun = 'DevTools.LighthouseModeRun',\n LighthouseCategoryUsed = 'DevTools.LighthouseCategoryUsed',\n ColorConvertedFrom = 'DevTools.ColorConvertedFrom',\n ColorPickerOpenedFrom = 'DevTools.ColorPickerOpenedFrom',\n CSSPropertyDocumentation = 'DevTools.CSSPropertyDocumentation',\n InlineScriptParsed = 'DevTools.InlineScriptParsed',\n VMInlineScriptTypeShown = 'DevTools.VMInlineScriptShown',\n BreakpointsRestoredFromStorageCount = 'DevTools.BreakpointsRestoredFromStorageCount',\n SwatchActivated = 'DevTools.SwatchActivated',\n BadgeActivated = 'DevTools.BadgeActivated',\n AnimationPlaybackRateChanged = 'DevTools.AnimationPlaybackRateChanged',\n AnimationPointDragged = 'DevTools.AnimationPointDragged',\n LegacyResourceTypeFilterNumberOfSelectedChanged = 'DevTools.LegacyResourceTypeFilterNumberOfSelectedChanged',\n LegacyResourceTypeFilterItemSelected = 'DevTools.LegacyResourceTypeFilterItemSelected',\n ResourceTypeFilterNumberOfSelectedChanged = 'DevTools.ResourceTypeFilterNumberOfSelectedChanged',\n ResourceTypeFilterItemSelected = 'DevTools.ResourceTypeFilterItemSelected',\n NetworkPanelMoreFiltersNumberOfSelectedChanged = 'DevTools.NetworkPanelMoreFiltersNumberOfSelectedChanged',\n NetworkPanelMoreFiltersItemSelected = 'DevTools.NetworkPanelMoreFiltersItemSelected',\n}\n"]} \ No newline at end of file +{"version":3,"file":"InspectorFrontendHostAPI.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/InspectorFrontendHostAPI.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2015 The Chromium Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport type * as Platform from '../../core/platform/platform.js';\n\nexport enum Events {\n AppendedToURL = 'appendedToURL',\n CanceledSaveURL = 'canceledSaveURL',\n ColorThemeChanged = 'colorThemeChanged',\n ContextMenuCleared = 'contextMenuCleared',\n ContextMenuItemSelected = 'contextMenuItemSelected',\n DeviceCountUpdated = 'deviceCountUpdated',\n DevicesDiscoveryConfigChanged = 'devicesDiscoveryConfigChanged',\n DevicesPortForwardingStatusChanged = 'devicesPortForwardingStatusChanged',\n DevicesUpdated = 'devicesUpdated',\n DispatchMessage = 'dispatchMessage',\n DispatchMessageChunk = 'dispatchMessageChunk',\n EnterInspectElementMode = 'enterInspectElementMode',\n EyeDropperPickedColor = 'eyeDropperPickedColor',\n FileSystemsLoaded = 'fileSystemsLoaded',\n FileSystemRemoved = 'fileSystemRemoved',\n FileSystemAdded = 'fileSystemAdded',\n FileSystemFilesChangedAddedRemoved = 'FileSystemFilesChangedAddedRemoved',\n IndexingTotalWorkCalculated = 'indexingTotalWorkCalculated',\n IndexingWorked = 'indexingWorked',\n IndexingDone = 'indexingDone',\n KeyEventUnhandled = 'keyEventUnhandled',\n ReattachRootTarget = 'reattachMainTarget',\n ReloadInspectedPage = 'reloadInspectedPage',\n RevealSourceLine = 'revealSourceLine',\n SavedURL = 'savedURL',\n SearchCompleted = 'searchCompleted',\n SetInspectedTabId = 'setInspectedTabId',\n SetUseSoftMenu = 'setUseSoftMenu',\n ShowPanel = 'showPanel',\n}\n\nexport const EventDescriptors = [\n [Events.AppendedToURL, 'appendedToURL', ['url']],\n [Events.CanceledSaveURL, 'canceledSaveURL', ['url']],\n [Events.ColorThemeChanged, 'colorThemeChanged', []],\n [Events.ContextMenuCleared, 'contextMenuCleared', []],\n [Events.ContextMenuItemSelected, 'contextMenuItemSelected', ['id']],\n [Events.DeviceCountUpdated, 'deviceCountUpdated', ['count']],\n [Events.DevicesDiscoveryConfigChanged, 'devicesDiscoveryConfigChanged', ['config']],\n [Events.DevicesPortForwardingStatusChanged, 'devicesPortForwardingStatusChanged', ['status']],\n [Events.DevicesUpdated, 'devicesUpdated', ['devices']],\n [Events.DispatchMessage, 'dispatchMessage', ['messageObject']],\n [Events.DispatchMessageChunk, 'dispatchMessageChunk', ['messageChunk', 'messageSize']],\n [Events.EnterInspectElementMode, 'enterInspectElementMode', []],\n [Events.EyeDropperPickedColor, 'eyeDropperPickedColor', ['color']],\n [Events.FileSystemsLoaded, 'fileSystemsLoaded', ['fileSystems']],\n [Events.FileSystemRemoved, 'fileSystemRemoved', ['fileSystemPath']],\n [Events.FileSystemAdded, 'fileSystemAdded', ['errorMessage', 'fileSystem']],\n [Events.FileSystemFilesChangedAddedRemoved, 'fileSystemFilesChangedAddedRemoved', ['changed', 'added', 'removed']],\n [Events.IndexingTotalWorkCalculated, 'indexingTotalWorkCalculated', ['requestId', 'fileSystemPath', 'totalWork']],\n [Events.IndexingWorked, 'indexingWorked', ['requestId', 'fileSystemPath', 'worked']],\n [Events.IndexingDone, 'indexingDone', ['requestId', 'fileSystemPath']],\n [Events.KeyEventUnhandled, 'keyEventUnhandled', ['event']],\n [Events.ReattachRootTarget, 'reattachMainTarget', []],\n [Events.ReloadInspectedPage, 'reloadInspectedPage', ['hard']],\n [Events.RevealSourceLine, 'revealSourceLine', ['url', 'lineNumber', 'columnNumber']],\n [Events.SavedURL, 'savedURL', ['url', 'fileSystemPath']],\n [Events.SearchCompleted, 'searchCompleted', ['requestId', 'fileSystemPath', 'files']],\n [Events.SetInspectedTabId, 'setInspectedTabId', ['tabId']],\n [Events.SetUseSoftMenu, 'setUseSoftMenu', ['useSoftMenu']],\n [Events.ShowPanel, 'showPanel', ['panelName']],\n];\n\nexport interface DispatchMessageChunkEvent {\n messageChunk: string;\n messageSize: number;\n}\n\nexport interface EyeDropperPickedColorEvent {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface DevToolsFileSystem {\n type: string;\n fileSystemName: string;\n rootURL: string;\n fileSystemPath: Platform.DevToolsPath.RawPathString;\n}\n\nexport interface FileSystemAddedEvent {\n errorMessage?: string;\n fileSystem: DevToolsFileSystem|null;\n}\n\nexport interface FilesChangedEvent {\n changed: Platform.DevToolsPath.RawPathString[];\n added: Platform.DevToolsPath.RawPathString[];\n removed: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface IndexingEvent {\n requestId: number;\n fileSystemPath: string;\n}\n\nexport interface IndexingTotalWorkCalculatedEvent extends IndexingEvent {\n totalWork: number;\n}\n\nexport interface IndexingWorkedEvent extends IndexingEvent {\n worked: number;\n}\n\nexport interface KeyEventUnhandledEvent {\n type: string;\n key: string;\n keyCode: number;\n modifiers: number;\n}\n\nexport interface RevealSourceLineEvent {\n url: Platform.DevToolsPath.UrlString;\n lineNumber: number;\n columnNumber: number;\n}\n\nexport interface SavedURLEvent {\n url: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n fileSystemPath: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString;\n}\n\nexport interface SearchCompletedEvent {\n requestId: number;\n files: Platform.DevToolsPath.RawPathString[];\n}\n\nexport interface DoAidaConversationResult {\n response: string;\n}\n\nexport interface VisualElementImpression {\n id: number;\n type: number;\n parent?: number;\n context?: number;\n width?: number;\n height?: number;\n}\n\nexport interface ImpressionEvent {\n impressions: VisualElementImpression[];\n}\n\nexport interface ResizeEvent {\n veid: number;\n width?: number;\n height?: number;\n}\n\nexport interface ClickEvent {\n veid: number;\n mouseButton: number;\n context?: number;\n doubleClick: boolean;\n}\n\nexport interface HoverEvent {\n veid: number;\n time?: number;\n context?: number;\n}\n\nexport interface DragEvent {\n veid: number;\n context?: number;\n}\n\nexport interface ChangeEvent {\n veid: number;\n context?: number;\n}\n\nexport interface KeyDownEvent {\n veid: number;\n context?: number;\n}\n\n// While `EventDescriptors` are used to dynamically dispatch host binding events,\n// the `EventTypes` \"type map\" is used for type-checking said events by TypeScript.\n// `EventTypes` is not used at runtime.\n// Please note that the \"dispatch\" side can't be type-checked as the dispatch is\n// done dynamically.\nexport type EventTypes = {\n [Events.AppendedToURL]: Platform.DevToolsPath.RawPathString|Platform.DevToolsPath.UrlString,\n [Events.CanceledSaveURL]: Platform.DevToolsPath.UrlString,\n [Events.ColorThemeChanged]: void,\n [Events.ContextMenuCleared]: void,\n [Events.ContextMenuItemSelected]: number,\n [Events.DeviceCountUpdated]: number,\n [Events.DevicesDiscoveryConfigChanged]: Adb.Config,\n [Events.DevicesPortForwardingStatusChanged]: void,\n [Events.DevicesUpdated]: void,\n [Events.DispatchMessage]: string,\n [Events.DispatchMessageChunk]: DispatchMessageChunkEvent,\n [Events.EnterInspectElementMode]: void,\n [Events.EyeDropperPickedColor]: EyeDropperPickedColorEvent,\n [Events.FileSystemsLoaded]: DevToolsFileSystem[],\n [Events.FileSystemRemoved]: Platform.DevToolsPath.RawPathString,\n [Events.FileSystemAdded]: FileSystemAddedEvent,\n [Events.FileSystemFilesChangedAddedRemoved]: FilesChangedEvent,\n [Events.IndexingTotalWorkCalculated]: IndexingTotalWorkCalculatedEvent,\n [Events.IndexingWorked]: IndexingWorkedEvent,\n [Events.IndexingDone]: IndexingEvent,\n [Events.KeyEventUnhandled]: KeyEventUnhandledEvent,\n [Events.ReattachRootTarget]: void,\n [Events.ReloadInspectedPage]: boolean,\n [Events.RevealSourceLine]: RevealSourceLineEvent,\n [Events.SavedURL]: SavedURLEvent,\n [Events.SearchCompleted]: SearchCompletedEvent,\n [Events.SetInspectedTabId]: string,\n [Events.SetUseSoftMenu]: boolean,\n [Events.ShowPanel]: string,\n};\n\nexport interface InspectorFrontendHostAPI {\n addFileSystem(type?: string): void;\n\n loadCompleted(): void;\n\n indexPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, excludedFolders: string): void;\n\n /**\n * Requests inspected page to be placed atop of the inspector frontend with specified bounds.\n */\n setInspectedPageBounds(bounds: {\n x: number,\n y: number,\n width: number,\n height: number,\n }): void;\n\n showCertificateViewer(certChain: string[]): void;\n\n setWhitelistedShortcuts(shortcuts: string): void;\n\n setEyeDropperActive(active: boolean): void;\n\n inspectElementCompleted(): void;\n\n openInNewTab(url: Platform.DevToolsPath.UrlString): void;\n\n showItemInFolder(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n removeFileSystem(fileSystemPath: Platform.DevToolsPath.RawPathString): void;\n\n requestFileSystems(): void;\n\n save(url: Platform.DevToolsPath.UrlString, content: string, forceSaveAs: boolean): void;\n\n append(url: Platform.DevToolsPath.UrlString, content: string): void;\n\n close(url: Platform.DevToolsPath.UrlString): void;\n\n searchInPath(requestId: number, fileSystemPath: Platform.DevToolsPath.RawPathString, query: string): void;\n\n stopIndexing(requestId: number): void;\n\n bringToFront(): void;\n\n closeWindow(): void;\n\n copyText(text: string|null|undefined): void;\n\n inspectedURLChanged(url: Platform.DevToolsPath.UrlString): void;\n\n isolatedFileSystem(fileSystemId: string, registeredName: string): FileSystem|null;\n\n loadNetworkResource(\n url: string, headers: string, streamId: number, callback: (arg0: LoadNetworkResourceResult) => void): void;\n\n registerPreference(name: string, options: {synced?: boolean}): void;\n\n getPreferences(callback: (arg0: {\n [x: string]: string,\n }) => void): void;\n\n getPreference(name: string, callback: (arg0: string) => void): void;\n\n setPreference(name: string, value: string): void;\n\n removePreference(name: string): void;\n\n clearPreferences(): void;\n\n getSyncInformation(callback: (arg0: SyncInformation) => void): void;\n\n upgradeDraggedFileSystemPermissions(fileSystem: FileSystem): void;\n\n platform(): string;\n\n recordCountHistogram(histogramName: string, sample: number, min: number, exclusiveMax: number, bucketSize: number):\n void;\n\n recordEnumeratedHistogram(actionName: EnumeratedHistogram, actionCode: number, bucketSize: number): void;\n\n recordPerformanceHistogram(histogramName: string, duration: number): void;\n\n recordUserMetricsAction(umaName: string): void;\n\n sendMessageToBackend(message: string): void;\n\n setDevicesDiscoveryConfig(config: Adb.Config): void;\n\n setDevicesUpdatesEnabled(enabled: boolean): void;\n\n performActionOnRemotePage(pageId: string, action: string): void;\n\n openRemotePage(browserId: string, url: string): void;\n\n openNodeFrontend(): void;\n\n setInjectedScriptForOrigin(origin: string, script: string): void;\n\n setIsDocked(isDocked: boolean, callback: () => void): void;\n\n showSurvey(trigger: string, callback: (arg0: ShowSurveyResult) => void): void;\n\n canShowSurvey(trigger: string, callback: (arg0: CanShowSurveyResult) => void): void;\n\n zoomFactor(): number;\n\n zoomIn(): void;\n\n zoomOut(): void;\n\n resetZoom(): void;\n\n showContextMenuAtPoint(x: number, y: number, items: ContextMenuDescriptor[], document: Document): void;\n\n reattach(callback: () => void): void;\n\n readyForTest(): void;\n\n connectionReady(): void;\n\n setOpenNewWindowForPopups(value: boolean): void;\n\n isHostedMode(): boolean;\n\n setAddExtensionCallback(callback: (arg0: ExtensionDescriptor) => void): void;\n\n initialTargetId(): Promise;\n\n doAidaConversation: (request: string, cb: (result: DoAidaConversationResult) => void) => void;\n\n recordImpression(event: ImpressionEvent): void;\n recordClick(event: ClickEvent): void;\n recordHover(event: HoverEvent): void;\n recordDrag(event: DragEvent): void;\n recordChange(event: ChangeEvent): void;\n recordKeyDown(event: KeyDownEvent): void;\n}\n\nexport interface ContextMenuDescriptor {\n type: 'checkbox'|'item'|'separator'|'subMenu';\n id?: number;\n label?: string;\n enabled?: boolean;\n checked?: boolean;\n subItems?: ContextMenuDescriptor[];\n jslogContext?: string;\n}\nexport interface LoadNetworkResourceResult {\n statusCode: number;\n headers?: {\n [x: string]: string,\n };\n netError?: number;\n netErrorName?: string;\n urlValid?: boolean;\n messageOverride?: string;\n}\nexport interface ExtensionDescriptor {\n startPage: string;\n name: string;\n exposeExperimentalAPIs: boolean;\n hostsPolicy?: ExtensionHostsPolicy;\n allowFileAccess?: boolean;\n}\nexport interface ExtensionHostsPolicy {\n runtimeAllowedHosts: string[];\n runtimeBlockedHosts: string[];\n}\nexport interface ShowSurveyResult {\n surveyShown: boolean;\n}\nexport interface CanShowSurveyResult {\n canShowSurvey: boolean;\n}\nexport interface SyncInformation {\n /** Whether Chrome Sync is enabled and active */\n isSyncActive: boolean;\n /** Whether syncing of Chrome Settings is enabled via Chrome Sync is enabled */\n arePreferencesSynced?: boolean;\n /** The email of the account used for syncing */\n accountEmail?: string;\n /** The image of the account used for syncing. Its a base64 encoded PNG */\n accountImage?: string;\n}\n\n/**\n * Enum for recordPerformanceHistogram\n * Warning: There is another definition of this enum in the DevTools code\n * base, keep them in sync:\n * front_end/devtools_compatibility.js\n * @readonly\n */\nexport const enum EnumeratedHistogram {\n ActionTaken = 'DevTools.ActionTaken',\n BreakpointWithConditionAdded = 'DevTools.BreakpointWithConditionAdded',\n BreakpointEditDialogRevealedFrom = 'DevTools.BreakpointEditDialogRevealedFrom',\n PanelClosed = 'DevTools.PanelClosed',\n PanelShown = 'DevTools.PanelShown',\n PanelShownInLocation = 'DevTools.PanelShownInLocation',\n SidebarPaneShown = 'DevTools.SidebarPaneShown',\n KeyboardShortcutFired = 'DevTools.KeyboardShortcutFired',\n IssueCreated = 'DevTools.IssueCreated',\n IssuesPanelIssueExpanded = 'DevTools.IssuesPanelIssueExpanded',\n IssuesPanelOpenedFrom = 'DevTools.IssuesPanelOpenedFrom',\n IssuesPanelResourceOpened = 'DevTools.IssuesPanelResourceOpened',\n KeybindSetSettingChanged = 'DevTools.KeybindSetSettingChanged',\n ElementsSidebarTabShown = 'DevTools.Elements.SidebarTabShown',\n ExperimentEnabledAtLaunch = 'DevTools.ExperimentEnabledAtLaunch',\n ExperimentDisabledAtLaunch = 'DevTools.ExperimentDisabledAtLaunch',\n ExperimentEnabled = 'DevTools.ExperimentEnabled',\n ExperimentDisabled = 'DevTools.ExperimentDisabled',\n DeveloperResourceLoaded = 'DevTools.DeveloperResourceLoaded',\n DeveloperResourceScheme = 'DevTools.DeveloperResourceScheme',\n Language = 'DevTools.Language',\n SyncSetting = 'DevTools.SyncSetting',\n RecordingAssertion = 'DevTools.RecordingAssertion',\n RecordingCodeToggled = 'DevTools.RecordingCodeToggled',\n RecordingCopiedToClipboard = 'DevTools.RecordingCopiedToClipboard',\n RecordingEdited = 'DevTools.RecordingEdited',\n RecordingExported = 'DevTools.RecordingExported',\n RecordingReplayFinished = 'DevTools.RecordingReplayFinished',\n RecordingReplaySpeed = 'DevTools.RecordingReplaySpeed',\n RecordingReplayStarted = 'DevTools.RecordingReplayStarted',\n RecordingToggled = 'DevTools.RecordingToggled',\n SourcesSidebarTabShown = 'DevTools.Sources.SidebarTabShown',\n SourcesPanelFileDebugged = 'DevTools.SourcesPanelFileDebugged',\n SourcesPanelFileOpened = 'DevTools.SourcesPanelFileOpened',\n NetworkPanelResponsePreviewOpened = 'DevTools.NetworkPanelResponsePreviewOpened',\n StyleTextCopied = 'DevTools.StyleTextCopied',\n ManifestSectionSelected = 'DevTools.ManifestSectionSelected',\n CSSHintShown = 'DevTools.CSSHintShown',\n LighthouseModeRun = 'DevTools.LighthouseModeRun',\n LighthouseCategoryUsed = 'DevTools.LighthouseCategoryUsed',\n ColorConvertedFrom = 'DevTools.ColorConvertedFrom',\n ColorPickerOpenedFrom = 'DevTools.ColorPickerOpenedFrom',\n CSSPropertyDocumentation = 'DevTools.CSSPropertyDocumentation',\n InlineScriptParsed = 'DevTools.InlineScriptParsed',\n VMInlineScriptTypeShown = 'DevTools.VMInlineScriptShown',\n BreakpointsRestoredFromStorageCount = 'DevTools.BreakpointsRestoredFromStorageCount',\n SwatchActivated = 'DevTools.SwatchActivated',\n BadgeActivated = 'DevTools.BadgeActivated',\n AnimationPlaybackRateChanged = 'DevTools.AnimationPlaybackRateChanged',\n AnimationPointDragged = 'DevTools.AnimationPointDragged',\n LegacyResourceTypeFilterNumberOfSelectedChanged = 'DevTools.LegacyResourceTypeFilterNumberOfSelectedChanged',\n LegacyResourceTypeFilterItemSelected = 'DevTools.LegacyResourceTypeFilterItemSelected',\n ResourceTypeFilterNumberOfSelectedChanged = 'DevTools.ResourceTypeFilterNumberOfSelectedChanged',\n ResourceTypeFilterItemSelected = 'DevTools.ResourceTypeFilterItemSelected',\n NetworkPanelMoreFiltersNumberOfSelectedChanged = 'DevTools.NetworkPanelMoreFiltersNumberOfSelectedChanged',\n NetworkPanelMoreFiltersItemSelected = 'DevTools.NetworkPanelMoreFiltersItemSelected',\n}\n"]} \ No newline at end of file diff --git a/public/core/host/UserMetrics.d.ts b/public/core/host/UserMetrics.d.ts index 3108eea96..6a42bc065 100644 --- a/public/core/host/UserMetrics.d.ts +++ b/public/core/host/UserMetrics.d.ts @@ -190,7 +190,6 @@ export declare enum Action { InsightConsoleMessageShown = 113, InsightRequestedViaContextMenu = 114, InsightRequestedViaHoverButton = 115, - InsightRefined = 116, InsightRatedPositive = 117, InsightRatedNegative = 118, InsightClosed = 119, @@ -204,7 +203,10 @@ export declare enum Action { ToggleEmulateFocusedPageFromStylesPaneOff = 127, ToggleEmulateFocusedPageFromRenderingTab = 128, ToggleEmulateFocusedPageFromCommandMenu = 129, - MaxValue = 130 + InsightGenerated = 130, + InsightErroredApi = 131, + InsightErroredMarkdown = 132, + MaxValue = 133 } export declare enum PanelCodes { elements = 1, diff --git a/public/core/host/UserMetrics.js b/public/core/host/UserMetrics.js index 41debc423..cd7b6a999 100644 --- a/public/core/host/UserMetrics.js +++ b/public/core/host/UserMetrics.js @@ -495,7 +495,6 @@ export var Action; Action[Action["InsightConsoleMessageShown"] = 113] = "InsightConsoleMessageShown"; Action[Action["InsightRequestedViaContextMenu"] = 114] = "InsightRequestedViaContextMenu"; Action[Action["InsightRequestedViaHoverButton"] = 115] = "InsightRequestedViaHoverButton"; - Action[Action["InsightRefined"] = 116] = "InsightRefined"; Action[Action["InsightRatedPositive"] = 117] = "InsightRatedPositive"; Action[Action["InsightRatedNegative"] = 118] = "InsightRatedNegative"; Action[Action["InsightClosed"] = 119] = "InsightClosed"; @@ -509,7 +508,10 @@ export var Action; Action[Action["ToggleEmulateFocusedPageFromStylesPaneOff"] = 127] = "ToggleEmulateFocusedPageFromStylesPaneOff"; Action[Action["ToggleEmulateFocusedPageFromRenderingTab"] = 128] = "ToggleEmulateFocusedPageFromRenderingTab"; Action[Action["ToggleEmulateFocusedPageFromCommandMenu"] = 129] = "ToggleEmulateFocusedPageFromCommandMenu"; - Action[Action["MaxValue"] = 130] = "MaxValue"; + Action[Action["InsightGenerated"] = 130] = "InsightGenerated"; + Action[Action["InsightErroredApi"] = 131] = "InsightErroredApi"; + Action[Action["InsightErroredMarkdown"] = 132] = "InsightErroredMarkdown"; + Action[Action["MaxValue"] = 133] = "MaxValue"; })(Action || (Action = {})); /* eslint-disable @typescript-eslint/naming-convention */ export var PanelCodes; diff --git a/public/core/host/UserMetrics.js.map b/public/core/host/UserMetrics.js.map index 16552840e..721b05d5a 100644 --- a/public/core/host/UserMetrics.js.map +++ b/public/core/host/UserMetrics.js.map @@ -1 +1 @@ -{"version":3,"file":"UserMetrics.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/UserMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';\nimport {EnumeratedHistogram} from './InspectorFrontendHostAPI.js';\n\nexport class UserMetrics {\n #panelChangedSinceLaunch: boolean;\n #firedLaunchHistogram: boolean;\n #launchPanelName: string;\n constructor() {\n this.#panelChangedSinceLaunch = false;\n this.#firedLaunchHistogram = false;\n this.#launchPanelName = '';\n }\n\n breakpointWithConditionAdded(breakpointWithConditionAdded: BreakpointWithConditionAdded): void {\n if (breakpointWithConditionAdded >= BreakpointWithConditionAdded.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BreakpointWithConditionAdded, breakpointWithConditionAdded,\n BreakpointWithConditionAdded.MaxValue);\n }\n\n breakpointEditDialogRevealedFrom(breakpointEditDialogRevealedFrom: BreakpointEditDialogRevealedFrom): void {\n if (breakpointEditDialogRevealedFrom >= BreakpointEditDialogRevealedFrom.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BreakpointEditDialogRevealedFrom, breakpointEditDialogRevealedFrom,\n BreakpointEditDialogRevealedFrom.MaxValue);\n }\n\n panelShown(panelName: string, isLaunching?: boolean): void {\n const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelShown, code, PanelCodes.MaxValue);\n InspectorFrontendHostInstance.recordUserMetricsAction('DevTools_PanelShown_' + panelName);\n // Store that the user has changed the panel so we know launch histograms should not be fired.\n if (!isLaunching) {\n this.#panelChangedSinceLaunch = true;\n }\n }\n\n /**\n * Fired when a panel is closed (regardless if it exists in the main panel or the drawer)\n */\n panelClosed(panelName: string): void {\n const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelClosed, code, PanelCodes.MaxValue);\n // Store that the user has changed the panel so we know launch histograms should not be fired.\n this.#panelChangedSinceLaunch = true;\n }\n\n panelShownInLocation(panelName: string, location: 'main'|'drawer'): void {\n const panelWithLocationName = `${panelName}-${location}`;\n const panelWithLocation = PanelWithLocation[panelWithLocationName as keyof typeof PanelWithLocation] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.PanelShownInLocation,\n panelWithLocation,\n PanelWithLocation.MaxValue,\n );\n }\n\n elementsSidebarTabShown(sidebarPaneName: string): void {\n const code = ElementsSidebarTabCodes[sidebarPaneName as keyof typeof ElementsSidebarTabCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ElementsSidebarTabShown, code, ElementsSidebarTabCodes.MaxValue);\n }\n\n sourcesSidebarTabShown(sidebarPaneName: string): void {\n const code = SourcesSidebarTabCodes[sidebarPaneName as keyof typeof SourcesSidebarTabCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesSidebarTabShown, code, SourcesSidebarTabCodes.MaxValue);\n }\n\n settingsPanelShown(settingsViewId: string): void {\n this.panelShown('settings-' + settingsViewId);\n }\n\n sourcesPanelFileDebugged(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileDebugged, code, MediaTypes.MaxValue);\n }\n\n sourcesPanelFileOpened(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileOpened, code, MediaTypes.MaxValue);\n }\n\n networkPanelResponsePreviewOpened(mediaType: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelResponsePreviewOpened, code, MediaTypes.MaxValue);\n }\n\n actionTaken(action: Action): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.ActionTaken, action, Action.MaxValue);\n }\n\n panelLoaded(panelName: string, histogramName: string): void {\n if (this.#firedLaunchHistogram || panelName !== this.#launchPanelName) {\n return;\n }\n\n this.#firedLaunchHistogram = true;\n // Use rAF and window.setTimeout to ensure the marker is fired after layout and rendering.\n // This will give the most accurate representation of the tool being ready for a user.\n requestAnimationFrame(() => {\n window.setTimeout(() => {\n // Mark the load time so that we can pinpoint it more easily in a trace.\n performance.mark(histogramName);\n // If the user has switched panel before we finished loading, ignore the histogram,\n // since the launch timings will have been affected and are no longer valid.\n if (this.#panelChangedSinceLaunch) {\n return;\n }\n // This fires the event for the appropriate launch histogram.\n // The duration is measured as the time elapsed since the time origin of the document.\n InspectorFrontendHostInstance.recordPerformanceHistogram(histogramName, performance.now());\n }, 0);\n });\n }\n\n setLaunchPanel(panelName: string|null): void {\n this.#launchPanelName = (panelName as string);\n }\n\n performanceTraceLoad(measure: PerformanceMeasure): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.TraceLoad', measure.duration);\n }\n\n keybindSetSettingChanged(keybindSet: string): void {\n const value = KeybindSetSettings[keybindSet as keyof typeof KeybindSetSettings] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeybindSetSettingChanged, value, KeybindSetSettings.MaxValue);\n }\n\n keyboardShortcutFired(actionId: string): void {\n const action =\n KeyboardShortcutAction[actionId as keyof typeof KeyboardShortcutAction] || KeyboardShortcutAction.OtherShortcut;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeyboardShortcutFired, action, KeyboardShortcutAction.MaxValue);\n }\n\n issuesPanelOpenedFrom(issueOpener: IssueOpener): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelOpenedFrom, issueOpener, IssueOpener.MaxValue);\n }\n\n issuesPanelIssueExpanded(issueExpandedCategory: string|undefined): void {\n if (issueExpandedCategory === undefined) {\n return;\n }\n\n const issueExpanded = IssueExpanded[issueExpandedCategory as keyof typeof IssueExpanded];\n\n if (issueExpanded === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelIssueExpanded, issueExpanded, IssueExpanded.MaxValue);\n }\n\n issuesPanelResourceOpened(issueCategory: string, type: string): void {\n const key = issueCategory + type;\n const value = IssueResourceOpened[key as keyof typeof IssueResourceOpened];\n\n if (value === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelResourceOpened, value, IssueResourceOpened.MaxValue);\n }\n\n issueCreated(code: string): void {\n const issueCreated = IssueCreated[code as keyof typeof IssueCreated];\n if (issueCreated === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssueCreated, issueCreated, IssueCreated.MaxValue);\n }\n\n experimentEnabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentEnabledAtLaunch, experiment, DevtoolsExperiments.MaxValue);\n }\n\n experimentDisabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentDisabledAtLaunch, experiment, DevtoolsExperiments.MaxValue);\n }\n\n experimentChanged(experimentId: string, isEnabled: boolean): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n const actionName = isEnabled ? EnumeratedHistogram.ExperimentEnabled : EnumeratedHistogram.ExperimentDisabled;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(actionName, experiment, DevtoolsExperiments.MaxValue);\n }\n\n developerResourceLoaded(developerResourceLoaded: DeveloperResourceLoaded): void {\n if (developerResourceLoaded >= DeveloperResourceLoaded.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceLoaded, developerResourceLoaded, DeveloperResourceLoaded.MaxValue);\n }\n\n developerResourceScheme(developerResourceScheme: DeveloperResourceScheme): void {\n if (developerResourceScheme >= DeveloperResourceScheme.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceScheme, developerResourceScheme, DeveloperResourceScheme.MaxValue);\n }\n\n inlineScriptParsed(inlineScriptType: VMInlineScriptType): void {\n if (inlineScriptType >= VMInlineScriptType.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.InlineScriptParsed, inlineScriptType, VMInlineScriptType.MaxValue);\n }\n\n vmInlineScriptContentShown(inlineScriptType: VMInlineScriptType): void {\n if (inlineScriptType >= VMInlineScriptType.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.VMInlineScriptTypeShown, inlineScriptType, VMInlineScriptType.MaxValue);\n }\n\n language(language: Intl.UnicodeBCP47LocaleIdentifier): void {\n const languageCode = Language[language as keyof typeof Language];\n if (languageCode === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.Language, languageCode, Language.MaxValue);\n }\n\n syncSetting(devtoolsSyncSettingEnabled: boolean): void {\n InspectorFrontendHostInstance.getSyncInformation(syncInfo => {\n let settingValue = SyncSetting.ChromeSyncDisabled;\n if (syncInfo.isSyncActive && !syncInfo.arePreferencesSynced) {\n settingValue = SyncSetting.ChromeSyncSettingsDisabled;\n } else if (syncInfo.isSyncActive && syncInfo.arePreferencesSynced) {\n settingValue = devtoolsSyncSettingEnabled ? SyncSetting.DevToolsSyncSettingEnabled :\n SyncSetting.DevToolsSyncSettingDisabled;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SyncSetting, settingValue, SyncSetting.MaxValue);\n });\n }\n\n recordingAssertion(value: RecordingAssertion): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingAssertion, value, RecordingAssertion.MaxValue);\n }\n\n recordingToggled(value: RecordingToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingToggled, value, RecordingToggled.MaxValue);\n }\n\n recordingReplayFinished(value: RecordingReplayFinished): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayFinished, value, RecordingReplayFinished.MaxValue);\n }\n\n recordingReplaySpeed(value: RecordingReplaySpeed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplaySpeed, value, RecordingReplaySpeed.MaxValue);\n }\n\n recordingReplayStarted(value: RecordingReplayStarted): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayStarted, value, RecordingReplayStarted.MaxValue);\n }\n\n recordingEdited(value: RecordingEdited): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingEdited, value, RecordingEdited.MaxValue);\n }\n\n recordingExported(value: RecordingExported): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingExported, value, RecordingExported.MaxValue);\n }\n\n recordingCodeToggled(value: RecordingCodeToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCodeToggled, value, RecordingCodeToggled.MaxValue);\n }\n\n recordingCopiedToClipboard(value: RecordingCopiedToClipboard): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCopiedToClipboard, value, RecordingCopiedToClipboard.MaxValue);\n }\n\n styleTextCopied(value: StyleTextCopied): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.StyleTextCopied, value, StyleTextCopied.MaxValue);\n }\n\n manifestSectionSelected(sectionTitle: string): void {\n const code =\n ManifestSectionCodes[sectionTitle as keyof typeof ManifestSectionCodes] || ManifestSectionCodes.OtherSection;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ManifestSectionSelected, code, ManifestSectionCodes.MaxValue);\n }\n\n cssHintShown(type: CSSHintType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSHintShown, type, CSSHintType.MaxValue);\n }\n\n lighthouseModeRun(type: LighthouseModeRun): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseModeRun, type, LighthouseModeRun.MaxValue);\n }\n\n lighthouseCategoryUsed(type: LighthouseCategoryUsed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseCategoryUsed, type, LighthouseCategoryUsed.MaxValue);\n }\n\n colorConvertedFrom(type: ColorConvertedFrom): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ColorConvertedFrom, type, ColorConvertedFrom.MaxValue);\n }\n\n colorPickerOpenedFrom(type: ColorPickerOpenedFrom): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ColorPickerOpenedFrom, type, ColorPickerOpenedFrom.MaxValue);\n }\n\n cssPropertyDocumentation(type: CSSPropertyDocumentation): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSPropertyDocumentation, type, CSSPropertyDocumentation.MaxValue);\n }\n\n swatchActivated(swatch: SwatchType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SwatchActivated, swatch, SwatchType.MaxValue);\n }\n\n badgeActivated(badge: BadgeType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BadgeActivated, badge, BadgeType.MaxValue);\n }\n\n breakpointsRestoredFromStorage(count: number): void {\n const countBucket = this.#breakpointCountToBucket(count);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BreakpointsRestoredFromStorageCount, countBucket,\n BreakpointsRestoredFromStorageCount.MaxValue);\n }\n\n animationPlaybackRateChanged(playbackRate: AnimationsPlaybackRate): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPlaybackRateChanged, playbackRate, AnimationsPlaybackRate.MaxValue);\n }\n\n animationPointDragged(dragType: AnimationPointDragType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPointDragged, dragType, AnimationPointDragType.MaxValue);\n }\n\n #breakpointCountToBucket(count: number): BreakpointsRestoredFromStorageCount {\n if (count < 100) {\n return BreakpointsRestoredFromStorageCount.LessThan100;\n }\n if (count < 300) {\n return BreakpointsRestoredFromStorageCount.LessThan300;\n }\n if (count < 1000) {\n return BreakpointsRestoredFromStorageCount.LessThan1000;\n }\n if (count < 3000) {\n return BreakpointsRestoredFromStorageCount.LessThan3000;\n }\n if (count < 10000) {\n return BreakpointsRestoredFromStorageCount.LessThan10000;\n }\n if (count < 30000) {\n return BreakpointsRestoredFromStorageCount.LessThan30000;\n }\n if (count < 100000) {\n return BreakpointsRestoredFromStorageCount.LessThan100000;\n }\n if (count < 300000) {\n return BreakpointsRestoredFromStorageCount.LessThan300000;\n }\n if (count < 1000000) {\n return BreakpointsRestoredFromStorageCount.LessThan1000000;\n }\n return BreakpointsRestoredFromStorageCount.Above1000000;\n }\n\n workspacesPopulated(wallClockTimeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.Workspaces.PopulateWallClocktime', wallClockTimeInMilliseconds);\n }\n\n visualLoggingProcessingDone(timeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.VisualLogging.ProcessingTime', timeInMilliseconds);\n }\n\n legacyResourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MaxValue - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MaxValue);\n }\n\n legacyResourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterItemSelected, resourceType, ResourceType.MaxValue);\n }\n\n resourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MaxValue - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MaxValue);\n }\n\n resourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterItemSelected, resourceType, ResourceType.MaxValue);\n }\n\n networkPanelMoreFiltersNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, NetworkPanelMoreFilters.MaxValue), 0);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersNumberOfSelectedChanged, boundItemCount,\n NetworkPanelMoreFilters.MaxValue);\n }\n\n networkPanelMoreFiltersItemSelected(filterName: string): void {\n const filter = NetworkPanelMoreFilters[filterName as keyof typeof NetworkPanelMoreFilters];\n if (filter === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersItemSelected, filter, NetworkPanelMoreFilters.MaxValue);\n }\n}\n\n/**\n * The numeric enum values are not necessarily continuous! It is possible that\n * values have been removed, which results in gaps in the sequence of values.\n * When adding a new value:\n * 1. Add an entry to the bottom of the enum before 'MaxValue'.\n * 2. Set the value of the new entry to the current value of 'MaxValue'.\n * 2. Increment the value of 'MaxValue' by 1.\n * When removing a value which is no longer needed:\n * 1. Delete the line with the unneeded value\n * 2. Do not update any 'MaxValue' or any other value.\n */\n\n// Codes below are used to collect UMA histograms in the Chromium port.\n// Do not change the values below, additional actions are needed on the Chromium side\n// in order to add more codes.\nexport enum Action {\n WindowDocked = 1,\n WindowUndocked = 2,\n ScriptsBreakpointSet = 3,\n TimelineStarted = 4,\n ProfilesCPUProfileTaken = 5,\n ProfilesHeapProfileTaken = 6,\n ConsoleEvaluated = 8,\n FileSavedInWorkspace = 9,\n DeviceModeEnabled = 10,\n AnimationsPlaybackRateChanged = 11,\n RevisionApplied = 12,\n FileSystemDirectoryContentReceived = 13,\n StyleRuleEdited = 14,\n CommandEvaluatedInConsolePanel = 15,\n DOMPropertiesExpanded = 16,\n ResizedViewInResponsiveMode = 17,\n TimelinePageReloadStarted = 18,\n ConnectToNodeJSFromFrontend = 19,\n ConnectToNodeJSDirectly = 20,\n CpuThrottlingEnabled = 21,\n CpuProfileNodeFocused = 22,\n CpuProfileNodeExcluded = 23,\n SelectFileFromFilePicker = 24,\n SelectCommandFromCommandMenu = 25,\n ChangeInspectedNodeInElementsPanel = 26,\n StyleRuleCopied = 27,\n CoverageStarted = 28,\n LighthouseStarted = 29,\n LighthouseFinished = 30,\n ShowedThirdPartyBadges = 31,\n LighthouseViewTrace = 32,\n FilmStripStartedRecording = 33,\n CoverageReportFiltered = 34,\n CoverageStartedPerBlock = 35,\n 'SettingsOpenedFromGear-deprecated' = 36,\n 'SettingsOpenedFromMenu-deprecated' = 37,\n 'SettingsOpenedFromCommandMenu-deprecated' = 38,\n TabMovedToDrawer = 39,\n TabMovedToMainPanel = 40,\n CaptureCssOverviewClicked = 41,\n VirtualAuthenticatorEnvironmentEnabled = 42,\n SourceOrderViewActivated = 43,\n UserShortcutAdded = 44,\n ShortcutRemoved = 45,\n ShortcutModified = 46,\n CustomPropertyLinkClicked = 47,\n CustomPropertyEdited = 48,\n ServiceWorkerNetworkRequestClicked = 49,\n ServiceWorkerNetworkRequestClosedQuickly = 50,\n NetworkPanelServiceWorkerRespondWith = 51,\n NetworkPanelCopyValue = 52,\n ConsoleSidebarOpened = 53,\n PerfPanelTraceImported = 54,\n PerfPanelTraceExported = 55,\n StackFrameRestarted = 56,\n CaptureTestProtocolClicked = 57,\n BreakpointRemovedFromRemoveButton = 58,\n BreakpointGroupExpandedStateChanged = 59,\n HeaderOverrideFileCreated = 60,\n HeaderOverrideEnableEditingClicked = 61,\n HeaderOverrideHeaderAdded = 62,\n HeaderOverrideHeaderEdited = 63,\n HeaderOverrideHeaderRemoved = 64,\n HeaderOverrideHeadersFileEdited = 65,\n PersistenceNetworkOverridesEnabled = 66,\n PersistenceNetworkOverridesDisabled = 67,\n BreakpointRemovedFromContextMenu = 68,\n BreakpointsInFileRemovedFromRemoveButton = 69,\n BreakpointsInFileRemovedFromContextMenu = 70,\n BreakpointsInFileCheckboxToggled = 71,\n BreakpointsInFileEnabledDisabledFromContextMenu = 72,\n BreakpointConditionEditedFromSidebar = 73,\n WorkspaceTabAddFolder = 74,\n WorkspaceTabRemoveFolder = 75,\n OverrideTabAddFolder = 76,\n OverrideTabRemoveFolder = 77,\n WorkspaceSourceSelected = 78,\n OverridesSourceSelected = 79,\n StyleSheetInitiatorLinkClicked = 80,\n BreakpointRemovedFromGutterContextMenu = 81,\n BreakpointRemovedFromGutterToggle = 82,\n StylePropertyInsideKeyframeEdited = 83,\n OverrideContentFromSourcesContextMenu = 84,\n OverrideContentFromNetworkContextMenu = 85,\n OverrideScript = 86,\n OverrideStyleSheet = 87,\n OverrideDocument = 88,\n OverrideFetchXHR = 89,\n OverrideImage = 90,\n OverrideFont = 91,\n OverrideContentContextMenuSetup = 92,\n OverrideContentContextMenuAbandonSetup = 93,\n OverrideContentContextMenuActivateDisabled = 94,\n OverrideContentContextMenuOpenExistingFile = 95,\n OverrideContentContextMenuSaveNewFile = 96,\n ShowAllOverridesFromSourcesContextMenu = 97,\n ShowAllOverridesFromNetworkContextMenu = 98,\n AnimationGroupsCleared = 99,\n AnimationsPaused = 100,\n AnimationsResumed = 101,\n AnimatedNodeDescriptionClicked = 102,\n AnimationGroupScrubbed = 103,\n AnimationGroupReplayed = 104,\n OverrideTabDeleteFolderContextMenu = 105,\n WorkspaceDropFolder = 107,\n WorkspaceSelectFolder = 108,\n OverrideContentContextMenuSourceMappedWarning = 109,\n OverrideContentContextMenuRedirectToDeployed = 110,\n NewStyleRuleAdded = 111,\n TraceExpanded = 112,\n InsightConsoleMessageShown = 113,\n InsightRequestedViaContextMenu = 114,\n InsightRequestedViaHoverButton = 115,\n InsightRefined = 116,\n InsightRatedPositive = 117,\n InsightRatedNegative = 118,\n InsightClosed = 119,\n InsightErrored = 120,\n InsightHoverButtonShown = 121,\n SelfXssWarningConsoleMessageShown = 122,\n SelfXssWarningDialogShown = 123,\n SelfXssAllowPastingInConsole = 124,\n SelfXssAllowPastingInDialog = 125,\n ToggleEmulateFocusedPageFromStylesPaneOn = 126,\n ToggleEmulateFocusedPageFromStylesPaneOff = 127,\n ToggleEmulateFocusedPageFromRenderingTab = 128,\n ToggleEmulateFocusedPageFromCommandMenu = 129,\n MaxValue = 130,\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum PanelCodes {\n elements = 1,\n resources = 2,\n network = 3,\n sources = 4,\n timeline = 5,\n 'heap-profiler' = 6,\n console = 8,\n layers = 9,\n 'console-view' = 10,\n 'animations' = 11,\n 'network.config' = 12,\n 'rendering' = 13,\n 'sensors' = 14,\n 'sources.search' = 15,\n security = 16,\n 'js-profiler' = 17,\n lighthouse = 18,\n 'coverage' = 19,\n 'protocol-monitor' = 20,\n 'remote-devices' = 21,\n 'web-audio' = 22,\n 'changes.changes' = 23,\n 'performance.monitor' = 24,\n 'release-note' = 25,\n 'live-heap-profile' = 26,\n 'sources.quick' = 27,\n 'network.blocked-urls' = 28,\n 'settings-preferences' = 29,\n 'settings-workspace' = 30,\n 'settings-experiments' = 31,\n 'settings-blackbox' = 32,\n 'settings-devices' = 33,\n 'settings-throttling-conditions' = 34,\n 'settings-emulation-locations' = 35,\n 'settings-shortcuts' = 36,\n 'issues-pane' = 37,\n 'settings-keybinds' = 38,\n 'cssoverview' = 39,\n 'chrome-recorder' = 40,\n 'trust-tokens' = 41,\n 'reporting-api' = 42,\n 'interest-groups' = 43,\n 'back-forward-cache' = 44,\n 'service-worker-cache' = 45,\n 'background-service-background-fetch' = 46,\n 'background-service-background-sync' = 47,\n 'background-service-push-messaging' = 48,\n 'background-service-notifications' = 49,\n 'background-service-payment-handler' = 50,\n 'background-service-periodic-background-sync' = 51,\n 'service-workers' = 52,\n 'app-manifest' = 53,\n 'storage' = 54,\n 'cookies' = 55,\n 'frame-details' = 56,\n 'frame-resource' = 57,\n 'frame-window' = 58,\n 'frame-worker' = 59,\n 'dom-storage' = 60,\n 'indexed-db' = 61,\n 'web-sql' = 62,\n 'performance-insights' = 63,\n 'preloading' = 64,\n 'bounce-tracking-mitigations' = 65,\n 'developer-resources' = 66,\n 'autofill-view' = 67,\n MaxValue = 68,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum PanelWithLocation {\n 'elements-main' = 1,\n 'elements-drawer' = 2,\n 'resources-main' = 3,\n 'resources-drawer' = 4,\n 'network-main' = 5,\n 'network-drawer' = 6,\n 'sources-main' = 7,\n 'sources-drawer' = 8,\n 'timeline-main' = 9,\n 'timeline-drawer' = 10,\n 'heap_profiler-main' = 11,\n 'heap_profiler-drawer' = 12,\n 'console-main' = 13,\n 'console-drawer' = 14,\n 'layers-main' = 15,\n 'layers-drawer' = 16,\n 'console-view-main' = 17,\n 'console-view-drawer' = 18,\n 'animations-main' = 19,\n 'animations-drawer' = 20,\n 'network.config-main' = 21,\n 'network.config-drawer' = 22,\n 'rendering-main' = 23,\n 'rendering-drawer' = 24,\n 'sensors-main' = 25,\n 'sensors-drawer' = 26,\n 'sources.search-main' = 27,\n 'sources.search-drawer' = 28,\n 'security-main' = 29,\n 'security-drawer' = 30,\n 'js_profiler-main' = 31,\n 'js_profiler-drawer' = 32,\n 'lighthouse-main' = 33,\n 'lighthouse-drawer' = 34,\n 'coverage-main' = 35,\n 'coverage-drawer' = 36,\n 'protocol-monitor-main' = 37,\n 'protocol-monitor-drawer' = 38,\n 'remote-devices-main' = 39,\n 'remote-devices-drawer' = 40,\n 'web-audio-main' = 41,\n 'web-audio-drawer' = 42,\n 'changes.changes-main' = 43,\n 'changes.changes-drawer' = 44,\n 'performance.monitor-main' = 45,\n 'performance.monitor-drawer' = 46,\n 'release-note-main' = 47,\n 'release-note-drawer' = 48,\n 'live_heap_profile-main' = 49,\n 'live_heap_profile-drawer' = 50,\n 'sources.quick-main' = 51,\n 'sources.quick-drawer' = 52,\n 'network.blocked-urls-main' = 53,\n 'network.blocked-urls-drawer' = 54,\n 'settings-preferences-main' = 55,\n 'settings-preferences-drawer' = 56,\n 'settings-workspace-main' = 57,\n 'settings-workspace-drawer' = 58,\n 'settings-experiments-main' = 59,\n 'settings-experiments-drawer' = 60,\n 'settings-blackbox-main' = 61,\n 'settings-blackbox-drawer' = 62,\n 'settings-devices-main' = 63,\n 'settings-devices-drawer' = 64,\n 'settings-throttling-conditions-main' = 65,\n 'settings-throttling-conditions-drawer' = 66,\n 'settings-emulation-locations-main' = 67,\n 'settings-emulation-locations-drawer' = 68,\n 'settings-shortcuts-main' = 69,\n 'settings-shortcuts-drawer' = 70,\n 'issues-pane-main' = 71,\n 'issues-pane-drawer' = 72,\n 'settings-keybinds-main' = 73,\n 'settings-keybinds-drawer' = 74,\n 'cssoverview-main' = 75,\n 'cssoverview-drawer' = 76,\n 'chrome_recorder-main' = 77,\n 'chrome_recorder-drawer' = 78,\n 'trust_tokens-main' = 79,\n 'trust_tokens-drawer' = 80,\n 'reporting_api-main' = 81,\n 'reporting_api-drawer' = 82,\n 'interest_groups-main' = 83,\n 'interest_groups-drawer' = 84,\n 'back_forward_cache-main' = 85,\n 'back_forward_cache-drawer' = 86,\n 'service_worker_cache-main' = 87,\n 'service_worker_cache-drawer' = 88,\n 'background_service_backgroundFetch-main' = 89,\n 'background_service_backgroundFetch-drawer' = 90,\n 'background_service_backgroundSync-main' = 91,\n 'background_service_backgroundSync-drawer' = 92,\n 'background_service_pushMessaging-main' = 93,\n 'background_service_pushMessaging-drawer' = 94,\n 'background_service_notifications-main' = 95,\n 'background_service_notifications-drawer' = 96,\n 'background_service_paymentHandler-main' = 97,\n 'background_service_paymentHandler-drawer' = 98,\n 'background_service_periodicBackgroundSync-main' = 99,\n 'background_service_periodicBackgroundSync-drawer' = 100,\n 'service_workers-main' = 101,\n 'service_workers-drawer' = 102,\n 'app_manifest-main' = 103,\n 'app_manifest-drawer' = 104,\n 'storage-main' = 105,\n 'storage-drawer' = 106,\n 'cookies-main' = 107,\n 'cookies-drawer' = 108,\n 'frame_details-main' = 109,\n 'frame_details-drawer' = 110,\n 'frame_resource-main' = 111,\n 'frame_resource-drawer' = 112,\n 'frame_window-main' = 113,\n 'frame_window-drawer' = 114,\n 'frame_worker-main' = 115,\n 'frame_worker-drawer' = 116,\n 'dom_storage-main' = 117,\n 'dom_storage-drawer' = 118,\n 'indexed_db-main' = 119,\n 'indexed_db-drawer' = 120,\n 'web_sql-main' = 121,\n 'web_sql-drawer' = 122,\n 'performance_insights-main' = 123,\n 'performance_insights-drawer' = 124,\n 'preloading-main' = 125,\n 'preloading-drawer' = 126,\n 'bounce_tracking_mitigations-main' = 127,\n 'bounce_tracking_mitigations-drawer' = 128,\n 'developer-resources-main' = 129,\n 'developer-resources-drawer' = 130,\n 'autofill-view-main' = 131,\n 'autofill-view-drawer' = 132,\n MaxValue = 133,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum ElementsSidebarTabCodes {\n 'OtherSidebarPane' = 0,\n 'styles' = 1,\n 'computed' = 2,\n 'elements.layout' = 3,\n 'elements.event-listeners' = 4,\n 'elements.dom-breakpoints' = 5,\n 'elements.dom-properties' = 6,\n 'accessibility.view' = 7,\n MaxValue = 8,\n}\n\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum SourcesSidebarTabCodes {\n 'OtherSidebarPane' = 0,\n 'navigator-network' = 1,\n 'navigator-files' = 2,\n 'navigator-overrides' = 3,\n 'navigator-content-scripts' = 4,\n 'navigator-snippets' = 5,\n MaxValue = 6,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum MediaTypes {\n Unknown = 0,\n 'text/css' = 2,\n 'text/html' = 3,\n 'application/xml' = 4,\n 'application/wasm' = 5,\n 'application/manifest+json' = 6,\n 'application/x-aspx' = 7,\n 'application/jsp' = 8,\n 'text/x-c++src' = 9,\n 'text/x-coffeescript' = 10,\n 'application/vnd.dart' = 11,\n 'text/typescript' = 12,\n 'text/typescript-jsx' = 13,\n 'application/json' = 14,\n 'text/x-csharp' = 15,\n 'text/x-java' = 16,\n 'text/x-less' = 17,\n 'application/x-httpd-php' = 18,\n 'text/x-python' = 19,\n 'text/x-sh' = 20,\n 'text/x-gss' = 21,\n 'text/x-sass' = 22,\n 'text/x-scss' = 23,\n 'text/markdown' = 24,\n 'text/x-clojure' = 25,\n 'text/jsx' = 26,\n 'text/x-go' = 27,\n 'text/x-kotlin' = 28,\n 'text/x-scala' = 29,\n 'text/x.svelte' = 30,\n 'text/javascript+plain' = 31,\n 'text/javascript+minified' = 32,\n 'text/javascript+sourcemapped' = 33,\n 'text/x.angular' = 34,\n 'text/x.vue' = 35,\n MaxValue = 36,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum KeybindSetSettings {\n 'devToolsDefault' = 0,\n 'vsCode' = 1,\n MaxValue = 2,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum KeyboardShortcutAction {\n OtherShortcut = 0,\n 'quick-open.show-command-menu' = 1,\n 'console.clear' = 2,\n 'console.toggle' = 3,\n 'debugger.step' = 4,\n 'debugger.step-into' = 5,\n 'debugger.step-out' = 6,\n 'debugger.step-over' = 7,\n 'debugger.toggle-breakpoint' = 8,\n 'debugger.toggle-breakpoint-enabled' = 9,\n 'debugger.toggle-pause' = 10,\n 'elements.edit-as-html' = 11,\n 'elements.hide-element' = 12,\n 'elements.redo' = 13,\n 'elements.toggle-element-search' = 14,\n 'elements.undo' = 15,\n 'main.search-in-panel.find' = 16,\n 'main.toggle-drawer' = 17,\n 'network.hide-request-details' = 18,\n 'network.search' = 19,\n 'network.toggle-recording' = 20,\n 'quick-open.show' = 21,\n 'settings.show' = 22,\n 'sources.search' = 23,\n 'background-service.toggle-recording' = 24,\n 'components.collect-garbage' = 25,\n 'console.clear.history' = 26,\n 'console.create-pin' = 27,\n 'coverage.start-with-reload' = 28,\n 'coverage.toggle-recording' = 29,\n 'debugger.breakpoint-input-window' = 30,\n 'debugger.evaluate-selection' = 31,\n 'debugger.next-call-frame' = 32,\n 'debugger.previous-call-frame' = 33,\n 'debugger.run-snippet' = 34,\n 'debugger.toggle-breakpoints-active' = 35,\n 'elements.capture-area-screenshot' = 36,\n 'emulation.capture-full-height-screenshot' = 37,\n 'emulation.capture-node-screenshot' = 38,\n 'emulation.capture-screenshot' = 39,\n 'emulation.show-sensors' = 40,\n 'emulation.toggle-device-mode' = 41,\n 'help.release-notes' = 42,\n 'help.report-issue' = 43,\n 'input.start-replaying' = 44,\n 'input.toggle-pause' = 45,\n 'input.toggle-recording' = 46,\n 'inspector-main.focus-debuggee' = 47,\n 'inspector-main.hard-reload' = 48,\n 'inspector-main.reload' = 49,\n 'live-heap-profile.start-with-reload' = 50,\n 'live-heap-profile.toggle-recording' = 51,\n 'main.debug-reload' = 52,\n 'main.next-tab' = 53,\n 'main.previous-tab' = 54,\n 'main.search-in-panel.cancel' = 55,\n 'main.search-in-panel.find-next' = 56,\n 'main.search-in-panel.find-previous' = 57,\n 'main.toggle-dock' = 58,\n 'main.zoom-in' = 59,\n 'main.zoom-out' = 60,\n 'main.zoom-reset' = 61,\n 'network-conditions.network-low-end-mobile' = 62,\n 'network-conditions.network-mid-tier-mobile' = 63,\n 'network-conditions.network-offline' = 64,\n 'network-conditions.network-online' = 65,\n 'profiler.heap-toggle-recording' = 66,\n 'profiler.js-toggle-recording' = 67,\n 'resources.clear' = 68,\n 'settings.documentation' = 69,\n 'settings.shortcuts' = 70,\n 'sources.add-folder-to-workspace' = 71,\n 'sources.add-to-watch' = 72,\n 'sources.close-all' = 73,\n 'sources.close-editor-tab' = 74,\n 'sources.create-snippet' = 75,\n 'sources.go-to-line' = 76,\n 'sources.go-to-member' = 77,\n 'sources.jump-to-next-location' = 78,\n 'sources.jump-to-previous-location' = 79,\n 'sources.rename' = 80,\n 'sources.save' = 81,\n 'sources.save-all' = 82,\n 'sources.switch-file' = 83,\n 'timeline.jump-to-next-frame' = 84,\n 'timeline.jump-to-previous-frame' = 85,\n 'timeline.load-from-file' = 86,\n 'timeline.next-recording' = 87,\n 'timeline.previous-recording' = 88,\n 'timeline.record-reload' = 89,\n 'timeline.save-to-file' = 90,\n 'timeline.show-history' = 91,\n 'timeline.toggle-recording' = 92,\n 'sources.increment-css' = 93,\n 'sources.increment-css-by-ten' = 94,\n 'sources.decrement-css' = 95,\n 'sources.decrement-css-by-ten' = 96,\n 'layers.reset-view' = 97,\n 'layers.pan-mode' = 98,\n 'layers.rotate-mode' = 99,\n 'layers.zoom-in' = 100,\n 'layers.zoom-out' = 101,\n 'layers.up' = 102,\n 'layers.down' = 103,\n 'layers.left' = 104,\n 'layers.right' = 105,\n 'help.report-translation-issue' = 106,\n 'rendering.toggle-prefers-color-scheme' = 107,\n 'chrome-recorder.start-recording' = 108,\n 'chrome-recorder.replay-recording' = 109,\n 'chrome-recorder.toggle-code-view' = 110,\n 'chrome-recorder.copy-recording-or-step' = 111,\n 'changes.revert' = 112,\n 'changes.copy' = 113,\n 'elements.new-style-rule' = 114,\n 'elements.refresh-event-listeners' = 115,\n 'coverage.clear' = 116,\n 'coverage.export' = 117,\n MaxValue = 118,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum IssueOpener {\n ConsoleInfoBar = 0,\n LearnMoreLinkCOEP = 1,\n StatusBarIssuesCounter = 2,\n HamburgerMenu = 3,\n Adorner = 4,\n CommandMenu = 5,\n MaxValue = 6,\n}\n\n/**\n * This list should contain the currently active Devtools Experiments,\n * gaps are expected.\n */\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum DevtoolsExperiments {\n 'applyCustomStylesheet' = 0,\n 'captureNodeCreationStacks' = 1,\n 'liveHeapProfile' = 11,\n 'protocolMonitor' = 13,\n 'samplingHeapProfilerTimeline' = 17,\n 'showOptionToExposeInternalsInHeapSnapshot' = 18,\n 'timelineInvalidationTracking' = 26,\n 'timelineShowAllEvents' = 27,\n 'timelineV8RuntimeCallStats' = 28,\n 'APCA' = 39,\n 'fontEditor' = 41,\n 'fullAccessibilityTree' = 42,\n 'ignoreListJSFramesOnTimeline' = 43,\n 'contrastIssues' = 44,\n 'experimentalCookieFeatures' = 45,\n 'stylesPaneCSSChanges' = 55,\n 'evaluateExpressionsWithSourceMaps' = 58,\n 'instrumentationBreakpoints' = 61,\n 'authoredDeployedGrouping' = 63,\n 'importantDOMProperties' = 64,\n 'justMyCode' = 65,\n 'timelineAsConsoleProfileResultPanel' = 67,\n 'preloadingStatusPanel' = 68,\n 'outermostTargetSelector' = 71,\n 'jsProfilerTemporarilyEnable' = 72,\n 'highlightErrorsElementsPanel' = 73,\n 'setAllBreakpointsEagerly' = 74,\n 'selfXssWarning' = 75,\n 'useSourceMapScopes' = 76,\n 'storageBucketsTree' = 77,\n 'networkPanelFilterBarRedesign' = 79,\n 'trackContextMenu' = 81,\n 'autofillView' = 82,\n 'sourcesFrameIndentationMarkersTemporarilyDisable' = 83,\n 'heapSnapshotTreatBackingStoreAsContainingObject' = 84,\n 'cssTypeComponentLengthDeprecate' = 85,\n\n // Increment this when new experiments are added.\n 'MaxValue' = 86,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum BreakpointWithConditionAdded {\n Logpoint = 0,\n ConditionalBreakpoint = 1,\n MaxValue = 2,\n}\n\nexport const enum BreakpointEditDialogRevealedFrom {\n BreakpointSidebarContextMenu = 0,\n BreakpointSidebarEditButton = 1,\n BreakpointMarkerContextMenu = 2,\n LineGutterContextMenu = 3,\n KeyboardShortcut = 4,\n Linkifier = 5,\n MouseClick = 6,\n MaxValue = 7,\n}\n\nexport const enum ColorConvertedFrom {\n ColorSwatch = 0,\n ColorPicker = 1,\n MaxValue = 2,\n}\n\nexport const enum ColorPickerOpenedFrom {\n SourcesPanel = 0,\n StylesPane = 1,\n MaxValue = 2,\n}\n\nexport const enum CSSPropertyDocumentation {\n Shown = 0,\n ToggledOn = 1,\n ToggledOff = 2,\n MaxValue = 3,\n}\n\nexport const enum BreakpointsRestoredFromStorageCount {\n LessThan100 = 0,\n LessThan300 = 1,\n LessThan1000 = 2,\n LessThan3000 = 3,\n LessThan10000 = 4,\n LessThan30000 = 5,\n LessThan100000 = 6,\n LessThan300000 = 7,\n LessThan1000000 = 8,\n Above1000000 = 9,\n MaxValue = 10,\n}\n\n// Update DevToolsIssuesPanelIssueExpanded from tools/metrics/histograms/enums.xml if new enum is added.\nexport enum IssueExpanded {\n CrossOriginEmbedderPolicy = 0,\n MixedContent = 1,\n SameSiteCookie = 2,\n HeavyAd = 3,\n ContentSecurityPolicy = 4,\n Other = 5,\n Generic = 6,\n ThirdPartyPhaseoutCookie = 7,\n GenericCookie = 8,\n MaxValue = 9,\n}\n\nexport enum IssueResourceOpened {\n CrossOriginEmbedderPolicyRequest = 0,\n CrossOriginEmbedderPolicyElement = 1,\n MixedContentRequest = 2,\n SameSiteCookieCookie = 3,\n SameSiteCookieRequest = 4,\n HeavyAdElement = 5,\n ContentSecurityPolicyDirective = 6,\n ContentSecurityPolicyElement = 7,\n MaxValue = 13,\n}\n\n/**\n * This list should contain the currently active issue types,\n * gaps are expected.\n */\nexport enum IssueCreated {\n MixedContentIssue = 0,\n 'ContentSecurityPolicyIssue::kInlineViolation' = 1,\n 'ContentSecurityPolicyIssue::kEvalViolation' = 2,\n 'ContentSecurityPolicyIssue::kURLViolation' = 3,\n 'ContentSecurityPolicyIssue::kTrustedTypesSinkViolation' = 4,\n 'ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation' = 5,\n 'HeavyAdIssue::NetworkTotalLimit' = 6,\n 'HeavyAdIssue::CpuTotalLimit' = 7,\n 'HeavyAdIssue::CpuPeakLimit' = 8,\n 'CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader' = 9,\n 'CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage' = 10,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin' = 11,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep' = 12,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameSite' = 13,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie' = 14,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie' = 15,\n 'CookieIssue::WarnSameSiteNoneInsecure::ReadCookie' = 16,\n 'CookieIssue::WarnSameSiteNoneInsecure::SetCookie' = 17,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure' = 18,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure' = 19,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Secure' = 20,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure' = 21,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Secure' = 22,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Insecure' = 23,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Secure' = 24,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Insecure' = 25,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure' = 26,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure' = 27,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Secure' = 28,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure' = 29,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie' = 30,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie' = 31,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie' = 32,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie' = 33,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie' = 34,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie' = 35,\n 'SharedArrayBufferIssue::TransferIssue' = 36,\n 'SharedArrayBufferIssue::CreationIssue' = 37,\n LowTextContrastIssue = 41,\n 'CorsIssue::InsecurePrivateNetwork' = 42,\n 'CorsIssue::InvalidHeaders' = 44,\n 'CorsIssue::WildcardOriginWithCredentials' = 45,\n 'CorsIssue::PreflightResponseInvalid' = 46,\n 'CorsIssue::OriginMismatch' = 47,\n 'CorsIssue::AllowCredentialsRequired' = 48,\n 'CorsIssue::MethodDisallowedByPreflightResponse' = 49,\n 'CorsIssue::HeaderDisallowedByPreflightResponse' = 50,\n 'CorsIssue::RedirectContainsCredentials' = 51,\n 'CorsIssue::DisallowedByMode' = 52,\n 'CorsIssue::CorsDisabledScheme' = 53,\n 'CorsIssue::PreflightMissingAllowExternal' = 54,\n 'CorsIssue::PreflightInvalidAllowExternal' = 55,\n 'CorsIssue::NoCorsRedirectModeNotFollow' = 57,\n 'QuirksModeIssue::QuirksMode' = 58,\n 'QuirksModeIssue::LimitedQuirksMode' = 59,\n DeprecationIssue = 60,\n 'ClientHintIssue::MetaTagAllowListInvalidOrigin' = 61,\n 'ClientHintIssue::MetaTagModifiedHTML' = 62,\n 'CorsIssue::PreflightAllowPrivateNetworkError' = 63,\n 'GenericIssue::CrossOriginPortalPostMessageError' = 64,\n 'GenericIssue::FormLabelForNameError' = 65,\n 'GenericIssue::FormDuplicateIdForInputError' = 66,\n 'GenericIssue::FormInputWithNoLabelError' = 67,\n 'GenericIssue::FormAutocompleteAttributeEmptyError' = 68,\n 'GenericIssue::FormEmptyIdAndNameAttributesForInputError' = 69,\n 'GenericIssue::FormAriaLabelledByToNonExistingId' = 70,\n 'GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError' = 71,\n 'GenericIssue::FormLabelHasNeitherForNorNestedInput' = 72,\n 'GenericIssue::FormLabelForMatchesNonExistingIdError' = 73,\n 'GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError' = 74,\n 'GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError' = 75,\n 'StylesheetLoadingIssue::LateImportRule' = 76,\n 'StylesheetLoadingIssue::RequestFailed' = 77,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessId' = 78,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessName' = 79,\n 'CorsIssue::PrivateNetworkAccessPermissionUnavailable' = 80,\n 'CorsIssue::PrivateNetworkAccessPermissionDenied' = 81,\n 'CookieIssue::WarnThirdPartyPhaseout::ReadCookie' = 82,\n 'CookieIssue::WarnThirdPartyPhaseout::SetCookie' = 83,\n 'CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie' = 84,\n 'CookieIssue::ExcludeThirdPartyPhaseout::SetCookie' = 85,\n MaxValue = 86,\n}\n\nexport const enum DeveloperResourceLoaded {\n LoadThroughPageViaTarget = 0,\n LoadThroughPageViaFrame = 1,\n LoadThroughPageFailure = 2,\n LoadThroughPageFallback = 3,\n FallbackAfterFailure = 4,\n FallbackPerOverride = 5,\n FallbackPerProtocol = 6,\n FallbackFailure = 7,\n MaxValue = 8,\n}\n\nexport const enum DeveloperResourceScheme {\n SchemeOther = 0,\n SchemeUnknown = 1,\n SchemeHttp = 2,\n SchemeHttps = 3,\n SchemeHttpLocalhost = 4,\n SchemeHttpsLocalhost = 5,\n SchemeData = 6,\n SchemeFile = 7,\n SchemeBlob = 8,\n MaxValue = 9,\n}\n\nexport enum ResourceType {\n /* eslint-disable @typescript-eslint/naming-convention */\n all = 0,\n /* eslint-enable @typescript-eslint/naming-convention */\n Documents = 1,\n Scripts = 2,\n 'Fetch and XHR' = 3,\n Stylesheets = 4,\n Fonts = 5,\n Images = 6,\n Media = 7,\n Manifest = 8,\n WebSockets = 9,\n WebAssembly = 10,\n Other = 11,\n MaxValue = 12,\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum NetworkPanelMoreFilters {\n 'Hide data URLs' = 0,\n 'Hide extension URLs' = 1,\n 'Blocked response cookies' = 2,\n 'Blocked requests' = 3,\n '3rd-party requests' = 4,\n MaxValue = 5,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum VMInlineScriptType {\n MODULE_SCRIPT = 0,\n CLASSIC_SCRIPT = 1,\n MaxValue = 2,\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum Language {\n 'af' = 1,\n 'am' = 2,\n 'ar' = 3,\n 'as' = 4,\n 'az' = 5,\n 'be' = 6,\n 'bg' = 7,\n 'bn' = 8,\n 'bs' = 9,\n 'ca' = 10,\n 'cs' = 11,\n 'cy' = 12,\n 'da' = 13,\n 'de' = 14,\n 'el' = 15,\n 'en-GB' = 16,\n 'en-US' = 17,\n 'es-419' = 18,\n 'es' = 19,\n 'et' = 20,\n 'eu' = 21,\n 'fa' = 22,\n 'fi' = 23,\n 'fil' = 24,\n 'fr-CA' = 25,\n 'fr' = 26,\n 'gl' = 27,\n 'gu' = 28,\n 'he' = 29,\n 'hi' = 30,\n 'hr' = 31,\n 'hu' = 32,\n 'hy' = 33,\n 'id' = 34,\n 'is' = 35,\n 'it' = 36,\n 'ja' = 37,\n 'ka' = 38,\n 'kk' = 39,\n 'km' = 40,\n 'kn' = 41,\n 'ko' = 42,\n 'ky' = 43,\n 'lo' = 44,\n 'lt' = 45,\n 'lv' = 46,\n 'mk' = 47,\n 'ml' = 48,\n 'mn' = 49,\n 'mr' = 50,\n 'ms' = 51,\n 'my' = 52,\n 'ne' = 53,\n 'nl' = 54,\n 'no' = 55,\n 'or' = 56,\n 'pa' = 57,\n 'pl' = 58,\n 'pt-PT' = 59,\n 'pt' = 60,\n 'ro' = 61,\n 'ru' = 62,\n 'si' = 63,\n 'sk' = 64,\n 'sl' = 65,\n 'sq' = 66,\n 'sr-Latn' = 67,\n 'sr' = 68,\n 'sv' = 69,\n 'sw' = 70,\n 'ta' = 71,\n 'te' = 72,\n 'th' = 73,\n 'tr' = 74,\n 'uk' = 75,\n 'ur' = 76,\n 'uz' = 77,\n 'vi' = 78,\n 'zh' = 79,\n 'zh-HK' = 80,\n 'zh-TW' = 81,\n 'zu' = 82,\n MaxValue = 83,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum SyncSetting {\n ChromeSyncDisabled = 1,\n ChromeSyncSettingsDisabled = 2,\n DevToolsSyncSettingDisabled = 3,\n DevToolsSyncSettingEnabled = 4,\n MaxValue = 5,\n}\n\nexport const enum RecordingToggled {\n RecordingStarted = 1,\n RecordingFinished = 2,\n MaxValue = 3,\n}\n\nexport const enum RecordingAssertion {\n AssertionAdded = 1,\n PropertyAssertionEdited = 2,\n AttributeAssertionEdited = 3,\n MaxValue = 4,\n}\n\nexport const enum RecordingReplayFinished {\n Success = 1,\n TimeoutErrorSelectors = 2,\n TimeoutErrorTarget = 3,\n OtherError = 4,\n MaxValue = 5,\n}\n\nexport const enum RecordingReplaySpeed {\n Normal = 1,\n Slow = 2,\n VerySlow = 3,\n ExtremelySlow = 4,\n MaxValue = 5,\n}\n\nexport const enum RecordingReplayStarted {\n ReplayOnly = 1,\n ReplayWithPerformanceTracing = 2,\n ReplayViaExtension = 3,\n MaxValue = 4,\n}\n\nexport const enum RecordingEdited {\n SelectorPickerUsed = 1,\n StepAdded = 2,\n StepRemoved = 3,\n SelectorAdded = 4,\n SelectorRemoved = 5,\n SelectorPartAdded = 6,\n SelectorPartEdited = 7,\n SelectorPartRemoved = 8,\n TypeChanged = 9,\n OtherEditing = 10,\n MaxValue = 11,\n}\n\nexport const enum RecordingExported {\n ToPuppeteer = 1,\n ToJSON = 2,\n ToPuppeteerReplay = 3,\n ToExtension = 4,\n ToLighthouse = 5,\n MaxValue = 6,\n}\n\nexport const enum RecordingCodeToggled {\n CodeShown = 1,\n CodeHidden = 2,\n MaxValue = 3,\n}\n\nexport const enum RecordingCopiedToClipboard {\n CopiedRecordingWithPuppeteer = 1,\n CopiedRecordingWithJSON = 2,\n CopiedRecordingWithReplay = 3,\n CopiedRecordingWithExtension = 4,\n CopiedStepWithPuppeteer = 5,\n CopiedStepWithJSON = 6,\n CopiedStepWithReplay = 7,\n CopiedStepWithExtension = 8,\n MaxValue = 9,\n}\n\nexport const enum StyleTextCopied {\n DeclarationViaChangedLine = 1,\n AllChangesViaStylesPane = 2,\n DeclarationViaContextMenu = 3,\n PropertyViaContextMenu = 4,\n ValueViaContextMenu = 5,\n DeclarationAsJSViaContextMenu = 6,\n RuleViaContextMenu = 7,\n AllDeclarationsViaContextMenu = 8,\n AllDeclarationsAsJSViaContextMenu = 9,\n SelectorViaContextMenu = 10,\n MaxValue = 11,\n}\n\nexport enum ManifestSectionCodes {\n OtherSection = 0,\n 'Identity' = 1,\n 'Presentation' = 2,\n 'Protocol Handlers' = 3,\n 'Icons' = 4,\n 'Window Controls Overlay' = 5,\n MaxValue = 6,\n}\n\n/* eslint-enable @typescript-eslint/naming-convention */\n\n// The names here match the CSSRuleValidator names in CSSRuleValidator.ts.\nexport const enum CSSHintType {\n Other = 0,\n AlignContent = 1,\n FlexItem = 2,\n FlexContainer = 3,\n GridContainer = 4,\n GridItem = 5,\n FlexGrid = 6,\n MulticolFlexGrid = 7,\n Padding = 8,\n Position = 9,\n ZIndex = 10,\n Sizing = 11,\n FlexOrGridItem = 12,\n FontVariationSettings = 13,\n MaxValue = 14,\n}\n\nexport const enum LighthouseModeRun {\n Navigation = 0,\n Timespan = 1,\n Snapshot = 2,\n LegacyNavigation = 3,\n MaxValue = 4,\n}\n\nexport const enum LighthouseCategoryUsed {\n Performance = 0,\n Accessibility = 1,\n BestPractices = 2,\n SEO = 3,\n PWA = 4,\n PubAds = 5,\n MaxValue = 6,\n}\n\nexport const enum SwatchType {\n VarLink = 0,\n AnimationNameLink = 1,\n Color = 2,\n AnimationTiming = 3,\n Shadow = 4,\n Grid = 5,\n Flex = 6,\n Angle = 7,\n Length = 8,\n PositionFallbackLink = 9,\n MaxValue = 10,\n}\n\nexport const enum BadgeType {\n GRID = 0,\n SUBGRID = 1,\n FLEX = 2,\n AD = 3,\n SCROLL_SNAP = 4,\n CONTAINER = 5,\n SLOT = 6,\n TOP_LAYER = 7,\n REVEAL = 8,\n MaxValue = 9,\n}\n\nexport const enum AnimationsPlaybackRate {\n Percent100 = 0,\n Percent25 = 1,\n Percent10 = 2,\n Other = 3,\n MaxValue = 4,\n}\n\nexport const enum AnimationPointDragType {\n // Animation is dragged as a whole in the Animations panel.\n AnimationDrag = 0,\n // A keyframe point inside animation timeline is dragged.\n KeyframeMove = 1,\n // Start point of the animation inside animation timeline is dragged.\n StartEndpointMove = 2,\n // Finish point of the animation inside animation timeline is dragged.\n FinishEndpointMove = 3,\n Other = 4,\n MaxValue = 5,\n}\n"]} \ No newline at end of file +{"version":3,"file":"UserMetrics.js","sourceRoot":"","sources":["../../../../../../front_end/core/host/UserMetrics.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (C) 2011 Google Inc. All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following disclaimer\n * in the documentation and/or other materials provided with the\n * distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nimport {InspectorFrontendHostInstance} from './InspectorFrontendHost.js';\nimport {EnumeratedHistogram} from './InspectorFrontendHostAPI.js';\n\nexport class UserMetrics {\n #panelChangedSinceLaunch: boolean;\n #firedLaunchHistogram: boolean;\n #launchPanelName: string;\n constructor() {\n this.#panelChangedSinceLaunch = false;\n this.#firedLaunchHistogram = false;\n this.#launchPanelName = '';\n }\n\n breakpointWithConditionAdded(breakpointWithConditionAdded: BreakpointWithConditionAdded): void {\n if (breakpointWithConditionAdded >= BreakpointWithConditionAdded.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BreakpointWithConditionAdded, breakpointWithConditionAdded,\n BreakpointWithConditionAdded.MaxValue);\n }\n\n breakpointEditDialogRevealedFrom(breakpointEditDialogRevealedFrom: BreakpointEditDialogRevealedFrom): void {\n if (breakpointEditDialogRevealedFrom >= BreakpointEditDialogRevealedFrom.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BreakpointEditDialogRevealedFrom, breakpointEditDialogRevealedFrom,\n BreakpointEditDialogRevealedFrom.MaxValue);\n }\n\n panelShown(panelName: string, isLaunching?: boolean): void {\n const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelShown, code, PanelCodes.MaxValue);\n InspectorFrontendHostInstance.recordUserMetricsAction('DevTools_PanelShown_' + panelName);\n // Store that the user has changed the panel so we know launch histograms should not be fired.\n if (!isLaunching) {\n this.#panelChangedSinceLaunch = true;\n }\n }\n\n /**\n * Fired when a panel is closed (regardless if it exists in the main panel or the drawer)\n */\n panelClosed(panelName: string): void {\n const code = PanelCodes[panelName as keyof typeof PanelCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.PanelClosed, code, PanelCodes.MaxValue);\n // Store that the user has changed the panel so we know launch histograms should not be fired.\n this.#panelChangedSinceLaunch = true;\n }\n\n panelShownInLocation(panelName: string, location: 'main'|'drawer'): void {\n const panelWithLocationName = `${panelName}-${location}`;\n const panelWithLocation = PanelWithLocation[panelWithLocationName as keyof typeof PanelWithLocation] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.PanelShownInLocation,\n panelWithLocation,\n PanelWithLocation.MaxValue,\n );\n }\n\n elementsSidebarTabShown(sidebarPaneName: string): void {\n const code = ElementsSidebarTabCodes[sidebarPaneName as keyof typeof ElementsSidebarTabCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ElementsSidebarTabShown, code, ElementsSidebarTabCodes.MaxValue);\n }\n\n sourcesSidebarTabShown(sidebarPaneName: string): void {\n const code = SourcesSidebarTabCodes[sidebarPaneName as keyof typeof SourcesSidebarTabCodes] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesSidebarTabShown, code, SourcesSidebarTabCodes.MaxValue);\n }\n\n settingsPanelShown(settingsViewId: string): void {\n this.panelShown('settings-' + settingsViewId);\n }\n\n sourcesPanelFileDebugged(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileDebugged, code, MediaTypes.MaxValue);\n }\n\n sourcesPanelFileOpened(mediaType?: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SourcesPanelFileOpened, code, MediaTypes.MaxValue);\n }\n\n networkPanelResponsePreviewOpened(mediaType: string): void {\n const code = (mediaType && MediaTypes[mediaType as keyof typeof MediaTypes]) || MediaTypes.Unknown;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelResponsePreviewOpened, code, MediaTypes.MaxValue);\n }\n\n actionTaken(action: Action): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(EnumeratedHistogram.ActionTaken, action, Action.MaxValue);\n }\n\n panelLoaded(panelName: string, histogramName: string): void {\n if (this.#firedLaunchHistogram || panelName !== this.#launchPanelName) {\n return;\n }\n\n this.#firedLaunchHistogram = true;\n // Use rAF and window.setTimeout to ensure the marker is fired after layout and rendering.\n // This will give the most accurate representation of the tool being ready for a user.\n requestAnimationFrame(() => {\n window.setTimeout(() => {\n // Mark the load time so that we can pinpoint it more easily in a trace.\n performance.mark(histogramName);\n // If the user has switched panel before we finished loading, ignore the histogram,\n // since the launch timings will have been affected and are no longer valid.\n if (this.#panelChangedSinceLaunch) {\n return;\n }\n // This fires the event for the appropriate launch histogram.\n // The duration is measured as the time elapsed since the time origin of the document.\n InspectorFrontendHostInstance.recordPerformanceHistogram(histogramName, performance.now());\n }, 0);\n });\n }\n\n setLaunchPanel(panelName: string|null): void {\n this.#launchPanelName = (panelName as string);\n }\n\n performanceTraceLoad(measure: PerformanceMeasure): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.TraceLoad', measure.duration);\n }\n\n keybindSetSettingChanged(keybindSet: string): void {\n const value = KeybindSetSettings[keybindSet as keyof typeof KeybindSetSettings] || 0;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeybindSetSettingChanged, value, KeybindSetSettings.MaxValue);\n }\n\n keyboardShortcutFired(actionId: string): void {\n const action =\n KeyboardShortcutAction[actionId as keyof typeof KeyboardShortcutAction] || KeyboardShortcutAction.OtherShortcut;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.KeyboardShortcutFired, action, KeyboardShortcutAction.MaxValue);\n }\n\n issuesPanelOpenedFrom(issueOpener: IssueOpener): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelOpenedFrom, issueOpener, IssueOpener.MaxValue);\n }\n\n issuesPanelIssueExpanded(issueExpandedCategory: string|undefined): void {\n if (issueExpandedCategory === undefined) {\n return;\n }\n\n const issueExpanded = IssueExpanded[issueExpandedCategory as keyof typeof IssueExpanded];\n\n if (issueExpanded === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelIssueExpanded, issueExpanded, IssueExpanded.MaxValue);\n }\n\n issuesPanelResourceOpened(issueCategory: string, type: string): void {\n const key = issueCategory + type;\n const value = IssueResourceOpened[key as keyof typeof IssueResourceOpened];\n\n if (value === undefined) {\n return;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssuesPanelResourceOpened, value, IssueResourceOpened.MaxValue);\n }\n\n issueCreated(code: string): void {\n const issueCreated = IssueCreated[code as keyof typeof IssueCreated];\n if (issueCreated === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.IssueCreated, issueCreated, IssueCreated.MaxValue);\n }\n\n experimentEnabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentEnabledAtLaunch, experiment, DevtoolsExperiments.MaxValue);\n }\n\n experimentDisabledAtLaunch(experimentId: string): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ExperimentDisabledAtLaunch, experiment, DevtoolsExperiments.MaxValue);\n }\n\n experimentChanged(experimentId: string, isEnabled: boolean): void {\n const experiment = DevtoolsExperiments[experimentId as keyof typeof DevtoolsExperiments];\n if (experiment === undefined) {\n return;\n }\n const actionName = isEnabled ? EnumeratedHistogram.ExperimentEnabled : EnumeratedHistogram.ExperimentDisabled;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(actionName, experiment, DevtoolsExperiments.MaxValue);\n }\n\n developerResourceLoaded(developerResourceLoaded: DeveloperResourceLoaded): void {\n if (developerResourceLoaded >= DeveloperResourceLoaded.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceLoaded, developerResourceLoaded, DeveloperResourceLoaded.MaxValue);\n }\n\n developerResourceScheme(developerResourceScheme: DeveloperResourceScheme): void {\n if (developerResourceScheme >= DeveloperResourceScheme.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.DeveloperResourceScheme, developerResourceScheme, DeveloperResourceScheme.MaxValue);\n }\n\n inlineScriptParsed(inlineScriptType: VMInlineScriptType): void {\n if (inlineScriptType >= VMInlineScriptType.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.InlineScriptParsed, inlineScriptType, VMInlineScriptType.MaxValue);\n }\n\n vmInlineScriptContentShown(inlineScriptType: VMInlineScriptType): void {\n if (inlineScriptType >= VMInlineScriptType.MaxValue) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.VMInlineScriptTypeShown, inlineScriptType, VMInlineScriptType.MaxValue);\n }\n\n language(language: Intl.UnicodeBCP47LocaleIdentifier): void {\n const languageCode = Language[language as keyof typeof Language];\n if (languageCode === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.Language, languageCode, Language.MaxValue);\n }\n\n syncSetting(devtoolsSyncSettingEnabled: boolean): void {\n InspectorFrontendHostInstance.getSyncInformation(syncInfo => {\n let settingValue = SyncSetting.ChromeSyncDisabled;\n if (syncInfo.isSyncActive && !syncInfo.arePreferencesSynced) {\n settingValue = SyncSetting.ChromeSyncSettingsDisabled;\n } else if (syncInfo.isSyncActive && syncInfo.arePreferencesSynced) {\n settingValue = devtoolsSyncSettingEnabled ? SyncSetting.DevToolsSyncSettingEnabled :\n SyncSetting.DevToolsSyncSettingDisabled;\n }\n\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SyncSetting, settingValue, SyncSetting.MaxValue);\n });\n }\n\n recordingAssertion(value: RecordingAssertion): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingAssertion, value, RecordingAssertion.MaxValue);\n }\n\n recordingToggled(value: RecordingToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingToggled, value, RecordingToggled.MaxValue);\n }\n\n recordingReplayFinished(value: RecordingReplayFinished): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayFinished, value, RecordingReplayFinished.MaxValue);\n }\n\n recordingReplaySpeed(value: RecordingReplaySpeed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplaySpeed, value, RecordingReplaySpeed.MaxValue);\n }\n\n recordingReplayStarted(value: RecordingReplayStarted): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingReplayStarted, value, RecordingReplayStarted.MaxValue);\n }\n\n recordingEdited(value: RecordingEdited): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingEdited, value, RecordingEdited.MaxValue);\n }\n\n recordingExported(value: RecordingExported): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingExported, value, RecordingExported.MaxValue);\n }\n\n recordingCodeToggled(value: RecordingCodeToggled): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCodeToggled, value, RecordingCodeToggled.MaxValue);\n }\n\n recordingCopiedToClipboard(value: RecordingCopiedToClipboard): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.RecordingCopiedToClipboard, value, RecordingCopiedToClipboard.MaxValue);\n }\n\n styleTextCopied(value: StyleTextCopied): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.StyleTextCopied, value, StyleTextCopied.MaxValue);\n }\n\n manifestSectionSelected(sectionTitle: string): void {\n const code =\n ManifestSectionCodes[sectionTitle as keyof typeof ManifestSectionCodes] || ManifestSectionCodes.OtherSection;\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ManifestSectionSelected, code, ManifestSectionCodes.MaxValue);\n }\n\n cssHintShown(type: CSSHintType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSHintShown, type, CSSHintType.MaxValue);\n }\n\n lighthouseModeRun(type: LighthouseModeRun): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseModeRun, type, LighthouseModeRun.MaxValue);\n }\n\n lighthouseCategoryUsed(type: LighthouseCategoryUsed): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LighthouseCategoryUsed, type, LighthouseCategoryUsed.MaxValue);\n }\n\n colorConvertedFrom(type: ColorConvertedFrom): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ColorConvertedFrom, type, ColorConvertedFrom.MaxValue);\n }\n\n colorPickerOpenedFrom(type: ColorPickerOpenedFrom): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ColorPickerOpenedFrom, type, ColorPickerOpenedFrom.MaxValue);\n }\n\n cssPropertyDocumentation(type: CSSPropertyDocumentation): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.CSSPropertyDocumentation, type, CSSPropertyDocumentation.MaxValue);\n }\n\n swatchActivated(swatch: SwatchType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.SwatchActivated, swatch, SwatchType.MaxValue);\n }\n\n badgeActivated(badge: BadgeType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BadgeActivated, badge, BadgeType.MaxValue);\n }\n\n breakpointsRestoredFromStorage(count: number): void {\n const countBucket = this.#breakpointCountToBucket(count);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.BreakpointsRestoredFromStorageCount, countBucket,\n BreakpointsRestoredFromStorageCount.MaxValue);\n }\n\n animationPlaybackRateChanged(playbackRate: AnimationsPlaybackRate): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPlaybackRateChanged, playbackRate, AnimationsPlaybackRate.MaxValue);\n }\n\n animationPointDragged(dragType: AnimationPointDragType): void {\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.AnimationPointDragged, dragType, AnimationPointDragType.MaxValue);\n }\n\n #breakpointCountToBucket(count: number): BreakpointsRestoredFromStorageCount {\n if (count < 100) {\n return BreakpointsRestoredFromStorageCount.LessThan100;\n }\n if (count < 300) {\n return BreakpointsRestoredFromStorageCount.LessThan300;\n }\n if (count < 1000) {\n return BreakpointsRestoredFromStorageCount.LessThan1000;\n }\n if (count < 3000) {\n return BreakpointsRestoredFromStorageCount.LessThan3000;\n }\n if (count < 10000) {\n return BreakpointsRestoredFromStorageCount.LessThan10000;\n }\n if (count < 30000) {\n return BreakpointsRestoredFromStorageCount.LessThan30000;\n }\n if (count < 100000) {\n return BreakpointsRestoredFromStorageCount.LessThan100000;\n }\n if (count < 300000) {\n return BreakpointsRestoredFromStorageCount.LessThan300000;\n }\n if (count < 1000000) {\n return BreakpointsRestoredFromStorageCount.LessThan1000000;\n }\n return BreakpointsRestoredFromStorageCount.Above1000000;\n }\n\n workspacesPopulated(wallClockTimeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.Workspaces.PopulateWallClocktime', wallClockTimeInMilliseconds);\n }\n\n visualLoggingProcessingDone(timeInMilliseconds: number): void {\n InspectorFrontendHostInstance.recordPerformanceHistogram(\n 'DevTools.VisualLogging.ProcessingTime', timeInMilliseconds);\n }\n\n legacyResourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MaxValue - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MaxValue);\n }\n\n legacyResourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.LegacyResourceTypeFilterItemSelected, resourceType, ResourceType.MaxValue);\n }\n\n resourceTypeFilterNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, ResourceType.MaxValue - 1), 1);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterNumberOfSelectedChanged, boundItemCount, ResourceType.MaxValue);\n }\n\n resourceTypeFilterItemSelected(resourceTypeName: string): void {\n const resourceType = ResourceType[resourceTypeName as keyof typeof ResourceType];\n if (resourceType === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.ResourceTypeFilterItemSelected, resourceType, ResourceType.MaxValue);\n }\n\n networkPanelMoreFiltersNumberOfSelectedChanged(itemCount: number): void {\n const boundItemCount = Math.max(Math.min(itemCount, NetworkPanelMoreFilters.MaxValue), 0);\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersNumberOfSelectedChanged, boundItemCount,\n NetworkPanelMoreFilters.MaxValue);\n }\n\n networkPanelMoreFiltersItemSelected(filterName: string): void {\n const filter = NetworkPanelMoreFilters[filterName as keyof typeof NetworkPanelMoreFilters];\n if (filter === undefined) {\n return;\n }\n InspectorFrontendHostInstance.recordEnumeratedHistogram(\n EnumeratedHistogram.NetworkPanelMoreFiltersItemSelected, filter, NetworkPanelMoreFilters.MaxValue);\n }\n}\n\n/**\n * The numeric enum values are not necessarily continuous! It is possible that\n * values have been removed, which results in gaps in the sequence of values.\n * When adding a new value:\n * 1. Add an entry to the bottom of the enum before 'MaxValue'.\n * 2. Set the value of the new entry to the current value of 'MaxValue'.\n * 2. Increment the value of 'MaxValue' by 1.\n * When removing a value which is no longer needed:\n * 1. Delete the line with the unneeded value\n * 2. Do not update any 'MaxValue' or any other value.\n */\n\n// Codes below are used to collect UMA histograms in the Chromium port.\n// Do not change the values below, additional actions are needed on the Chromium side\n// in order to add more codes.\nexport enum Action {\n WindowDocked = 1,\n WindowUndocked = 2,\n ScriptsBreakpointSet = 3,\n TimelineStarted = 4,\n ProfilesCPUProfileTaken = 5,\n ProfilesHeapProfileTaken = 6,\n ConsoleEvaluated = 8,\n FileSavedInWorkspace = 9,\n DeviceModeEnabled = 10,\n AnimationsPlaybackRateChanged = 11,\n RevisionApplied = 12,\n FileSystemDirectoryContentReceived = 13,\n StyleRuleEdited = 14,\n CommandEvaluatedInConsolePanel = 15,\n DOMPropertiesExpanded = 16,\n ResizedViewInResponsiveMode = 17,\n TimelinePageReloadStarted = 18,\n ConnectToNodeJSFromFrontend = 19,\n ConnectToNodeJSDirectly = 20,\n CpuThrottlingEnabled = 21,\n CpuProfileNodeFocused = 22,\n CpuProfileNodeExcluded = 23,\n SelectFileFromFilePicker = 24,\n SelectCommandFromCommandMenu = 25,\n ChangeInspectedNodeInElementsPanel = 26,\n StyleRuleCopied = 27,\n CoverageStarted = 28,\n LighthouseStarted = 29,\n LighthouseFinished = 30,\n ShowedThirdPartyBadges = 31,\n LighthouseViewTrace = 32,\n FilmStripStartedRecording = 33,\n CoverageReportFiltered = 34,\n CoverageStartedPerBlock = 35,\n 'SettingsOpenedFromGear-deprecated' = 36,\n 'SettingsOpenedFromMenu-deprecated' = 37,\n 'SettingsOpenedFromCommandMenu-deprecated' = 38,\n TabMovedToDrawer = 39,\n TabMovedToMainPanel = 40,\n CaptureCssOverviewClicked = 41,\n VirtualAuthenticatorEnvironmentEnabled = 42,\n SourceOrderViewActivated = 43,\n UserShortcutAdded = 44,\n ShortcutRemoved = 45,\n ShortcutModified = 46,\n CustomPropertyLinkClicked = 47,\n CustomPropertyEdited = 48,\n ServiceWorkerNetworkRequestClicked = 49,\n ServiceWorkerNetworkRequestClosedQuickly = 50,\n NetworkPanelServiceWorkerRespondWith = 51,\n NetworkPanelCopyValue = 52,\n ConsoleSidebarOpened = 53,\n PerfPanelTraceImported = 54,\n PerfPanelTraceExported = 55,\n StackFrameRestarted = 56,\n CaptureTestProtocolClicked = 57,\n BreakpointRemovedFromRemoveButton = 58,\n BreakpointGroupExpandedStateChanged = 59,\n HeaderOverrideFileCreated = 60,\n HeaderOverrideEnableEditingClicked = 61,\n HeaderOverrideHeaderAdded = 62,\n HeaderOverrideHeaderEdited = 63,\n HeaderOverrideHeaderRemoved = 64,\n HeaderOverrideHeadersFileEdited = 65,\n PersistenceNetworkOverridesEnabled = 66,\n PersistenceNetworkOverridesDisabled = 67,\n BreakpointRemovedFromContextMenu = 68,\n BreakpointsInFileRemovedFromRemoveButton = 69,\n BreakpointsInFileRemovedFromContextMenu = 70,\n BreakpointsInFileCheckboxToggled = 71,\n BreakpointsInFileEnabledDisabledFromContextMenu = 72,\n BreakpointConditionEditedFromSidebar = 73,\n WorkspaceTabAddFolder = 74,\n WorkspaceTabRemoveFolder = 75,\n OverrideTabAddFolder = 76,\n OverrideTabRemoveFolder = 77,\n WorkspaceSourceSelected = 78,\n OverridesSourceSelected = 79,\n StyleSheetInitiatorLinkClicked = 80,\n BreakpointRemovedFromGutterContextMenu = 81,\n BreakpointRemovedFromGutterToggle = 82,\n StylePropertyInsideKeyframeEdited = 83,\n OverrideContentFromSourcesContextMenu = 84,\n OverrideContentFromNetworkContextMenu = 85,\n OverrideScript = 86,\n OverrideStyleSheet = 87,\n OverrideDocument = 88,\n OverrideFetchXHR = 89,\n OverrideImage = 90,\n OverrideFont = 91,\n OverrideContentContextMenuSetup = 92,\n OverrideContentContextMenuAbandonSetup = 93,\n OverrideContentContextMenuActivateDisabled = 94,\n OverrideContentContextMenuOpenExistingFile = 95,\n OverrideContentContextMenuSaveNewFile = 96,\n ShowAllOverridesFromSourcesContextMenu = 97,\n ShowAllOverridesFromNetworkContextMenu = 98,\n AnimationGroupsCleared = 99,\n AnimationsPaused = 100,\n AnimationsResumed = 101,\n AnimatedNodeDescriptionClicked = 102,\n AnimationGroupScrubbed = 103,\n AnimationGroupReplayed = 104,\n OverrideTabDeleteFolderContextMenu = 105,\n WorkspaceDropFolder = 107,\n WorkspaceSelectFolder = 108,\n OverrideContentContextMenuSourceMappedWarning = 109,\n OverrideContentContextMenuRedirectToDeployed = 110,\n NewStyleRuleAdded = 111,\n TraceExpanded = 112,\n InsightConsoleMessageShown = 113,\n InsightRequestedViaContextMenu = 114,\n InsightRequestedViaHoverButton = 115,\n InsightRatedPositive = 117,\n InsightRatedNegative = 118,\n InsightClosed = 119,\n InsightErrored = 120,\n InsightHoverButtonShown = 121,\n SelfXssWarningConsoleMessageShown = 122,\n SelfXssWarningDialogShown = 123,\n SelfXssAllowPastingInConsole = 124,\n SelfXssAllowPastingInDialog = 125,\n ToggleEmulateFocusedPageFromStylesPaneOn = 126,\n ToggleEmulateFocusedPageFromStylesPaneOff = 127,\n ToggleEmulateFocusedPageFromRenderingTab = 128,\n ToggleEmulateFocusedPageFromCommandMenu = 129,\n InsightGenerated = 130,\n InsightErroredApi = 131,\n InsightErroredMarkdown = 132,\n MaxValue = 133,\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum PanelCodes {\n elements = 1,\n resources = 2,\n network = 3,\n sources = 4,\n timeline = 5,\n 'heap-profiler' = 6,\n console = 8,\n layers = 9,\n 'console-view' = 10,\n 'animations' = 11,\n 'network.config' = 12,\n 'rendering' = 13,\n 'sensors' = 14,\n 'sources.search' = 15,\n security = 16,\n 'js-profiler' = 17,\n lighthouse = 18,\n 'coverage' = 19,\n 'protocol-monitor' = 20,\n 'remote-devices' = 21,\n 'web-audio' = 22,\n 'changes.changes' = 23,\n 'performance.monitor' = 24,\n 'release-note' = 25,\n 'live-heap-profile' = 26,\n 'sources.quick' = 27,\n 'network.blocked-urls' = 28,\n 'settings-preferences' = 29,\n 'settings-workspace' = 30,\n 'settings-experiments' = 31,\n 'settings-blackbox' = 32,\n 'settings-devices' = 33,\n 'settings-throttling-conditions' = 34,\n 'settings-emulation-locations' = 35,\n 'settings-shortcuts' = 36,\n 'issues-pane' = 37,\n 'settings-keybinds' = 38,\n 'cssoverview' = 39,\n 'chrome-recorder' = 40,\n 'trust-tokens' = 41,\n 'reporting-api' = 42,\n 'interest-groups' = 43,\n 'back-forward-cache' = 44,\n 'service-worker-cache' = 45,\n 'background-service-background-fetch' = 46,\n 'background-service-background-sync' = 47,\n 'background-service-push-messaging' = 48,\n 'background-service-notifications' = 49,\n 'background-service-payment-handler' = 50,\n 'background-service-periodic-background-sync' = 51,\n 'service-workers' = 52,\n 'app-manifest' = 53,\n 'storage' = 54,\n 'cookies' = 55,\n 'frame-details' = 56,\n 'frame-resource' = 57,\n 'frame-window' = 58,\n 'frame-worker' = 59,\n 'dom-storage' = 60,\n 'indexed-db' = 61,\n 'web-sql' = 62,\n 'performance-insights' = 63,\n 'preloading' = 64,\n 'bounce-tracking-mitigations' = 65,\n 'developer-resources' = 66,\n 'autofill-view' = 67,\n MaxValue = 68,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum PanelWithLocation {\n 'elements-main' = 1,\n 'elements-drawer' = 2,\n 'resources-main' = 3,\n 'resources-drawer' = 4,\n 'network-main' = 5,\n 'network-drawer' = 6,\n 'sources-main' = 7,\n 'sources-drawer' = 8,\n 'timeline-main' = 9,\n 'timeline-drawer' = 10,\n 'heap_profiler-main' = 11,\n 'heap_profiler-drawer' = 12,\n 'console-main' = 13,\n 'console-drawer' = 14,\n 'layers-main' = 15,\n 'layers-drawer' = 16,\n 'console-view-main' = 17,\n 'console-view-drawer' = 18,\n 'animations-main' = 19,\n 'animations-drawer' = 20,\n 'network.config-main' = 21,\n 'network.config-drawer' = 22,\n 'rendering-main' = 23,\n 'rendering-drawer' = 24,\n 'sensors-main' = 25,\n 'sensors-drawer' = 26,\n 'sources.search-main' = 27,\n 'sources.search-drawer' = 28,\n 'security-main' = 29,\n 'security-drawer' = 30,\n 'js_profiler-main' = 31,\n 'js_profiler-drawer' = 32,\n 'lighthouse-main' = 33,\n 'lighthouse-drawer' = 34,\n 'coverage-main' = 35,\n 'coverage-drawer' = 36,\n 'protocol-monitor-main' = 37,\n 'protocol-monitor-drawer' = 38,\n 'remote-devices-main' = 39,\n 'remote-devices-drawer' = 40,\n 'web-audio-main' = 41,\n 'web-audio-drawer' = 42,\n 'changes.changes-main' = 43,\n 'changes.changes-drawer' = 44,\n 'performance.monitor-main' = 45,\n 'performance.monitor-drawer' = 46,\n 'release-note-main' = 47,\n 'release-note-drawer' = 48,\n 'live_heap_profile-main' = 49,\n 'live_heap_profile-drawer' = 50,\n 'sources.quick-main' = 51,\n 'sources.quick-drawer' = 52,\n 'network.blocked-urls-main' = 53,\n 'network.blocked-urls-drawer' = 54,\n 'settings-preferences-main' = 55,\n 'settings-preferences-drawer' = 56,\n 'settings-workspace-main' = 57,\n 'settings-workspace-drawer' = 58,\n 'settings-experiments-main' = 59,\n 'settings-experiments-drawer' = 60,\n 'settings-blackbox-main' = 61,\n 'settings-blackbox-drawer' = 62,\n 'settings-devices-main' = 63,\n 'settings-devices-drawer' = 64,\n 'settings-throttling-conditions-main' = 65,\n 'settings-throttling-conditions-drawer' = 66,\n 'settings-emulation-locations-main' = 67,\n 'settings-emulation-locations-drawer' = 68,\n 'settings-shortcuts-main' = 69,\n 'settings-shortcuts-drawer' = 70,\n 'issues-pane-main' = 71,\n 'issues-pane-drawer' = 72,\n 'settings-keybinds-main' = 73,\n 'settings-keybinds-drawer' = 74,\n 'cssoverview-main' = 75,\n 'cssoverview-drawer' = 76,\n 'chrome_recorder-main' = 77,\n 'chrome_recorder-drawer' = 78,\n 'trust_tokens-main' = 79,\n 'trust_tokens-drawer' = 80,\n 'reporting_api-main' = 81,\n 'reporting_api-drawer' = 82,\n 'interest_groups-main' = 83,\n 'interest_groups-drawer' = 84,\n 'back_forward_cache-main' = 85,\n 'back_forward_cache-drawer' = 86,\n 'service_worker_cache-main' = 87,\n 'service_worker_cache-drawer' = 88,\n 'background_service_backgroundFetch-main' = 89,\n 'background_service_backgroundFetch-drawer' = 90,\n 'background_service_backgroundSync-main' = 91,\n 'background_service_backgroundSync-drawer' = 92,\n 'background_service_pushMessaging-main' = 93,\n 'background_service_pushMessaging-drawer' = 94,\n 'background_service_notifications-main' = 95,\n 'background_service_notifications-drawer' = 96,\n 'background_service_paymentHandler-main' = 97,\n 'background_service_paymentHandler-drawer' = 98,\n 'background_service_periodicBackgroundSync-main' = 99,\n 'background_service_periodicBackgroundSync-drawer' = 100,\n 'service_workers-main' = 101,\n 'service_workers-drawer' = 102,\n 'app_manifest-main' = 103,\n 'app_manifest-drawer' = 104,\n 'storage-main' = 105,\n 'storage-drawer' = 106,\n 'cookies-main' = 107,\n 'cookies-drawer' = 108,\n 'frame_details-main' = 109,\n 'frame_details-drawer' = 110,\n 'frame_resource-main' = 111,\n 'frame_resource-drawer' = 112,\n 'frame_window-main' = 113,\n 'frame_window-drawer' = 114,\n 'frame_worker-main' = 115,\n 'frame_worker-drawer' = 116,\n 'dom_storage-main' = 117,\n 'dom_storage-drawer' = 118,\n 'indexed_db-main' = 119,\n 'indexed_db-drawer' = 120,\n 'web_sql-main' = 121,\n 'web_sql-drawer' = 122,\n 'performance_insights-main' = 123,\n 'performance_insights-drawer' = 124,\n 'preloading-main' = 125,\n 'preloading-drawer' = 126,\n 'bounce_tracking_mitigations-main' = 127,\n 'bounce_tracking_mitigations-drawer' = 128,\n 'developer-resources-main' = 129,\n 'developer-resources-drawer' = 130,\n 'autofill-view-main' = 131,\n 'autofill-view-drawer' = 132,\n MaxValue = 133,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum ElementsSidebarTabCodes {\n 'OtherSidebarPane' = 0,\n 'styles' = 1,\n 'computed' = 2,\n 'elements.layout' = 3,\n 'elements.event-listeners' = 4,\n 'elements.dom-breakpoints' = 5,\n 'elements.dom-properties' = 6,\n 'accessibility.view' = 7,\n MaxValue = 8,\n}\n\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum SourcesSidebarTabCodes {\n 'OtherSidebarPane' = 0,\n 'navigator-network' = 1,\n 'navigator-files' = 2,\n 'navigator-overrides' = 3,\n 'navigator-content-scripts' = 4,\n 'navigator-snippets' = 5,\n MaxValue = 6,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum MediaTypes {\n Unknown = 0,\n 'text/css' = 2,\n 'text/html' = 3,\n 'application/xml' = 4,\n 'application/wasm' = 5,\n 'application/manifest+json' = 6,\n 'application/x-aspx' = 7,\n 'application/jsp' = 8,\n 'text/x-c++src' = 9,\n 'text/x-coffeescript' = 10,\n 'application/vnd.dart' = 11,\n 'text/typescript' = 12,\n 'text/typescript-jsx' = 13,\n 'application/json' = 14,\n 'text/x-csharp' = 15,\n 'text/x-java' = 16,\n 'text/x-less' = 17,\n 'application/x-httpd-php' = 18,\n 'text/x-python' = 19,\n 'text/x-sh' = 20,\n 'text/x-gss' = 21,\n 'text/x-sass' = 22,\n 'text/x-scss' = 23,\n 'text/markdown' = 24,\n 'text/x-clojure' = 25,\n 'text/jsx' = 26,\n 'text/x-go' = 27,\n 'text/x-kotlin' = 28,\n 'text/x-scala' = 29,\n 'text/x.svelte' = 30,\n 'text/javascript+plain' = 31,\n 'text/javascript+minified' = 32,\n 'text/javascript+sourcemapped' = 33,\n 'text/x.angular' = 34,\n 'text/x.vue' = 35,\n MaxValue = 36,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum KeybindSetSettings {\n 'devToolsDefault' = 0,\n 'vsCode' = 1,\n MaxValue = 2,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum KeyboardShortcutAction {\n OtherShortcut = 0,\n 'quick-open.show-command-menu' = 1,\n 'console.clear' = 2,\n 'console.toggle' = 3,\n 'debugger.step' = 4,\n 'debugger.step-into' = 5,\n 'debugger.step-out' = 6,\n 'debugger.step-over' = 7,\n 'debugger.toggle-breakpoint' = 8,\n 'debugger.toggle-breakpoint-enabled' = 9,\n 'debugger.toggle-pause' = 10,\n 'elements.edit-as-html' = 11,\n 'elements.hide-element' = 12,\n 'elements.redo' = 13,\n 'elements.toggle-element-search' = 14,\n 'elements.undo' = 15,\n 'main.search-in-panel.find' = 16,\n 'main.toggle-drawer' = 17,\n 'network.hide-request-details' = 18,\n 'network.search' = 19,\n 'network.toggle-recording' = 20,\n 'quick-open.show' = 21,\n 'settings.show' = 22,\n 'sources.search' = 23,\n 'background-service.toggle-recording' = 24,\n 'components.collect-garbage' = 25,\n 'console.clear.history' = 26,\n 'console.create-pin' = 27,\n 'coverage.start-with-reload' = 28,\n 'coverage.toggle-recording' = 29,\n 'debugger.breakpoint-input-window' = 30,\n 'debugger.evaluate-selection' = 31,\n 'debugger.next-call-frame' = 32,\n 'debugger.previous-call-frame' = 33,\n 'debugger.run-snippet' = 34,\n 'debugger.toggle-breakpoints-active' = 35,\n 'elements.capture-area-screenshot' = 36,\n 'emulation.capture-full-height-screenshot' = 37,\n 'emulation.capture-node-screenshot' = 38,\n 'emulation.capture-screenshot' = 39,\n 'emulation.show-sensors' = 40,\n 'emulation.toggle-device-mode' = 41,\n 'help.release-notes' = 42,\n 'help.report-issue' = 43,\n 'input.start-replaying' = 44,\n 'input.toggle-pause' = 45,\n 'input.toggle-recording' = 46,\n 'inspector-main.focus-debuggee' = 47,\n 'inspector-main.hard-reload' = 48,\n 'inspector-main.reload' = 49,\n 'live-heap-profile.start-with-reload' = 50,\n 'live-heap-profile.toggle-recording' = 51,\n 'main.debug-reload' = 52,\n 'main.next-tab' = 53,\n 'main.previous-tab' = 54,\n 'main.search-in-panel.cancel' = 55,\n 'main.search-in-panel.find-next' = 56,\n 'main.search-in-panel.find-previous' = 57,\n 'main.toggle-dock' = 58,\n 'main.zoom-in' = 59,\n 'main.zoom-out' = 60,\n 'main.zoom-reset' = 61,\n 'network-conditions.network-low-end-mobile' = 62,\n 'network-conditions.network-mid-tier-mobile' = 63,\n 'network-conditions.network-offline' = 64,\n 'network-conditions.network-online' = 65,\n 'profiler.heap-toggle-recording' = 66,\n 'profiler.js-toggle-recording' = 67,\n 'resources.clear' = 68,\n 'settings.documentation' = 69,\n 'settings.shortcuts' = 70,\n 'sources.add-folder-to-workspace' = 71,\n 'sources.add-to-watch' = 72,\n 'sources.close-all' = 73,\n 'sources.close-editor-tab' = 74,\n 'sources.create-snippet' = 75,\n 'sources.go-to-line' = 76,\n 'sources.go-to-member' = 77,\n 'sources.jump-to-next-location' = 78,\n 'sources.jump-to-previous-location' = 79,\n 'sources.rename' = 80,\n 'sources.save' = 81,\n 'sources.save-all' = 82,\n 'sources.switch-file' = 83,\n 'timeline.jump-to-next-frame' = 84,\n 'timeline.jump-to-previous-frame' = 85,\n 'timeline.load-from-file' = 86,\n 'timeline.next-recording' = 87,\n 'timeline.previous-recording' = 88,\n 'timeline.record-reload' = 89,\n 'timeline.save-to-file' = 90,\n 'timeline.show-history' = 91,\n 'timeline.toggle-recording' = 92,\n 'sources.increment-css' = 93,\n 'sources.increment-css-by-ten' = 94,\n 'sources.decrement-css' = 95,\n 'sources.decrement-css-by-ten' = 96,\n 'layers.reset-view' = 97,\n 'layers.pan-mode' = 98,\n 'layers.rotate-mode' = 99,\n 'layers.zoom-in' = 100,\n 'layers.zoom-out' = 101,\n 'layers.up' = 102,\n 'layers.down' = 103,\n 'layers.left' = 104,\n 'layers.right' = 105,\n 'help.report-translation-issue' = 106,\n 'rendering.toggle-prefers-color-scheme' = 107,\n 'chrome-recorder.start-recording' = 108,\n 'chrome-recorder.replay-recording' = 109,\n 'chrome-recorder.toggle-code-view' = 110,\n 'chrome-recorder.copy-recording-or-step' = 111,\n 'changes.revert' = 112,\n 'changes.copy' = 113,\n 'elements.new-style-rule' = 114,\n 'elements.refresh-event-listeners' = 115,\n 'coverage.clear' = 116,\n 'coverage.export' = 117,\n MaxValue = 118,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum IssueOpener {\n ConsoleInfoBar = 0,\n LearnMoreLinkCOEP = 1,\n StatusBarIssuesCounter = 2,\n HamburgerMenu = 3,\n Adorner = 4,\n CommandMenu = 5,\n MaxValue = 6,\n}\n\n/**\n * This list should contain the currently active Devtools Experiments,\n * gaps are expected.\n */\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum DevtoolsExperiments {\n 'applyCustomStylesheet' = 0,\n 'captureNodeCreationStacks' = 1,\n 'liveHeapProfile' = 11,\n 'protocolMonitor' = 13,\n 'samplingHeapProfilerTimeline' = 17,\n 'showOptionToExposeInternalsInHeapSnapshot' = 18,\n 'timelineInvalidationTracking' = 26,\n 'timelineShowAllEvents' = 27,\n 'timelineV8RuntimeCallStats' = 28,\n 'APCA' = 39,\n 'fontEditor' = 41,\n 'fullAccessibilityTree' = 42,\n 'ignoreListJSFramesOnTimeline' = 43,\n 'contrastIssues' = 44,\n 'experimentalCookieFeatures' = 45,\n 'stylesPaneCSSChanges' = 55,\n 'evaluateExpressionsWithSourceMaps' = 58,\n 'instrumentationBreakpoints' = 61,\n 'authoredDeployedGrouping' = 63,\n 'importantDOMProperties' = 64,\n 'justMyCode' = 65,\n 'timelineAsConsoleProfileResultPanel' = 67,\n 'preloadingStatusPanel' = 68,\n 'outermostTargetSelector' = 71,\n 'jsProfilerTemporarilyEnable' = 72,\n 'highlightErrorsElementsPanel' = 73,\n 'setAllBreakpointsEagerly' = 74,\n 'selfXssWarning' = 75,\n 'useSourceMapScopes' = 76,\n 'storageBucketsTree' = 77,\n 'networkPanelFilterBarRedesign' = 79,\n 'trackContextMenu' = 81,\n 'autofillView' = 82,\n 'sourcesFrameIndentationMarkersTemporarilyDisable' = 83,\n 'heapSnapshotTreatBackingStoreAsContainingObject' = 84,\n 'cssTypeComponentLengthDeprecate' = 85,\n\n // Increment this when new experiments are added.\n 'MaxValue' = 86,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum BreakpointWithConditionAdded {\n Logpoint = 0,\n ConditionalBreakpoint = 1,\n MaxValue = 2,\n}\n\nexport const enum BreakpointEditDialogRevealedFrom {\n BreakpointSidebarContextMenu = 0,\n BreakpointSidebarEditButton = 1,\n BreakpointMarkerContextMenu = 2,\n LineGutterContextMenu = 3,\n KeyboardShortcut = 4,\n Linkifier = 5,\n MouseClick = 6,\n MaxValue = 7,\n}\n\nexport const enum ColorConvertedFrom {\n ColorSwatch = 0,\n ColorPicker = 1,\n MaxValue = 2,\n}\n\nexport const enum ColorPickerOpenedFrom {\n SourcesPanel = 0,\n StylesPane = 1,\n MaxValue = 2,\n}\n\nexport const enum CSSPropertyDocumentation {\n Shown = 0,\n ToggledOn = 1,\n ToggledOff = 2,\n MaxValue = 3,\n}\n\nexport const enum BreakpointsRestoredFromStorageCount {\n LessThan100 = 0,\n LessThan300 = 1,\n LessThan1000 = 2,\n LessThan3000 = 3,\n LessThan10000 = 4,\n LessThan30000 = 5,\n LessThan100000 = 6,\n LessThan300000 = 7,\n LessThan1000000 = 8,\n Above1000000 = 9,\n MaxValue = 10,\n}\n\n// Update DevToolsIssuesPanelIssueExpanded from tools/metrics/histograms/enums.xml if new enum is added.\nexport enum IssueExpanded {\n CrossOriginEmbedderPolicy = 0,\n MixedContent = 1,\n SameSiteCookie = 2,\n HeavyAd = 3,\n ContentSecurityPolicy = 4,\n Other = 5,\n Generic = 6,\n ThirdPartyPhaseoutCookie = 7,\n GenericCookie = 8,\n MaxValue = 9,\n}\n\nexport enum IssueResourceOpened {\n CrossOriginEmbedderPolicyRequest = 0,\n CrossOriginEmbedderPolicyElement = 1,\n MixedContentRequest = 2,\n SameSiteCookieCookie = 3,\n SameSiteCookieRequest = 4,\n HeavyAdElement = 5,\n ContentSecurityPolicyDirective = 6,\n ContentSecurityPolicyElement = 7,\n MaxValue = 13,\n}\n\n/**\n * This list should contain the currently active issue types,\n * gaps are expected.\n */\nexport enum IssueCreated {\n MixedContentIssue = 0,\n 'ContentSecurityPolicyIssue::kInlineViolation' = 1,\n 'ContentSecurityPolicyIssue::kEvalViolation' = 2,\n 'ContentSecurityPolicyIssue::kURLViolation' = 3,\n 'ContentSecurityPolicyIssue::kTrustedTypesSinkViolation' = 4,\n 'ContentSecurityPolicyIssue::kTrustedTypesPolicyViolation' = 5,\n 'HeavyAdIssue::NetworkTotalLimit' = 6,\n 'HeavyAdIssue::CpuTotalLimit' = 7,\n 'HeavyAdIssue::CpuPeakLimit' = 8,\n 'CrossOriginEmbedderPolicyIssue::CoepFrameResourceNeedsCoepHeader' = 9,\n 'CrossOriginEmbedderPolicyIssue::CoopSandboxedIFrameCannotNavigateToCoopPage' = 10,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOrigin' = 11,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameOriginAfterDefaultedToSameOriginByCoep' = 12,\n 'CrossOriginEmbedderPolicyIssue::CorpNotSameSite' = 13,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::ReadCookie' = 14,\n 'CookieIssue::ExcludeSameSiteNoneInsecure::SetCookie' = 15,\n 'CookieIssue::WarnSameSiteNoneInsecure::ReadCookie' = 16,\n 'CookieIssue::WarnSameSiteNoneInsecure::SetCookie' = 17,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Secure' = 18,\n 'CookieIssue::WarnSameSiteStrictLaxDowngradeStrict::Insecure' = 19,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Secure' = 20,\n 'CookieIssue::WarnCrossDowngrade::ReadCookie::Insecure' = 21,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Secure' = 22,\n 'CookieIssue::WarnCrossDowngrade::SetCookie::Insecure' = 23,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Secure' = 24,\n 'CookieIssue::ExcludeNavigationContextDowngrade::Insecure' = 25,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Secure' = 26,\n 'CookieIssue::ExcludeContextDowngrade::ReadCookie::Insecure' = 27,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Secure' = 28,\n 'CookieIssue::ExcludeContextDowngrade::SetCookie::Insecure' = 29,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::ReadCookie' = 30,\n 'CookieIssue::ExcludeSameSiteUnspecifiedTreatedAsLax::SetCookie' = 31,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::ReadCookie' = 32,\n 'CookieIssue::WarnSameSiteUnspecifiedLaxAllowUnsafe::SetCookie' = 33,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::ReadCookie' = 34,\n 'CookieIssue::WarnSameSiteUnspecifiedCrossSiteContext::SetCookie' = 35,\n 'SharedArrayBufferIssue::TransferIssue' = 36,\n 'SharedArrayBufferIssue::CreationIssue' = 37,\n LowTextContrastIssue = 41,\n 'CorsIssue::InsecurePrivateNetwork' = 42,\n 'CorsIssue::InvalidHeaders' = 44,\n 'CorsIssue::WildcardOriginWithCredentials' = 45,\n 'CorsIssue::PreflightResponseInvalid' = 46,\n 'CorsIssue::OriginMismatch' = 47,\n 'CorsIssue::AllowCredentialsRequired' = 48,\n 'CorsIssue::MethodDisallowedByPreflightResponse' = 49,\n 'CorsIssue::HeaderDisallowedByPreflightResponse' = 50,\n 'CorsIssue::RedirectContainsCredentials' = 51,\n 'CorsIssue::DisallowedByMode' = 52,\n 'CorsIssue::CorsDisabledScheme' = 53,\n 'CorsIssue::PreflightMissingAllowExternal' = 54,\n 'CorsIssue::PreflightInvalidAllowExternal' = 55,\n 'CorsIssue::NoCorsRedirectModeNotFollow' = 57,\n 'QuirksModeIssue::QuirksMode' = 58,\n 'QuirksModeIssue::LimitedQuirksMode' = 59,\n DeprecationIssue = 60,\n 'ClientHintIssue::MetaTagAllowListInvalidOrigin' = 61,\n 'ClientHintIssue::MetaTagModifiedHTML' = 62,\n 'CorsIssue::PreflightAllowPrivateNetworkError' = 63,\n 'GenericIssue::CrossOriginPortalPostMessageError' = 64,\n 'GenericIssue::FormLabelForNameError' = 65,\n 'GenericIssue::FormDuplicateIdForInputError' = 66,\n 'GenericIssue::FormInputWithNoLabelError' = 67,\n 'GenericIssue::FormAutocompleteAttributeEmptyError' = 68,\n 'GenericIssue::FormEmptyIdAndNameAttributesForInputError' = 69,\n 'GenericIssue::FormAriaLabelledByToNonExistingId' = 70,\n 'GenericIssue::FormInputAssignedAutocompleteValueToIdOrNameAttributeError' = 71,\n 'GenericIssue::FormLabelHasNeitherForNorNestedInput' = 72,\n 'GenericIssue::FormLabelForMatchesNonExistingIdError' = 73,\n 'GenericIssue::FormHasPasswordFieldWithoutUsernameFieldError' = 74,\n 'GenericIssue::FormInputHasWrongButWellIntendedAutocompleteValueError' = 75,\n 'StylesheetLoadingIssue::LateImportRule' = 76,\n 'StylesheetLoadingIssue::RequestFailed' = 77,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessId' = 78,\n 'CorsIssue::PreflightMissingPrivateNetworkAccessName' = 79,\n 'CorsIssue::PrivateNetworkAccessPermissionUnavailable' = 80,\n 'CorsIssue::PrivateNetworkAccessPermissionDenied' = 81,\n 'CookieIssue::WarnThirdPartyPhaseout::ReadCookie' = 82,\n 'CookieIssue::WarnThirdPartyPhaseout::SetCookie' = 83,\n 'CookieIssue::ExcludeThirdPartyPhaseout::ReadCookie' = 84,\n 'CookieIssue::ExcludeThirdPartyPhaseout::SetCookie' = 85,\n MaxValue = 86,\n}\n\nexport const enum DeveloperResourceLoaded {\n LoadThroughPageViaTarget = 0,\n LoadThroughPageViaFrame = 1,\n LoadThroughPageFailure = 2,\n LoadThroughPageFallback = 3,\n FallbackAfterFailure = 4,\n FallbackPerOverride = 5,\n FallbackPerProtocol = 6,\n FallbackFailure = 7,\n MaxValue = 8,\n}\n\nexport const enum DeveloperResourceScheme {\n SchemeOther = 0,\n SchemeUnknown = 1,\n SchemeHttp = 2,\n SchemeHttps = 3,\n SchemeHttpLocalhost = 4,\n SchemeHttpsLocalhost = 5,\n SchemeData = 6,\n SchemeFile = 7,\n SchemeBlob = 8,\n MaxValue = 9,\n}\n\nexport enum ResourceType {\n /* eslint-disable @typescript-eslint/naming-convention */\n all = 0,\n /* eslint-enable @typescript-eslint/naming-convention */\n Documents = 1,\n Scripts = 2,\n 'Fetch and XHR' = 3,\n Stylesheets = 4,\n Fonts = 5,\n Images = 6,\n Media = 7,\n Manifest = 8,\n WebSockets = 9,\n WebAssembly = 10,\n Other = 11,\n MaxValue = 12,\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum NetworkPanelMoreFilters {\n 'Hide data URLs' = 0,\n 'Hide extension URLs' = 1,\n 'Blocked response cookies' = 2,\n 'Blocked requests' = 3,\n '3rd-party requests' = 4,\n MaxValue = 5,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum VMInlineScriptType {\n MODULE_SCRIPT = 0,\n CLASSIC_SCRIPT = 1,\n MaxValue = 2,\n}\n\n/* eslint-disable @typescript-eslint/naming-convention */\nexport enum Language {\n 'af' = 1,\n 'am' = 2,\n 'ar' = 3,\n 'as' = 4,\n 'az' = 5,\n 'be' = 6,\n 'bg' = 7,\n 'bn' = 8,\n 'bs' = 9,\n 'ca' = 10,\n 'cs' = 11,\n 'cy' = 12,\n 'da' = 13,\n 'de' = 14,\n 'el' = 15,\n 'en-GB' = 16,\n 'en-US' = 17,\n 'es-419' = 18,\n 'es' = 19,\n 'et' = 20,\n 'eu' = 21,\n 'fa' = 22,\n 'fi' = 23,\n 'fil' = 24,\n 'fr-CA' = 25,\n 'fr' = 26,\n 'gl' = 27,\n 'gu' = 28,\n 'he' = 29,\n 'hi' = 30,\n 'hr' = 31,\n 'hu' = 32,\n 'hy' = 33,\n 'id' = 34,\n 'is' = 35,\n 'it' = 36,\n 'ja' = 37,\n 'ka' = 38,\n 'kk' = 39,\n 'km' = 40,\n 'kn' = 41,\n 'ko' = 42,\n 'ky' = 43,\n 'lo' = 44,\n 'lt' = 45,\n 'lv' = 46,\n 'mk' = 47,\n 'ml' = 48,\n 'mn' = 49,\n 'mr' = 50,\n 'ms' = 51,\n 'my' = 52,\n 'ne' = 53,\n 'nl' = 54,\n 'no' = 55,\n 'or' = 56,\n 'pa' = 57,\n 'pl' = 58,\n 'pt-PT' = 59,\n 'pt' = 60,\n 'ro' = 61,\n 'ru' = 62,\n 'si' = 63,\n 'sk' = 64,\n 'sl' = 65,\n 'sq' = 66,\n 'sr-Latn' = 67,\n 'sr' = 68,\n 'sv' = 69,\n 'sw' = 70,\n 'ta' = 71,\n 'te' = 72,\n 'th' = 73,\n 'tr' = 74,\n 'uk' = 75,\n 'ur' = 76,\n 'uz' = 77,\n 'vi' = 78,\n 'zh' = 79,\n 'zh-HK' = 80,\n 'zh-TW' = 81,\n 'zu' = 82,\n MaxValue = 83,\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\nexport const enum SyncSetting {\n ChromeSyncDisabled = 1,\n ChromeSyncSettingsDisabled = 2,\n DevToolsSyncSettingDisabled = 3,\n DevToolsSyncSettingEnabled = 4,\n MaxValue = 5,\n}\n\nexport const enum RecordingToggled {\n RecordingStarted = 1,\n RecordingFinished = 2,\n MaxValue = 3,\n}\n\nexport const enum RecordingAssertion {\n AssertionAdded = 1,\n PropertyAssertionEdited = 2,\n AttributeAssertionEdited = 3,\n MaxValue = 4,\n}\n\nexport const enum RecordingReplayFinished {\n Success = 1,\n TimeoutErrorSelectors = 2,\n TimeoutErrorTarget = 3,\n OtherError = 4,\n MaxValue = 5,\n}\n\nexport const enum RecordingReplaySpeed {\n Normal = 1,\n Slow = 2,\n VerySlow = 3,\n ExtremelySlow = 4,\n MaxValue = 5,\n}\n\nexport const enum RecordingReplayStarted {\n ReplayOnly = 1,\n ReplayWithPerformanceTracing = 2,\n ReplayViaExtension = 3,\n MaxValue = 4,\n}\n\nexport const enum RecordingEdited {\n SelectorPickerUsed = 1,\n StepAdded = 2,\n StepRemoved = 3,\n SelectorAdded = 4,\n SelectorRemoved = 5,\n SelectorPartAdded = 6,\n SelectorPartEdited = 7,\n SelectorPartRemoved = 8,\n TypeChanged = 9,\n OtherEditing = 10,\n MaxValue = 11,\n}\n\nexport const enum RecordingExported {\n ToPuppeteer = 1,\n ToJSON = 2,\n ToPuppeteerReplay = 3,\n ToExtension = 4,\n ToLighthouse = 5,\n MaxValue = 6,\n}\n\nexport const enum RecordingCodeToggled {\n CodeShown = 1,\n CodeHidden = 2,\n MaxValue = 3,\n}\n\nexport const enum RecordingCopiedToClipboard {\n CopiedRecordingWithPuppeteer = 1,\n CopiedRecordingWithJSON = 2,\n CopiedRecordingWithReplay = 3,\n CopiedRecordingWithExtension = 4,\n CopiedStepWithPuppeteer = 5,\n CopiedStepWithJSON = 6,\n CopiedStepWithReplay = 7,\n CopiedStepWithExtension = 8,\n MaxValue = 9,\n}\n\nexport const enum StyleTextCopied {\n DeclarationViaChangedLine = 1,\n AllChangesViaStylesPane = 2,\n DeclarationViaContextMenu = 3,\n PropertyViaContextMenu = 4,\n ValueViaContextMenu = 5,\n DeclarationAsJSViaContextMenu = 6,\n RuleViaContextMenu = 7,\n AllDeclarationsViaContextMenu = 8,\n AllDeclarationsAsJSViaContextMenu = 9,\n SelectorViaContextMenu = 10,\n MaxValue = 11,\n}\n\nexport enum ManifestSectionCodes {\n OtherSection = 0,\n 'Identity' = 1,\n 'Presentation' = 2,\n 'Protocol Handlers' = 3,\n 'Icons' = 4,\n 'Window Controls Overlay' = 5,\n MaxValue = 6,\n}\n\n/* eslint-enable @typescript-eslint/naming-convention */\n\n// The names here match the CSSRuleValidator names in CSSRuleValidator.ts.\nexport const enum CSSHintType {\n Other = 0,\n AlignContent = 1,\n FlexItem = 2,\n FlexContainer = 3,\n GridContainer = 4,\n GridItem = 5,\n FlexGrid = 6,\n MulticolFlexGrid = 7,\n Padding = 8,\n Position = 9,\n ZIndex = 10,\n Sizing = 11,\n FlexOrGridItem = 12,\n FontVariationSettings = 13,\n MaxValue = 14,\n}\n\nexport const enum LighthouseModeRun {\n Navigation = 0,\n Timespan = 1,\n Snapshot = 2,\n LegacyNavigation = 3,\n MaxValue = 4,\n}\n\nexport const enum LighthouseCategoryUsed {\n Performance = 0,\n Accessibility = 1,\n BestPractices = 2,\n SEO = 3,\n PWA = 4,\n PubAds = 5,\n MaxValue = 6,\n}\n\nexport const enum SwatchType {\n VarLink = 0,\n AnimationNameLink = 1,\n Color = 2,\n AnimationTiming = 3,\n Shadow = 4,\n Grid = 5,\n Flex = 6,\n Angle = 7,\n Length = 8,\n PositionFallbackLink = 9,\n MaxValue = 10,\n}\n\nexport const enum BadgeType {\n GRID = 0,\n SUBGRID = 1,\n FLEX = 2,\n AD = 3,\n SCROLL_SNAP = 4,\n CONTAINER = 5,\n SLOT = 6,\n TOP_LAYER = 7,\n REVEAL = 8,\n MaxValue = 9,\n}\n\nexport const enum AnimationsPlaybackRate {\n Percent100 = 0,\n Percent25 = 1,\n Percent10 = 2,\n Other = 3,\n MaxValue = 4,\n}\n\nexport const enum AnimationPointDragType {\n // Animation is dragged as a whole in the Animations panel.\n AnimationDrag = 0,\n // A keyframe point inside animation timeline is dragged.\n KeyframeMove = 1,\n // Start point of the animation inside animation timeline is dragged.\n StartEndpointMove = 2,\n // Finish point of the animation inside animation timeline is dragged.\n FinishEndpointMove = 3,\n Other = 4,\n MaxValue = 5,\n}\n"]} \ No newline at end of file diff --git a/public/core/i18n/locales/en-US.json b/public/core/i18n/locales/en-US.json index 011b47bae..53b0e937b 100644 --- a/public/core/i18n/locales/en-US.json +++ b/public/core/i18n/locales/en-US.json @@ -1 +1 @@ -{"core/common/ResourceType.ts | cspviolationreport":{"message":"CSPViolationReport"},"core/common/ResourceType.ts | css":{"message":"CSS"},"core/common/ResourceType.ts | doc":{"message":"Doc"},"core/common/ResourceType.ts | document":{"message":"Document"},"core/common/ResourceType.ts | eventsource":{"message":"EventSource"},"core/common/ResourceType.ts | fetch":{"message":"Fetch"},"core/common/ResourceType.ts | fetchAndXHR":{"message":"Fetch and XHR"},"core/common/ResourceType.ts | font":{"message":"Font"},"core/common/ResourceType.ts | image":{"message":"Image"},"core/common/ResourceType.ts | img":{"message":"Img"},"core/common/ResourceType.ts | javascript":{"message":"JavaScript"},"core/common/ResourceType.ts | js":{"message":"JS"},"core/common/ResourceType.ts | manifest":{"message":"Manifest"},"core/common/ResourceType.ts | media":{"message":"Media"},"core/common/ResourceType.ts | other":{"message":"Other"},"core/common/ResourceType.ts | ping":{"message":"Ping"},"core/common/ResourceType.ts | preflight":{"message":"Preflight"},"core/common/ResourceType.ts | script":{"message":"Script"},"core/common/ResourceType.ts | signedexchange":{"message":"SignedExchange"},"core/common/ResourceType.ts | stylesheet":{"message":"Stylesheet"},"core/common/ResourceType.ts | texttrack":{"message":"TextTrack"},"core/common/ResourceType.ts | wasm":{"message":"Wasm"},"core/common/ResourceType.ts | webassembly":{"message":"WebAssembly"},"core/common/ResourceType.ts | webbundle":{"message":"WebBundle"},"core/common/ResourceType.ts | websocket":{"message":"WebSocket"},"core/common/ResourceType.ts | webtransport":{"message":"WebTransport"},"core/common/ResourceType.ts | ws":{"message":"WS"},"core/common/Revealer.ts | applicationPanel":{"message":"Application panel"},"core/common/Revealer.ts | changesDrawer":{"message":"Changes drawer"},"core/common/Revealer.ts | elementsPanel":{"message":"Elements panel"},"core/common/Revealer.ts | issuesView":{"message":"Issues view"},"core/common/Revealer.ts | memoryInspectorPanel":{"message":"Memory inspector panel"},"core/common/Revealer.ts | networkPanel":{"message":"Network panel"},"core/common/Revealer.ts | sourcesPanel":{"message":"Sources panel"},"core/common/Revealer.ts | stylesSidebar":{"message":"styles sidebar"},"core/common/SettingRegistration.ts | adorner":{"message":"Adorner"},"core/common/SettingRegistration.ts | appearance":{"message":"Appearance"},"core/common/SettingRegistration.ts | console":{"message":"Console"},"core/common/SettingRegistration.ts | debugger":{"message":"Debugger"},"core/common/SettingRegistration.ts | elements":{"message":"Elements"},"core/common/SettingRegistration.ts | extension":{"message":"Extension"},"core/common/SettingRegistration.ts | global":{"message":"Global"},"core/common/SettingRegistration.ts | grid":{"message":"Grid"},"core/common/SettingRegistration.ts | memory":{"message":"Memory"},"core/common/SettingRegistration.ts | mobile":{"message":"Mobile"},"core/common/SettingRegistration.ts | network":{"message":"Network"},"core/common/SettingRegistration.ts | performance":{"message":"Performance"},"core/common/SettingRegistration.ts | persistence":{"message":"Persistence"},"core/common/SettingRegistration.ts | rendering":{"message":"Rendering"},"core/common/SettingRegistration.ts | sources":{"message":"Sources"},"core/common/SettingRegistration.ts | sync":{"message":"Sync"},"core/host/InspectorFrontendHost.ts | devtoolsS":{"message":"DevTools - {PH1}"},"core/host/ResourceLoader.ts | cacheError":{"message":"Cache error"},"core/host/ResourceLoader.ts | certificateError":{"message":"Certificate error"},"core/host/ResourceLoader.ts | certificateManagerError":{"message":"Certificate manager error"},"core/host/ResourceLoader.ts | connectionError":{"message":"Connection error"},"core/host/ResourceLoader.ts | decodingDataUrlFailed":{"message":"Decoding Data URL failed"},"core/host/ResourceLoader.ts | dnsResolverError":{"message":"DNS resolver error"},"core/host/ResourceLoader.ts | ftpError":{"message":"FTP error"},"core/host/ResourceLoader.ts | httpError":{"message":"HTTP error"},"core/host/ResourceLoader.ts | httpErrorStatusCodeSS":{"message":"HTTP error: status code {PH1}, {PH2}"},"core/host/ResourceLoader.ts | invalidUrl":{"message":"Invalid URL"},"core/host/ResourceLoader.ts | signedExchangeError":{"message":"Signed Exchange error"},"core/host/ResourceLoader.ts | systemError":{"message":"System error"},"core/host/ResourceLoader.ts | unknownError":{"message":"Unknown error"},"core/i18n/time-utilities.ts | fdays":{"message":"{PH1} days"},"core/i18n/time-utilities.ts | fhrs":{"message":"{PH1} hrs"},"core/i18n/time-utilities.ts | fmin":{"message":"{PH1} min"},"core/i18n/time-utilities.ts | fmms":{"message":"{PH1} μs"},"core/i18n/time-utilities.ts | fms":{"message":"{PH1} ms"},"core/i18n/time-utilities.ts | fs":{"message":"{PH1} s"},"core/sdk/ChildTargetManager.ts | main":{"message":"Main"},"core/sdk/CompilerSourceMappingContentProvider.ts | couldNotLoadContentForSS":{"message":"Could not load content for {PH1} ({PH2})"},"core/sdk/ConsoleModel.ts | bfcacheNavigation":{"message":"Navigation to {PH1} was restored from back/forward cache (see https://web.dev/bfcache/)"},"core/sdk/ConsoleModel.ts | failedToSaveToTempVariable":{"message":"Failed to save to temp variable."},"core/sdk/ConsoleModel.ts | navigatedToS":{"message":"Navigated to {PH1}"},"core/sdk/ConsoleModel.ts | profileSFinished":{"message":"Profile ''{PH1}'' finished."},"core/sdk/ConsoleModel.ts | profileSStarted":{"message":"Profile ''{PH1}'' started."},"core/sdk/CPUProfilerModel.ts | profileD":{"message":"Profile {PH1}"},"core/sdk/CSSStyleSheetHeader.ts | couldNotFindTheOriginalStyle":{"message":"Could not find the original style sheet."},"core/sdk/CSSStyleSheetHeader.ts | thereWasAnErrorRetrievingThe":{"message":"There was an error retrieving the source styles."},"core/sdk/DebuggerModel.ts | block":{"message":"Block"},"core/sdk/DebuggerModel.ts | catchBlock":{"message":"Catch block"},"core/sdk/DebuggerModel.ts | closure":{"message":"Closure"},"core/sdk/DebuggerModel.ts | expression":{"message":"Expression"},"core/sdk/DebuggerModel.ts | global":{"message":"Global"},"core/sdk/DebuggerModel.ts | local":{"message":"Local"},"core/sdk/DebuggerModel.ts | module":{"message":"Module"},"core/sdk/DebuggerModel.ts | script":{"message":"Script"},"core/sdk/DebuggerModel.ts | withBlock":{"message":"With block"},"core/sdk/NetworkManager.ts | fastG":{"message":"Fast 3G"},"core/sdk/NetworkManager.ts | noContentForPreflight":{"message":"No content available for preflight request"},"core/sdk/NetworkManager.ts | noContentForRedirect":{"message":"No content available because this request was redirected"},"core/sdk/NetworkManager.ts | noContentForWebSocket":{"message":"Content for WebSockets is currently not supported"},"core/sdk/NetworkManager.ts | noThrottling":{"message":"No throttling"},"core/sdk/NetworkManager.ts | offline":{"message":"Offline"},"core/sdk/NetworkManager.ts | requestWasBlockedByDevtoolsS":{"message":"Request was blocked by DevTools: \"{PH1}\""},"core/sdk/NetworkManager.ts | sFailedLoadingSS":{"message":"{PH1} failed loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | sFinishedLoadingSS":{"message":"{PH1} finished loading: {PH2} \"{PH3}\"."},"core/sdk/NetworkManager.ts | slowG":{"message":"Slow 3G"},"core/sdk/NetworkRequest.ts | anUnknownErrorWasEncounteredWhenTrying":{"message":"An unknown error was encountered when trying to store this cookie."},"core/sdk/NetworkRequest.ts | binary":{"message":"(binary)"},"core/sdk/NetworkRequest.ts | blockedReasonInvalidDomain":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because its Domain attribute was invalid with regards to the current host url."},"core/sdk/NetworkRequest.ts | blockedReasonInvalidPrefix":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it used the \"__Secure-\" or \"__Host-\" prefix in its name and broke the additional rules applied to cookies with these prefixes as defined in https://tools.ietf.org/html/draft-west-cookie-prefixes-05."},"core/sdk/NetworkRequest.ts | blockedReasonOverwriteSecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it was not sent over a secure connection and would have overwritten a cookie with the Secure attribute."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteNoneInsecure":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameSite=None\" attribute but did not have the \"Secure\" attribute, which is required in order to use \"SameSite=None\"."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation."},"core/sdk/NetworkRequest.ts | blockedReasonSameSiteUnspecifiedTreatedAsLax":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute and was defaulted to \"SameSite=Lax,\" and was blocked because it came from a cross-site response which was not the response to a top-level navigation. The Set-Cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | blockedReasonSecureOnly":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"Secure\" attribute but was not received over a secure connection."},"core/sdk/NetworkRequest.ts | domainMismatch":{"message":"This cookie was blocked because neither did the request URL's domain exactly match the cookie's domain, nor was the request URL's domain a subdomain of the cookie's Domain attribute value."},"core/sdk/NetworkRequest.ts | nameValuePairExceedsMaxSize":{"message":"This cookie was blocked because it was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | notOnPath":{"message":"This cookie was blocked because its path was not an exact match for or a superdirectory of the request url's path."},"core/sdk/NetworkRequest.ts | samePartyFromCrossPartyContext":{"message":"This cookie was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | sameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute and the request was made from a different site and was not initiated by a top-level navigation."},"core/sdk/NetworkRequest.ts | sameSiteNoneInsecure":{"message":"This cookie was blocked because it had the \"SameSite=None\" attribute but was not marked \"Secure\". Cookies without SameSite restrictions must be marked \"Secure\" and sent over a secure connection."},"core/sdk/NetworkRequest.ts | sameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute and the request was made from a different site. This includes top-level navigation requests initiated by other sites."},"core/sdk/NetworkRequest.ts | sameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored and was defaulted to \"SameSite=Lax,\" and was blocked because the request was made from a different site and was not initiated by a top-level navigation. The cookie had to have been set with \"SameSite=None\" to enable cross-site usage."},"core/sdk/NetworkRequest.ts | schemefulSameSiteLax":{"message":"This cookie was blocked because it had the \"SameSite=Lax\" attribute but the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteStrict":{"message":"This cookie was blocked because it had the \"SameSite=Strict\" attribute but the request was cross-site. This includes top-level navigation requests initiated by other sites. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | schemefulSameSiteUnspecifiedTreatedAsLax":{"message":"This cookie didn't specify a \"SameSite\" attribute when it was stored, was defaulted to \"SameSite=Lax\", and was blocked because the request was cross-site and was not initiated by a top-level navigation. This request is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | secureOnly":{"message":"This cookie was blocked because it had the \"Secure\" attribute and the connection was not secure."},"core/sdk/NetworkRequest.ts | setcookieHeaderIsIgnoredIn":{"message":"Set-Cookie header is ignored in response from url: {PH1}. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | theSchemeOfThisConnectionIsNot":{"message":"The scheme of this connection is not allowed to store cookies."},"core/sdk/NetworkRequest.ts | thirdPartyPhaseout":{"message":"This cookie was blocked due to third-party cookie phaseout. Learn more in the Issues tab."},"core/sdk/NetworkRequest.ts | thisSetcookieDidntSpecifyASamesite":{"message":"This Set-Cookie header didn't specify a \"SameSite\" attribute, was defaulted to \"SameSite=Lax\", and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieHadADisallowedCharacter":{"message":"This Set-Cookie header contained a disallowed character (a forbidden ASCII control character, or the tab character if it appears in the middle of the cookie name, value, an attribute name, or an attribute value)."},"core/sdk/NetworkRequest.ts | thisSetcookieHadInvalidSyntax":{"message":"This Set-Cookie header had invalid syntax."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSameparty":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but the request was cross-party. The request was considered cross-party because the domain of the resource's URL and the domains of the resource's enclosing frames/documents are neither owners nor members in the same First-Party Set."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamepartyAttribute":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"SameParty\" attribute but also had other conflicting attributes. Chrome requires cookies that use the \"SameParty\" attribute to also have the \"Secure\" attribute, and to not be restricted to \"SameSite=Strict\"."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseItHadTheSamesiteStrictLax":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because it had the \"{PH1}\" attribute but came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedBecauseTheNameValuePairExceedsMaxSize":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked because the cookie was too large. The combined size of the name and value must be less than or equal to 4096 characters."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueThirdPartyPhaseout":{"message":"Setting this cookie was blocked due to third-party cookie phaseout. Learn more in the Issues tab."},"core/sdk/NetworkRequest.ts | thisSetcookieWasBlockedDueToUser":{"message":"This attempt to set a cookie via a Set-Cookie header was blocked due to user preferences."},"core/sdk/NetworkRequest.ts | unknownError":{"message":"An unknown error was encountered when trying to send this cookie."},"core/sdk/NetworkRequest.ts | userPreferences":{"message":"This cookie was blocked due to user preferences."},"core/sdk/OverlayModel.ts | pausedInDebugger":{"message":"Paused in debugger"},"core/sdk/PageResourceLoader.ts | loadCanceledDueToReloadOf":{"message":"Load canceled due to reload of inspected page"},"core/sdk/Script.ts | scriptRemovedOrDeleted":{"message":"Script removed or deleted."},"core/sdk/Script.ts | unableToFetchScriptSource":{"message":"Unable to fetch script source."},"core/sdk/sdk-meta.ts | achromatopsia":{"message":"Achromatopsia (no color)"},"core/sdk/sdk-meta.ts | blurredVision":{"message":"Blurred vision"},"core/sdk/sdk-meta.ts | captureAsyncStackTraces":{"message":"Capture async stack traces"},"core/sdk/sdk-meta.ts | customFormatters":{"message":"Custom formatters"},"core/sdk/sdk-meta.ts | deuteranopia":{"message":"Deuteranopia (no green)"},"core/sdk/sdk-meta.ts | disableAsyncStackTraces":{"message":"Disable async stack traces"},"core/sdk/sdk-meta.ts | disableAvifFormat":{"message":"Disable AVIF format"},"core/sdk/sdk-meta.ts | disableCache":{"message":"Disable cache (while DevTools is open)"},"core/sdk/sdk-meta.ts | disableJavascript":{"message":"Disable JavaScript"},"core/sdk/sdk-meta.ts | disableLocalFonts":{"message":"Disable local fonts"},"core/sdk/sdk-meta.ts | disableNetworkRequestBlocking":{"message":"Disable network request blocking"},"core/sdk/sdk-meta.ts | disableWebpFormat":{"message":"Disable WebP format"},"core/sdk/sdk-meta.ts | doNotCaptureAsyncStackTraces":{"message":"Do not capture async stack traces"},"core/sdk/sdk-meta.ts | doNotEmulateAFocusedPage":{"message":"Do not emulate a focused page"},"core/sdk/sdk-meta.ts | doNotEmulateAnyVisionDeficiency":{"message":"Do not emulate any vision deficiency"},"core/sdk/sdk-meta.ts | doNotEmulateCss":{"message":"Do not emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | doNotEmulateCssMediaType":{"message":"Do not emulate CSS media type"},"core/sdk/sdk-meta.ts | doNotExtendGridLines":{"message":"Do not extend grid lines"},"core/sdk/sdk-meta.ts | doNotHighlightAdFrames":{"message":"Do not highlight ad frames"},"core/sdk/sdk-meta.ts | doNotPauseOnExceptions":{"message":"Do not pause on exceptions"},"core/sdk/sdk-meta.ts | doNotPreserveLogUponNavigation":{"message":"Do not preserve log upon navigation"},"core/sdk/sdk-meta.ts | doNotShowGridNamedAreas":{"message":"Do not show grid named areas"},"core/sdk/sdk-meta.ts | doNotShowGridTrackSizes":{"message":"Do not show grid track sizes"},"core/sdk/sdk-meta.ts | doNotShowRulersOnHover":{"message":"Do not show rulers on hover"},"core/sdk/sdk-meta.ts | emulateAchromatopsia":{"message":"Emulate achromatopsia (no color)"},"core/sdk/sdk-meta.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"core/sdk/sdk-meta.ts | emulateAutoDarkMode":{"message":"Emulate auto dark mode"},"core/sdk/sdk-meta.ts | emulateBlurredVision":{"message":"Emulate blurred vision"},"core/sdk/sdk-meta.ts | emulateCss":{"message":"Emulate CSS {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaFeature":{"message":"Emulate CSS media feature {PH1}"},"core/sdk/sdk-meta.ts | emulateCssMediaType":{"message":"Emulate CSS media type"},"core/sdk/sdk-meta.ts | emulateCssPrintMediaType":{"message":"Emulate CSS print media type"},"core/sdk/sdk-meta.ts | emulateCssScreenMediaType":{"message":"Emulate CSS screen media type"},"core/sdk/sdk-meta.ts | emulateDeuteranopia":{"message":"Emulate deuteranopia (no green)"},"core/sdk/sdk-meta.ts | emulateProtanopia":{"message":"Emulate protanopia (no red)"},"core/sdk/sdk-meta.ts | emulateReducedContrast":{"message":"Emulate reduced contrast"},"core/sdk/sdk-meta.ts | emulateTritanopia":{"message":"Emulate tritanopia (no blue)"},"core/sdk/sdk-meta.ts | emulateVisionDeficiencies":{"message":"Emulate vision deficiencies"},"core/sdk/sdk-meta.ts | enableAvifFormat":{"message":"Enable AVIF format"},"core/sdk/sdk-meta.ts | enableCache":{"message":"Enable cache"},"core/sdk/sdk-meta.ts | enableJavascript":{"message":"Enable JavaScript"},"core/sdk/sdk-meta.ts | enableLocalFonts":{"message":"Enable local fonts"},"core/sdk/sdk-meta.ts | enableNetworkRequestBlocking":{"message":"Enable network request blocking"},"core/sdk/sdk-meta.ts | enableRemoteFileLoading":{"message":"Allow DevTools to load resources, such as source maps, from remote file paths. Disabled by default for security reasons."},"core/sdk/sdk-meta.ts | enableWebpFormat":{"message":"Enable WebP format"},"core/sdk/sdk-meta.ts | extendGridLines":{"message":"Extend grid lines"},"core/sdk/sdk-meta.ts | hideCoreWebVitalsOverlay":{"message":"Hide Core Web Vitals overlay"},"core/sdk/sdk-meta.ts | hideFramesPerSecondFpsMeter":{"message":"Hide frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | hideLayerBorders":{"message":"Hide layer borders"},"core/sdk/sdk-meta.ts | hideLayoutShiftRegions":{"message":"Hide layout shift regions"},"core/sdk/sdk-meta.ts | hideLineLabels":{"message":"Hide line labels"},"core/sdk/sdk-meta.ts | hidePaintFlashingRectangles":{"message":"Hide paint flashing rectangles"},"core/sdk/sdk-meta.ts | hideScrollPerformanceBottlenecks":{"message":"Hide scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | highlightAdFrames":{"message":"Highlight ad frames"},"core/sdk/sdk-meta.ts | networkRequestBlocking":{"message":"Network request blocking"},"core/sdk/sdk-meta.ts | noEmulation":{"message":"No emulation"},"core/sdk/sdk-meta.ts | pauseOnExceptions":{"message":"Pause on exceptions"},"core/sdk/sdk-meta.ts | preserveLogUponNavigation":{"message":"Preserve log upon navigation"},"core/sdk/sdk-meta.ts | print":{"message":"print"},"core/sdk/sdk-meta.ts | protanopia":{"message":"Protanopia (no red)"},"core/sdk/sdk-meta.ts | query":{"message":"query"},"core/sdk/sdk-meta.ts | reducedContrast":{"message":"Reduced contrast"},"core/sdk/sdk-meta.ts | screen":{"message":"screen"},"core/sdk/sdk-meta.ts | showAreaNames":{"message":"Show area names"},"core/sdk/sdk-meta.ts | showCoreWebVitalsOverlay":{"message":"Show Core Web Vitals overlay"},"core/sdk/sdk-meta.ts | showFramesPerSecondFpsMeter":{"message":"Show frames per second (FPS) meter"},"core/sdk/sdk-meta.ts | showGridNamedAreas":{"message":"Show grid named areas"},"core/sdk/sdk-meta.ts | showGridTrackSizes":{"message":"Show grid track sizes"},"core/sdk/sdk-meta.ts | showLayerBorders":{"message":"Show layer borders"},"core/sdk/sdk-meta.ts | showLayoutShiftRegions":{"message":"Show layout shift regions"},"core/sdk/sdk-meta.ts | showLineLabels":{"message":"Show line labels"},"core/sdk/sdk-meta.ts | showLineNames":{"message":"Show line names"},"core/sdk/sdk-meta.ts | showLineNumbers":{"message":"Show line numbers"},"core/sdk/sdk-meta.ts | showPaintFlashingRectangles":{"message":"Show paint flashing rectangles"},"core/sdk/sdk-meta.ts | showRulersOnHover":{"message":"Show rulers on hover"},"core/sdk/sdk-meta.ts | showScrollPerformanceBottlenecks":{"message":"Show scroll performance bottlenecks"},"core/sdk/sdk-meta.ts | showTrackSizes":{"message":"Show track sizes"},"core/sdk/sdk-meta.ts | tritanopia":{"message":"Tritanopia (no blue)"},"core/sdk/ServerTiming.ts | deprecatedSyntaxFoundPleaseUse":{"message":"Deprecated syntax found. Please use: ;dur=;desc="},"core/sdk/ServerTiming.ts | duplicateParameterSIgnored":{"message":"Duplicate parameter \"{PH1}\" ignored."},"core/sdk/ServerTiming.ts | extraneousTrailingCharacters":{"message":"Extraneous trailing characters."},"core/sdk/ServerTiming.ts | noValueFoundForParameterS":{"message":"No value found for parameter \"{PH1}\"."},"core/sdk/ServerTiming.ts | unableToParseSValueS":{"message":"Unable to parse \"{PH1}\" value \"{PH2}\"."},"core/sdk/ServerTiming.ts | unrecognizedParameterS":{"message":"Unrecognized parameter \"{PH1}\"."},"core/sdk/ServiceWorkerCacheModel.ts | serviceworkercacheagentError":{"message":"ServiceWorkerCacheAgent error deleting cache entry {PH1} in cache: {PH2}"},"core/sdk/ServiceWorkerManager.ts | activated":{"message":"activated"},"core/sdk/ServiceWorkerManager.ts | activating":{"message":"activating"},"core/sdk/ServiceWorkerManager.ts | installed":{"message":"installed"},"core/sdk/ServiceWorkerManager.ts | installing":{"message":"installing"},"core/sdk/ServiceWorkerManager.ts | new":{"message":"new"},"core/sdk/ServiceWorkerManager.ts | redundant":{"message":"redundant"},"core/sdk/ServiceWorkerManager.ts | running":{"message":"running"},"core/sdk/ServiceWorkerManager.ts | sSS":{"message":"{PH1} #{PH2} ({PH3})"},"core/sdk/ServiceWorkerManager.ts | starting":{"message":"starting"},"core/sdk/ServiceWorkerManager.ts | stopped":{"message":"stopped"},"core/sdk/ServiceWorkerManager.ts | stopping":{"message":"stopping"},"entrypoints/inspector_main/inspector_main-meta.ts | autoOpenDevTools":{"message":"Auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | blockAds":{"message":"Block ads on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | colorVisionDeficiency":{"message":"color vision deficiency"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaFeature":{"message":"CSS media feature"},"entrypoints/inspector_main/inspector_main-meta.ts | cssMediaType":{"message":"CSS media type"},"entrypoints/inspector_main/inspector_main-meta.ts | disablePaused":{"message":"Disable paused state overlay"},"entrypoints/inspector_main/inspector_main-meta.ts | doNotAutoOpen":{"message":"Do not auto-open DevTools for popups"},"entrypoints/inspector_main/inspector_main-meta.ts | forceAdBlocking":{"message":"Force ad blocking on this site"},"entrypoints/inspector_main/inspector_main-meta.ts | fps":{"message":"fps"},"entrypoints/inspector_main/inspector_main-meta.ts | hardReloadPage":{"message":"Hard reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | layout":{"message":"layout"},"entrypoints/inspector_main/inspector_main-meta.ts | paint":{"message":"paint"},"entrypoints/inspector_main/inspector_main-meta.ts | reloadPage":{"message":"Reload page"},"entrypoints/inspector_main/inspector_main-meta.ts | rendering":{"message":"Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | showAds":{"message":"Show ads on this site, if allowed"},"entrypoints/inspector_main/inspector_main-meta.ts | showRendering":{"message":"Show Rendering"},"entrypoints/inspector_main/inspector_main-meta.ts | toggleCssPrefersColorSchemeMedia":{"message":"Toggle CSS media feature prefers-color-scheme"},"entrypoints/inspector_main/inspector_main-meta.ts | visionDeficiency":{"message":"vision deficiency"},"entrypoints/inspector_main/InspectorMain.ts | javascriptIsDisabled":{"message":"JavaScript is disabled"},"entrypoints/inspector_main/InspectorMain.ts | main":{"message":"Main"},"entrypoints/inspector_main/InspectorMain.ts | openDedicatedTools":{"message":"Open dedicated DevTools for Node.js"},"entrypoints/inspector_main/InspectorMain.ts | tab":{"message":"Tab"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetNotSelected":{"message":"Page: Not selected"},"entrypoints/inspector_main/OutermostTargetSelector.ts | targetS":{"message":"Page: {PH1}"},"entrypoints/inspector_main/RenderingOptions.ts | coreWebVitals":{"message":"Core Web Vitals"},"entrypoints/inspector_main/RenderingOptions.ts | disableAvifImageFormat":{"message":"Disable AVIF image format"},"entrypoints/inspector_main/RenderingOptions.ts | disableLocalFonts":{"message":"Disable local fonts"},"entrypoints/inspector_main/RenderingOptions.ts | disablesLocalSourcesInFontface":{"message":"Disables local() sources in @font-face rules. Requires a page reload to apply."},"entrypoints/inspector_main/RenderingOptions.ts | disableWebpImageFormat":{"message":"Disable WebP image format"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAFocusedPage":{"message":"Emulate a focused page"},"entrypoints/inspector_main/RenderingOptions.ts | emulateAutoDarkMode":{"message":"Enable automatic dark mode"},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAFocusedPage":{"message":"Keep page focused. Commonly used for debugging disappearing elements."},"entrypoints/inspector_main/RenderingOptions.ts | emulatesAutoDarkMode":{"message":"Enables automatic dark mode and sets prefers-color-scheme to dark."},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssColorgamutMediaFeature":{"message":"Forces CSS color-gamut media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssForcedColors":{"message":"Forces CSS forced-colors media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscolorschemeMedia":{"message":"Forces CSS prefers-color-scheme media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPreferscontrastMedia":{"message":"Forces CSS prefers-contrast media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreduceddataMedia":{"message":"Forces CSS prefers-reduced-data media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedmotion":{"message":"Forces CSS prefers-reduced-motion media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesCssPrefersreducedtransparencyMedia":{"message":"Forces CSS prefers-reduced-transparency media feature"},"entrypoints/inspector_main/RenderingOptions.ts | forcesMediaTypeForTestingPrint":{"message":"Forces media type for testing print and screen styles"},"entrypoints/inspector_main/RenderingOptions.ts | forcesVisionDeficiencyEmulation":{"message":"Forces vision deficiency emulation"},"entrypoints/inspector_main/RenderingOptions.ts | frameRenderingStats":{"message":"Frame Rendering Stats"},"entrypoints/inspector_main/RenderingOptions.ts | highlightAdFrames":{"message":"Highlight ad frames"},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageBlueThat":{"message":"Highlights areas of the page (blue) that were shifted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsAreasOfThePageGreen":{"message":"Highlights areas of the page (green) that need to be repainted. May not be suitable for people prone to photosensitive epilepsy."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsElementsTealThatCan":{"message":"Highlights elements (teal) that can slow down scrolling, including touch & wheel event handlers and other main-thread scrolling situations."},"entrypoints/inspector_main/RenderingOptions.ts | highlightsFramesRedDetectedToBe":{"message":"Highlights frames (red) detected to be ads."},"entrypoints/inspector_main/RenderingOptions.ts | layerBorders":{"message":"Layer borders"},"entrypoints/inspector_main/RenderingOptions.ts | layoutShiftRegions":{"message":"Layout Shift Regions"},"entrypoints/inspector_main/RenderingOptions.ts | paintFlashing":{"message":"Paint flashing"},"entrypoints/inspector_main/RenderingOptions.ts | plotsFrameThroughputDropped":{"message":"Plots frame throughput, dropped frames distribution, and GPU memory."},"entrypoints/inspector_main/RenderingOptions.ts | requiresAPageReloadToApplyAnd":{"message":"Requires a page reload to apply and disables caching for image requests."},"entrypoints/inspector_main/RenderingOptions.ts | scrollingPerformanceIssues":{"message":"Scrolling performance issues"},"entrypoints/inspector_main/RenderingOptions.ts | showsAnOverlayWithCoreWebVitals":{"message":"Shows an overlay with Core Web Vitals."},"entrypoints/inspector_main/RenderingOptions.ts | showsLayerBordersOrangeoliveAnd":{"message":"Shows layer borders (orange/olive) and tiles (cyan)."},"entrypoints/js_app/js_app.ts | main":{"message":"Main"},"entrypoints/js_app/js_app.ts | networkTitle":{"message":"Scripts"},"entrypoints/js_app/js_app.ts | showNode":{"message":"Show Scripts"},"entrypoints/main/main-meta.ts | auto":{"message":"auto"},"entrypoints/main/main-meta.ts | bottom":{"message":"Bottom"},"entrypoints/main/main-meta.ts | browserLanguage":{"message":"Browser UI language"},"entrypoints/main/main-meta.ts | cancelSearch":{"message":"Cancel search"},"entrypoints/main/main-meta.ts | darkCapital":{"message":"Dark"},"entrypoints/main/main-meta.ts | darkLower":{"message":"dark"},"entrypoints/main/main-meta.ts | devtoolsDefault":{"message":"DevTools (Default)"},"entrypoints/main/main-meta.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/main-meta.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/main-meta.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/main-meta.ts | enableCtrlShortcutToSwitchPanels":{"message":"Enable Ctrl + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableShortcutToSwitchPanels":{"message":"Enable ⌘ + 1-9 shortcut to switch panels"},"entrypoints/main/main-meta.ts | enableSync":{"message":"Enable settings sync"},"entrypoints/main/main-meta.ts | findNextResult":{"message":"Find next result"},"entrypoints/main/main-meta.ts | findPreviousResult":{"message":"Find previous result"},"entrypoints/main/main-meta.ts | focusDebuggee":{"message":"Focus page"},"entrypoints/main/main-meta.ts | horizontal":{"message":"horizontal"},"entrypoints/main/main-meta.ts | language":{"message":"Language:"},"entrypoints/main/main-meta.ts | left":{"message":"Left"},"entrypoints/main/main-meta.ts | lightCapital":{"message":"Light"},"entrypoints/main/main-meta.ts | lightLower":{"message":"light"},"entrypoints/main/main-meta.ts | nextPanel":{"message":"Next panel"},"entrypoints/main/main-meta.ts | panelLayout":{"message":"Panel layout:"},"entrypoints/main/main-meta.ts | previousPanel":{"message":"Previous panel"},"entrypoints/main/main-meta.ts | reloadDevtools":{"message":"Reload DevTools"},"entrypoints/main/main-meta.ts | resetZoomLevel":{"message":"Reset zoom level"},"entrypoints/main/main-meta.ts | restoreLastDockPosition":{"message":"Restore last dock position"},"entrypoints/main/main-meta.ts | right":{"message":"Right"},"entrypoints/main/main-meta.ts | searchAsYouTypeCommand":{"message":"Enable search as you type"},"entrypoints/main/main-meta.ts | searchAsYouTypeSetting":{"message":"Search as you type"},"entrypoints/main/main-meta.ts | searchInPanel":{"message":"Search in panel"},"entrypoints/main/main-meta.ts | searchOnEnterCommand":{"message":"Disable search as you type (press Enter to search)"},"entrypoints/main/main-meta.ts | switchToDarkTheme":{"message":"Switch to dark theme"},"entrypoints/main/main-meta.ts | switchToLightTheme":{"message":"Switch to light theme"},"entrypoints/main/main-meta.ts | switchToSystemPreferredColor":{"message":"Switch to system preferred color theme"},"entrypoints/main/main-meta.ts | systemPreference":{"message":"System preference"},"entrypoints/main/main-meta.ts | theme":{"message":"Theme:"},"entrypoints/main/main-meta.ts | toggleDrawer":{"message":"Toggle drawer"},"entrypoints/main/main-meta.ts | undocked":{"message":"Undocked"},"entrypoints/main/main-meta.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/main/main-meta.ts | useAutomaticPanelLayout":{"message":"Use automatic panel layout"},"entrypoints/main/main-meta.ts | useHorizontalPanelLayout":{"message":"Use horizontal panel layout"},"entrypoints/main/main-meta.ts | useVerticalPanelLayout":{"message":"Use vertical panel layout"},"entrypoints/main/main-meta.ts | vertical":{"message":"vertical"},"entrypoints/main/main-meta.ts | zoomIn":{"message":"Zoom in"},"entrypoints/main/main-meta.ts | zoomOut":{"message":"Zoom out"},"entrypoints/main/MainImpl.ts | customizeAndControlDevtools":{"message":"Customize and control DevTools"},"entrypoints/main/MainImpl.ts | dockSide":{"message":"Dock side"},"entrypoints/main/MainImpl.ts | dockSideNaviation":{"message":"Use left and right arrow keys to navigate the options"},"entrypoints/main/MainImpl.ts | dockToBottom":{"message":"Dock to bottom"},"entrypoints/main/MainImpl.ts | dockToLeft":{"message":"Dock to left"},"entrypoints/main/MainImpl.ts | dockToRight":{"message":"Dock to right"},"entrypoints/main/MainImpl.ts | focusDebuggee":{"message":"Focus page"},"entrypoints/main/MainImpl.ts | help":{"message":"Help"},"entrypoints/main/MainImpl.ts | hideConsoleDrawer":{"message":"Hide console drawer"},"entrypoints/main/MainImpl.ts | moreTools":{"message":"More tools"},"entrypoints/main/MainImpl.ts | placementOfDevtoolsRelativeToThe":{"message":"Placement of DevTools relative to the page. ({PH1} to restore last position)"},"entrypoints/main/MainImpl.ts | showConsoleDrawer":{"message":"Show console drawer"},"entrypoints/main/MainImpl.ts | undockIntoSeparateWindow":{"message":"Undock into separate window"},"entrypoints/node_app/node_app.ts | connection":{"message":"Connection"},"entrypoints/node_app/node_app.ts | networkTitle":{"message":"Node"},"entrypoints/node_app/node_app.ts | node":{"message":"node"},"entrypoints/node_app/node_app.ts | showConnection":{"message":"Show Connection"},"entrypoints/node_app/node_app.ts | showNode":{"message":"Show Node"},"entrypoints/node_app/NodeConnectionsPanel.ts | addConnection":{"message":"Add connection"},"entrypoints/node_app/NodeConnectionsPanel.ts | networkAddressEgLocalhost":{"message":"Network address (e.g. localhost:9229)"},"entrypoints/node_app/NodeConnectionsPanel.ts | noConnectionsSpecified":{"message":"No connections specified"},"entrypoints/node_app/NodeConnectionsPanel.ts | nodejsDebuggingGuide":{"message":"Node.js debugging guide"},"entrypoints/node_app/NodeConnectionsPanel.ts | specifyNetworkEndpointAnd":{"message":"Specify network endpoint and DevTools will connect to it automatically. Read {PH1} to learn more."},"entrypoints/node_app/NodeMain.ts | main":{"message":"Main"},"entrypoints/node_app/NodeMain.ts | nodejsS":{"message":"Node.js: {PH1}"},"entrypoints/worker_app/WorkerMain.ts | main":{"message":"Main"},"generated/Deprecation.ts | AuthorizationCoveredByWildcard":{"message":"Authorization will not be covered by the wildcard symbol (*) in CORS Access-Control-Allow-Headers handling."},"generated/Deprecation.ts | CanRequestURLHTTPContainingNewline":{"message":"Resource requests whose URLs contained both removed whitespace \\(n|r|t) characters and less-than characters (<) are blocked. Please remove newlines and encode less-than characters from places like element attribute values in order to load these resources."},"generated/Deprecation.ts | ChromeLoadTimesConnectionInfo":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Navigation Timing 2."},"generated/Deprecation.ts | ChromeLoadTimesFirstPaintAfterLoadTime":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: Paint Timing."},"generated/Deprecation.ts | ChromeLoadTimesWasAlternateProtocolAvailable":{"message":"chrome.loadTimes() is deprecated, instead use standardized API: nextHopProtocol in Navigation Timing 2."},"generated/Deprecation.ts | CookieWithTruncatingChar":{"message":"Cookies containing a \\(0|r|n) character will be rejected instead of truncated."},"generated/Deprecation.ts | CrossOriginAccessBasedOnDocumentDomain":{"message":"Relaxing the same-origin policy by setting document.domain is deprecated, and will be disabled by default. This deprecation warning is for a cross-origin access that was enabled by setting document.domain."},"generated/Deprecation.ts | CrossOriginWindowAlert":{"message":"Triggering window.alert from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | CrossOriginWindowConfirm":{"message":"Triggering window.confirm from cross origin iframes has been deprecated and will be removed in the future."},"generated/Deprecation.ts | CSSSelectorInternalMediaControlsOverlayCastButton":{"message":"The disableRemotePlayback attribute should be used in order to disable the default Cast integration instead of using -internal-media-controls-overlay-cast-button selector."},"generated/Deprecation.ts | CSSValueAppearanceNonStandard":{"message":"CSS appearance values inner-spin-button, media-slider, media-sliderthumb, media-volume-slider, media-volume-sliderthumb, push-button, searchfield-cancel-button, slider-horizontal, sliderthumb-horizontal, sliderthumb-vertical, square-button are not standardized and will be removed."},"generated/Deprecation.ts | CSSValueAppearanceSliderVertical":{"message":"CSS appearance value slider-vertical is not standardized and will be removed."},"generated/Deprecation.ts | DataUrlInSvgUse":{"message":"Support for data: URLs in SVGUseElement is deprecated and it will be removed in the future."},"generated/Deprecation.ts | DocumentDomainSettingWithoutOriginAgentClusterHeader":{"message":"Relaxing the same-origin policy by setting document.domain is deprecated, and will be disabled by default. To continue using this feature, please opt-out of origin-keyed agent clusters by sending an Origin-Agent-Cluster: ?0 header along with the HTTP response for the document and frames. See https://developer.chrome.com/blog/immutable-document-domain/ for more details."},"generated/Deprecation.ts | DOMMutationEvents":{"message":"DOM Mutation Events, including DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, DOMNodeRemovedFromDocument, DOMNodeInsertedIntoDocument, and DOMCharacterDataModified are deprecated (https://w3c.github.io/uievents/#legacy-event-types) and will be removed. Please use MutationObserver instead."},"generated/Deprecation.ts | GeolocationInsecureOrigin":{"message":"getCurrentPosition() and watchPosition() no longer work on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."},"generated/Deprecation.ts | GeolocationInsecureOriginDeprecatedNotRemoved":{"message":"getCurrentPosition() and watchPosition() are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."},"generated/Deprecation.ts | GetUserMediaInsecureOrigin":{"message":"getUserMedia() no longer works on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."},"generated/Deprecation.ts | HostCandidateAttributeGetter":{"message":"RTCPeerConnectionIceErrorEvent.hostCandidate is deprecated. Please use RTCPeerConnectionIceErrorEvent.address or RTCPeerConnectionIceErrorEvent.port instead."},"generated/Deprecation.ts | IdentityInCanMakePaymentEvent":{"message":"The merchant origin and arbitrary data from the canmakepayment service worker event are deprecated and will be removed: topOrigin, paymentRequestOrigin, methodData, modifiers."},"generated/Deprecation.ts | InsecurePrivateNetworkSubresourceRequest":{"message":"The website requested a subresource from a network that it could only access because of its users' privileged network position. These requests expose non-public devices and servers to the internet, increasing the risk of a cross-site request forgery (CSRF) attack, and/or information leakage. To mitigate these risks, Chrome deprecates requests to non-public subresources when initiated from non-secure contexts, and will start blocking them."},"generated/Deprecation.ts | InterestGroupDailyUpdateUrl":{"message":"The dailyUpdateUrl field of InterestGroups passed to joinAdInterestGroup() has been renamed to updateUrl, to more accurately reflect its behavior."},"generated/Deprecation.ts | LocalCSSFileExtensionRejected":{"message":"CSS cannot be loaded from file: URLs unless they end in a .css file extension."},"generated/Deprecation.ts | MediaSourceAbortRemove":{"message":"Using SourceBuffer.abort() to abort remove()'s asynchronous range removal is deprecated due to specification change. Support will be removed in the future. You should listen to the updateend event instead. abort() is intended to only abort an asynchronous media append or reset parser state."},"generated/Deprecation.ts | MediaSourceDurationTruncatingBuffered":{"message":"Setting MediaSource.duration below the highest presentation timestamp of any buffered coded frames is deprecated due to specification change. Support for implicit removal of truncated buffered media will be removed in the future. You should instead perform explicit remove(newDuration, oldDuration) on all sourceBuffers, where newDuration < oldDuration."},"generated/Deprecation.ts | NoSysexWebMIDIWithoutPermission":{"message":"Web MIDI will ask a permission to use even if the sysex is not specified in the MIDIOptions."},"generated/Deprecation.ts | NotificationInsecureOrigin":{"message":"The Notification API may no longer be used from insecure origins. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gle/chrome-insecure-origins for more details."},"generated/Deprecation.ts | NotificationPermissionRequestedIframe":{"message":"Permission for the Notification API may no longer be requested from a cross-origin iframe. You should consider requesting permission from a top-level frame or opening a new window instead."},"generated/Deprecation.ts | ObsoleteCreateImageBitmapImageOrientationNone":{"message":"Option imageOrientation: 'none' in createImageBitmap is deprecated. Please use createImageBitmap with option {imageOrientation: 'from-image'} instead."},"generated/Deprecation.ts | ObsoleteWebRtcCipherSuite":{"message":"Your partner is negotiating an obsolete (D)TLS version. Please check with your partner to have this fixed."},"generated/Deprecation.ts | OverflowVisibleOnReplacedElement":{"message":"Specifying overflow: visible on img, video and canvas tags may cause them to produce visual content outside of the element bounds. See https://github.com/WICG/shared-element-transitions/blob/main/debugging_overflow_on_images.md."},"generated/Deprecation.ts | PaymentInstruments":{"message":"paymentManager.instruments is deprecated. Please use just-in-time install for payment handlers instead."},"generated/Deprecation.ts | PaymentRequestCSPViolation":{"message":"Your PaymentRequest call bypassed Content-Security-Policy (CSP) connect-src directive. This bypass is deprecated. Please add the payment method identifier from the PaymentRequest API (in supportedMethods field) to your CSP connect-src directive."},"generated/Deprecation.ts | PersistentQuotaType":{"message":"StorageType.persistent is deprecated. Please use standardized navigator.storage instead."},"generated/Deprecation.ts | PictureSourceSrc":{"message":" with a parent is invalid and therefore ignored. Please use instead."},"generated/Deprecation.ts | PrefixedCancelAnimationFrame":{"message":"webkitCancelAnimationFrame is vendor-specific. Please use the standard cancelAnimationFrame instead."},"generated/Deprecation.ts | PrefixedRequestAnimationFrame":{"message":"webkitRequestAnimationFrame is vendor-specific. Please use the standard requestAnimationFrame instead."},"generated/Deprecation.ts | PrefixedVideoDisplayingFullscreen":{"message":"HTMLVideoElement.webkitDisplayingFullscreen is deprecated. Please use Document.fullscreenElement instead."},"generated/Deprecation.ts | PrefixedVideoEnterFullscreen":{"message":"HTMLVideoElement.webkitEnterFullscreen() is deprecated. Please use Element.requestFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoEnterFullScreen":{"message":"HTMLVideoElement.webkitEnterFullScreen() is deprecated. Please use Element.requestFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoExitFullscreen":{"message":"HTMLVideoElement.webkitExitFullscreen() is deprecated. Please use Document.exitFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoExitFullScreen":{"message":"HTMLVideoElement.webkitExitFullScreen() is deprecated. Please use Document.exitFullscreen() instead."},"generated/Deprecation.ts | PrefixedVideoSupportsFullscreen":{"message":"HTMLVideoElement.webkitSupportsFullscreen is deprecated. Please use Document.fullscreenEnabled instead."},"generated/Deprecation.ts | PrivacySandboxExtensionsAPI":{"message":"We're deprecating the API chrome.privacy.websites.privacySandboxEnabled, though it will remain active for backward compatibility until release M113. Instead, please use chrome.privacy.websites.topicsEnabled, chrome.privacy.websites.fledgeEnabled and chrome.privacy.websites.adMeasurementEnabled. See https://developer.chrome.com/docs/extensions/reference/privacy/#property-websites-privacySandboxEnabled."},"generated/Deprecation.ts | RangeExpand":{"message":"Range.expand() is deprecated. Please use Selection.modify() instead."},"generated/Deprecation.ts | RequestedSubresourceWithEmbeddedCredentials":{"message":"Subresource requests whose URLs contain embedded credentials (e.g. https://user:pass@host/) are blocked."},"generated/Deprecation.ts | RTCConstraintEnableDtlsSrtpFalse":{"message":"The constraint DtlsSrtpKeyAgreement is removed. You have specified a false value for this constraint, which is interpreted as an attempt to use the removed SDES key negotiation method. This functionality is removed; use a service that supports DTLS key negotiation instead."},"generated/Deprecation.ts | RTCConstraintEnableDtlsSrtpTrue":{"message":"The constraint DtlsSrtpKeyAgreement is removed. You have specified a true value for this constraint, which had no effect, but you can remove this constraint for tidiness."},"generated/Deprecation.ts | RTCPeerConnectionGetStatsLegacyNonCompliant":{"message":"The callback-based getStats() is deprecated and will be removed. Use the spec-compliant getStats() instead."},"generated/Deprecation.ts | RtcpMuxPolicyNegotiate":{"message":"The rtcpMuxPolicy option is deprecated and will be removed."},"generated/Deprecation.ts | SharedArrayBufferConstructedWithoutIsolation":{"message":"SharedArrayBuffer will require cross-origin isolation. See https://developer.chrome.com/blog/enabling-shared-array-buffer/ for more details."},"generated/Deprecation.ts | TextToSpeech_DisallowedByAutoplay":{"message":"speechSynthesis.speak() without user activation is deprecated and will be removed."},"generated/Deprecation.ts | UnloadHandler":{"message":"Unload event listeners are deprecated and will be removed."},"generated/Deprecation.ts | V8SharedArrayBufferConstructedInExtensionWithoutIsolation":{"message":"Extensions should opt into cross-origin isolation to continue using SharedArrayBuffer. See https://developer.chrome.com/docs/extensions/mv3/cross-origin-isolation/."},"generated/Deprecation.ts | WebSQL":{"message":"Web SQL is deprecated. Please use SQLite WebAssembly or Indexed Database"},"generated/Deprecation.ts | WindowPlacementPermissionDescriptorUsed":{"message":"The permission descriptor window-placement is deprecated. Use window-management instead. For more help, check https://bit.ly/window-placement-rename."},"generated/Deprecation.ts | WindowPlacementPermissionPolicyParsed":{"message":"The permission policy window-placement is deprecated. Use window-management instead. For more help, check https://bit.ly/window-placement-rename."},"generated/Deprecation.ts | XHRJSONEncodingDetection":{"message":"UTF-16 is not supported by response json in XMLHttpRequest"},"generated/Deprecation.ts | XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload":{"message":"Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/."},"generated/Deprecation.ts | XRSupportsSession":{"message":"supportsSession() is deprecated. Please use isSessionSupported() and check the resolved boolean value instead."},"models/bindings/ContentProviderBasedProject.ts | unknownErrorLoadingFile":{"message":"Unknown error loading file"},"models/bindings/DebuggerLanguagePlugins.ts | debugSymbolsIncomplete":{"message":"The debug information for function {PH1} is incomplete"},"models/bindings/DebuggerLanguagePlugins.ts | errorInDebuggerLanguagePlugin":{"message":"Error in debugger language plugin: {PH1}"},"models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsFor":{"message":"[{PH1}] Failed to load debug symbols for {PH2} ({PH3})"},"models/bindings/DebuggerLanguagePlugins.ts | failedToLoadDebugSymbolsForFunction":{"message":"No debug information for function \"{PH1}\""},"models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForButDidnt":{"message":"[{PH1}] Loaded debug symbols for {PH2}, but didn't find any source files"},"models/bindings/DebuggerLanguagePlugins.ts | loadedDebugSymbolsForFound":{"message":"[{PH1}] Loaded debug symbols for {PH2}, found {PH3} source file(s)"},"models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsFor":{"message":"[{PH1}] Loading debug symbols for {PH2}..."},"models/bindings/DebuggerLanguagePlugins.ts | loadingDebugSymbolsForVia":{"message":"[{PH1}] Loading debug symbols for {PH2} (via {PH3})..."},"models/bindings/IgnoreListManager.ts | addAllContentScriptsToIgnoreList":{"message":"Add all extension scripts to ignore list"},"models/bindings/IgnoreListManager.ts | addAllThirdPartyScriptsToIgnoreList":{"message":"Add all third-party scripts to ignore list"},"models/bindings/IgnoreListManager.ts | addDirectoryToIgnoreList":{"message":"Add directory to ignore list"},"models/bindings/IgnoreListManager.ts | addScriptToIgnoreList":{"message":"Add script to ignore list"},"models/bindings/IgnoreListManager.ts | removeFromIgnoreList":{"message":"Remove from ignore list"},"models/bindings/ResourceScriptMapping.ts | liveEditCompileFailed":{"message":"LiveEdit compile failed: {PH1}"},"models/bindings/ResourceScriptMapping.ts | liveEditFailed":{"message":"LiveEdit failed: {PH1}"},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeANumberOr":{"message":"Device pixel ratio must be a number or blank."},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeGreater":{"message":"Device pixel ratio must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | devicePixelRatioMustBeLessThanOr":{"message":"Device pixel ratio must be less than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | heightCannotBeEmpty":{"message":"Height cannot be empty."},"models/emulation/DeviceModeModel.ts | heightMustBeANumber":{"message":"Height must be a number."},"models/emulation/DeviceModeModel.ts | heightMustBeGreaterThanOrEqualTo":{"message":"Height must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | heightMustBeLessThanOrEqualToS":{"message":"Height must be less than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | widthCannotBeEmpty":{"message":"Width cannot be empty."},"models/emulation/DeviceModeModel.ts | widthMustBeANumber":{"message":"Width must be a number."},"models/emulation/DeviceModeModel.ts | widthMustBeGreaterThanOrEqualToS":{"message":"Width must be greater than or equal to {PH1}."},"models/emulation/DeviceModeModel.ts | widthMustBeLessThanOrEqualToS":{"message":"Width must be less than or equal to {PH1}."},"models/emulation/EmulatedDevices.ts | laptopWithHiDPIScreen":{"message":"Laptop with HiDPI screen"},"models/emulation/EmulatedDevices.ts | laptopWithMDPIScreen":{"message":"Laptop with MDPI screen"},"models/emulation/EmulatedDevices.ts | laptopWithTouch":{"message":"Laptop with touch"},"models/har/Writer.ts | collectingContent":{"message":"Collecting content…"},"models/har/Writer.ts | writingFile":{"message":"Writing file…"},"models/issues_manager/BounceTrackingIssue.ts | bounceTrackingMitigations":{"message":"Bounce tracking mitigations"},"models/issues_manager/ClientHintIssue.ts | clientHintsInfrastructure":{"message":"Client Hints Infrastructure"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyEval":{"message":"Content Security Policy - Eval"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicyInlineCode":{"message":"Content Security Policy - Inline Code"},"models/issues_manager/ContentSecurityPolicyIssue.ts | contentSecurityPolicySource":{"message":"Content Security Policy - Source Allowlists"},"models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesFixViolations":{"message":"Trusted Types - Fix violations"},"models/issues_manager/ContentSecurityPolicyIssue.ts | trustedTypesPolicyViolation":{"message":"Trusted Types - Policy violation"},"models/issues_manager/CookieDeprecationMetadataIssue.ts | thirdPartyPhaseoutExplained":{"message":"Prepare for phasing out third-party cookies"},"models/issues_manager/CookieIssue.ts | anInsecure":{"message":"an insecure"},"models/issues_manager/CookieIssue.ts | aSecure":{"message":"a secure"},"models/issues_manager/CookieIssue.ts | fileCrosSiteRedirectBug":{"message":"File a bug"},"models/issues_manager/CookieIssue.ts | firstPartySetsExplained":{"message":"First-Party Sets and the SameParty attribute"},"models/issues_manager/CookieIssue.ts | howSchemefulSamesiteWorks":{"message":"How Schemeful Same-Site Works"},"models/issues_manager/CookieIssue.ts | samesiteCookiesExplained":{"message":"SameSite cookies explained"},"models/issues_manager/CookieIssue.ts | thirdPartyPhaseoutExplained":{"message":"Prepare for phasing out third-party cookies"},"models/issues_manager/CorsIssue.ts | CORS":{"message":"Cross-Origin Resource Sharing (CORS)"},"models/issues_manager/CorsIssue.ts | corsPrivateNetworkAccess":{"message":"Private Network Access"},"models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | coopAndCoep":{"message":"COOP and COEP"},"models/issues_manager/CrossOriginEmbedderPolicyIssue.ts | samesiteAndSameorigin":{"message":"Same-Site and Same-Origin"},"models/issues_manager/DeprecationIssue.ts | feature":{"message":"Check the feature status page for more details."},"models/issues_manager/DeprecationIssue.ts | milestone":{"message":"This change will go into effect with milestone {milestone}."},"models/issues_manager/DeprecationIssue.ts | title":{"message":"Deprecated feature used"},"models/issues_manager/FederatedAuthRequestIssue.ts | fedCm":{"message":"Federated Credential Management API"},"models/issues_manager/FederatedAuthUserInfoRequestIssue.ts | fedCmUserInfo":{"message":"Federated Credential Management User Info API"},"models/issues_manager/GenericIssue.ts | autocompleteAttributePageTitle":{"message":"HTML attribute: autocomplete"},"models/issues_manager/GenericIssue.ts | corbExplainerPageTitle":{"message":"CORB explainer"},"models/issues_manager/GenericIssue.ts | crossOriginPortalPostMessage":{"message":"Portals - Same-origin communication channels"},"models/issues_manager/GenericIssue.ts | howDoesAutofillWorkPageTitle":{"message":"How does autofill work?"},"models/issues_manager/GenericIssue.ts | inputFormElementPageTitle":{"message":"The form input element"},"models/issues_manager/GenericIssue.ts | labelFormlementsPageTitle":{"message":"The label elements"},"models/issues_manager/HeavyAdIssue.ts | handlingHeavyAdInterventions":{"message":"Handling Heavy Ad Interventions"},"models/issues_manager/Issue.ts | breakingChangeIssue":{"message":"A breaking change issue: the page may stop working in an upcoming version of Chrome"},"models/issues_manager/Issue.ts | breakingChanges":{"message":"Breaking Changes"},"models/issues_manager/Issue.ts | improvementIssue":{"message":"An improvement issue: there is an opportunity to improve the page"},"models/issues_manager/Issue.ts | improvements":{"message":"Improvements"},"models/issues_manager/Issue.ts | pageErrorIssue":{"message":"A page error issue: the page is not working correctly"},"models/issues_manager/Issue.ts | pageErrors":{"message":"Page Errors"},"models/issues_manager/LowTextContrastIssue.ts | colorAndContrastAccessibility":{"message":"Color and contrast accessibility"},"models/issues_manager/MixedContentIssue.ts | preventingMixedContent":{"message":"Preventing mixed content"},"models/issues_manager/QuirksModeIssue.ts | documentCompatibilityMode":{"message":"Document compatibility mode"},"models/issues_manager/SharedArrayBufferIssue.ts | enablingSharedArrayBuffer":{"message":"Enabling SharedArrayBuffer"},"models/logs/logs-meta.ts | clear":{"message":"clear"},"models/logs/logs-meta.ts | doNotPreserveLogOnPageReload":{"message":"Do not preserve log on page reload / navigation"},"models/logs/logs-meta.ts | preserve":{"message":"preserve"},"models/logs/logs-meta.ts | preserveLog":{"message":"Preserve log"},"models/logs/logs-meta.ts | preserveLogOnPageReload":{"message":"Preserve log on page reload / navigation"},"models/logs/logs-meta.ts | recordNetworkLog":{"message":"Record network log"},"models/logs/logs-meta.ts | reset":{"message":"reset"},"models/logs/NetworkLog.ts | anonymous":{"message":""},"models/persistence/EditFileSystemView.ts | add":{"message":"Add"},"models/persistence/EditFileSystemView.ts | enterAPath":{"message":"Enter a path"},"models/persistence/EditFileSystemView.ts | enterAUniquePath":{"message":"Enter a unique path"},"models/persistence/EditFileSystemView.ts | excludedFolders":{"message":"Excluded folders"},"models/persistence/EditFileSystemView.ts | folderPath":{"message":"Folder path"},"models/persistence/EditFileSystemView.ts | none":{"message":"None"},"models/persistence/EditFileSystemView.ts | sViaDevtools":{"message":"{PH1} (via .devtools)"},"models/persistence/IsolatedFileSystem.ts | blobCouldNotBeLoaded":{"message":"Blob could not be loaded."},"models/persistence/IsolatedFileSystem.ts | cantReadFileSS":{"message":"Can't read file: {PH1}: {PH2}"},"models/persistence/IsolatedFileSystem.ts | fileSystemErrorS":{"message":"File system error: {PH1}"},"models/persistence/IsolatedFileSystem.ts | linkedToS":{"message":"Linked to {PH1}"},"models/persistence/IsolatedFileSystem.ts | unknownErrorReadingFileS":{"message":"Unknown error reading file: {PH1}"},"models/persistence/IsolatedFileSystemManager.ts | unableToAddFilesystemS":{"message":"Unable to add filesystem: {PH1}"},"models/persistence/persistence-meta.ts | disableOverrideNetworkRequests":{"message":"Disable override network requests"},"models/persistence/persistence-meta.ts | enableLocalOverrides":{"message":"Enable Local Overrides"},"models/persistence/persistence-meta.ts | enableOverrideNetworkRequests":{"message":"Enable override network requests"},"models/persistence/persistence-meta.ts | interception":{"message":"interception"},"models/persistence/persistence-meta.ts | network":{"message":"network"},"models/persistence/persistence-meta.ts | override":{"message":"override"},"models/persistence/persistence-meta.ts | request":{"message":"request"},"models/persistence/persistence-meta.ts | rewrite":{"message":"rewrite"},"models/persistence/persistence-meta.ts | showWorkspace":{"message":"Show Workspace settings"},"models/persistence/persistence-meta.ts | workspace":{"message":"Workspace"},"models/persistence/PersistenceActions.ts | openInContainingFolder":{"message":"Open in containing folder"},"models/persistence/PersistenceActions.ts | overrideContent":{"message":"Override content"},"models/persistence/PersistenceActions.ts | overrideSourceMappedFileExplanation":{"message":"‘{PH1}’ is a source mapped file and cannot be overridden."},"models/persistence/PersistenceActions.ts | overrideSourceMappedFileWarning":{"message":"Override ‘{PH1}’ instead?"},"models/persistence/PersistenceActions.ts | saveAs":{"message":"Save as..."},"models/persistence/PersistenceActions.ts | saveImage":{"message":"Save image"},"models/persistence/PersistenceActions.ts | showOverrides":{"message":"Show all overrides"},"models/persistence/PersistenceUtils.ts | linkedToS":{"message":"Linked to {PH1}"},"models/persistence/PersistenceUtils.ts | linkedToSourceMapS":{"message":"Linked to source map: {PH1}"},"models/persistence/PlatformFileSystem.ts | unableToReadFilesWithThis":{"message":"PlatformFileSystem cannot read files."},"models/persistence/WorkspaceSettingsTab.ts | addFolder":{"message":"Add folder…"},"models/persistence/WorkspaceSettingsTab.ts | folderExcludePattern":{"message":"Folder exclude pattern"},"models/persistence/WorkspaceSettingsTab.ts | mappingsAreInferredAutomatically":{"message":"Mappings are inferred automatically."},"models/persistence/WorkspaceSettingsTab.ts | remove":{"message":"Remove"},"models/persistence/WorkspaceSettingsTab.ts | workspace":{"message":"Workspace"},"models/timeline_model/TimelineJSProfile.ts | threadS":{"message":"Thread {PH1}"},"models/timeline_model/TimelineModel.ts | dedicatedWorker":{"message":"Dedicated Worker"},"models/timeline_model/TimelineModel.ts | threadS":{"message":"Thread {PH1}"},"models/timeline_model/TimelineModel.ts | workerS":{"message":"Worker — {PH1}"},"models/timeline_model/TimelineModel.ts | workerSS":{"message":"Worker: {PH1} — {PH2}"},"models/workspace/UISourceCode.ts | index":{"message":"(index)"},"models/workspace/UISourceCode.ts | thisFileWasChangedExternally":{"message":"This file was changed externally. Would you like to reload it?"},"panels/accessibility/accessibility-meta.ts | accessibility":{"message":"Accessibility"},"panels/accessibility/accessibility-meta.ts | shoAccessibility":{"message":"Show Accessibility"},"panels/accessibility/AccessibilityNodeView.ts | accessibilityNodeNotExposed":{"message":"Accessibility node not exposed"},"panels/accessibility/AccessibilityNodeView.ts | ancestorChildrenAreAll":{"message":"Ancestor's children are all presentational: "},"panels/accessibility/AccessibilityNodeView.ts | computedProperties":{"message":"Computed Properties"},"panels/accessibility/AccessibilityNodeView.ts | elementHasEmptyAltText":{"message":"Element has empty alt text."},"panels/accessibility/AccessibilityNodeView.ts | elementHasPlaceholder":{"message":"Element has {PH1}."},"panels/accessibility/AccessibilityNodeView.ts | elementIsHiddenBy":{"message":"Element is hidden by active modal dialog: "},"panels/accessibility/AccessibilityNodeView.ts | elementIsHiddenByChildTree":{"message":"Element is hidden by child tree: "},"panels/accessibility/AccessibilityNodeView.ts | elementIsInAnInertSubTree":{"message":"Element is in an inert subtree from "},"panels/accessibility/AccessibilityNodeView.ts | elementIsInert":{"message":"Element is inert."},"panels/accessibility/AccessibilityNodeView.ts | elementIsNotRendered":{"message":"Element is not rendered."},"panels/accessibility/AccessibilityNodeView.ts | elementIsNotVisible":{"message":"Element is not visible."},"panels/accessibility/AccessibilityNodeView.ts | elementIsPlaceholder":{"message":"Element is {PH1}."},"panels/accessibility/AccessibilityNodeView.ts | elementIsPresentational":{"message":"Element is presentational."},"panels/accessibility/AccessibilityNodeView.ts | elementNotInteresting":{"message":"Element not interesting for accessibility."},"panels/accessibility/AccessibilityNodeView.ts | elementsInheritsPresentational":{"message":"Element inherits presentational role from "},"panels/accessibility/AccessibilityNodeView.ts | invalidSource":{"message":"Invalid source."},"panels/accessibility/AccessibilityNodeView.ts | labelFor":{"message":"Label for "},"panels/accessibility/AccessibilityNodeView.ts | noAccessibilityNode":{"message":"No accessibility node"},"panels/accessibility/AccessibilityNodeView.ts | noNodeWithThisId":{"message":"No node with this ID."},"panels/accessibility/AccessibilityNodeView.ts | noTextContent":{"message":"No text content."},"panels/accessibility/AccessibilityNodeView.ts | notSpecified":{"message":"Not specified"},"panels/accessibility/AccessibilityNodeView.ts | partOfLabelElement":{"message":"Part of label element: "},"panels/accessibility/AccessibilityNodeView.ts | placeholderIsPlaceholderOnAncestor":{"message":"{PH1} is {PH2} on ancestor: "},"panels/accessibility/AccessibilityStrings.ts | activeDescendant":{"message":"Active descendant"},"panels/accessibility/AccessibilityStrings.ts | aHumanreadableVersionOfTheValue":{"message":"A human-readable version of the value of a range widget (where necessary)."},"panels/accessibility/AccessibilityStrings.ts | atomicLiveRegions":{"message":"Atomic (live regions)"},"panels/accessibility/AccessibilityStrings.ts | busyLiveRegions":{"message":"Busy (live regions)"},"panels/accessibility/AccessibilityStrings.ts | canSetValue":{"message":"Can set value"},"panels/accessibility/AccessibilityStrings.ts | checked":{"message":"Checked"},"panels/accessibility/AccessibilityStrings.ts | contents":{"message":"Contents"},"panels/accessibility/AccessibilityStrings.ts | controls":{"message":"Controls"},"panels/accessibility/AccessibilityStrings.ts | describedBy":{"message":"Described by"},"panels/accessibility/AccessibilityStrings.ts | description":{"message":"Description"},"panels/accessibility/AccessibilityStrings.ts | disabled":{"message":"Disabled"},"panels/accessibility/AccessibilityStrings.ts | editable":{"message":"Editable"},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichFormThe":{"message":"Element or elements which form the description of this element."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichMayFormThe":{"message":"Element or elements which may form the name of this element."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhichShouldBe":{"message":"Element or elements which should be considered descendants of this element, despite not being descendants in the DOM."},"panels/accessibility/AccessibilityStrings.ts | elementOrElementsWhoseContentOr":{"message":"Element or elements whose content or presence is/are controlled by this widget."},"panels/accessibility/AccessibilityStrings.ts | elementToWhichTheUserMayChooseTo":{"message":"Element to which the user may choose to navigate after this one, instead of the next element in the DOM order."},"panels/accessibility/AccessibilityStrings.ts | expanded":{"message":"Expanded"},"panels/accessibility/AccessibilityStrings.ts | focusable":{"message":"Focusable"},"panels/accessibility/AccessibilityStrings.ts | focused":{"message":"Focused"},"panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMaximumAllowed":{"message":"For a range widget, the maximum allowed value."},"panels/accessibility/AccessibilityStrings.ts | forARangeWidgetTheMinimumAllowed":{"message":"For a range widget, the minimum allowed value."},"panels/accessibility/AccessibilityStrings.ts | fromAttribute":{"message":"From attribute"},"panels/accessibility/AccessibilityStrings.ts | fromCaption":{"message":"From caption"},"panels/accessibility/AccessibilityStrings.ts | fromDescription":{"message":"From description"},"panels/accessibility/AccessibilityStrings.ts | fromLabel":{"message":"From label"},"panels/accessibility/AccessibilityStrings.ts | fromLabelFor":{"message":"From label (for= attribute)"},"panels/accessibility/AccessibilityStrings.ts | fromLabelWrapped":{"message":"From label (wrapped)"},"panels/accessibility/AccessibilityStrings.ts | fromLegend":{"message":"From legend"},"panels/accessibility/AccessibilityStrings.ts | fromNativeHtml":{"message":"From native HTML"},"panels/accessibility/AccessibilityStrings.ts | fromPlaceholderAttribute":{"message":"From placeholder attribute"},"panels/accessibility/AccessibilityStrings.ts | fromRubyAnnotation":{"message":"From ruby annotation"},"panels/accessibility/AccessibilityStrings.ts | fromStyle":{"message":"From style"},"panels/accessibility/AccessibilityStrings.ts | fromTitle":{"message":"From title"},"panels/accessibility/AccessibilityStrings.ts | hasAutocomplete":{"message":"Has autocomplete"},"panels/accessibility/AccessibilityStrings.ts | hasPopup":{"message":"Has popup"},"panels/accessibility/AccessibilityStrings.ts | help":{"message":"Help"},"panels/accessibility/AccessibilityStrings.ts | ifAndHowThisElementCanBeEdited":{"message":"If and how this element can be edited."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLive":{"message":"If this element may receive live updates, whether the entire live region should be presented to the user on changes, or only changed nodes."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdates":{"message":"If this element may receive live updates, what type of updates should trigger a notification."},"panels/accessibility/AccessibilityStrings.ts | ifThisElementMayReceiveLiveUpdatesThe":{"message":"If this element may receive live updates, the root element of the containing live region."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCanReceiveFocus":{"message":"If true, this element can receive focus."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyCannot":{"message":"If true, this element currently cannot be interacted with."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementCurrentlyHas":{"message":"If true, this element currently has focus."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementMayBeInteracted":{"message":"If true, this element may be interacted with, but its value cannot be changed."},"panels/accessibility/AccessibilityStrings.ts | ifTrueThisElementsUserentered":{"message":"If true, this element's user-entered value does not conform to validation requirement."},"panels/accessibility/AccessibilityStrings.ts | implicit":{"message":"Implicit"},"panels/accessibility/AccessibilityStrings.ts | implicitValue":{"message":"Implicit value."},"panels/accessibility/AccessibilityStrings.ts | indicatesThePurposeOfThisElement":{"message":"Indicates the purpose of this element, such as a user interface idiom for a widget, or structural role within a document."},"panels/accessibility/AccessibilityStrings.ts | invalidUserEntry":{"message":"Invalid user entry"},"panels/accessibility/AccessibilityStrings.ts | labeledBy":{"message":"Labeled by"},"panels/accessibility/AccessibilityStrings.ts | level":{"message":"Level"},"panels/accessibility/AccessibilityStrings.ts | liveRegion":{"message":"Live region"},"panels/accessibility/AccessibilityStrings.ts | liveRegionRoot":{"message":"Live region root"},"panels/accessibility/AccessibilityStrings.ts | maximumValue":{"message":"Maximum value"},"panels/accessibility/AccessibilityStrings.ts | minimumValue":{"message":"Minimum value"},"panels/accessibility/AccessibilityStrings.ts | multiline":{"message":"Multi-line"},"panels/accessibility/AccessibilityStrings.ts | multiselectable":{"message":"Multi-selectable"},"panels/accessibility/AccessibilityStrings.ts | orientation":{"message":"Orientation"},"panels/accessibility/AccessibilityStrings.ts | pressed":{"message":"Pressed"},"panels/accessibility/AccessibilityStrings.ts | readonlyString":{"message":"Read-only"},"panels/accessibility/AccessibilityStrings.ts | relatedElement":{"message":"Related element"},"panels/accessibility/AccessibilityStrings.ts | relevantLiveRegions":{"message":"Relevant (live regions)"},"panels/accessibility/AccessibilityStrings.ts | requiredString":{"message":"Required"},"panels/accessibility/AccessibilityStrings.ts | role":{"message":"Role"},"panels/accessibility/AccessibilityStrings.ts | selectedString":{"message":"Selected"},"panels/accessibility/AccessibilityStrings.ts | theAccessibleDescriptionForThis":{"message":"The accessible description for this element."},"panels/accessibility/AccessibilityStrings.ts | theComputedHelpTextForThis":{"message":"The computed help text for this element."},"panels/accessibility/AccessibilityStrings.ts | theComputedNameOfThisElement":{"message":"The computed name of this element."},"panels/accessibility/AccessibilityStrings.ts | theDescendantOfThisElementWhich":{"message":"The descendant of this element which is active; i.e. the element to which focus should be delegated."},"panels/accessibility/AccessibilityStrings.ts | theHierarchicalLevelOfThis":{"message":"The hierarchical level of this element."},"panels/accessibility/AccessibilityStrings.ts | theValueOfThisElementThisMayBe":{"message":"The value of this element; this may be user-provided or developer-provided, depending on the element."},"panels/accessibility/AccessibilityStrings.ts | value":{"message":"Value"},"panels/accessibility/AccessibilityStrings.ts | valueDescription":{"message":"Value description"},"panels/accessibility/AccessibilityStrings.ts | valueFromAttribute":{"message":"Value from attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromDescriptionElement":{"message":"Value from description element."},"panels/accessibility/AccessibilityStrings.ts | valueFromElementContents":{"message":"Value from element contents."},"panels/accessibility/AccessibilityStrings.ts | valueFromFigcaptionElement":{"message":"Value from figcaption element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElement":{"message":"Value from label element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWithFor":{"message":"Value from label element with for= attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromLabelElementWrapped":{"message":"Value from a wrapping label element."},"panels/accessibility/AccessibilityStrings.ts | valueFromLegendElement":{"message":"Value from legend element."},"panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlRuby":{"message":"Value from plain HTML ruby annotation."},"panels/accessibility/AccessibilityStrings.ts | valueFromNativeHtmlUnknownSource":{"message":"Value from native HTML (unknown source)."},"panels/accessibility/AccessibilityStrings.ts | valueFromPlaceholderAttribute":{"message":"Value from placeholder attribute."},"panels/accessibility/AccessibilityStrings.ts | valueFromRelatedElement":{"message":"Value from related element."},"panels/accessibility/AccessibilityStrings.ts | valueFromStyle":{"message":"Value from style."},"panels/accessibility/AccessibilityStrings.ts | valueFromTableCaption":{"message":"Value from table caption."},"panels/accessibility/AccessibilityStrings.ts | valueFromTitleAttribute":{"message":"Value from title attribute."},"panels/accessibility/AccessibilityStrings.ts | whetherAndWhatPriorityOfLive":{"message":"Whether and what priority of live updates may be expected for this element."},"panels/accessibility/AccessibilityStrings.ts | whetherAndWhatTypeOfAutocomplete":{"message":"Whether and what type of autocomplete suggestions are currently provided by this element."},"panels/accessibility/AccessibilityStrings.ts | whetherAUserMaySelectMoreThanOne":{"message":"Whether a user may select more than one option from this widget."},"panels/accessibility/AccessibilityStrings.ts | whetherTheOptionRepresentedBy":{"message":"Whether the option represented by this element is currently selected."},"panels/accessibility/AccessibilityStrings.ts | whetherTheValueOfThisElementCan":{"message":"Whether the value of this element can be set."},"panels/accessibility/AccessibilityStrings.ts | whetherThisCheckboxRadioButtonOr":{"message":"Whether this checkbox, radio button or tree item is checked, unchecked, or mixed (e.g. has both checked and un-checked children)."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementHasCausedSome":{"message":"Whether this element has caused some kind of pop-up (such as a menu) to appear."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementIsARequired":{"message":"Whether this element is a required field in a form."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrAnother":{"message":"Whether this element, or another grouping element it controls, is expanded."},"panels/accessibility/AccessibilityStrings.ts | whetherThisElementOrItsSubtree":{"message":"Whether this element or its subtree are currently being updated (and thus may be in an inconsistent state)."},"panels/accessibility/AccessibilityStrings.ts | whetherThisLinearElements":{"message":"Whether this linear element's orientation is horizontal or vertical."},"panels/accessibility/AccessibilityStrings.ts | whetherThisTextBoxMayHaveMore":{"message":"Whether this text box may have more than one line."},"panels/accessibility/AccessibilityStrings.ts | whetherThisToggleButtonIs":{"message":"Whether this toggle button is currently in a pressed state."},"panels/accessibility/ARIAAttributesView.ts | ariaAttributes":{"message":"ARIA Attributes"},"panels/accessibility/ARIAAttributesView.ts | noAriaAttributes":{"message":"No ARIA attributes"},"panels/accessibility/AXBreadcrumbsPane.ts | accessibilityTree":{"message":"Accessibility Tree"},"panels/accessibility/AXBreadcrumbsPane.ts | fullTreeExperimentDescription":{"message":"The accessibility tree moved to the top right corner of the DOM tree."},"panels/accessibility/AXBreadcrumbsPane.ts | fullTreeExperimentName":{"message":"Enable full-page accessibility tree"},"panels/accessibility/AXBreadcrumbsPane.ts | ignored":{"message":"Ignored"},"panels/accessibility/AXBreadcrumbsPane.ts | reloadRequired":{"message":"Reload required before the change takes effect."},"panels/accessibility/AXBreadcrumbsPane.ts | scrollIntoView":{"message":"Scroll into view"},"panels/accessibility/SourceOrderView.ts | noSourceOrderInformation":{"message":"No source order information available"},"panels/accessibility/SourceOrderView.ts | showSourceOrder":{"message":"Show source order"},"panels/accessibility/SourceOrderView.ts | sourceOrderViewer":{"message":"Source Order Viewer"},"panels/accessibility/SourceOrderView.ts | thereMayBeADelayInDisplaying":{"message":"There may be a delay in displaying source order for elements with many children"},"panels/animation/animation-meta.ts | animations":{"message":"Animations"},"panels/animation/animation-meta.ts | showAnimations":{"message":"Show Animations"},"panels/animation/AnimationTimeline.ts | animationPreviews":{"message":"Animation previews"},"panels/animation/AnimationTimeline.ts | animationPreviewS":{"message":"Animation Preview {PH1}"},"panels/animation/AnimationTimeline.ts | clearAll":{"message":"Clear all"},"panels/animation/AnimationTimeline.ts | pause":{"message":"Pause"},"panels/animation/AnimationTimeline.ts | pauseAll":{"message":"Pause all"},"panels/animation/AnimationTimeline.ts | pauseTimeline":{"message":"Pause timeline"},"panels/animation/AnimationTimeline.ts | playbackRatePlaceholder":{"message":"{PH1}%"},"panels/animation/AnimationTimeline.ts | playbackRates":{"message":"Playback rates"},"panels/animation/AnimationTimeline.ts | playTimeline":{"message":"Play timeline"},"panels/animation/AnimationTimeline.ts | replayTimeline":{"message":"Replay timeline"},"panels/animation/AnimationTimeline.ts | resumeAll":{"message":"Resume all"},"panels/animation/AnimationTimeline.ts | selectAnEffectAboveToInspectAnd":{"message":"Select an effect above to inspect and modify."},"panels/animation/AnimationTimeline.ts | setSpeedToS":{"message":"Set speed to {PH1}"},"panels/animation/AnimationTimeline.ts | waitingForAnimations":{"message":"Waiting for animations..."},"panels/animation/AnimationUI.ts | animationEndpointSlider":{"message":"Animation Endpoint slider"},"panels/animation/AnimationUI.ts | animationKeyframeSlider":{"message":"Animation Keyframe slider"},"panels/animation/AnimationUI.ts | sSlider":{"message":"{PH1} slider"},"panels/application/application-meta.ts | application":{"message":"Application"},"panels/application/application-meta.ts | clearSiteData":{"message":"Clear site data"},"panels/application/application-meta.ts | clearSiteDataIncludingThirdparty":{"message":"Clear site data (including third-party cookies)"},"panels/application/application-meta.ts | pwa":{"message":"pwa"},"panels/application/application-meta.ts | showApplication":{"message":"Show Application"},"panels/application/application-meta.ts | startRecordingEvents":{"message":"Start recording events"},"panels/application/application-meta.ts | stopRecordingEvents":{"message":"Stop recording events"},"panels/application/ApplicationPanelSidebar.ts | application":{"message":"Application"},"panels/application/ApplicationPanelSidebar.ts | applicationSidebarPanel":{"message":"Application panel sidebar"},"panels/application/ApplicationPanelSidebar.ts | appManifest":{"message":"App Manifest"},"panels/application/ApplicationPanelSidebar.ts | backgroundServices":{"message":"Background services"},"panels/application/ApplicationPanelSidebar.ts | beforeInvokeAlert":{"message":"{PH1}: Invoke to scroll to this section in manifest"},"panels/application/ApplicationPanelSidebar.ts | clear":{"message":"Clear"},"panels/application/ApplicationPanelSidebar.ts | cookies":{"message":"Cookies"},"panels/application/ApplicationPanelSidebar.ts | cookiesUsedByFramesFromS":{"message":"Cookies used by frames from {PH1}"},"panels/application/ApplicationPanelSidebar.ts | documentNotAvailable":{"message":"Document not available"},"panels/application/ApplicationPanelSidebar.ts | frames":{"message":"Frames"},"panels/application/ApplicationPanelSidebar.ts | indexeddb":{"message":"IndexedDB"},"panels/application/ApplicationPanelSidebar.ts | keyPathS":{"message":"Key path: {PH1}"},"panels/application/ApplicationPanelSidebar.ts | localFiles":{"message":"Local Files"},"panels/application/ApplicationPanelSidebar.ts | localStorage":{"message":"Local storage"},"panels/application/ApplicationPanelSidebar.ts | manifest":{"message":"Manifest"},"panels/application/ApplicationPanelSidebar.ts | noManifestDetected":{"message":"No manifest detected"},"panels/application/ApplicationPanelSidebar.ts | onInvokeAlert":{"message":"Scrolled to {PH1}"},"panels/application/ApplicationPanelSidebar.ts | onInvokeManifestAlert":{"message":"Manifest: Invoke to scroll to the top of manifest"},"panels/application/ApplicationPanelSidebar.ts | openedWindows":{"message":"Opened Windows"},"panels/application/ApplicationPanelSidebar.ts | refreshIndexeddb":{"message":"Refresh IndexedDB"},"panels/application/ApplicationPanelSidebar.ts | sessionStorage":{"message":"Session storage"},"panels/application/ApplicationPanelSidebar.ts | storage":{"message":"Storage"},"panels/application/ApplicationPanelSidebar.ts | theContentOfThisDocumentHasBeen":{"message":"The content of this document has been generated dynamically via 'document.write()'."},"panels/application/ApplicationPanelSidebar.ts | thirdPartyPhaseout":{"message":"Cookies from {PH1} may have been blocked due to third-party cookie phaseout."},"panels/application/ApplicationPanelSidebar.ts | versionS":{"message":"Version: {PH1}"},"panels/application/ApplicationPanelSidebar.ts | versionSEmpty":{"message":"Version: {PH1} (empty)"},"panels/application/ApplicationPanelSidebar.ts | webSql":{"message":"Web SQL"},"panels/application/ApplicationPanelSidebar.ts | webWorkers":{"message":"Web Workers"},"panels/application/ApplicationPanelSidebar.ts | windowWithoutTitle":{"message":"Window without title"},"panels/application/ApplicationPanelSidebar.ts | worker":{"message":"worker"},"panels/application/AppManifestView.ts | actualHeightSpxOfSSDoesNotMatch":{"message":"Actual height ({PH1}px) of {PH2} {PH3} does not match specified height ({PH4}px)"},"panels/application/AppManifestView.ts | actualSizeSspxOfSSDoesNotMatch":{"message":"Actual size ({PH1}×{PH2})px of {PH3} {PH4} does not match specified size ({PH5}×{PH6}px)"},"panels/application/AppManifestView.ts | actualWidthSpxOfSSDoesNotMatch":{"message":"Actual width ({PH1}px) of {PH2} {PH3} does not match specified width ({PH4}px)"},"panels/application/AppManifestView.ts | appIdExplainer":{"message":"This is used by the browser to know whether the manifest should be updating an existing application, or whether it refers to a new web app that can be installed."},"panels/application/AppManifestView.ts | appIdNote":{"message":"{PH1} {PH2} is not specified in the manifest, {PH3} is used instead. To specify an App ID that matches the current identity, set the {PH4} field to {PH5} {PH6}."},"panels/application/AppManifestView.ts | aUrlInTheManifestContainsA":{"message":"A URL in the manifest contains a username, password, or port"},"panels/application/AppManifestView.ts | avoidPurposeAnyAndMaskable":{"message":"Declaring an icon with 'purpose' of 'any maskable' is discouraged. It is likely to look incorrect on some platforms due to too much or too little padding."},"panels/application/AppManifestView.ts | backgroundColor":{"message":"Background color"},"panels/application/AppManifestView.ts | computedAppId":{"message":"Computed App ID"},"panels/application/AppManifestView.ts | copiedToClipboard":{"message":"Copied suggested ID {PH1} to clipboard"},"panels/application/AppManifestView.ts | copyToClipboard":{"message":"Copy suggested ID to clipboard"},"panels/application/AppManifestView.ts | couldNotCheckServiceWorker":{"message":"Could not check service worker without a 'start_url' field in the manifest"},"panels/application/AppManifestView.ts | couldNotDownloadARequiredIcon":{"message":"Could not download a required icon from the manifest"},"panels/application/AppManifestView.ts | customizePwaTitleBar":{"message":"Customize the window controls overlay of your PWA's title bar"},"panels/application/AppManifestView.ts | darkBackgroundColor":{"message":"Dark background color"},"panels/application/AppManifestView.ts | darkThemeColor":{"message":"Dark theme color"},"panels/application/AppManifestView.ts | description":{"message":"Description"},"panels/application/AppManifestView.ts | descriptionMayBeTruncated":{"message":"Description may be truncated."},"panels/application/AppManifestView.ts | display":{"message":"Display"},"panels/application/AppManifestView.ts | documentationOnMaskableIcons":{"message":"documentation on maskable icons"},"panels/application/AppManifestView.ts | downloadedIconWasEmptyOr":{"message":"Downloaded icon was empty or corrupted"},"panels/application/AppManifestView.ts | errorsAndWarnings":{"message":"Errors and warnings"},"panels/application/AppManifestView.ts | formFactor":{"message":"Form factor"},"panels/application/AppManifestView.ts | icon":{"message":"Icon"},"panels/application/AppManifestView.ts | icons":{"message":"Icons"},"panels/application/AppManifestView.ts | identity":{"message":"Identity"},"panels/application/AppManifestView.ts | imageFromS":{"message":"Image from {PH1}"},"panels/application/AppManifestView.ts | installability":{"message":"Installability"},"panels/application/AppManifestView.ts | label":{"message":"Label"},"panels/application/AppManifestView.ts | learnMore":{"message":"Learn more"},"panels/application/AppManifestView.ts | manifestContainsDisplayoverride":{"message":"Manifest contains 'display_override' field, and the first supported display mode must be one of 'standalone', 'fullscreen', or 'minimal-ui'"},"panels/application/AppManifestView.ts | manifestCouldNotBeFetchedIsEmpty":{"message":"Manifest could not be fetched, is empty, or could not be parsed"},"panels/application/AppManifestView.ts | manifestDisplayPropertyMustBeOne":{"message":"Manifest 'display' property must be one of 'standalone', 'fullscreen', or 'minimal-ui'"},"panels/application/AppManifestView.ts | manifestDoesNotContainANameOr":{"message":"Manifest does not contain a 'name' or 'short_name' field"},"panels/application/AppManifestView.ts | manifestDoesNotContainASuitable":{"message":"Manifest does not contain a suitable icon—PNG, SVG, or WebP format of at least {PH1}px is required, the 'sizes' attribute must be set, and the 'purpose' attribute, if set, must include 'any'."},"panels/application/AppManifestView.ts | manifestSpecifies":{"message":"Manifest specifies 'prefer_related_applications: true'"},"panels/application/AppManifestView.ts | manifestStartUrlIsNotValid":{"message":"Manifest 'start_url' is not valid"},"panels/application/AppManifestView.ts | name":{"message":"Name"},"panels/application/AppManifestView.ts | needHelpReadOurS":{"message":"Need help? Read the {PH1}."},"panels/application/AppManifestView.ts | newNoteUrl":{"message":"New note URL"},"panels/application/AppManifestView.ts | noPlayStoreIdProvided":{"message":"No Play store ID provided"},"panels/application/AppManifestView.ts | noScreenshotsForRicherPWAInstallOnDesktop":{"message":"Richer PWA Install UI won’t be available on desktop. Please add at least one screenshot with the form_factor set to wide."},"panels/application/AppManifestView.ts | noScreenshotsForRicherPWAInstallOnMobile":{"message":"Richer PWA Install UI won’t be available on mobile. Please add at least one screenshot for which form_factor is not set or set to a value other than wide."},"panels/application/AppManifestView.ts | noSuppliedIconIsAtLeastSpxSquare":{"message":"No supplied icon is at least {PH1} pixels square in PNG, SVG, or WebP format, with the purpose attribute unset or set to 'any'."},"panels/application/AppManifestView.ts | note":{"message":"Note:"},"panels/application/AppManifestView.ts | orientation":{"message":"Orientation"},"panels/application/AppManifestView.ts | pageDoesNotWorkOffline":{"message":"Page does not work offline"},"panels/application/AppManifestView.ts | pageDoesNotWorkOfflineThePage":{"message":"Page does not work offline. Starting in Chrome 93, the installability criteria are changing, and this site will not be installable. See {PH1} for more information."},"panels/application/AppManifestView.ts | pageHasNoManifestLinkUrl":{"message":"Page has no manifest URL"},"panels/application/AppManifestView.ts | pageIsLoadedInAnIncognitoWindow":{"message":"Page is loaded in an incognito window"},"panels/application/AppManifestView.ts | pageIsNotLoadedInTheMainFrame":{"message":"Page is not loaded in the main frame"},"panels/application/AppManifestView.ts | pageIsNotServedFromASecureOrigin":{"message":"Page is not served from a secure origin"},"panels/application/AppManifestView.ts | platform":{"message":"Platform"},"panels/application/AppManifestView.ts | preferrelatedapplicationsIsOnly":{"message":"'prefer_related_applications' is only supported on Chrome Beta and Stable channels on Android."},"panels/application/AppManifestView.ts | presentation":{"message":"Presentation"},"panels/application/AppManifestView.ts | protocolHandlers":{"message":"Protocol Handlers"},"panels/application/AppManifestView.ts | screenshot":{"message":"Screenshot"},"panels/application/AppManifestView.ts | screenshotPixelSize":{"message":"Screenshot {url} should specify a pixel size [width]x[height] instead of any as first size."},"panels/application/AppManifestView.ts | screenshotS":{"message":"Screenshot #{PH1}"},"panels/application/AppManifestView.ts | screenshotsMustHaveSameAspectRatio":{"message":"All screenshots with the same form_factor must have the same aspect ratio as the first screenshot with that form_factor. Some screenshots will be ignored."},"panels/application/AppManifestView.ts | selectWindowControlsOverlayEmulationOs":{"message":"Emulate the Window Controls Overlay on"},"panels/application/AppManifestView.ts | shortcutS":{"message":"Shortcut #{PH1}"},"panels/application/AppManifestView.ts | shortcutsMayBeNotAvailable":{"message":"The maximum number of shortcuts is platform dependent. Some shortcuts may be not available."},"panels/application/AppManifestView.ts | shortcutSShouldIncludeAXPixel":{"message":"Shortcut #{PH1} should include a 96×96 pixel icon"},"panels/application/AppManifestView.ts | shortName":{"message":"Short name"},"panels/application/AppManifestView.ts | showOnlyTheMinimumSafeAreaFor":{"message":"Show only the minimum safe area for maskable icons"},"panels/application/AppManifestView.ts | sSDoesNotSpecifyItsSizeInThe":{"message":"{PH1} {PH2} does not specify its size in the manifest"},"panels/application/AppManifestView.ts | sSFailedToLoad":{"message":"{PH1} {PH2} failed to load"},"panels/application/AppManifestView.ts | sSHeightDoesNotComplyWithRatioRequirement":{"message":"{PH1} {PH2} height can't be more than 2.3 times as long as the width"},"panels/application/AppManifestView.ts | sSrcIsNotSet":{"message":"{PH1} 'src' is not set"},"panels/application/AppManifestView.ts | sSShouldHaveSquareIcon":{"message":"Most operating systems require square icons. Please include at least one square icon in the array."},"panels/application/AppManifestView.ts | sSShouldSpecifyItsSizeAs":{"message":"{PH1} {PH2} should specify its size as [width]x[height]"},"panels/application/AppManifestView.ts | sSSizeShouldBeAtLeast320":{"message":"{PH1} {PH2} size should be at least 320×320"},"panels/application/AppManifestView.ts | sSSizeShouldBeAtMost3840":{"message":"{PH1} {PH2} size should be at most 3840×3840"},"panels/application/AppManifestView.ts | sSWidthDoesNotComplyWithRatioRequirement":{"message":"{PH1} {PH2} width can't be more than 2.3 times as long as the height"},"panels/application/AppManifestView.ts | startUrl":{"message":"Start URL"},"panels/application/AppManifestView.ts | sUrlSFailedToParse":{"message":"{PH1} URL ''{PH2}'' failed to parse"},"panels/application/AppManifestView.ts | theAppIsAlreadyInstalled":{"message":"The app is already installed"},"panels/application/AppManifestView.ts | themeColor":{"message":"Theme color"},"panels/application/AppManifestView.ts | thePlayStoreAppUrlAndPlayStoreId":{"message":"The Play Store app URL and Play Store ID do not match"},"panels/application/AppManifestView.ts | theSpecifiedApplicationPlatform":{"message":"The specified application platform is not supported on Android"},"panels/application/AppManifestView.ts | tooManyScreenshotsForDesktop":{"message":"No more than 8 screenshots will be displayed on desktop. The rest will be ignored."},"panels/application/AppManifestView.ts | tooManyScreenshotsForMobile":{"message":"No more than 5 screenshots will be displayed on mobile. The rest will be ignored."},"panels/application/AppManifestView.ts | url":{"message":"URL"},"panels/application/AppManifestView.ts | wcoFound":{"message":"Chrome has successfully found the {PH1} value for the {PH2} field in the {PH3}."},"panels/application/AppManifestView.ts | wcoNeedHelpReadMore":{"message":"Need help? Read {PH1}."},"panels/application/AppManifestView.ts | wcoNotFound":{"message":"Define {PH1} in the manifest to use the Window Controls Overlay API and customize your app's title bar."},"panels/application/AppManifestView.ts | windowControlsOverlay":{"message":"Window Controls Overlay"},"panels/application/BackForwardCacheTreeElement.ts | backForwardCache":{"message":"Back/forward cache"},"panels/application/BackgroundServiceView.ts | backgroundFetch":{"message":"Background fetch"},"panels/application/BackgroundServiceView.ts | backgroundServices":{"message":"Background services"},"panels/application/BackgroundServiceView.ts | backgroundSync":{"message":"Background sync"},"panels/application/BackgroundServiceView.ts | clear":{"message":"Clear"},"panels/application/BackgroundServiceView.ts | clickTheRecordButtonSOrHitSTo":{"message":"Click the record button {PH1} or hit {PH2} to start recording."},"panels/application/BackgroundServiceView.ts | devtoolsWillRecordAllSActivity":{"message":"DevTools will record all {PH1} activity for up to 3 days, even when closed."},"panels/application/BackgroundServiceView.ts | empty":{"message":"empty"},"panels/application/BackgroundServiceView.ts | event":{"message":"Event"},"panels/application/BackgroundServiceView.ts | instanceId":{"message":"Instance ID"},"panels/application/BackgroundServiceView.ts | learnMore":{"message":"Learn more"},"panels/application/BackgroundServiceView.ts | noMetadataForThisEvent":{"message":"No metadata for this event"},"panels/application/BackgroundServiceView.ts | notifications":{"message":"Notifications"},"panels/application/BackgroundServiceView.ts | origin":{"message":"Origin"},"panels/application/BackgroundServiceView.ts | paymentHandler":{"message":"Payment handler"},"panels/application/BackgroundServiceView.ts | periodicBackgroundSync":{"message":"Periodic background sync"},"panels/application/BackgroundServiceView.ts | pushMessaging":{"message":"Push messaging"},"panels/application/BackgroundServiceView.ts | recordingSActivity":{"message":"Recording {PH1} activity..."},"panels/application/BackgroundServiceView.ts | saveEvents":{"message":"Save events"},"panels/application/BackgroundServiceView.ts | selectAnEntryToViewMetadata":{"message":"Select an entry to view metadata"},"panels/application/BackgroundServiceView.ts | showEventsForOtherStorageKeys":{"message":"Show events from other storage partitions"},"panels/application/BackgroundServiceView.ts | showEventsFromOtherDomains":{"message":"Show events from other domains"},"panels/application/BackgroundServiceView.ts | startRecordingEvents":{"message":"Start recording events"},"panels/application/BackgroundServiceView.ts | stopRecordingEvents":{"message":"Stop recording events"},"panels/application/BackgroundServiceView.ts | storageKey":{"message":"Storage Key"},"panels/application/BackgroundServiceView.ts | swScope":{"message":"Service Worker Scope"},"panels/application/BackgroundServiceView.ts | timestamp":{"message":"Timestamp"},"panels/application/BounceTrackingMitigationsTreeElement.ts | bounceTrackingMitigations":{"message":"Bounce tracking mitigations"},"panels/application/components/BackForwardCacheStrings.ts | appBanner":{"message":"Pages that requested an AppBanner are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabled":{"message":"Back/forward cache is disabled by flags. Visit chrome://flags/#back-forward-cache to enable it locally on this device."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledByCommandLine":{"message":"Back/forward cache is disabled by the command line."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledByLowMemory":{"message":"Back/forward cache is disabled due to insufficient memory."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledForDelegate":{"message":"Back/forward cache is not supported by delegate."},"panels/application/components/BackForwardCacheStrings.ts | backForwardCacheDisabledForPrerender":{"message":"Back/forward cache is disabled for prerenderer."},"panels/application/components/BackForwardCacheStrings.ts | broadcastChannel":{"message":"The page cannot be cached because it has a BroadcastChannel instance with registered listeners."},"panels/application/components/BackForwardCacheStrings.ts | cacheControlNoStore":{"message":"Pages with cache-control:no-store header cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | cacheFlushed":{"message":"The cache was intentionally cleared."},"panels/application/components/BackForwardCacheStrings.ts | cacheLimit":{"message":"The page was evicted from the cache to allow another page to be cached."},"panels/application/components/BackForwardCacheStrings.ts | containsPlugins":{"message":"Pages containing plugins are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentFileChooser":{"message":"Pages that use FileChooser API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentFileSystemAccess":{"message":"Pages that use File System Access API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaDevicesDispatcherHost":{"message":"Pages that use Media Device Dispatcher are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaPlay":{"message":"A media player was playing upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaSession":{"message":"Pages that use MediaSession API and set a playback state are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentMediaSessionService":{"message":"Pages that use MediaSession API and set action handlers are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentScreenReader":{"message":"Back/forward cache is disabled due to screen reader."},"panels/application/components/BackForwardCacheStrings.ts | contentSecurityHandler":{"message":"Pages that use SecurityHandler are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentSerial":{"message":"Pages that use Serial API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebAuthenticationAPI":{"message":"Pages that use WebAuthetication API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebBluetooth":{"message":"Pages that use WebBluetooth API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | contentWebUSB":{"message":"Pages that use WebUSB API are not eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | cookieDisabled":{"message":"Back/forward cache is disabled because cookies are disabled on a page that uses Cache-Control: no-store."},"panels/application/components/BackForwardCacheStrings.ts | CookieFlushed":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | dedicatedWorkerOrWorklet":{"message":"Pages that use a dedicated worker or worklet are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | documentLoaded":{"message":"The document did not finish loading before navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderAppBannerManager":{"message":"App Banner was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderChromePasswordManagerClientBindCredentialManager":{"message":"Chrome Password Manager was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderDomDistillerSelfDeletingRequestDelegate":{"message":"DOM distillation was in progress upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderDomDistillerViewerSource":{"message":"DOM Distiller Viewer was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionMessaging":{"message":"Back/forward cache is disabled due to extensions using messaging API."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionMessagingForOpenPort":{"message":"Extensions with long-lived connection should close the connection before entering back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensions":{"message":"Back/forward cache is disabled due to extensions."},"panels/application/components/BackForwardCacheStrings.ts | embedderExtensionSentMessageToCachedFrame":{"message":"Extensions with long-lived connection attempted to send messages to frames in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | embedderModalDialog":{"message":"Modal dialog such as form resubmission or http password dialog was shown for the page upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderOfflinePage":{"message":"The offline page was shown upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderOomInterventionTabHelper":{"message":"Out-Of-Memory Intervention bar was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderPermissionRequestManager":{"message":"There were permission requests upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderPopupBlockerTabHelper":{"message":"Popup blocker was present upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderSafeBrowsingThreatDetails":{"message":"Safe Browsing details were shown upon navigating away."},"panels/application/components/BackForwardCacheStrings.ts | embedderSafeBrowsingTriggeredPopupBlocker":{"message":"Safe Browsing considered this page to be abusive and blocked popup."},"panels/application/components/BackForwardCacheStrings.ts | enteredBackForwardCacheBeforeServiceWorkerHostAdded":{"message":"A service worker was activated while the page was in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | errorDocument":{"message":"Back/forward cache is disabled due to a document error."},"panels/application/components/BackForwardCacheStrings.ts | fencedFramesEmbedder":{"message":"Pages using FencedFrames cannot be stored in bfcache."},"panels/application/components/BackForwardCacheStrings.ts | foregroundCacheLimit":{"message":"The page was evicted from the cache to allow another page to be cached."},"panels/application/components/BackForwardCacheStrings.ts | grantedMediaStreamAccess":{"message":"Pages that have granted media stream access are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | haveInnerContents":{"message":"Pages that use portals are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | HTTPAuthRequired":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | HTTPMethodNotGET":{"message":"Only pages loaded via a GET request are eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | HTTPStatusNotOK":{"message":"Only pages with a status code of 2XX can be cached."},"panels/application/components/BackForwardCacheStrings.ts | idleManager":{"message":"Pages that use IdleManager are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | indexedDBConnection":{"message":"Pages that have an open IndexedDB connection are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | indexedDBEvent":{"message":"Back/forward cache is disabled due to an IndexedDB event."},"panels/application/components/BackForwardCacheStrings.ts | ineligibleAPI":{"message":"Ineligible APIs were used."},"panels/application/components/BackForwardCacheStrings.ts | injectedJavascript":{"message":"Pages that JavaScript is injected into by extensions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | injectedStyleSheet":{"message":"Pages that a StyleSheet is injected into by extensions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | internalError":{"message":"Internal error."},"panels/application/components/BackForwardCacheStrings.ts | JavaScriptExecution":{"message":"Chrome detected an attempt to execute JavaScript while in the cache."},"panels/application/components/BackForwardCacheStrings.ts | jsNetworkRequestReceivedCacheControlNoStoreResource":{"message":"Back/forward cache is disabled because some JavaScript network request received resource with Cache-Control: no-store header."},"panels/application/components/BackForwardCacheStrings.ts | keepaliveRequest":{"message":"Back/forward cache is disabled due to a keepalive request."},"panels/application/components/BackForwardCacheStrings.ts | keyboardLock":{"message":"Pages that use Keyboard lock are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | LiveMediaStreamTrack":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | loading":{"message":"The page did not finish loading before navigating away."},"panels/application/components/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoCache":{"message":"Pages whose main resource has cache-control:no-cache cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | mainResourceHasCacheControlNoStore":{"message":"Pages whose main resource has cache-control:no-store cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | navigationCancelledWhileRestoring":{"message":"Navigation was cancelled before the page could be restored from back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | networkExceedsBufferLimit":{"message":"The page was evicted from the cache because an active network connection received too much data. Chrome limits the amount of data that a page may receive while cached."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestDatapipeDrainedAsBytesConsumer":{"message":"Pages that have inflight fetch() or XHR are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestRedirected":{"message":"The page was evicted from back/forward cache because an active network request involved a redirect."},"panels/application/components/BackForwardCacheStrings.ts | networkRequestTimeout":{"message":"The page was evicted from the cache because a network connection was open too long. Chrome limits the amount of time that a page may receive data while cached."},"panels/application/components/BackForwardCacheStrings.ts | noResponseHead":{"message":"Pages that do not have a valid response head cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | notMainFrame":{"message":"Navigation happened in a frame other than the main frame."},"panels/application/components/BackForwardCacheStrings.ts | outstandingIndexedDBTransaction":{"message":"Page with ongoing indexed DB transactions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestDirectSocket":{"message":"Pages with an in-flight network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestFetch":{"message":"Pages with an in-flight fetch network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestOthers":{"message":"Pages with an in-flight network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | outstandingNetworkRequestXHR":{"message":"Pages with an in-flight XHR network request are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | paymentManager":{"message":"Pages that use PaymentManager are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | pictureInPicture":{"message":"Pages that use Picture-in-Picture are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | portal":{"message":"Pages that use portals are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | printing":{"message":"Pages that show Printing UI are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | relatedActiveContentsExist":{"message":"The page was opened using 'window.open()' and another tab has a reference to it, or the page opened a window."},"panels/application/components/BackForwardCacheStrings.ts | rendererProcessCrashed":{"message":"The renderer process for the page in back/forward cache crashed."},"panels/application/components/BackForwardCacheStrings.ts | rendererProcessKilled":{"message":"The renderer process for the page in back/forward cache was killed."},"panels/application/components/BackForwardCacheStrings.ts | requestedAudioCapturePermission":{"message":"Pages that have requested audio capture permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedBackForwardCacheBlockedSensors":{"message":"Pages that have requested sensor permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedBackgroundWorkPermission":{"message":"Pages that have requested background sync or fetch permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedMIDIPermission":{"message":"Pages that have requested MIDI permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedNotificationsPermission":{"message":"Pages that have requested notifications permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedStorageAccessGrant":{"message":"Pages that have requested storage access are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | requestedVideoCapturePermission":{"message":"Pages that have requested video capture permissions are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | schemeNotHTTPOrHTTPS":{"message":"Only pages whose URL scheme is HTTP / HTTPS can be cached."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerClaim":{"message":"The page was claimed by a service worker while it is in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerPostMessage":{"message":"A service worker attempted to send the page in back/forward cache a MessageEvent."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerUnregistration":{"message":"ServiceWorker was unregistered while a page was in back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | serviceWorkerVersionActivation":{"message":"The page was evicted from back/forward cache due to a service worker activation."},"panels/application/components/BackForwardCacheStrings.ts | sessionRestored":{"message":"Chrome restarted and cleared the back/forward cache entries."},"panels/application/components/BackForwardCacheStrings.ts | sharedWorker":{"message":"Pages that use SharedWorker are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | SmartCard":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | speechRecognizer":{"message":"Pages that use SpeechRecognizer are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | speechSynthesis":{"message":"Pages that use SpeechSynthesis are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | subframeIsNavigating":{"message":"An iframe on the page started a navigation that did not complete."},"panels/application/components/BackForwardCacheStrings.ts | subresourceHasCacheControlNoCache":{"message":"Pages whose subresource has cache-control:no-cache cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | subresourceHasCacheControlNoStore":{"message":"Pages whose subresource has cache-control:no-store cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | timeout":{"message":"The page exceeded the maximum time in back/forward cache and was expired."},"panels/application/components/BackForwardCacheStrings.ts | timeoutPuttingInCache":{"message":"The page timed out entering back/forward cache (likely due to long-running pagehide handlers)."},"panels/application/components/BackForwardCacheStrings.ts | UnloadHandler":{"message":"Undefined"},"panels/application/components/BackForwardCacheStrings.ts | unloadHandlerExistsInMainFrame":{"message":"The page has an unload handler in the main frame."},"panels/application/components/BackForwardCacheStrings.ts | unloadHandlerExistsInSubFrame":{"message":"The page has an unload handler in a sub frame."},"panels/application/components/BackForwardCacheStrings.ts | userAgentOverrideDiffers":{"message":"Browser has changed the user agent override header."},"panels/application/components/BackForwardCacheStrings.ts | wasGrantedMediaAccess":{"message":"Pages that have granted access to record video or audio are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webDatabase":{"message":"Pages that use WebDatabase are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webHID":{"message":"Pages that use WebHID are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webLocks":{"message":"Pages that use WebLocks are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webNfc":{"message":"Pages that use WebNfc are not currently eligible for back/forwad cache."},"panels/application/components/BackForwardCacheStrings.ts | webOTPService":{"message":"Pages that use WebOTPService are not currently eligible for bfcache."},"panels/application/components/BackForwardCacheStrings.ts | webRTC":{"message":"Pages with WebRTC cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webRTCSticky":{"message":"Back/forward cache is disabled because WebRTC has been used."},"panels/application/components/BackForwardCacheStrings.ts | webShare":{"message":"Pages that use WebShare are not currently eligible for back/forwad cache."},"panels/application/components/BackForwardCacheStrings.ts | webSocket":{"message":"Pages with WebSocket cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webSocketSticky":{"message":"Back/forward cache is disabled because WebSocket has been used."},"panels/application/components/BackForwardCacheStrings.ts | webTransport":{"message":"Pages with WebTransport cannot enter back/forward cache."},"panels/application/components/BackForwardCacheStrings.ts | webTransportSticky":{"message":"Back/forward cache is disabled because WebTransport has been used."},"panels/application/components/BackForwardCacheStrings.ts | webXR":{"message":"Pages that use WebXR are not currently eligible for back/forward cache."},"panels/application/components/BackForwardCacheView.ts | backForwardCacheTitle":{"message":"Back/forward cache"},"panels/application/components/BackForwardCacheView.ts | blankURLTitle":{"message":"Blank URL [{PH1}]"},"panels/application/components/BackForwardCacheView.ts | blockingExtensionId":{"message":"Extension id: "},"panels/application/components/BackForwardCacheView.ts | circumstantial":{"message":"Not Actionable"},"panels/application/components/BackForwardCacheView.ts | circumstantialExplanation":{"message":"These reasons are not actionable i.e. caching was prevented by something outside of the direct control of the page."},"panels/application/components/BackForwardCacheView.ts | filesPerIssue":{"message":"{n, plural, =1 {# file} other {# files}}"},"panels/application/components/BackForwardCacheView.ts | framesPerIssue":{"message":"{n, plural, =1 {# frame} other {# frames}}"},"panels/application/components/BackForwardCacheView.ts | framesTitle":{"message":"Frames"},"panels/application/components/BackForwardCacheView.ts | issuesInMultipleFrames":{"message":"{n, plural, =1 {# issue found in {m} frames.} other {# issues found in {m} frames.}}"},"panels/application/components/BackForwardCacheView.ts | issuesInSingleFrame":{"message":"{n, plural, =1 {# issue found in 1 frame.} other {# issues found in 1 frame.}}"},"panels/application/components/BackForwardCacheView.ts | learnMore":{"message":"Learn more: back/forward cache eligibility"},"panels/application/components/BackForwardCacheView.ts | mainFrame":{"message":"Main Frame"},"panels/application/components/BackForwardCacheView.ts | neverUseUnload":{"message":"Learn more: Never use unload handler"},"panels/application/components/BackForwardCacheView.ts | normalNavigation":{"message":"Not served from back/forward cache: to trigger back/forward cache, use Chrome's back/forward buttons, or use the test button below to automatically navigate away and back."},"panels/application/components/BackForwardCacheView.ts | pageSupportNeeded":{"message":"Actionable"},"panels/application/components/BackForwardCacheView.ts | pageSupportNeededExplanation":{"message":"These reasons are actionable i.e. they can be cleaned up to make the page eligible for back/forward cache."},"panels/application/components/BackForwardCacheView.ts | restoredFromBFCache":{"message":"Successfully served from back/forward cache."},"panels/application/components/BackForwardCacheView.ts | runningTest":{"message":"Running test"},"panels/application/components/BackForwardCacheView.ts | runTest":{"message":"Test back/forward cache"},"panels/application/components/BackForwardCacheView.ts | supportPending":{"message":"Pending Support"},"panels/application/components/BackForwardCacheView.ts | supportPendingExplanation":{"message":"Chrome support for these reasons is pending i.e. they will not prevent the page from being eligible for back/forward cache in a future version of Chrome."},"panels/application/components/BackForwardCacheView.ts | unavailable":{"message":"unavailable"},"panels/application/components/BackForwardCacheView.ts | unknown":{"message":"Unknown Status"},"panels/application/components/BackForwardCacheView.ts | url":{"message":"URL:"},"panels/application/components/BounceTrackingMitigationsView.ts | bounceTrackingMitigationsTitle":{"message":"Bounce tracking mitigations"},"panels/application/components/BounceTrackingMitigationsView.ts | checkingPotentialTrackers":{"message":"Checking for potential bounce tracking sites."},"panels/application/components/BounceTrackingMitigationsView.ts | featureDisabled":{"message":"Bounce tracking mitigations are disabled. To enable them, set the flag at {PH1} to \"Enabled With Deletion\"."},"panels/application/components/BounceTrackingMitigationsView.ts | featureFlag":{"message":"Bounce Tracking Mitigations Feature Flag"},"panels/application/components/BounceTrackingMitigationsView.ts | forceRun":{"message":"Force run"},"panels/application/components/BounceTrackingMitigationsView.ts | learnMore":{"message":"Learn more: Bounce Tracking Mitigations"},"panels/application/components/BounceTrackingMitigationsView.ts | noPotentialBounceTrackersIdentified":{"message":"State was not cleared for any potential bounce tracking sites. Either none were identified or third-party cookies are not blocked."},"panels/application/components/BounceTrackingMitigationsView.ts | runningMitigations":{"message":"Running"},"panels/application/components/BounceTrackingMitigationsView.ts | stateDeletedFor":{"message":"State was deleted for the following sites:"},"panels/application/components/EndpointsGrid.ts | noEndpointsToDisplay":{"message":"No endpoints to display"},"panels/application/components/FrameDetailsView.ts | additionalInformation":{"message":"Additional Information"},"panels/application/components/FrameDetailsView.ts | adStatus":{"message":"Ad Status"},"panels/application/components/FrameDetailsView.ts | aFrameAncestorIsAnInsecure":{"message":"A frame ancestor is an insecure context"},"panels/application/components/FrameDetailsView.ts | apiAvailability":{"message":"API availability"},"panels/application/components/FrameDetailsView.ts | availabilityOfCertainApisDepends":{"message":"Availability of certain APIs depends on the document being cross-origin isolated."},"panels/application/components/FrameDetailsView.ts | available":{"message":"available"},"panels/application/components/FrameDetailsView.ts | availableNotTransferable":{"message":"available, not transferable"},"panels/application/components/FrameDetailsView.ts | availableTransferable":{"message":"available, transferable"},"panels/application/components/FrameDetailsView.ts | child":{"message":"child"},"panels/application/components/FrameDetailsView.ts | childDescription":{"message":"This frame has been identified as a child frame of an ad"},"panels/application/components/FrameDetailsView.ts | clickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanel":{"message":"Click to reveal in Network panel"},"panels/application/components/FrameDetailsView.ts | clickToRevealInNetworkPanelMight":{"message":"Click to reveal in Network panel (might require page reload)"},"panels/application/components/FrameDetailsView.ts | clickToRevealInSourcesPanel":{"message":"Click to reveal in Sources panel"},"panels/application/components/FrameDetailsView.ts | contentSecurityPolicy":{"message":"Content Security Policy (CSP)"},"panels/application/components/FrameDetailsView.ts | createdByAdScriptExplanation":{"message":"There was an ad script in the (async) stack when this frame was created. Examining the creation stack trace of this frame might provide more insight."},"panels/application/components/FrameDetailsView.ts | creationStackTrace":{"message":"Frame Creation Stack Trace"},"panels/application/components/FrameDetailsView.ts | creationStackTraceExplanation":{"message":"This frame was created programmatically. The stack trace shows where this happened."},"panels/application/components/FrameDetailsView.ts | creatorAdScript":{"message":"Creator Ad Script"},"panels/application/components/FrameDetailsView.ts | crossoriginIsolated":{"message":"Cross-Origin Isolated"},"panels/application/components/FrameDetailsView.ts | document":{"message":"Document"},"panels/application/components/FrameDetailsView.ts | frameId":{"message":"Frame ID"},"panels/application/components/FrameDetailsView.ts | learnMore":{"message":"Learn more"},"panels/application/components/FrameDetailsView.ts | localhostIsAlwaysASecureContext":{"message":"Localhost is always a secure context"},"panels/application/components/FrameDetailsView.ts | matchedBlockingRuleExplanation":{"message":"This frame is considered an ad frame because its current (or previous) main document is an ad resource."},"panels/application/components/FrameDetailsView.ts | measureMemory":{"message":"Measure Memory"},"panels/application/components/FrameDetailsView.ts | no":{"message":"No"},"panels/application/components/FrameDetailsView.ts | none":{"message":"None"},"panels/application/components/FrameDetailsView.ts | origin":{"message":"Origin"},"panels/application/components/FrameDetailsView.ts | originTrialsExplanation":{"message":"Origin trials give you access to a new or experimental feature."},"panels/application/components/FrameDetailsView.ts | ownerElement":{"message":"Owner Element"},"panels/application/components/FrameDetailsView.ts | parentIsAdExplanation":{"message":"This frame is considered an ad frame because its parent frame is an ad frame."},"panels/application/components/FrameDetailsView.ts | reportingTo":{"message":"reporting to"},"panels/application/components/FrameDetailsView.ts | requiresCrossoriginIsolated":{"message":"requires cross-origin isolated context"},"panels/application/components/FrameDetailsView.ts | root":{"message":"root"},"panels/application/components/FrameDetailsView.ts | rootDescription":{"message":"This frame has been identified as the root frame of an ad"},"panels/application/components/FrameDetailsView.ts | secureContext":{"message":"Secure Context"},"panels/application/components/FrameDetailsView.ts | securityIsolation":{"message":"Security & Isolation"},"panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIs":{"message":"SharedArrayBuffer constructor is available and SABs can be transferred via postMessage"},"panels/application/components/FrameDetailsView.ts | sharedarraybufferConstructorIsAvailable":{"message":"SharedArrayBuffer constructor is available but SABs cannot be transferred via postMessage"},"panels/application/components/FrameDetailsView.ts | theFramesSchemeIsInsecure":{"message":"The frame's scheme is insecure"},"panels/application/components/FrameDetailsView.ts | thePerformanceAPI":{"message":"The performance.measureUserAgentSpecificMemory() API is available"},"panels/application/components/FrameDetailsView.ts | thePerformancemeasureuseragentspecificmemory":{"message":"The performance.measureUserAgentSpecificMemory() API is not available"},"panels/application/components/FrameDetailsView.ts | thisAdditionalDebugging":{"message":"This additional (debugging) information is shown because the 'Protocol Monitor' experiment is enabled."},"panels/application/components/FrameDetailsView.ts | transferRequiresCrossoriginIsolatedPermission":{"message":"SharedArrayBuffer transfer requires enabling the permission policy:"},"panels/application/components/FrameDetailsView.ts | unavailable":{"message":"unavailable"},"panels/application/components/FrameDetailsView.ts | unreachableUrl":{"message":"Unreachable URL"},"panels/application/components/FrameDetailsView.ts | url":{"message":"URL"},"panels/application/components/FrameDetailsView.ts | willRequireCrossoriginIsolated":{"message":"⚠️ will require cross-origin isolated context in the future"},"panels/application/components/FrameDetailsView.ts | yes":{"message":"Yes"},"panels/application/components/InterestGroupAccessGrid.ts | allInterestGroupStorageEvents":{"message":"All interest group storage events."},"panels/application/components/InterestGroupAccessGrid.ts | eventTime":{"message":"Event Time"},"panels/application/components/InterestGroupAccessGrid.ts | eventType":{"message":"Access Type"},"panels/application/components/InterestGroupAccessGrid.ts | groupName":{"message":"Name"},"panels/application/components/InterestGroupAccessGrid.ts | groupOwner":{"message":"Owner"},"panels/application/components/InterestGroupAccessGrid.ts | noEvents":{"message":"No interest group events recorded."},"panels/application/components/OriginTrialTreeView.ts | expiryTime":{"message":"Expiry Time"},"panels/application/components/OriginTrialTreeView.ts | isThirdParty":{"message":"Third Party"},"panels/application/components/OriginTrialTreeView.ts | matchSubDomains":{"message":"Subdomain Matching"},"panels/application/components/OriginTrialTreeView.ts | noTrialTokens":{"message":"No trial tokens"},"panels/application/components/OriginTrialTreeView.ts | origin":{"message":"Origin"},"panels/application/components/OriginTrialTreeView.ts | rawTokenText":{"message":"Raw Token"},"panels/application/components/OriginTrialTreeView.ts | status":{"message":"Token Status"},"panels/application/components/OriginTrialTreeView.ts | token":{"message":"Token"},"panels/application/components/OriginTrialTreeView.ts | tokens":{"message":"{PH1} tokens"},"panels/application/components/OriginTrialTreeView.ts | trialName":{"message":"Trial Name"},"panels/application/components/OriginTrialTreeView.ts | usageRestriction":{"message":"Usage Restriction"},"panels/application/components/PermissionsPolicySection.ts | allowedFeatures":{"message":"Allowed Features"},"panels/application/components/PermissionsPolicySection.ts | clickToShowHeader":{"message":"Click to reveal the request whose \"Permissions-Policy\" HTTP header disables this feature."},"panels/application/components/PermissionsPolicySection.ts | clickToShowIframe":{"message":"Click to reveal the top-most iframe which does not allow this feature in the elements panel."},"panels/application/components/PermissionsPolicySection.ts | disabledByFencedFrame":{"message":"disabled inside a fencedframe"},"panels/application/components/PermissionsPolicySection.ts | disabledByHeader":{"message":"disabled by \"Permissions-Policy\" header"},"panels/application/components/PermissionsPolicySection.ts | disabledByIframe":{"message":"missing in iframe \"allow\" attribute"},"panels/application/components/PermissionsPolicySection.ts | disabledFeatures":{"message":"Disabled Features"},"panels/application/components/PermissionsPolicySection.ts | hideDetails":{"message":"Hide details"},"panels/application/components/PermissionsPolicySection.ts | showDetails":{"message":"Show details"},"panels/application/components/ProtocolHandlersView.ts | dropdownLabel":{"message":"Select protocol handler"},"panels/application/components/ProtocolHandlersView.ts | manifest":{"message":"manifest"},"panels/application/components/ProtocolHandlersView.ts | needHelpReadOur":{"message":"Need help? Read {PH1}."},"panels/application/components/ProtocolHandlersView.ts | protocolDetected":{"message":"Found valid protocol handler registration in the {PH1}. With the app installed, test the registered protocols."},"panels/application/components/ProtocolHandlersView.ts | protocolHandlerRegistrations":{"message":"URL protocol handler registration for PWAs"},"panels/application/components/ProtocolHandlersView.ts | protocolNotDetected":{"message":"Define protocol handlers in the {PH1} to register your app as a handler for custom protocols when your app is installed."},"panels/application/components/ProtocolHandlersView.ts | testProtocol":{"message":"Test protocol"},"panels/application/components/ProtocolHandlersView.ts | textboxLabel":{"message":"Query parameter or endpoint for protocol handler"},"panels/application/components/ProtocolHandlersView.ts | textboxPlaceholder":{"message":"Enter URL"},"panels/application/components/ReportsGrid.ts | destination":{"message":"Destination"},"panels/application/components/ReportsGrid.ts | generatedAt":{"message":"Generated at"},"panels/application/components/ReportsGrid.ts | noReportsToDisplay":{"message":"No reports to display"},"panels/application/components/ReportsGrid.ts | status":{"message":"Status"},"panels/application/components/SharedStorageAccessGrid.ts | allSharedStorageEvents":{"message":"All shared storage events for this page."},"panels/application/components/SharedStorageAccessGrid.ts | eventParams":{"message":"Optional Event Params"},"panels/application/components/SharedStorageAccessGrid.ts | eventTime":{"message":"Event Time"},"panels/application/components/SharedStorageAccessGrid.ts | eventType":{"message":"Access Type"},"panels/application/components/SharedStorageAccessGrid.ts | mainFrameId":{"message":"Main Frame ID"},"panels/application/components/SharedStorageAccessGrid.ts | noEvents":{"message":"No shared storage events recorded."},"panels/application/components/SharedStorageAccessGrid.ts | ownerOrigin":{"message":"Owner Origin"},"panels/application/components/SharedStorageAccessGrid.ts | sharedStorage":{"message":"Shared storage"},"panels/application/components/SharedStorageMetadataView.ts | budgetExplanation":{"message":"Remaining data leakage allowed within a 24-hour period for this origin in bits of entropy"},"panels/application/components/SharedStorageMetadataView.ts | creation":{"message":"Creation Time"},"panels/application/components/SharedStorageMetadataView.ts | entropyBudget":{"message":"Entropy Budget for Fenced Frames"},"panels/application/components/SharedStorageMetadataView.ts | notYetCreated":{"message":"Not yet created"},"panels/application/components/SharedStorageMetadataView.ts | numEntries":{"message":"Number of Entries"},"panels/application/components/SharedStorageMetadataView.ts | resetBudget":{"message":"Reset Budget"},"panels/application/components/SharedStorageMetadataView.ts | sharedStorage":{"message":"Shared storage"},"panels/application/components/StackTrace.ts | cannotRenderStackTrace":{"message":"Cannot render stack trace"},"panels/application/components/StackTrace.ts | creationStackTrace":{"message":"Frame Creation Stack Trace"},"panels/application/components/StackTrace.ts | showLess":{"message":"Show less"},"panels/application/components/StackTrace.ts | showSMoreFrames":{"message":"{n, plural, =1 {Show # more frame} other {Show # more frames}}"},"panels/application/components/StorageMetadataView.ts | bucketName":{"message":"Bucket name"},"panels/application/components/StorageMetadataView.ts | confirmBucketDeletion":{"message":"Delete the \"{PH1}\" bucket?"},"panels/application/components/StorageMetadataView.ts | defaultBucket":{"message":"Default bucket"},"panels/application/components/StorageMetadataView.ts | deleteBucket":{"message":"Delete bucket"},"panels/application/components/StorageMetadataView.ts | durability":{"message":"Durability"},"panels/application/components/StorageMetadataView.ts | expiration":{"message":"Expiration"},"panels/application/components/StorageMetadataView.ts | isOpaque":{"message":"Is opaque"},"panels/application/components/StorageMetadataView.ts | isThirdParty":{"message":"Is third-party"},"panels/application/components/StorageMetadataView.ts | loading":{"message":"Loading…"},"panels/application/components/StorageMetadataView.ts | no":{"message":"No"},"panels/application/components/StorageMetadataView.ts | none":{"message":"None"},"panels/application/components/StorageMetadataView.ts | opaque":{"message":"(opaque)"},"panels/application/components/StorageMetadataView.ts | origin":{"message":"Origin"},"panels/application/components/StorageMetadataView.ts | persistent":{"message":"Is persistent"},"panels/application/components/StorageMetadataView.ts | quota":{"message":"Quota"},"panels/application/components/StorageMetadataView.ts | topLevelSite":{"message":"Top-level site"},"panels/application/components/StorageMetadataView.ts | yes":{"message":"Yes"},"panels/application/components/StorageMetadataView.ts | yesBecauseAncestorChainHasCrossSite":{"message":"Yes, because the ancestry chain contains a third-party origin"},"panels/application/components/StorageMetadataView.ts | yesBecauseKeyIsOpaque":{"message":"Yes, because the storage key is opaque"},"panels/application/components/StorageMetadataView.ts | yesBecauseOriginNotInTopLevelSite":{"message":"Yes, because the origin is outside of the top-level site"},"panels/application/components/StorageMetadataView.ts | yesBecauseTopLevelIsOpaque":{"message":"Yes, because the top-level site is opaque"},"panels/application/components/TrustTokensView.ts | allStoredTrustTokensAvailableIn":{"message":"All stored private state tokens available in this browser instance."},"panels/application/components/TrustTokensView.ts | deleteTrustTokens":{"message":"Delete all stored private state tokens issued by {PH1}."},"panels/application/components/TrustTokensView.ts | issuer":{"message":"Issuer"},"panels/application/components/TrustTokensView.ts | noTrustTokensStored":{"message":"No private state tokens are currently stored."},"panels/application/components/TrustTokensView.ts | storedTokenCount":{"message":"Stored token count"},"panels/application/components/TrustTokensView.ts | trustTokens":{"message":"Private state tokens"},"panels/application/CookieItemsView.ts | clearAllCookies":{"message":"Clear all cookies"},"panels/application/CookieItemsView.ts | clearFilteredCookies":{"message":"Clear filtered cookies"},"panels/application/CookieItemsView.ts | cookies":{"message":"Cookies"},"panels/application/CookieItemsView.ts | numberOfCookiesShownInTableS":{"message":"Number of cookies shown in table: {PH1}"},"panels/application/CookieItemsView.ts | onlyShowCookiesWhichHaveAn":{"message":"Only show cookies that have an associated issue"},"panels/application/CookieItemsView.ts | onlyShowCookiesWithAnIssue":{"message":"Only show cookies with an issue"},"panels/application/CookieItemsView.ts | selectACookieToPreviewItsValue":{"message":"Select a cookie to preview its value"},"panels/application/CookieItemsView.ts | showUrlDecoded":{"message":"Show URL-decoded"},"panels/application/DatabaseModel.ts | anUnexpectedErrorSOccurred":{"message":"An unexpected error {PH1} occurred."},"panels/application/DatabaseModel.ts | databaseNoLongerHasExpected":{"message":"Database no longer has expected version."},"panels/application/DatabaseQueryView.ts | databaseQuery":{"message":"Database Query"},"panels/application/DatabaseQueryView.ts | queryS":{"message":"Query: {PH1}"},"panels/application/DatabaseTableView.ts | anErrorOccurredTryingToreadTheS":{"message":"An error occurred trying to read the \"{PH1}\" table."},"panels/application/DatabaseTableView.ts | database":{"message":"Database"},"panels/application/DatabaseTableView.ts | refresh":{"message":"Refresh"},"panels/application/DatabaseTableView.ts | theStableIsEmpty":{"message":"The \"{PH1}\" table is empty."},"panels/application/DatabaseTableView.ts | visibleColumns":{"message":"Visible columns"},"panels/application/DOMStorageItemsView.ts | domStorage":{"message":"DOM Storage"},"panels/application/DOMStorageItemsView.ts | domStorageItemDeleted":{"message":"The storage item was deleted."},"panels/application/DOMStorageItemsView.ts | domStorageItems":{"message":"DOM Storage Items"},"panels/application/DOMStorageItemsView.ts | domStorageItemsCleared":{"message":"DOM Storage Items cleared"},"panels/application/DOMStorageItemsView.ts | domStorageNumberEntries":{"message":"Number of entries shown in table: {PH1}"},"panels/application/DOMStorageItemsView.ts | key":{"message":"Key"},"panels/application/DOMStorageItemsView.ts | selectAValueToPreview":{"message":"Select a value to preview"},"panels/application/DOMStorageItemsView.ts | value":{"message":"Value"},"panels/application/IndexedDBViews.ts | clearObjectStore":{"message":"Clear object store"},"panels/application/IndexedDBViews.ts | collapse":{"message":"Collapse"},"panels/application/IndexedDBViews.ts | dataMayBeStale":{"message":"Data may be stale"},"panels/application/IndexedDBViews.ts | deleteDatabase":{"message":"Delete database"},"panels/application/IndexedDBViews.ts | deleteSelected":{"message":"Delete selected"},"panels/application/IndexedDBViews.ts | expandRecursively":{"message":"Expand Recursively"},"panels/application/IndexedDBViews.ts | idb":{"message":"IDB"},"panels/application/IndexedDBViews.ts | indexedDb":{"message":"Indexed DB"},"panels/application/IndexedDBViews.ts | keyGeneratorValueS":{"message":"Key generator value: {PH1}"},"panels/application/IndexedDBViews.ts | keyPath":{"message":"Key path: "},"panels/application/IndexedDBViews.ts | keyString":{"message":"Key"},"panels/application/IndexedDBViews.ts | objectStores":{"message":"Object stores"},"panels/application/IndexedDBViews.ts | pleaseConfirmDeleteOfSDatabase":{"message":"Please confirm delete of \"{PH1}\" database."},"panels/application/IndexedDBViews.ts | primaryKey":{"message":"Primary key"},"panels/application/IndexedDBViews.ts | refresh":{"message":"Refresh"},"panels/application/IndexedDBViews.ts | refreshDatabase":{"message":"Refresh database"},"panels/application/IndexedDBViews.ts | showNextPage":{"message":"Show next page"},"panels/application/IndexedDBViews.ts | showPreviousPage":{"message":"Show previous page"},"panels/application/IndexedDBViews.ts | someEntriesMayHaveBeenModified":{"message":"Some entries may have been modified"},"panels/application/IndexedDBViews.ts | startFromKey":{"message":"Start from key"},"panels/application/IndexedDBViews.ts | totalEntriesS":{"message":"Total entries: {PH1}"},"panels/application/IndexedDBViews.ts | valueString":{"message":"Value"},"panels/application/IndexedDBViews.ts | version":{"message":"Version"},"panels/application/InterestGroupStorageView.ts | clickToDisplayBody":{"message":"Click on any interest group event to display the group's current state"},"panels/application/InterestGroupStorageView.ts | noDataAvailable":{"message":"No details available for the selected interest group. The browser may have left the group."},"panels/application/InterestGroupTreeElement.ts | interestGroups":{"message":"Interest groups"},"panels/application/OpenedWindowDetailsView.ts | accessToOpener":{"message":"Access to opener"},"panels/application/OpenedWindowDetailsView.ts | clickToRevealInElementsPanel":{"message":"Click to reveal in Elements panel"},"panels/application/OpenedWindowDetailsView.ts | closed":{"message":"closed"},"panels/application/OpenedWindowDetailsView.ts | crossoriginEmbedderPolicy":{"message":"Cross-Origin Embedder Policy"},"panels/application/OpenedWindowDetailsView.ts | document":{"message":"Document"},"panels/application/OpenedWindowDetailsView.ts | no":{"message":"No"},"panels/application/OpenedWindowDetailsView.ts | openerFrame":{"message":"Opener Frame"},"panels/application/OpenedWindowDetailsView.ts | reportingTo":{"message":"reporting to"},"panels/application/OpenedWindowDetailsView.ts | security":{"message":"Security"},"panels/application/OpenedWindowDetailsView.ts | securityIsolation":{"message":"Security & Isolation"},"panels/application/OpenedWindowDetailsView.ts | showsWhetherTheOpenedWindowIs":{"message":"Shows whether the opened window is able to access its opener and vice versa"},"panels/application/OpenedWindowDetailsView.ts | type":{"message":"Type"},"panels/application/OpenedWindowDetailsView.ts | unknown":{"message":"Unknown"},"panels/application/OpenedWindowDetailsView.ts | url":{"message":"URL"},"panels/application/OpenedWindowDetailsView.ts | webWorker":{"message":"Web Worker"},"panels/application/OpenedWindowDetailsView.ts | windowWithoutTitle":{"message":"Window without title"},"panels/application/OpenedWindowDetailsView.ts | worker":{"message":"worker"},"panels/application/OpenedWindowDetailsView.ts | yes":{"message":"Yes"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | action":{"message":"Action"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | status":{"message":"Status"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | statusFailure":{"message":"Failure"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | statusNotTriggered":{"message":"Not triggered"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | statusPending":{"message":"Pending"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | statusReady":{"message":"Ready"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | statusRunning":{"message":"Running"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | statusSuccess":{"message":"Success"},"panels/application/preloading/components/MismatchedPreloadingGrid.ts | url":{"message":"URL"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | buttonClickToInspect":{"message":"Click to inspect prerendered page"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | buttonClickToRevealRuleSet":{"message":"Click to reveal rule set"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | buttonInspect":{"message":"Inspect"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusFailure":{"message":"Speculative load failed."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusNotTriggered":{"message":"Speculative load attempt is not yet triggered."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusPending":{"message":"Speculative load attempt is eligible but pending."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusReady":{"message":"Speculative load finished and the result is ready for the next navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusRunning":{"message":"Speculative load is running."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailedStatusSuccess":{"message":"Speculative load finished and used for a navigation."},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsAction":{"message":"Action"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsDetailedInformation":{"message":"Detailed information"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsFailureReason":{"message":"Failure reason"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsRuleSet":{"message":"Rule set"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | detailsStatus":{"message":"Status"},"panels/application/preloading/components/PreloadingDetailsReportView.ts | selectAnElementForMoreDetails":{"message":"Select an element for more details"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | descriptionDisabledByBatterySaver":{"message":"Speculative loading is disabled because of the operating system's Battery Saver mode."},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | descriptionDisabledByDataSaver":{"message":"Speculative loading is disabled because of the operating system's Data Saver mode."},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | descriptionDisabledByHoldbackPrefetchSpeculationRules":{"message":"Prefetch is forced-enabled because DevTools is open. When DevTools is closed, prefetch will be disabled because this browser session is part of a holdback group used for performance comparisons."},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | descriptionDisabledByHoldbackPrerenderSpeculationRules":{"message":"Prerendering is forced-enabled because DevTools is open. When DevTools is closed, prerendering will be disabled because this browser session is part of a holdback group used for performance comparisons."},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | descriptionDisabledByPreference":{"message":"Speculative loading is disabled because of user settings or an extension. Go to {PH1} to update your preference. Go to {PH2} to disable any extension that blocks speculative loading."},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | extensionsSettings":{"message":"Extensions settings"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | footerLearnMore":{"message":"Learn more"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | headerDisabledByBatterySaver":{"message":"Battery Saver"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | headerDisabledByDataSaver":{"message":"Data Saver"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | headerDisabledByHoldbackPrefetchSpeculationRules":{"message":"Prefetch was disabled, but is force-enabled now"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | headerDisabledByHoldbackPrerenderSpeculationRules":{"message":"Prerendering was disabled, but is force-enabled now"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | headerDisabledByPreference":{"message":"User settings or extensions"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | infobarPreloadingIsDisabled":{"message":"Speculative loading is disabled"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | infobarPreloadingIsForceEnabled":{"message":"Speculative loading is force-enabled"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | preloadingPagesSettings":{"message":"Preload pages settings"},"panels/application/preloading/components/PreloadingDisabledInfobar.ts | titleReasonsPreventingPreloading":{"message":"Reasons preventing speculative loading"},"panels/application/preloading/components/PreloadingGrid.ts | action":{"message":"Action"},"panels/application/preloading/components/PreloadingGrid.ts | ruleSet":{"message":"Rule set"},"panels/application/preloading/components/PreloadingGrid.ts | status":{"message":"Status"},"panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts | activationNavigationValue":{"message":"Value in activation navigation"},"panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts | headerName":{"message":"Header name"},"panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts | initialNavigationValue":{"message":"Value in initial navigation"},"panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts | missing":{"message":"(missing)"},"panels/application/preloading/components/PreloadingString.ts | PrefetchEvictedAfterCandidateRemoved":{"message":"The prefetch was discarded because no speculation rule in the initating page triggers a prefetch for this URL anymore."},"panels/application/preloading/components/PreloadingString.ts | PrefetchEvictedForNewerPrefetch":{"message":"The prefetch was discarded because the initiating page has too many prefetches ongoing, and this was one of the oldest."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedIneligibleRedirect":{"message":"The prefetch was redirected, but the redirect URL is not eligible for prefetch."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedInvalidRedirect":{"message":"The prefetch was redirected, but there was a problem with the redirect."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedMIMENotSupported":{"message":"The prefetch failed because the response's Content-Type header was not supported."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedNetError":{"message":"The prefetch failed because of a network error."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedNon2XX":{"message":"The prefetch failed because of a non-2xx HTTP response status code."},"panels/application/preloading/components/PreloadingString.ts | PrefetchFailedPerPageLimitExceeded":{"message":"The prefetch was not performed because the initiating page already has too many prefetches ongoing."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIneligibleRetryAfter":{"message":"A previous prefetch to the origin got a HTTP 503 response with an Retry-After header that has not elapsed yet."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIsPrivacyDecoy":{"message":"The URL was not eligible to be prefetched because there was a registered service worker or cross-site cookies for that origin, but the prefetch was put on the network anyways and not used, to disguise that the user had some kind of previous relationship with the origin."},"panels/application/preloading/components/PreloadingString.ts | PrefetchIsStale":{"message":"Too much time elapsed between the prefetch and usage, so the prefetch was discarded."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleBatterySaverEnabled":{"message":"The prefetch was not performed because the Battery Saver setting was enabled."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleBrowserContextOffTheRecord":{"message":"The prefetch was not performed because the browser is in Incognito or Guest mode."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleDataSaverEnabled":{"message":"The prefetch was not performed because the operating system is in Data Saver mode."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleExistingProxy":{"message":"The URL is not eligible to be prefetched, because in the default network context it is configured to use a proxy server."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleHostIsNonUnique":{"message":"The URL was not eligible to be prefetched because its host was not unique (e.g., a non publicly routable IP address or a hostname which is not registry-controlled), but the prefetch was required to be proxied."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleNonDefaultStoragePartition":{"message":"The URL was not eligible to be prefetched because it uses a non-default storage partition."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligiblePreloadingDisabled":{"message":"The prefetch was not performed because speculative loading was disabled."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy":{"message":"The URL was not eligible to be prefetched because the default network context cannot be configured to use the prefetch proxy for a same-site cross-origin prefetch request."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleSchemeIsNotHttps":{"message":"The URL was not eligible to be prefetched because its scheme was not https:."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleUserHasCookies":{"message":"The URL was not eligible to be prefetched because it was cross-site, but the user had cookies for that origin."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotEligibleUserHasServiceWorker":{"message":"The URL was not eligible to be prefetched because there was a registered service worker for that origin, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotUsedCookiesChanged":{"message":"The prefetch was not used because it was a cross-site prefetch, and cookies were added for that URL while the prefetch was ongoing, so the prefetched response is now out-of-date."},"panels/application/preloading/components/PreloadingString.ts | PrefetchNotUsedProbeFailed":{"message":"The prefetch was blocked by your Internet Service Provider or network administrator."},"panels/application/preloading/components/PreloadingString.ts | PrefetchProxyNotAvailable":{"message":"A network error was encountered when trying to set up a connection to the prefetching proxy."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusActivatedDuringMainFrameNavigation":{"message":"Prerendered page activated during initiating page's main frame navigation."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusActivatedWithAuxiliaryBrowsingContexts":{"message":"The prerender was not used because during activation time, there were other windows with an active opener reference to the initiating page, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusActivationFramePolicyNotCompatible":{"message":"The prerender was not used because the sandboxing flags or permissions policy of the initiating page was not compatible with those of the prerendering page."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusActivationNavigationParameterMismatch":{"message":"The prerender was not used because during activation time, different navigation parameters (e.g., HTTP headers) were calculated than during the original prerendering navigation request."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusActivationUrlHasEffectiveUrl":{"message":"The prerender was not used because during activation time, navigation has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)"},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusAudioOutputDeviceRequested":{"message":"The prerendered page requested audio output, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusBatterySaverEnabled":{"message":"The prerender was not performed because the user requested that the browser use less battery."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusBlockedByClient":{"message":"Some resource load was blocked."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusClientCertRequested":{"message":"The prerendering navigation required a HTTP client certificate."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusCrossSiteNavigationInInitialNavigation":{"message":"The prerendering navigation failed because it targeted a cross-site URL."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusCrossSiteNavigationInMainFrameNavigation":{"message":"The prerendered page navigated to a cross-site URL."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusCrossSiteRedirectInInitialNavigation":{"message":"The prerendering navigation failed because the prerendered URL redirected to a cross-site URL."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusCrossSiteRedirectInMainFrameNavigation":{"message":"The prerendered page navigated to a URL which redirected to a cross-site URL."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusDataSaverEnabled":{"message":"The prerender was not performed because the user requested that the browser use less data."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusDownload":{"message":"The prerendered page attempted to initiate a download, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusHasEffectiveUrl":{"message":"The initiating page cannot perform prerendering, because it has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)"},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusInvalidSchemeNavigation":{"message":"The URL was not eligible to be prerendered because its scheme was not http: or https:."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusInvalidSchemeRedirect":{"message":"The prerendering navigation failed because it redirected to a URL whose scheme was not http: or https:."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusLoginAuthRequested":{"message":"The prerendering navigation required HTTP authentication, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusLowEndDevice":{"message":"The prerender was not performed because this device does not have enough total system memory to support prerendering."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMainFrameNavigation":{"message":"The prerendered page navigated itself to another URL, which is currently not supported."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMaxNumOfRunningEagerPrerendersExceeded":{"message":"The prerender whose eagerness is \"eager\" was not performed because the initiating page already has too many prerenders ongoing. Remove other speculation rules with \"eager\" to enable further prerendering."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMaxNumOfRunningEmbedderPrerendersExceeded":{"message":"The browser-triggered prerender was not performed because the initiating page already has too many prerenders ongoing."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMaxNumOfRunningNonEagerPrerendersExceeded":{"message":"The old non-eager prerender (with a \"moderate\" or \"conservative\" eagerness and triggered by hovering or clicking links) was automatically canceled due to starting a new non-eager prerender. It can be retriggered by interacting with the link again."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMemoryLimitExceeded":{"message":"The prerender was not performed because the browser exceeded the prerendering memory limit."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMemoryPressureAfterTriggered":{"message":"The prerendered page was unloaded because the browser came under critical memory pressure."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMemoryPressureOnTrigger":{"message":"The prerender was not performed because the browser was under critical memory pressure."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMixedContent":{"message":"The prerendered page contained mixed content."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusMojoBinderPolicy":{"message":"The prerendered page used a forbidden JavaScript API that is currently not supported. (Internal Mojo interface: {PH1})"},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusNavigationBadHttpStatus":{"message":"The prerendering navigation failed because of a non-2xx HTTP response status code."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusNavigationRequestBlockedByCsp":{"message":"The prerendering navigation was blocked by a Content Security Policy."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusNavigationRequestNetworkError":{"message":"The prerendering navigation encountered a network error."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusPreloadingDisabled":{"message":"The prerender was not performed because the user disabled preloading in their browser settings."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusPrerenderingDisabledByDevTools":{"message":"The prerender was not performed because DevTools has been used to disable prerendering."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusPrerenderingUrlHasEffectiveUrl":{"message":"The prerendering navigation failed because it has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)"},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusPrimaryMainFrameRendererProcessCrashed":{"message":"The initiating page crashed."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusPrimaryMainFrameRendererProcessKilled":{"message":"The initiating page was killed."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusRedirectedPrerenderingUrlHasEffectiveUrl":{"message":"The prerendering navigation failed because it redirected to an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)"},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusRendererProcessCrashed":{"message":"The prerendered page crashed."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusRendererProcessKilled":{"message":"The prerendered page was killed."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInInitialNavigation":{"message":"The prerendering navigation failed because it was to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInMainFrameNavigation":{"message":"The prerendered page navigated to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInInitialNavigation":{"message":"The prerendering navigation failed because the prerendered URL redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInMainFrameNavigation":{"message":"The prerendered page navigated to a URL which redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header."},"panels/application/preloading/components/PreloadingString.ts | prerenderFinalStatusSpeculationRuleRemoved":{"message":"The prerendered page was unloaded because the initiating page removed the corresponding prerender rule from