chrome-devtools-frontend 1.0.1675430 → 1.0.1676824
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/WATCHLISTS +0 -4
- package/front_end/core/common/Settings.ts +0 -66
- package/front_end/core/root/Runtime.ts +0 -5
- package/front_end/core/sdk/CSSMetadata.ts +5 -9
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +8 -28
- package/front_end/core/sdk/DebuggerModel.ts +50 -30
- package/front_end/core/sdk/ResourceTreeModel.ts +20 -1
- package/front_end/core/sdk/Script.ts +9 -53
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +213 -23
- package/front_end/entrypoints/main/MainImpl.ts +31 -0
- package/front_end/generated/InspectorBackendCommands.ts +3 -1
- package/front_end/generated/SupportedCSSProperties.ts +21 -4
- package/front_end/generated/protocol-mapping.d.ts +14 -0
- package/front_end/generated/protocol-proxy-api.d.ts +10 -0
- package/front_end/generated/protocol.ts +35 -0
- package/front_end/models/ai_assistance/AiAgent2.ts +11 -0
- package/front_end/models/ai_assistance/AiConversation.ts +22 -5
- package/front_end/models/ai_assistance/README.md +52 -26
- package/front_end/models/ai_assistance/agents/AiAgent.ts +54 -8
- package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +1 -1
- package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +7 -194
- package/front_end/models/ai_assistance/agents/StorageAgent.ts +8 -87
- package/front_end/models/ai_assistance/agents/StylingAgent.snapshot.txt +2 -1
- package/front_end/models/ai_assistance/ai_assistance.ts +16 -0
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +124 -0
- package/front_end/models/ai_assistance/contexts/StorageContext.ts +111 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +69 -1
- package/front_end/models/ai_assistance/skills/README.md +63 -1
- package/front_end/models/ai_assistance/skills/Skill.ts +1 -1
- package/front_end/models/ai_assistance/skills/SkillRegistry.ts +4 -0
- package/front_end/models/ai_assistance/skills/performance.md +8 -0
- package/front_end/models/ai_assistance/skills/sources.md +16 -0
- package/front_end/models/ai_assistance/skills/storage.md +31 -0
- package/front_end/models/ai_assistance/tools/GetSourceContent.ts +101 -0
- package/front_end/models/ai_assistance/tools/GetTraceEventByKey.ts +83 -0
- package/front_end/models/ai_assistance/tools/GetTraceMainThreadSummary.ts +106 -0
- package/front_end/models/ai_assistance/tools/GetTraceNetworkSummary.ts +104 -0
- package/front_end/models/ai_assistance/tools/ListPageOrigins.ts +81 -0
- package/front_end/models/ai_assistance/tools/ListSources.ts +116 -0
- package/front_end/models/ai_assistance/tools/SelectTraceEventByKey.ts +90 -0
- package/front_end/models/ai_assistance/tools/Tool.ts +22 -1
- package/front_end/models/ai_assistance/tools/ToolRegistry.ts +14 -0
- package/front_end/models/bindings/CSSWorkspaceBinding.ts +4 -0
- package/front_end/models/bindings/CompilerScriptMapping.ts +4 -0
- package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +8 -0
- package/front_end/models/bindings/ResourceScriptMapping.ts +3 -201
- package/front_end/models/bindings/SASSSourceMapping.ts +6 -0
- package/front_end/models/breakpoints/BreakpointManager.ts +2 -49
- package/front_end/models/heap_snapshot/HeapSnapshotModel.ts +27 -0
- package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +10 -2
- package/front_end/models/issues_manager/descriptions/connectionAllowlistEmbeddingRequirementNotSatisfied.md +26 -0
- package/front_end/models/issues_manager/descriptions/connectionAllowlistIFrameAttributeLoosensEmbeddingRequirement.md +19 -0
- package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowConnectionAllowlistFrom.md +21 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
- package/front_end/models/persistence/IsolatedFileSystem.ts +7 -8
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +2 -2
- package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
- package/front_end/models/persistence/persistence-meta.ts +9 -9
- package/front_end/models/trace/types/TraceEvents.ts +36 -0
- package/front_end/panels/accessibility/ARIAAttributesView.ts +3 -3
- package/front_end/panels/accessibility/AccessibilityNodeView.ts +36 -36
- package/front_end/panels/accessibility/AccessibilityStrings.ts +168 -168
- package/front_end/panels/accessibility/SourceOrderView.ts +7 -7
- package/front_end/panels/accessibility/accessibility-meta.ts +2 -2
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +5 -5
- package/front_end/panels/ai_assistance/components/AIv2MarkdownRenderer.ts +2 -3
- package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +27 -2
- package/front_end/panels/application/IndexedDBViews.ts +65 -63
- package/front_end/panels/application/WebMCPView.ts +16 -7
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +5 -5
- package/front_end/panels/common/BadgeNotification.ts +8 -8
- package/front_end/panels/common/ExtensionServer.ts +21 -1
- package/front_end/panels/common/GdpSignUpDialog.ts +16 -16
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +5 -6
- package/front_end/panels/common/PersistenceUtils.ts +2 -2
- package/front_end/panels/common/common.ts +0 -97
- package/front_end/panels/console/ConsoleInsightTeaser.ts +2 -2
- package/front_end/panels/console/ConsolePinPane.ts +2 -2
- package/front_end/panels/console/ConsoleView.ts +20 -19
- package/front_end/panels/elements/LayoutPane.ts +2 -8
- package/front_end/panels/event_listeners/EventListenersView.ts +8 -4
- package/front_end/panels/issues/AffectedTrackingSitesView.ts +25 -14
- package/front_end/panels/media/PlayerMessagesView.ts +149 -68
- package/front_end/panels/network/NetworkPanel.ts +1 -1
- package/front_end/panels/network/RequestPayloadView.ts +1 -0
- package/front_end/panels/profiler/HeapSnapshotView.ts +0 -2
- package/front_end/panels/profiler/heapProfiler.css +0 -9
- package/front_end/panels/recorder/RecorderPanel.ts +2 -3
- package/front_end/panels/screencast/ScreencastView.ts +148 -138
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +2 -2
- package/front_end/panels/sources/DebuggerPlugin.ts +9 -58
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +1 -1
- package/front_end/panels/sources/UISourceCodeFrame.ts +3 -8
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +4 -2
- package/front_end/panels/timeline/TimelineController.ts +36 -64
- package/front_end/panels/timeline/TimelinePanel.ts +11 -8
- package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
- package/front_end/panels/timeline/overlays/components/EntryLabelOverlay.ts +2 -2
- package/front_end/panels/timeline/timelinePanel.css +0 -10
- package/front_end/panels/utils/utils.ts +7 -7
- package/front_end/services/tracing/PerformanceTracing.ts +5 -17
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js +1 -1
- package/front_end/third_party/codemirror.next/chunk/codemirror.js.map +1 -1
- package/front_end/third_party/codemirror.next/package.json +2 -2
- package/front_end/third_party/codemirror.next/rebuild.sh +4 -1
- package/front_end/ui/comments/CommentAnchorResolver.ts +436 -10
- package/front_end/ui/comments/CommentManager.ts +640 -0
- package/front_end/ui/comments/CommentsOverlayWidget.ts +121 -0
- package/front_end/ui/comments/comments.ts +4 -0
- package/front_end/ui/comments/commentsOverlay.css +49 -0
- package/front_end/{panels/common → ui/components/dialogs}/FreDialog.ts +6 -6
- package/front_end/ui/components/dialogs/TypeToAllowDialog.ts +96 -0
- package/front_end/ui/components/dialogs/dialogs.ts +4 -0
- package/front_end/ui/components/settings/SettingCheckbox.ts +3 -3
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionDisclaimer.ts +13 -13
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +7 -6
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeCompletionTeaser.ts +43 -46
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +22 -26
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationTeaser.ts +10 -10
- package/front_end/{panels/common → ui/components/text_editor}/AiCodeGenerationUpgradeDialog.ts +5 -5
- package/front_end/ui/components/text_editor/text_editor.ts +4 -0
- package/front_end/ui/legacy/Toolbar.ts +1 -1
- package/front_end/ui/legacy/components/object_ui/CustomPreviewComponent.ts +11 -3
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +270 -162
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +5 -0
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -16
- package/front_end/ui/legacy/components/settings_ui/SettingsUI.ts +5 -12
- package/front_end/ui/legacy/components/source_frame/JSONView.ts +8 -1
- package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +2 -2
- package/front_end/ui/settings/SettingUIRegistration.ts +55 -6
- package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
- package/mcp/mcp.ts +6 -1
- package/package.json +1 -1
- package/front_end/Images/toolbarResizerVertical.png +0 -0
- package/front_end/emulated_devices/MotoG4-landscape.svg +0 -155
- package/front_end/emulated_devices/MotoG4-portrait.svg +0 -155
- package/front_end/emulated_devices/Nexus5X-landscape.svg +0 -19
- package/front_end/emulated_devices/Nexus5X-portrait.svg +0 -19
- package/front_end/emulated_devices/Nexus6P-landscape.svg +0 -50
- package/front_end/emulated_devices/Nexus6P-portrait.svg +0 -54
- package/front_end/emulated_devices/google-nest-hub-horizontal.png +0 -0
- package/front_end/emulated_devices/google-nest-hub-max-horizontal.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-horizontal-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5-vertical-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-horizontal-navigation-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-default-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-default-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-keyboard-2x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-1x.png +0 -0
- package/front_end/emulated_devices/google-nexus-5x-vertical-navigation-2x.png +0 -0
- package/front_end/emulated_devices/iPad-landscape.svg +0 -73
- package/front_end/emulated_devices/iPad-portrait.svg +0 -76
- package/front_end/emulated_devices/iPhone5-landscape.svg +0 -99
- package/front_end/emulated_devices/iPhone5-portrait.svg +0 -83
- package/front_end/emulated_devices/iPhone6-landscape.svg +0 -111
- package/front_end/emulated_devices/iPhone6-portrait.svg +0 -116
- package/front_end/emulated_devices/iPhone6Plus-landscape.svg +0 -118
- package/front_end/emulated_devices/iPhone6Plus-portrait.svg +0 -116
- package/front_end/emulated_devices/optimized/MotoG4-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/MotoG4-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus5X-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus5X-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus6P-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/Nexus6P-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/README.md +0 -9
- package/front_end/emulated_devices/optimized/google-nest-hub-horizontal.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nest-hub-max-horizontal.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-horizontal-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5-vertical-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-horizontal-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-default-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-keyboard-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-1x.avif +0 -0
- package/front_end/emulated_devices/optimized/google-nexus-5x-vertical-navigation-2x.avif +0 -0
- package/front_end/emulated_devices/optimized/iPad-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPad-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone5-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone5-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6Plus-landscape.avif +0 -0
- package/front_end/emulated_devices/optimized/iPhone6Plus-portrait.avif +0 -0
- package/front_end/emulated_devices/optimized/optimized_images.gni +0 -53
- package/front_end/models/ai_assistance/agents/README.md +0 -136
- /package/front_end/{panels/common → ui/components/dialogs}/freDialog.css +0 -0
- /package/front_end/{panels/common/common.css → ui/components/dialogs/typeToAllowDialog.css} +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionDisclaimer.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeCompletionTeaser.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationTeaser.css +0 -0
- /package/front_end/{panels/common → ui/components/text_editor}/aiCodeGenerationUpgradeDialog.css +0 -0
|
@@ -501,21 +501,11 @@ export class HeapSnapshotNode implements HeapSnapshotItem {
|
|
|
501
501
|
}
|
|
502
502
|
|
|
503
503
|
#detachednessAndClassIndex(): number {
|
|
504
|
-
|
|
505
|
-
const nodeDetachednessAndClassIndexOffset = snapshot.nodeDetachednessAndClassIndexOffset;
|
|
506
|
-
return nodeDetachednessAndClassIndexOffset !== -1 ?
|
|
507
|
-
snapshot.nodes.getValue(nodeIndex + nodeDetachednessAndClassIndexOffset) :
|
|
508
|
-
(snapshot.detachednessAndClassIndexArray as Uint32Array)[nodeIndex / snapshot.nodeFieldCount];
|
|
504
|
+
return this.snapshot.detachednessAndClassIndexArray[this.nodeIndex / this.snapshot.nodeFieldCount];
|
|
509
505
|
}
|
|
510
506
|
|
|
511
507
|
#setDetachednessAndClassIndex(value: number): void {
|
|
512
|
-
|
|
513
|
-
const nodeDetachednessAndClassIndexOffset = snapshot.nodeDetachednessAndClassIndexOffset;
|
|
514
|
-
if (nodeDetachednessAndClassIndexOffset !== -1) {
|
|
515
|
-
snapshot.nodes.setValue(nodeIndex + nodeDetachednessAndClassIndexOffset, value);
|
|
516
|
-
} else {
|
|
517
|
-
(snapshot.detachednessAndClassIndexArray as Uint32Array)[nodeIndex / snapshot.nodeFieldCount] = value;
|
|
518
|
-
}
|
|
508
|
+
this.snapshot.detachednessAndClassIndexArray[this.nodeIndex / this.snapshot.nodeFieldCount] = value;
|
|
519
509
|
}
|
|
520
510
|
|
|
521
511
|
detachedness(): HeapSnapshotModel.HeapSnapshotModel.DOMLinkState {
|
|
@@ -1010,7 +1000,7 @@ export abstract class HeapSnapshot {
|
|
|
1010
1000
|
#ignoredEdgesInRetainersView = new Set<number>();
|
|
1011
1001
|
#nodeDistancesForRetainersView: Int32Array|undefined;
|
|
1012
1002
|
#edgeNamesThatAreNotWeakMaps: Platform.TypedArrayUtilities.BitVector;
|
|
1013
|
-
detachednessAndClassIndexArray
|
|
1003
|
+
detachednessAndClassIndexArray!: Uint32Array;
|
|
1014
1004
|
nodeNativeContextAttribution!: Int32Array;
|
|
1015
1005
|
#nativeContextSizes!: HeapSnapshotModel.HeapSnapshotModel.NativeContextSizes;
|
|
1016
1006
|
#nativeContextOrdinals!: number[];
|
|
@@ -1092,6 +1082,7 @@ export abstract class HeapSnapshot {
|
|
|
1092
1082
|
this.#progress.updateStatus('Building retainers…');
|
|
1093
1083
|
const resultsFromSecondWorker = this.startInitStep1InSecondThread(secondWorker);
|
|
1094
1084
|
this.#progress.updateStatus('Propagating DOM state…');
|
|
1085
|
+
this.initDetachednessAndClassIndex();
|
|
1095
1086
|
this.propagateDOMState();
|
|
1096
1087
|
this.#progress.updateStatus('Calculating node flags…');
|
|
1097
1088
|
this.calculateFlags();
|
|
@@ -2400,12 +2391,6 @@ export abstract class HeapSnapshot {
|
|
|
2400
2391
|
nodeRegExpType,
|
|
2401
2392
|
} = this;
|
|
2402
2393
|
|
|
2403
|
-
// If the snapshot doesn't contain a detachedness field in each node, then
|
|
2404
|
-
// allocate a separate array so there is somewhere to store the class index.
|
|
2405
|
-
if (this.nodeDetachednessAndClassIndexOffset === -1) {
|
|
2406
|
-
this.detachednessAndClassIndexArray = new Uint32Array(nodeCount);
|
|
2407
|
-
}
|
|
2408
|
-
|
|
2409
2394
|
// We'll add some new values to the `strings` array during the processing below.
|
|
2410
2395
|
// This map lets us easily find the index for each added string.
|
|
2411
2396
|
const stringTable = new Map<string, number>();
|
|
@@ -2707,6 +2692,49 @@ export abstract class HeapSnapshot {
|
|
|
2707
2692
|
return this.#nativeContextSizes;
|
|
2708
2693
|
}
|
|
2709
2694
|
|
|
2695
|
+
getRetainedByContextSummary(): HeapSnapshotModel.HeapSnapshotModel.RetainedByContextSummary {
|
|
2696
|
+
// Use the exact same implementation here as aggregateWithFilter('objectsRetainedByContexts').
|
|
2697
|
+
const isRetainedByContext = this.createNamedFilter('objectsRetainedByContexts');
|
|
2698
|
+
|
|
2699
|
+
let contextCount = 0;
|
|
2700
|
+
let retainedByContextSize = 0;
|
|
2701
|
+
let retainedByContextCount = 0;
|
|
2702
|
+
let notRetainedByContextSize = 0;
|
|
2703
|
+
let notRetainedByContextCount = 0;
|
|
2704
|
+
|
|
2705
|
+
const node = this.rootNode();
|
|
2706
|
+
const {nodes, nodeFieldCount, nodeSelfSizeOffset: selfSizeOffset} = this;
|
|
2707
|
+
const nodesLength = nodes.length;
|
|
2708
|
+
|
|
2709
|
+
for (let nodeIndex = 0; nodeIndex < nodesLength; nodeIndex += nodeFieldCount) {
|
|
2710
|
+
const selfSize = nodes.getValue(nodeIndex + selfSizeOffset);
|
|
2711
|
+
if (!selfSize) {
|
|
2712
|
+
continue;
|
|
2713
|
+
}
|
|
2714
|
+
node.nodeIndex = nodeIndex;
|
|
2715
|
+
if (isRetainedByContext(node)) {
|
|
2716
|
+
retainedByContextCount++;
|
|
2717
|
+
retainedByContextSize += selfSize;
|
|
2718
|
+
} else {
|
|
2719
|
+
notRetainedByContextCount++;
|
|
2720
|
+
notRetainedByContextSize += selfSize;
|
|
2721
|
+
}
|
|
2722
|
+
|
|
2723
|
+
if (this.isContextObject(node)) {
|
|
2724
|
+
contextCount++;
|
|
2725
|
+
}
|
|
2726
|
+
}
|
|
2727
|
+
|
|
2728
|
+
return {
|
|
2729
|
+
contextCount,
|
|
2730
|
+
retainedByContextSize,
|
|
2731
|
+
retainedByContextCount,
|
|
2732
|
+
notRetainedByContextSize,
|
|
2733
|
+
notRetainedByContextCount,
|
|
2734
|
+
totalSize: retainedByContextSize + notRetainedByContextSize,
|
|
2735
|
+
};
|
|
2736
|
+
}
|
|
2737
|
+
|
|
2710
2738
|
nodeNativeContext(nodeIndex: number): number {
|
|
2711
2739
|
const ordinal = nodeIndex / this.nodeFieldCount;
|
|
2712
2740
|
const nativeContextOrdinal = this.nodeNativeContextAttribution[ordinal];
|
|
@@ -2987,6 +3015,30 @@ export abstract class HeapSnapshot {
|
|
|
2987
3015
|
return null;
|
|
2988
3016
|
}
|
|
2989
3017
|
|
|
3018
|
+
private initDetachednessAndClassIndex(): void {
|
|
3019
|
+
this.detachednessAndClassIndexArray = new Uint32Array(this.nodeCount);
|
|
3020
|
+
if (this.nodeDetachednessAndClassIndexOffset !== -1) {
|
|
3021
|
+
// Seed this array from the detachedness field of the snapshot.
|
|
3022
|
+
const {nodeFieldCount, nodeDetachednessAndClassIndexOffset: offset} = this;
|
|
3023
|
+
for (let i = 0; i < this.nodeCount; ++i) {
|
|
3024
|
+
this.detachednessAndClassIndexArray[i] = Number(this.nodes.getValue(i * nodeFieldCount + offset));
|
|
3025
|
+
}
|
|
3026
|
+
} else {
|
|
3027
|
+
// For old snapshots, treat native objects named 'Detached ...' as detached.
|
|
3028
|
+
const node = this.rootNode();
|
|
3029
|
+
const nodesLength = this.nodes.length;
|
|
3030
|
+
const {nodeFieldCount, nodeNativeType, nodeTypeOffset} = this;
|
|
3031
|
+
for (let nodeIndex = 0; nodeIndex < nodesLength; nodeIndex += nodeFieldCount) {
|
|
3032
|
+
if (this.nodes.getValue(nodeIndex + nodeTypeOffset) === nodeNativeType) {
|
|
3033
|
+
node.nodeIndex = nodeIndex;
|
|
3034
|
+
if (node.name().startsWith('Detached ')) {
|
|
3035
|
+
node.setDetachedness(HeapSnapshotModel.HeapSnapshotModel.DOMLinkState.DETACHED);
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
3038
|
+
}
|
|
3039
|
+
}
|
|
3040
|
+
}
|
|
3041
|
+
|
|
2990
3042
|
/**
|
|
2991
3043
|
* The phase propagates whether a node is attached or detached through the
|
|
2992
3044
|
* graph and adjusts the low-level representation of nodes.
|
|
@@ -3292,11 +3344,58 @@ export abstract class HeapSnapshot {
|
|
|
3292
3344
|
return null;
|
|
3293
3345
|
}
|
|
3294
3346
|
|
|
3295
|
-
createEdgesProvider(nodeIndex: number
|
|
3347
|
+
createEdgesProvider(nodeIndex: number,
|
|
3348
|
+
options?: HeapSnapshotModel.HeapSnapshotModel.HeapEdgesQueryOptions): HeapSnapshotEdgesProvider {
|
|
3296
3349
|
const node = this.createNode(nodeIndex);
|
|
3297
|
-
const
|
|
3350
|
+
const defaultFilter = this.containmentEdgesFilter();
|
|
3351
|
+
const minRetainedSize = options?.minRetainedSize;
|
|
3352
|
+
const excludePrimitives = options?.excludePrimitives ?? false;
|
|
3353
|
+
|
|
3354
|
+
let filter: ((arg0: HeapSnapshotEdge) => boolean)|null = defaultFilter;
|
|
3355
|
+
|
|
3356
|
+
if (minRetainedSize !== undefined || excludePrimitives) {
|
|
3357
|
+
filter = (edge: HeapSnapshotEdge): boolean => {
|
|
3358
|
+
if (defaultFilter && !defaultFilter(edge)) {
|
|
3359
|
+
return false;
|
|
3360
|
+
}
|
|
3361
|
+
const targetNode = edge.node();
|
|
3362
|
+
if (minRetainedSize !== undefined && targetNode.retainedSize() < minRetainedSize) {
|
|
3363
|
+
return false;
|
|
3364
|
+
}
|
|
3365
|
+
if (excludePrimitives) {
|
|
3366
|
+
const rawType = targetNode.rawType();
|
|
3367
|
+
if (rawType === this.nodeNumberType) {
|
|
3368
|
+
return false;
|
|
3369
|
+
}
|
|
3370
|
+
if (rawType === this.nodeNativeType) {
|
|
3371
|
+
const targetName = targetNode.rawName();
|
|
3372
|
+
if (targetName === 'undefined' || targetName === 'null' || targetName === 'true' ||
|
|
3373
|
+
targetName === 'false') {
|
|
3374
|
+
return false;
|
|
3375
|
+
}
|
|
3376
|
+
}
|
|
3377
|
+
}
|
|
3378
|
+
return true;
|
|
3379
|
+
};
|
|
3380
|
+
}
|
|
3381
|
+
|
|
3298
3382
|
const indexProvider = new HeapSnapshotEdgeIndexProvider(this);
|
|
3299
|
-
|
|
3383
|
+
const provider = new HeapSnapshotEdgesProvider(this, filter, node.edges(), indexProvider);
|
|
3384
|
+
|
|
3385
|
+
if (options?.sortBy) {
|
|
3386
|
+
const sortBy = options.sortBy;
|
|
3387
|
+
let comparator: HeapSnapshotModel.HeapSnapshotModel.ComparatorConfig;
|
|
3388
|
+
if (sortBy === 'selfSize') {
|
|
3389
|
+
comparator = new HeapSnapshotModel.HeapSnapshotModel.ComparatorConfig('selfSize', false, '!edgeName', true);
|
|
3390
|
+
} else if (sortBy === 'name') {
|
|
3391
|
+
comparator = new HeapSnapshotModel.HeapSnapshotModel.ComparatorConfig('!edgeName', true, 'retainedSize', false);
|
|
3392
|
+
} else {
|
|
3393
|
+
comparator = new HeapSnapshotModel.HeapSnapshotModel.ComparatorConfig('retainedSize', false, '!edgeName', true);
|
|
3394
|
+
}
|
|
3395
|
+
provider.sortAndRewind(comparator);
|
|
3396
|
+
}
|
|
3397
|
+
|
|
3398
|
+
return provider;
|
|
3300
3399
|
}
|
|
3301
3400
|
|
|
3302
3401
|
createEdgesProviderForTest(nodeIndex: number, filter: ((arg0: HeapSnapshotEdge) => boolean)|null):
|
|
@@ -3512,6 +3611,97 @@ export abstract class HeapSnapshot {
|
|
|
3512
3611
|
return new HeapSnapshotNodesProvider(this, this.aggregatesWithFilter(nodeFilter)[classKey].idxs);
|
|
3513
3612
|
}
|
|
3514
3613
|
|
|
3614
|
+
queryObjects(queryOptions: HeapSnapshotModel.HeapSnapshotModel.HeapQueryOptions): HeapSnapshotNodesProvider {
|
|
3615
|
+
const {nodes, nodeFieldCount, retainedSizes} = this;
|
|
3616
|
+
const nodesLength = nodes.length;
|
|
3617
|
+
|
|
3618
|
+
const matchingIndexes: number[] = [];
|
|
3619
|
+
|
|
3620
|
+
const classNamePattern = queryOptions.className ? new RegExp(queryOptions.className, 'i') : null;
|
|
3621
|
+
const propertyNamePattern = queryOptions.propertyName ? new RegExp(queryOptions.propertyName, 'i') : null;
|
|
3622
|
+
const targetNodeType = queryOptions.nodeType ? queryOptions.nodeType.toLowerCase() : null;
|
|
3623
|
+
|
|
3624
|
+
const node = this.rootNode();
|
|
3625
|
+
|
|
3626
|
+
for (let nodeIndex = 0, ordinal = 0; nodeIndex < nodesLength; nodeIndex += nodeFieldCount, ordinal++) {
|
|
3627
|
+
node.nodeIndex = nodeIndex;
|
|
3628
|
+
|
|
3629
|
+
if (queryOptions.minSelfSize !== undefined && node.selfSize() < queryOptions.minSelfSize) {
|
|
3630
|
+
continue;
|
|
3631
|
+
}
|
|
3632
|
+
if (queryOptions.maxSelfSize !== undefined && node.selfSize() > queryOptions.maxSelfSize) {
|
|
3633
|
+
continue;
|
|
3634
|
+
}
|
|
3635
|
+
|
|
3636
|
+
const retainedSize = retainedSizes[ordinal];
|
|
3637
|
+
if (queryOptions.minRetainedSize !== undefined && retainedSize < queryOptions.minRetainedSize) {
|
|
3638
|
+
continue;
|
|
3639
|
+
}
|
|
3640
|
+
if (queryOptions.maxRetainedSize !== undefined && retainedSize > queryOptions.maxRetainedSize) {
|
|
3641
|
+
continue;
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3644
|
+
if (queryOptions.isDetached !== undefined) {
|
|
3645
|
+
const isDetached = node.detachedness() === HeapSnapshotModel.HeapSnapshotModel.DOMLinkState.DETACHED;
|
|
3646
|
+
if (isDetached !== queryOptions.isDetached) {
|
|
3647
|
+
continue;
|
|
3648
|
+
}
|
|
3649
|
+
}
|
|
3650
|
+
|
|
3651
|
+
if (classNamePattern) {
|
|
3652
|
+
const name = node.name();
|
|
3653
|
+
if (!classNamePattern.test(name)) {
|
|
3654
|
+
continue;
|
|
3655
|
+
}
|
|
3656
|
+
}
|
|
3657
|
+
|
|
3658
|
+
if (targetNodeType) {
|
|
3659
|
+
const typeStr = node.type();
|
|
3660
|
+
if (typeStr.toLowerCase() !== targetNodeType) {
|
|
3661
|
+
continue;
|
|
3662
|
+
}
|
|
3663
|
+
}
|
|
3664
|
+
|
|
3665
|
+
if (propertyNamePattern) {
|
|
3666
|
+
let propMatch = false;
|
|
3667
|
+
for (const iter = node.edges(); iter.hasNext(); iter.next()) {
|
|
3668
|
+
if (propertyNamePattern.test(iter.edge.name())) {
|
|
3669
|
+
propMatch = true;
|
|
3670
|
+
break;
|
|
3671
|
+
}
|
|
3672
|
+
}
|
|
3673
|
+
if (!propMatch) {
|
|
3674
|
+
continue;
|
|
3675
|
+
}
|
|
3676
|
+
}
|
|
3677
|
+
|
|
3678
|
+
matchingIndexes.push(nodeIndex);
|
|
3679
|
+
}
|
|
3680
|
+
|
|
3681
|
+
const sortBy = queryOptions.sortBy ?? 'retainedSize';
|
|
3682
|
+
if (sortBy === 'retainedSize') {
|
|
3683
|
+
matchingIndexes.sort((a, b) => retainedSizes[b / nodeFieldCount] - retainedSizes[a / nodeFieldCount]);
|
|
3684
|
+
} else if (sortBy === 'selfSize') {
|
|
3685
|
+
matchingIndexes.sort((a, b) => {
|
|
3686
|
+
node.nodeIndex = b;
|
|
3687
|
+
const sizeB = node.selfSize();
|
|
3688
|
+
node.nodeIndex = a;
|
|
3689
|
+
const sizeA = node.selfSize();
|
|
3690
|
+
return sizeB - sizeA;
|
|
3691
|
+
});
|
|
3692
|
+
} else if (sortBy === 'id') {
|
|
3693
|
+
matchingIndexes.sort((a, b) => {
|
|
3694
|
+
node.nodeIndex = b;
|
|
3695
|
+
const idB = node.id();
|
|
3696
|
+
node.nodeIndex = a;
|
|
3697
|
+
const idA = node.id();
|
|
3698
|
+
return idA - idB;
|
|
3699
|
+
});
|
|
3700
|
+
}
|
|
3701
|
+
|
|
3702
|
+
return new HeapSnapshotNodesProvider(this, matchingIndexes);
|
|
3703
|
+
}
|
|
3704
|
+
|
|
3515
3705
|
private maxJsNodeId(): number {
|
|
3516
3706
|
const nodeFieldCount = this.nodeFieldCount;
|
|
3517
3707
|
const nodes = this.nodes;
|
|
@@ -4196,7 +4386,7 @@ export class JSHeapSnapshot extends HeapSnapshot {
|
|
|
4196
4386
|
continue;
|
|
4197
4387
|
}
|
|
4198
4388
|
node.nodeIndex = nodeIndex;
|
|
4199
|
-
if (node.
|
|
4389
|
+
if (node.detachedness() === HeapSnapshotModel.HeapSnapshotModel.DOMLinkState.DETACHED) {
|
|
4200
4390
|
this.flags[ordinal] |= flag;
|
|
4201
4391
|
}
|
|
4202
4392
|
}
|
|
@@ -49,6 +49,7 @@ import * as Persistence from '../../models/persistence/persistence.js';
|
|
|
49
49
|
import * as Workspace from '../../models/workspace/workspace.js';
|
|
50
50
|
import * as PanelCommon from '../../panels/common/common.js';
|
|
51
51
|
import * as Snippets from '../../panels/snippets/snippets.js';
|
|
52
|
+
import type * as Comments from '../../ui/comments/comments.js';
|
|
52
53
|
import * as Buttons from '../../ui/components/buttons/buttons.js';
|
|
53
54
|
import * as Snackbar from '../../ui/components/snackbars/snackbars.js';
|
|
54
55
|
import * as UIHelpers from '../../ui/helpers/helpers.js';
|
|
@@ -998,3 +999,33 @@ export class ReloadActionDelegate implements UI.ActionRegistration.ActionDelegat
|
|
|
998
999
|
return false;
|
|
999
1000
|
}
|
|
1000
1001
|
}
|
|
1002
|
+
|
|
1003
|
+
let activeCommentManager: Comments.CommentManager.CommentManager|null = null;
|
|
1004
|
+
let activeOverlayWidget: Comments.CommentsOverlayWidget.CommentsOverlayWidget|null = null;
|
|
1005
|
+
|
|
1006
|
+
// Temporary for manual testing and experimentation.
|
|
1007
|
+
export async function comments(): Promise<Comments.CommentManager.CommentManager> {
|
|
1008
|
+
const Comments = await import('../../ui/comments/comments.js');
|
|
1009
|
+
if (!activeCommentManager || !activeOverlayWidget) {
|
|
1010
|
+
activeCommentManager = new Comments.CommentManager.CommentManager();
|
|
1011
|
+
activeCommentManager.start();
|
|
1012
|
+
|
|
1013
|
+
activeOverlayWidget = new Comments.CommentsOverlayWidget.CommentsOverlayWidget(activeCommentManager);
|
|
1014
|
+
activeOverlayWidget.markAsRoot();
|
|
1015
|
+
activeOverlayWidget.show(document.body);
|
|
1016
|
+
activeCommentManager.setCommentMode(true);
|
|
1017
|
+
return activeCommentManager;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
const newMode = !activeCommentManager.isCommentMode();
|
|
1021
|
+
activeCommentManager.setCommentMode(newMode);
|
|
1022
|
+
if (newMode) {
|
|
1023
|
+
activeOverlayWidget.show(document.body);
|
|
1024
|
+
} else {
|
|
1025
|
+
activeOverlayWidget.detach();
|
|
1026
|
+
}
|
|
1027
|
+
return activeCommentManager;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
// @ts-expect-error global helper for manual testing
|
|
1031
|
+
globalThis.comments = comments;
|
|
@@ -1136,6 +1136,8 @@ inspectorBackend.registerEnum("Page.SetTouchEmulationEnabledRequestConfiguration
|
|
|
1136
1136
|
inspectorBackend.registerCommand("Page.setTouchEmulationEnabled", [{"name": "enabled", "type": "boolean", "optional": false, "description": "Whether the touch event emulation should be enabled.", "typeRef": null}, {"name": "configuration", "type": "string", "optional": true, "description": "Touch/gesture events configuration. Default: current platform.", "typeRef": "Page.SetTouchEmulationEnabledRequestConfiguration"}], [], "Toggles mouse event-based touch event emulation.");
|
|
1137
1137
|
inspectorBackend.registerEnum("Page.StartScreencastRequestFormat", {Jpeg: "jpeg", Png: "png"});
|
|
1138
1138
|
inspectorBackend.registerCommand("Page.startScreencast", [{"name": "format", "type": "string", "optional": true, "description": "Image compression format.", "typeRef": "Page.StartScreencastRequestFormat"}, {"name": "quality", "type": "number", "optional": true, "description": "Compression quality from range [0..100].", "typeRef": null}, {"name": "maxWidth", "type": "number", "optional": true, "description": "Maximum screenshot width.", "typeRef": null}, {"name": "maxHeight", "type": "number", "optional": true, "description": "Maximum screenshot height.", "typeRef": null}, {"name": "everyNthFrame", "type": "number", "optional": true, "description": "Send every n-th frame.", "typeRef": null}], [], "Starts sending each frame using the `screencastFrame` event.");
|
|
1139
|
+
inspectorBackend.registerCommand("Page.startScreenRecording", [{"name": "audio", "type": "boolean", "optional": true, "description": "", "typeRef": null}, {"name": "maxWidth", "type": "number", "optional": true, "description": "Maximum frame width in pixels.", "typeRef": null}, {"name": "maxHeight", "type": "number", "optional": true, "description": "Maximum frame height in pixels.", "typeRef": null}, {"name": "frameRate", "type": "number", "optional": true, "description": "Maximum frame rate in frames per second.", "typeRef": null}], ["stream"], "Starts screencast video recording.");
|
|
1140
|
+
inspectorBackend.registerCommand("Page.stopScreenRecording", [], ["stream"], "Stops screencast video recording.");
|
|
1139
1141
|
inspectorBackend.registerCommand("Page.stopLoading", [], [], "Force the page stop all navigations and pending resource fetches.");
|
|
1140
1142
|
inspectorBackend.registerCommand("Page.crash", [], [], "Crashes renderer on the IO thread, generates minidumps.");
|
|
1141
1143
|
inspectorBackend.registerCommand("Page.close", [], [], "Tries to close page, running its beforeunload hooks, if any.");
|
|
@@ -1464,7 +1466,7 @@ inspectorBackend.registerType("WebAudio.AudioParam", [{"name": "paramId", "type"
|
|
|
1464
1466
|
// WebAuthn.
|
|
1465
1467
|
inspectorBackend.registerEnum("WebAuthn.AuthenticatorProtocol", {U2f: "u2f", Ctap2: "ctap2"});
|
|
1466
1468
|
inspectorBackend.registerEnum("WebAuthn.Ctap2Version", {Ctap2_0: "ctap2_0", Ctap2_1: "ctap2_1", Ctap2_2: "ctap2_2"});
|
|
1467
|
-
inspectorBackend.registerEnum("WebAuthn.AuthenticatorTransport", {Usb: "usb", Nfc: "nfc", Ble: "ble", Cable: "cable", Internal: "internal"});
|
|
1469
|
+
inspectorBackend.registerEnum("WebAuthn.AuthenticatorTransport", {Usb: "usb", Nfc: "nfc", Ble: "ble", Cable: "cable", Hybrid: "hybrid", SmartCard: "smart-card", Internal: "internal"});
|
|
1468
1470
|
inspectorBackend.registerEvent("WebAuthn.credentialAdded", ["authenticatorId", "credential"]);
|
|
1469
1471
|
inspectorBackend.registerEvent("WebAuthn.credentialDeleted", ["authenticatorId", "credentialId"]);
|
|
1470
1472
|
inspectorBackend.registerEvent("WebAuthn.credentialUpdated", ["authenticatorId", "credential"]);
|
|
@@ -1026,6 +1026,11 @@ export const generatedProperties = [
|
|
|
1026
1026
|
"runtime_flag_status": "stable"
|
|
1027
1027
|
},
|
|
1028
1028
|
{
|
|
1029
|
+
"devtools_keywords": [
|
|
1030
|
+
"none",
|
|
1031
|
+
"move",
|
|
1032
|
+
"no-drag"
|
|
1033
|
+
],
|
|
1029
1034
|
"name": "app-region"
|
|
1030
1035
|
},
|
|
1031
1036
|
{
|
|
@@ -5163,7 +5168,8 @@ export const generatedProperties = [
|
|
|
5163
5168
|
"inline",
|
|
5164
5169
|
"both",
|
|
5165
5170
|
"mandatory",
|
|
5166
|
-
"proximity"
|
|
5171
|
+
"proximity",
|
|
5172
|
+
"pair"
|
|
5167
5173
|
],
|
|
5168
5174
|
"name": "scroll-snap-type"
|
|
5169
5175
|
},
|
|
@@ -6078,6 +6084,10 @@ export const generatedProperties = [
|
|
|
6078
6084
|
"name": "will-change"
|
|
6079
6085
|
},
|
|
6080
6086
|
{
|
|
6087
|
+
"devtools_keywords": [
|
|
6088
|
+
"none",
|
|
6089
|
+
"move"
|
|
6090
|
+
],
|
|
6081
6091
|
"inherited": true,
|
|
6082
6092
|
"keywords": [
|
|
6083
6093
|
"none",
|
|
@@ -6415,6 +6425,13 @@ export const generatedPropertyValues = {
|
|
|
6415
6425
|
"none"
|
|
6416
6426
|
]
|
|
6417
6427
|
},
|
|
6428
|
+
"app-region": {
|
|
6429
|
+
"values": [
|
|
6430
|
+
"none",
|
|
6431
|
+
"move",
|
|
6432
|
+
"no-drag"
|
|
6433
|
+
]
|
|
6434
|
+
},
|
|
6418
6435
|
"appearance": {
|
|
6419
6436
|
"values": [
|
|
6420
6437
|
"auto",
|
|
@@ -8694,7 +8711,8 @@ export const generatedPropertyValues = {
|
|
|
8694
8711
|
"inline",
|
|
8695
8712
|
"both",
|
|
8696
8713
|
"mandatory",
|
|
8697
|
-
"proximity"
|
|
8714
|
+
"proximity",
|
|
8715
|
+
"pair"
|
|
8698
8716
|
]
|
|
8699
8717
|
},
|
|
8700
8718
|
"scroll-target-group": {
|
|
@@ -9208,8 +9226,7 @@ export const generatedPropertyValues = {
|
|
|
9208
9226
|
"window-drag": {
|
|
9209
9227
|
"values": [
|
|
9210
9228
|
"none",
|
|
9211
|
-
"move"
|
|
9212
|
-
"no-drag"
|
|
9229
|
+
"move"
|
|
9213
9230
|
]
|
|
9214
9231
|
},
|
|
9215
9232
|
"word-break": {
|
|
@@ -4323,6 +4323,20 @@ export namespace ProtocolMapping {
|
|
|
4323
4323
|
paramsType: [Protocol.Page.StartScreencastRequest?];
|
|
4324
4324
|
returnType: void;
|
|
4325
4325
|
};
|
|
4326
|
+
/**
|
|
4327
|
+
* Starts screencast video recording.
|
|
4328
|
+
*/
|
|
4329
|
+
'Page.startScreenRecording': {
|
|
4330
|
+
paramsType: [Protocol.Page.StartScreenRecordingRequest?];
|
|
4331
|
+
returnType: Protocol.Page.StartScreenRecordingResponse;
|
|
4332
|
+
};
|
|
4333
|
+
/**
|
|
4334
|
+
* Stops screencast video recording.
|
|
4335
|
+
*/
|
|
4336
|
+
'Page.stopScreenRecording': {
|
|
4337
|
+
paramsType: [];
|
|
4338
|
+
returnType: Protocol.Page.StopScreenRecordingResponse;
|
|
4339
|
+
};
|
|
4326
4340
|
/**
|
|
4327
4341
|
* Force the page stop all navigations and pending resource fetches.
|
|
4328
4342
|
*/
|
|
@@ -3478,6 +3478,16 @@ declare namespace ProtocolProxyApi {
|
|
|
3478
3478
|
*/
|
|
3479
3479
|
invoke_startScreencast(params: Protocol.Page.StartScreencastRequest): Promise<Protocol.ProtocolResponseWithError>;
|
|
3480
3480
|
|
|
3481
|
+
/**
|
|
3482
|
+
* Starts screencast video recording.
|
|
3483
|
+
*/
|
|
3484
|
+
invoke_startScreenRecording(params: Protocol.Page.StartScreenRecordingRequest): Promise<Protocol.Page.StartScreenRecordingResponse>;
|
|
3485
|
+
|
|
3486
|
+
/**
|
|
3487
|
+
* Stops screencast video recording.
|
|
3488
|
+
*/
|
|
3489
|
+
invoke_stopScreenRecording(): Promise<Protocol.Page.StopScreenRecordingResponse>;
|
|
3490
|
+
|
|
3481
3491
|
/**
|
|
3482
3492
|
* Force the page stop all navigations and pending resource fetches.
|
|
3483
3493
|
*/
|
|
@@ -16288,6 +16288,36 @@ export namespace Page {
|
|
|
16288
16288
|
everyNthFrame?: integer;
|
|
16289
16289
|
}
|
|
16290
16290
|
|
|
16291
|
+
export interface StartScreenRecordingRequest {
|
|
16292
|
+
audio?: boolean;
|
|
16293
|
+
/**
|
|
16294
|
+
* Maximum frame width in pixels.
|
|
16295
|
+
*/
|
|
16296
|
+
maxWidth?: integer;
|
|
16297
|
+
/**
|
|
16298
|
+
* Maximum frame height in pixels.
|
|
16299
|
+
*/
|
|
16300
|
+
maxHeight?: integer;
|
|
16301
|
+
/**
|
|
16302
|
+
* Maximum frame rate in frames per second.
|
|
16303
|
+
*/
|
|
16304
|
+
frameRate?: integer;
|
|
16305
|
+
}
|
|
16306
|
+
|
|
16307
|
+
export interface StartScreenRecordingResponse extends ProtocolResponseWithError {
|
|
16308
|
+
/**
|
|
16309
|
+
* A handle of the stream that holds resulting screencast data.
|
|
16310
|
+
*/
|
|
16311
|
+
stream: IO.StreamHandle;
|
|
16312
|
+
}
|
|
16313
|
+
|
|
16314
|
+
export interface StopScreenRecordingResponse extends ProtocolResponseWithError {
|
|
16315
|
+
/**
|
|
16316
|
+
* A handle of the stream that holds resulting screencast data.
|
|
16317
|
+
*/
|
|
16318
|
+
stream: IO.StreamHandle;
|
|
16319
|
+
}
|
|
16320
|
+
|
|
16291
16321
|
export const enum SetWebLifecycleStateRequestState {
|
|
16292
16322
|
Frozen = 'frozen',
|
|
16293
16323
|
Active = 'active',
|
|
@@ -20069,11 +20099,16 @@ export namespace WebAuthn {
|
|
|
20069
20099
|
Ctap2_2 = 'ctap2_2',
|
|
20070
20100
|
}
|
|
20071
20101
|
|
|
20102
|
+
/**
|
|
20103
|
+
* LINT_SKIP.IfChange(AuthenticatorTransport)
|
|
20104
|
+
*/
|
|
20072
20105
|
export const enum AuthenticatorTransport {
|
|
20073
20106
|
Usb = 'usb',
|
|
20074
20107
|
Nfc = 'nfc',
|
|
20075
20108
|
Ble = 'ble',
|
|
20076
20109
|
Cable = 'cable',
|
|
20110
|
+
Hybrid = 'hybrid',
|
|
20111
|
+
SmartCard = 'smart-card',
|
|
20077
20112
|
Internal = 'internal',
|
|
20078
20113
|
}
|
|
20079
20114
|
|
|
@@ -30,6 +30,8 @@ const SKILL_DISPLAY_NAMES: Record<SkillName, string> = {
|
|
|
30
30
|
network: 'Network requests',
|
|
31
31
|
accessibility: 'Accessibility',
|
|
32
32
|
performance: 'Performance',
|
|
33
|
+
storage: 'Storage',
|
|
34
|
+
sources: 'Workspace files and sources',
|
|
33
35
|
};
|
|
34
36
|
|
|
35
37
|
const preamble = `You are the most advanced unified AI assistant integrated into Chrome DevTools.
|
|
@@ -81,6 +83,12 @@ export class AiAgent2 extends AiAgent<unknown> {
|
|
|
81
83
|
return {};
|
|
82
84
|
}
|
|
83
85
|
|
|
86
|
+
protected override async preRun(): Promise<void> {
|
|
87
|
+
if (this.context && !this.context.isLoggingEnabled()) {
|
|
88
|
+
this.setServerSideLoggingActive(false);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
84
92
|
readonly #activeSkills = new Set<SkillName>();
|
|
85
93
|
readonly #declaredTools = new Set<string>();
|
|
86
94
|
|
|
@@ -242,6 +250,9 @@ User query: ${enhancedQuery}`;
|
|
|
242
250
|
getEstablishedOrigin: () => this.#getConversationOrigin(),
|
|
243
251
|
lighthouseRecording: this.#lighthouseRecording,
|
|
244
252
|
performanceRecordAndReload: this.#performanceRecordAndReload,
|
|
253
|
+
setLoggingEnabled: (enabled: boolean) => {
|
|
254
|
+
this.setServerSideLoggingActive(enabled);
|
|
255
|
+
},
|
|
245
256
|
};
|
|
246
257
|
return tool.handler(args, context, options);
|
|
247
258
|
},
|
|
@@ -27,7 +27,7 @@ import {ContextSelectionAgent} from './agents/ContextSelectionAgent.js';
|
|
|
27
27
|
import {FileAgent} from './agents/FileAgent.js';
|
|
28
28
|
import {NetworkAgent} from './agents/NetworkAgent.js';
|
|
29
29
|
import {PerformanceAgent} from './agents/PerformanceAgent.js';
|
|
30
|
-
import {StorageAgent
|
|
30
|
+
import {StorageAgent} from './agents/StorageAgent.js';
|
|
31
31
|
import {StylingAgent} from './agents/StylingAgent.js';
|
|
32
32
|
import {AiAgent2} from './AiAgent2.js';
|
|
33
33
|
import {AiHistoryStorage, ConversationType, type SerializedConversation} from './AiHistoryStorage.js';
|
|
@@ -37,6 +37,9 @@ import {DOMNodeContext} from './contexts/DOMNodeContext.js';
|
|
|
37
37
|
import {FileContext} from './contexts/FileContext.js';
|
|
38
38
|
import {PerformanceTraceContext} from './contexts/PerformanceTraceContext.js';
|
|
39
39
|
import {RequestContext} from './contexts/RequestContext.js';
|
|
40
|
+
import {StorageContext} from './contexts/StorageContext.js';
|
|
41
|
+
import {ToolAnnotation} from './tools/Tool.js';
|
|
42
|
+
import {ToolRegistry} from './tools/ToolRegistry.js';
|
|
40
43
|
|
|
41
44
|
export const NOT_FOUND_IMAGE_DATA = '';
|
|
42
45
|
export const CONTEXT_TITLE = 'Analyzing data';
|
|
@@ -324,10 +327,18 @@ export class AiConversation {
|
|
|
324
327
|
case ResponseType.SIDE_EFFECT: {
|
|
325
328
|
return {...item, confirm: undefined};
|
|
326
329
|
}
|
|
327
|
-
case ResponseType.CONTEXT:
|
|
328
|
-
case ResponseType.ACTION: {
|
|
330
|
+
case ResponseType.CONTEXT: {
|
|
329
331
|
return {...item, widgets: undefined};
|
|
330
332
|
}
|
|
333
|
+
case ResponseType.ACTION: {
|
|
334
|
+
const tool = item.toolName ? ToolRegistry.get(item.toolName) : undefined;
|
|
335
|
+
const shouldRedact = tool?.annotations?.includes(ToolAnnotation.REDACT_FROM_HISTORY);
|
|
336
|
+
return {
|
|
337
|
+
...item,
|
|
338
|
+
output: shouldRedact ? '<redacted>' : item.output,
|
|
339
|
+
widgets: undefined,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
331
342
|
default:
|
|
332
343
|
return item;
|
|
333
344
|
}
|
|
@@ -361,7 +372,7 @@ export class AiConversation {
|
|
|
361
372
|
|
|
362
373
|
const options = {
|
|
363
374
|
aidaClient: this.#aidaClient,
|
|
364
|
-
|
|
375
|
+
serverSideLoggingAllowed: isAiAssistanceServerSideLoggingAllowed(),
|
|
365
376
|
sessionId: this.id,
|
|
366
377
|
changeManager: this.#changeManager,
|
|
367
378
|
performanceRecordAndReload: this.#performanceRecordAndReload,
|
|
@@ -540,7 +551,13 @@ export class AiConversation {
|
|
|
540
551
|
};
|
|
541
552
|
}
|
|
542
553
|
|
|
543
|
-
|
|
554
|
+
/**
|
|
555
|
+
* Checks whether server-side logging is allowed by the global system policy.
|
|
556
|
+
* Note that even if this returns true, individual agents can still dynamically
|
|
557
|
+
* deactivate/activate logging during their execution (e.g., when handling
|
|
558
|
+
* sensitive tools).
|
|
559
|
+
*/
|
|
560
|
+
function isAiAssistanceServerSideLoggingAllowed(): boolean {
|
|
544
561
|
return !Root.Runtime.hostConfig.aidaAvailability?.disallowLogging;
|
|
545
562
|
}
|
|
546
563
|
|