chrome-devtools-frontend 1.0.1674545 → 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/.agents/skills/devtools-ux-writing-refactor/SKILL.md +26 -9
- package/WATCHLISTS +0 -4
- package/front_end/core/common/ParsedURL.ts +5 -1
- package/front_end/core/common/SettingRegistration.ts +29 -8
- package/front_end/core/common/Settings.ts +0 -77
- package/front_end/core/root/Runtime.ts +4 -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/core/sdk/TargetManager.ts +18 -0
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +213 -23
- package/front_end/entrypoints/main/MainImpl.ts +32 -0
- package/front_end/foundation/Universe.ts +44 -29
- 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 +15 -192
- 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/emulation/DeviceModeModel.ts +60 -71
- package/front_end/models/emulation/EmulatedDevices.ts +18 -66
- 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/AutomaticFileSystemManager.ts +2 -2
- package/front_end/models/persistence/IsolatedFileSystem.ts +7 -8
- package/front_end/models/persistence/IsolatedFileSystemManager.ts +22 -31
- 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/models/workspace/FileManager.ts +13 -6
- 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 +29 -12
- package/front_end/panels/application/components/AdsView.ts +24 -1
- package/front_end/panels/application/components/adsView.css +27 -21
- package/front_end/panels/autofill/AutofillView.ts +12 -12
- package/front_end/panels/autofill/autofill-meta.ts +2 -2
- 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/ElementsTreeElement.ts +550 -327
- package/front_end/panels/elements/ElementsTreeOutline.ts +1 -1
- 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/js_timeline/js_timeline-meta.ts +8 -8
- package/front_end/panels/layer_viewer/LayerDetailsView.ts +30 -30
- package/front_end/panels/layer_viewer/LayerTreeOutline.ts +6 -6
- package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
- package/front_end/panels/layer_viewer/Layers3DView.ts +11 -11
- package/front_end/panels/layer_viewer/PaintProfilerView.ts +8 -8
- package/front_end/panels/layer_viewer/TransformController.ts +3 -3
- package/front_end/panels/layer_viewer/layer_viewer-meta.ts +11 -11
- package/front_end/panels/media/PlayerMessagesView.ts +149 -68
- package/front_end/panels/mobile_throttling/ThrottlingManager.ts +1 -58
- package/front_end/panels/mobile_throttling/mobile_throttling.ts +0 -10
- 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/protocol_monitor/ProtocolMonitor.ts +7 -0
- package/front_end/panels/recorder/RecorderPanel.ts +2 -3
- package/front_end/panels/screencast/ScreencastView.ts +148 -138
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +1 -2
- 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 +558 -0
- 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 +13 -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/data_grid/DataGridElement.ts +40 -0
- 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/legacy/components/utils/Linkifier.ts +1 -0
- package/front_end/ui/settings/SettingUIRegistration.ts +59 -6
- package/front_end/ui/visual_logging/Debugging.ts +1 -5
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
- package/front_end/ui/visual_logging/LoggingConfig.ts +21 -0
- package/front_end/ui/visual_logging/visual_logging.ts +9 -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/mobile_throttling/MobileThrottlingSelector.ts +0 -92
- /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
|
@@ -247,6 +247,18 @@ export class ResourceTreeModel extends SDKModel<EventTypes> {
|
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
+
navigatedWithinDocument(frameId: Protocol.Page.FrameId, url: string): void {
|
|
251
|
+
const frame = this.framesInternal.get(frameId);
|
|
252
|
+
if (!frame) {
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
frame.navigatedWithinDocument(url as Platform.DevToolsPath.UrlString);
|
|
256
|
+
if (frame.isMainFrame()) {
|
|
257
|
+
this.target().setInspectedURL(frame.url);
|
|
258
|
+
}
|
|
259
|
+
this.dispatchEventToListeners(Events.FrameNavigatedWithinDocument, frame);
|
|
260
|
+
}
|
|
261
|
+
|
|
250
262
|
frameDetached(frameId: Protocol.Page.FrameId, isSwap: boolean): void {
|
|
251
263
|
// Do nothing unless cached resource tree is processed - it will overwrite everything.
|
|
252
264
|
if (!this.#cachedResourcesProcessed) {
|
|
@@ -584,6 +596,7 @@ export enum Events {
|
|
|
584
596
|
/* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */
|
|
585
597
|
FrameAdded = 'FrameAdded',
|
|
586
598
|
FrameNavigated = 'FrameNavigated',
|
|
599
|
+
FrameNavigatedWithinDocument = 'FrameNavigatedWithinDocument',
|
|
587
600
|
FrameDetached = 'FrameDetached',
|
|
588
601
|
FrameResized = 'FrameResized',
|
|
589
602
|
FrameWillNavigate = 'FrameWillNavigate',
|
|
@@ -607,6 +620,7 @@ export enum Events {
|
|
|
607
620
|
export interface EventTypes {
|
|
608
621
|
[Events.FrameAdded]: ResourceTreeFrame;
|
|
609
622
|
[Events.FrameNavigated]: ResourceTreeFrame;
|
|
623
|
+
[Events.FrameNavigatedWithinDocument]: ResourceTreeFrame;
|
|
610
624
|
[Events.FrameDetached]: {frame: ResourceTreeFrame, isSwap: boolean};
|
|
611
625
|
[Events.FrameResized]: void;
|
|
612
626
|
[Events.FrameWillNavigate]: ResourceTreeFrame;
|
|
@@ -736,6 +750,10 @@ export class ResourceTreeFrame {
|
|
|
736
750
|
}
|
|
737
751
|
}
|
|
738
752
|
|
|
753
|
+
navigatedWithinDocument(url: Platform.DevToolsPath.UrlString): void {
|
|
754
|
+
this.#url = url;
|
|
755
|
+
}
|
|
756
|
+
|
|
739
757
|
resourceTreeModel(): ResourceTreeModel {
|
|
740
758
|
return this.#model;
|
|
741
759
|
}
|
|
@@ -1096,7 +1114,8 @@ export class PageDispatcher implements ProtocolProxyApi.PageDispatcher {
|
|
|
1096
1114
|
frameStartedNavigating({}: Protocol.Page.FrameStartedNavigatingEvent): void {
|
|
1097
1115
|
}
|
|
1098
1116
|
|
|
1099
|
-
navigatedWithinDocument({}: Protocol.Page.NavigatedWithinDocumentEvent): void {
|
|
1117
|
+
navigatedWithinDocument({frameId, url}: Protocol.Page.NavigatedWithinDocumentEvent): void {
|
|
1118
|
+
this.#resourceTreeModel.navigatedWithinDocument(frameId, url);
|
|
1100
1119
|
}
|
|
1101
1120
|
|
|
1102
1121
|
frameResized(): void {
|
|
@@ -36,7 +36,6 @@ import * as TextUtils from '../text_utils/text_utils.js';
|
|
|
36
36
|
import {
|
|
37
37
|
COND_BREAKPOINT_SOURCE_URL,
|
|
38
38
|
type DebuggerModel,
|
|
39
|
-
Events,
|
|
40
39
|
Location,
|
|
41
40
|
LOGPOINT_SOURCE_URL,
|
|
42
41
|
} from './DebuggerModel.js';
|
|
@@ -80,7 +79,6 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
|
|
|
80
79
|
executionContextId: number;
|
|
81
80
|
hash: string;
|
|
82
81
|
readonly #isContentScript: boolean;
|
|
83
|
-
readonly #isLiveEdit: boolean;
|
|
84
82
|
sourceMapURL?: string;
|
|
85
83
|
debugSymbols: Protocol.Debugger.DebugSymbols|null;
|
|
86
84
|
hasSourceURL: boolean;
|
|
@@ -92,13 +90,13 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
|
|
|
92
90
|
readonly #embedderName: Platform.DevToolsPath.UrlString|null;
|
|
93
91
|
readonly isModule: boolean|null;
|
|
94
92
|
readonly buildId: string|null;
|
|
95
|
-
constructor(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
93
|
+
constructor(debuggerModel: DebuggerModel, scriptId: Protocol.Runtime.ScriptId,
|
|
94
|
+
sourceURL: Platform.DevToolsPath.UrlString, startLine: number, startColumn: number, endLine: number,
|
|
95
|
+
endColumn: number, executionContextId: number, hash: string, isContentScript: boolean,
|
|
96
|
+
sourceMapURL: string|undefined, hasSourceURL: boolean, length: number, isModule: boolean|null,
|
|
97
|
+
originStackTrace: Protocol.Runtime.StackTrace|null, codeOffset: number|null, scriptLanguage: string|null,
|
|
98
|
+
debugSymbols: Protocol.Debugger.DebugSymbols|null, embedderName: Platform.DevToolsPath.UrlString|null,
|
|
99
|
+
buildId: string|null) {
|
|
102
100
|
this.debuggerModel = debuggerModel;
|
|
103
101
|
this.scriptId = scriptId;
|
|
104
102
|
this.sourceURL = sourceURL;
|
|
@@ -112,7 +110,6 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
|
|
|
112
110
|
this.executionContextId = executionContextId;
|
|
113
111
|
this.hash = hash;
|
|
114
112
|
this.#isContentScript = isContentScript;
|
|
115
|
-
this.#isLiveEdit = isLiveEdit;
|
|
116
113
|
this.sourceMapURL = sourceMapURL;
|
|
117
114
|
this.debugSymbols = debugSymbols;
|
|
118
115
|
this.hasSourceURL = hasSourceURL;
|
|
@@ -175,10 +172,6 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
|
|
|
175
172
|
return this.debuggerModel.runtimeModel().executionContext(this.executionContextId);
|
|
176
173
|
}
|
|
177
174
|
|
|
178
|
-
isLiveEdit(): boolean {
|
|
179
|
-
return this.#isLiveEdit;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
175
|
contentURL(): Platform.DevToolsPath.UrlString {
|
|
183
176
|
return this.sourceURL;
|
|
184
177
|
}
|
|
@@ -261,8 +254,8 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
|
|
|
261
254
|
requestContentData(): Promise<TextUtils.ContentData.ContentDataOrError> {
|
|
262
255
|
if (!this.#contentPromise) {
|
|
263
256
|
const fileSizeToCache = 65535; // We won't bother cacheing files under 64K
|
|
264
|
-
if (this.hash &&
|
|
265
|
-
// For large files that
|
|
257
|
+
if (this.hash && this.contentLength > fileSizeToCache) {
|
|
258
|
+
// For large files that have a hash, we keep a content-addressed cache
|
|
266
259
|
// so we don't need to load multiple copies or disassemble wasm modules multiple times.
|
|
267
260
|
if (!scriptCacheInstance) {
|
|
268
261
|
// Initialize script cache singleton. Add a finalizer for removing keys from the map.
|
|
@@ -331,43 +324,6 @@ export class Script implements TextUtils.ContentProvider.ContentProvider, FrameA
|
|
|
331
324
|
return TextUtils.TextUtils.performSearchInSearchMatches(matches.result || [], query, caseSensitive, isRegex);
|
|
332
325
|
}
|
|
333
326
|
|
|
334
|
-
private appendSourceURLCommentIfNeeded(source: string): string {
|
|
335
|
-
if (!this.hasSourceURL) {
|
|
336
|
-
return source;
|
|
337
|
-
}
|
|
338
|
-
return source + '\n //# sourceURL=' + this.sourceURL;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
async editSource(newSource: string): Promise<{
|
|
342
|
-
changed: boolean,
|
|
343
|
-
status: Protocol.Debugger.SetScriptSourceResponseStatus,
|
|
344
|
-
exceptionDetails?: Protocol.Runtime.ExceptionDetails,
|
|
345
|
-
}> {
|
|
346
|
-
newSource = Script.trimSourceURLComment(newSource);
|
|
347
|
-
// We append correct #sourceURL to script for consistency only. It's not actually needed for things to work correctly.
|
|
348
|
-
newSource = this.appendSourceURLCommentIfNeeded(newSource);
|
|
349
|
-
|
|
350
|
-
const oldSource = TextUtils.ContentData.ContentData.textOr(await this.requestContentData(), null);
|
|
351
|
-
if (oldSource === newSource) {
|
|
352
|
-
return {changed: false, status: Protocol.Debugger.SetScriptSourceResponseStatus.Ok};
|
|
353
|
-
}
|
|
354
|
-
const response = await this.debuggerModel.target().debuggerAgent().invoke_setScriptSource(
|
|
355
|
-
{scriptId: this.scriptId, scriptSource: newSource, allowTopFrameEditing: true});
|
|
356
|
-
if (response.getError()) {
|
|
357
|
-
// Something went seriously wrong, like the V8 inspector no longer knowing about this script without
|
|
358
|
-
// shutting down the Debugger agent etc.
|
|
359
|
-
throw new Error(`Script#editSource failed for script with id ${this.scriptId}: ${response.getError()}`);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
if (!response.getError() && response.status === Protocol.Debugger.SetScriptSourceResponseStatus.Ok) {
|
|
363
|
-
this.#contentPromise =
|
|
364
|
-
Promise.resolve(new TextUtils.ContentData.ContentData(newSource, /* isBase64 */ false, 'text/javascript'));
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
this.debuggerModel.dispatchEventToListeners(Events.ScriptSourceWasEdited, {script: this, status: response.status});
|
|
368
|
-
return {changed: true, status: response.status, exceptionDetails: response.exceptionDetails};
|
|
369
|
-
}
|
|
370
|
-
|
|
371
327
|
rawLocation(lineNumber: number, columnNumber: number): Location|null {
|
|
372
328
|
if (this.containsLocation(lineNumber, columnNumber)) {
|
|
373
329
|
return new Location(this.debuggerModel, this.scriptId, lineNumber, columnNumber);
|
|
@@ -122,6 +122,24 @@ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes
|
|
|
122
122
|
Root.DevToolsContext.globalInstance().delete(TargetManager);
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
// TODO(crbug.com/542394587): Should be `Symbol.dispose`
|
|
126
|
+
dispose(): void {
|
|
127
|
+
for (const target of this.targets()) {
|
|
128
|
+
target.dispose('TargetManager disposed');
|
|
129
|
+
}
|
|
130
|
+
if (this.#browserTarget) {
|
|
131
|
+
this.#browserTarget.dispose('TargetManager disposed');
|
|
132
|
+
this.#browserTarget = null;
|
|
133
|
+
}
|
|
134
|
+
this.#targets.clear();
|
|
135
|
+
this.#observers.clear();
|
|
136
|
+
this.#modelObservers.clear();
|
|
137
|
+
this.#modelListeners.clear();
|
|
138
|
+
this.#scopeChangeListeners.clear();
|
|
139
|
+
this.#scopeTarget = null;
|
|
140
|
+
this.#scopedObservers = new WeakSet();
|
|
141
|
+
}
|
|
142
|
+
|
|
125
143
|
onInspectedURLChange(target: Target): void {
|
|
126
144
|
if (target !== this.#scopeTarget) {
|
|
127
145
|
return;
|
|
@@ -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';
|
|
@@ -209,6 +210,7 @@ export class MainImpl {
|
|
|
209
210
|
hostConfig: Root.Runtime.hostConfig,
|
|
210
211
|
inspectorFrontendHost: Host.InspectorFrontendHost.InspectorFrontendHostInstance,
|
|
211
212
|
supportsEmulation: this.#supportsEmulation,
|
|
213
|
+
initAutomaticFilesystem: true,
|
|
212
214
|
};
|
|
213
215
|
this.#universe = new Foundation.Universe.Universe(creationOptions);
|
|
214
216
|
Root.DevToolsContext.setGlobalInstance(this.#universe.context as Root.DevToolsContext.WritableDevToolsContext);
|
|
@@ -997,3 +999,33 @@ export class ReloadActionDelegate implements UI.ActionRegistration.ActionDelegat
|
|
|
997
999
|
return false;
|
|
998
1000
|
}
|
|
999
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;
|
|
@@ -28,6 +28,7 @@ export interface CreationOptions {
|
|
|
28
28
|
hostConfig: Root.Runtime.HostConfig;
|
|
29
29
|
inspectorFrontendHost: Host.InspectorFrontendHostAPI.InspectorFrontendHostAPI;
|
|
30
30
|
supportsEmulation: boolean;
|
|
31
|
+
initAutomaticFilesystem?: boolean;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
export class Universe {
|
|
@@ -37,6 +38,7 @@ export class Universe {
|
|
|
37
38
|
readonly context: Root.DevToolsContext.DevToolsContext;
|
|
38
39
|
readonly autofillManager: AutofillManager.AutofillManager.AutofillManager;
|
|
39
40
|
readonly supportsEmulation: boolean;
|
|
41
|
+
readonly initAutomaticFilesystem: boolean;
|
|
40
42
|
readonly fileSystemWorkspaceBinding: Persistence.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding;
|
|
41
43
|
|
|
42
44
|
constructor(options: CreationOptions) {
|
|
@@ -78,11 +80,17 @@ export class Universe {
|
|
|
78
80
|
const multitargetNetworkManager = new SDK.NetworkManager.MultitargetNetworkManager(targetManager);
|
|
79
81
|
context.set(SDK.NetworkManager.MultitargetNetworkManager, multitargetNetworkManager);
|
|
80
82
|
|
|
83
|
+
const workspace = new Workspace.Workspace.WorkspaceImpl();
|
|
84
|
+
context.set(Workspace.Workspace.WorkspaceImpl, workspace);
|
|
85
|
+
|
|
86
|
+
const fileManager = new Workspace.FileManager.FileManager();
|
|
87
|
+
context.set(Workspace.FileManager.FileManager, fileManager);
|
|
88
|
+
|
|
81
89
|
this.supportsEmulation = options.supportsEmulation;
|
|
82
90
|
let deviceModeModel = null;
|
|
83
91
|
if (options.supportsEmulation) {
|
|
84
|
-
deviceModeModel =
|
|
85
|
-
|
|
92
|
+
deviceModeModel = new Emulation.DeviceModeModel.DeviceModeModel(targetManager, settings,
|
|
93
|
+
multitargetNetworkManager, fileManager);
|
|
86
94
|
context.set(Emulation.DeviceModeModel.DeviceModeModel, deviceModeModel);
|
|
87
95
|
}
|
|
88
96
|
|
|
@@ -90,15 +98,20 @@ export class Universe {
|
|
|
90
98
|
new SDK.PageResourceLoader.PageResourceLoader(targetManager, settings, multitargetNetworkManager, null);
|
|
91
99
|
context.set(SDK.PageResourceLoader.PageResourceLoader, pageResourceLoader);
|
|
92
100
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
this.initAutomaticFilesystem = options.initAutomaticFilesystem ?? false;
|
|
102
|
+
let automaticFileSystemManager = null;
|
|
103
|
+
let projectSettingsModel = null;
|
|
104
|
+
if (this.initAutomaticFilesystem) {
|
|
105
|
+
projectSettingsModel = new ProjectSettings.ProjectSettingsModel.ProjectSettingsModel(
|
|
106
|
+
pageResourceLoader,
|
|
107
|
+
targetManager,
|
|
108
|
+
);
|
|
109
|
+
context.set(ProjectSettings.ProjectSettingsModel.ProjectSettingsModel, projectSettingsModel);
|
|
110
|
+
|
|
111
|
+
automaticFileSystemManager = new Persistence.AutomaticFileSystemManager.AutomaticFileSystemManager(
|
|
112
|
+
options.inspectorFrontendHost, projectSettingsModel);
|
|
113
|
+
context.set(Persistence.AutomaticFileSystemManager.AutomaticFileSystemManager, automaticFileSystemManager);
|
|
114
|
+
}
|
|
102
115
|
|
|
103
116
|
const cpuThrottlingManager = new SDK.CPUThrottlingManager.CPUThrottlingManager(settings, targetManager);
|
|
104
117
|
context.set(SDK.CPUThrottlingManager.CPUThrottlingManager, cpuThrottlingManager);
|
|
@@ -117,22 +130,18 @@ export class Universe {
|
|
|
117
130
|
const domModelUndoStack = new SDK.DOMModel.DOMModelUndoStack();
|
|
118
131
|
context.set(SDK.DOMModel.DOMModelUndoStack, domModelUndoStack);
|
|
119
132
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
context.set(
|
|
133
|
-
Persistence.AutomaticFileSystemWorkspaceBinding.AutomaticFileSystemWorkspaceBinding,
|
|
134
|
-
automaticFileSystemWorkspaceBinding,
|
|
135
|
-
);
|
|
133
|
+
if (automaticFileSystemManager) {
|
|
134
|
+
const automaticFileSystemWorkspaceBinding =
|
|
135
|
+
new Persistence.AutomaticFileSystemWorkspaceBinding.AutomaticFileSystemWorkspaceBinding(
|
|
136
|
+
automaticFileSystemManager,
|
|
137
|
+
isolatedFileSystemManager,
|
|
138
|
+
workspace,
|
|
139
|
+
);
|
|
140
|
+
context.set(
|
|
141
|
+
Persistence.AutomaticFileSystemWorkspaceBinding.AutomaticFileSystemWorkspaceBinding,
|
|
142
|
+
automaticFileSystemWorkspaceBinding,
|
|
143
|
+
);
|
|
144
|
+
}
|
|
136
145
|
|
|
137
146
|
this.fileSystemWorkspaceBinding =
|
|
138
147
|
new Persistence.FileSystemWorkspaceBinding.FileSystemWorkspaceBinding(isolatedFileSystemManager, workspace);
|
|
@@ -226,6 +235,11 @@ export class Universe {
|
|
|
226
235
|
dispose(): void {
|
|
227
236
|
// TODO(crbug.com/542394587): Track these in a DisposableStack.
|
|
228
237
|
this.context.get(Persistence.IsolatedFileSystemManager.IsolatedFileSystemManager).dispose();
|
|
238
|
+
if (this.initAutomaticFilesystem) {
|
|
239
|
+
this.context.get(Persistence.AutomaticFileSystemManager.AutomaticFileSystemManager).dispose();
|
|
240
|
+
}
|
|
241
|
+
this.context.get(Workspace.FileManager.FileManager).dispose();
|
|
242
|
+
this.context.get(SDK.TargetManager.TargetManager).dispose();
|
|
229
243
|
}
|
|
230
244
|
|
|
231
245
|
get automaticFileSystemManager(): Persistence.AutomaticFileSystemManager.AutomaticFileSystemManager {
|
|
@@ -338,8 +352,9 @@ export class Universe {
|
|
|
338
352
|
return this.context.get(Bindings.PresentationConsoleMessageHelper.PresentationConsoleMessageManager);
|
|
339
353
|
}
|
|
340
354
|
|
|
341
|
-
get projectSettingsModel(): ProjectSettings.ProjectSettingsModel.ProjectSettingsModel {
|
|
342
|
-
return this.context.get(ProjectSettings.ProjectSettingsModel.ProjectSettingsModel)
|
|
355
|
+
get projectSettingsModel(): ProjectSettings.ProjectSettingsModel.ProjectSettingsModel|null {
|
|
356
|
+
return this.initAutomaticFilesystem ? this.context.get(ProjectSettings.ProjectSettingsModel.ProjectSettingsModel) :
|
|
357
|
+
null;
|
|
343
358
|
}
|
|
344
359
|
|
|
345
360
|
get settings(): Common.Settings.Settings {
|