@mcp-b/chrome-devtools-mcp 2.0.2 → 2.0.5
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/README.md +120 -10
- package/build/src/McpContext.js +69 -5
- package/build/src/browser.js +157 -51
- package/build/src/cli.js +11 -5
- package/build/src/formatters/IssueFormatter.js +190 -0
- package/build/src/main.js +83 -2
- package/build/src/telemetry/clearcut-logger.js +102 -0
- package/build/src/telemetry/flag-utils.js +45 -0
- package/build/src/telemetry/metric-utils.js +14 -0
- package/build/src/telemetry/persistence.js +53 -0
- package/build/src/telemetry/types.js +33 -0
- package/build/src/telemetry/watchdog/clearcut-sender.js +201 -0
- package/build/src/telemetry/watchdog/main.js +127 -0
- package/build/src/telemetry/watchdog-client.js +60 -0
- package/build/src/third_party/devtools-formatter-worker.js +7 -0
- package/build/src/third_party/index.js +1 -1
- package/build/src/tools/browser.js +92 -0
- package/build/src/tools/extension.js +31 -0
- package/build/src/tools/extensions.js +79 -0
- package/build/src/tools/input.js +6 -1
- package/build/src/tools/pages.js +7 -1
- package/build/src/tools/script.js +31 -4
- package/build/src/tools/tools.js +4 -0
- package/build/src/transports/CDPClientTransport.js +184 -0
- package/build/src/transports/WebMCPBridgeScript.js +11 -2
- package/build/src/utils/ExtensionRegistry.js +35 -0
- package/build/src/utils/string.js +36 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Base64.js +20 -2
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Debouncer.js +8 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Gzip.js +11 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Object.js +6 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +3 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/ResourceType.js +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Revealer.js +0 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/common/Settings.js +18 -8
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/AidaClient.js +24 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +11 -3
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +27 -20
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/collect-ui-strings.js +7 -8
- package/build/vendor/chrome-devtools-frontend/front_end/core/i18n/generate-locales-js.js +4 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +10 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +63 -12
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +1 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +4 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/ExperimentNames.js +30 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/root/root.js +2 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +0 -4
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +69 -9
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +6 -6
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +28 -13
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +0 -2
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +170 -13
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +5 -39
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +8 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +20 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +12 -21
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +19 -6
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +5 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +8 -5
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +15 -10
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +13 -27
- package/build/vendor/chrome-devtools-frontend/front_end/core/sdk/Target.js +3 -1
- package/build/vendor/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1 -7
- package/build/vendor/chrome-devtools-frontend/front_end/generated/Deprecation.js +1 -16
- package/build/vendor/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +82 -22
- package/build/vendor/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +265 -123
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +2 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +10 -16
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +97 -26
- package/build/vendor/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +35 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationRepository.js +163 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/AnnotationType.js +10 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/annotations/annotations.js +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +5 -3
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +29 -58
- package/build/vendor/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +7 -45
- package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +14 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +8 -5
- package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/Prototypes.js +33 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/greendev/greendev.js +4 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/ContrastCheckTrigger.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CookieIssue.js +0 -21
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/CorsIssue.js +1 -38
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssueAggregator.js +8 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManager.js +6 -12
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/PermissionElementIssue.js +243 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +7 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementGeolocationDeprecated.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementLowContrast.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementRegistrationFailed.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +5 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +7 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/issues_manager.js +2 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +0 -8
- package/build/vendor/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +4 -8
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +30 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +70 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +82 -30
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +10 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +0 -3
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Processor.js +18 -19
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/Styles.js +12 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/Initiators.js +46 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +4 -3
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +1 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +6 -0
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +10 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +44 -27
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +9 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +1 -6
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +2 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +2 -4
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +3 -2
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +33 -11
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +51 -18
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +1 -1
- package/build/vendor/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/scopes.js +4 -0
- package/build/vendor/chrome-devtools-frontend/mcp/HostBindings.js +4 -0
- package/build/vendor/chrome-devtools-frontend/mcp/mcp.js +4 -0
- package/package.json +28 -21
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteInvalidSameParty.md +0 -8
- package/build/vendor/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteSamePartyCrossPartyContextSet.md +0 -10
|
@@ -159,33 +159,15 @@ export class UserMetrics {
|
|
|
159
159
|
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.SyncSetting" /* EnumeratedHistogram.SyncSetting */, settingValue, 5 /* SyncSetting.MAX_VALUE */);
|
|
160
160
|
});
|
|
161
161
|
}
|
|
162
|
-
recordingAssertion(value) {
|
|
163
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingAssertion" /* EnumeratedHistogram.RecordingAssertion */, value, 4 /* RecordingAssertion.MAX_VALUE */);
|
|
164
|
-
}
|
|
165
162
|
recordingToggled(value) {
|
|
166
163
|
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingToggled" /* EnumeratedHistogram.RecordingToggled */, value, 3 /* RecordingToggled.MAX_VALUE */);
|
|
167
164
|
}
|
|
168
165
|
recordingReplayFinished(value) {
|
|
169
166
|
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingReplayFinished" /* EnumeratedHistogram.RecordingReplayFinished */, value, 5 /* RecordingReplayFinished.MAX_VALUE */);
|
|
170
167
|
}
|
|
171
|
-
recordingReplaySpeed(value) {
|
|
172
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingReplaySpeed" /* EnumeratedHistogram.RecordingReplaySpeed */, value, 5 /* RecordingReplaySpeed.MAX_VALUE */);
|
|
173
|
-
}
|
|
174
168
|
recordingReplayStarted(value) {
|
|
175
169
|
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingReplayStarted" /* EnumeratedHistogram.RecordingReplayStarted */, value, 4 /* RecordingReplayStarted.MAX_VALUE */);
|
|
176
170
|
}
|
|
177
|
-
recordingEdited(value) {
|
|
178
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingEdited" /* EnumeratedHistogram.RecordingEdited */, value, 11 /* RecordingEdited.MAX_VALUE */);
|
|
179
|
-
}
|
|
180
|
-
recordingExported(value) {
|
|
181
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingExported" /* EnumeratedHistogram.RecordingExported */, value, 6 /* RecordingExported.MAX_VALUE */);
|
|
182
|
-
}
|
|
183
|
-
recordingCodeToggled(value) {
|
|
184
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingCodeToggled" /* EnumeratedHistogram.RecordingCodeToggled */, value, 3 /* RecordingCodeToggled.MAX_VALUE */);
|
|
185
|
-
}
|
|
186
|
-
recordingCopiedToClipboard(value) {
|
|
187
|
-
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.RecordingCopiedToClipboard" /* EnumeratedHistogram.RecordingCopiedToClipboard */, value, 9 /* RecordingCopiedToClipboard.MAX_VALUE */);
|
|
188
|
-
}
|
|
189
171
|
lighthouseModeRun(type) {
|
|
190
172
|
InspectorFrontendHostInstance.recordEnumeratedHistogram("DevTools.LighthouseModeRun" /* EnumeratedHistogram.LighthouseModeRun */, type, 4 /* LighthouseModeRun.MAX_VALUE */);
|
|
191
173
|
}
|
|
@@ -222,9 +204,30 @@ export class UserMetrics {
|
|
|
222
204
|
consoleInsightTeaserGenerated(timeInMilliseconds) {
|
|
223
205
|
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.TeaserGenerationTime', timeInMilliseconds);
|
|
224
206
|
}
|
|
207
|
+
consoleInsightTeaserGeneratedMedium(timeInMilliseconds) {
|
|
208
|
+
InspectorFrontendHostInstance.recordPerformanceHistogramMedium('DevTools.Insights.TeaserGenerationTimeMedium', timeInMilliseconds);
|
|
209
|
+
}
|
|
225
210
|
consoleInsightTeaserFirstChunkGenerated(timeInMilliseconds) {
|
|
226
211
|
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.TeaserFirstChunkGenerationTime', timeInMilliseconds);
|
|
227
212
|
}
|
|
213
|
+
consoleInsightTeaserFirstChunkGeneratedMedium(timeInMilliseconds) {
|
|
214
|
+
InspectorFrontendHostInstance.recordPerformanceHistogramMedium('DevTools.Insights.TeaserFirstChunkGenerationTimeMedium', timeInMilliseconds);
|
|
215
|
+
}
|
|
216
|
+
consoleInsightTeaserChunkToEndMedium(timeInMilliseconds) {
|
|
217
|
+
InspectorFrontendHostInstance.recordPerformanceHistogramMedium('DevTools.Insights.TeaserChunkToEndMedium', timeInMilliseconds);
|
|
218
|
+
}
|
|
219
|
+
consoleInsightTeaserAbortedAfterFirstCharacter(timeInMilliseconds) {
|
|
220
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.TeaserAfterFirstCharacterAbortionTime', timeInMilliseconds);
|
|
221
|
+
}
|
|
222
|
+
consoleInsightTeaserAbortedBeforeFirstCharacter(timeInMilliseconds) {
|
|
223
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.TeaserBeforeFirstCharacterAbortionTime', timeInMilliseconds);
|
|
224
|
+
}
|
|
225
|
+
consoleInsightLongTeaserGenerated(timeInMilliseconds) {
|
|
226
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.LongTeaserGenerationTime', timeInMilliseconds);
|
|
227
|
+
}
|
|
228
|
+
consoleInsightShortTeaserGenerated(timeInMilliseconds) {
|
|
229
|
+
InspectorFrontendHostInstance.recordPerformanceHistogram('DevTools.Insights.ShortTeaserGenerationTime', timeInMilliseconds);
|
|
230
|
+
}
|
|
228
231
|
}
|
|
229
232
|
/**
|
|
230
233
|
* The numeric enum values are not necessarily continuous! It is possible that
|
|
@@ -436,7 +439,11 @@ export var Action;
|
|
|
436
439
|
Action[Action["InsightTeaserGenerationErrored"] = 194] = "InsightTeaserGenerationErrored";
|
|
437
440
|
Action[Action["AiCodeGenerationSuggestionDisplayed"] = 195] = "AiCodeGenerationSuggestionDisplayed";
|
|
438
441
|
Action[Action["AiCodeGenerationSuggestionAccepted"] = 196] = "AiCodeGenerationSuggestionAccepted";
|
|
439
|
-
Action[Action["
|
|
442
|
+
Action[Action["InsightTeaserModelDownloadStarted"] = 197] = "InsightTeaserModelDownloadStarted";
|
|
443
|
+
Action[Action["InsightTeaserModelDownloadCompleted"] = 198] = "InsightTeaserModelDownloadCompleted";
|
|
444
|
+
Action[Action["AiCodeGenerationError"] = 199] = "AiCodeGenerationError";
|
|
445
|
+
Action[Action["AiCodeGenerationRequestTriggered"] = 200] = "AiCodeGenerationRequestTriggered";
|
|
446
|
+
Action[Action["MAX_VALUE"] = 201] = "MAX_VALUE";
|
|
440
447
|
/* eslint-enable @typescript-eslint/naming-convention */
|
|
441
448
|
})(Action || (Action = {}));
|
|
442
449
|
export var PanelCodes;
|
|
@@ -698,7 +705,7 @@ export var DevtoolsExperiments;
|
|
|
698
705
|
DevtoolsExperiments[DevtoolsExperiments["live-heap-profile"] = 11] = "live-heap-profile";
|
|
699
706
|
DevtoolsExperiments[DevtoolsExperiments["protocol-monitor"] = 13] = "protocol-monitor";
|
|
700
707
|
DevtoolsExperiments[DevtoolsExperiments["sampling-heap-profiler-timeline"] = 17] = "sampling-heap-profiler-timeline";
|
|
701
|
-
DevtoolsExperiments[DevtoolsExperiments["show-option-
|
|
708
|
+
DevtoolsExperiments[DevtoolsExperiments["show-option-to-expose-internals-in-heap-snapshot"] = 18] = "show-option-to-expose-internals-in-heap-snapshot";
|
|
702
709
|
DevtoolsExperiments[DevtoolsExperiments["timeline-invalidation-tracking"] = 26] = "timeline-invalidation-tracking";
|
|
703
710
|
DevtoolsExperiments[DevtoolsExperiments["timeline-show-all-events"] = 27] = "timeline-show-all-events";
|
|
704
711
|
DevtoolsExperiments[DevtoolsExperiments["timeline-v8-runtime-call-stats"] = 28] = "timeline-v8-runtime-call-stats";
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2022 The Chromium Authors
|
|
3
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
4
3
|
// found in the LICENSE file.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
4
|
+
import glob from 'glob';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import yargs from 'yargs';
|
|
7
|
+
import { hideBin } from 'yargs/helpers';
|
|
8
|
+
import { writeIfChanged } from '../../../scripts/build/ninja/write-if-changed.js';
|
|
9
|
+
import { bakePlaceholders } from '../../../third_party/i18n/bake-ctc-to-lhl.js';
|
|
10
|
+
import { collectAllStringsInDir, createPsuedoLocaleStrings, IGNORED_PATH_COMPONENTS, } from '../../../third_party/i18n/collect-strings.js';
|
|
12
11
|
/** @typedef {import('../../../third_party/i18n/bake-ctc-to-lhl.js').CtcMessage} CtcMessage */
|
|
13
12
|
const yargsObject = yargs(hideBin(process.argv))
|
|
14
13
|
.option('input-directories', {
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Copyright 2022 The Chromium Authors
|
|
3
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
4
3
|
// found in the LICENSE file.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import yargs from 'yargs';
|
|
6
|
+
import { hideBin } from 'yargs/helpers';
|
|
7
|
+
import { writeIfChanged } from '../../../scripts/build/ninja/write-if-changed.js';
|
|
9
8
|
const yargsObject = yargs(hideBin(process.argv))
|
|
10
9
|
.option('target-gen-dir', {
|
|
11
10
|
type: 'string',
|
|
@@ -197,3 +197,13 @@ export function nearestIndexFromEnd(arr, predicate) {
|
|
|
197
197
|
export function arrayDoesNotContainNullOrUndefined(arr) {
|
|
198
198
|
return !arr.includes(null) && !arr.includes(undefined);
|
|
199
199
|
}
|
|
200
|
+
export function assertArrayIsSorted(arr, compareFn) {
|
|
201
|
+
const comparator = compareFn || DEFAULT_COMPARATOR;
|
|
202
|
+
for (let i = 0; i < arr.length - 1; i++) {
|
|
203
|
+
const current = arr[i];
|
|
204
|
+
const next = arr[i + 1];
|
|
205
|
+
if (comparator(current, next) > 0) {
|
|
206
|
+
throw new Error(`Array is not sorted at index ${i}: ${JSON.stringify(current)} > ${JSON.stringify(next)}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -325,26 +325,77 @@ export const compare = (a, b) => {
|
|
|
325
325
|
}
|
|
326
326
|
return 0;
|
|
327
327
|
};
|
|
328
|
+
/** Returns a string that has no more than maxLength characters. Actual graphemes are used, not bytes. */
|
|
328
329
|
export const trimMiddle = (str, maxLength) => {
|
|
330
|
+
// Early return for the case where there are fewer bytes than the character limit.
|
|
329
331
|
if (str.length <= maxLength) {
|
|
330
|
-
return
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
332
|
+
return str;
|
|
333
|
+
}
|
|
334
|
+
const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
335
|
+
// If the max length is so small it can't fit the ellipsis, just return the ellipsis.
|
|
336
|
+
const ellipsis = '…';
|
|
337
|
+
const ellipsisLength = 1;
|
|
338
|
+
if (maxLength <= ellipsisLength) {
|
|
339
|
+
return ellipsis;
|
|
340
|
+
}
|
|
341
|
+
// Calculate how many graphemes to keep on each side.
|
|
342
|
+
const freeSpace = maxLength - ellipsisLength;
|
|
343
|
+
const leftCount = Math.ceil(freeSpace / 2);
|
|
344
|
+
const rightCount = Math.floor(freeSpace / 2);
|
|
345
|
+
let currentGraphemeCount = 0;
|
|
346
|
+
let leftEndIndex = 0;
|
|
347
|
+
// Sliding Window Buffer
|
|
348
|
+
// We need to know where the "Right Half" starts. Since we can't iterate backwards,
|
|
349
|
+
// we keep track of the start index of the last N graphemes we've seen.
|
|
350
|
+
const rightIndexBuffer = [];
|
|
351
|
+
// This function would be significantly simpler if we created an array of all the
|
|
352
|
+
// segments upfront, but could result in poor performance for large input strings.
|
|
353
|
+
for (const { segment, index } of segmenter.segment(str)) {
|
|
354
|
+
currentGraphemeCount++;
|
|
355
|
+
// Mark the byte index where the "Left Half" ends
|
|
356
|
+
if (currentGraphemeCount === leftCount) {
|
|
357
|
+
leftEndIndex = index + segment.length;
|
|
358
|
+
}
|
|
359
|
+
// Maintain the buffer for the "Right Half"
|
|
360
|
+
if (rightCount > 0) {
|
|
361
|
+
rightIndexBuffer.push(index);
|
|
362
|
+
if (rightIndexBuffer.length > rightCount) {
|
|
363
|
+
rightIndexBuffer.shift(); // Remove the oldest index to keep buffer size constant.
|
|
364
|
+
}
|
|
365
|
+
}
|
|
337
366
|
}
|
|
338
|
-
|
|
339
|
-
|
|
367
|
+
// If the total grapheme count didn't exceed the limit, return the original string.
|
|
368
|
+
if (currentGraphemeCount <= maxLength) {
|
|
369
|
+
return str;
|
|
340
370
|
}
|
|
341
|
-
|
|
371
|
+
// The first item in our buffer is exactly 'rightCount' graphemes away from the end.
|
|
372
|
+
const rightStartIndex = rightCount > 0 ? rightIndexBuffer[0] : str.length;
|
|
373
|
+
return str.slice(0, leftEndIndex) + ellipsis + str.slice(rightStartIndex);
|
|
342
374
|
};
|
|
375
|
+
/** Returns a string that has no more than maxLength characters. Actual graphemes are used, not bytes. */
|
|
343
376
|
export const trimEndWithMaxLength = (str, maxLength) => {
|
|
377
|
+
// Early return for the case where there are fewer bytes than the character limit.
|
|
344
378
|
if (str.length <= maxLength) {
|
|
345
|
-
return
|
|
379
|
+
return str;
|
|
380
|
+
}
|
|
381
|
+
const ellipsis = '…';
|
|
382
|
+
const ellipsisLength = 1;
|
|
383
|
+
const segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
384
|
+
const iterator = segmenter.segment(str)[Symbol.iterator]();
|
|
385
|
+
let lastSegmentIndex = 0;
|
|
386
|
+
for (let i = 0; i <= maxLength - ellipsisLength; i++) {
|
|
387
|
+
const result = iterator.next();
|
|
388
|
+
if (result.done) {
|
|
389
|
+
return str;
|
|
390
|
+
}
|
|
391
|
+
lastSegmentIndex = result.value.index;
|
|
392
|
+
}
|
|
393
|
+
for (let i = 0; i < ellipsisLength; i++) {
|
|
394
|
+
if (iterator.next().done) {
|
|
395
|
+
return str;
|
|
396
|
+
}
|
|
346
397
|
}
|
|
347
|
-
return str.
|
|
398
|
+
return str.slice(0, lastSegmentIndex) + ellipsis;
|
|
348
399
|
};
|
|
349
400
|
export const escapeForRegExp = (str) => {
|
|
350
401
|
return escapeCharacters(str, SPECIAL_REGEX_CHARACTERS);
|
package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js
CHANGED
|
@@ -14,4 +14,5 @@ export var CDPErrorStatus;
|
|
|
14
14
|
CDPErrorStatus[CDPErrorStatus["SERVER_ERROR"] = -32000] = "SERVER_ERROR";
|
|
15
15
|
CDPErrorStatus[CDPErrorStatus["SESSION_NOT_FOUND"] = -32001] = "SESSION_NOT_FOUND";
|
|
16
16
|
CDPErrorStatus[CDPErrorStatus["DEVTOOLS_STUB_ERROR"] = -32015] = "DEVTOOLS_STUB_ERROR";
|
|
17
|
+
CDPErrorStatus[CDPErrorStatus["DEVTOOLS_REHYDRATION_ERROR"] = -32016] = "DEVTOOLS_REHYDRATION_ERROR";
|
|
17
18
|
})(CDPErrorStatus || (CDPErrorStatus = {}));
|
package/build/vendor/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js
CHANGED
|
@@ -444,6 +444,7 @@ export class TargetBase {
|
|
|
444
444
|
}
|
|
445
445
|
/** These are not logged as console.error */
|
|
446
446
|
const IGNORED_ERRORS = new Set([
|
|
447
|
+
CDPErrorStatus.DEVTOOLS_REHYDRATION_ERROR,
|
|
447
448
|
CDPErrorStatus.DEVTOOLS_STUB_ERROR,
|
|
448
449
|
CDPErrorStatus.SERVER_ERROR,
|
|
449
450
|
CDPErrorStatus.SESSION_NOT_FOUND,
|
|
@@ -491,7 +492,9 @@ class AgentPrototype {
|
|
|
491
492
|
if ('result' in response) {
|
|
492
493
|
return { ...response.result, getError: () => undefined };
|
|
493
494
|
}
|
|
494
|
-
return {
|
|
495
|
+
return {
|
|
496
|
+
getError: () => `Command ${method} returned neither result nor an error, params: ${JSON.stringify(request, undefined, 2)}`,
|
|
497
|
+
};
|
|
495
498
|
});
|
|
496
499
|
}
|
|
497
500
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Copyright 2026 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
export var ExperimentName;
|
|
5
|
+
(function (ExperimentName) {
|
|
6
|
+
ExperimentName["ALL"] = "*";
|
|
7
|
+
ExperimentName["CAPTURE_NODE_CREATION_STACKS"] = "capture-node-creation-stacks";
|
|
8
|
+
ExperimentName["LIVE_HEAP_PROFILE"] = "live-heap-profile";
|
|
9
|
+
ExperimentName["PROTOCOL_MONITOR"] = "protocol-monitor";
|
|
10
|
+
ExperimentName["SAMPLING_HEAP_PROFILER_TIMELINE"] = "sampling-heap-profiler-timeline";
|
|
11
|
+
ExperimentName["SHOW_OPTION_TO_EXPOSE_INTERNALS_IN_HEAP_SNAPSHOT"] = "show-option-to-expose-internals-in-heap-snapshot";
|
|
12
|
+
ExperimentName["TIMELINE_INVALIDATION_TRACKING"] = "timeline-invalidation-tracking";
|
|
13
|
+
ExperimentName["TIMELINE_SHOW_ALL_EVENTS"] = "timeline-show-all-events";
|
|
14
|
+
ExperimentName["TIMELINE_V8_RUNTIME_CALL_STATS"] = "timeline-v8-runtime-call-stats";
|
|
15
|
+
ExperimentName["APCA"] = "apca";
|
|
16
|
+
ExperimentName["FONT_EDITOR"] = "font-editor";
|
|
17
|
+
ExperimentName["FULL_ACCESSIBILITY_TREE"] = "full-accessibility-tree";
|
|
18
|
+
ExperimentName["CONTRAST_ISSUES"] = "contrast-issues";
|
|
19
|
+
ExperimentName["EXPERIMENTAL_COOKIE_FEATURES"] = "experimental-cookie-features";
|
|
20
|
+
ExperimentName["INSTRUMENTATION_BREAKPOINTS"] = "instrumentation-breakpoints";
|
|
21
|
+
ExperimentName["AUTHORED_DEPLOYED_GROUPING"] = "authored-deployed-grouping";
|
|
22
|
+
ExperimentName["JUST_MY_CODE"] = "just-my-code";
|
|
23
|
+
ExperimentName["USE_SOURCE_MAP_SCOPES"] = "use-source-map-scopes";
|
|
24
|
+
ExperimentName["TIMELINE_SHOW_POST_MESSAGE_EVENTS"] = "timeline-show-postmessage-events";
|
|
25
|
+
ExperimentName["TIMELINE_DEBUG_MODE"] = "timeline-debug-mode";
|
|
26
|
+
// Adding or removing an entry from this enum?
|
|
27
|
+
// You will need to update:
|
|
28
|
+
// 1. DevToolsExperiments enum in host/UserMetrics.ts
|
|
29
|
+
// 2. Maybe REGISTERED_EXPERIMENTS in EnvironmentHelpers.ts (to create this experiment in the test env)
|
|
30
|
+
})(ExperimentName || (ExperimentName = {}));
|
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
// Use of this source code is governed by a BSD-style license that can be
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
import * as DevToolsContext from './DevToolsContext.js';
|
|
5
|
+
import * as ExperimentNames from './ExperimentNames.js';
|
|
5
6
|
import * as Runtime from './Runtime.js';
|
|
6
|
-
export { DevToolsContext, Runtime, };
|
|
7
|
+
export { DevToolsContext, ExperimentNames, Runtime, };
|
|
@@ -362,10 +362,6 @@ export class AnimationModel extends SDKModel {
|
|
|
362
362
|
this.playbackRate = playbackRate;
|
|
363
363
|
void this.agent.invoke_setPlaybackRate({ playbackRate });
|
|
364
364
|
}
|
|
365
|
-
async releaseAllAnimations() {
|
|
366
|
-
const animationIds = [...this.animationGroups.values()].flatMap(animationGroup => animationGroup.animations().map(animation => animation.id()));
|
|
367
|
-
await this.agent.invoke_releaseAnimations({ animations: animationIds });
|
|
368
|
-
}
|
|
369
365
|
releaseAnimations(animations) {
|
|
370
366
|
void this.agent.invoke_releaseAnimations({ animations });
|
|
371
367
|
}
|
|
@@ -474,10 +474,10 @@ export class CSSMatchedStyles {
|
|
|
474
474
|
// Now that we've built the arrays of NodeCascades for each pseudo type, convert them into
|
|
475
475
|
// DOMInheritanceCascades.
|
|
476
476
|
for (const [pseudoType, nodeCascade] of pseudoCascades.entries()) {
|
|
477
|
-
pseudoInheritanceCascades.set(pseudoType, new DOMInheritanceCascade(this, nodeCascade, this.#registeredProperties));
|
|
477
|
+
pseudoInheritanceCascades.set(pseudoType, new DOMInheritanceCascade(this, nodeCascade, this.#registeredProperties, this.#mainDOMCascade));
|
|
478
478
|
}
|
|
479
479
|
for (const [highlightName, nodeCascade] of customHighlightPseudoCascades.entries()) {
|
|
480
|
-
customHighlightPseudoInheritanceCascades.set(highlightName, new DOMInheritanceCascade(this, nodeCascade, this.#registeredProperties));
|
|
480
|
+
customHighlightPseudoInheritanceCascades.set(highlightName, new DOMInheritanceCascade(this, nodeCascade, this.#registeredProperties, this.#mainDOMCascade));
|
|
481
481
|
}
|
|
482
482
|
return [pseudoInheritanceCascades, customHighlightPseudoInheritanceCascades];
|
|
483
483
|
}
|
|
@@ -685,6 +685,10 @@ export class CSSMatchedStyles {
|
|
|
685
685
|
const domCascade = this.#styleToDOMCascade.get(property.ownerStyle);
|
|
686
686
|
return domCascade ? domCascade.propertyState(property) : null;
|
|
687
687
|
}
|
|
688
|
+
isPropertyOverriddenByAnimation(property) {
|
|
689
|
+
const domCascade = this.#styleToDOMCascade.get(property.ownerStyle);
|
|
690
|
+
return domCascade?.isPropertyOverriddenByAnimation(property) ?? false;
|
|
691
|
+
}
|
|
688
692
|
resetActiveProperties() {
|
|
689
693
|
Platform.assertNotNullOrUndefined(this.#mainDOMCascade);
|
|
690
694
|
Platform.assertNotNullOrUndefined(this.#pseudoDOMCascades);
|
|
@@ -730,22 +734,24 @@ export class CSSMatchedStyles {
|
|
|
730
734
|
}
|
|
731
735
|
}
|
|
732
736
|
class NodeCascade {
|
|
737
|
+
isHighlightPseudoCascade;
|
|
733
738
|
#matchedStyles;
|
|
734
739
|
styles;
|
|
735
740
|
#isInherited;
|
|
736
|
-
#isHighlightPseudoCascade;
|
|
737
741
|
propertiesState = new Map();
|
|
742
|
+
propertiesOverriddenByAnimation = new Set();
|
|
738
743
|
activeProperties = new Map();
|
|
739
744
|
#node;
|
|
740
745
|
constructor(matchedStyles, styles, node, isInherited, isHighlightPseudoCascade = false) {
|
|
746
|
+
this.isHighlightPseudoCascade = isHighlightPseudoCascade;
|
|
741
747
|
this.#matchedStyles = matchedStyles;
|
|
742
748
|
this.styles = styles;
|
|
743
749
|
this.#isInherited = isInherited;
|
|
744
|
-
this.#isHighlightPseudoCascade = isHighlightPseudoCascade;
|
|
745
750
|
this.#node = node;
|
|
746
751
|
}
|
|
747
752
|
computeActiveProperties() {
|
|
748
753
|
this.propertiesState.clear();
|
|
754
|
+
this.propertiesOverriddenByAnimation.clear();
|
|
749
755
|
this.activeProperties.clear();
|
|
750
756
|
for (let i = this.styles.length - 1; i >= 0; i--) {
|
|
751
757
|
const style = this.styles[i];
|
|
@@ -760,9 +766,17 @@ class NodeCascade {
|
|
|
760
766
|
for (const property of style.allProperties()) {
|
|
761
767
|
// Do not pick non-inherited properties from inherited styles.
|
|
762
768
|
const metadata = cssMetadata();
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
769
|
+
if (this.#isInherited) {
|
|
770
|
+
if (this.isHighlightPseudoCascade) {
|
|
771
|
+
// All properties are inherited for highlight pseudos, but custom
|
|
772
|
+
// variables do not come from the inherited pseudo elements.
|
|
773
|
+
if (property.name.startsWith('--')) {
|
|
774
|
+
continue;
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
else if (!metadata.isPropertyInherited(property.name)) {
|
|
778
|
+
continue;
|
|
779
|
+
}
|
|
766
780
|
}
|
|
767
781
|
// When a property does not have a range in an otherwise ranged CSSStyleDeclaration,
|
|
768
782
|
// we consider it as a non-leading property (see computeLeadingProperties()), and most
|
|
@@ -833,6 +847,10 @@ class NodeCascade {
|
|
|
833
847
|
}
|
|
834
848
|
if (activeProperty) {
|
|
835
849
|
this.propertiesState.set(activeProperty, "Overloaded" /* PropertyState.OVERLOADED */);
|
|
850
|
+
if (propertyWithHigherSpecificity.ownerStyle.type === Type.Animation ||
|
|
851
|
+
propertyWithHigherSpecificity.ownerStyle.type === Type.Transition) {
|
|
852
|
+
this.propertiesOverriddenByAnimation.add(activeProperty);
|
|
853
|
+
}
|
|
836
854
|
}
|
|
837
855
|
this.propertiesState.set(propertyWithHigherSpecificity, "Active" /* PropertyState.ACTIVE */);
|
|
838
856
|
this.activeProperties.set(canonicalName, propertyWithHigherSpecificity);
|
|
@@ -913,6 +931,7 @@ function* forEach(array, startAfter) {
|
|
|
913
931
|
}
|
|
914
932
|
class DOMInheritanceCascade {
|
|
915
933
|
#propertiesState = new Map();
|
|
934
|
+
#propertiesOverriddenByAnimation = new Set();
|
|
916
935
|
#availableCSSVariables = new Map();
|
|
917
936
|
#computedCSSVariables = new Map();
|
|
918
937
|
#styleToNodeCascade = new Map();
|
|
@@ -920,13 +939,24 @@ class DOMInheritanceCascade {
|
|
|
920
939
|
#nodeCascades;
|
|
921
940
|
#registeredProperties;
|
|
922
941
|
#matchedStyles;
|
|
923
|
-
|
|
942
|
+
#fallbackCascade = null;
|
|
943
|
+
#styles = [];
|
|
944
|
+
constructor(matchedStyles, nodeCascades, registeredProperties, fallbackCascade = null) {
|
|
924
945
|
this.#nodeCascades = nodeCascades;
|
|
925
946
|
this.#matchedStyles = matchedStyles;
|
|
926
947
|
this.#registeredProperties = registeredProperties;
|
|
948
|
+
this.#fallbackCascade = fallbackCascade;
|
|
927
949
|
for (const nodeCascade of nodeCascades) {
|
|
928
950
|
for (const style of nodeCascade.styles) {
|
|
929
951
|
this.#styleToNodeCascade.set(style, nodeCascade);
|
|
952
|
+
this.#styles.push(style);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
if (fallbackCascade) {
|
|
956
|
+
for (const [style, nodeCascade] of fallbackCascade.#styleToNodeCascade) {
|
|
957
|
+
if (!this.#styles.includes(style)) {
|
|
958
|
+
this.#styleToNodeCascade.set(style, nodeCascade);
|
|
959
|
+
}
|
|
930
960
|
}
|
|
931
961
|
}
|
|
932
962
|
}
|
|
@@ -981,6 +1011,9 @@ class DOMInheritanceCascade {
|
|
|
981
1011
|
}
|
|
982
1012
|
}
|
|
983
1013
|
}
|
|
1014
|
+
if (this.#fallbackCascade && (!nodeCascade.isHighlightPseudoCascade || property.name.startsWith('--'))) {
|
|
1015
|
+
return this.#fallbackCascade.resolveProperty(property.name, property.ownerStyle);
|
|
1016
|
+
}
|
|
984
1017
|
return null;
|
|
985
1018
|
}
|
|
986
1019
|
#findPropertyInParentCascadeIfInherited(property) {
|
|
@@ -1224,15 +1257,20 @@ class DOMInheritanceCascade {
|
|
|
1224
1257
|
}
|
|
1225
1258
|
}
|
|
1226
1259
|
styles() {
|
|
1227
|
-
return
|
|
1260
|
+
return this.#styles;
|
|
1228
1261
|
}
|
|
1229
1262
|
propertyState(property) {
|
|
1230
1263
|
this.ensureInitialized();
|
|
1231
1264
|
return this.#propertiesState.get(property) || null;
|
|
1232
1265
|
}
|
|
1266
|
+
isPropertyOverriddenByAnimation(property) {
|
|
1267
|
+
this.ensureInitialized();
|
|
1268
|
+
return this.#propertiesOverriddenByAnimation.has(property);
|
|
1269
|
+
}
|
|
1233
1270
|
reset() {
|
|
1234
1271
|
this.#initialized = false;
|
|
1235
1272
|
this.#propertiesState.clear();
|
|
1273
|
+
this.#propertiesOverriddenByAnimation.clear();
|
|
1236
1274
|
this.#availableCSSVariables.clear();
|
|
1237
1275
|
this.#computedCSSVariables.clear();
|
|
1238
1276
|
}
|
|
@@ -1247,11 +1285,20 @@ class DOMInheritanceCascade {
|
|
|
1247
1285
|
for (const [property, state] of nodeCascade.propertiesState) {
|
|
1248
1286
|
if (state === "Overloaded" /* PropertyState.OVERLOADED */) {
|
|
1249
1287
|
this.#propertiesState.set(property, "Overloaded" /* PropertyState.OVERLOADED */);
|
|
1288
|
+
if (nodeCascade.propertiesOverriddenByAnimation.has(property)) {
|
|
1289
|
+
this.#propertiesOverriddenByAnimation.add(property);
|
|
1290
|
+
}
|
|
1250
1291
|
continue;
|
|
1251
1292
|
}
|
|
1252
1293
|
const canonicalName = cssMetadata().canonicalPropertyName(property.name);
|
|
1253
1294
|
if (activeProperties.has(canonicalName)) {
|
|
1254
1295
|
this.#propertiesState.set(property, "Overloaded" /* PropertyState.OVERLOADED */);
|
|
1296
|
+
const activeProperty = activeProperties.get(canonicalName);
|
|
1297
|
+
if (activeProperty &&
|
|
1298
|
+
(activeProperty.ownerStyle.type === Type.Animation ||
|
|
1299
|
+
activeProperty.ownerStyle.type === Type.Transition)) {
|
|
1300
|
+
this.#propertiesOverriddenByAnimation.add(property);
|
|
1301
|
+
}
|
|
1255
1302
|
continue;
|
|
1256
1303
|
}
|
|
1257
1304
|
activeProperties.set(canonicalName, property);
|
|
@@ -1289,6 +1336,19 @@ class DOMInheritanceCascade {
|
|
|
1289
1336
|
const initialValue = rule.initialValue();
|
|
1290
1337
|
accumulatedCSSVariables.set(rule.propertyName(), initialValue !== null ? { value: initialValue, declaration: new CSSValueSource(rule) } : null);
|
|
1291
1338
|
}
|
|
1339
|
+
if (this.#fallbackCascade) {
|
|
1340
|
+
this.#fallbackCascade.ensureInitialized();
|
|
1341
|
+
for (const [cascade, available] of this.#fallbackCascade.#availableCSSVariables) {
|
|
1342
|
+
this.#availableCSSVariables.set(cascade, available);
|
|
1343
|
+
}
|
|
1344
|
+
for (const [cascade, computed] of this.#fallbackCascade.#computedCSSVariables) {
|
|
1345
|
+
this.#computedCSSVariables.set(cascade, computed);
|
|
1346
|
+
}
|
|
1347
|
+
for (const [key, value] of this.#fallbackCascade.#availableCSSVariables.get(this.#fallbackCascade.#nodeCascades[0]) ??
|
|
1348
|
+
[]) {
|
|
1349
|
+
accumulatedCSSVariables.set(key, value);
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1292
1352
|
for (let i = this.#nodeCascades.length - 1; i >= 0; --i) {
|
|
1293
1353
|
const nodeCascade = this.#nodeCascades[i];
|
|
1294
1354
|
const variableNames = [];
|
|
@@ -526,7 +526,7 @@ const extraPropertyValues = new Map([
|
|
|
526
526
|
['background-repeat', new Set(['repeat', 'repeat-x', 'repeat-y', 'no-repeat', 'space', 'round'])],
|
|
527
527
|
['content', new Set(['normal', 'close-quote', 'no-close-quote', 'no-open-quote', 'open-quote'])],
|
|
528
528
|
['baseline-shift', new Set(['baseline'])],
|
|
529
|
-
['max-height', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content'])],
|
|
529
|
+
['max-height', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content', 'stretch'])],
|
|
530
530
|
['color', new Set(['black'])],
|
|
531
531
|
['background-color', new Set(['white'])],
|
|
532
532
|
['box-shadow', new Set(['inset'])],
|
|
@@ -600,7 +600,7 @@ const extraPropertyValues = new Map([
|
|
|
600
600
|
]),
|
|
601
601
|
],
|
|
602
602
|
['zoom', new Set(['normal'])],
|
|
603
|
-
['max-width', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content'])],
|
|
603
|
+
['max-width', new Set(['min-content', 'max-content', '-webkit-fill-available', 'fit-content', 'stretch'])],
|
|
604
604
|
['-webkit-font-smoothing', new Set(['antialiased', 'subpixel-antialiased'])],
|
|
605
605
|
[
|
|
606
606
|
'border',
|
|
@@ -991,7 +991,7 @@ const extraPropertyValues = new Map([
|
|
|
991
991
|
]),
|
|
992
992
|
],
|
|
993
993
|
['flex-flow', new Set(['nowrap', 'row', 'row-reverse', 'column', 'column-reverse', 'wrap', 'wrap-reverse'])],
|
|
994
|
-
['height', new Set(['-webkit-fill-available'])],
|
|
994
|
+
['height', new Set(['-webkit-fill-available', 'stretch'])],
|
|
995
995
|
['inline-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
|
|
996
996
|
[
|
|
997
997
|
'list-style',
|
|
@@ -1058,9 +1058,9 @@ const extraPropertyValues = new Map([
|
|
|
1058
1058
|
['max-block-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
|
|
1059
1059
|
['max-inline-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
|
|
1060
1060
|
['min-block-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
|
|
1061
|
-
['min-height', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
|
|
1061
|
+
['min-height', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content', 'stretch'])],
|
|
1062
1062
|
['min-inline-size', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
|
|
1063
|
-
['min-width', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content'])],
|
|
1063
|
+
['min-width', new Set(['-webkit-fill-available', 'min-content', 'max-content', 'fit-content', 'stretch'])],
|
|
1064
1064
|
['object-position', new Set(['top', 'bottom', 'left', 'right', 'center'])],
|
|
1065
1065
|
['shape-outside', new Set(['border-box', 'content-box', 'padding-box', 'margin-box'])],
|
|
1066
1066
|
[
|
|
@@ -1222,7 +1222,7 @@ const extraPropertyValues = new Map([
|
|
|
1222
1222
|
['-webkit-text-stroke-width', new Set(['medium', 'thick', 'thin'])],
|
|
1223
1223
|
['-webkit-transform-origin-x', new Set(['left', 'right', 'center'])],
|
|
1224
1224
|
['-webkit-transform-origin-y', new Set(['top', 'bottom', 'center'])],
|
|
1225
|
-
['width', new Set(['-webkit-fill-available'])],
|
|
1225
|
+
['width', new Set(['-webkit-fill-available', 'stretch'])],
|
|
1226
1226
|
['contain-intrinsic-width', new Set(['auto none', 'auto 100px'])],
|
|
1227
1227
|
['contain-intrinsic-height', new Set(['auto none', 'auto 100px'])],
|
|
1228
1228
|
['contain-intrinsic-size', new Set(['auto none', 'auto 100px'])],
|
|
@@ -296,6 +296,12 @@ export class CSSModel extends SDKModel {
|
|
|
296
296
|
}
|
|
297
297
|
return await this.#styleLoader.computedStylePromise(nodeId);
|
|
298
298
|
}
|
|
299
|
+
async getComputedStyleExtraFields(nodeId) {
|
|
300
|
+
if (!this.isEnabled()) {
|
|
301
|
+
await this.enable();
|
|
302
|
+
}
|
|
303
|
+
return await this.#styleLoader.extraFieldsPromise(nodeId);
|
|
304
|
+
}
|
|
299
305
|
async getLayoutPropertiesFromComputedStyle(nodeId) {
|
|
300
306
|
const styles = await this.getComputedStyle(nodeId);
|
|
301
307
|
if (!styles) {
|
|
@@ -317,7 +323,7 @@ export class CSSModel extends SDKModel {
|
|
|
317
323
|
isGrid,
|
|
318
324
|
isSubgrid,
|
|
319
325
|
isGridLanes,
|
|
320
|
-
isContainer,
|
|
326
|
+
containerType: isContainer ? containerType : undefined,
|
|
321
327
|
hasScroll,
|
|
322
328
|
};
|
|
323
329
|
}
|
|
@@ -858,25 +864,34 @@ class ComputedStyleLoader {
|
|
|
858
864
|
constructor(cssModel) {
|
|
859
865
|
this.#cssModel = cssModel;
|
|
860
866
|
}
|
|
861
|
-
|
|
867
|
+
#getResponsePromise(nodeId) {
|
|
862
868
|
let promise = this.#nodeIdToPromise.get(nodeId);
|
|
863
869
|
if (promise) {
|
|
864
870
|
return promise;
|
|
865
871
|
}
|
|
866
|
-
promise =
|
|
867
|
-
this.#
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
872
|
+
promise =
|
|
873
|
+
this.#cssModel.getAgent().invoke_getComputedStyleForNode({ nodeId }).then(({ computedStyle, extraFields }) => {
|
|
874
|
+
this.#nodeIdToPromise.delete(nodeId);
|
|
875
|
+
if (!computedStyle?.length) {
|
|
876
|
+
return { style: null, extraFields };
|
|
877
|
+
}
|
|
878
|
+
const result = new Map();
|
|
879
|
+
for (const property of computedStyle) {
|
|
880
|
+
result.set(property.name, property.value);
|
|
881
|
+
}
|
|
882
|
+
return { style: result, extraFields };
|
|
883
|
+
});
|
|
877
884
|
this.#nodeIdToPromise.set(nodeId, promise);
|
|
878
885
|
return promise;
|
|
879
886
|
}
|
|
887
|
+
async computedStylePromise(nodeId) {
|
|
888
|
+
const computedStyleWithExtraFields = await this.#getResponsePromise(nodeId);
|
|
889
|
+
return computedStyleWithExtraFields.style;
|
|
890
|
+
}
|
|
891
|
+
async extraFieldsPromise(nodeId) {
|
|
892
|
+
const computedStyleWithExtraFields = await this.#getResponsePromise(nodeId);
|
|
893
|
+
return computedStyleWithExtraFields.extraFields;
|
|
894
|
+
}
|
|
880
895
|
}
|
|
881
896
|
export class InlineStyleResult {
|
|
882
897
|
inlineStyle;
|
|
@@ -77,7 +77,7 @@ export class CSSProperty extends Common.ObjectWrapper.ObjectWrapper {
|
|
|
77
77
|
#matchers(matchedStyles, computedStyles) {
|
|
78
78
|
const matchers = matchedStyles.propertyMatchers(this.ownerStyle, computedStyles);
|
|
79
79
|
matchers.push(new CSSWideKeywordMatcher(this, matchedStyles));
|
|
80
|
-
if (Root.Runtime.experiments.isEnabled(
|
|
80
|
+
if (Root.Runtime.experiments.isEnabled(Root.ExperimentNames.ExperimentName.FONT_EDITOR)) {
|
|
81
81
|
matchers.push(new FontMatcher());
|
|
82
82
|
}
|
|
83
83
|
return matchers;
|