chrome-devtools-frontend 1.0.1025175 → 1.0.1026673

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.
Files changed (47) hide show
  1. package/config/gni/devtools_grd_files.gni +1 -0
  2. package/config/gni/devtools_image_files.gni +1 -0
  3. package/docs/triage_guidelines.md +1 -122
  4. package/front_end/Images/src/star_outline.svg +3 -0
  5. package/front_end/core/common/ResourceType.ts +1 -0
  6. package/front_end/core/i18n/locales/en-US.json +18 -0
  7. package/front_end/core/i18n/locales/en-XL.json +18 -0
  8. package/front_end/core/sdk/DOMModel.ts +5 -0
  9. package/front_end/core/sdk/SourceMap.ts +22 -6
  10. package/front_end/entrypoints/lighthouse_worker/LighthouseWorkerService.ts +6 -3
  11. package/front_end/generated/InspectorBackendCommands.js +5 -3
  12. package/front_end/generated/SupportedCSSProperties.js +11 -0
  13. package/front_end/generated/protocol-mapping.d.ts +14 -0
  14. package/front_end/generated/protocol-proxy-api.d.ts +10 -0
  15. package/front_end/generated/protocol.ts +67 -0
  16. package/front_end/legacy_test_runner/sources_test_runner/DebuggerTestRunner.js +1 -1
  17. package/front_end/models/bindings/CompilerScriptMapping.ts +1 -1
  18. package/front_end/models/bindings/DebuggerWorkspaceBinding.ts +7 -1
  19. package/front_end/models/bindings/IgnoreListManager.ts +18 -20
  20. package/front_end/models/issues_manager/descriptions/arAttributionUntrustworthyOrigin.md +3 -3
  21. package/front_end/models/issues_manager/descriptions/clientHintMetaTagAllowListInvalidOrigin.md +1 -1
  22. package/front_end/models/issues_manager/descriptions/clientHintMetaTagModifiedHTML.md +1 -1
  23. package/front_end/models/javascript_metadata/NativeFunctions.js +79 -67
  24. package/front_end/models/source_map_scopes/NamesResolver.ts +34 -0
  25. package/front_end/models/text_utils/TextRange.ts +8 -0
  26. package/front_end/models/timeline_model/TimelineModel.ts +18 -1
  27. package/front_end/panels/elements/ElementsTreeOutline.ts +18 -34
  28. package/front_end/panels/elements/TopLayerContainer.ts +51 -29
  29. package/front_end/panels/elements/elementsTreeOutline.css +1 -1
  30. package/front_end/panels/lighthouse/LighthouseController.ts +3 -0
  31. package/front_end/panels/network/NetworkDataGridNode.ts +1 -2
  32. package/front_end/panels/profiler/ProfilesPanel.ts +1 -0
  33. package/front_end/panels/security/SecurityPanel.ts +52 -0
  34. package/front_end/panels/security/originView.css +1 -1
  35. package/front_end/panels/sources/CallStackSidebarPane.ts +45 -16
  36. package/front_end/panels/sources/DebuggerPlugin.ts +2 -2
  37. package/front_end/panels/sources/callStackSidebarPane.css +15 -9
  38. package/front_end/panels/sources/navigatorTree.css +3 -3
  39. package/front_end/panels/sources/watchExpressionsSidebarPane.css +6 -0
  40. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +1 -1
  41. package/front_end/ui/components/docs/building-ui-documentation/CreatingComponents.md +172 -1
  42. package/front_end/ui/components/text_editor/TextEditor.ts +3 -0
  43. package/front_end/ui/legacy/components/data_grid/dataGrid.css +2 -1
  44. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +3 -2
  45. package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +6 -1
  46. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +5 -4
  47. package/package.json +1 -1
@@ -97,17 +97,25 @@ export class IgnoreListManager implements SDK.TargetManager.SDKModelObserver<SDK
97
97
  return debuggerModel.setBlackboxPatterns(patterns);
98
98
  }
99
99
 
100
- isIgnoreListedUISourceCode(uiSourceCode: Workspace.UISourceCode.UISourceCode): boolean {
100
+ isUserOrSourceMapIgnoreListedUISourceCode(
101
+ uiSourceCode: Workspace.UISourceCode.UISourceCode, sourceMap: SDK.SourceMap.SourceMap|null): boolean {
101
102
  const projectType = uiSourceCode.project().type();
102
103
  const isContentScript = projectType === Workspace.Workspace.projectTypes.ContentScripts;
103
104
  if (isContentScript && Common.Settings.Settings.instance().moduleSetting('skipContentScripts').get()) {
104
105
  return true;
105
106
  }
106
107
  const url = this.uiSourceCodeURL(uiSourceCode);
107
- return url ? this.isIgnoreListedURL(url) : false;
108
+ return url ? this.isUserOrSourceMapIgnoreListedURL(url, sourceMap) : false;
108
109
  }
109
110
 
110
- isIgnoreListedURL(url: Platform.DevToolsPath.UrlString, isContentScript?: boolean): boolean {
111
+ isUserOrSourceMapIgnoreListedURL(url: Platform.DevToolsPath.UrlString, sourceMap: SDK.SourceMap.SourceMap|null):
112
+ boolean {
113
+ const userIgnoreListed = this.isUserIgnoreListedURL(url);
114
+ const sourceMapIgnoreListed = sourceMap?.hasIgnoreListHint(url) ?? false;
115
+ return userIgnoreListed || sourceMapIgnoreListed;
116
+ }
117
+
118
+ isUserIgnoreListedURL(url: Platform.DevToolsPath.UrlString, isContentScript?: boolean): boolean {
111
119
  if (this.#isIgnoreListedURLCache.has(url)) {
112
120
  return Boolean(this.#isIgnoreListedURLCache.get(url));
113
121
  }
@@ -137,8 +145,9 @@ export class IgnoreListManager implements SDK.TargetManager.SDKModelObserver<SDK
137
145
 
138
146
  private async updateScriptRanges(script: SDK.Script.Script, sourceMap: SDK.SourceMap.SourceMap|null): Promise<void> {
139
147
  let hasIgnoreListedMappings = false;
140
- if (!IgnoreListManager.instance().isIgnoreListedURL(script.sourceURL, script.isContentScript())) {
141
- hasIgnoreListedMappings = sourceMap ? sourceMap.sourceURLs().some(url => this.isIgnoreListedURL(url)) : false;
148
+ if (!IgnoreListManager.instance().isUserIgnoreListedURL(script.sourceURL, script.isContentScript())) {
149
+ hasIgnoreListedMappings =
150
+ sourceMap?.sourceURLs().some(url => this.isUserOrSourceMapIgnoreListedURL(url, sourceMap)) ?? false;
142
151
  }
143
152
  if (!hasIgnoreListedMappings) {
144
153
  if (scriptToRange.get(script) && await script.setBlackboxedRanges([])) {
@@ -152,21 +161,10 @@ export class IgnoreListManager implements SDK.TargetManager.SDKModelObserver<SDK
152
161
  return;
153
162
  }
154
163
 
155
- const mappings = sourceMap.mappings();
156
- const newRanges: SourceRange[] = [];
157
- if (mappings.length > 0) {
158
- let currentIgnoreListed = false;
159
- if (mappings[0].lineNumber !== 0 || mappings[0].columnNumber !== 0) {
160
- newRanges.push({lineNumber: 0, columnNumber: 0});
161
- currentIgnoreListed = true;
162
- }
163
- for (const mapping of mappings) {
164
- if (mapping.sourceURL && currentIgnoreListed !== this.isIgnoreListedURL(mapping.sourceURL)) {
165
- newRanges.push({lineNumber: mapping.lineNumber, columnNumber: mapping.columnNumber});
166
- currentIgnoreListed = !currentIgnoreListed;
167
- }
168
- }
169
- }
164
+ const newRanges =
165
+ sourceMap
166
+ .findRanges(srcURL => this.isUserOrSourceMapIgnoreListedURL(srcURL, sourceMap), {isStartMatching: true})
167
+ .flatMap(range => [range.start, range.end]);
170
168
 
171
169
  const oldRanges = scriptToRange.get(script) || [];
172
170
  if (!isEqual(oldRanges, newRanges) && await script.setBlackboxedRanges(newRanges)) {
@@ -1,4 +1,4 @@
1
- # Ensure the origin of an attribution trigger redirect is trustworthy
1
+ # Ensure the origin of an attribution-registration request is trustworthy
2
2
 
3
- An attribution was not recorded because the origin of the attribution trigger redirect was
4
- not trustworthy. For a redirect of the form `https://<attributionreportto>/.well-known/attribution-reporting/trigger-attribution[?data=<data>]`, the `<attributionreportto>` origin must be trustworthy.
3
+ An attribution source or trigger was not registered because the origin of the
4
+ request was not trustworthy.
@@ -1,4 +1,4 @@
1
1
  # Client Hint meta tag contained invalid origin
2
2
 
3
- Items in the accept-ch meta tag allow list must be valid origins.
3
+ Items in the delegate-ch meta tag allow list must be valid origins.
4
4
  No special values (e.g. self, none, and *) are permitted.
@@ -1,4 +1,4 @@
1
1
  # Client Hint meta tag modified by javascript
2
2
 
3
- Only accept-ch meta tags in the original HTML sent from the server
3
+ Only delegate-ch meta tags in the original HTML sent from the server
4
4
  are respected. Any injected via javascript (or other means) are ignored.
@@ -846,7 +846,7 @@ export const NativeFunctions = [
846
846
  {
847
847
  name: 'addEventListener',
848
848
  signatures: [['type','listener','?options']],
849
- receivers: ['AbortSignal','SharedWorker','Worker','ServiceWorker','Animation','AudioBufferSourceNode','AudioContext','AudioScheduledSourceNode','AudioWorkletNode','BaseAudioContext','BroadcastChannel','CSSAnimation','CSSTransition','CanvasCaptureMediaStreamTrack','ConstantSourceNode','Document','HTMLElement','MathMLElement','SVGElement','Element','EventSource','FileReader','FontFaceSet','Window','HTMLAnchorElement','HTMLAreaElement','HTMLAudioElement','HTMLBRElement','HTMLBaseElement','HTMLBodyElement','HTMLButtonElement','HTMLCanvasElement','HTMLDListElement','HTMLDataElement','HTMLDataListElement','HTMLDetailsElement','HTMLDialogElement','HTMLDirectoryElement','HTMLDivElement','HTMLDocument','HTMLEmbedElement','HTMLFieldSetElement','HTMLFontElement','HTMLFormElement','HTMLFrameElement','HTMLFrameSetElement','HTMLHRElement','HTMLHeadElement','HTMLHeadingElement','HTMLHtmlElement','HTMLIFrameElement','HTMLImageElement','HTMLInputElement','HTMLLIElement','HTMLLabelElement','HTMLLegendElement','HTMLLinkElement','HTMLMapElement','HTMLMarqueeElement','HTMLMediaElement','HTMLMenuElement','HTMLMetaElement','HTMLMeterElement','HTMLModElement','HTMLOListElement','HTMLObjectElement','HTMLOptGroupElement','HTMLOptionElement','HTMLOutputElement','HTMLParagraphElement','HTMLParamElement','HTMLPictureElement','HTMLPreElement','HTMLProgressElement','HTMLQuoteElement','HTMLScriptElement','HTMLSelectElement','HTMLSlotElement','HTMLSourceElement','HTMLSpanElement','HTMLStyleElement','HTMLTableCaptionElement','HTMLTableCellElement','HTMLTableColElement','HTMLTableDataCellElement','HTMLTableElement','HTMLTableHeaderCellElement','HTMLTableRowElement','HTMLTableSectionElement','HTMLTemplateElement','HTMLTextAreaElement','HTMLTimeElement','HTMLTitleElement','HTMLTrackElement','HTMLUListElement','HTMLUnknownElement','HTMLVideoElement','IDBDatabase','IDBOpenDBRequest','IDBRequest','IDBTransaction','MediaDevices','MediaKeySession','MediaQueryList','MediaRecorder','MediaSource','MediaStream','MediaStreamTrack','MessagePort','Notification','OfflineAudioContext','OscillatorNode','PaymentRequest','Performance','PermissionStatus','PictureInPictureWindow','RTCDTMFSender','RTCDataChannel','RTCDtlsTransport','RTCPeerConnection','RemotePlayback','SVGAElement','SVGAnimateElement','SVGAnimateMotionElement','SVGAnimateTransformElement','SVGAnimationElement','SVGCircleElement','SVGClipPathElement','SVGComponentTransferFunctionElement','SVGDefsElement','SVGDescElement','SVGEllipseElement','SVGFEBlendElement','SVGFEColorMatrixElement','SVGFEComponentTransferElement','SVGFECompositeElement','SVGFEConvolveMatrixElement','SVGFEDiffuseLightingElement','SVGFEDisplacementMapElement','SVGFEDistantLightElement','SVGFEDropShadowElement','SVGFEFloodElement','SVGFEFuncAElement','SVGFEFuncBElement','SVGFEFuncGElement','SVGFEFuncRElement','SVGFEGaussianBlurElement','SVGFEImageElement','SVGFEMergeElement','SVGFEMergeNodeElement','SVGFEMorphologyElement','SVGFEOffsetElement','SVGFEPointLightElement','SVGFESpecularLightingElement','SVGFESpotLightElement','SVGFETileElement','SVGFETurbulenceElement','SVGFilterElement','SVGForeignObjectElement','SVGGElement','SVGGeometryElement','SVGGradientElement','SVGGraphicsElement','SVGImageElement','SVGLineElement','SVGLinearGradientElement','SVGMPathElement','SVGMarkerElement','SVGMaskElement','SVGMetadataElement','SVGPathElement','SVGPatternElement','SVGPolygonElement','SVGPolylineElement','SVGRadialGradientElement','SVGRectElement','SVGSVGElement','SVGScriptElement','SVGSetElement','SVGStopElement','SVGStyleElement','SVGSwitchElement','SVGSymbolElement','SVGTSpanElement','SVGTextContentElement','SVGTextElement','SVGTextPathElement','SVGTextPositioningElement','SVGTitleElement','SVGUseElement','SVGViewElement','ScreenOrientation','ScriptProcessorNode','ServiceWorkerContainer','ServiceWorkerRegistration','ShadowRoot','SourceBuffer','SourceBufferList','SpeechSynthesis','SpeechSynthesisUtterance','TextTrack','TextTrackCue','TextTrackList','VTTCue','VisualViewport','WebSocket','XMLDocument','XMLHttpRequest','XMLHttpRequestEventTarget','XMLHttpRequestUpload','DedicatedWorkerGlobalScope','ServiceWorkerGlobalScope','SharedWorkerGlobalScope','WorkerGlobalScope']
849
+ receivers: ['AbortSignal','SharedWorker','Worker','ServiceWorker','Animation','AudioBufferSourceNode','AudioContext','AudioScheduledSourceNode','AudioWorkletNode','BaseAudioContext','BroadcastChannel','CSSAnimation','CSSTransition','CanvasCaptureMediaStreamTrack','ConstantSourceNode','Document','HTMLElement','MathMLElement','SVGElement','Element','EventSource','FileReader','FontFaceSet','Window','HTMLAnchorElement','HTMLAreaElement','HTMLAudioElement','HTMLBRElement','HTMLBaseElement','HTMLBodyElement','HTMLButtonElement','HTMLCanvasElement','HTMLDListElement','HTMLDataElement','HTMLDataListElement','HTMLDetailsElement','HTMLDialogElement','HTMLDirectoryElement','HTMLDivElement','HTMLDocument','HTMLEmbedElement','HTMLFieldSetElement','HTMLFontElement','HTMLFormElement','HTMLFrameElement','HTMLFrameSetElement','HTMLHRElement','HTMLHeadElement','HTMLHeadingElement','HTMLHtmlElement','HTMLIFrameElement','HTMLImageElement','HTMLInputElement','HTMLLIElement','HTMLLabelElement','HTMLLegendElement','HTMLLinkElement','HTMLMapElement','HTMLMarqueeElement','HTMLMediaElement','HTMLMenuElement','HTMLMetaElement','HTMLMeterElement','HTMLModElement','HTMLOListElement','HTMLObjectElement','HTMLOptGroupElement','HTMLOptionElement','HTMLOutputElement','HTMLParagraphElement','HTMLParamElement','HTMLPictureElement','HTMLPreElement','HTMLProgressElement','HTMLQuoteElement','HTMLScriptElement','HTMLSelectElement','HTMLSlotElement','HTMLSourceElement','HTMLSpanElement','HTMLStyleElement','HTMLTableCaptionElement','HTMLTableCellElement','HTMLTableColElement','HTMLTableDataCellElement','HTMLTableElement','HTMLTableHeaderCellElement','HTMLTableRowElement','HTMLTableSectionElement','HTMLTemplateElement','HTMLTextAreaElement','HTMLTimeElement','HTMLTitleElement','HTMLTrackElement','HTMLUListElement','HTMLUnknownElement','HTMLVideoElement','IDBDatabase','IDBOpenDBRequest','IDBRequest','IDBTransaction','MIDIAccess','MIDIInput','MIDIOutput','MIDIPort','MediaDevices','MediaKeySession','MediaQueryList','MediaRecorder','MediaSource','MediaStream','MediaStreamTrack','MessagePort','Notification','OfflineAudioContext','OscillatorNode','PaymentRequest','Performance','PermissionStatus','PictureInPictureWindow','RTCDTMFSender','RTCDataChannel','RTCDtlsTransport','RTCIceTransport','RTCPeerConnection','RTCSctpTransport','RemotePlayback','SVGAElement','SVGAnimateElement','SVGAnimateMotionElement','SVGAnimateTransformElement','SVGAnimationElement','SVGCircleElement','SVGClipPathElement','SVGComponentTransferFunctionElement','SVGDefsElement','SVGDescElement','SVGEllipseElement','SVGFEBlendElement','SVGFEColorMatrixElement','SVGFEComponentTransferElement','SVGFECompositeElement','SVGFEConvolveMatrixElement','SVGFEDiffuseLightingElement','SVGFEDisplacementMapElement','SVGFEDistantLightElement','SVGFEDropShadowElement','SVGFEFloodElement','SVGFEFuncAElement','SVGFEFuncBElement','SVGFEFuncGElement','SVGFEFuncRElement','SVGFEGaussianBlurElement','SVGFEImageElement','SVGFEMergeElement','SVGFEMergeNodeElement','SVGFEMorphologyElement','SVGFEOffsetElement','SVGFEPointLightElement','SVGFESpecularLightingElement','SVGFESpotLightElement','SVGFETileElement','SVGFETurbulenceElement','SVGFilterElement','SVGForeignObjectElement','SVGGElement','SVGGeometryElement','SVGGradientElement','SVGGraphicsElement','SVGImageElement','SVGLineElement','SVGLinearGradientElement','SVGMPathElement','SVGMarkerElement','SVGMaskElement','SVGMetadataElement','SVGPathElement','SVGPatternElement','SVGPolygonElement','SVGPolylineElement','SVGRadialGradientElement','SVGRectElement','SVGSVGElement','SVGScriptElement','SVGSetElement','SVGStopElement','SVGStyleElement','SVGSwitchElement','SVGSymbolElement','SVGTSpanElement','SVGTextContentElement','SVGTextElement','SVGTextPathElement','SVGTextPositioningElement','SVGTitleElement','SVGUseElement','SVGViewElement','ScreenOrientation','ScriptProcessorNode','ServiceWorkerContainer','ServiceWorkerRegistration','ShadowRoot','SourceBuffer','SourceBufferList','SpeechSynthesis','SpeechSynthesisUtterance','TextTrack','TextTrackCue','TextTrackList','VTTCue','VisualViewport','WebSocket','XMLDocument','XMLHttpRequest','XMLHttpRequestEventTarget','XMLHttpRequestUpload','DedicatedWorkerGlobalScope','ServiceWorkerGlobalScope','SharedWorkerGlobalScope','WorkerGlobalScope']
850
850
  },
851
851
  {
852
852
  name: 'addEventListener',
@@ -856,7 +856,7 @@ export const NativeFunctions = [
856
856
  {
857
857
  name: 'removeEventListener',
858
858
  signatures: [['type','listener','?options']],
859
- receivers: ['AbortSignal','SharedWorker','Worker','ServiceWorker','Animation','AudioBufferSourceNode','AudioContext','AudioScheduledSourceNode','AudioWorkletNode','BaseAudioContext','BroadcastChannel','CSSAnimation','CSSTransition','CanvasCaptureMediaStreamTrack','ConstantSourceNode','Document','HTMLElement','MathMLElement','SVGElement','Element','EventSource','FileReader','FontFaceSet','Window','HTMLAnchorElement','HTMLAreaElement','HTMLAudioElement','HTMLBRElement','HTMLBaseElement','HTMLBodyElement','HTMLButtonElement','HTMLCanvasElement','HTMLDListElement','HTMLDataElement','HTMLDataListElement','HTMLDetailsElement','HTMLDialogElement','HTMLDirectoryElement','HTMLDivElement','HTMLDocument','HTMLEmbedElement','HTMLFieldSetElement','HTMLFontElement','HTMLFormElement','HTMLFrameElement','HTMLFrameSetElement','HTMLHRElement','HTMLHeadElement','HTMLHeadingElement','HTMLHtmlElement','HTMLIFrameElement','HTMLImageElement','HTMLInputElement','HTMLLIElement','HTMLLabelElement','HTMLLegendElement','HTMLLinkElement','HTMLMapElement','HTMLMarqueeElement','HTMLMediaElement','HTMLMenuElement','HTMLMetaElement','HTMLMeterElement','HTMLModElement','HTMLOListElement','HTMLObjectElement','HTMLOptGroupElement','HTMLOptionElement','HTMLOutputElement','HTMLParagraphElement','HTMLParamElement','HTMLPictureElement','HTMLPreElement','HTMLProgressElement','HTMLQuoteElement','HTMLScriptElement','HTMLSelectElement','HTMLSlotElement','HTMLSourceElement','HTMLSpanElement','HTMLStyleElement','HTMLTableCaptionElement','HTMLTableCellElement','HTMLTableColElement','HTMLTableDataCellElement','HTMLTableElement','HTMLTableHeaderCellElement','HTMLTableRowElement','HTMLTableSectionElement','HTMLTemplateElement','HTMLTextAreaElement','HTMLTimeElement','HTMLTitleElement','HTMLTrackElement','HTMLUListElement','HTMLUnknownElement','HTMLVideoElement','IDBDatabase','IDBOpenDBRequest','IDBRequest','IDBTransaction','MediaDevices','MediaKeySession','MediaQueryList','MediaRecorder','MediaSource','MediaStream','MediaStreamTrack','MessagePort','Notification','OfflineAudioContext','OscillatorNode','PaymentRequest','Performance','PermissionStatus','PictureInPictureWindow','RTCDTMFSender','RTCDataChannel','RTCDtlsTransport','RTCPeerConnection','RemotePlayback','SVGAElement','SVGAnimateElement','SVGAnimateMotionElement','SVGAnimateTransformElement','SVGAnimationElement','SVGCircleElement','SVGClipPathElement','SVGComponentTransferFunctionElement','SVGDefsElement','SVGDescElement','SVGEllipseElement','SVGFEBlendElement','SVGFEColorMatrixElement','SVGFEComponentTransferElement','SVGFECompositeElement','SVGFEConvolveMatrixElement','SVGFEDiffuseLightingElement','SVGFEDisplacementMapElement','SVGFEDistantLightElement','SVGFEDropShadowElement','SVGFEFloodElement','SVGFEFuncAElement','SVGFEFuncBElement','SVGFEFuncGElement','SVGFEFuncRElement','SVGFEGaussianBlurElement','SVGFEImageElement','SVGFEMergeElement','SVGFEMergeNodeElement','SVGFEMorphologyElement','SVGFEOffsetElement','SVGFEPointLightElement','SVGFESpecularLightingElement','SVGFESpotLightElement','SVGFETileElement','SVGFETurbulenceElement','SVGFilterElement','SVGForeignObjectElement','SVGGElement','SVGGeometryElement','SVGGradientElement','SVGGraphicsElement','SVGImageElement','SVGLineElement','SVGLinearGradientElement','SVGMPathElement','SVGMarkerElement','SVGMaskElement','SVGMetadataElement','SVGPathElement','SVGPatternElement','SVGPolygonElement','SVGPolylineElement','SVGRadialGradientElement','SVGRectElement','SVGSVGElement','SVGScriptElement','SVGSetElement','SVGStopElement','SVGStyleElement','SVGSwitchElement','SVGSymbolElement','SVGTSpanElement','SVGTextContentElement','SVGTextElement','SVGTextPathElement','SVGTextPositioningElement','SVGTitleElement','SVGUseElement','SVGViewElement','ScreenOrientation','ScriptProcessorNode','ServiceWorkerContainer','ServiceWorkerRegistration','ShadowRoot','SourceBuffer','SourceBufferList','SpeechSynthesis','SpeechSynthesisUtterance','TextTrack','TextTrackCue','TextTrackList','VTTCue','VisualViewport','WebSocket','XMLDocument','XMLHttpRequest','XMLHttpRequestEventTarget','XMLHttpRequestUpload','DedicatedWorkerGlobalScope','ServiceWorkerGlobalScope','SharedWorkerGlobalScope','WorkerGlobalScope']
859
+ receivers: ['AbortSignal','SharedWorker','Worker','ServiceWorker','Animation','AudioBufferSourceNode','AudioContext','AudioScheduledSourceNode','AudioWorkletNode','BaseAudioContext','BroadcastChannel','CSSAnimation','CSSTransition','CanvasCaptureMediaStreamTrack','ConstantSourceNode','Document','HTMLElement','MathMLElement','SVGElement','Element','EventSource','FileReader','FontFaceSet','Window','HTMLAnchorElement','HTMLAreaElement','HTMLAudioElement','HTMLBRElement','HTMLBaseElement','HTMLBodyElement','HTMLButtonElement','HTMLCanvasElement','HTMLDListElement','HTMLDataElement','HTMLDataListElement','HTMLDetailsElement','HTMLDialogElement','HTMLDirectoryElement','HTMLDivElement','HTMLDocument','HTMLEmbedElement','HTMLFieldSetElement','HTMLFontElement','HTMLFormElement','HTMLFrameElement','HTMLFrameSetElement','HTMLHRElement','HTMLHeadElement','HTMLHeadingElement','HTMLHtmlElement','HTMLIFrameElement','HTMLImageElement','HTMLInputElement','HTMLLIElement','HTMLLabelElement','HTMLLegendElement','HTMLLinkElement','HTMLMapElement','HTMLMarqueeElement','HTMLMediaElement','HTMLMenuElement','HTMLMetaElement','HTMLMeterElement','HTMLModElement','HTMLOListElement','HTMLObjectElement','HTMLOptGroupElement','HTMLOptionElement','HTMLOutputElement','HTMLParagraphElement','HTMLParamElement','HTMLPictureElement','HTMLPreElement','HTMLProgressElement','HTMLQuoteElement','HTMLScriptElement','HTMLSelectElement','HTMLSlotElement','HTMLSourceElement','HTMLSpanElement','HTMLStyleElement','HTMLTableCaptionElement','HTMLTableCellElement','HTMLTableColElement','HTMLTableDataCellElement','HTMLTableElement','HTMLTableHeaderCellElement','HTMLTableRowElement','HTMLTableSectionElement','HTMLTemplateElement','HTMLTextAreaElement','HTMLTimeElement','HTMLTitleElement','HTMLTrackElement','HTMLUListElement','HTMLUnknownElement','HTMLVideoElement','IDBDatabase','IDBOpenDBRequest','IDBRequest','IDBTransaction','MIDIAccess','MIDIInput','MIDIOutput','MIDIPort','MediaDevices','MediaKeySession','MediaQueryList','MediaRecorder','MediaSource','MediaStream','MediaStreamTrack','MessagePort','Notification','OfflineAudioContext','OscillatorNode','PaymentRequest','Performance','PermissionStatus','PictureInPictureWindow','RTCDTMFSender','RTCDataChannel','RTCDtlsTransport','RTCIceTransport','RTCPeerConnection','RTCSctpTransport','RemotePlayback','SVGAElement','SVGAnimateElement','SVGAnimateMotionElement','SVGAnimateTransformElement','SVGAnimationElement','SVGCircleElement','SVGClipPathElement','SVGComponentTransferFunctionElement','SVGDefsElement','SVGDescElement','SVGEllipseElement','SVGFEBlendElement','SVGFEColorMatrixElement','SVGFEComponentTransferElement','SVGFECompositeElement','SVGFEConvolveMatrixElement','SVGFEDiffuseLightingElement','SVGFEDisplacementMapElement','SVGFEDistantLightElement','SVGFEDropShadowElement','SVGFEFloodElement','SVGFEFuncAElement','SVGFEFuncBElement','SVGFEFuncGElement','SVGFEFuncRElement','SVGFEGaussianBlurElement','SVGFEImageElement','SVGFEMergeElement','SVGFEMergeNodeElement','SVGFEMorphologyElement','SVGFEOffsetElement','SVGFEPointLightElement','SVGFESpecularLightingElement','SVGFESpotLightElement','SVGFETileElement','SVGFETurbulenceElement','SVGFilterElement','SVGForeignObjectElement','SVGGElement','SVGGeometryElement','SVGGradientElement','SVGGraphicsElement','SVGImageElement','SVGLineElement','SVGLinearGradientElement','SVGMPathElement','SVGMarkerElement','SVGMaskElement','SVGMetadataElement','SVGPathElement','SVGPatternElement','SVGPolygonElement','SVGPolylineElement','SVGRadialGradientElement','SVGRectElement','SVGSVGElement','SVGScriptElement','SVGSetElement','SVGStopElement','SVGStyleElement','SVGSwitchElement','SVGSymbolElement','SVGTSpanElement','SVGTextContentElement','SVGTextElement','SVGTextPathElement','SVGTextPositioningElement','SVGTitleElement','SVGUseElement','SVGViewElement','ScreenOrientation','ScriptProcessorNode','ServiceWorkerContainer','ServiceWorkerRegistration','ShadowRoot','SourceBuffer','SourceBufferList','SpeechSynthesis','SpeechSynthesisUtterance','TextTrack','TextTrackCue','TextTrackList','VTTCue','VisualViewport','WebSocket','XMLDocument','XMLHttpRequest','XMLHttpRequestEventTarget','XMLHttpRequestUpload','DedicatedWorkerGlobalScope','ServiceWorkerGlobalScope','SharedWorkerGlobalScope','WorkerGlobalScope']
860
860
  },
861
861
  {
862
862
  name: 'removeEventListener',
@@ -973,13 +973,13 @@ export const NativeFunctions = [
973
973
  },
974
974
  {
975
975
  name: 'close',
976
- signatures: [['?code','?reason']],
977
- receivers: ['WebSocket']
976
+ signatures: [['?returnValue']],
977
+ receivers: ['HTMLDialogElement']
978
978
  },
979
979
  {
980
980
  name: 'close',
981
- signatures: [['?returnValue']],
982
- receivers: ['HTMLDialogElement']
981
+ signatures: [['?code','?reason']],
982
+ receivers: ['WebSocket']
983
983
  },
984
984
  {
985
985
  name: 'close',
@@ -2281,6 +2281,10 @@ export const NativeFunctions = [
2281
2281
  name: 'webkitMatchesSelector',
2282
2282
  signatures: [['selectors']]
2283
2283
  },
2284
+ {
2285
+ name: 'setFormValue',
2286
+ signatures: [['value','?state']]
2287
+ },
2284
2288
  {
2285
2289
  name: 'initEvent',
2286
2290
  signatures: [['type','?bubbles','?cancelable']]
@@ -2498,6 +2502,11 @@ export const NativeFunctions = [
2498
2502
  name: 'toDataURL',
2499
2503
  signatures: [['?type','?quality']]
2500
2504
  },
2505
+ {
2506
+ name: 'show',
2507
+ signatures: [['?detailsPromise']],
2508
+ receivers: ['PaymentRequest']
2509
+ },
2501
2510
  {
2502
2511
  name: 'requestSubmit',
2503
2512
  signatures: [['?submitter']]
@@ -2608,6 +2617,14 @@ export const NativeFunctions = [
2608
2617
  name: 'insertCell',
2609
2618
  signatures: [['?index']]
2610
2619
  },
2620
+ {
2621
+ name: 'cancelVideoFrameCallback',
2622
+ signatures: [['handle']]
2623
+ },
2624
+ {
2625
+ name: 'requestVideoFrameCallback',
2626
+ signatures: [['callback']]
2627
+ },
2611
2628
  {
2612
2629
  name: 'back',
2613
2630
  signatures: [['?options']],
@@ -2801,6 +2818,31 @@ export const NativeFunctions = [
2801
2818
  signatures: [['?type']],
2802
2819
  receivers: ['WakeLock']
2803
2820
  },
2821
+ {
2822
+ name: 'send',
2823
+ signatures: [['data','?timestamp']],
2824
+ receivers: ['MIDIOutput']
2825
+ },
2826
+ {
2827
+ name: 'send',
2828
+ signatures: [['data']],
2829
+ receivers: ['RTCDataChannel','WebSocket']
2830
+ },
2831
+ {
2832
+ name: 'send',
2833
+ signatures: [['?body']],
2834
+ receivers: ['XMLHttpRequest']
2835
+ },
2836
+ {
2837
+ name: 'send',
2838
+ signatures: [['command']],
2839
+ receivers: ['InspectorOverlayHost']
2840
+ },
2841
+ {
2842
+ name: 'send',
2843
+ signatures: [['message'],['data']],
2844
+ receivers: ['PresentationConnection']
2845
+ },
2804
2846
  {
2805
2847
  name: 'decodingInfo',
2806
2848
  signatures: [['configuration']]
@@ -2861,7 +2903,7 @@ export const NativeFunctions = [
2861
2903
  },
2862
2904
  {
2863
2905
  name: 'addSourceBuffer',
2864
- signatures: [['type'],['config']]
2906
+ signatures: [['type']]
2865
2907
  },
2866
2908
  {
2867
2909
  name: 'endOfStream',
@@ -2869,7 +2911,7 @@ export const NativeFunctions = [
2869
2911
  },
2870
2912
  {
2871
2913
  name: 'removeSourceBuffer',
2872
- signatures: [['sourceBuffer'],['buffer']]
2914
+ signatures: [['sourceBuffer']]
2873
2915
  },
2874
2916
  {
2875
2917
  name: 'setLiveSeekableRange',
@@ -2950,10 +2992,28 @@ export const NativeFunctions = [
2950
2992
  name: 'setNamedItemNS',
2951
2993
  signatures: [['attr']]
2952
2994
  },
2995
+ {
2996
+ name: 'disable',
2997
+ signatures: [['cap']],
2998
+ receivers: ['WebGLRenderingContext','WebGL2RenderingContextBase','WebGL2RenderingContext']
2999
+ },
3000
+ {
3001
+ name: 'enable',
3002
+ signatures: [['cap']],
3003
+ receivers: ['WebGLRenderingContext','WebGL2RenderingContextBase','WebGL2RenderingContext']
3004
+ },
3005
+ {
3006
+ name: 'setHeaderValue',
3007
+ signatures: [['value']]
3008
+ },
2953
3009
  {
2954
3010
  name: 'canShare',
2955
3011
  signatures: [['?data']]
2956
3012
  },
3013
+ {
3014
+ name: 'requestMIDIAccess',
3015
+ signatures: [['?options']]
3016
+ },
2957
3017
  {
2958
3018
  name: 'requestMediaKeySystemAccess',
2959
3019
  signatures: [['keySystem','supportedConfigurations']]
@@ -3097,11 +3157,6 @@ export const NativeFunctions = [
3097
3157
  name: 'addPath',
3098
3158
  signatures: [['path','?transform']]
3099
3159
  },
3100
- {
3101
- name: 'show',
3102
- signatures: [['?detailsPromise']],
3103
- receivers: ['PaymentRequest']
3104
- },
3105
3160
  {
3106
3161
  name: 'updateWith',
3107
3162
  signatures: [['detailsPromise']]
@@ -3176,29 +3231,9 @@ export const NativeFunctions = [
3176
3231
  signatures: [['tones','?duration','?interToneGap']]
3177
3232
  },
3178
3233
  {
3179
- name: 'send',
3180
- signatures: [['data']],
3181
- receivers: ['RTCDataChannel','WebSocket']
3182
- },
3183
- {
3184
- name: 'send',
3185
- signatures: [['?body']],
3186
- receivers: ['XMLHttpRequest']
3187
- },
3188
- {
3189
- name: 'send',
3190
- signatures: [['command']],
3191
- receivers: ['InspectorOverlayHost']
3192
- },
3193
- {
3194
- name: 'send',
3195
- signatures: [['message'],['data']],
3196
- receivers: ['PresentationConnection']
3197
- },
3198
- {
3199
- name: 'send',
3200
- signatures: [['data','?timestamp']],
3201
- receivers: ['MIDIOutput']
3234
+ name: 'getMetadata',
3235
+ signatures: [['successCallback','?errorCallback']],
3236
+ receivers: ['Entry']
3202
3237
  },
3203
3238
  {
3204
3239
  name: 'addIceCandidate',
@@ -4522,11 +4557,6 @@ export const NativeFunctions = [
4522
4557
  name: 'detachShader',
4523
4558
  signatures: [['program','shader']]
4524
4559
  },
4525
- {
4526
- name: 'disable',
4527
- signatures: [['cap']],
4528
- receivers: ['WebGLRenderingContext','WebGL2RenderingContextBase','WebGL2RenderingContext']
4529
- },
4530
4560
  {
4531
4561
  name: 'disableVertexAttribArray',
4532
4562
  signatures: [['index']]
@@ -4539,11 +4569,6 @@ export const NativeFunctions = [
4539
4569
  name: 'drawElements',
4540
4570
  signatures: [['mode','count','type','offset']]
4541
4571
  },
4542
- {
4543
- name: 'enable',
4544
- signatures: [['cap']],
4545
- receivers: ['WebGLRenderingContext','WebGL2RenderingContextBase','WebGL2RenderingContext']
4546
- },
4547
4572
  {
4548
4573
  name: 'enableVertexAttribArray',
4549
4574
  signatures: [['index']]
@@ -4925,6 +4950,10 @@ export const NativeFunctions = [
4925
4950
  name: 'setTimeout',
4926
4951
  signatures: [['handler','?timeout','...arguments']]
4927
4952
  },
4953
+ {
4954
+ name: 'structuredClone',
4955
+ signatures: [['value','?options']]
4956
+ },
4928
4957
  {
4929
4958
  name: 'addModule',
4930
4959
  signatures: [['moduleURL','?options']],
@@ -5886,6 +5915,10 @@ export const NativeFunctions = [
5886
5915
  name: 'registerProperty',
5887
5916
  signatures: [['definition']]
5888
5917
  },
5918
+ {
5919
+ name: 'ContentVisibilityAutoStateChangedEvent',
5920
+ signatures: [['type','?eventInitDict']]
5921
+ },
5889
5922
  {
5890
5923
  name: 'timeout',
5891
5924
  signatures: [['milliseconds']]
@@ -6912,11 +6945,6 @@ export const NativeFunctions = [
6912
6945
  signatures: [['successCallback','?errorCallback']],
6913
6946
  receivers: ['DirectoryEntry']
6914
6947
  },
6915
- {
6916
- name: 'getMetadata',
6917
- signatures: [['successCallback','?errorCallback']],
6918
- receivers: ['Entry']
6919
- },
6920
6948
  {
6921
6949
  name: 'copyTo',
6922
6950
  signatures: [['parent','name']],
@@ -7523,10 +7551,6 @@ export const NativeFunctions = [
7523
7551
  name: 'InstallEvent',
7524
7552
  signatures: [['type','?eventInitDict']]
7525
7553
  },
7526
- {
7527
- name: 'setHeaderValue',
7528
- signatures: [['value']]
7529
- },
7530
7554
  {
7531
7555
  name: 'BarcodeDetector',
7532
7556
  signatures: [['?barcodeDetectorOptions']]
@@ -7587,14 +7611,6 @@ export const NativeFunctions = [
7587
7611
  name: 'compareComponent',
7588
7612
  signatures: [['component','left','right']]
7589
7613
  },
7590
- {
7591
- name: 'requestVideoFrameCallback',
7592
- signatures: [['callback']]
7593
- },
7594
- {
7595
- name: 'cancelVideoFrameCallback',
7596
- signatures: [['handle']]
7597
- },
7598
7614
  {
7599
7615
  name: 'VirtualKeyboardGeometryChangeEvent',
7600
7616
  signatures: [['type']]
@@ -8103,10 +8119,6 @@ export const NativeFunctions = [
8103
8119
  name: 'MIDIMessageEvent',
8104
8120
  signatures: [['type','?eventInitDict']]
8105
8121
  },
8106
- {
8107
- name: 'requestMIDIAccess',
8108
- signatures: [['?options']]
8109
- },
8110
8122
  {
8111
8123
  name: 'CloseEvent',
8112
8124
  signatures: [['type','?eventInitDict']]
@@ -641,6 +641,40 @@ export class RemoteObject extends SDK.RemoteObject.RemoteObject {
641
641
  }
642
642
  }
643
643
 
644
+ // Resolve the frame's function name using the name associated with the opening
645
+ // paren that starts the scope. If there is no name associated with the scope
646
+ // start or if the function scope does not start with a left paren (e.g., arrow
647
+ // function with one parameter), the resolution returns null.
648
+ export async function resolveFrameFunctionName(frame: SDK.DebuggerModel.CallFrame): Promise<string|null> {
649
+ const script = frame.script;
650
+ const scope = frame.localScope();
651
+ if (!scope || !script) {
652
+ return null;
653
+ }
654
+ const startLocation = scope.startLocation();
655
+ if (!startLocation) {
656
+ return null;
657
+ }
658
+ const {content} = await script.requestContent();
659
+ if (!content) {
660
+ return null;
661
+ }
662
+
663
+ const text = new TextUtils.Text.Text(content);
664
+ const openRange = new TextUtils.TextRange.TextRange(
665
+ startLocation.lineNumber, startLocation.columnNumber, startLocation.lineNumber, startLocation.columnNumber + 1);
666
+ if (text.extract(openRange) !== '(') {
667
+ return null;
668
+ }
669
+
670
+ const sourceMap = Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().sourceMapForScript(script);
671
+ if (!sourceMap) {
672
+ return null;
673
+ }
674
+ const entry = sourceMap.findEntry(startLocation.lineNumber, startLocation.columnNumber);
675
+ return entry?.name ?? null;
676
+ }
677
+
644
678
  // TODO(crbug.com/1172300) Ignored during the jsdoc to ts migration)
645
679
  // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-explicit-any
646
680
  let _scopeResolvedForTest: (...arg0: any[]) => void = function(): void {};
@@ -230,6 +230,14 @@ export class TextRange {
230
230
  }
231
231
  return this.startLine < lineNumber && lineNumber < this.endLine;
232
232
  }
233
+
234
+ get start(): {lineNumber: number, columnNumber: number} {
235
+ return {lineNumber: this.startLine, columnNumber: this.startColumn};
236
+ }
237
+
238
+ get end(): {lineNumber: number, columnNumber: number} {
239
+ return {lineNumber: this.endLine, columnNumber: this.endColumn};
240
+ }
233
241
  }
234
242
 
235
243
  export class SourceRange {
@@ -94,6 +94,18 @@ const UIStrings = {
94
94
  *@description Title of an auction worklet in the timeline flame chart of the Performance panel
95
95
  */
96
96
  unknownWorklet: 'Auction Worklet',
97
+
98
+ /**
99
+ *@description Title of control thread of a service process for an auction worklet in the timeline flame chart of the Performance panel
100
+ */
101
+ workletService: 'Auction Worklet Service',
102
+
103
+ /**
104
+ *@description Title of control thread of a service process for an auction worklet with known URL in the timeline flame chart of the Performance panel
105
+ * @example {https://google.com} PH1
106
+ */
107
+ workletServiceS: 'Auction Worklet Service — {PH1}',
108
+
97
109
  };
98
110
  const str_ = i18n.i18n.registerUIStrings('models/timeline_model/TimelineModel.ts', UIStrings);
99
111
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -535,7 +547,8 @@ export class TimelineModelImpl {
535
547
  } else {
536
548
  let urlForOther: Platform.DevToolsPath.UrlString|null = null;
537
549
  let workletTypeForOther: WorkletType = WorkletType.NotWorklet;
538
- if (thread.name() === TimelineModelImpl.AuctionWorkletThreadName) {
550
+ if (thread.name() === TimelineModelImpl.AuctionWorkletThreadName ||
551
+ thread.name() === TimelineModelImpl.UtilityMainThreadName) {
539
552
  if (typeof workletUrl !== 'boolean') {
540
553
  urlForOther = workletUrl;
541
554
  }
@@ -822,6 +835,9 @@ export class TimelineModelImpl {
822
835
  } else if (thread.name() === TimelineModelImpl.AuctionWorkletThreadName) {
823
836
  track.url = url || Platform.DevToolsPath.EmptyUrlString;
824
837
  track.name = TimelineModelImpl.nameAuctionWorklet(workletType, url);
838
+ } else if (workletType !== WorkletType.NotWorklet && thread.name() === TimelineModelImpl.UtilityMainThreadName) {
839
+ track.url = url || Platform.DevToolsPath.EmptyUrlString;
840
+ track.name = url ? i18nString(UIStrings.workletServiceS, {PH1: url}) : i18nString(UIStrings.workletService);
825
841
  }
826
842
  this.tracksInternal.push(track);
827
843
 
@@ -1700,6 +1716,7 @@ export namespace TimelineModelImpl {
1700
1716
  export const WorkerThreadNameLegacy = 'DedicatedWorker Thread';
1701
1717
  export const RendererMainThreadName = 'CrRendererMain';
1702
1718
  export const BrowserMainThreadName = 'CrBrowserMain';
1719
+ export const UtilityMainThreadName = 'CrUtilityMain';
1703
1720
  export const AuctionWorkletThreadName = 'AuctionV8HelperThread';
1704
1721
 
1705
1722
  export const DevToolsMetadataEvent = {
@@ -453,6 +453,8 @@ export class ElementsTreeOutline extends
453
453
  }
454
454
  }
455
455
 
456
+ this.createTopLayerContainer();
457
+
456
458
  if (selectedNode) {
457
459
  this.revealAndSelectNode(selectedNode, true);
458
460
  }
@@ -1173,40 +1175,17 @@ export class ElementsTreeOutline extends
1173
1175
  }
1174
1176
 
1175
1177
  return new Promise<void>(resolve => {
1176
- treeElement.node().getChildNodes(() => {
1177
- populatedTreeElements.add(treeElement);
1178
- this.updateModifiedParentNode(treeElement.node());
1179
- resolve();
1180
- });
1181
- })
1182
- .then(() => {
1183
- if (treeElement.node().nodeName() === 'BODY') {
1184
- void this.createTopLayerContainer(treeElement);
1185
- }
1186
- });
1187
- }
1188
-
1189
- async createTopLayerContainer(bodyElement: ElementsTreeElement): Promise<void> {
1190
- if (!this.topLayerContainer) {
1191
- this.topLayerContainer = new TopLayerContainer(bodyElement);
1192
- }
1193
- this.topLayerContainer.updateBody(bodyElement);
1194
- await this.updateTopLayerContainer();
1178
+ treeElement.node().getChildNodes(() => {
1179
+ populatedTreeElements.add(treeElement);
1180
+ this.updateModifiedParentNode(treeElement.node());
1181
+ resolve();
1182
+ });
1183
+ });
1195
1184
  }
1196
1185
 
1197
- async updateTopLayerContainer(): Promise<void> {
1198
- if (this.topLayerContainer) {
1199
- const bodyElement = this.topLayerContainer.bodyElement;
1200
- if (!bodyElement.children().includes(this.topLayerContainer) && !this.topLayerContainer.parent &&
1201
- !this.topLayerContainer.treeOutline) {
1202
- bodyElement.insertChild(this.topLayerContainer, bodyElement.childCount() - 1);
1203
- }
1204
- this.topLayerContainer.removeChildren();
1205
- const topLayerElementsExists = await this.topLayerContainer.addTopLayerElementsAsChildren();
1206
- if (!topLayerElementsExists) {
1207
- bodyElement.removeChild(this.topLayerContainer);
1208
- }
1209
- }
1186
+ createTopLayerContainer(): void {
1187
+ this.topLayerContainer = new TopLayerContainer(this);
1188
+ void this.topLayerContainer.throttledUpdateTopLayerElements();
1210
1189
  }
1211
1190
 
1212
1191
  private createElementTreeElement(node: SDK.DOMModel.DOMNode, isClosingTag?: boolean): ElementsTreeElement {
@@ -1280,6 +1259,11 @@ export class ElementsTreeOutline extends
1280
1259
  visibleChildren.push(afterPseudoElement);
1281
1260
  }
1282
1261
 
1262
+ const backdropPseudoElement = node.backdropPseudoElement();
1263
+ if (backdropPseudoElement) {
1264
+ visibleChildren.push(backdropPseudoElement);
1265
+ }
1266
+
1283
1267
  return visibleChildren;
1284
1268
  }
1285
1269
 
@@ -1463,8 +1447,8 @@ export class ElementsTreeOutline extends
1463
1447
  }
1464
1448
  }
1465
1449
 
1466
- private async topLayerElementsChanged(): Promise<void> {
1467
- await this.updateTopLayerContainer();
1450
+ private topLayerElementsChanged(): void {
1451
+ void this.topLayerContainer?.throttledUpdateTopLayerElements();
1468
1452
  }
1469
1453
 
1470
1454
  private static treeOutlineSymbol = Symbol('treeOutline');