chrome-devtools-frontend 1.0.1473514 → 1.0.1506453
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gemini/commands/migrate-e2e-non-hosted.toml +43 -0
- package/.gemini/commands/review.toml +85 -0
- package/.geminiignore +6 -0
- package/.github/workflows/auto-close-prs.yml +30 -0
- package/.stylelintignore +0 -1
- package/.vscode/devtools-workspace-settings.json +2 -1
- package/AUTHORS +3 -0
- package/WATCHLISTS +0 -4
- package/config/gni/devtools_grd_files.gni +92 -47
- package/config/gni/devtools_image_files.gni +8 -0
- package/config/gni/i18n.gni +3 -2
- package/config/owner/COMMON_OWNERS +2 -0
- package/docs/README.md +2 -2
- package/docs/architecture_of_devtools.md +8 -8
- package/docs/committers_policy.md +2 -0
- package/docs/contributing/README.md +29 -5
- package/docs/contributing/changes.md +1 -1
- package/docs/contributing/images/quickstart-vscode-tsversion.png +0 -0
- package/docs/contributing/infrastructure.md +89 -0
- package/docs/cookbook/localization.md +86 -79
- package/docs/get_the_code.md +9 -9
- package/docs/styleguide/ux/components.md +190 -2
- package/docs/styleguide/ux/glossary.md +16 -0
- package/docs/styleguide/ux/images/context-menu-example.png +0 -0
- package/docs/ui_engineering.md +80 -19
- package/eslint.config.mjs +64 -23
- package/extension-api/ExtensionAPI.d.ts +3 -0
- package/extensions/cxx_debugging/CMakeLists.txt +0 -6
- package/extensions/cxx_debugging/e2e/MochaRootHooks.ts +3 -1
- package/extensions/cxx_debugging/e2e/TestDriver.ts +1 -2
- package/extensions/cxx_debugging/src/GlobMatch.ts +1 -1
- package/extensions/cxx_debugging/src/ModuleConfiguration.ts +2 -2
- package/extensions/cxx_debugging/third_party/llvm/README.chromium +2 -0
- package/extensions/cxx_debugging/tools/bootstrap.py +7 -0
- package/front_end/Images/generate-css-vars.js +1 -1
- package/front_end/Images/readme.md +1 -2
- package/front_end/Images/rollup.config.mjs +12 -1
- package/front_end/Images/src/baseline-high-availability.svg +17 -0
- package/front_end/Images/src/baseline-limited-availability.svg +19 -0
- package/front_end/Images/src/baseline-low-availability.svg +31 -0
- package/front_end/Images/src/bucket.svg +4 -0
- package/front_end/Images/src/label-auto.svg +3 -0
- package/front_end/Images/src/shield.svg +3 -0
- package/front_end/Images/src/smart-assistant.svg +3 -1
- package/front_end/Images/src/speculative-loads.svg +1 -0
- package/front_end/Images/src/text-analysis.svg +3 -0
- package/front_end/Tests.js +78 -230
- package/front_end/application_tokens.css +7 -1
- package/front_end/core/common/Base64.test.ts +1 -1
- package/front_end/core/common/Base64.ts +3 -3
- package/front_end/core/common/Color.ts +38 -0
- package/front_end/core/common/Debouncer.ts +3 -3
- package/front_end/core/common/EventTarget.test.ts +1 -0
- package/front_end/core/common/Gzip.test.ts +63 -0
- package/front_end/core/common/Gzip.ts +72 -0
- package/front_end/core/common/ResourceType.ts +29 -29
- package/front_end/core/common/ReturnToPanel.ts +15 -0
- package/front_end/core/common/Revealer.ts +10 -10
- package/front_end/core/common/SettingRegistration.ts +22 -22
- package/front_end/core/common/Settings.test.ts +151 -18
- package/front_end/core/common/Settings.ts +99 -8
- package/front_end/core/common/SimpleHistoryManager.ts +0 -17
- package/front_end/core/common/common.ts +4 -0
- package/front_end/core/host/AidaClient.test.ts +103 -2
- package/front_end/core/host/AidaClient.ts +161 -31
- package/front_end/core/host/InspectorFrontendHost.ts +57 -48
- package/front_end/core/host/InspectorFrontendHostAPI.ts +11 -0
- package/front_end/core/host/ResourceLoader.ts +15 -15
- package/front_end/core/host/UserMetrics.ts +27 -13
- package/front_end/core/i18n/NumberFormatter.test.ts +92 -0
- package/front_end/core/i18n/NumberFormatter.ts +9 -9
- package/front_end/core/i18n/collect-ui-strings.js +3 -3
- package/front_end/core/i18n/time-utilities.ts +3 -14
- package/front_end/core/platform/Brand.ts +8 -1
- package/front_end/core/platform/DevToolsPath.ts +1 -1
- package/front_end/core/platform/StringUtilities.test.ts +54 -1
- package/front_end/core/platform/StringUtilities.ts +34 -8
- package/front_end/core/protocol_client/InspectorBackend.ts +9 -9
- package/front_end/core/root/Runtime.ts +52 -8
- package/front_end/core/sdk/AnimationModel.test.ts +0 -24
- package/front_end/core/sdk/AnimationModel.ts +1 -95
- package/front_end/core/sdk/AutofillModel.ts +8 -2
- package/front_end/core/sdk/CPUProfilerModel.ts +2 -2
- package/front_end/core/sdk/CSSContainerQuery.test.ts +15 -0
- package/front_end/core/sdk/CSSContainerQuery.ts +3 -1
- package/front_end/core/sdk/CSSMatchedStyles.test.ts +2 -1
- package/front_end/core/sdk/CSSMatchedStyles.ts +79 -50
- package/front_end/core/sdk/CSSModel.ts +20 -7
- package/front_end/core/sdk/CSSPropertyParser.test.ts +4 -3
- package/front_end/core/sdk/CSSPropertyParser.ts +12 -4
- package/front_end/core/sdk/CSSPropertyParserMatchers.test.ts +46 -15
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +131 -58
- package/front_end/core/sdk/CSSRule.ts +44 -44
- package/front_end/core/sdk/CSSStyleSheetHeader.ts +2 -6
- package/front_end/core/sdk/ChildTargetManager.ts +1 -1
- package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +3 -8
- package/front_end/core/sdk/Connections.ts +17 -30
- package/front_end/core/sdk/ConsoleModel.ts +9 -9
- package/front_end/core/sdk/DOMModel.ts +45 -16
- package/front_end/core/sdk/DebuggerModel.test.ts +7 -4
- package/front_end/core/sdk/DebuggerModel.ts +55 -11
- package/front_end/core/sdk/EmulationModel.ts +13 -0
- package/front_end/core/sdk/EventBreakpointsModel.ts +2 -2
- package/front_end/core/sdk/IOModel.ts +28 -2
- package/front_end/core/sdk/NetworkManager.test.ts +0 -27
- package/front_end/core/sdk/NetworkManager.ts +137 -105
- package/front_end/core/sdk/NetworkRequest.ts +747 -616
- package/front_end/core/sdk/OverlayModel.ts +4 -8
- package/front_end/core/sdk/PageResourceLoader.ts +32 -13
- package/front_end/core/sdk/PreloadingModel.ts +1 -0
- package/front_end/core/sdk/RehydratingConnection.ts +13 -14
- package/front_end/core/sdk/RemoteObject.test.ts +24 -2
- package/front_end/core/sdk/RemoteObject.ts +0 -3
- package/front_end/core/sdk/Resource.ts +0 -5
- package/front_end/core/sdk/RuntimeModel.ts +2 -1
- package/front_end/core/sdk/Script.ts +2 -7
- package/front_end/core/sdk/ServerTiming.ts +12 -12
- package/front_end/core/sdk/ServiceWorkerCacheModel.ts +7 -3
- package/front_end/core/sdk/ServiceWorkerManager.ts +14 -18
- package/front_end/core/sdk/SourceMap.test.ts +55 -73
- package/front_end/core/sdk/SourceMap.ts +14 -11
- package/front_end/core/sdk/SourceMapFunctionRanges.ts +15 -9
- package/front_end/core/sdk/SourceMapScopeChainEntry.test.ts +6 -5
- package/front_end/core/sdk/SourceMapScopeChainEntry.ts +14 -14
- package/front_end/core/sdk/SourceMapScopesInfo.test.ts +232 -317
- package/front_end/core/sdk/SourceMapScopesInfo.ts +26 -25
- package/front_end/core/sdk/StorageBucketsModel.ts +4 -0
- package/front_end/core/sdk/Target.ts +2 -2
- package/front_end/core/sdk/TargetManager.ts +1 -1
- package/front_end/core/sdk/sdk-meta.ts +86 -86
- package/front_end/core/sdk/sdk.ts +0 -2
- package/front_end/design_system_tokens.css +1 -1
- package/front_end/devtools_compatibility.js +201 -177
- package/front_end/entrypoints/inspector_main/InspectorMain.ts +12 -0
- package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +3 -3
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +1 -1
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +1 -1
- package/front_end/entrypoints/js_app/js_app.ts +3 -3
- package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +1 -1
- package/front_end/entrypoints/main/GlobalAiButton.test.ts +132 -0
- package/front_end/entrypoints/main/GlobalAiButton.ts +141 -0
- package/front_end/entrypoints/main/MainImpl.test.ts +27 -0
- package/front_end/entrypoints/main/MainImpl.ts +179 -47
- package/front_end/entrypoints/main/globalAiButton.css +72 -0
- package/front_end/entrypoints/main/main-meta.ts +82 -42
- package/front_end/entrypoints/main/main.ts +2 -0
- package/front_end/entrypoints/node_app/NodeConnectionsPanel.ts +6 -6
- package/front_end/entrypoints/node_app/NodeMain.ts +8 -7
- package/front_end/entrypoints/node_app/node_app.ts +5 -5
- package/front_end/entrypoints/wasmparser_worker/WasmParserWorker.ts +1 -1
- package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
- package/front_end/generated/Deprecation.ts +7 -29
- package/front_end/generated/InspectorBackendCommands.js +183 -167
- package/front_end/generated/SupportedCSSProperties.js +252 -166
- package/front_end/generated/protocol-mapping.d.ts +687 -608
- package/front_end/generated/protocol-proxy-api.d.ts +782 -672
- package/front_end/generated/protocol.ts +11862 -11509
- package/front_end/global_typings/global_defs.d.ts +5 -0
- package/front_end/legacy_test_runner/accessibility_test_runner/accessibility_test_runner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/CacheStorageTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/IndexedDBTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ResourceTreeTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ResourcesTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/ServiceWorkersTestRunner.js +1 -1
- package/front_end/legacy_test_runner/application_test_runner/StorageTestRunner.js +1 -1
- package/front_end/legacy_test_runner/axe_core_test_runner/axe_core_test_runner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/AutomappingTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/BindingsTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/IsolatedFilesystemTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/OverridesTestRunner.js +1 -1
- package/front_end/legacy_test_runner/bindings_test_runner/PersistenceTestRunner.js +1 -1
- package/front_end/legacy_test_runner/console_test_runner/console_test_runner.js +20 -20
- package/front_end/legacy_test_runner/coverage_test_runner/coverage_test_runner.js +11 -11
- package/front_end/legacy_test_runner/data_grid_test_runner/data_grid_test_runner.js +1 -1
- package/front_end/legacy_test_runner/device_mode_test_runner/device_mode_test_runner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/EditDOMTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/ElementsPanelShadowSelectionOnRefreshTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/ElementsTestRunner.js +6 -80
- package/front_end/legacy_test_runner/elements_test_runner/SetOuterHTMLTestRunner.js +1 -1
- package/front_end/legacy_test_runner/elements_test_runner/StylesUpdateLinksTestRunner.js +1 -1
- package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsNetworkTestRunner.js +1 -1
- package/front_end/legacy_test_runner/extensions_test_runner/ExtensionsTestRunner.js +1 -1
- package/front_end/legacy_test_runner/heap_profiler_test_runner/heap_profiler_test_runner.js +2 -2
- package/front_end/legacy_test_runner/layers_test_runner/layers_test_runner.js +1 -1
- package/front_end/legacy_test_runner/network_test_runner/network_test_runner.js +1 -1
- package/front_end/legacy_test_runner/performance_test_runner/TimelineDataTestRunner.js +1 -1
- package/front_end/legacy_test_runner/performance_test_runner/TimelineTestRunner.js +1 -10
- package/front_end/legacy_test_runner/sdk_test_runner/sdk_test_runner.js +1 -1
- package/front_end/legacy_test_runner/security_test_runner/security_test_runner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/AutocompleteTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +4 -4
- package/front_end/legacy_test_runner/sources_test_runner/EditorTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/LiveEditTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/SearchTestRunner.js +1 -1
- package/front_end/legacy_test_runner/sources_test_runner/SourcesTestRunner.js +2 -2
- package/front_end/legacy_test_runner/test_runner/TestRunner.js +45 -45
- package/front_end/legacy_test_runner/test_runner/test_runner.js +4 -4
- package/front_end/models/ai_assistance/AiHistoryStorage.snapshot.txt +66 -0
- package/front_end/models/ai_assistance/AiHistoryStorage.test.ts +82 -3
- package/front_end/models/ai_assistance/AiHistoryStorage.ts +95 -6
- package/front_end/models/ai_assistance/AiUtils.ts +1 -1
- package/front_end/models/ai_assistance/ConversationHandler.test.ts +355 -0
- package/front_end/models/ai_assistance/ConversationHandler.ts +380 -0
- package/front_end/models/ai_assistance/ExtensionScope.ts +1 -4
- package/front_end/models/ai_assistance/README.md +79 -0
- package/front_end/models/ai_assistance/agents/AiAgent.test.ts +22 -1
- package/front_end/models/ai_assistance/agents/AiAgent.ts +76 -95
- package/front_end/models/ai_assistance/agents/FileAgent.test.ts +3 -2
- package/front_end/models/ai_assistance/agents/FileAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/NetworkAgent.ts +7 -7
- package/front_end/models/ai_assistance/agents/PerformanceAgent.test.ts +591 -62
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +1111 -117
- package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.test.ts +4 -2
- package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.ts +75 -5
- package/front_end/models/ai_assistance/agents/StylingAgent.test.ts +166 -507
- package/front_end/models/ai_assistance/agents/StylingAgent.ts +125 -319
- package/front_end/models/ai_assistance/ai_assistance.ts +2 -1
- package/front_end/models/ai_assistance/data_formatters/FileFormatter.test.ts +3 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +725 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.test.ts +249 -274
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +494 -83
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +556 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.test.ts +92 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +359 -0
- package/front_end/models/ai_assistance/debug.ts +1 -1
- package/front_end/models/ai_assistance/injected.ts +1 -1
- package/front_end/models/ai_code_completion/AiCodeCompletion.test.ts +328 -0
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +289 -0
- package/front_end/models/ai_code_completion/ai_code_completion.ts +6 -0
- package/front_end/models/ai_code_completion/debug.ts +30 -0
- package/front_end/models/autofill_manager/AutofillManager.test.ts +0 -6
- package/front_end/models/autofill_manager/AutofillManager.ts +16 -9
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +0 -4
- package/front_end/models/bindings/CompilerScriptMapping.test.ts +8 -4
- package/front_end/models/bindings/CompilerScriptMapping.ts +12 -5
- package/front_end/models/bindings/DebuggerLanguagePlugins.test.ts +7 -2
- package/front_end/models/bindings/DebuggerLanguagePlugins.ts +33 -24
- package/front_end/models/bindings/DebuggerWorkspaceBinding.test.ts +95 -3
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +94 -21
- package/front_end/models/bindings/DefaultScriptMapping.test.ts +3 -2
- package/front_end/models/bindings/FileUtils.test.ts +1 -10
- package/front_end/models/bindings/FileUtils.ts +6 -22
- package/front_end/models/bindings/LiveLocation.ts +0 -5
- package/front_end/models/bindings/PresentationConsoleMessageHelper.test.ts +7 -2
- package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +0 -4
- package/front_end/models/bindings/ResourceMapping.test.ts +7 -2
- package/front_end/models/bindings/ResourceMapping.ts +0 -4
- package/front_end/models/bindings/ResourceScriptMapping.test.ts +2 -1
- package/front_end/models/bindings/ResourceScriptMapping.ts +4 -4
- package/front_end/models/bindings/SASSSourceMapping.ts +1 -1
- package/front_end/models/bindings/StylesSourceMapping.ts +0 -5
- package/front_end/models/bindings/bindings.ts +0 -2
- package/front_end/models/breakpoints/BreakpointManager.test.ts +9 -2
- package/front_end/models/cpu_profile/CPUProfileDataModel.ts +4 -2
- package/front_end/models/elements/ElementUpdateRecord.ts +101 -0
- package/front_end/models/elements/elements.ts +9 -0
- package/front_end/models/emulation/DeviceModeModel.ts +6 -22
- package/front_end/models/emulation/EmulatedDevices.ts +12 -12
- package/front_end/models/extensions/ExtensionAPI.ts +9 -5
- package/front_end/models/extensions/ExtensionPanel.ts +5 -2
- package/front_end/models/extensions/ExtensionServer.test.ts +122 -16
- package/front_end/models/extensions/ExtensionServer.ts +114 -31
- package/front_end/models/extensions/ExtensionView.ts +1 -1
- package/front_end/models/extensions/LanguageExtensionEndpoint.ts +14 -7
- package/front_end/models/har/HARFormat.ts +1 -1
- package/front_end/models/har/Importer.test.ts +40 -0
- package/front_end/models/har/Importer.ts +35 -1
- package/front_end/models/har/Writer.test.ts +3 -2
- package/front_end/models/har/Writer.ts +2 -2
- package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
- package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
- package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +5 -5
- package/front_end/models/issues_manager/CookieIssue.ts +2 -2
- package/front_end/models/issues_manager/CorsIssue.ts +3 -3
- package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
- package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.test.ts → ElementAccessibilityIssue.test.ts} +22 -21
- package/front_end/models/issues_manager/{SelectElementAccessibilityIssue.ts → ElementAccessibilityIssue.ts} +29 -21
- package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
- package/front_end/models/issues_manager/GenericIssue.ts +4 -4
- package/front_end/models/issues_manager/HeavyAdIssue.ts +1 -1
- package/front_end/models/issues_manager/Issue.ts +6 -6
- package/front_end/models/issues_manager/IssuesManager.ts +8 -3
- package/front_end/models/issues_manager/LowTextContrastIssue.ts +1 -1
- package/front_end/models/issues_manager/MarkdownIssueDescription.ts +1 -1
- package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
- package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +2 -2
- package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
- package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +3 -3
- package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +1 -1
- package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
- package/front_end/models/issues_manager/UnencodedDigestIssue.test.ts +49 -0
- package/front_end/models/issues_manager/UnencodedDigestIssue.ts +88 -0
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +1 -1
- package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +1 -3
- package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +17 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +14 -0
- package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
- package/front_end/models/issues_manager/descriptions/userReidentificationBlocked.md +1 -1
- package/front_end/models/issues_manager/issues_manager.ts +4 -2
- package/front_end/models/javascript_metadata/NativeFunctions.js +201 -127
- package/front_end/models/live-metrics/web-vitals-injected/OnEachInteraction.ts +1 -1
- package/front_end/models/live-metrics/web-vitals-injected/rollup.config.mjs +1 -1
- package/front_end/models/logs/NetworkLog.ts +74 -83
- package/front_end/models/logs/logs-meta.ts +4 -4
- package/front_end/models/persistence/AutomaticFileSystemManager.test.ts +0 -39
- package/front_end/models/persistence/AutomaticFileSystemManager.ts +14 -21
- package/front_end/models/persistence/EditFileSystemView.ts +6 -6
- package/front_end/models/persistence/IsolatedFileSystem.ts +27 -9
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +16 -3
- package/front_end/models/persistence/NetworkPersistenceManager.ts +7 -3
- package/front_end/models/persistence/PersistenceAction.test.ts +10 -7
- package/front_end/models/persistence/PersistenceActions.ts +26 -15
- package/front_end/models/persistence/PersistenceImpl.test.ts +2 -1
- package/front_end/models/persistence/PersistenceImpl.ts +7 -4
- package/front_end/models/persistence/PersistenceUtils.ts +10 -7
- package/front_end/models/persistence/PlatformFileSystem.ts +11 -2
- package/front_end/models/persistence/WorkspaceSettingsTab.ts +6 -6
- package/front_end/models/persistence/editFileSystemView.css +17 -15
- package/front_end/models/persistence/persistence-meta.ts +10 -10
- package/front_end/models/persistence/workspaceSettingsTab.css +29 -27
- package/front_end/models/project_settings/ProjectSettingsModel.ts +2 -2
- package/front_end/models/source_map_scopes/NamesResolver.test.ts +3 -2
- package/front_end/models/source_map_scopes/NamesResolver.ts +1 -1
- package/front_end/models/source_map_scopes/ScopeChainModel.test.ts +2 -1
- package/front_end/models/stack_trace/README.md +14 -0
- package/front_end/models/stack_trace/StackTrace.ts +35 -0
- package/front_end/models/stack_trace/StackTraceImpl.test.ts +74 -0
- package/front_end/models/stack_trace/StackTraceImpl.ts +82 -0
- package/front_end/models/stack_trace/StackTraceModel.test.ts +296 -0
- package/front_end/models/stack_trace/StackTraceModel.ts +127 -0
- package/front_end/models/stack_trace/Trie.test.ts +129 -0
- package/front_end/models/stack_trace/Trie.ts +154 -0
- package/front_end/models/stack_trace/stack_trace.ts +9 -0
- package/front_end/models/stack_trace/stack_trace_impl.ts +13 -0
- package/front_end/models/text_utils/ContentProvider.ts +1 -3
- package/front_end/models/text_utils/StaticContentProvider.test.ts +1 -1
- package/front_end/models/text_utils/StaticContentProvider.ts +1 -5
- package/front_end/models/text_utils/TextUtils.ts +2 -3
- package/front_end/models/trace/LanternComputationData.ts +1 -0
- package/front_end/models/trace/ModelImpl.ts +18 -7
- package/front_end/models/trace/Processor.test.ts +15 -14
- package/front_end/models/trace/Processor.ts +49 -32
- package/front_end/models/trace/extras/ScriptDuplication.test.ts +13 -10
- package/front_end/models/trace/extras/StackTraceForEvent.test.ts +10 -8
- package/front_end/models/trace/extras/ThirdParties.ts +2 -3
- package/front_end/models/trace/extras/TraceTree.ts +7 -6
- package/front_end/models/trace/extras/extras.ts +0 -2
- package/front_end/models/trace/handlers/AnimationFramesHandler.test.ts +5 -5
- package/front_end/models/trace/handlers/AnimationFramesHandler.ts +10 -0
- package/front_end/models/trace/handlers/ExtensionTraceDataHandler.test.ts +177 -85
- package/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +28 -27
- package/front_end/models/trace/handlers/FramesHandler.test.ts +2 -7
- package/front_end/models/trace/handlers/FramesHandler.ts +46 -37
- package/front_end/models/trace/handlers/ImagePaintingHandler.test.ts +41 -0
- package/front_end/models/trace/handlers/ImagePaintingHandler.ts +44 -1
- package/front_end/models/trace/handlers/InitiatorsHandler.test.ts +62 -15
- package/front_end/models/trace/handlers/InitiatorsHandler.ts +24 -0
- package/front_end/models/trace/handlers/LayoutShiftsHandler.test.ts +6 -18
- package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +21 -17
- package/front_end/models/trace/handlers/MetaHandler.test.ts +12 -0
- package/front_end/models/trace/handlers/MetaHandler.ts +5 -4
- package/front_end/models/trace/handlers/NetworkRequestsHandler.test.ts +21 -21
- package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +79 -32
- package/front_end/models/trace/handlers/PageLoadMetricsHandler.test.ts +6 -18
- package/front_end/models/trace/handlers/RendererHandler.test.ts +26 -39
- package/front_end/models/trace/handlers/RendererHandler.ts +10 -17
- package/front_end/models/trace/handlers/SamplesHandler.test.ts +3 -4
- package/front_end/models/trace/handlers/SamplesHandler.ts +13 -12
- package/front_end/models/trace/handlers/ScriptsHandler.test.ts +1 -1
- package/front_end/models/trace/handlers/ScriptsHandler.ts +8 -4
- package/front_end/models/trace/handlers/SelectorStatsHandler.test.ts +1 -3
- package/front_end/models/trace/handlers/SelectorStatsHandler.ts +65 -0
- package/front_end/models/trace/handlers/UserInteractionsHandler.test.ts +4 -2
- package/front_end/models/trace/handlers/UserInteractionsHandler.ts +4 -2
- package/front_end/models/trace/handlers/UserTimingsHandler.test.ts +326 -0
- package/front_end/models/trace/handlers/UserTimingsHandler.ts +61 -24
- package/front_end/models/trace/handlers/helpers.test.ts +7 -6
- package/front_end/models/trace/handlers/helpers.ts +19 -14
- package/front_end/models/trace/handlers/types.ts +5 -1
- package/front_end/models/trace/helpers/SamplesIntegrator.test.ts +3 -3
- package/front_end/models/trace/helpers/SamplesIntegrator.ts +24 -33
- package/front_end/models/trace/helpers/SyntheticEvents.ts +2 -2
- package/front_end/models/trace/helpers/Timing.ts +66 -3
- package/front_end/models/trace/helpers/Trace.test.ts +6 -7
- package/front_end/models/trace/helpers/Trace.ts +47 -19
- package/front_end/models/trace/helpers/TreeHelpers.test.ts +0 -8
- package/front_end/models/trace/helpers/TreeHelpers.ts +1 -1
- package/front_end/models/trace/insights/CLSCulprits.test.ts +10 -7
- package/front_end/models/trace/insights/CLSCulprits.ts +85 -23
- package/front_end/models/trace/insights/Cache.ts +12 -0
- package/front_end/models/trace/insights/Common.test.ts +3 -3
- package/front_end/models/trace/insights/Common.ts +56 -22
- package/front_end/models/trace/insights/DOMSize.test.ts +4 -1
- package/front_end/models/trace/insights/DOMSize.ts +48 -1
- package/front_end/models/trace/insights/DocumentLatency.test.ts +5 -1
- package/front_end/models/trace/insights/DocumentLatency.ts +59 -4
- package/front_end/models/trace/insights/DuplicatedJavaScript.test.ts +2 -3
- package/front_end/models/trace/insights/DuplicatedJavaScript.ts +15 -4
- package/front_end/models/trace/insights/FontDisplay.test.ts +1 -1
- package/front_end/models/trace/insights/FontDisplay.ts +8 -0
- package/front_end/models/trace/insights/ForcedReflow.ts +25 -4
- package/front_end/models/trace/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +2 -2
- package/front_end/models/trace/insights/{InteractionToNextPaint.ts → INPBreakdown.ts} +63 -16
- package/front_end/models/trace/insights/ImageDelivery.ts +39 -7
- package/front_end/models/trace/insights/LCPBreakdown.test.ts +100 -0
- package/front_end/models/trace/insights/LCPBreakdown.ts +255 -0
- package/front_end/models/trace/insights/LCPDiscovery.ts +84 -8
- package/front_end/models/trace/insights/LegacyJavaScript.ts +14 -4
- package/front_end/models/trace/insights/Models.ts +2 -2
- package/front_end/models/trace/insights/ModernHTTP.test.ts +3 -2
- package/front_end/models/trace/insights/ModernHTTP.ts +35 -18
- package/front_end/models/trace/insights/NetworkDependencyTree.test.ts +10 -1
- package/front_end/models/trace/insights/NetworkDependencyTree.ts +41 -13
- package/front_end/models/trace/insights/RenderBlocking.test.ts +8 -12
- package/front_end/models/trace/insights/RenderBlocking.ts +13 -1
- package/front_end/models/trace/insights/SlowCSSSelector.test.ts +12 -34
- package/front_end/models/trace/insights/SlowCSSSelector.ts +46 -27
- package/front_end/models/trace/insights/ThirdParties.test.ts +1 -1
- package/front_end/models/trace/insights/ThirdParties.ts +36 -0
- package/front_end/models/trace/insights/Viewport.test.ts +16 -1
- package/front_end/models/trace/insights/Viewport.ts +41 -3
- package/front_end/models/trace/insights/types.ts +5 -2
- package/front_end/models/trace/lantern/core/NetworkAnalyzer.test.ts +4 -0
- package/front_end/models/trace/lantern/graph/BaseNode.ts +1 -1
- package/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +1 -1
- package/front_end/models/trace/trace.ts +0 -2
- package/front_end/models/trace/types/Configuration.ts +8 -0
- package/front_end/models/trace/types/Extensions.ts +24 -3
- package/front_end/models/trace/types/File.ts +5 -2
- package/front_end/models/trace/types/Overlays.ts +140 -0
- package/front_end/models/trace/types/Timing.ts +1 -0
- package/front_end/models/trace/types/TraceEvents.test.ts +2 -1
- package/front_end/models/trace/types/TraceEvents.ts +98 -62
- package/front_end/models/trace/types/types.ts +1 -0
- package/front_end/models/workspace/FileManager.ts +5 -3
- package/front_end/models/{bindings → workspace}/IgnoreListManager.test.ts +11 -7
- package/front_end/models/{bindings → workspace}/IgnoreListManager.ts +36 -33
- package/front_end/models/workspace/UISourceCode.test.ts +18 -17
- package/front_end/models/workspace/UISourceCode.ts +17 -7
- package/front_end/models/workspace/WorkspaceImpl.ts +1 -1
- package/front_end/models/workspace/workspace.ts +2 -0
- package/front_end/models/workspace_diff/WorkspaceDiff.test.ts +2 -0
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +7 -2
- package/front_end/panels/accessibility/ARIAAttributesView.test.ts +101 -0
- package/front_end/panels/accessibility/ARIAAttributesView.ts +16 -4
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +12 -9
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +31 -28
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +8 -12
- package/front_end/panels/accessibility/AccessibilityStrings.ts +87 -87
- package/front_end/panels/accessibility/AccessibilitySubPane.ts +6 -6
- package/front_end/panels/accessibility/SourceOrderView.ts +95 -61
- package/front_end/panels/accessibility/accessibilityProperties.css +5 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.snapshot.txt +32 -0
- package/front_end/panels/ai_assistance/AiAssistancePanel.test.ts +465 -377
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +289 -339
- package/front_end/panels/ai_assistance/PatchWidget.ts +30 -29
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.test.ts +11 -1
- package/front_end/panels/ai_assistance/SelectWorkspaceDialog.ts +29 -19
- package/front_end/panels/ai_assistance/aiAssistancePanel.css +1 -0
- package/front_end/panels/ai_assistance/ai_assistance-meta.ts +40 -20
- package/front_end/panels/ai_assistance/components/ChatView.test.ts +1 -0
- package/front_end/panels/ai_assistance/components/ChatView.ts +55 -44
- package/front_end/panels/ai_assistance/components/ExploreWidget.ts +10 -24
- package/front_end/panels/ai_assistance/components/UserActionRow.test.ts +4 -0
- package/front_end/panels/ai_assistance/components/UserActionRow.ts +25 -3
- package/front_end/panels/ai_assistance/components/chatView.css +0 -9
- package/front_end/panels/ai_assistance/components/exploreWidget.css +104 -102
- package/front_end/panels/ai_assistance/components/userActionRow.css +95 -94
- package/front_end/panels/ai_assistance/selectWorkspaceDialog.css +70 -69
- package/front_end/panels/animation/AnimationGroupPreviewUI.ts +1 -10
- package/front_end/panels/animation/AnimationTimeline.test.ts +6 -13
- package/front_end/panels/animation/AnimationTimeline.ts +183 -169
- package/front_end/panels/animation/AnimationUI.ts +4 -4
- package/front_end/panels/animation/animation.ts +0 -2
- package/front_end/panels/animation/animationTimeline.css +0 -67
- package/front_end/panels/application/AppManifestView.test.ts +21 -0
- package/front_end/panels/application/AppManifestView.ts +158 -139
- package/front_end/panels/application/ApplicationPanelSidebar.test.ts +13 -8
- package/front_end/panels/application/ApplicationPanelSidebar.ts +53 -54
- package/front_end/panels/application/BackForwardCacheTreeElement.ts +1 -1
- package/front_end/panels/application/BackgroundServiceView.test.ts +4 -8
- package/front_end/panels/application/BackgroundServiceView.ts +46 -44
- package/front_end/panels/application/CookieItemsView.ts +13 -14
- package/front_end/panels/application/DOMStorageItemsView.ts +5 -5
- package/front_end/panels/application/ExtensionStorageItemsView.ts +3 -3
- package/front_end/panels/application/IndexedDBModel.test.ts +2 -2
- package/front_end/panels/application/IndexedDBModel.ts +3 -0
- package/front_end/panels/application/IndexedDBViews.ts +58 -32
- package/front_end/panels/application/InterestGroupStorageModel.ts +3 -0
- package/front_end/panels/application/InterestGroupStorageView.ts +4 -4
- package/front_end/panels/application/InterestGroupTreeElement.ts +1 -1
- package/front_end/panels/application/KeyValueStorageItemsView.ts +10 -10
- package/front_end/panels/application/OpenedWindowDetailsView.ts +18 -18
- package/front_end/panels/application/PreloadingTreeElement.ts +5 -5
- package/front_end/panels/application/ReportingApiTreeElement.ts +1 -1
- package/front_end/panels/application/ReportingApiView.test.ts +161 -30
- package/front_end/panels/application/ReportingApiView.ts +153 -50
- package/front_end/panels/application/ServiceWorkerCacheTreeElement.ts +5 -5
- package/front_end/panels/application/ServiceWorkerCacheViews.ts +20 -17
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +7 -7
- package/front_end/panels/application/ServiceWorkersView.ts +40 -76
- package/front_end/panels/application/SharedStorageEventsView.test.ts +2 -2
- package/front_end/panels/application/SharedStorageEventsView.ts +10 -20
- package/front_end/panels/application/SharedStorageItemsView.ts +11 -11
- package/front_end/panels/application/SharedStorageListTreeElement.ts +1 -1
- package/front_end/panels/application/SharedStorageModel.ts +3 -0
- package/front_end/panels/application/StorageBucketsTreeElement.test.ts +5 -4
- package/front_end/panels/application/StorageBucketsTreeElement.ts +4 -4
- package/front_end/panels/application/StorageItemsToolbar.ts +7 -7
- package/front_end/panels/application/StorageView.test.ts +5 -1
- package/front_end/panels/application/StorageView.ts +15 -13
- package/front_end/panels/application/application-meta.ts +7 -7
- package/front_end/panels/application/application.ts +0 -2
- package/front_end/panels/application/components/BackForwardCacheStrings.ts +5 -0
- package/front_end/panels/application/components/BackForwardCacheView.ts +11 -37
- package/front_end/panels/application/components/BounceTrackingMitigationsView.ts +1 -0
- package/front_end/panels/application/components/EndpointsGrid.ts +6 -2
- package/front_end/panels/application/components/FrameDetailsView.test.ts +4 -2
- package/front_end/panels/application/components/FrameDetailsView.ts +88 -57
- package/front_end/panels/application/components/InterestGroupAccessGrid.ts +9 -10
- package/front_end/panels/application/components/OriginTrialTreeView.ts +13 -22
- package/front_end/panels/application/components/PermissionsPolicySection.ts +11 -16
- package/front_end/panels/application/components/ProtocolHandlersView.ts +10 -10
- package/front_end/panels/application/components/ReportsGrid.ts +10 -11
- package/front_end/panels/application/components/SharedStorageAccessGrid.test.ts +4 -4
- package/front_end/panels/application/components/SharedStorageAccessGrid.ts +107 -101
- package/front_end/panels/application/components/SharedStorageMetadataView.ts +8 -8
- package/front_end/panels/application/components/StackTrace.ts +6 -12
- package/front_end/panels/application/components/StorageMetadataView.ts +22 -26
- package/front_end/panels/application/components/TrustTokensView.ts +3 -3
- package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
- package/front_end/panels/application/components/sharedStorageAccessGrid.css +19 -17
- package/front_end/panels/application/preloading/PreloadingView.ts +29 -24
- package/front_end/panels/application/preloading/components/MismatchedPreloadingGrid.ts +9 -9
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +22 -22
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +28 -29
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +5 -7
- package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.test.ts +2 -2
- package/front_end/panels/application/preloading/components/PreloadingMismatchedHeadersGrid.ts +4 -4
- package/front_end/panels/application/preloading/components/PreloadingString.ts +34 -34
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.test.ts +28 -1
- package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +4 -10
- package/front_end/panels/application/preloading/components/RuleSetGrid.test.ts +21 -0
- package/front_end/panels/application/preloading/components/RuleSetGrid.ts +10 -10
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +22 -23
- package/front_end/panels/application/resourcesSidebar.css +0 -4
- package/front_end/panels/autofill/AutofillView.test.ts +188 -259
- package/front_end/panels/autofill/AutofillView.ts +207 -217
- package/front_end/panels/autofill/autofill-meta.ts +3 -4
- package/front_end/panels/autofill/autofillView.css +85 -82
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.test.ts +179 -0
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +146 -35
- package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +27 -27
- package/front_end/panels/browser_debugger/ObjectEventListenersSidebarPane.ts +3 -2
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +16 -14
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +17 -17
- package/front_end/panels/browser_debugger/browser_debugger.ts +2 -0
- package/front_end/panels/changes/ChangesSidebar.ts +7 -7
- package/front_end/panels/changes/ChangesView.ts +6 -5
- package/front_end/panels/changes/CombinedDiffView.test.ts +2 -0
- package/front_end/panels/changes/CombinedDiffView.ts +2 -2
- package/front_end/panels/common/AiCodeCompletionDisclaimer.test.ts +57 -0
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +186 -0
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.test.ts +85 -0
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +139 -0
- package/front_end/panels/common/AiCodeCompletionTeaser.test.ts +98 -0
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +258 -0
- package/front_end/panels/common/FreDialog.ts +139 -0
- package/front_end/panels/common/aiCodeCompletionDisclaimer.css +57 -0
- package/front_end/panels/common/aiCodeCompletionSummaryToolbar.css +101 -0
- package/front_end/panels/common/aiCodeCompletionTeaser.css +42 -0
- package/front_end/panels/common/common.css +0 -83
- package/front_end/panels/common/common.ts +8 -107
- package/front_end/panels/common/freDialog.css +88 -0
- package/front_end/panels/console/ConsoleContextSelector.ts +5 -5
- package/front_end/panels/console/ConsoleFormat.test.ts +1 -1
- package/front_end/panels/console/ConsolePanel.ts +1 -2
- package/front_end/panels/console/ConsolePinPane.ts +9 -9
- package/front_end/panels/console/ConsolePrompt.test.ts +47 -1
- package/front_end/panels/console/ConsolePrompt.ts +188 -19
- package/front_end/panels/console/ConsoleSidebar.test.ts +130 -0
- package/front_end/panels/console/ConsoleSidebar.ts +170 -207
- package/front_end/panels/console/ConsoleView.test.ts +4 -4
- package/front_end/panels/console/ConsoleView.ts +146 -54
- package/front_end/panels/console/ConsoleViewMessage.test.ts +1 -1
- package/front_end/panels/console/ConsoleViewMessage.ts +66 -71
- package/front_end/panels/console/console-meta.ts +27 -27
- package/front_end/panels/console/consoleSidebar.css +2 -0
- package/front_end/panels/console/consoleView.css +22 -15
- package/front_end/panels/console_counters/WarningErrorCounter.ts +133 -100
- package/front_end/panels/coverage/CoverageDecorationManager.test.ts +2 -1
- package/front_end/panels/coverage/CoverageListView.ts +30 -30
- package/front_end/panels/coverage/CoverageView.test.ts +3 -2
- package/front_end/panels/coverage/CoverageView.ts +35 -34
- package/front_end/panels/coverage/coverage-meta.ts +7 -7
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +49 -49
- package/front_end/panels/css_overview/CSSOverviewPanel.test.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +1 -1
- package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +3 -3
- package/front_end/panels/css_overview/CSSOverviewStartView.ts +8 -8
- package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +7 -7
- package/front_end/panels/css_overview/cssOverviewCompletedView.css +289 -287
- package/front_end/panels/css_overview/cssOverviewSidebarPanel.css +43 -42
- package/front_end/panels/css_overview/cssOverviewStartView.css +68 -66
- package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
- package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +14 -14
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +5 -5
- package/front_end/panels/developer_resources/developerResourcesListView.css +19 -18
- package/front_end/panels/developer_resources/developerResourcesView.css +32 -30
- package/front_end/panels/elements/AccessibilityTreeView.ts +2 -1
- package/front_end/panels/elements/CSSRuleValidator.test.ts +39 -0
- package/front_end/panels/elements/CSSRuleValidator.ts +41 -37
- package/front_end/panels/elements/CSSRuleValidatorHelper.ts +8 -0
- package/front_end/panels/elements/CSSValueTraceView.test.ts +2 -1
- package/front_end/panels/elements/CSSValueTraceView.ts +1 -2
- package/front_end/panels/elements/ClassesPaneWidget.ts +5 -3
- package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +18 -9
- package/front_end/panels/elements/ComputedStyleWidget.ts +4 -3
- package/front_end/panels/elements/DOMLinkifier.ts +6 -4
- package/front_end/panels/elements/DOMTreeWidget.test.ts +58 -0
- package/front_end/panels/elements/ElementIssueUtils.ts +14 -9
- package/front_end/panels/elements/ElementStatePaneWidget.ts +3 -3
- package/front_end/panels/elements/ElementsPanel.test.ts +69 -2
- package/front_end/panels/elements/ElementsPanel.ts +105 -187
- package/front_end/panels/elements/ElementsSidebarPane.ts +1 -1
- package/front_end/panels/elements/ElementsTreeElement.test.ts +401 -0
- package/front_end/panels/elements/ElementsTreeElement.ts +434 -82
- package/front_end/panels/elements/ElementsTreeOutline.test.ts +9 -6
- package/front_end/panels/elements/ElementsTreeOutline.ts +425 -258
- package/front_end/panels/elements/ElementsTreeOutlineRenderer.ts +80 -0
- package/front_end/panels/elements/EventListenersWidget.test.ts +129 -0
- package/front_end/panels/elements/EventListenersWidget.ts +112 -78
- package/front_end/panels/elements/ImagePreviewPopover.ts +1 -1
- package/front_end/panels/elements/InspectElementModeController.test.ts +77 -2
- package/front_end/panels/elements/InspectElementModeController.ts +13 -2
- package/front_end/panels/elements/LayersWidget.ts +95 -63
- package/front_end/panels/elements/{components/LayoutPane.test.ts → LayoutPane.test.ts} +60 -49
- package/front_end/panels/elements/LayoutPane.ts +593 -0
- package/front_end/panels/elements/MarkerDecorator.ts +2 -2
- package/front_end/panels/elements/MetricsSidebarPane.ts +6 -6
- package/front_end/panels/elements/NodeStackTraceWidget.ts +16 -14
- package/front_end/panels/elements/PlatformFontsWidget.ts +8 -8
- package/front_end/panels/elements/PropertiesWidget.ts +2 -2
- package/front_end/panels/elements/PropertyRenderer.test.ts +1 -1
- package/front_end/panels/elements/PropertyRenderer.ts +8 -11
- package/front_end/panels/elements/ShortcutTreeElement.ts +157 -0
- package/front_end/panels/elements/StyleEditorWidget.ts +1 -1
- package/front_end/panels/elements/StylePropertiesSection.test.ts +10 -10
- package/front_end/panels/elements/StylePropertiesSection.ts +42 -44
- package/front_end/panels/elements/StylePropertyHighlighter.test.ts +32 -21
- package/front_end/panels/elements/StylePropertyHighlighter.ts +9 -11
- package/front_end/panels/elements/StylePropertyTreeElement.test.ts +111 -53
- package/front_end/panels/elements/StylePropertyTreeElement.ts +166 -100
- package/front_end/panels/elements/StylesSidebarPane.ts +47 -48
- package/front_end/panels/elements/TopLayerContainer.ts +8 -7
- package/front_end/panels/elements/WebCustomData.test.ts +2 -2
- package/front_end/panels/elements/components/AccessibilityTreeNode.ts +1 -1
- package/front_end/panels/elements/components/AdornerManager.ts +15 -0
- package/front_end/panels/elements/components/CSSHintDetailsView.ts +1 -1
- package/front_end/panels/elements/components/CSSPropertyDocsView.test.ts +101 -2
- package/front_end/panels/elements/components/CSSPropertyDocsView.ts +188 -5
- package/front_end/panels/elements/components/CSSPropertyIconResolver.test.ts +1 -1
- package/front_end/panels/elements/components/CSSPropertyIconResolver.ts +2 -2
- package/front_end/panels/elements/components/CSSVariableValueView.ts +5 -5
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -7
- package/front_end/panels/elements/components/ElementsTreeExpandButton.ts +1 -1
- package/front_end/panels/elements/components/QueryContainer.ts +1 -4
- package/front_end/panels/elements/components/components.ts +0 -4
- package/front_end/panels/elements/components/cssPropertyDocsView.css +12 -1
- package/front_end/panels/elements/components/cssVariableValueView.css +1 -0
- package/front_end/panels/elements/domLinkifier.css +36 -35
- package/front_end/panels/elements/elementStatePaneWidget.css +46 -45
- package/front_end/panels/elements/elements-meta.ts +4 -13
- package/front_end/panels/elements/elements.ts +4 -3
- package/front_end/panels/elements/elementsTreeOutline.css +2 -1
- package/front_end/panels/elements/layersWidget.css +2 -11
- package/front_end/panels/elements/layoutPane.css +145 -0
- package/front_end/panels/elements/metricsSidebarPane.css +1 -1
- package/front_end/panels/elements/nodeStackTraceWidget.css +5 -4
- package/front_end/panels/elements/platformFontsWidget.css +32 -31
- package/front_end/panels/elements/stylePropertiesTreeOutline.css +2 -2
- package/front_end/panels/elements/stylesSidebarPane.css +1 -0
- package/front_end/panels/emulation/DeviceModeToolbar.ts +13 -50
- package/front_end/panels/emulation/DeviceModeView.ts +3 -4
- package/front_end/panels/emulation/InspectedPagePlaceholder.ts +1 -1
- package/front_end/panels/emulation/MediaQueryInspector.ts +4 -2
- package/front_end/panels/emulation/emulation-meta.ts +7 -7
- package/front_end/panels/event_listeners/EventListenersView.test.ts +4 -4
- package/front_end/panels/event_listeners/EventListenersView.ts +34 -31
- package/front_end/panels/explain/PromptBuilder.test.ts +7 -2
- package/front_end/panels/explain/PromptBuilder.ts +3 -1
- package/front_end/panels/explain/components/ConsoleInsight.test.ts +14 -10
- package/front_end/panels/explain/components/ConsoleInsight.ts +13 -34
- package/front_end/panels/explain/explain-meta.ts +3 -3
- package/front_end/panels/issues/AffectedBlockedByResponseView.ts +4 -4
- package/front_end/panels/issues/AffectedCookiesView.ts +6 -6
- package/front_end/panels/issues/AffectedDescendantsWithinSelectElementView.ts +6 -6
- package/front_end/panels/issues/AffectedDirectivesView.ts +9 -9
- package/front_end/panels/issues/AffectedDocumentsInQuirksModeView.ts +4 -4
- package/front_end/panels/issues/AffectedElementsView.ts +1 -1
- package/front_end/panels/issues/AffectedElementsWithLowContrastView.ts +6 -6
- package/front_end/panels/issues/AffectedHeavyAdView.ts +7 -7
- package/front_end/panels/issues/AffectedMetadataAllowedSitesView.ts +1 -1
- package/front_end/panels/issues/AffectedResourcesView.ts +6 -6
- package/front_end/panels/issues/AffectedSharedArrayBufferIssueDetailsView.ts +10 -10
- package/front_end/panels/issues/AffectedSourcesView.ts +1 -1
- package/front_end/panels/issues/AffectedTrackingSitesView.ts +1 -1
- package/front_end/panels/issues/CorsIssueDetailsView.ts +27 -27
- package/front_end/panels/issues/GenericIssueDetailsView.ts +3 -3
- package/front_end/panels/issues/HiddenIssuesRow.ts +55 -29
- package/front_end/panels/issues/IssueAggregator.ts +5 -11
- package/front_end/panels/issues/IssueKindView.ts +2 -2
- package/front_end/panels/issues/IssueView.ts +13 -13
- package/front_end/panels/issues/IssuesPane.ts +5 -4
- package/front_end/panels/issues/components/HideIssuesMenu.ts +1 -1
- package/front_end/panels/issues/issues-meta.ts +2 -2
- package/front_end/panels/js_timeline/js_timeline-meta.ts +6 -6
- package/front_end/panels/layer_viewer/LayerDetailsView.ts +43 -41
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +7 -7
- package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
- package/front_end/panels/layer_viewer/Layers3DView.ts +19 -13
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +9 -9
- package/front_end/panels/layer_viewer/TransformController.ts +14 -8
- package/front_end/panels/layer_viewer/layer_viewer-meta.ts +9 -9
- package/front_end/panels/layers/LayersPanel.ts +3 -3
- package/front_end/panels/layers/layers-meta.ts +2 -2
- package/front_end/panels/lighthouse/LighthouseController.ts +27 -27
- package/front_end/panels/lighthouse/LighthousePanel.ts +7 -7
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +31 -33
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +4 -2
- package/front_end/panels/lighthouse/LighthouseReportSelector.ts +2 -4
- package/front_end/panels/lighthouse/LighthouseStartView.ts +4 -3
- package/front_end/panels/lighthouse/LighthouseStatusView.ts +31 -31
- package/front_end/panels/lighthouse/lighthouse-meta.ts +1 -1
- package/front_end/panels/lighthouse/lighthousePanel.css +9 -0
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +2 -2
- package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +6 -10
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +3 -3
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
- package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +2 -2
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +6 -7
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +1 -1
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
- package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
- package/front_end/panels/media/EventDisplayTable.ts +5 -7
- package/front_end/panels/media/EventTimelineView.ts +4 -4
- package/front_end/panels/media/MainView.test.ts +1 -1
- package/front_end/panels/media/MainView.ts +4 -4
- package/front_end/panels/media/MediaModel.ts +2 -2
- package/front_end/panels/media/PlayerDetailView.ts +8 -8
- package/front_end/panels/media/PlayerListView.ts +8 -8
- package/front_end/panels/media/PlayerMessagesView.ts +15 -17
- package/front_end/panels/media/PlayerPropertiesView.ts +66 -51
- package/front_end/panels/media/TickingFlameChart.ts +6 -5
- package/front_end/panels/media/media-meta.ts +3 -3
- package/front_end/panels/mobile_throttling/CalibrationController.ts +3 -4
- package/front_end/panels/mobile_throttling/MobileThrottlingSelector.ts +3 -3
- package/front_end/panels/mobile_throttling/NetworkPanelIndicator.ts +4 -4
- package/front_end/panels/mobile_throttling/NetworkThrottlingSelector.ts +189 -51
- package/front_end/panels/mobile_throttling/ThrottlingManager.test.ts +37 -1
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +114 -126
- package/front_end/panels/mobile_throttling/ThrottlingPresets.ts +8 -8
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.test.ts +115 -0
- package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +178 -143
- package/front_end/panels/mobile_throttling/mobile_throttling-meta.ts +6 -6
- package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +30 -36
- package/front_end/panels/network/BinaryResourceView.ts +7 -7
- package/front_end/panels/network/BlockedURLsPane.ts +18 -17
- package/front_end/panels/network/EventSourceMessagesView.ts +9 -10
- package/front_end/panels/network/NetworkConfigView.test.ts +35 -0
- package/front_end/panels/network/NetworkConfigView.ts +19 -17
- package/front_end/panels/network/NetworkDataGridNode.test.ts +19 -8
- package/front_end/panels/network/NetworkDataGridNode.ts +129 -90
- package/front_end/panels/network/NetworkItemView.test.ts +3 -3
- package/front_end/panels/network/NetworkItemView.ts +79 -79
- package/front_end/panels/network/NetworkLogView.test.ts +61 -23
- package/front_end/panels/network/NetworkLogView.ts +207 -130
- package/front_end/panels/network/NetworkLogViewColumns.ts +60 -63
- package/front_end/panels/network/NetworkManageCustomHeadersView.ts +5 -5
- package/front_end/panels/network/NetworkPanel.test.ts +3 -3
- package/front_end/panels/network/NetworkPanel.ts +69 -68
- package/front_end/panels/network/NetworkSearchScope.ts +1 -1
- package/front_end/panels/network/NetworkTimeCalculator.ts +35 -40
- package/front_end/panels/network/NetworkWaterfallColumn.ts +2 -12
- package/front_end/panels/network/RequestCookiesView.ts +10 -11
- package/front_end/panels/network/RequestHTMLView.ts +2 -2
- package/front_end/panels/network/RequestInitiatorView.ts +16 -16
- package/front_end/panels/network/RequestPayloadView.ts +12 -13
- package/front_end/panels/network/RequestPreviewView.ts +3 -4
- package/front_end/panels/network/RequestResponseView.test.ts +36 -0
- package/front_end/panels/network/RequestResponseView.ts +5 -5
- package/front_end/panels/network/RequestTimingView.ts +54 -54
- package/front_end/panels/network/ResourceChunkView.ts +13 -13
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +26 -17
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +9 -9
- package/front_end/panels/network/SignedExchangeInfoView.ts +24 -24
- package/front_end/panels/network/binaryResourceView.css +1 -0
- package/front_end/panels/network/components/DirectSocketConnectionView.ts +18 -16
- package/front_end/panels/network/components/HeaderSectionRow.ts +17 -42
- package/front_end/panels/network/components/RequestHeaderSection.ts +6 -11
- package/front_end/panels/network/components/RequestHeadersView.css +2 -2
- package/front_end/panels/network/components/RequestHeadersView.test.ts +5 -2
- package/front_end/panels/network/components/RequestHeadersView.ts +24 -34
- package/front_end/panels/network/components/RequestTrustTokensView.ts +19 -23
- package/front_end/panels/network/components/ResponseHeaderSection.ts +16 -15
- package/front_end/panels/network/components/WebBundleInfoView.ts +4 -9
- package/front_end/panels/network/network-meta.ts +27 -27
- package/front_end/panels/network/networkConfigView.css +13 -6
- package/front_end/panels/network/networkLogView.css +1 -1
- package/front_end/panels/network/networkPanel.css +3 -2
- package/front_end/panels/network/requestHTMLView.css +9 -8
- package/front_end/panels/network/resourceChunkView.css +21 -28
- package/front_end/panels/performance_monitor/PerformanceMonitor.test.ts +121 -6
- package/front_end/panels/performance_monitor/PerformanceMonitor.ts +252 -168
- package/front_end/panels/performance_monitor/performanceMonitor.css +7 -9
- package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
- package/front_end/panels/profiler/HeapDetachedElementsDataGrid.ts +19 -52
- package/front_end/panels/profiler/HeapDetachedElementsView.ts +9 -6
- package/front_end/panels/profiler/HeapProfileView.ts +24 -24
- package/front_end/panels/profiler/HeapProfilerPanel.ts +1 -1
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +20 -20
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +27 -27
- package/front_end/panels/profiler/HeapSnapshotProxy.ts +2 -6
- package/front_end/panels/profiler/HeapSnapshotView.ts +59 -56
- package/front_end/panels/profiler/HeapTimelineOverview.ts +1 -2
- package/front_end/panels/profiler/IsolateSelector.ts +16 -16
- package/front_end/panels/profiler/LiveHeapProfileView.ts +14 -14
- package/front_end/panels/profiler/ModuleUIStrings.ts +26 -26
- package/front_end/panels/profiler/ProfileDataGrid.ts +5 -5
- package/front_end/panels/profiler/ProfileHeader.ts +0 -9
- package/front_end/panels/profiler/ProfileLauncherView.ts +6 -6
- package/front_end/panels/profiler/ProfileSidebarTreeElement.ts +1 -1
- package/front_end/panels/profiler/ProfileView.ts +23 -20
- package/front_end/panels/profiler/ProfilesPanel.ts +9 -9
- package/front_end/panels/profiler/heapProfiler.css +8 -0
- package/front_end/panels/profiler/profiler-meta.ts +12 -12
- package/front_end/panels/protocol_monitor/JSONEditor.test.ts +2 -2
- package/front_end/panels/protocol_monitor/JSONEditor.ts +36 -19
- package/front_end/panels/protocol_monitor/ProtocolMonitor.test.ts +105 -103
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +24 -25
- package/front_end/panels/protocol_monitor/protocolMonitor.css +15 -9
- package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +1 -1
- package/front_end/panels/recorder/RecorderController.test.ts +9 -2
- package/front_end/panels/recorder/RecorderController.ts +82 -85
- package/front_end/panels/recorder/components/CreateRecordingView.ts +2 -2
- package/front_end/panels/recorder/components/RecordingListView.test.ts +42 -53
- package/front_end/panels/recorder/components/RecordingListView.ts +141 -125
- package/front_end/panels/recorder/components/RecordingView.test.ts +73 -122
- package/front_end/panels/recorder/components/RecordingView.ts +912 -929
- package/front_end/panels/recorder/components/StepEditor.ts +13 -13
- package/front_end/panels/recorder/components/StepView.ts +23 -24
- package/front_end/panels/recorder/components/recordingListView.css +76 -75
- package/front_end/panels/recorder/components/recordingView.css +303 -308
- package/front_end/panels/recorder/components/stepView.css +197 -196
- package/front_end/panels/recorder/components/timelineSection.css +1 -1
- package/front_end/panels/recorder/injected/rollup.config.mjs +1 -1
- package/front_end/panels/recorder/injected/selectors/ARIASelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/CSSSelector.ts +4 -4
- package/front_end/panels/recorder/injected/selectors/PierceSelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/TextSelector.ts +2 -2
- package/front_end/panels/recorder/injected/selectors/XPath.ts +3 -3
- package/front_end/panels/recorder/models/RecorderSettings.ts +0 -1
- package/front_end/panels/recorder/models/RecordingPlayer.test.ts +48 -68
- package/front_end/panels/recorder/models/RecordingPlayer.ts +9 -9
- package/front_end/panels/recorder/models/RecordingSession.ts +3 -3
- package/front_end/panels/recorder/recorder-meta.ts +5 -5
- package/front_end/panels/recorder/recorderController.css +3 -3
- package/front_end/panels/screencast/ScreencastApp.ts +1 -1
- package/front_end/panels/screencast/ScreencastView.ts +13 -18
- package/front_end/panels/search/SearchResultsPane.ts +8 -8
- package/front_end/panels/search/SearchView.test.ts +2 -2
- package/front_end/panels/search/SearchView.ts +130 -127
- package/front_end/panels/search/searchResultsPane.css +2 -2
- package/front_end/panels/search/searchView.css +2 -2
- package/front_end/panels/security/CookieControlsView.ts +27 -27
- package/front_end/panels/security/CookieReportView.ts +40 -73
- package/front_end/panels/security/IPProtectionTreeElement.ts +21 -0
- package/front_end/panels/security/IPProtectionView.ts +179 -0
- package/front_end/panels/security/SecurityModel.ts +10 -10
- package/front_end/panels/security/SecurityPanel.test.ts +22 -0
- package/front_end/panels/security/SecurityPanel.ts +107 -107
- package/front_end/panels/security/SecurityPanelSidebar.ts +27 -11
- package/front_end/panels/security/ipProtectionView.css +109 -0
- package/front_end/panels/security/security-meta.ts +4 -4
- package/front_end/panels/security/security.ts +2 -0
- package/front_end/panels/sensors/LocationsSettingsTab.ts +32 -31
- package/front_end/panels/sensors/SensorsView.ts +50 -42
- package/front_end/panels/sensors/sensors-meta.ts +20 -20
- package/front_end/panels/settings/AISettingsTab.test.ts +19 -6
- package/front_end/panels/settings/AISettingsTab.ts +118 -72
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +22 -20
- package/front_end/panels/settings/KeybindsSettingsTab.ts +31 -30
- package/front_end/panels/settings/SettingsScreen.ts +19 -20
- package/front_end/panels/settings/components/SyncSection.test.ts +43 -9
- package/front_end/panels/settings/components/SyncSection.ts +63 -29
- package/front_end/panels/settings/components/syncSection.css +16 -7
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +14 -16
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.test.ts +61 -0
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +134 -28
- package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +19 -0
- package/front_end/panels/settings/emulation/emulation-meta.ts +2 -2
- package/front_end/panels/settings/settings-meta.ts +12 -12
- package/front_end/panels/settings/settingsScreen.css +0 -1
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +5 -5
- package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
- package/front_end/panels/sources/AddSourceMapURLDialog.ts +5 -5
- package/front_end/panels/sources/AiCodeCompletionPlugin.test.ts +119 -0
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +400 -0
- package/front_end/panels/sources/AiWarningInfobarPlugin.ts +3 -3
- package/front_end/panels/sources/BreakpointEditDialog.ts +13 -11
- package/front_end/panels/sources/{components/BreakpointsView.test.ts → BreakpointsView.test.ts} +237 -225
- package/front_end/panels/sources/{components/BreakpointsView.ts → BreakpointsView.ts} +336 -301
- package/front_end/panels/sources/{components/BreakpointsViewUtils.test.ts → BreakpointsViewUtils.test.ts} +29 -29
- package/front_end/panels/sources/{components/BreakpointsViewUtils.ts → BreakpointsViewUtils.ts} +3 -3
- package/front_end/panels/sources/CSSPlugin.ts +26 -17
- package/front_end/panels/sources/CallStackSidebarPane.ts +34 -58
- package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
- package/front_end/panels/sources/CoveragePlugin.test.ts +2 -0
- package/front_end/panels/sources/CoveragePlugin.ts +5 -5
- package/front_end/panels/sources/DebuggerPausedMessage.test.ts +2 -0
- package/front_end/panels/sources/DebuggerPausedMessage.ts +33 -39
- package/front_end/panels/sources/DebuggerPlugin.test.ts +4 -3
- package/front_end/panels/sources/DebuggerPlugin.ts +68 -49
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.test.ts +3 -4
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +7 -7
- package/front_end/panels/sources/GoToLineQuickOpen.ts +15 -15
- package/front_end/panels/sources/InplaceFormatterEditorAction.ts +9 -6
- package/front_end/panels/sources/NavigatorView.test.ts +2 -1
- package/front_end/panels/sources/NavigatorView.ts +39 -35
- package/front_end/panels/sources/OpenFileQuickOpen.ts +6 -6
- package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
- package/front_end/panels/sources/ProfilePlugin.ts +3 -3
- package/front_end/panels/sources/ResourceOriginPlugin.ts +1 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +11 -9
- package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
- package/front_end/panels/sources/SourcesNavigator.test.ts +3 -2
- package/front_end/panels/sources/SourcesNavigator.ts +32 -20
- package/front_end/panels/sources/SourcesPanel.test.ts +90 -0
- package/front_end/panels/sources/SourcesPanel.ts +71 -28
- package/front_end/panels/sources/SourcesSearchScope.ts +1 -1
- package/front_end/panels/sources/SourcesView.test.ts +5 -2
- package/front_end/panels/sources/SourcesView.ts +7 -8
- package/front_end/panels/sources/TabbedEditorContainer.ts +11 -8
- package/front_end/panels/sources/ThreadsSidebarPane.ts +7 -10
- package/front_end/panels/sources/UISourceCodeFrame.test.ts +104 -0
- package/front_end/panels/sources/UISourceCodeFrame.ts +40 -17
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +14 -9
- package/front_end/panels/sources/breakpointsView.css +276 -0
- package/front_end/panels/sources/components/HeadersView.ts +17 -13
- package/front_end/panels/sources/components/components.ts +0 -4
- package/front_end/panels/sources/scopeChainSidebarPane.css +1 -1
- package/front_end/panels/sources/sources-meta.ts +103 -112
- package/front_end/panels/sources/sources.ts +6 -0
- package/front_end/panels/timeline/ActiveFilters.ts +2 -1
- package/front_end/panels/timeline/AnimationsTrackAppender.ts +1 -1
- package/front_end/panels/timeline/AnnotationHelpers.test.ts +14 -8
- package/front_end/panels/timeline/AnnotationHelpers.ts +28 -23
- package/front_end/panels/timeline/AppenderUtils.ts +2 -2
- package/front_end/panels/timeline/CompatibilityTracksAppender.ts +1 -14
- package/front_end/panels/timeline/CountersGraph.test.ts +80 -0
- package/front_end/panels/timeline/CountersGraph.ts +27 -18
- package/front_end/panels/timeline/EntriesFilter.test.ts +22 -15
- package/front_end/panels/timeline/EventsTimelineTreeView.ts +4 -25
- package/front_end/panels/timeline/ExtensionTrackAppender.ts +4 -9
- package/front_end/panels/timeline/GPUTrackAppender.ts +3 -3
- package/front_end/panels/timeline/Initiators.test.ts +22 -19
- package/front_end/panels/timeline/Initiators.ts +19 -6
- package/front_end/panels/timeline/InteractionsTrackAppender.ts +6 -6
- package/front_end/panels/timeline/IsolateSelector.ts +2 -2
- package/front_end/panels/timeline/LayoutShiftsTrackAppender.ts +6 -5
- package/front_end/panels/timeline/ModificationsManager.test.ts +98 -188
- package/front_end/panels/timeline/ModificationsManager.ts +51 -48
- package/front_end/panels/timeline/NetworkTrackAppender.ts +3 -3
- package/front_end/panels/timeline/README.md +5 -13
- package/front_end/{models/trace/extras/Metadata.test.ts → panels/timeline/RecordingMetadata.test.ts} +61 -29
- package/front_end/panels/timeline/RecordingMetadata.ts +79 -0
- package/front_end/panels/timeline/SaveFileFormatter.test.ts +1 -3
- package/front_end/panels/timeline/SaveFileFormatter.ts +0 -8
- package/front_end/panels/timeline/StatusDialog.ts +12 -8
- package/front_end/panels/timeline/ThirdPartyTreeView.ts +5 -5
- package/front_end/panels/timeline/ThreadAppender.ts +29 -29
- package/front_end/panels/timeline/TimelineController.ts +14 -18
- package/front_end/panels/timeline/TimelineDetailsView.test.ts +49 -15
- package/front_end/panels/timeline/TimelineDetailsView.ts +213 -105
- package/front_end/panels/timeline/TimelineEventOverview.ts +6 -6
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.test.ts +56 -95
- package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +94 -65
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.test.ts +3 -62
- package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +10 -30
- package/front_end/panels/timeline/TimelineFlameChartView.test.ts +105 -80
- package/front_end/panels/timeline/TimelineFlameChartView.ts +107 -102
- package/front_end/panels/timeline/TimelineHistoryManager.test.ts +0 -5
- package/front_end/panels/timeline/TimelineHistoryManager.ts +8 -8
- package/front_end/panels/timeline/TimelineLoader.test.ts +4 -7
- package/front_end/panels/timeline/TimelineLoader.ts +22 -3
- package/front_end/panels/timeline/TimelineMiniMap.ts +13 -5
- package/front_end/panels/timeline/TimelinePaintProfilerView.ts +1 -1
- package/front_end/panels/timeline/TimelinePanel.test.ts +381 -117
- package/front_end/panels/timeline/TimelinePanel.ts +576 -345
- package/front_end/panels/timeline/TimelineSelectorStatsView.ts +195 -80
- package/front_end/panels/timeline/TimelineTreeView.test.ts +5 -5
- package/front_end/panels/timeline/TimelineTreeView.ts +25 -25
- package/front_end/panels/timeline/TimelineUIUtils.test.ts +58 -55
- package/front_end/panels/timeline/TimelineUIUtils.ts +159 -345
- package/front_end/panels/timeline/TimingsTrackAppender.ts +12 -7
- package/front_end/panels/timeline/TrackConfigBanner.test.ts +68 -0
- package/front_end/panels/timeline/TrackConfigBanner.ts +97 -0
- package/front_end/panels/timeline/TrackConfiguration.test.ts +3 -3
- package/front_end/panels/timeline/TrackConfiguration.ts +1 -0
- package/front_end/panels/timeline/UIDevtoolsUtils.ts +15 -15
- package/front_end/panels/timeline/components/BreadcrumbsUI.ts +4 -9
- package/front_end/panels/timeline/components/DetailsView.ts +13 -13
- package/front_end/panels/timeline/components/ExportTraceOptions.test.ts +281 -0
- package/front_end/panels/timeline/components/ExportTraceOptions.ts +262 -0
- package/front_end/panels/timeline/components/FieldSettingsDialog.test.ts +1 -1
- package/front_end/panels/timeline/components/FieldSettingsDialog.ts +2 -1
- package/front_end/panels/timeline/components/IgnoreListSetting.test.ts +5 -4
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +7 -7
- package/front_end/panels/timeline/components/InteractionBreakdown.ts +3 -3
- package/front_end/panels/timeline/components/Invalidations.test.ts +2 -1
- package/front_end/panels/timeline/components/LayoutShiftDetails.test.ts +21 -11
- package/front_end/panels/timeline/components/LayoutShiftDetails.ts +325 -307
- package/front_end/panels/timeline/components/LiveMetricsView.test.ts +14 -22
- package/front_end/panels/timeline/components/LiveMetricsView.ts +1 -1
- package/front_end/panels/timeline/components/MetricCard.test.ts +2 -2
- package/front_end/panels/timeline/components/NetworkRequestDetails.test.ts +38 -44
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +318 -278
- package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +8 -8
- package/front_end/panels/timeline/components/NetworkThrottlingSelector.test.ts +3 -0
- package/front_end/panels/timeline/components/OriginMap.ts +1 -1
- package/front_end/panels/timeline/components/RelatedInsightChips.test.ts +17 -31
- package/front_end/panels/timeline/components/RelatedInsightChips.ts +87 -66
- package/front_end/panels/timeline/components/Sidebar.test.ts +43 -4
- package/front_end/panels/timeline/components/Sidebar.ts +47 -20
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.test.ts +47 -72
- package/front_end/panels/timeline/components/SidebarAnnotationsTab.ts +228 -218
- package/front_end/panels/timeline/components/SidebarInsightsTab.test.ts +1 -0
- package/front_end/panels/timeline/components/SidebarInsightsTab.ts +18 -54
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.test.ts +7 -53
- package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +61 -44
- package/front_end/panels/timeline/components/TimelineSummary.ts +4 -4
- package/front_end/panels/timeline/components/Utils.ts +9 -9
- package/front_end/panels/timeline/components/components.ts +2 -0
- package/front_end/panels/timeline/components/exportTraceOptions.css +26 -0
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.test.ts +40 -16
- package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +28 -34
- package/front_end/panels/timeline/components/insights/CLSCulprits.test.ts +5 -5
- package/front_end/panels/timeline/components/insights/CLSCulprits.ts +32 -23
- package/front_end/panels/timeline/components/insights/Cache.ts +4 -22
- package/front_end/panels/timeline/components/insights/Checklist.ts +6 -7
- package/front_end/panels/timeline/components/insights/DOMSize.ts +35 -15
- package/front_end/panels/timeline/components/insights/DocumentLatency.ts +1 -61
- package/front_end/panels/timeline/components/insights/DuplicatedJavaScript.ts +5 -17
- package/front_end/panels/timeline/components/insights/EventRef.ts +7 -9
- package/front_end/panels/timeline/components/insights/FontDisplay.ts +20 -21
- package/front_end/panels/timeline/components/insights/ForcedReflow.ts +5 -28
- package/front_end/panels/timeline/components/insights/{InteractionToNextPaint.test.ts → INPBreakdown.test.ts} +8 -5
- package/front_end/panels/timeline/components/insights/INPBreakdown.ts +70 -0
- package/front_end/panels/timeline/components/insights/ImageDelivery.ts +7 -21
- package/front_end/panels/timeline/components/insights/LCPBreakdown.ts +146 -0
- package/front_end/panels/timeline/components/insights/LCPDiscovery.ts +28 -80
- package/front_end/panels/timeline/components/insights/LegacyJavaScript.ts +3 -15
- package/front_end/panels/timeline/components/insights/ModernHTTP.ts +18 -23
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.test.ts +76 -0
- package/front_end/panels/timeline/components/insights/NetworkDependencyTree.ts +35 -29
- package/front_end/panels/timeline/components/insights/NodeLink.test.ts +113 -0
- package/front_end/panels/timeline/components/insights/NodeLink.ts +50 -10
- package/front_end/panels/timeline/components/insights/README.md +1 -1
- package/front_end/panels/timeline/components/insights/RenderBlocking.ts +4 -22
- package/front_end/panels/timeline/components/insights/SidebarInsight.ts +1 -2
- package/front_end/panels/timeline/components/insights/SlowCSSSelector.ts +16 -28
- package/front_end/panels/timeline/components/insights/Table.ts +2 -3
- package/front_end/panels/timeline/components/insights/ThirdParties.ts +7 -47
- package/front_end/panels/timeline/components/insights/Viewport.ts +0 -6
- package/front_end/panels/timeline/components/insights/insights.ts +4 -4
- package/front_end/panels/timeline/components/insights/table.css +18 -0
- package/front_end/panels/timeline/components/insights/types.ts +2 -2
- package/front_end/panels/timeline/components/layoutShiftDetails.css +99 -92
- package/front_end/panels/timeline/components/networkRequestDetails.css +110 -104
- package/front_end/panels/timeline/components/networkRequestTooltip.css +88 -83
- package/front_end/panels/timeline/components/relatedInsightChips.css +60 -58
- package/front_end/panels/timeline/components/sidebarAnnotationsTab.css +80 -78
- package/front_end/panels/timeline/components/sidebarInsightsTab.css +0 -25
- package/front_end/panels/timeline/components/sidebarSingleInsightSet.css +1 -1
- package/front_end/panels/timeline/docs/flame_chart_migration.md +2 -2
- package/front_end/panels/timeline/overlays/OverlaysImpl.test.ts +149 -42
- package/front_end/panels/timeline/overlays/OverlaysImpl.ts +218 -283
- package/front_end/panels/timeline/overlays/components/EntriesLinkOverlay.ts +1 -1
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +69 -104
- package/front_end/panels/timeline/overlays/components/TimeRangeOverlay.ts +1 -1
- package/front_end/panels/timeline/overlays/components/entryLabelOverlay.css +13 -0
- package/front_end/panels/timeline/overlays/components/timeRangeOverlay.css +2 -1
- package/front_end/panels/timeline/timeline-meta.ts +14 -14
- package/front_end/panels/timeline/timeline.ts +4 -4
- package/front_end/panels/timeline/timelineDetailsView.css +118 -0
- package/front_end/panels/timeline/timelineFlameChartView.css +18 -117
- package/front_end/panels/timeline/timelineMiniMap.css +5 -0
- package/front_end/panels/timeline/timelinePanel.css +2 -10
- package/front_end/panels/timeline/timelineTreeView.css +0 -4
- package/front_end/panels/timeline/track_appenders/CompatibilityTracksAppender.test.ts +16 -15
- package/front_end/panels/timeline/track_appenders/ExtensionTrackAppender.test.ts +6 -4
- package/front_end/panels/timeline/track_appenders/InteractionsTrackAppender.test.ts +0 -1
- package/front_end/panels/timeline/track_appenders/ThreadAppender.test.ts +34 -49
- package/front_end/panels/timeline/utils/AICallTree.test.ts +54 -120
- package/front_end/panels/timeline/utils/AICallTree.ts +31 -74
- package/front_end/panels/timeline/utils/AIContext.ts +67 -0
- package/front_end/panels/timeline/utils/EntityMapper.test.ts +5 -4
- package/front_end/panels/timeline/utils/EntityMapper.ts +3 -3
- package/front_end/panels/timeline/utils/EntryName.test.ts +3 -3
- package/front_end/panels/timeline/utils/EntryName.ts +10 -10
- package/front_end/panels/timeline/utils/EntryNodes.test.ts +137 -0
- package/front_end/panels/timeline/utils/EntryNodes.ts +107 -0
- package/front_end/panels/timeline/utils/EntryStyles.ts +110 -110
- package/front_end/panels/timeline/{EventsSerializer.test.ts → utils/EventsSerializer.test.ts} +7 -7
- package/front_end/panels/timeline/{EventsSerializer.ts → utils/EventsSerializer.ts} +1 -1
- package/front_end/panels/timeline/{FreshRecording.test.ts → utils/FreshRecording.test.ts} +5 -5
- package/front_end/panels/timeline/{FreshRecording.ts → utils/FreshRecording.ts} +1 -1
- package/front_end/panels/timeline/utils/Helpers.ts +6 -0
- package/front_end/panels/timeline/utils/IgnoreList.test.ts +7 -6
- package/front_end/panels/timeline/utils/IgnoreList.ts +6 -6
- package/front_end/panels/timeline/utils/InsightAIContext.test.ts +61 -25
- package/front_end/panels/timeline/utils/InsightAIContext.ts +102 -81
- package/front_end/panels/timeline/utils/SourceMapsResolver.test.ts +5 -4
- package/front_end/panels/timeline/utils/Treemap.ts +5 -20
- package/front_end/panels/timeline/utils/utils.ts +8 -0
- package/front_end/panels/utils/utils.test.ts +1 -7
- package/front_end/panels/utils/utils.ts +17 -21
- package/front_end/panels/web_audio/WebAudioView.test.ts +224 -11
- package/front_end/panels/web_audio/WebAudioView.ts +219 -267
- package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
- package/front_end/panels/web_audio/web_audio.ts +0 -12
- package/front_end/panels/webauthn/WebauthnPane.test.ts +75 -72
- package/front_end/panels/webauthn/WebauthnPane.ts +517 -578
- package/front_end/panels/webauthn/webauthn-meta.ts +2 -2
- package/front_end/panels/webauthn/webauthnPane.css +157 -155
- package/front_end/panels/whats_new/ReleaseNoteText.ts +11 -11
- package/front_end/panels/whats_new/ReleaseNoteView.ts +2 -2
- package/front_end/panels/whats_new/releaseNoteView.css +92 -91
- package/front_end/panels/whats_new/resources/WNDT.md +6 -10
- package/front_end/panels/whats_new/whats_new-meta.ts +7 -7
- package/front_end/services/trace_bounds/TraceBounds.ts +1 -1
- package/front_end/services/tracing/ExternalRequests.test.ts +39 -0
- package/front_end/services/tracing/ExternalRequests.ts +74 -0
- package/front_end/services/tracing/PerformanceTracing.ts +5 -4
- package/front_end/{models/trace → services/tracing}/TracingManager.test.ts +9 -7
- package/front_end/{models/trace → services/tracing}/TracingManager.ts +3 -4
- package/front_end/services/tracing/tracing.ts +4 -0
- package/front_end/testing/AiAssistanceHelpers.ts +10 -8
- package/front_end/testing/DOMHelpers.ts +8 -6
- package/front_end/testing/EnvironmentHelpers.ts +21 -6
- package/front_end/testing/ExpectStubCall.ts +2 -1
- package/front_end/testing/InsightHelpers.ts +11 -4
- package/front_end/testing/MockConnection.ts +3 -2
- package/front_end/testing/MockSettingStorage.ts +23 -0
- package/front_end/testing/MutationHelpers.test.ts +1 -3
- package/front_end/testing/OverridesHelpers.ts +9 -3
- package/front_end/testing/PropertyParser.ts +1 -1
- package/front_end/testing/README.md +34 -0
- package/front_end/testing/SnapshotTester.snapshot.txt +9 -0
- package/front_end/testing/SnapshotTester.test.ts +32 -0
- package/front_end/testing/SnapshotTester.ts +150 -0
- package/front_end/testing/SourceMapEncoder.ts +1 -237
- package/front_end/testing/SourceMapHelpers.ts +3 -5
- package/front_end/testing/StackTraceHelpers.ts +47 -0
- package/front_end/testing/StyleHelpers.ts +43 -22
- package/front_end/testing/TraceHelpers.ts +135 -122
- package/front_end/testing/TraceLoader.ts +23 -65
- package/front_end/testing/test_setup.ts +31 -4
- package/front_end/ui/components/buttons/Button.ts +1 -1
- package/front_end/ui/components/buttons/FloatingButton.ts +37 -6
- package/front_end/ui/components/cards/Card.ts +2 -2
- package/front_end/ui/components/copy_to_clipboard/copyToClipboard.ts +1 -1
- package/front_end/ui/components/dialogs/ButtonDialog.test.ts +2 -6
- package/front_end/ui/components/dialogs/ButtonDialog.ts +15 -0
- package/front_end/ui/components/dialogs/Dialog.ts +68 -8
- package/front_end/ui/components/dialogs/ShortcutDialog.test.ts +1 -3
- package/front_end/ui/components/diff_view/DiffView.ts +6 -6
- package/front_end/ui/components/docs/console_insight/basic.ts +1 -1
- package/front_end/ui/components/docs/console_insight/error.ts +1 -1
- package/front_end/ui/components/docs/console_insight/loading.ts +1 -1
- package/front_end/ui/components/docs/context_menu/basic.html +45 -0
- package/front_end/ui/components/docs/context_menu/basic.ts +102 -0
- package/front_end/ui/components/docs/icon_component/basic.html +1 -3
- package/front_end/ui/components/docs/icon_component/basic.ts +1 -1
- package/front_end/ui/components/docs/recorder_recording_list_view/basic.ts +4 -1
- package/front_end/ui/components/docs/select_menu/basic.html +1 -27
- package/front_end/ui/components/docs/select_menu/basic.ts +86 -194
- package/front_end/ui/components/icon_button/Icon.ts +16 -10
- package/front_end/ui/components/icon_button/IconButton.ts +1 -3
- package/front_end/ui/components/icon_button/icon.css +73 -0
- package/front_end/ui/components/issue_counter/IssueCounter.ts +13 -14
- package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +3 -3
- package/front_end/ui/components/markdown_view/MarkdownImagesMap.ts +4 -4
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +9 -6
- package/front_end/ui/components/markdown_view/MarkdownView.test.ts +73 -0
- package/front_end/ui/components/panel_feedback/PanelFeedback.ts +5 -11
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +4 -9
- package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
- package/front_end/ui/components/settings/SettingDeprecationWarning.ts +2 -4
- package/front_end/ui/components/snackbars/Snackbar.ts +32 -17
- package/front_end/ui/components/snackbars/snackbar.css +1 -1
- package/front_end/ui/components/spinners/Spinner.ts +50 -2
- package/front_end/ui/components/spinners/spinner.css +10 -1
- package/front_end/ui/components/srgb_overlay/SrgbOverlay.ts +0 -1
- package/front_end/ui/components/survey_link/SurveyLink.ts +4 -8
- package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.test.ts +84 -0
- package/front_end/ui/components/text_editor/AiCodeCompletionTeaserPlaceholder.ts +83 -0
- package/front_end/ui/components/text_editor/ExecutionPositionHighlighter.ts +0 -1
- package/front_end/ui/components/text_editor/TextEditor.test.ts +72 -12
- package/front_end/ui/components/text_editor/TextEditor.ts +2 -0
- package/front_end/ui/components/text_editor/config.ts +120 -12
- package/front_end/ui/{legacy/components/inline_editor/bezierSwatch.css → components/text_editor/textEditor.css} +2 -6
- package/front_end/ui/components/text_editor/text_editor.ts +1 -0
- package/front_end/ui/components/tooltips/Tooltip.test.ts +70 -40
- package/front_end/ui/components/tooltips/Tooltip.ts +208 -33
- package/front_end/ui/components/tooltips/tooltip.css +13 -77
- package/front_end/ui/components/tree_outline/TreeOutline.ts +11 -0
- package/front_end/ui/legacy/ARIAUtils.test.ts +101 -20
- package/front_end/ui/legacy/ARIAUtils.ts +77 -49
- package/front_end/ui/legacy/ActionRegistration.test.ts +0 -2
- package/front_end/ui/legacy/ActionRegistration.ts +24 -24
- package/front_end/ui/legacy/ContextMenu.test.ts +60 -1
- package/front_end/ui/legacy/ContextMenu.ts +349 -29
- package/front_end/ui/legacy/DockController.ts +13 -7
- package/front_end/ui/legacy/EmptyWidget.ts +62 -32
- package/front_end/ui/legacy/FilterBar.ts +14 -9
- package/front_end/ui/legacy/GlassPane.ts +10 -4
- package/front_end/ui/legacy/Infobar.ts +2 -2
- package/front_end/ui/legacy/InspectorView.test.ts +99 -0
- package/front_end/ui/legacy/InspectorView.ts +71 -25
- package/front_end/ui/legacy/ListWidget.ts +9 -9
- package/front_end/ui/legacy/Panel.ts +1 -1
- package/front_end/ui/legacy/ProgressIndicator.ts +44 -41
- package/front_end/ui/legacy/RemoteDebuggingTerminatedScreen.ts +4 -4
- package/front_end/ui/legacy/ReportView.ts +1 -1
- package/front_end/ui/legacy/SearchableView.ts +24 -24
- package/front_end/ui/legacy/SettingsUI.ts +2 -2
- package/front_end/ui/legacy/ShortcutRegistry.ts +2 -1
- package/front_end/ui/legacy/SoftContextMenu.ts +23 -9
- package/front_end/ui/legacy/SoftDropDown.ts +1 -1
- package/front_end/ui/legacy/SplitWidget.test.ts +8 -0
- package/front_end/ui/legacy/SplitWidget.ts +3 -3
- package/front_end/ui/legacy/SuggestBox.ts +15 -15
- package/front_end/ui/legacy/TabbedPane.ts +27 -31
- package/front_end/ui/legacy/TargetCrashedScreen.ts +4 -4
- package/front_end/ui/legacy/TextPrompt.ts +4 -2
- package/front_end/ui/legacy/ThrottledWidget.ts +1 -1
- package/front_end/ui/legacy/Toolbar.test.ts +13 -0
- package/front_end/ui/legacy/Toolbar.ts +39 -19
- package/front_end/ui/legacy/Treeoutline.test.ts +140 -0
- package/front_end/ui/legacy/Treeoutline.ts +244 -8
- package/front_end/ui/legacy/UIUtils.test.ts +59 -0
- package/front_end/ui/legacy/UIUtils.ts +235 -25
- package/front_end/ui/legacy/View.test.ts +14 -1
- package/front_end/ui/legacy/View.ts +33 -9
- package/front_end/ui/legacy/ViewManager.test.ts +235 -0
- package/front_end/ui/legacy/ViewManager.ts +109 -15
- package/front_end/ui/legacy/ViewRegistration.ts +17 -7
- package/front_end/ui/legacy/Widget.test.ts +35 -3
- package/front_end/ui/legacy/Widget.ts +127 -16
- package/front_end/ui/legacy/XLink.ts +1 -1
- package/front_end/ui/legacy/components/color_picker/ContrastDetails.ts +36 -26
- package/front_end/ui/legacy/components/color_picker/FormatPickerContextMenu.ts +4 -8
- package/front_end/ui/legacy/components/color_picker/Spectrum.test.ts +36 -1
- package/front_end/ui/legacy/components/color_picker/Spectrum.ts +72 -49
- package/front_end/ui/legacy/components/color_picker/spectrum.css +1 -1
- package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +14 -19
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +31 -30
- package/front_end/ui/legacy/components/data_grid/DataGridElement.test.ts +19 -15
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +15 -3
- package/front_end/ui/legacy/components/data_grid/ShowMoreDataGridNode.ts +2 -2
- package/front_end/ui/legacy/components/data_grid/ViewportDataGrid.ts +6 -3
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +9 -3
- package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/BezierUI.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.test.ts +25 -25
- package/front_end/ui/legacy/components/inline_editor/CSSAngle.ts +11 -5
- package/front_end/ui/legacy/components/inline_editor/CSSShadowEditor.ts +5 -5
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.test.ts +1 -9
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +35 -20
- package/front_end/ui/legacy/components/inline_editor/FontEditor.ts +32 -31
- package/front_end/ui/legacy/components/inline_editor/FontEditorUnitConverter.ts +1 -1
- package/front_end/ui/legacy/components/inline_editor/Swatches.ts +3 -47
- package/front_end/ui/legacy/components/inline_editor/cssAngle.css +4 -5
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +2 -2
- package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.test.ts +19 -1
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +31 -28
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -0
- package/front_end/ui/legacy/components/perf_ui/BrickBreaker.ts +2 -2
- package/front_end/ui/legacy/components/perf_ui/ChartViewport.ts +7 -3
- package/front_end/ui/legacy/components/perf_ui/FilmStripView.ts +7 -7
- package/front_end/ui/legacy/components/perf_ui/FlameChart.test.ts +162 -1
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +153 -99
- package/front_end/ui/legacy/components/perf_ui/NetworkPriorities.ts +5 -5
- package/front_end/ui/legacy/components/perf_ui/OverviewGrid.ts +3 -3
- package/front_end/ui/legacy/components/perf_ui/PieChart.ts +1 -1
- package/front_end/ui/legacy/components/perf_ui/TimelineGrid.ts +0 -4
- package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +54 -6
- package/front_end/ui/legacy/components/perf_ui/perf_ui-meta.ts +6 -6
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +29 -3
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +14 -5
- package/front_end/ui/legacy/components/quick_open/HelpQuickOpen.ts +2 -5
- package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -0
- package/front_end/ui/legacy/components/quick_open/quick_open-meta.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/FontView.ts +8 -5
- package/front_end/ui/legacy/components/source_frame/ImageView.ts +17 -29
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +3 -3
- package/front_end/ui/legacy/components/source_frame/PreviewFactory.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.test.ts +0 -4
- package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +41 -31
- package/front_end/ui/legacy/components/source_frame/StreamingContentHexView.ts +1 -1
- package/front_end/ui/legacy/components/source_frame/XMLView.ts +2 -2
- package/front_end/ui/legacy/components/source_frame/fontView.css +1 -1
- package/front_end/ui/legacy/components/source_frame/source_frame-meta.ts +9 -9
- package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -4
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.test.ts +6 -5
- package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +76 -34
- package/front_end/ui/legacy/components/utils/Linkifier.test.ts +154 -2
- package/front_end/ui/legacy/components/utils/Linkifier.ts +108 -50
- package/front_end/ui/legacy/components/utils/TargetDetachedDialog.ts +2 -1
- package/front_end/ui/legacy/confirmDialog.css +1 -1
- package/front_end/ui/legacy/filter.css +12 -4
- package/front_end/ui/legacy/inspectorCommon.css +25 -20
- package/front_end/ui/legacy/remoteDebuggingTerminatedScreen.css +18 -17
- package/front_end/ui/legacy/softContextMenu.css +4 -0
- package/front_end/ui/legacy/tabbedPane.css +5 -1
- package/front_end/ui/legacy/targetCrashedScreen.css +9 -8
- package/front_end/ui/legacy/viewContainers.css +8 -0
- package/front_end/ui/visual_logging/Debugging.ts +122 -26
- package/front_end/ui/visual_logging/KnownContextValues.ts +139 -1
- package/front_end/ui/visual_logging/LoggingConfig.ts +1 -1
- package/front_end/ui/visual_logging/LoggingDriver.test.ts +74 -44
- package/front_end/ui/visual_logging/LoggingDriver.ts +3 -2
- package/front_end/ui/visual_logging/LoggingState.ts +6 -4
- package/front_end/ui/visual_logging/README.md +1 -3
- package/front_end/ui/visual_logging/visual_logging.ts +9 -0
- package/front_end/ui/visual_logging/visual_logging_debugging.png +0 -0
- package/inspector_overlay/css_grid_label_helpers.ts +4 -4
- package/inspector_overlay/highlight_flex_common.ts +2 -2
- package/inspector_overlay/loadCSS.rollup.js +2 -2
- package/inspector_overlay/main.ts +0 -4
- package/inspector_overlay/tool_highlight.css +1 -1
- package/inspector_overlay/tool_highlight.ts +7 -7
- package/package.json +32 -36
- package/scripts/add_icon_paths.py +1 -1
- package/scripts/ai_assistance/README.md +1 -0
- package/scripts/ai_assistance/auto-run/auto-run.ts +46 -6
- package/scripts/ai_assistance/auto-run/shared/comment-parsers.test.ts +2 -2
- package/scripts/ai_assistance/auto-run/shared/comment-parsers.ts +2 -2
- package/scripts/ai_assistance/auto-run/shared/puppeteer-helpers.ts +18 -15
- package/scripts/ai_assistance/auto-run/targets/elements-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/elements-multimodal-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/interface.ts +1 -0
- package/scripts/ai_assistance/auto-run/targets/patching-executor.ts +1 -0
- package/scripts/ai_assistance/auto-run/targets/performance-insights-executor.ts +2 -0
- package/scripts/ai_assistance/auto-run/targets/performance-main-thread-executor.ts +2 -0
- package/scripts/ai_assistance/eval/index.js +5 -1
- package/scripts/ai_assistance/package.json +2 -1
- package/scripts/ai_assistance/suite/README.md +57 -0
- package/scripts/ai_assistance/suite/helpers/evaluators.ts +183 -0
- package/scripts/ai_assistance/suite/helpers/gemini.ts +122 -0
- package/scripts/ai_assistance/suite/helpers/outputs.ts +112 -0
- package/scripts/ai_assistance/suite/instructions/lcp-breakdown.md +12 -0
- package/scripts/ai_assistance/suite/instructions/load.ts +13 -0
- package/scripts/ai_assistance/suite/instructions/scoring.md +27 -0
- package/scripts/ai_assistance/suite/performance.eval.ts +18 -0
- package/scripts/ai_assistance/suite/to_eval_output.ts +166 -0
- package/scripts/ai_assistance/suite/types.d.ts +40 -0
- package/scripts/ai_assistance/suite/upload_to_gcp.ts +104 -0
- package/scripts/ai_assistance/tsconfig.json +1 -1
- package/scripts/ai_assistance/types.d.ts +8 -3
- package/scripts/build/assert_grd.py +1 -1
- package/scripts/build/compress_files.js +9 -4
- package/scripts/build/cross_reference_ninja_and_tsc.js +5 -5
- package/scripts/build/devtools_plugin.js +9 -2
- package/scripts/build/esbuild.js +4 -1
- package/scripts/build/generate_html_entrypoint.js +5 -4
- package/scripts/build/ninja/README.md +2 -3
- package/scripts/build/ninja/bundle.gni +7 -30
- package/scripts/build/ninja/devtools_entrypoint.gni +4 -4
- package/scripts/build/ninja/devtools_pre_built.gni +2 -1
- package/scripts/build/ninja/generate_css.gni +4 -2
- package/scripts/build/ninja/vars.gni +5 -1
- package/scripts/build/ninja/write-if-changed.js +2 -2
- package/scripts/build/typescript/ts_library.py +7 -1
- package/scripts/build/typescript/typescript.gni +2 -1
- package/scripts/component_server/server.js +8 -7
- package/scripts/devtools_build.mjs +93 -26
- package/scripts/devtools_build.test.mjs +48 -48
- package/scripts/devtools_paths.py +0 -5
- package/scripts/eslint_rules/README.md +4 -2
- package/scripts/eslint_rules/lib/canvas-context-tracking.ts +1 -1
- package/scripts/eslint_rules/lib/check-css-import.ts +2 -2
- package/scripts/eslint_rules/lib/check-license-header.ts +3 -3
- package/scripts/eslint_rules/lib/check-test-definitions.ts +2 -2
- package/scripts/eslint_rules/lib/enforce-custom-element-definitions-location.ts +1 -1
- package/scripts/eslint_rules/lib/enforce-optional-properties-last.ts +1 -1
- package/scripts/eslint_rules/lib/enforce-ui-strings-as-const.ts +1 -1
- package/scripts/eslint_rules/lib/es-modules-import.ts +3 -2
- package/scripts/eslint_rules/lib/html-tagged-template.ts +2 -2
- package/scripts/eslint_rules/lib/inject-checkbox-styles.ts +36 -24
- package/scripts/eslint_rules/lib/inline-type-imports.ts +1 -1
- package/scripts/eslint_rules/lib/jslog-context-list.ts +32 -7
- package/scripts/eslint_rules/lib/no-adopted-style-sheets.ts +2 -2
- package/scripts/eslint_rules/lib/no-assert-deep-strict-equal.ts +17 -16
- package/scripts/eslint_rules/lib/no-assert-equal-boolean-null-undefined.ts +1 -1
- package/scripts/eslint_rules/lib/no-assert-equal.ts +1 -1
- package/scripts/eslint_rules/lib/no-assert-strict-equal-for-arrays-and-objects.ts +1 -1
- package/scripts/eslint_rules/lib/no-commented-out-console.ts +4 -2
- package/scripts/eslint_rules/lib/no-customized-builtin-elements.ts +1 -4
- package/scripts/eslint_rules/lib/no-imperative-dom-api/adorner.ts +5 -9
- package/scripts/eslint_rules/lib/no-imperative-dom-api/aria-utils.ts +5 -8
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ast.ts +24 -1
- package/scripts/eslint_rules/lib/no-imperative-dom-api/button.ts +5 -4
- package/scripts/eslint_rules/lib/no-imperative-dom-api/class-member.ts +1 -1
- package/scripts/eslint_rules/lib/no-imperative-dom-api/data-grid.ts +23 -25
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api-devtools-extensions.ts +5 -9
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-api.ts +11 -16
- package/scripts/eslint_rules/lib/no-imperative-dom-api/dom-fragment.ts +2 -2
- package/scripts/eslint_rules/lib/no-imperative-dom-api/split-widget.ts +14 -18
- package/scripts/eslint_rules/lib/no-imperative-dom-api/toolbar.ts +17 -18
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-fragment.ts +7 -12
- package/scripts/eslint_rules/lib/no-imperative-dom-api/ui-utils.ts +7 -7
- package/scripts/eslint_rules/lib/no-imperative-dom-api/widget.ts +8 -13
- package/scripts/eslint_rules/lib/no-imperative-dom-api.ts +3 -22
- package/scripts/eslint_rules/lib/no-importing-images-from-src.ts +1 -1
- package/scripts/eslint_rules/lib/no-imports-in-directory.ts +18 -7
- package/scripts/eslint_rules/lib/no-lit-render-outside-of-view.ts +48 -37
- package/scripts/eslint_rules/lib/no-new-lit-element-components.ts +5 -2
- package/scripts/eslint_rules/lib/no-underscored-properties.ts +36 -28
- package/scripts/eslint_rules/lib/prefer-assert-instance-of.ts +24 -20
- package/scripts/eslint_rules/lib/prefer-assert-is-ok.ts +54 -45
- package/scripts/eslint_rules/lib/prefer-assert-length-of.ts +24 -17
- package/scripts/eslint_rules/lib/prefer-assert-strict-equal.ts +22 -16
- package/scripts/eslint_rules/lib/prefer-private-class-members.ts +11 -4
- package/scripts/eslint_rules/lib/prefer-sinon-assert.ts +37 -29
- package/scripts/eslint_rules/lib/prefer-url-string.ts +1 -1
- package/scripts/eslint_rules/lib/utils/lit.ts +26 -9
- package/scripts/eslint_rules/lib/validate-timing-types.ts +330 -0
- package/scripts/eslint_rules/rules-dir.mjs +4 -1
- package/scripts/eslint_rules/tests/check-license-header.test.ts +8 -8
- package/scripts/eslint_rules/tests/check-test-definitions.test.ts +0 -10
- package/scripts/eslint_rules/tests/enforce-optional-properties-last.test.ts +1 -1
- package/scripts/eslint_rules/tests/inject-checkbox-styles.test.ts +49 -0
- package/scripts/eslint_rules/tests/no-imports-in-directory.test.ts +20 -5
- package/scripts/eslint_rules/tests/no-lit-render-outside-of-view.test.ts +60 -10
- package/scripts/eslint_rules/tests/no-new-lit-element-components.test.ts +4 -0
- package/scripts/eslint_rules/tests/prefer-private-class-members.test.ts +2 -2
- package/scripts/eslint_rules/tests/utils/RuleTester.ts +19 -1
- package/scripts/eslint_rules/tests/utils.test.ts +1 -1
- package/scripts/eslint_rules/tests/validate-timing-types.test.ts +289 -0
- package/scripts/eslint_rules/tsconfig.json +3 -2
- package/scripts/extract_bugs.ts +2 -3
- package/scripts/javascript_natives/helpers.js +9 -9
- package/scripts/migration/e2e_non_hosted_gemini.mjs +102 -0
- package/scripts/migration/web-tests-esm/rename-legacy-global.mjs +1 -1
- package/scripts/npm_test.js +1 -1
- package/scripts/protocol_typescript/protocol_dts_generator.ts +27 -16
- package/scripts/protocol_typescript/protocol_schema.d.ts +9 -4
- package/scripts/reformat-clang-js-ts.js +1 -1
- package/scripts/run_build.mjs +14 -2
- package/scripts/run_start.mjs +6 -3
- package/scripts/scaffold/scaffold-widget.js +7 -7
- package/scripts/scaffold/templates/WidgetTemplate.ts.txt +1 -1
- package/scripts/tools/update_goldens.py +143 -168
- package/scripts/tsconfig.json +2 -1
- package/scripts/whitespaces.txt +1 -1
- package/front_end/core/sdk/SourceMapScopes.test.ts +0 -507
- package/front_end/core/sdk/SourceMapScopes.ts +0 -472
- package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.test.ts +0 -448
- package/front_end/models/ai_assistance/agents/PerformanceInsightsAgent.ts +0 -498
- package/front_end/models/trace/extras/FetchNodes.test.ts +0 -261
- package/front_end/models/trace/extras/FetchNodes.ts +0 -254
- package/front_end/models/trace/extras/Metadata.ts +0 -79
- package/front_end/models/trace/insights/LCPPhases.test.ts +0 -71
- package/front_end/models/trace/insights/LCPPhases.ts +0 -222
- package/front_end/panels/animation/AnimationScreenshotPopover.ts +0 -65
- package/front_end/panels/animation/animationScreenshotPopover.css +0 -18
- package/front_end/panels/application/ReportingApiReportsView.test.ts +0 -117
- package/front_end/panels/application/ReportingApiReportsView.ts +0 -88
- package/front_end/panels/elements/ElementsTreeElementHighlighter.test.ts +0 -51
- package/front_end/panels/elements/ElementsTreeElementHighlighter.ts +0 -107
- package/front_end/panels/elements/components/LayoutPane.ts +0 -515
- package/front_end/panels/elements/components/LayoutPaneUtils.ts +0 -41
- package/front_end/panels/elements/components/layoutPane.css +0 -168
- package/front_end/panels/sources/components/breakpointsView.css +0 -275
- package/front_end/panels/timeline/components/insights/InteractionToNextPaint.ts +0 -118
- package/front_end/panels/timeline/components/insights/LCPPhases.ts +0 -256
- package/front_end/panels/web_audio/AudioContextContentBuilder.ts +0 -113
- package/front_end/panels/web_audio/AudioContextSelector.ts +0 -140
- package/front_end/panels/web_audio/audioContextSelector.css +0 -20
- package/front_end/panels/web_audio/graph_visualizer/EdgeView.ts +0 -80
- package/front_end/panels/web_audio/graph_visualizer/GraphManager.ts +0 -46
- package/front_end/panels/web_audio/graph_visualizer/GraphStyle.ts +0 -96
- package/front_end/panels/web_audio/graph_visualizer/GraphView.ts +0 -197
- package/front_end/panels/web_audio/graph_visualizer/NodeRendererUtility.ts +0 -43
- package/front_end/panels/web_audio/graph_visualizer/NodeView.ts +0 -258
- package/front_end/panels/web_audio/graph_visualizer/graph_visualizer.ts +0 -19
- package/front_end/ui/components/docs/recorder_recording_view/basic.html +0 -20
- package/front_end/ui/components/docs/recorder_recording_view/basic.ts +0 -99
- package/front_end/ui/legacy/inspectorViewTabbedPane.css +0 -13
- package/inspector_overlay/debug/tool_distances.html +0 -25
- package/inspector_overlay/tool_distances.ts +0 -125
- package/scripts/eslint_rules/lib/no-it-screenshot-only-or-repeat.ts +0 -47
- package/scripts/eslint_rules/lib/no-screenshot-test-outside-perf-panel.ts +0 -77
- package/scripts/eslint_rules/lib/screenshot-assertion-in-it-screenshot.ts +0 -110
- package/scripts/eslint_rules/lib/single-screenshot-assertion-per-test.ts +0 -85
- package/scripts/eslint_rules/tests/no-it-screenshot-only-or-repeat.test.ts +0 -34
- package/scripts/eslint_rules/tests/no-screenshot-test-outside-perf-panel.test.ts +0 -99
- package/scripts/eslint_rules/tests/screenshot-assertion-in-it-screenshot.test.ts +0 -79
- package/scripts/eslint_rules/tests/single-screenshot-assertion-per-test.test.ts +0 -97
- package/scripts/tools/update_goldens_unittest.py +0 -88
- package/scripts/tools/update_goldens_v2.py +0 -68
- package/scripts/watch_build.js +0 -230
- /package/front_end/panels/recorder/models/{RecorderShorcutHelper.test.ts → RecorderShortcutHelper.test.ts} +0 -0
@@ -1,7 +1,6 @@
|
|
1
1
|
// Copyright 2023 The Chromium Authors. All rights reserved.
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
3
3
|
// found in the LICENSE file.
|
4
|
-
/* eslint-disable rulesdir/no-lit-render-outside-of-view */
|
5
4
|
|
6
5
|
import '../../../ui/components/icon_button/icon_button.js';
|
7
6
|
import './ExtensionView.js';
|
@@ -38,7 +37,6 @@ import {
|
|
38
37
|
type StepView,
|
39
38
|
type StepViewData,
|
40
39
|
} from './StepView.js';
|
41
|
-
|
42
40
|
const {html} = Lit;
|
43
41
|
|
44
42
|
const UIStrings = {
|
@@ -161,112 +159,17 @@ export interface ReplayState {
|
|
161
159
|
isPausedOnBreakpoint: boolean; // Replay is in progress and is in stopped state
|
162
160
|
}
|
163
161
|
|
164
|
-
export interface RecordingViewData {
|
165
|
-
replayState: ReplayState;
|
166
|
-
isRecording: boolean;
|
167
|
-
recordingTogglingInProgress: boolean;
|
168
|
-
recording: Models.Schema.UserFlow;
|
169
|
-
currentStep?: Models.Schema.Step;
|
170
|
-
currentError?: Error;
|
171
|
-
sections: Models.Section.Section[];
|
172
|
-
settings?: Models.RecordingSettings.RecordingSettings;
|
173
|
-
recorderSettings?: Models.RecorderSettings.RecorderSettings;
|
174
|
-
lastReplayResult?: Models.RecordingPlayer.ReplayResult;
|
175
|
-
replayAllowed: boolean;
|
176
|
-
breakpointIndexes: Set<number>;
|
177
|
-
builtInConverters: Converters.Converter.Converter[];
|
178
|
-
extensionConverters: Converters.Converter.Converter[];
|
179
|
-
replayExtensions: Extensions.ExtensionManager.Extension[];
|
180
|
-
extensionDescriptor?: PublicExtensions.RecorderPluginManager.ViewDescriptor;
|
181
|
-
}
|
182
|
-
|
183
|
-
export class RecordingFinishedEvent extends Event {
|
184
|
-
static readonly eventName = 'recordingfinished';
|
185
|
-
|
186
|
-
constructor() {
|
187
|
-
super(RecordingFinishedEvent.eventName);
|
188
|
-
}
|
189
|
-
}
|
190
|
-
|
191
162
|
export const enum TargetPanel {
|
192
163
|
PERFORMANCE_PANEL = 'timeline',
|
193
164
|
DEFAULT = 'chrome-recorder',
|
194
165
|
}
|
195
166
|
|
196
|
-
interface
|
167
|
+
export interface PlayRecordingEvent {
|
197
168
|
targetPanel: TargetPanel;
|
198
169
|
speed: PlayRecordingSpeed;
|
199
170
|
extension?: Extensions.ExtensionManager.Extension;
|
200
171
|
}
|
201
172
|
|
202
|
-
export class PlayRecordingEvent extends Event {
|
203
|
-
static readonly eventName = 'playrecording';
|
204
|
-
readonly data: PlayRecordingEventData;
|
205
|
-
constructor(
|
206
|
-
data: PlayRecordingEventData = {
|
207
|
-
targetPanel: TargetPanel.DEFAULT,
|
208
|
-
speed: PlayRecordingSpeed.NORMAL,
|
209
|
-
},
|
210
|
-
) {
|
211
|
-
super(PlayRecordingEvent.eventName);
|
212
|
-
this.data = data;
|
213
|
-
}
|
214
|
-
}
|
215
|
-
|
216
|
-
export class AbortReplayEvent extends Event {
|
217
|
-
static readonly eventName = 'abortreplay';
|
218
|
-
constructor() {
|
219
|
-
super(AbortReplayEvent.eventName);
|
220
|
-
}
|
221
|
-
}
|
222
|
-
|
223
|
-
export class RecordingChangedEvent extends Event {
|
224
|
-
static readonly eventName = 'recordingchanged';
|
225
|
-
data: {currentStep: Models.Schema.Step, newStep: Models.Schema.Step};
|
226
|
-
constructor(currentStep: Models.Schema.Step, newStep: Models.Schema.Step) {
|
227
|
-
super(RecordingChangedEvent.eventName);
|
228
|
-
this.data = {currentStep, newStep};
|
229
|
-
}
|
230
|
-
}
|
231
|
-
|
232
|
-
export class AddAssertionEvent extends Event {
|
233
|
-
static readonly eventName = 'addassertion';
|
234
|
-
constructor() {
|
235
|
-
super(AddAssertionEvent.eventName);
|
236
|
-
}
|
237
|
-
}
|
238
|
-
|
239
|
-
export class RecordingTitleChangedEvent extends Event {
|
240
|
-
static readonly eventName = 'recordingtitlechanged';
|
241
|
-
title: string;
|
242
|
-
|
243
|
-
constructor(title: string) {
|
244
|
-
super(RecordingTitleChangedEvent.eventName, {});
|
245
|
-
this.title = title;
|
246
|
-
}
|
247
|
-
}
|
248
|
-
|
249
|
-
export class NetworkConditionsChanged extends Event {
|
250
|
-
static readonly eventName = 'networkconditionschanged';
|
251
|
-
data?: SDK.NetworkManager.Conditions;
|
252
|
-
constructor(data?: SDK.NetworkManager.Conditions) {
|
253
|
-
super(NetworkConditionsChanged.eventName, {
|
254
|
-
composed: true,
|
255
|
-
bubbles: true,
|
256
|
-
});
|
257
|
-
this.data = data;
|
258
|
-
}
|
259
|
-
}
|
260
|
-
|
261
|
-
export class TimeoutChanged extends Event {
|
262
|
-
static readonly eventName = 'timeoutchanged';
|
263
|
-
data?: number;
|
264
|
-
constructor(data?: number) {
|
265
|
-
super(TimeoutChanged.eventName, {composed: true, bubbles: true});
|
266
|
-
this.data = data;
|
267
|
-
}
|
268
|
-
}
|
269
|
-
|
270
173
|
const networkConditionPresets = [
|
271
174
|
SDK.NetworkManager.NoThrottlingConditions,
|
272
175
|
SDK.NetworkManager.OfflineConditions,
|
@@ -307,230 +210,903 @@ function converterIdToStepMetric(
|
|
307
210
|
}
|
308
211
|
}
|
309
212
|
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
#lastReplayResult?: Models.RecordingPlayer.ReplayResult;
|
324
|
-
#breakpointIndexes = new Set<number>();
|
325
|
-
#selectedStep?: Models.Schema.Step|null;
|
326
|
-
|
327
|
-
#replaySettingsExpanded = false;
|
328
|
-
#replayAllowed = true;
|
329
|
-
#builtInConverters: Converters.Converter.Converter[] = [];
|
330
|
-
#extensionConverters: Converters.Converter.Converter[] = [];
|
331
|
-
#replayExtensions?: Extensions.ExtensionManager.Extension[];
|
332
|
-
#showCodeView = false;
|
333
|
-
#code = '';
|
334
|
-
#converterId = '';
|
335
|
-
#editorState?: CodeMirror.EditorState;
|
336
|
-
#sourceMap: PuppeteerReplay.SourceMap|undefined;
|
337
|
-
#extensionDescriptor?: PublicExtensions.RecorderPluginManager.ViewDescriptor;
|
338
|
-
|
339
|
-
#onCopyBound = this.#onCopy.bind(this);
|
340
|
-
|
341
|
-
set data(data: RecordingViewData) {
|
342
|
-
this.#isRecording = data.isRecording;
|
343
|
-
this.#replayState = data.replayState;
|
344
|
-
this.#recordingTogglingInProgress = data.recordingTogglingInProgress;
|
345
|
-
this.#currentStep = data.currentStep;
|
346
|
-
|
347
|
-
this.#userFlow = data.recording;
|
348
|
-
this.#steps = this.#userFlow.steps;
|
349
|
-
this.#sections = data.sections;
|
350
|
-
this.#settings = data.settings;
|
351
|
-
this.#recorderSettings = data.recorderSettings;
|
352
|
-
|
353
|
-
this.#currentError = data.currentError;
|
354
|
-
this.#lastReplayResult = data.lastReplayResult;
|
355
|
-
this.#replayAllowed = data.replayAllowed;
|
356
|
-
this.#isTitleInvalid = false;
|
357
|
-
this.#breakpointIndexes = data.breakpointIndexes;
|
358
|
-
this.#builtInConverters = data.builtInConverters;
|
359
|
-
this.#extensionConverters = data.extensionConverters;
|
360
|
-
this.#replayExtensions = data.replayExtensions;
|
361
|
-
this.#extensionDescriptor = data.extensionDescriptor;
|
362
|
-
|
363
|
-
this.#converterId = this.#recorderSettings?.preferredCopyFormat ?? data.builtInConverters[0]?.getId();
|
364
|
-
void this.#convertToCode();
|
365
|
-
|
366
|
-
this.#render();
|
367
|
-
}
|
368
|
-
|
369
|
-
connectedCallback(): void {
|
370
|
-
document.addEventListener('copy', this.#onCopyBound);
|
371
|
-
this.#render();
|
372
|
-
}
|
373
|
-
|
374
|
-
disconnectedCallback(): void {
|
375
|
-
document.removeEventListener('copy', this.#onCopyBound);
|
376
|
-
}
|
377
|
-
|
378
|
-
scrollToBottom(): void {
|
379
|
-
const wrapper = this.shadowRoot?.querySelector('.sections');
|
380
|
-
if (!wrapper) {
|
381
|
-
return;
|
382
|
-
}
|
383
|
-
wrapper.scrollTop = wrapper.scrollHeight;
|
384
|
-
}
|
385
|
-
|
386
|
-
#dispatchAddAssertionEvent(): void {
|
387
|
-
this.dispatchEvent(new AddAssertionEvent());
|
388
|
-
}
|
389
|
-
|
390
|
-
#dispatchRecordingFinished(): void {
|
391
|
-
this.dispatchEvent(new RecordingFinishedEvent());
|
392
|
-
}
|
393
|
-
|
394
|
-
#handleAbortReplay(): void {
|
395
|
-
this.dispatchEvent(new AbortReplayEvent());
|
213
|
+
function renderSettings({
|
214
|
+
settings,
|
215
|
+
replaySettingsExpanded,
|
216
|
+
onSelectMenuLabelClick,
|
217
|
+
onNetworkConditionsChange,
|
218
|
+
onTimeoutInput,
|
219
|
+
isRecording,
|
220
|
+
replayState,
|
221
|
+
onReplaySettingsKeydown,
|
222
|
+
onToggleReplaySettings
|
223
|
+
}: ViewInput): Lit.TemplateResult {
|
224
|
+
if (!settings) {
|
225
|
+
return html``;
|
396
226
|
}
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
227
|
+
const environmentFragments = [];
|
228
|
+
if (settings.viewportSettings) {
|
229
|
+
// clang-format off
|
230
|
+
environmentFragments.push(
|
231
|
+
html`<div>${
|
232
|
+
settings.viewportSettings.isMobile
|
233
|
+
? i18nString(UIStrings.mobile)
|
234
|
+
: i18nString(UIStrings.desktop)
|
235
|
+
}</div>`,
|
236
|
+
);
|
237
|
+
environmentFragments.push(html`<div class="separator"></div>`);
|
238
|
+
environmentFragments.push(
|
239
|
+
html`<div>${settings.viewportSettings.width}×${
|
240
|
+
settings.viewportSettings.height
|
241
|
+
} px</div>`,
|
405
242
|
);
|
243
|
+
// clang-format on
|
406
244
|
}
|
407
|
-
|
408
|
-
|
409
|
-
if (
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
}
|
419
|
-
|
420
|
-
|
421
|
-
|
245
|
+
const replaySettingsFragments = [];
|
246
|
+
if (!replaySettingsExpanded) {
|
247
|
+
if (settings.networkConditionsSettings) {
|
248
|
+
if (settings.networkConditionsSettings.title) {
|
249
|
+
// clang-format off
|
250
|
+
replaySettingsFragments.push(
|
251
|
+
html`<div>${
|
252
|
+
settings.networkConditionsSettings.title
|
253
|
+
}</div>`,
|
254
|
+
);
|
255
|
+
// clang-format on
|
256
|
+
} else {
|
257
|
+
// clang-format off
|
258
|
+
replaySettingsFragments.push(html`<div>
|
259
|
+
${i18nString(UIStrings.download, {
|
260
|
+
value: i18n.ByteUtilities.bytesToString(
|
261
|
+
settings.networkConditionsSettings.download,
|
262
|
+
),
|
263
|
+
})},
|
264
|
+
${i18nString(UIStrings.upload, {
|
265
|
+
value: i18n.ByteUtilities.bytesToString(
|
266
|
+
settings.networkConditionsSettings.upload,
|
267
|
+
),
|
268
|
+
})},
|
269
|
+
${i18nString(UIStrings.latency, {
|
270
|
+
value: settings.networkConditionsSettings.latency,
|
271
|
+
})}
|
272
|
+
</div>`);
|
273
|
+
// clang-format on
|
422
274
|
}
|
423
|
-
|
424
|
-
|
275
|
+
} else {
|
276
|
+
// clang-format off
|
277
|
+
replaySettingsFragments.push(
|
278
|
+
html`<div>${
|
279
|
+
SDK.NetworkManager.NoThrottlingConditions.title instanceof Function
|
280
|
+
? SDK.NetworkManager.NoThrottlingConditions.title()
|
281
|
+
: SDK.NetworkManager.NoThrottlingConditions.title
|
282
|
+
}</div>`,
|
283
|
+
);
|
284
|
+
// clang-format on
|
425
285
|
}
|
426
|
-
|
427
|
-
|
428
|
-
|
286
|
+
// clang-format off
|
287
|
+
replaySettingsFragments.push(html`<div class="separator"></div>`);
|
288
|
+
replaySettingsFragments.push(
|
289
|
+
html`<div>${i18nString(UIStrings.timeout, {
|
290
|
+
value: settings.timeout || Models.RecordingPlayer.defaultTimeout,
|
291
|
+
})}</div>`,
|
292
|
+
);
|
293
|
+
// clang-format on
|
294
|
+
} else {
|
295
|
+
// clang-format off
|
296
|
+
const selectedOption =
|
297
|
+
settings.networkConditionsSettings?.i18nTitleKey ||
|
298
|
+
SDK.NetworkManager.NoThrottlingConditions.i18nTitleKey;
|
299
|
+
const selectedOptionTitle = networkConditionPresets.find(
|
300
|
+
preset => preset.i18nTitleKey === selectedOption,
|
301
|
+
);
|
302
|
+
let menuButtonTitle = '';
|
303
|
+
if (selectedOptionTitle) {
|
304
|
+
menuButtonTitle =
|
305
|
+
selectedOptionTitle.title instanceof Function
|
306
|
+
? selectedOptionTitle.title()
|
307
|
+
: selectedOptionTitle.title;
|
429
308
|
}
|
430
309
|
|
431
|
-
|
432
|
-
|
310
|
+
replaySettingsFragments.push(html`<div class="editable-setting">
|
311
|
+
<label class="wrapping-label" @click=${onSelectMenuLabelClick}>
|
312
|
+
${i18nString(UIStrings.network)}
|
313
|
+
<select
|
314
|
+
title=${menuButtonTitle}
|
315
|
+
jslog=${VisualLogging.dropDown('network-conditions').track({change: true})}
|
316
|
+
@change=${onNetworkConditionsChange}>
|
317
|
+
${networkConditionPresets.map(condition => html`
|
318
|
+
<option jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(condition.i18nTitleKey || ''))}
|
319
|
+
value=${condition.i18nTitleKey || ''} ?selected=${selectedOption === condition.i18nTitleKey}>
|
320
|
+
${
|
321
|
+
condition.title instanceof Function
|
322
|
+
? condition.title()
|
323
|
+
: condition.title
|
324
|
+
}
|
325
|
+
</option>`)}
|
326
|
+
</select>
|
327
|
+
</label>
|
328
|
+
</div>`);
|
329
|
+
replaySettingsFragments.push(html`<div class="editable-setting">
|
330
|
+
<label class="wrapping-label" title=${i18nString(
|
331
|
+
UIStrings.timeoutExplanation,
|
332
|
+
)}>
|
333
|
+
${i18nString(UIStrings.timeoutLabel)}
|
334
|
+
<input
|
335
|
+
@input=${onTimeoutInput}
|
336
|
+
required
|
337
|
+
min=${Models.SchemaUtils.minTimeout}
|
338
|
+
max=${Models.SchemaUtils.maxTimeout}
|
339
|
+
value=${
|
340
|
+
settings.timeout || Models.RecordingPlayer.defaultTimeout
|
341
|
+
}
|
342
|
+
jslog=${VisualLogging.textField('timeout').track({change: true})}
|
343
|
+
class="devtools-text-input"
|
344
|
+
type="number">
|
345
|
+
</label>
|
346
|
+
</div>`);
|
347
|
+
// clang-format on
|
433
348
|
}
|
349
|
+
const isEditable = !isRecording && !replayState.isPlaying;
|
350
|
+
const replaySettingsButtonClassMap = {
|
351
|
+
'settings-title': true,
|
352
|
+
expanded: replaySettingsExpanded,
|
353
|
+
};
|
354
|
+
const replaySettingsClassMap = {
|
355
|
+
expanded: replaySettingsExpanded,
|
356
|
+
settings: true,
|
357
|
+
};
|
358
|
+
// clang-format off
|
359
|
+
return html`
|
360
|
+
<div class="settings-row">
|
361
|
+
<div class="settings-container">
|
362
|
+
<div
|
363
|
+
class=${Lit.Directives.classMap(replaySettingsButtonClassMap)}
|
364
|
+
@keydown=${isEditable && onReplaySettingsKeydown}
|
365
|
+
@click=${isEditable && onToggleReplaySettings}
|
366
|
+
tabindex="0"
|
367
|
+
role="button"
|
368
|
+
jslog=${VisualLogging.action('replay-settings').track({click: true})}
|
369
|
+
aria-label=${i18nString(UIStrings.editReplaySettings)}>
|
370
|
+
<span>${i18nString(UIStrings.replaySettings)}</span>
|
371
|
+
${
|
372
|
+
isEditable
|
373
|
+
? html`<devtools-icon
|
374
|
+
class="chevron"
|
375
|
+
name="triangle-down">
|
376
|
+
</devtools-icon>`
|
377
|
+
: ''
|
378
|
+
}
|
379
|
+
</div>
|
380
|
+
<div class=${Lit.Directives.classMap(replaySettingsClassMap)}>
|
381
|
+
${
|
382
|
+
replaySettingsFragments.length
|
383
|
+
? replaySettingsFragments
|
384
|
+
: html`<div>${i18nString(UIStrings.default)}</div>`
|
385
|
+
}
|
386
|
+
</div>
|
387
|
+
</div>
|
388
|
+
<div class="settings-container">
|
389
|
+
<div class="settings-title">${i18nString(UIStrings.environment)}</div>
|
390
|
+
<div class="settings">
|
391
|
+
${
|
392
|
+
environmentFragments.length
|
393
|
+
? environmentFragments
|
394
|
+
: html`<div>${i18nString(UIStrings.default)}</div>`
|
395
|
+
}
|
396
|
+
</div>
|
397
|
+
</div>
|
398
|
+
</div>
|
399
|
+
`;
|
400
|
+
// clang-format on
|
401
|
+
}
|
434
402
|
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
return
|
439
|
-
|
403
|
+
function renderTimelineArea(input: ViewInput, output: ViewOutput): Lit.LitTemplate {
|
404
|
+
if (input.extensionDescriptor) {
|
405
|
+
// clang-format off
|
406
|
+
return html`
|
407
|
+
<devtools-recorder-extension-view .descriptor=${input.extensionDescriptor}>
|
408
|
+
</devtools-recorder-extension-view>
|
409
|
+
`;
|
410
|
+
// clang-format on
|
411
|
+
}
|
412
|
+
// clang-format off
|
413
|
+
/* eslint-disable rulesdir/no-deprecated-component-usages */
|
414
|
+
return html`
|
415
|
+
<devtools-split-view
|
416
|
+
direction="auto"
|
417
|
+
sidebar-position="second"
|
418
|
+
sidebar-initial-size="300"
|
419
|
+
sidebar-visibility=${input.showCodeView ? '' : 'hidden'}
|
420
|
+
>
|
421
|
+
<div slot="main">
|
422
|
+
${renderSections(input)}
|
423
|
+
</div>
|
424
|
+
<div slot="sidebar" jslog=${VisualLogging.pane('source-code').track({resize: true})}>
|
425
|
+
${input.showCodeView ? html`
|
426
|
+
<div class="section-toolbar" jslog=${VisualLogging.toolbar()}>
|
427
|
+
<devtools-select-menu
|
428
|
+
@selectmenuselected=${input.onCodeFormatChange}
|
429
|
+
.showDivider=${true}
|
430
|
+
.showArrow=${true}
|
431
|
+
.sideButton=${false}
|
432
|
+
.showSelectedItem=${true}
|
433
|
+
.position=${Dialogs.Dialog.DialogVerticalPosition.BOTTOM}
|
434
|
+
.buttonTitle=${input.converterName || ''}
|
435
|
+
.jslogContext=${'code-format'}
|
436
|
+
>
|
437
|
+
${input.builtInConverters.map(converter => {
|
438
|
+
return html`<devtools-menu-item
|
439
|
+
.value=${converter.getId()}
|
440
|
+
.selected=${input.converterId === converter.getId()}
|
441
|
+
jslog=${VisualLogging.action().track({click: true}).context(`converter-${Platform.StringUtilities.toKebabCase(converter.getId())}`)}
|
442
|
+
>
|
443
|
+
${converter.getFormatName()}
|
444
|
+
</devtools-menu-item>`;
|
445
|
+
})}
|
446
|
+
${input.extensionConverters.map(converter => {
|
447
|
+
return html`<devtools-menu-item
|
448
|
+
.value=${converter.getId()}
|
449
|
+
.selected=${input.converterId === converter.getId()}
|
450
|
+
jslog=${VisualLogging.action().track({click: true}).context('converter-extension')}
|
451
|
+
>
|
452
|
+
${converter.getFormatName()}
|
453
|
+
</devtools-menu-item>`;
|
454
|
+
})}
|
455
|
+
</devtools-select-menu>
|
456
|
+
<devtools-button
|
457
|
+
title=${Models.Tooltip.getTooltipForActions(
|
458
|
+
i18nString(UIStrings.hideCode),
|
459
|
+
Actions.RecorderActions.TOGGLE_CODE_VIEW,
|
460
|
+
)}
|
461
|
+
.data=${
|
462
|
+
{
|
463
|
+
variant: Buttons.Button.Variant.ICON,
|
464
|
+
size: Buttons.Button.Size.SMALL,
|
465
|
+
iconName: 'cross',
|
466
|
+
} as Buttons.Button.ButtonData
|
467
|
+
}
|
468
|
+
@click=${input.showCodeToggle}
|
469
|
+
jslog=${VisualLogging.close().track({click: true})}
|
470
|
+
></devtools-button>
|
471
|
+
</div>
|
472
|
+
${renderTextEditor(input, output)}`
|
473
|
+
: Lit.nothing}
|
474
|
+
</div>
|
475
|
+
</devtools-split-view>
|
476
|
+
`;
|
477
|
+
/* eslint-enable rulesdir/no-deprecated-component-usages */
|
478
|
+
// clang-format on
|
479
|
+
}
|
440
480
|
|
441
|
-
|
442
|
-
|
443
|
-
|
481
|
+
function renderTextEditor(input: ViewInput, output: ViewOutput): Lit.TemplateResult {
|
482
|
+
if (!input.editorState) {
|
483
|
+
throw new Error('Unexpected: trying to render the text editor without editorState');
|
484
|
+
}
|
444
485
|
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
}
|
449
|
-
|
486
|
+
// clang-format off
|
487
|
+
return html`
|
488
|
+
<div class="text-editor" jslog=${VisualLogging.textField().track({change: true})}>
|
489
|
+
<devtools-text-editor .state=${input.editorState} ${Lit.Directives.ref((editor: Element | undefined) => {
|
490
|
+
if (!editor || !(editor instanceof TextEditor.TextEditor.TextEditor)) {
|
491
|
+
return;
|
492
|
+
}
|
493
|
+
output.highlightLinesInEditor = (line: number, length: number, scroll = false) => {
|
494
|
+
const cm = editor.editor;
|
495
|
+
let selection = editor.createSelection(
|
496
|
+
{lineNumber: line + length, columnNumber: 0},
|
497
|
+
{lineNumber: line, columnNumber: 0},
|
498
|
+
);
|
499
|
+
const lastLine = editor.state.doc.lineAt(selection.main.anchor);
|
500
|
+
selection = editor.createSelection(
|
501
|
+
{lineNumber: line + length - 1, columnNumber: lastLine.length + 1},
|
502
|
+
{lineNumber: line, columnNumber: 0},
|
503
|
+
);
|
450
504
|
|
451
|
-
|
452
|
-
|
453
|
-
|
505
|
+
cm.dispatch({
|
506
|
+
selection,
|
507
|
+
effects: scroll ?
|
508
|
+
[
|
509
|
+
CodeMirror.EditorView.scrollIntoView(selection.main, {
|
510
|
+
y: 'nearest',
|
511
|
+
}),
|
512
|
+
] :
|
513
|
+
undefined,
|
514
|
+
});
|
515
|
+
};
|
516
|
+
})}></devtools-text-editor>
|
517
|
+
</div>
|
518
|
+
`;
|
519
|
+
// clang-format on
|
520
|
+
}
|
454
521
|
|
455
|
-
|
456
|
-
|
457
|
-
|
522
|
+
function renderScreenshot(
|
523
|
+
section: Models.Section.Section,
|
524
|
+
): Lit.TemplateResult|null {
|
525
|
+
if (!section.screenshot) {
|
526
|
+
return null;
|
458
527
|
}
|
459
528
|
|
460
|
-
|
461
|
-
section: Models.Section.Section,
|
462
|
-
step: Models.Schema.Step,
|
463
|
-
isLastSection: boolean,
|
464
|
-
): Lit.TemplateResult {
|
465
|
-
const stepIndex = this.#steps.indexOf(step);
|
466
|
-
// clang-format off
|
529
|
+
// clang-format off
|
467
530
|
return html`
|
468
|
-
<
|
469
|
-
|
470
|
-
|
471
|
-
@copystep=${this.#onCopyStepEvent}
|
472
|
-
.data=${
|
473
|
-
{
|
474
|
-
step,
|
475
|
-
state: this.#getStepState(step),
|
476
|
-
error: this.#currentStep === step ? this.#currentError : undefined,
|
477
|
-
isFirstSection: false,
|
478
|
-
isLastSection:
|
479
|
-
isLastSection && this.#steps[this.#steps.length - 1] === step,
|
480
|
-
isStartOfGroup: false,
|
481
|
-
isEndOfGroup: section.steps[section.steps.length - 1] === step,
|
482
|
-
stepIndex,
|
483
|
-
hasBreakpoint: this.#breakpointIndexes.has(stepIndex),
|
484
|
-
sectionIndex: -1,
|
485
|
-
isRecording: this.#isRecording,
|
486
|
-
isPlaying: this.#replayState.isPlaying,
|
487
|
-
removable: this.#steps.length > 1,
|
488
|
-
builtInConverters: this.#builtInConverters,
|
489
|
-
extensionConverters: this.#extensionConverters,
|
490
|
-
isSelected: this.#selectedStep === step,
|
491
|
-
recorderSettings: this.#recorderSettings,
|
492
|
-
} as StepViewData
|
493
|
-
}
|
494
|
-
jslog=${VisualLogging.section('step').track({click: true})}
|
495
|
-
></devtools-step-view>
|
531
|
+
<img class="screenshot" src=${section.screenshot} alt=${i18nString(
|
532
|
+
UIStrings.screenshotForSection,
|
533
|
+
)} />
|
496
534
|
`;
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
#onStepHover = (event: MouseEvent): void => {
|
501
|
-
const stepView = event.target as StepView;
|
502
|
-
const step = stepView.step || stepView.section?.causingStep;
|
503
|
-
if (!step || this.#selectedStep) {
|
504
|
-
return;
|
505
|
-
}
|
506
|
-
this.#highlightCodeForStep(step);
|
507
|
-
};
|
535
|
+
// clang-format on
|
536
|
+
}
|
508
537
|
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
this.#selectedStep = selectedStep;
|
517
|
-
this.#render();
|
518
|
-
if (selectedStep) {
|
519
|
-
this.#highlightCodeForStep(selectedStep, /* scroll=*/ true);
|
520
|
-
}
|
538
|
+
function renderReplayOrAbortButton(input: ViewInput): Lit.LitTemplate {
|
539
|
+
if (input.replayState.isPlaying) {
|
540
|
+
return html`
|
541
|
+
<devtools-button .jslogContext=${'abort-replay'} @click=${input.onAbortReplay} .iconName=${'pause'} .variant=${
|
542
|
+
Buttons.Button.Variant.OUTLINED}>
|
543
|
+
${i18nString(UIStrings.cancelReplay)}
|
544
|
+
</devtools-button>`;
|
521
545
|
}
|
522
546
|
|
523
|
-
|
524
|
-
|
525
|
-
return;
|
526
|
-
}
|
527
|
-
this.#selectedStep = undefined;
|
528
|
-
this.#render();
|
547
|
+
if (!input.recorderSettings) {
|
548
|
+
return Lit.nothing;
|
529
549
|
}
|
530
550
|
|
531
|
-
|
532
|
-
|
533
|
-
|
551
|
+
// clang-format off
|
552
|
+
return html`<devtools-replay-section
|
553
|
+
.data=${
|
554
|
+
{
|
555
|
+
settings: input.recorderSettings,
|
556
|
+
replayExtensions: input.replayExtensions,
|
557
|
+
} as ReplaySectionData
|
558
|
+
}
|
559
|
+
.disabled=${input.replayState.isPlaying}
|
560
|
+
@startreplay=${input.onTogglePlaying}
|
561
|
+
>
|
562
|
+
</devtools-replay-section>`;
|
563
|
+
// clang-format on
|
564
|
+
}
|
565
|
+
|
566
|
+
function renderSections(input: ViewInput): Lit.LitTemplate {
|
567
|
+
// clang-format off
|
568
|
+
return html`
|
569
|
+
<div class="sections">
|
570
|
+
${
|
571
|
+
!input.showCodeView
|
572
|
+
? html`<div class="section-toolbar">
|
573
|
+
<devtools-button
|
574
|
+
@click=${input.showCodeToggle}
|
575
|
+
class="show-code"
|
576
|
+
.data=${
|
577
|
+
{
|
578
|
+
variant: Buttons.Button.Variant.OUTLINED,
|
579
|
+
title: Models.Tooltip.getTooltipForActions(
|
580
|
+
i18nString(UIStrings.showCode),
|
581
|
+
Actions.RecorderActions.TOGGLE_CODE_VIEW,
|
582
|
+
),
|
583
|
+
} as Buttons.Button.ButtonData
|
584
|
+
}
|
585
|
+
jslog=${VisualLogging.toggleSubpane(Actions.RecorderActions.TOGGLE_CODE_VIEW).track({click: true})}
|
586
|
+
>
|
587
|
+
${i18nString(UIStrings.showCode)}
|
588
|
+
</devtools-button>
|
589
|
+
</div>`
|
590
|
+
: ''
|
591
|
+
}
|
592
|
+
${input.sections.map(
|
593
|
+
(section, i) => html`
|
594
|
+
<div class="section">
|
595
|
+
<div class="screenshot-wrapper">
|
596
|
+
${renderScreenshot(section)}
|
597
|
+
</div>
|
598
|
+
<div class="content">
|
599
|
+
<div class="steps">
|
600
|
+
<devtools-step-view
|
601
|
+
@click=${input.onStepClick}
|
602
|
+
@mouseover=${input.onStepHover}
|
603
|
+
.data=${
|
604
|
+
{
|
605
|
+
section,
|
606
|
+
state: input.getSectionState(section),
|
607
|
+
isStartOfGroup: true,
|
608
|
+
isEndOfGroup: section.steps.length === 0,
|
609
|
+
isFirstSection: i === 0,
|
610
|
+
isLastSection:
|
611
|
+
i === input.sections.length - 1 &&
|
612
|
+
section.steps.length === 0,
|
613
|
+
isSelected:
|
614
|
+
input.selectedStep === (section.causingStep || null),
|
615
|
+
sectionIndex: i,
|
616
|
+
isRecording: input.isRecording,
|
617
|
+
isPlaying: input.replayState.isPlaying,
|
618
|
+
error:
|
619
|
+
input.getSectionState(section) === State.ERROR
|
620
|
+
? input.currentError
|
621
|
+
: undefined,
|
622
|
+
hasBreakpoint: false,
|
623
|
+
removable: input.recording.steps.length > 1 && section.causingStep,
|
624
|
+
} as StepViewData
|
625
|
+
}
|
626
|
+
>
|
627
|
+
</devtools-step-view>
|
628
|
+
${section.steps.map(step => {
|
629
|
+
const stepIndex = input.recording.steps.indexOf(step);
|
630
|
+
return html`
|
631
|
+
<devtools-step-view
|
632
|
+
@click=${input.onStepClick}
|
633
|
+
@mouseover=${input.onStepHover}
|
634
|
+
@copystep=${input.onCopyStep}
|
635
|
+
.data=${
|
636
|
+
{
|
637
|
+
step,
|
638
|
+
state: input.getStepState(step),
|
639
|
+
error: input.currentStep === step ? input.currentError : undefined,
|
640
|
+
isFirstSection: false,
|
641
|
+
isLastSection:
|
642
|
+
i === input.sections.length - 1 && input.recording.steps[input.recording.steps.length - 1] === step,
|
643
|
+
isStartOfGroup: false,
|
644
|
+
isEndOfGroup: section.steps[section.steps.length - 1] === step,
|
645
|
+
stepIndex,
|
646
|
+
hasBreakpoint: input.breakpointIndexes.has(stepIndex),
|
647
|
+
sectionIndex: -1,
|
648
|
+
isRecording: input.isRecording,
|
649
|
+
isPlaying: input.replayState.isPlaying,
|
650
|
+
removable: input.recording.steps.length > 1,
|
651
|
+
builtInConverters: input.builtInConverters,
|
652
|
+
extensionConverters: input.extensionConverters,
|
653
|
+
isSelected: input.selectedStep === step,
|
654
|
+
recorderSettings: input.recorderSettings,
|
655
|
+
} as StepViewData
|
656
|
+
}
|
657
|
+
jslog=${VisualLogging.section('step').track({click: true})}
|
658
|
+
></devtools-step-view>
|
659
|
+
`;
|
660
|
+
})}
|
661
|
+
${!input.recordingTogglingInProgress && input.isRecording && i === input.sections.length - 1 ? html`<devtools-button
|
662
|
+
class="step add-assertion-button"
|
663
|
+
.data=${
|
664
|
+
{
|
665
|
+
variant: Buttons.Button.Variant.OUTLINED,
|
666
|
+
title: i18nString(UIStrings.addAssertion),
|
667
|
+
jslogContext: 'add-assertion',
|
668
|
+
} as Buttons.Button.ButtonData
|
669
|
+
}
|
670
|
+
@click=${input.onAddAssertion}
|
671
|
+
>${i18nString(UIStrings.addAssertion)}</devtools-button>` : undefined}
|
672
|
+
${
|
673
|
+
input.isRecording && i === input.sections.length - 1
|
674
|
+
? html`<div class="step recording">${i18nString(
|
675
|
+
UIStrings.recording,
|
676
|
+
)}</div>`
|
677
|
+
: null
|
678
|
+
}
|
679
|
+
</div>
|
680
|
+
</div>
|
681
|
+
</div>
|
682
|
+
`,
|
683
|
+
)}
|
684
|
+
</div>
|
685
|
+
`;
|
686
|
+
// clang-format on
|
687
|
+
}
|
688
|
+
|
689
|
+
function renderHeader(input: ViewInput): Lit.LitTemplate {
|
690
|
+
if (!input.recording) {
|
691
|
+
return Lit.nothing;
|
692
|
+
}
|
693
|
+
const {title} = input.recording;
|
694
|
+
const isTitleEditable = !input.replayState.isPlaying && !input.isRecording;
|
695
|
+
// clang-format off
|
696
|
+
return html`
|
697
|
+
<div class="header">
|
698
|
+
<div class="header-title-wrapper">
|
699
|
+
<div class="header-title">
|
700
|
+
<input @blur=${input.onTitleBlur}
|
701
|
+
@keydown=${input.onTitleInputKeyDown}
|
702
|
+
id="title-input"
|
703
|
+
jslog=${VisualLogging.value('title').track({change: true})}
|
704
|
+
class=${Lit.Directives.classMap({
|
705
|
+
'has-error': input.isTitleInvalid,
|
706
|
+
disabled: !isTitleEditable,
|
707
|
+
})}
|
708
|
+
.value=${Lit.Directives.live(title)}
|
709
|
+
.disabled=${!isTitleEditable}
|
710
|
+
>
|
711
|
+
<div class="title-button-bar">
|
712
|
+
<devtools-button
|
713
|
+
@click=${input.onEditTitleButtonClick}
|
714
|
+
.data=${
|
715
|
+
{
|
716
|
+
disabled: !isTitleEditable,
|
717
|
+
variant: Buttons.Button.Variant.TOOLBAR,
|
718
|
+
iconName: 'edit',
|
719
|
+
title: i18nString(UIStrings.editTitle),
|
720
|
+
jslogContext: 'edit-title',
|
721
|
+
} as Buttons.Button.ButtonData
|
722
|
+
}
|
723
|
+
></devtools-button>
|
724
|
+
</div>
|
725
|
+
</div>
|
726
|
+
${
|
727
|
+
input.isTitleInvalid
|
728
|
+
? html`<div class="title-input-error-text">
|
729
|
+
${
|
730
|
+
i18nString(UIStrings.requiredTitleError)
|
731
|
+
}
|
732
|
+
</div>`
|
733
|
+
: Lit.nothing
|
734
|
+
}
|
735
|
+
</div>
|
736
|
+
${
|
737
|
+
!input.isRecording && input.replayAllowed
|
738
|
+
? html`<div class="actions">
|
739
|
+
<devtools-button
|
740
|
+
@click=${input.onMeasurePerformanceClick}
|
741
|
+
.data=${
|
742
|
+
{
|
743
|
+
disabled: input.replayState.isPlaying,
|
744
|
+
variant: Buttons.Button.Variant.OUTLINED,
|
745
|
+
iconName: 'performance',
|
746
|
+
title: i18nString(UIStrings.performancePanel),
|
747
|
+
jslogContext: 'measure-performance',
|
748
|
+
} as Buttons.Button.ButtonData
|
749
|
+
}
|
750
|
+
>
|
751
|
+
${i18nString(UIStrings.performancePanel)}
|
752
|
+
</devtools-button>
|
753
|
+
<div class="separator"></div>
|
754
|
+
${renderReplayOrAbortButton(input)}
|
755
|
+
</div>`
|
756
|
+
: Lit.nothing
|
757
|
+
}
|
758
|
+
</div>`;
|
759
|
+
// clang-format on
|
760
|
+
}
|
761
|
+
|
762
|
+
interface ViewInput {
|
763
|
+
breakpointIndexes: Set<number>;
|
764
|
+
builtInConverters: readonly Converters.Converter.Converter[];
|
765
|
+
converterId: string;
|
766
|
+
converterName: string|null;
|
767
|
+
currentError: Error|null;
|
768
|
+
currentStep: Models.Schema.Step|null;
|
769
|
+
editorState: CodeMirror.EditorState|null;
|
770
|
+
extensionConverters: readonly Converters.Converter.Converter[];
|
771
|
+
extensionDescriptor?: PublicExtensions.RecorderPluginManager.ViewDescriptor;
|
772
|
+
isRecording: boolean;
|
773
|
+
isTitleInvalid: boolean;
|
774
|
+
lastReplayResult: Models.RecordingPlayer.ReplayResult|null;
|
775
|
+
recorderSettings: Models.RecorderSettings.RecorderSettings|null;
|
776
|
+
recording: Models.Schema.UserFlow;
|
777
|
+
recordingTogglingInProgress: boolean;
|
778
|
+
replayAllowed: boolean;
|
779
|
+
replayExtensions: Extensions.ExtensionManager.Extension[];
|
780
|
+
replaySettingsExpanded: boolean;
|
781
|
+
replayState: ReplayState;
|
782
|
+
sections: Models.Section.Section[];
|
783
|
+
selectedStep: Models.Schema.Step|null;
|
784
|
+
settings: Models.RecordingSettings.RecordingSettings|null;
|
785
|
+
showCodeView: boolean;
|
786
|
+
|
787
|
+
onAddAssertion: () => void;
|
788
|
+
onRecordingFinished: () => void;
|
789
|
+
getSectionState: (section: Models.Section.Section) => State;
|
790
|
+
getStepState: (step: Models.Schema.Step) => State;
|
791
|
+
onAbortReplay: () => void;
|
792
|
+
onMeasurePerformanceClick: (event: Event) => void;
|
793
|
+
onTogglePlaying: (event: StartReplayEvent) => void;
|
794
|
+
onCodeFormatChange: (event: Menus.SelectMenu.SelectMenuItemSelectedEvent) => void;
|
795
|
+
onCopyStep: (event: CopyStepEvent) => void;
|
796
|
+
onEditTitleButtonClick: (event: Event) => void;
|
797
|
+
onNetworkConditionsChange: (event: Event) => void;
|
798
|
+
onReplaySettingsKeydown: (event: Event) => void;
|
799
|
+
onSelectMenuLabelClick: (event: Event) => void;
|
800
|
+
onStepClick: (event: Event) => void;
|
801
|
+
onStepHover: (event: MouseEvent) => void;
|
802
|
+
onTimeoutInput: (event: Event) => void;
|
803
|
+
onTitleBlur: (event: Event) => void;
|
804
|
+
onTitleInputKeyDown: (event: KeyboardEvent) => void;
|
805
|
+
onToggleReplaySettings: (event: Event) => void;
|
806
|
+
onWrapperClick: () => void;
|
807
|
+
showCodeToggle: () => void;
|
808
|
+
}
|
809
|
+
|
810
|
+
export interface ViewOutput {
|
811
|
+
highlightLinesInEditor?: (line: number, length: number, scroll?: boolean) => void;
|
812
|
+
}
|
813
|
+
|
814
|
+
export const DEFAULT_VIEW = (input: ViewInput, output: ViewOutput, target: HTMLElement): void => {
|
815
|
+
const classNames = {
|
816
|
+
wrapper: true,
|
817
|
+
'is-recording': input.isRecording,
|
818
|
+
'is-playing': input.replayState.isPlaying,
|
819
|
+
'was-successful': input.lastReplayResult === Models.RecordingPlayer.ReplayResult.SUCCESS,
|
820
|
+
'was-failure': input.lastReplayResult === Models.RecordingPlayer.ReplayResult.FAILURE,
|
821
|
+
};
|
822
|
+
|
823
|
+
const footerButtonTitle = input.recordingTogglingInProgress ? i18nString(UIStrings.recordingIsBeingStopped) :
|
824
|
+
i18nString(UIStrings.endRecording);
|
825
|
+
// clang-format off
|
826
|
+
Lit.render(
|
827
|
+
html`
|
828
|
+
<style>${UI.inspectorCommonStyles}</style>
|
829
|
+
<style>${recordingViewStyles}</style>
|
830
|
+
<style>${Input.textInputStyles}</style>
|
831
|
+
<div @click=${input.onWrapperClick} class=${Lit.Directives.classMap(
|
832
|
+
classNames,
|
833
|
+
)}>
|
834
|
+
<div class="recording-view main">
|
835
|
+
${renderHeader(input)}
|
836
|
+
${
|
837
|
+
input.extensionDescriptor
|
838
|
+
? html`
|
839
|
+
<devtools-recorder-extension-view .descriptor=${
|
840
|
+
input.extensionDescriptor
|
841
|
+
}></devtools-recorder-extension-view>` : html`
|
842
|
+
${renderSettings(input)}
|
843
|
+
${renderTimelineArea(input, output)}
|
844
|
+
`}
|
845
|
+
${input.isRecording ? html`<div class="footer">
|
846
|
+
<div class="controls">
|
847
|
+
<devtools-control-button
|
848
|
+
jslog=${VisualLogging.toggle('toggle-recording').track({click: true})}
|
849
|
+
@click=${input.onRecordingFinished}
|
850
|
+
.disabled=${input.recordingTogglingInProgress}
|
851
|
+
.shape=${'square'}
|
852
|
+
.label=${footerButtonTitle}
|
853
|
+
title=${Models.Tooltip.getTooltipForActions(
|
854
|
+
footerButtonTitle,
|
855
|
+
Actions.RecorderActions.START_RECORDING,
|
856
|
+
)}
|
857
|
+
>
|
858
|
+
</devtools-control-button>
|
859
|
+
</div>
|
860
|
+
</div>`: Lit.nothing}
|
861
|
+
</div>
|
862
|
+
</div>
|
863
|
+
`,
|
864
|
+
target,
|
865
|
+
);
|
866
|
+
// clang-format on
|
867
|
+
};
|
868
|
+
|
869
|
+
export class RecordingView extends UI.Widget.Widget {
|
870
|
+
replayState: ReplayState = {isPlaying: false, isPausedOnBreakpoint: false};
|
871
|
+
isRecording = false;
|
872
|
+
recordingTogglingInProgress = false;
|
873
|
+
recording: Models.Schema.UserFlow = {
|
874
|
+
title: '',
|
875
|
+
steps: [],
|
876
|
+
};
|
877
|
+
currentStep?: Models.Schema.Step;
|
878
|
+
currentError?: Error;
|
879
|
+
sections: Models.Section.Section[] = [];
|
880
|
+
settings?: Models.RecordingSettings.RecordingSettings;
|
881
|
+
lastReplayResult?: Models.RecordingPlayer.ReplayResult;
|
882
|
+
replayAllowed = false;
|
883
|
+
breakpointIndexes = new Set<number>();
|
884
|
+
extensionConverters: readonly Converters.Converter.Converter[] = [];
|
885
|
+
replayExtensions?: Extensions.ExtensionManager.Extension[];
|
886
|
+
extensionDescriptor?: PublicExtensions.RecorderPluginManager.ViewDescriptor;
|
887
|
+
|
888
|
+
addAssertion?: () => void;
|
889
|
+
abortReplay?: () => void;
|
890
|
+
recordingFinished?: () => void;
|
891
|
+
playRecording?: (event: PlayRecordingEvent) => void;
|
892
|
+
networkConditionsChanged?: (data?: SDK.NetworkManager.Conditions) => void;
|
893
|
+
timeoutChanged?: (timeout?: number) => void;
|
894
|
+
titleChanged?: (title: string) => void;
|
895
|
+
|
896
|
+
#recorderSettings?: Models.RecorderSettings.RecorderSettings;
|
897
|
+
get recorderSettings(): Models.RecorderSettings.RecorderSettings|undefined {
|
898
|
+
return this.#recorderSettings;
|
899
|
+
}
|
900
|
+
set recorderSettings(settings: Models.RecorderSettings.RecorderSettings|undefined) {
|
901
|
+
this.#recorderSettings = settings;
|
902
|
+
this.#converterId = this.recorderSettings?.preferredCopyFormat ?? this.#builtInConverters[0]?.getId();
|
903
|
+
void this.#convertToCode();
|
904
|
+
}
|
905
|
+
|
906
|
+
#builtInConverters: readonly Converters.Converter.Converter[] = [];
|
907
|
+
get builtInConverters(): readonly Converters.Converter.Converter[] {
|
908
|
+
return this.#builtInConverters;
|
909
|
+
}
|
910
|
+
set builtInConverters(converters: readonly Converters.Converter.Converter[]) {
|
911
|
+
this.#builtInConverters = converters;
|
912
|
+
this.#converterId = this.recorderSettings?.preferredCopyFormat ?? this.#builtInConverters[0]?.getId();
|
913
|
+
void this.#convertToCode();
|
914
|
+
}
|
915
|
+
|
916
|
+
#isTitleInvalid = false;
|
917
|
+
#selectedStep?: Models.Schema.Step|null;
|
918
|
+
#replaySettingsExpanded = false;
|
919
|
+
#showCodeView = false;
|
920
|
+
#code = '';
|
921
|
+
#converterId = '';
|
922
|
+
#sourceMap: PuppeteerReplay.SourceMap|undefined;
|
923
|
+
#editorState?: CodeMirror.EditorState;
|
924
|
+
|
925
|
+
#onCopyBound = this.#onCopy.bind(this);
|
926
|
+
#view: typeof DEFAULT_VIEW;
|
927
|
+
#viewOutput: ViewOutput = {};
|
928
|
+
|
929
|
+
constructor(element?: HTMLElement, view?: typeof DEFAULT_VIEW) {
|
930
|
+
super(element, {useShadowDom: true});
|
931
|
+
this.#view = view || DEFAULT_VIEW;
|
932
|
+
}
|
933
|
+
|
934
|
+
override performUpdate(): void {
|
935
|
+
const converter =
|
936
|
+
[
|
937
|
+
...(this.builtInConverters || []),
|
938
|
+
...(this.extensionConverters || []),
|
939
|
+
].find(converter => converter.getId() === this.#converterId) ??
|
940
|
+
this.builtInConverters[0];
|
941
|
+
|
942
|
+
this.#view(
|
943
|
+
{
|
944
|
+
breakpointIndexes: this.breakpointIndexes,
|
945
|
+
builtInConverters: this.builtInConverters,
|
946
|
+
converterId: this.#converterId,
|
947
|
+
converterName: converter?.getFormatName(),
|
948
|
+
currentError: this.currentError ?? null,
|
949
|
+
currentStep: this.currentStep ?? null,
|
950
|
+
editorState: this.#editorState ?? null,
|
951
|
+
extensionConverters: this.extensionConverters,
|
952
|
+
extensionDescriptor: this.extensionDescriptor,
|
953
|
+
isRecording: this.isRecording,
|
954
|
+
isTitleInvalid: this.#isTitleInvalid,
|
955
|
+
lastReplayResult: this.lastReplayResult ?? null,
|
956
|
+
recorderSettings: this.#recorderSettings ?? null,
|
957
|
+
recording: this.recording,
|
958
|
+
recordingTogglingInProgress: this.recordingTogglingInProgress,
|
959
|
+
replayAllowed: this.replayAllowed,
|
960
|
+
replayExtensions: this.replayExtensions ?? [],
|
961
|
+
replaySettingsExpanded: this.#replaySettingsExpanded,
|
962
|
+
replayState: this.replayState,
|
963
|
+
sections: this.sections,
|
964
|
+
selectedStep: this.#selectedStep ?? null,
|
965
|
+
settings: this.settings ?? null,
|
966
|
+
showCodeView: this.#showCodeView,
|
967
|
+
|
968
|
+
onAddAssertion: () => {
|
969
|
+
this.addAssertion?.();
|
970
|
+
},
|
971
|
+
onRecordingFinished: () => {
|
972
|
+
this.recordingFinished?.();
|
973
|
+
},
|
974
|
+
getSectionState: this.#getSectionState.bind(this),
|
975
|
+
getStepState: this.#getStepState.bind(this),
|
976
|
+
onAbortReplay: () => {
|
977
|
+
this.abortReplay?.();
|
978
|
+
},
|
979
|
+
onMeasurePerformanceClick: this.#handleMeasurePerformanceClickEvent.bind(this),
|
980
|
+
onTogglePlaying: (event: StartReplayEvent) => {
|
981
|
+
this.playRecording?.({
|
982
|
+
targetPanel: TargetPanel.DEFAULT,
|
983
|
+
speed: event.speed,
|
984
|
+
extension: event.extension,
|
985
|
+
});
|
986
|
+
},
|
987
|
+
onCodeFormatChange: this.#onCodeFormatChange.bind(this),
|
988
|
+
onCopyStep: this.#onCopyStepEvent.bind(this),
|
989
|
+
onEditTitleButtonClick: this.#onEditTitleButtonClick.bind(this),
|
990
|
+
onNetworkConditionsChange: this.#onNetworkConditionsChange.bind(this),
|
991
|
+
onReplaySettingsKeydown: this.#onReplaySettingsKeydown.bind(this),
|
992
|
+
onSelectMenuLabelClick: this.#onSelectMenuLabelClick.bind(this),
|
993
|
+
onStepClick: this.#onStepClick.bind(this),
|
994
|
+
onStepHover: this.#onStepHover.bind(this),
|
995
|
+
onTimeoutInput: this.#onTimeoutInput.bind(this),
|
996
|
+
onTitleBlur: this.#onTitleBlur.bind(this),
|
997
|
+
onTitleInputKeyDown: this.#onTitleInputKeyDown.bind(this),
|
998
|
+
onToggleReplaySettings: this.#onToggleReplaySettings.bind(this),
|
999
|
+
onWrapperClick: this.#onWrapperClick.bind(this),
|
1000
|
+
showCodeToggle: this.showCodeToggle.bind(this),
|
1001
|
+
},
|
1002
|
+
this.#viewOutput, this.contentElement);
|
1003
|
+
}
|
1004
|
+
|
1005
|
+
override wasShown(): void {
|
1006
|
+
super.wasShown();
|
1007
|
+
document.addEventListener('copy', this.#onCopyBound);
|
1008
|
+
this.performUpdate();
|
1009
|
+
}
|
1010
|
+
|
1011
|
+
override willHide(): void {
|
1012
|
+
super.willHide();
|
1013
|
+
document.removeEventListener('copy', this.#onCopyBound);
|
1014
|
+
}
|
1015
|
+
|
1016
|
+
scrollToBottom(): void {
|
1017
|
+
const wrapper = this.contentElement?.querySelector('.sections');
|
1018
|
+
if (!wrapper) {
|
1019
|
+
return;
|
1020
|
+
}
|
1021
|
+
wrapper.scrollTop = wrapper.scrollHeight;
|
1022
|
+
}
|
1023
|
+
|
1024
|
+
#getStepState(step: Models.Schema.Step): State {
|
1025
|
+
if (!this.currentStep) {
|
1026
|
+
return State.DEFAULT;
|
1027
|
+
}
|
1028
|
+
if (step === this.currentStep) {
|
1029
|
+
if (this.currentError) {
|
1030
|
+
return State.ERROR;
|
1031
|
+
}
|
1032
|
+
if (!this.replayState?.isPlaying) {
|
1033
|
+
return State.SUCCESS;
|
1034
|
+
}
|
1035
|
+
|
1036
|
+
if (this.replayState?.isPausedOnBreakpoint) {
|
1037
|
+
return State.STOPPED;
|
1038
|
+
}
|
1039
|
+
|
1040
|
+
return State.CURRENT;
|
1041
|
+
}
|
1042
|
+
const currentIndex = this.recording.steps.indexOf(this.currentStep);
|
1043
|
+
if (currentIndex === -1) {
|
1044
|
+
return State.DEFAULT;
|
1045
|
+
}
|
1046
|
+
|
1047
|
+
const index = this.recording.steps.indexOf(step);
|
1048
|
+
return index < currentIndex ? State.SUCCESS : State.OUTSTANDING;
|
1049
|
+
}
|
1050
|
+
|
1051
|
+
#getSectionState(section: Models.Section.Section): State {
|
1052
|
+
const currentStep = this.currentStep;
|
1053
|
+
if (!currentStep) {
|
1054
|
+
return State.DEFAULT;
|
1055
|
+
}
|
1056
|
+
|
1057
|
+
const currentSection = this.sections.find(
|
1058
|
+
section => section.steps.includes(currentStep),
|
1059
|
+
) as Models.Section.Section;
|
1060
|
+
|
1061
|
+
if (!currentSection) {
|
1062
|
+
if (this.currentError) {
|
1063
|
+
return State.ERROR;
|
1064
|
+
}
|
1065
|
+
}
|
1066
|
+
|
1067
|
+
if (section === currentSection) {
|
1068
|
+
return State.SUCCESS;
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
const index = this.sections.indexOf(currentSection);
|
1072
|
+
const ownIndex = this.sections.indexOf(section);
|
1073
|
+
return index >= ownIndex ? State.SUCCESS : State.OUTSTANDING;
|
1074
|
+
}
|
1075
|
+
|
1076
|
+
#onStepHover = (event: MouseEvent): void => {
|
1077
|
+
const stepView = event.target as StepView;
|
1078
|
+
const step = stepView.step || stepView.section?.causingStep;
|
1079
|
+
if (!step || this.#selectedStep) {
|
1080
|
+
return;
|
1081
|
+
}
|
1082
|
+
this.#highlightCodeForStep(step);
|
1083
|
+
};
|
1084
|
+
|
1085
|
+
#onStepClick(event: Event): void {
|
1086
|
+
event.stopPropagation();
|
1087
|
+
const stepView = event.target as StepView;
|
1088
|
+
const selectedStep = stepView.step || stepView.section?.causingStep || null;
|
1089
|
+
if (this.#selectedStep === selectedStep) {
|
1090
|
+
return;
|
1091
|
+
}
|
1092
|
+
this.#selectedStep = selectedStep;
|
1093
|
+
this.performUpdate();
|
1094
|
+
if (selectedStep) {
|
1095
|
+
this.#highlightCodeForStep(selectedStep, /* scroll=*/ true);
|
1096
|
+
}
|
1097
|
+
}
|
1098
|
+
|
1099
|
+
#onWrapperClick(): void {
|
1100
|
+
if (this.#selectedStep === undefined) {
|
1101
|
+
return;
|
1102
|
+
}
|
1103
|
+
this.#selectedStep = undefined;
|
1104
|
+
this.performUpdate();
|
1105
|
+
}
|
1106
|
+
|
1107
|
+
#onReplaySettingsKeydown(event: Event): void {
|
1108
|
+
if ((event as KeyboardEvent).key !== 'Enter') {
|
1109
|
+
return;
|
534
1110
|
}
|
535
1111
|
event.preventDefault();
|
536
1112
|
this.#onToggleReplaySettings(event);
|
@@ -539,7 +1115,7 @@ export class RecordingView extends HTMLElement {
|
|
539
1115
|
#onToggleReplaySettings(event: Event): void {
|
540
1116
|
event.stopPropagation();
|
541
1117
|
this.#replaySettingsExpanded = !this.#replaySettingsExpanded;
|
542
|
-
this
|
1118
|
+
this.performUpdate();
|
543
1119
|
}
|
544
1120
|
|
545
1121
|
#onNetworkConditionsChange(event: Event): void {
|
@@ -548,10 +1124,8 @@ export class RecordingView extends HTMLElement {
|
|
548
1124
|
const preset = networkConditionPresets.find(
|
549
1125
|
preset => preset.i18nTitleKey === throttlingMenu.value,
|
550
1126
|
);
|
551
|
-
this.
|
552
|
-
|
553
|
-
preset?.i18nTitleKey === SDK.NetworkManager.NoThrottlingConditions.i18nTitleKey ? undefined : preset,
|
554
|
-
),
|
1127
|
+
this.networkConditionsChanged?.(
|
1128
|
+
preset?.i18nTitleKey === SDK.NetworkManager.NoThrottlingConditions.i18nTitleKey ? undefined : preset,
|
555
1129
|
);
|
556
1130
|
}
|
557
1131
|
}
|
@@ -562,7 +1136,7 @@ export class RecordingView extends HTMLElement {
|
|
562
1136
|
target.reportValidity();
|
563
1137
|
return;
|
564
1138
|
}
|
565
|
-
this.
|
1139
|
+
this.timeoutChanged?.(Number(target.value));
|
566
1140
|
}
|
567
1141
|
|
568
1142
|
#onTitleBlur = (event: Event): void => {
|
@@ -570,10 +1144,10 @@ export class RecordingView extends HTMLElement {
|
|
570
1144
|
const title = target.value.trim();
|
571
1145
|
if (!title) {
|
572
1146
|
this.#isTitleInvalid = true;
|
573
|
-
this
|
1147
|
+
this.performUpdate();
|
574
1148
|
return;
|
575
1149
|
}
|
576
|
-
this.
|
1150
|
+
this.titleChanged?.(title);
|
577
1151
|
};
|
578
1152
|
|
579
1153
|
#onTitleInputKeyDown = (event: KeyboardEvent): void => {
|
@@ -587,7 +1161,10 @@ export class RecordingView extends HTMLElement {
|
|
587
1161
|
};
|
588
1162
|
|
589
1163
|
#onEditTitleButtonClick = (): void => {
|
590
|
-
const input = this
|
1164
|
+
const input = this.contentElement.querySelector<HTMLInputElement>('#title-input');
|
1165
|
+
if (!input) {
|
1166
|
+
throw new Error('Missing #title-input');
|
1167
|
+
}
|
591
1168
|
input.focus();
|
592
1169
|
};
|
593
1170
|
|
@@ -601,14 +1178,14 @@ export class RecordingView extends HTMLElement {
|
|
601
1178
|
async #copyCurrentSelection(step?: Models.Schema.Step|null): Promise<void> {
|
602
1179
|
let converter =
|
603
1180
|
[
|
604
|
-
...this
|
605
|
-
...this
|
1181
|
+
...this.builtInConverters,
|
1182
|
+
...this.extensionConverters,
|
606
1183
|
]
|
607
1184
|
.find(
|
608
|
-
converter => converter.getId() === this
|
1185
|
+
converter => converter.getId() === this.recorderSettings?.preferredCopyFormat,
|
609
1186
|
);
|
610
1187
|
if (!converter) {
|
611
|
-
converter = this
|
1188
|
+
converter = this.builtInConverters[0];
|
612
1189
|
}
|
613
1190
|
if (!converter) {
|
614
1191
|
throw new Error('No default converter found');
|
@@ -617,8 +1194,8 @@ export class RecordingView extends HTMLElement {
|
|
617
1194
|
let text = '';
|
618
1195
|
if (step) {
|
619
1196
|
text = await converter.stringifyStep(step);
|
620
|
-
} else if (this
|
621
|
-
[text] = await converter.stringify(this
|
1197
|
+
} else if (this.recording) {
|
1198
|
+
[text] = await converter.stringify(this.recording);
|
622
1199
|
}
|
623
1200
|
|
624
1201
|
Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(text);
|
@@ -641,339 +1218,13 @@ export class RecordingView extends HTMLElement {
|
|
641
1218
|
Host.userMetrics.keyboardShortcutFired(Actions.RecorderActions.COPY_RECORDING_OR_STEP);
|
642
1219
|
}
|
643
1220
|
|
644
|
-
#renderSettings(): Lit.TemplateResult {
|
645
|
-
if (!this.#settings) {
|
646
|
-
return html``;
|
647
|
-
}
|
648
|
-
const environmentFragments = [];
|
649
|
-
if (this.#settings.viewportSettings) {
|
650
|
-
// clang-format off
|
651
|
-
environmentFragments.push(
|
652
|
-
html`<div>${
|
653
|
-
this.#settings.viewportSettings.isMobile
|
654
|
-
? i18nString(UIStrings.mobile)
|
655
|
-
: i18nString(UIStrings.desktop)
|
656
|
-
}</div>`,
|
657
|
-
);
|
658
|
-
environmentFragments.push(html`<div class="separator"></div>`);
|
659
|
-
environmentFragments.push(
|
660
|
-
html`<div>${this.#settings.viewportSettings.width}×${
|
661
|
-
this.#settings.viewportSettings.height
|
662
|
-
} px</div>`,
|
663
|
-
);
|
664
|
-
// clang-format on
|
665
|
-
}
|
666
|
-
const replaySettingsFragments = [];
|
667
|
-
if (!this.#replaySettingsExpanded) {
|
668
|
-
if (this.#settings.networkConditionsSettings) {
|
669
|
-
if (this.#settings.networkConditionsSettings.title) {
|
670
|
-
// clang-format off
|
671
|
-
replaySettingsFragments.push(
|
672
|
-
html`<div>${
|
673
|
-
this.#settings.networkConditionsSettings.title
|
674
|
-
}</div>`,
|
675
|
-
);
|
676
|
-
// clang-format on
|
677
|
-
} else {
|
678
|
-
// clang-format off
|
679
|
-
replaySettingsFragments.push(html`<div>
|
680
|
-
${i18nString(UIStrings.download, {
|
681
|
-
value: i18n.ByteUtilities.bytesToString(
|
682
|
-
this.#settings.networkConditionsSettings.download,
|
683
|
-
),
|
684
|
-
})},
|
685
|
-
${i18nString(UIStrings.upload, {
|
686
|
-
value: i18n.ByteUtilities.bytesToString(
|
687
|
-
this.#settings.networkConditionsSettings.upload,
|
688
|
-
),
|
689
|
-
})},
|
690
|
-
${i18nString(UIStrings.latency, {
|
691
|
-
value: this.#settings.networkConditionsSettings.latency,
|
692
|
-
})}
|
693
|
-
</div>`);
|
694
|
-
// clang-format on
|
695
|
-
}
|
696
|
-
} else {
|
697
|
-
// clang-format off
|
698
|
-
replaySettingsFragments.push(
|
699
|
-
html`<div>${
|
700
|
-
SDK.NetworkManager.NoThrottlingConditions.title instanceof Function
|
701
|
-
? SDK.NetworkManager.NoThrottlingConditions.title()
|
702
|
-
: SDK.NetworkManager.NoThrottlingConditions.title
|
703
|
-
}</div>`,
|
704
|
-
);
|
705
|
-
// clang-format on
|
706
|
-
}
|
707
|
-
// clang-format off
|
708
|
-
replaySettingsFragments.push(html`<div class="separator"></div>`);
|
709
|
-
replaySettingsFragments.push(
|
710
|
-
html`<div>${i18nString(UIStrings.timeout, {
|
711
|
-
value: this.#settings.timeout || Models.RecordingPlayer.defaultTimeout,
|
712
|
-
})}</div>`,
|
713
|
-
);
|
714
|
-
// clang-format on
|
715
|
-
} else {
|
716
|
-
// clang-format off
|
717
|
-
const selectedOption =
|
718
|
-
this.#settings.networkConditionsSettings?.i18nTitleKey ||
|
719
|
-
SDK.NetworkManager.NoThrottlingConditions.i18nTitleKey;
|
720
|
-
const selectedOptionTitle = networkConditionPresets.find(
|
721
|
-
preset => preset.i18nTitleKey === selectedOption,
|
722
|
-
);
|
723
|
-
let menuButtonTitle = '';
|
724
|
-
if (selectedOptionTitle) {
|
725
|
-
menuButtonTitle =
|
726
|
-
selectedOptionTitle.title instanceof Function
|
727
|
-
? selectedOptionTitle.title()
|
728
|
-
: selectedOptionTitle.title;
|
729
|
-
}
|
730
|
-
|
731
|
-
replaySettingsFragments.push(html`<div class="editable-setting">
|
732
|
-
<label class="wrapping-label" @click=${this.#onSelectMenuLabelClick}>
|
733
|
-
${i18nString(UIStrings.network)}
|
734
|
-
<select
|
735
|
-
title=${menuButtonTitle}
|
736
|
-
jslog=${VisualLogging.dropDown('network-conditions').track({change: true})}
|
737
|
-
@change=${this.#onNetworkConditionsChange}>
|
738
|
-
${networkConditionPresets.map(condition => html`
|
739
|
-
<option jslog=${VisualLogging.item(Platform.StringUtilities.toKebabCase(condition.i18nTitleKey || ''))}
|
740
|
-
value=${condition.i18nTitleKey || ''} ?selected=${selectedOption === condition.i18nTitleKey}>
|
741
|
-
${
|
742
|
-
condition.title instanceof Function
|
743
|
-
? condition.title()
|
744
|
-
: condition.title
|
745
|
-
}
|
746
|
-
</option>`)}
|
747
|
-
</select>
|
748
|
-
</label>
|
749
|
-
</div>`);
|
750
|
-
replaySettingsFragments.push(html`<div class="editable-setting">
|
751
|
-
<label class="wrapping-label" title=${i18nString(
|
752
|
-
UIStrings.timeoutExplanation,
|
753
|
-
)}>
|
754
|
-
${i18nString(UIStrings.timeoutLabel)}
|
755
|
-
<input
|
756
|
-
@input=${this.#onTimeoutInput}
|
757
|
-
required
|
758
|
-
min=${Models.SchemaUtils.minTimeout}
|
759
|
-
max=${Models.SchemaUtils.maxTimeout}
|
760
|
-
value=${
|
761
|
-
this.#settings.timeout || Models.RecordingPlayer.defaultTimeout
|
762
|
-
}
|
763
|
-
jslog=${VisualLogging.textField('timeout').track({change: true})}
|
764
|
-
class="devtools-text-input"
|
765
|
-
type="number">
|
766
|
-
</label>
|
767
|
-
</div>`);
|
768
|
-
// clang-format on
|
769
|
-
}
|
770
|
-
const isEditable = !this.#isRecording && !this.#replayState.isPlaying;
|
771
|
-
const replaySettingsButtonClassMap = {
|
772
|
-
'settings-title': true,
|
773
|
-
expanded: this.#replaySettingsExpanded,
|
774
|
-
};
|
775
|
-
const replaySettingsClassMap = {
|
776
|
-
expanded: this.#replaySettingsExpanded,
|
777
|
-
settings: true,
|
778
|
-
};
|
779
|
-
// clang-format off
|
780
|
-
return html`
|
781
|
-
<div class="settings-row">
|
782
|
-
<div class="settings-container">
|
783
|
-
<div
|
784
|
-
class=${Lit.Directives.classMap(replaySettingsButtonClassMap)}
|
785
|
-
@keydown=${isEditable && this.#onReplaySettingsKeydown}
|
786
|
-
@click=${isEditable && this.#onToggleReplaySettings}
|
787
|
-
tabindex="0"
|
788
|
-
role="button"
|
789
|
-
jslog=${VisualLogging.action('replay-settings').track({click: true})}
|
790
|
-
aria-label=${i18nString(UIStrings.editReplaySettings)}>
|
791
|
-
<span>${i18nString(UIStrings.replaySettings)}</span>
|
792
|
-
${
|
793
|
-
isEditable
|
794
|
-
? html`<devtools-icon
|
795
|
-
class="chevron"
|
796
|
-
name="triangle-down">
|
797
|
-
</devtools-icon>`
|
798
|
-
: ''
|
799
|
-
}
|
800
|
-
</div>
|
801
|
-
<div class=${Lit.Directives.classMap(replaySettingsClassMap)}>
|
802
|
-
${
|
803
|
-
replaySettingsFragments.length
|
804
|
-
? replaySettingsFragments
|
805
|
-
: html`<div>${i18nString(UIStrings.default)}</div>`
|
806
|
-
}
|
807
|
-
</div>
|
808
|
-
</div>
|
809
|
-
<div class="settings-container">
|
810
|
-
<div class="settings-title">${i18nString(UIStrings.environment)}</div>
|
811
|
-
<div class="settings">
|
812
|
-
${
|
813
|
-
environmentFragments.length
|
814
|
-
? environmentFragments
|
815
|
-
: html`<div>${i18nString(UIStrings.default)}</div>`
|
816
|
-
}
|
817
|
-
</div>
|
818
|
-
</div>
|
819
|
-
</div>
|
820
|
-
`;
|
821
|
-
// clang-format on
|
822
|
-
}
|
823
|
-
|
824
|
-
#getCurrentConverter(): Converters.Converter.Converter|undefined {
|
825
|
-
const currentConverter = [
|
826
|
-
...(this.#builtInConverters || []),
|
827
|
-
...(this.#extensionConverters || []),
|
828
|
-
].find(converter => converter.getId() === this.#converterId);
|
829
|
-
if (!currentConverter) {
|
830
|
-
return this.#builtInConverters[0];
|
831
|
-
}
|
832
|
-
return currentConverter;
|
833
|
-
}
|
834
|
-
|
835
|
-
#renderTimelineArea(): Lit.LitTemplate {
|
836
|
-
if (this.#extensionDescriptor) {
|
837
|
-
// clang-format off
|
838
|
-
return html`
|
839
|
-
<devtools-recorder-extension-view .descriptor=${this.#extensionDescriptor}>
|
840
|
-
</devtools-recorder-extension-view>
|
841
|
-
`;
|
842
|
-
// clang-format on
|
843
|
-
}
|
844
|
-
const currentConverter = this.#getCurrentConverter();
|
845
|
-
const converterFormatName = currentConverter?.getFormatName();
|
846
|
-
// clang-format off
|
847
|
-
/* eslint-disable rulesdir/no-deprecated-component-usages */
|
848
|
-
return html`
|
849
|
-
<devtools-split-view
|
850
|
-
direction="auto"
|
851
|
-
sidebar-position="second"
|
852
|
-
sidebar-initial-size="300"
|
853
|
-
sidebar-visibility=${this.#showCodeView ? '' : 'hidden'}
|
854
|
-
>
|
855
|
-
<div slot="main">
|
856
|
-
${this.#renderSections()}
|
857
|
-
</div>
|
858
|
-
<div slot="sidebar" jslog=${VisualLogging.pane('source-code').track({resize: true})}>
|
859
|
-
${this.#showCodeView ? html`
|
860
|
-
<div class="section-toolbar" jslog=${VisualLogging.toolbar()}>
|
861
|
-
<devtools-select-menu
|
862
|
-
@selectmenuselected=${this.#onCodeFormatChange}
|
863
|
-
.showDivider=${true}
|
864
|
-
.showArrow=${true}
|
865
|
-
.sideButton=${false}
|
866
|
-
.showSelectedItem=${true}
|
867
|
-
.position=${Dialogs.Dialog.DialogVerticalPosition.BOTTOM}
|
868
|
-
.buttonTitle=${converterFormatName || ''}
|
869
|
-
.jslogContext=${'code-format'}
|
870
|
-
>
|
871
|
-
${this.#builtInConverters.map(converter => {
|
872
|
-
return html`<devtools-menu-item
|
873
|
-
.value=${converter.getId()}
|
874
|
-
.selected=${this.#converterId === converter.getId()}
|
875
|
-
jslog=${VisualLogging.action().track({click: true}).context(`converter-${Platform.StringUtilities.toKebabCase(converter.getId())}`)}
|
876
|
-
>
|
877
|
-
${converter.getFormatName()}
|
878
|
-
</devtools-menu-item>`;
|
879
|
-
})}
|
880
|
-
${this.#extensionConverters.map(converter => {
|
881
|
-
return html`<devtools-menu-item
|
882
|
-
.value=${converter.getId()}
|
883
|
-
.selected=${this.#converterId === converter.getId()}
|
884
|
-
jslog=${VisualLogging.action().track({click: true}).context('converter-extension')}
|
885
|
-
>
|
886
|
-
${converter.getFormatName()}
|
887
|
-
</devtools-menu-item>`;
|
888
|
-
})}
|
889
|
-
</devtools-select-menu>
|
890
|
-
<devtools-button
|
891
|
-
title=${Models.Tooltip.getTooltipForActions(
|
892
|
-
i18nString(UIStrings.hideCode),
|
893
|
-
Actions.RecorderActions.TOGGLE_CODE_VIEW,
|
894
|
-
)}
|
895
|
-
.data=${
|
896
|
-
{
|
897
|
-
variant: Buttons.Button.Variant.ICON,
|
898
|
-
size: Buttons.Button.Size.SMALL,
|
899
|
-
iconName: 'cross',
|
900
|
-
} as Buttons.Button.ButtonData
|
901
|
-
}
|
902
|
-
@click=${this.showCodeToggle}
|
903
|
-
jslog=${VisualLogging.close().track({click: true})}
|
904
|
-
></devtools-button>
|
905
|
-
</div>
|
906
|
-
${this.#renderTextEditor()}`
|
907
|
-
: Lit.nothing}
|
908
|
-
</div>
|
909
|
-
</devtools-split-view>
|
910
|
-
`;
|
911
|
-
/* eslint-enable rulesdir/no-deprecated-component-usages */
|
912
|
-
// clang-format on
|
913
|
-
}
|
914
|
-
|
915
|
-
#renderTextEditor(): Lit.TemplateResult {
|
916
|
-
if (!this.#editorState) {
|
917
|
-
throw new Error('Unexpected: trying to render the text editor without editorState');
|
918
|
-
}
|
919
|
-
// clang-format off
|
920
|
-
return html`
|
921
|
-
<div class="text-editor" jslog=${VisualLogging.textField().track({change: true})}>
|
922
|
-
<devtools-text-editor .state=${this.#editorState}></devtools-text-editor>
|
923
|
-
</div>
|
924
|
-
`;
|
925
|
-
// clang-format on
|
926
|
-
}
|
927
|
-
|
928
|
-
#renderScreenshot(
|
929
|
-
section: Models.Section.Section,
|
930
|
-
): Lit.TemplateResult|null {
|
931
|
-
if (!section.screenshot) {
|
932
|
-
return null;
|
933
|
-
}
|
934
|
-
|
935
|
-
// clang-format off
|
936
|
-
return html`
|
937
|
-
<img class="screenshot" src=${section.screenshot} alt=${i18nString(
|
938
|
-
UIStrings.screenshotForSection,
|
939
|
-
)} />
|
940
|
-
`;
|
941
|
-
// clang-format on
|
942
|
-
}
|
943
|
-
|
944
|
-
#renderReplayOrAbortButton(): Lit.TemplateResult {
|
945
|
-
if (this.#replayState.isPlaying) {
|
946
|
-
return html`
|
947
|
-
<devtools-button .jslogContext=${'abort-replay'} @click=${
|
948
|
-
this.#handleAbortReplay} .iconName=${'pause'} .variant=${Buttons.Button.Variant.OUTLINED}>
|
949
|
-
${i18nString(UIStrings.cancelReplay)}
|
950
|
-
</devtools-button>`;
|
951
|
-
}
|
952
|
-
|
953
|
-
// clang-format off
|
954
|
-
return html`<devtools-replay-section
|
955
|
-
.data=${
|
956
|
-
{
|
957
|
-
settings: this.#recorderSettings,
|
958
|
-
replayExtensions: this.#replayExtensions,
|
959
|
-
} as ReplaySectionData
|
960
|
-
}
|
961
|
-
.disabled=${this.#replayState.isPlaying}
|
962
|
-
@startreplay=${this.#handleTogglePlaying}
|
963
|
-
>
|
964
|
-
</devtools-replay-section>`;
|
965
|
-
// clang-format on
|
966
|
-
}
|
967
|
-
|
968
1221
|
#handleMeasurePerformanceClickEvent(event: Event): void {
|
969
1222
|
event.stopPropagation();
|
970
1223
|
|
971
|
-
this.
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
}),
|
976
|
-
);
|
1224
|
+
this.playRecording?.({
|
1225
|
+
targetPanel: TargetPanel.PERFORMANCE_PANEL,
|
1226
|
+
speed: PlayRecordingSpeed.NORMAL,
|
1227
|
+
});
|
977
1228
|
}
|
978
1229
|
|
979
1230
|
showCodeToggle = (): void => {
|
@@ -986,14 +1237,21 @@ export class RecordingView extends HTMLElement {
|
|
986
1237
|
};
|
987
1238
|
|
988
1239
|
#convertToCode = async(): Promise<void> => {
|
989
|
-
if (!this
|
1240
|
+
if (!this.recording) {
|
990
1241
|
return;
|
991
1242
|
}
|
992
|
-
const converter =
|
1243
|
+
const converter =
|
1244
|
+
[
|
1245
|
+
...(this.builtInConverters || []),
|
1246
|
+
...(this.extensionConverters || []),
|
1247
|
+
].find(converter => converter.getId() === this.#converterId) ??
|
1248
|
+
this.builtInConverters[0];
|
1249
|
+
|
993
1250
|
if (!converter) {
|
994
1251
|
return;
|
995
1252
|
}
|
996
|
-
|
1253
|
+
|
1254
|
+
const [code, sourceMap] = await converter.stringify(this.recording);
|
997
1255
|
this.#code = code;
|
998
1256
|
this.#sourceMap = sourceMap;
|
999
1257
|
this.#sourceMap?.shift();
|
@@ -1008,9 +1266,9 @@ export class RecordingView extends HTMLElement {
|
|
1008
1266
|
languageSupport ? languageSupport : [],
|
1009
1267
|
],
|
1010
1268
|
});
|
1011
|
-
this
|
1269
|
+
this.performUpdate();
|
1012
1270
|
// Used by tests.
|
1013
|
-
this.dispatchEvent(new Event('code-generated'));
|
1271
|
+
this.contentElement.dispatchEvent(new Event('code-generated'));
|
1014
1272
|
};
|
1015
1273
|
|
1016
1274
|
#highlightCodeForStep = (step: Models.Schema.Step, scroll = false): void => {
|
@@ -1018,298 +1276,23 @@ export class RecordingView extends HTMLElement {
|
|
1018
1276
|
return;
|
1019
1277
|
}
|
1020
1278
|
|
1021
|
-
const stepIndex = this
|
1279
|
+
const stepIndex = this.recording.steps.indexOf(step);
|
1022
1280
|
if (stepIndex === -1) {
|
1023
1281
|
return;
|
1024
1282
|
}
|
1025
1283
|
|
1026
|
-
const editor = this.#shadow.querySelector('devtools-text-editor') as | TextEditor.TextEditor.TextEditor | undefined;
|
1027
|
-
if (!editor) {
|
1028
|
-
return;
|
1029
|
-
}
|
1030
|
-
|
1031
|
-
const cm = editor.editor;
|
1032
|
-
if (!cm) {
|
1033
|
-
return;
|
1034
|
-
}
|
1035
|
-
|
1036
1284
|
const line = this.#sourceMap[stepIndex * 2];
|
1037
1285
|
const length = this.#sourceMap[stepIndex * 2 + 1];
|
1038
1286
|
|
1039
|
-
|
1040
|
-
{lineNumber: line + length, columnNumber: 0},
|
1041
|
-
{lineNumber: line, columnNumber: 0},
|
1042
|
-
);
|
1043
|
-
const lastLine = editor.state.doc.lineAt(selection.main.anchor);
|
1044
|
-
selection = editor.createSelection(
|
1045
|
-
{lineNumber: line + length - 1, columnNumber: lastLine.length + 1},
|
1046
|
-
{lineNumber: line, columnNumber: 0},
|
1047
|
-
);
|
1048
|
-
|
1049
|
-
cm.dispatch({
|
1050
|
-
selection,
|
1051
|
-
effects: scroll ?
|
1052
|
-
[
|
1053
|
-
CodeMirror.EditorView.scrollIntoView(selection.main, {
|
1054
|
-
y: 'nearest',
|
1055
|
-
}),
|
1056
|
-
] :
|
1057
|
-
undefined,
|
1058
|
-
});
|
1287
|
+
this.#viewOutput.highlightLinesInEditor?.(line, length, scroll);
|
1059
1288
|
};
|
1060
1289
|
|
1061
1290
|
#onCodeFormatChange = (event: Menus.SelectMenu.SelectMenuItemSelectedEvent): void => {
|
1062
1291
|
this.#converterId = event.itemValue as string;
|
1063
|
-
if (this
|
1064
|
-
this
|
1292
|
+
if (this.recorderSettings) {
|
1293
|
+
this.recorderSettings.preferredCopyFormat = event.itemValue as string;
|
1065
1294
|
}
|
1066
1295
|
|
1067
1296
|
void this.#convertToCode();
|
1068
1297
|
};
|
1069
|
-
|
1070
|
-
#renderSections(): Lit.LitTemplate {
|
1071
|
-
// clang-format off
|
1072
|
-
return html`
|
1073
|
-
<div class="sections">
|
1074
|
-
${
|
1075
|
-
!this.#showCodeView
|
1076
|
-
? html`<div class="section-toolbar">
|
1077
|
-
<devtools-button
|
1078
|
-
@click=${this.showCodeToggle}
|
1079
|
-
class="show-code"
|
1080
|
-
.data=${
|
1081
|
-
{
|
1082
|
-
variant: Buttons.Button.Variant.OUTLINED,
|
1083
|
-
title: Models.Tooltip.getTooltipForActions(
|
1084
|
-
i18nString(UIStrings.showCode),
|
1085
|
-
Actions.RecorderActions.TOGGLE_CODE_VIEW,
|
1086
|
-
),
|
1087
|
-
} as Buttons.Button.ButtonData
|
1088
|
-
}
|
1089
|
-
jslog=${VisualLogging.toggleSubpane(Actions.RecorderActions.TOGGLE_CODE_VIEW).track({click: true})}
|
1090
|
-
>
|
1091
|
-
${i18nString(UIStrings.showCode)}
|
1092
|
-
</devtools-button>
|
1093
|
-
</div>`
|
1094
|
-
: ''
|
1095
|
-
}
|
1096
|
-
${this.#sections.map(
|
1097
|
-
(section, i) => html`
|
1098
|
-
<div class="section">
|
1099
|
-
<div class="screenshot-wrapper">
|
1100
|
-
${this.#renderScreenshot(section)}
|
1101
|
-
</div>
|
1102
|
-
<div class="content">
|
1103
|
-
<div class="steps">
|
1104
|
-
<devtools-step-view
|
1105
|
-
@click=${this.#onStepClick}
|
1106
|
-
@mouseover=${this.#onStepHover}
|
1107
|
-
.data=${
|
1108
|
-
{
|
1109
|
-
section,
|
1110
|
-
state: this.#getSectionState(section),
|
1111
|
-
isStartOfGroup: true,
|
1112
|
-
isEndOfGroup: section.steps.length === 0,
|
1113
|
-
isFirstSection: i === 0,
|
1114
|
-
isLastSection:
|
1115
|
-
i === this.#sections.length - 1 &&
|
1116
|
-
section.steps.length === 0,
|
1117
|
-
isSelected:
|
1118
|
-
this.#selectedStep === (section.causingStep || null),
|
1119
|
-
sectionIndex: i,
|
1120
|
-
isRecording: this.#isRecording,
|
1121
|
-
isPlaying: this.#replayState.isPlaying,
|
1122
|
-
error:
|
1123
|
-
this.#getSectionState(section) === State.ERROR
|
1124
|
-
? this.#currentError
|
1125
|
-
: undefined,
|
1126
|
-
hasBreakpoint: false,
|
1127
|
-
removable: this.#steps.length > 1 && section.causingStep,
|
1128
|
-
} as StepViewData
|
1129
|
-
}
|
1130
|
-
>
|
1131
|
-
</devtools-step-view>
|
1132
|
-
${section.steps.map(step =>
|
1133
|
-
this.#renderStep(
|
1134
|
-
section,
|
1135
|
-
step,
|
1136
|
-
i === this.#sections.length - 1,
|
1137
|
-
),
|
1138
|
-
)}
|
1139
|
-
${!this.#recordingTogglingInProgress && this.#isRecording && i === this.#sections.length - 1 ? html`<devtools-button
|
1140
|
-
class="step add-assertion-button"
|
1141
|
-
.data=${
|
1142
|
-
{
|
1143
|
-
variant: Buttons.Button.Variant.OUTLINED,
|
1144
|
-
title: i18nString(UIStrings.addAssertion),
|
1145
|
-
jslogContext: 'add-assertion',
|
1146
|
-
} as Buttons.Button.ButtonData
|
1147
|
-
}
|
1148
|
-
@click=${this.#dispatchAddAssertionEvent}
|
1149
|
-
>${i18nString(UIStrings.addAssertion)}</devtools-button>` : undefined}
|
1150
|
-
${
|
1151
|
-
this.#isRecording && i === this.#sections.length - 1
|
1152
|
-
? html`<div class="step recording">${i18nString(
|
1153
|
-
UIStrings.recording,
|
1154
|
-
)}</div>`
|
1155
|
-
: null
|
1156
|
-
}
|
1157
|
-
</div>
|
1158
|
-
</div>
|
1159
|
-
</div>
|
1160
|
-
`,
|
1161
|
-
)}
|
1162
|
-
</div>
|
1163
|
-
`;
|
1164
|
-
// clang-format on
|
1165
|
-
}
|
1166
|
-
|
1167
|
-
#renderHeader(): Lit.LitTemplate|string {
|
1168
|
-
if (!this.#userFlow) {
|
1169
|
-
return '';
|
1170
|
-
}
|
1171
|
-
const {title} = this.#userFlow;
|
1172
|
-
const isTitleEditable = !this.#replayState.isPlaying && !this.#isRecording;
|
1173
|
-
// clang-format off
|
1174
|
-
return html`
|
1175
|
-
<div class="header">
|
1176
|
-
<div class="header-title-wrapper">
|
1177
|
-
<div class="header-title">
|
1178
|
-
<input @blur=${this.#onTitleBlur}
|
1179
|
-
@keydown=${this.#onTitleInputKeyDown}
|
1180
|
-
id="title-input"
|
1181
|
-
jslog=${VisualLogging.value('title').track({change: true})}
|
1182
|
-
class=${Lit.Directives.classMap({
|
1183
|
-
'has-error': this.#isTitleInvalid,
|
1184
|
-
disabled: !isTitleEditable,
|
1185
|
-
})}
|
1186
|
-
.value=${Lit.Directives.live(title)}
|
1187
|
-
.disabled=${!isTitleEditable}
|
1188
|
-
>
|
1189
|
-
<div class="title-button-bar">
|
1190
|
-
<devtools-button
|
1191
|
-
@click=${this.#onEditTitleButtonClick}
|
1192
|
-
.data=${
|
1193
|
-
{
|
1194
|
-
disabled: !isTitleEditable,
|
1195
|
-
variant: Buttons.Button.Variant.TOOLBAR,
|
1196
|
-
iconName: 'edit',
|
1197
|
-
title: i18nString(UIStrings.editTitle),
|
1198
|
-
jslogContext: 'edit-title',
|
1199
|
-
} as Buttons.Button.ButtonData
|
1200
|
-
}
|
1201
|
-
></devtools-button>
|
1202
|
-
</div>
|
1203
|
-
</div>
|
1204
|
-
${
|
1205
|
-
this.#isTitleInvalid
|
1206
|
-
? html`<div class="title-input-error-text">
|
1207
|
-
${
|
1208
|
-
i18nString(UIStrings.requiredTitleError)
|
1209
|
-
}
|
1210
|
-
</div>`
|
1211
|
-
: ''
|
1212
|
-
}
|
1213
|
-
</div>
|
1214
|
-
${
|
1215
|
-
!this.#isRecording && this.#replayAllowed
|
1216
|
-
? html`<div class="actions">
|
1217
|
-
<devtools-button
|
1218
|
-
@click=${this.#handleMeasurePerformanceClickEvent}
|
1219
|
-
.data=${
|
1220
|
-
{
|
1221
|
-
disabled: this.#replayState.isPlaying,
|
1222
|
-
variant: Buttons.Button.Variant.OUTLINED,
|
1223
|
-
iconName: 'performance',
|
1224
|
-
title: i18nString(UIStrings.performancePanel),
|
1225
|
-
jslogContext: 'measure-performance',
|
1226
|
-
} as Buttons.Button.ButtonData
|
1227
|
-
}
|
1228
|
-
>
|
1229
|
-
${i18nString(UIStrings.performancePanel)}
|
1230
|
-
</devtools-button>
|
1231
|
-
<div class="separator"></div>
|
1232
|
-
${this.#renderReplayOrAbortButton()}
|
1233
|
-
</div>`
|
1234
|
-
: ''
|
1235
|
-
}
|
1236
|
-
</div>`;
|
1237
|
-
// clang-format on
|
1238
|
-
}
|
1239
|
-
|
1240
|
-
#renderFooter(): Lit.LitTemplate|string {
|
1241
|
-
if (!this.#isRecording) {
|
1242
|
-
return '';
|
1243
|
-
}
|
1244
|
-
const translation = this.#recordingTogglingInProgress ? i18nString(UIStrings.recordingIsBeingStopped) :
|
1245
|
-
i18nString(UIStrings.endRecording);
|
1246
|
-
// clang-format off
|
1247
|
-
return html`
|
1248
|
-
<div class="footer">
|
1249
|
-
<div class="controls">
|
1250
|
-
<devtools-control-button
|
1251
|
-
jslog=${VisualLogging.toggle('toggle-recording').track({click: true})}
|
1252
|
-
@click=${this.#dispatchRecordingFinished}
|
1253
|
-
.disabled=${this.#recordingTogglingInProgress}
|
1254
|
-
.shape=${'square'}
|
1255
|
-
.label=${translation}
|
1256
|
-
title=${Models.Tooltip.getTooltipForActions(
|
1257
|
-
translation,
|
1258
|
-
Actions.RecorderActions.START_RECORDING,
|
1259
|
-
)}
|
1260
|
-
>
|
1261
|
-
</devtools-control-button>
|
1262
|
-
</div>
|
1263
|
-
</div>
|
1264
|
-
`;
|
1265
|
-
// clang-format on
|
1266
|
-
}
|
1267
|
-
|
1268
|
-
#render(): void {
|
1269
|
-
const classNames = {
|
1270
|
-
wrapper: true,
|
1271
|
-
'is-recording': this.#isRecording,
|
1272
|
-
'is-playing': this.#replayState.isPlaying,
|
1273
|
-
'was-successful': this.#lastReplayResult === Models.RecordingPlayer.ReplayResult.SUCCESS,
|
1274
|
-
'was-failure': this.#lastReplayResult === Models.RecordingPlayer.ReplayResult.FAILURE,
|
1275
|
-
};
|
1276
|
-
|
1277
|
-
// clang-format off
|
1278
|
-
Lit.render(
|
1279
|
-
html`
|
1280
|
-
<style>${UI.inspectorCommonStyles}</style>
|
1281
|
-
<style>${recordingViewStyles}</style>
|
1282
|
-
<style>${Input.textInputStyles}</style>
|
1283
|
-
<div @click=${this.#onWrapperClick} class=${Lit.Directives.classMap(
|
1284
|
-
classNames,
|
1285
|
-
)}>
|
1286
|
-
<div class="main">
|
1287
|
-
${this.#renderHeader()}
|
1288
|
-
${
|
1289
|
-
this.#extensionDescriptor
|
1290
|
-
? html`
|
1291
|
-
<devtools-recorder-extension-view .descriptor=${
|
1292
|
-
this.#extensionDescriptor
|
1293
|
-
}>
|
1294
|
-
</devtools-recorder-extension-view>
|
1295
|
-
`
|
1296
|
-
: html`
|
1297
|
-
${this.#renderSettings()}
|
1298
|
-
${this.#renderTimelineArea()}
|
1299
|
-
`
|
1300
|
-
}
|
1301
|
-
${this.#renderFooter()}
|
1302
|
-
</div>
|
1303
|
-
</div>
|
1304
|
-
`,
|
1305
|
-
this.#shadow,
|
1306
|
-
{ host: this },
|
1307
|
-
);
|
1308
|
-
// clang-format on
|
1309
|
-
}
|
1310
1298
|
}
|
1311
|
-
|
1312
|
-
customElements.define(
|
1313
|
-
'devtools-recording-view',
|
1314
|
-
RecordingView,
|
1315
|
-
);
|