chrome-devtools-frontend 1.0.1539972 → 1.0.1541169

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 (74) hide show
  1. package/eslint.config.mjs +167 -151
  2. package/front_end/core/common/Revealer.ts +5 -0
  3. package/front_end/core/host/InspectorFrontendHost.ts +10 -10
  4. package/front_end/core/sdk/NetworkManager.ts +16 -11
  5. package/front_end/core/sdk/sdk-meta.ts +0 -35
  6. package/front_end/entrypoints/shell/shell.ts +1 -0
  7. package/front_end/entrypoints/trace_app/trace_app.ts +1 -0
  8. package/front_end/generated/InspectorBackendCommands.ts +6 -3
  9. package/front_end/generated/SupportedCSSProperties.js +13 -0
  10. package/front_end/generated/protocol.ts +58 -2
  11. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +121 -56
  12. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +104 -62
  13. package/front_end/models/ai_assistance/performance/AIQueries.ts +56 -2
  14. package/front_end/{panels/issues → models/issues_manager}/IssueAggregator.ts +83 -65
  15. package/front_end/models/issues_manager/issues_manager.ts +2 -0
  16. package/front_end/models/trace/Processor.ts +5 -4
  17. package/front_end/models/trace/insights/types.ts +1 -1
  18. package/front_end/models/trace/types/TraceEvents.ts +1 -1
  19. package/front_end/models/workspace/IgnoreListManager.ts +41 -47
  20. package/front_end/models/workspace/workspace-meta.ts +40 -0
  21. package/front_end/panels/animation/AnimationTimeline.ts +4 -4
  22. package/front_end/panels/animation/AnimationUI.ts +28 -34
  23. package/front_end/panels/elements/ElementsTreeElement.ts +37 -9
  24. package/front_end/panels/elements/LayoutPane.ts +2 -2
  25. package/front_end/panels/elements/components/AdornerManager.ts +9 -9
  26. package/front_end/panels/elements/layoutPane.css +5 -9
  27. package/front_end/panels/event_listeners/EventListenersView.ts +1 -1
  28. package/front_end/panels/explain/components/ConsoleInsight.ts +498 -449
  29. package/front_end/panels/issues/AffectedResourcesView.ts +3 -4
  30. package/front_end/panels/issues/CorsIssueDetailsView.ts +1 -2
  31. package/front_end/panels/issues/IssueView.ts +1 -1
  32. package/front_end/panels/issues/IssuesPane.ts +12 -15
  33. package/front_end/panels/issues/issues.ts +0 -2
  34. package/front_end/panels/network/NetworkDataGridNode.ts +2 -1
  35. package/front_end/panels/network/RequestConditionsDrawer.ts +149 -46
  36. package/front_end/panels/network/RequestTimingView.ts +13 -8
  37. package/front_end/panels/network/network-meta.ts +11 -0
  38. package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +1 -1
  39. package/front_end/panels/sources/DebuggerPlugin.ts +1 -1
  40. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +1 -1
  41. package/front_end/panels/sources/breakpointsView.css +1 -1
  42. package/front_end/panels/sources/sourcesPanel.css +2 -2
  43. package/front_end/panels/timeline/TimelineFlameChartView.ts +3 -3
  44. package/front_end/panels/timeline/TimelinePanel.ts +3 -3
  45. package/front_end/panels/timeline/components/LayoutShiftDetails.ts +16 -10
  46. package/front_end/panels/timeline/components/SidebarSingleInsightSet.ts +2 -0
  47. package/front_end/third_party/chromium/README.chromium +1 -1
  48. package/front_end/ui/components/markdown_view/MarkdownView.ts +1 -0
  49. package/front_end/ui/components/snackbars/Snackbars.docs.ts +46 -0
  50. package/front_end/ui/{components/docs/context_menu/basic.ts → legacy/ContextMenu.docs.ts} +58 -25
  51. package/front_end/ui/legacy/UIUtils.ts +2 -1
  52. package/front_end/ui/legacy/components/inline_editor/BezierEditor.ts +1 -1
  53. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +105 -92
  54. package/front_end/ui/legacy/components/perf_ui/TimelineOverviewPane.ts +3 -3
  55. package/front_end/ui/legacy/components/perf_ui/pieChart.css +1 -1
  56. package/front_end/ui/legacy/components/utils/Linkifier.ts +1 -1
  57. package/front_end/ui/legacy/inspectorCommon.css +3 -2
  58. package/mcp/mcp.ts +15 -1
  59. package/package.json +2 -1
  60. package/front_end/ui/components/docs/context_menu/basic.html +0 -45
  61. package/front_end/ui/components/docs/linkifier/simple-url.html +0 -25
  62. package/front_end/ui/components/docs/linkifier/simple-url.ts +0 -25
  63. package/front_end/ui/components/docs/panel_feedback/basic.html +0 -25
  64. package/front_end/ui/components/docs/panel_feedback/basic.ts +0 -21
  65. package/front_end/ui/components/docs/panel_feedback/button.html +0 -25
  66. package/front_end/ui/components/docs/panel_feedback/button.ts +0 -19
  67. package/front_end/ui/components/docs/panel_introduction_steps/basic.html +0 -25
  68. package/front_end/ui/components/docs/panel_introduction_steps/basic.ts +0 -28
  69. package/front_end/ui/components/docs/perf_piechart/basic-with-legend.html +0 -20
  70. package/front_end/ui/components/docs/perf_piechart/basic-with-legend.ts +0 -20
  71. package/front_end/ui/components/docs/perf_piechart/basic-without-legend.html +0 -20
  72. package/front_end/ui/components/docs/perf_piechart/basic-without-legend.ts +0 -18
  73. package/front_end/ui/components/docs/snackbars/basic.html +0 -17
  74. package/front_end/ui/components/docs/snackbars/basic.ts +0 -50
@@ -26,6 +26,10 @@ const UIStrings = {
26
26
  * @description The UI destination when right clicking an item that can be revealed
27
27
  */
28
28
  networkPanel: 'Network panel',
29
+ /**
30
+ * @description The UI destination when right clicking an item that can be revealed
31
+ */
32
+ requestConditionsDrawer: 'Request conditions drawer',
29
33
  /**
30
34
  * @description The UI destination when right clicking an item that can be revealed
31
35
  */
@@ -181,6 +185,7 @@ export const RevealerDestination = {
181
185
  CHANGES_DRAWER: i18nLazyString(UIStrings.changesDrawer),
182
186
  ISSUES_VIEW: i18nLazyString(UIStrings.issuesView),
183
187
  NETWORK_PANEL: i18nLazyString(UIStrings.networkPanel),
188
+ REQUEST_CONDITIONS_DRAWER: i18nLazyString(UIStrings.requestConditionsDrawer),
184
189
  TIMELINE_PANEL: i18nLazyString(UIStrings.timelinePanel),
185
190
  APPLICATION_PANEL: i18nLazyString(UIStrings.applicationPanel),
186
191
  SOURCES_PANEL: i18nLazyString(UIStrings.sourcesPanel),
@@ -491,19 +491,19 @@ export class InspectorFrontendHostStub implements InspectorFrontendHostAPI {
491
491
  * Whereas in **Non-hosted** (aka "embedded"), DevTools is embedded and fully dockable. It's the common way DevTools is run.
492
492
  *
493
493
  * **Hosted mode** == we're using the `InspectorFrontendHostStub`. impl. (@see `InspectorFrontendHostStub` class comment)
494
- * Whereas with **non-hosted** mode, native `DevToolsEmbedderMessageDispatcher` is used for CDP and more.
494
+ * Whereas with **non-hosted** mode, native `DevToolsEmbedderMessageDispatcher` is used for CDP and more. `globalThis.DevToolsAPI` is present.
495
495
  *
496
496
  * Relationships to other signals:
497
- * - Hosted-ness does not indicate whether the frontend is _connected to a valid CDP target_.
498
- * - Being _"dockable"_ (aka `canDock`) is typically aligned but technically orthogonal.
499
- * - It's unrelated to the _tab's (main frame's) URL_. Though in non-hosted, the devtools frame origin will always be `devtools://devtools`.
497
+ * - _Connection_: Hosted-ness does not indicate whether the frontend is _connected to a valid CDP target_.
498
+ * - _Dockability_: Being _"dockable"_ (aka `canDock`) is typically aligned but technically orthogonal.
499
+ * - _URL scheme_: If the main frame's URL scheme is `devtools://`, it's non-hosted.
500
500
  *
501
- * | Example case | Mode | Example devtools |
502
- * | :--------------------------------------------------- | :------------- | :---------------------------------------------------------------------------- |
503
- * | tab URL: anything. embedded DevTools w/ native CDP bindings | **NOT Hosted** | `devtools://devtools/bundled/devtools_app.html?targetType=tab&...` |
504
- * | tab URL: `devtools://…?ws=…` | **Hosted** | `devtools://devtools/bundled/devtools_app.html?ws=localhost:9228/...` |
505
- * | tab URL: `devtools://…` but no connection | **Hosted** | `devtools://devtools/bundled/devtools_app.html` |
506
- * | tab URL: `https://…` but no connection | **Hosted** | `https://chrome-devtools-frontend.appspot.com/serve_rev/@.../worker_app.html` |
501
+ * | Example case | Mode | Example devtools |
502
+ * | :------------------------------------------ | :------------- | :---------------------------------------------------------------------------- |
503
+ * | tab URL: `devtools://…` | **NOT Hosted** | `devtools://devtools/bundled/devtools_app.html?targetType=tab&...` |
504
+ * | tab URL: `devtools://…?ws=…` | **NOT Hosted** | `devtools://devtools/bundled/devtools_app.html?ws=localhost:9228/...` |
505
+ * | tab URL: `devtools://…` but no connection | **NOT Hosted** | `devtools://devtools/bundled/trace_app.html` |
506
+ * | tab URL: `https://…` but no connection | **Hosted** | `https://chrome-devtools-frontend.appspot.com/serve_rev/@.../trace_app.html` |
507
507
  * | tab URL: `http://…?ws=` (connected) | **Hosted** | `http://localhost:9222/devtools/inspector.html?ws=localhost:9222/...` |
508
508
  */
509
509
  isHostedMode(): boolean {
@@ -1812,7 +1812,7 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
1812
1812
  }
1813
1813
 
1814
1814
  Platform.ArrayUtilities.swap(this.#conditions, index, index + 1);
1815
- this.dispatchEventToListeners(RequestConditions.Events.REQUEST_CONDITIONS_CHANGED);
1815
+ this.#conditionsChanged();
1816
1816
  }
1817
1817
 
1818
1818
  increasePriority(condition: RequestCondition): void {
@@ -1822,7 +1822,7 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
1822
1822
  }
1823
1823
 
1824
1824
  Platform.ArrayUtilities.swap(this.#conditions, index - 1, index);
1825
- this.dispatchEventToListeners(RequestConditions.Events.REQUEST_CONDITIONS_CHANGED);
1825
+ this.#conditionsChanged();
1826
1826
  }
1827
1827
 
1828
1828
  delete(condition: RequestCondition): void {
@@ -1939,11 +1939,13 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
1939
1939
  return this.#conditionsAppliedForTestPromise;
1940
1940
  }
1941
1941
 
1942
- conditionsForId(appliedNetworkConditionsId: string): {
1943
- conditions: Conditions,
1944
- urlPattern?: string,
1945
- }|undefined {
1946
- return this.#requestConditionsById.get(appliedNetworkConditionsId);
1942
+ conditionsForId(appliedNetworkConditionsId: string): AppliedNetworkConditions|undefined {
1943
+ const requestConditions = this.#requestConditionsById.get(appliedNetworkConditionsId);
1944
+ if (!requestConditions) {
1945
+ return undefined;
1946
+ }
1947
+ const {conditions, urlPattern} = requestConditions;
1948
+ return new AppliedNetworkConditions(conditions, appliedNetworkConditionsId, urlPattern);
1947
1949
  }
1948
1950
  }
1949
1951
 
@@ -1958,6 +1960,12 @@ export namespace RequestConditions {
1958
1960
 
1959
1961
  let multiTargetNetworkManagerInstance: MultitargetNetworkManager|null;
1960
1962
 
1963
+ export class AppliedNetworkConditions {
1964
+ constructor(
1965
+ readonly conditions: Conditions, readonly appliedNetworkConditionsId: string, readonly urlPattern?: string) {
1966
+ }
1967
+ }
1968
+
1961
1969
  export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrapper<MultitargetNetworkManager.EventTypes>
1962
1970
  implements SDKModelObserver<NetworkManager> {
1963
1971
  #userAgentOverride = '';
@@ -2327,10 +2335,7 @@ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrappe
2327
2335
  }, allowRemoteFilePaths));
2328
2336
  }
2329
2337
 
2330
- appliedRequestConditions(requestInternal: NetworkRequest): {
2331
- conditions: Conditions,
2332
- urlPattern?: string,
2333
- }|undefined {
2338
+ appliedRequestConditions(requestInternal: NetworkRequest): AppliedNetworkConditions|undefined {
2334
2339
  if (!requestInternal.appliedNetworkConditionsId) {
2335
2340
  return undefined;
2336
2341
  }
@@ -367,41 +367,6 @@ const UIStrings = {
367
367
  const str_ = i18n.i18n.registerUIStrings('core/sdk/sdk-meta.ts', UIStrings);
368
368
  const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
369
369
 
370
- Common.Settings.registerSettingExtension({
371
- storageType: Common.Settings.SettingStorageType.SYNCED,
372
- settingName: 'skip-stack-frames-pattern',
373
- settingType: Common.Settings.SettingType.REGEX,
374
- defaultValue: '/node_modules/|^node:',
375
- });
376
-
377
- Common.Settings.registerSettingExtension({
378
- storageType: Common.Settings.SettingStorageType.SYNCED,
379
- settingName: 'skip-content-scripts',
380
- settingType: Common.Settings.SettingType.BOOLEAN,
381
- defaultValue: true,
382
- });
383
-
384
- Common.Settings.registerSettingExtension({
385
- storageType: Common.Settings.SettingStorageType.SYNCED,
386
- settingName: 'automatically-ignore-list-known-third-party-scripts',
387
- settingType: Common.Settings.SettingType.BOOLEAN,
388
- defaultValue: true,
389
- });
390
-
391
- Common.Settings.registerSettingExtension({
392
- storageType: Common.Settings.SettingStorageType.SYNCED,
393
- settingName: 'skip-anonymous-scripts',
394
- settingType: Common.Settings.SettingType.BOOLEAN,
395
- defaultValue: false,
396
- });
397
-
398
- Common.Settings.registerSettingExtension({
399
- storageType: Common.Settings.SettingStorageType.SYNCED,
400
- settingName: 'enable-ignore-listing',
401
- settingType: Common.Settings.SettingType.BOOLEAN,
402
- defaultValue: true,
403
- });
404
-
405
370
  Common.Settings.registerSettingExtension({
406
371
  category: Common.Settings.SettingCategory.CONSOLE,
407
372
  storageType: Common.Settings.SettingStorageType.SYNCED,
@@ -18,6 +18,7 @@ import '../main/main-meta.js';
18
18
  import '../../ui/legacy/components/perf_ui/perf_ui-meta.js';
19
19
  import '../../ui/legacy/components/quick_open/quick_open-meta.js';
20
20
  import '../../core/sdk/sdk-meta.js';
21
+ import '../../models/workspace/workspace-meta.js';
21
22
  import '../../ui/legacy/components/source_frame/source_frame-meta.js';
22
23
  import '../../panels/console_counters/console_counters-meta.js';
23
24
  import '../../ui/legacy/components/object_ui/object_ui-meta.js';
@@ -5,6 +5,7 @@
5
5
  import '../main/main-meta.js';
6
6
  import '../inspector_main/inspector_main-meta.js';
7
7
  import '../../core/sdk/sdk-meta.js';
8
+ import '../../models/workspace/workspace-meta.js';
8
9
  import '../../Images/Images.js';
9
10
  import '../../models/logs/logs-meta.js';
10
11
  import '../../models/persistence/persistence-meta.js';
@@ -61,7 +61,7 @@ inspectorBackend.registerCommand("Animation.setPlaybackRate", [{"name": "playbac
61
61
  inspectorBackend.registerCommand("Animation.setTiming", [{"name": "animationId", "type": "string", "optional": false, "description": "Animation id.", "typeRef": null}, {"name": "duration", "type": "number", "optional": false, "description": "Duration of the animation.", "typeRef": null}, {"name": "delay", "type": "number", "optional": false, "description": "Delay of the animation.", "typeRef": null}], [], "Sets the timing of an animation node.");
62
62
  inspectorBackend.registerType("Animation.Animation", [{"name": "id", "type": "string", "optional": false, "description": "`Animation`'s id.", "typeRef": null}, {"name": "name", "type": "string", "optional": false, "description": "`Animation`'s name.", "typeRef": null}, {"name": "pausedState", "type": "boolean", "optional": false, "description": "`Animation`'s internal paused state.", "typeRef": null}, {"name": "playState", "type": "string", "optional": false, "description": "`Animation`'s play state.", "typeRef": null}, {"name": "playbackRate", "type": "number", "optional": false, "description": "`Animation`'s playback rate.", "typeRef": null}, {"name": "startTime", "type": "number", "optional": false, "description": "`Animation`'s start time. Milliseconds for time based animations and percentage [0 - 100] for scroll driven animations (i.e. when viewOrScrollTimeline exists).", "typeRef": null}, {"name": "currentTime", "type": "number", "optional": false, "description": "`Animation`'s current time.", "typeRef": null}, {"name": "type", "type": "string", "optional": false, "description": "Animation type of `Animation`.", "typeRef": null}, {"name": "source", "type": "object", "optional": true, "description": "`Animation`'s source animation node.", "typeRef": "Animation.AnimationEffect"}, {"name": "cssId", "type": "string", "optional": true, "description": "A unique ID for `Animation` representing the sources that triggered this CSS animation/transition.", "typeRef": null}, {"name": "viewOrScrollTimeline", "type": "object", "optional": true, "description": "View or scroll timeline", "typeRef": "Animation.ViewOrScrollTimeline"}]);
63
63
  inspectorBackend.registerType("Animation.ViewOrScrollTimeline", [{"name": "sourceNodeId", "type": "number", "optional": true, "description": "Scroll container node", "typeRef": "DOM.BackendNodeId"}, {"name": "startOffset", "type": "number", "optional": true, "description": "Represents the starting scroll position of the timeline as a length offset in pixels from scroll origin.", "typeRef": null}, {"name": "endOffset", "type": "number", "optional": true, "description": "Represents the ending scroll position of the timeline as a length offset in pixels from scroll origin.", "typeRef": null}, {"name": "subjectNodeId", "type": "number", "optional": true, "description": "The element whose principal box's visibility in the scrollport defined the progress of the timeline. Does not exist for animations with ScrollTimeline", "typeRef": "DOM.BackendNodeId"}, {"name": "axis", "type": "string", "optional": false, "description": "Orientation of the scroll", "typeRef": "DOM.ScrollOrientation"}]);
64
- inspectorBackend.registerType("Animation.AnimationEffect", [{"name": "delay", "type": "number", "optional": false, "description": "`AnimationEffect`'s delay.", "typeRef": null}, {"name": "endDelay", "type": "number", "optional": false, "description": "`AnimationEffect`'s end delay.", "typeRef": null}, {"name": "iterationStart", "type": "number", "optional": false, "description": "`AnimationEffect`'s iteration start.", "typeRef": null}, {"name": "iterations", "type": "number", "optional": false, "description": "`AnimationEffect`'s iterations.", "typeRef": null}, {"name": "duration", "type": "number", "optional": false, "description": "`AnimationEffect`'s iteration duration. Milliseconds for time based animations and percentage [0 - 100] for scroll driven animations (i.e. when viewOrScrollTimeline exists).", "typeRef": null}, {"name": "direction", "type": "string", "optional": false, "description": "`AnimationEffect`'s playback direction.", "typeRef": null}, {"name": "fill", "type": "string", "optional": false, "description": "`AnimationEffect`'s fill mode.", "typeRef": null}, {"name": "backendNodeId", "type": "number", "optional": true, "description": "`AnimationEffect`'s target node.", "typeRef": "DOM.BackendNodeId"}, {"name": "keyframesRule", "type": "object", "optional": true, "description": "`AnimationEffect`'s keyframes.", "typeRef": "Animation.KeyframesRule"}, {"name": "easing", "type": "string", "optional": false, "description": "`AnimationEffect`'s timing function.", "typeRef": null}]);
64
+ inspectorBackend.registerType("Animation.AnimationEffect", [{"name": "delay", "type": "number", "optional": false, "description": "`AnimationEffect`'s delay.", "typeRef": null}, {"name": "endDelay", "type": "number", "optional": false, "description": "`AnimationEffect`'s end delay.", "typeRef": null}, {"name": "iterationStart", "type": "number", "optional": false, "description": "`AnimationEffect`'s iteration start.", "typeRef": null}, {"name": "iterations", "type": "number", "optional": true, "description": "`AnimationEffect`'s iterations. Omitted if the value is infinite.", "typeRef": null}, {"name": "duration", "type": "number", "optional": false, "description": "`AnimationEffect`'s iteration duration. Milliseconds for time based animations and percentage [0 - 100] for scroll driven animations (i.e. when viewOrScrollTimeline exists).", "typeRef": null}, {"name": "direction", "type": "string", "optional": false, "description": "`AnimationEffect`'s playback direction.", "typeRef": null}, {"name": "fill", "type": "string", "optional": false, "description": "`AnimationEffect`'s fill mode.", "typeRef": null}, {"name": "backendNodeId", "type": "number", "optional": true, "description": "`AnimationEffect`'s target node.", "typeRef": "DOM.BackendNodeId"}, {"name": "keyframesRule", "type": "object", "optional": true, "description": "`AnimationEffect`'s keyframes.", "typeRef": "Animation.KeyframesRule"}, {"name": "easing", "type": "string", "optional": false, "description": "`AnimationEffect`'s timing function.", "typeRef": null}]);
65
65
  inspectorBackend.registerType("Animation.KeyframesRule", [{"name": "name", "type": "string", "optional": true, "description": "CSS keyframed animation's name.", "typeRef": null}, {"name": "keyframes", "type": "array", "optional": false, "description": "List of animation keyframes.", "typeRef": "Animation.KeyframeStyle"}]);
66
66
  inspectorBackend.registerType("Animation.KeyframeStyle", [{"name": "offset", "type": "string", "optional": false, "description": "Keyframe's time offset.", "typeRef": null}, {"name": "easing", "type": "string", "optional": false, "description": "`AnimationEffect`'s timing function.", "typeRef": null}]);
67
67
 
@@ -226,6 +226,8 @@ inspectorBackend.registerType("Browser.Histogram", [{"name": "name", "type": "st
226
226
  inspectorBackend.registerEnum("CSS.StyleSheetOrigin", {Injected: "injected", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
227
227
  inspectorBackend.registerEnum("CSS.CSSRuleType", {MediaRule: "MediaRule", SupportsRule: "SupportsRule", ContainerRule: "ContainerRule", LayerRule: "LayerRule", ScopeRule: "ScopeRule", StyleRule: "StyleRule", StartingStyleRule: "StartingStyleRule"});
228
228
  inspectorBackend.registerEnum("CSS.CSSMediaSource", {MediaRule: "mediaRule", ImportRule: "importRule", LinkedSheet: "linkedSheet", InlineSheet: "inlineSheet"});
229
+ inspectorBackend.registerEnum("CSS.CSSAtRuleType", {FontFace: "font-face", FontFeatureValues: "font-feature-values", FontPaletteValues: "font-palette-values"});
230
+ inspectorBackend.registerEnum("CSS.CSSAtRuleSubsection", {Swash: "swash", Annotation: "annotation", Ornaments: "ornaments", Stylistic: "stylistic", Styleset: "styleset", CharacterVariant: "character-variant"});
229
231
  inspectorBackend.registerEvent("CSS.fontsUpdated", ["font"]);
230
232
  inspectorBackend.registerEvent("CSS.mediaQueryResultChanged", []);
231
233
  inspectorBackend.registerEvent("CSS.styleSheetAdded", ["header"]);
@@ -245,7 +247,7 @@ inspectorBackend.registerCommand("CSS.resolveValues", [{"name": "values", "type"
245
247
  inspectorBackend.registerCommand("CSS.getLonghandProperties", [{"name": "shorthandName", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "value", "type": "string", "optional": false, "description": "", "typeRef": null}], ["longhandProperties"], "");
246
248
  inspectorBackend.registerCommand("CSS.getInlineStylesForNode", [{"name": "nodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.NodeId"}], ["inlineStyle", "attributesStyle"], "Returns the styles defined inline (explicitly in the \"style\" attribute and implicitly, using DOM attributes) for a DOM node identified by `nodeId`.");
247
249
  inspectorBackend.registerCommand("CSS.getAnimatedStylesForNode", [{"name": "nodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.NodeId"}], ["animationStyles", "transitionsStyle", "inherited"], "Returns the styles coming from animations & transitions including the animation & transition styles coming from inheritance chain.");
248
- inspectorBackend.registerCommand("CSS.getMatchedStylesForNode", [{"name": "nodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.NodeId"}], ["inlineStyle", "attributesStyle", "matchedCSSRules", "pseudoElements", "inherited", "inheritedPseudoElements", "cssKeyframesRules", "cssPositionTryRules", "activePositionFallbackIndex", "cssPropertyRules", "cssPropertyRegistrations", "cssFontPaletteValuesRule", "parentLayoutNodeId", "cssFunctionRules"], "Returns requested styles for a DOM node identified by `nodeId`.");
250
+ inspectorBackend.registerCommand("CSS.getMatchedStylesForNode", [{"name": "nodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.NodeId"}], ["inlineStyle", "attributesStyle", "matchedCSSRules", "pseudoElements", "inherited", "inheritedPseudoElements", "cssKeyframesRules", "cssPositionTryRules", "activePositionFallbackIndex", "cssPropertyRules", "cssPropertyRegistrations", "cssFontPaletteValuesRule", "cssAtRules", "parentLayoutNodeId", "cssFunctionRules"], "Returns requested styles for a DOM node identified by `nodeId`.");
249
251
  inspectorBackend.registerCommand("CSS.getEnvironmentVariables", [], ["environmentVariables"], "Returns the values of the default UA-defined environment variables used in env()");
250
252
  inspectorBackend.registerCommand("CSS.getMediaQueries", [], ["medias"], "Returns all media queries parsed by the rendering engine.");
251
253
  inspectorBackend.registerCommand("CSS.getPlatformFontsForNode", [{"name": "nodeId", "type": "number", "optional": false, "description": "", "typeRef": "DOM.NodeId"}], ["fonts"], "Requests information about platform fonts which we used to render child TextNodes in the given node.");
@@ -304,6 +306,7 @@ inspectorBackend.registerType("CSS.CSSPositionTryRule", [{"name": "name", "type"
304
306
  inspectorBackend.registerType("CSS.CSSKeyframesRule", [{"name": "animationName", "type": "object", "optional": false, "description": "Animation name.", "typeRef": "CSS.Value"}, {"name": "keyframes", "type": "array", "optional": false, "description": "List of keyframes.", "typeRef": "CSS.CSSKeyframeRule"}]);
305
307
  inspectorBackend.registerType("CSS.CSSPropertyRegistration", [{"name": "propertyName", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "initialValue", "type": "object", "optional": true, "description": "", "typeRef": "CSS.Value"}, {"name": "inherits", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "syntax", "type": "string", "optional": false, "description": "", "typeRef": null}]);
306
308
  inspectorBackend.registerType("CSS.CSSFontPaletteValuesRule", [{"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "CSS.StyleSheetId"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "fontPaletteName", "type": "object", "optional": false, "description": "Associated font palette name.", "typeRef": "CSS.Value"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}]);
309
+ inspectorBackend.registerType("CSS.CSSAtRule", [{"name": "type", "type": "string", "optional": false, "description": "Type of at-rule.", "typeRef": null}, {"name": "subsection", "type": "string", "optional": true, "description": "Subsection of font-feature-values, if this is a subsection.", "typeRef": null}, {"name": "name", "type": "object", "optional": true, "description": "LINT_SKIP.ThenChange(//third_party/blink/renderer/core/inspector/inspector_style_sheet.cc:FontVariantAlternatesFeatureType,//third_party/blink/renderer/core/inspector/inspector_css_agent.cc:FontVariantAlternatesFeatureType) Associated name, if applicable.", "typeRef": "CSS.Value"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "CSS.StyleSheetId"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}]);
307
310
  inspectorBackend.registerType("CSS.CSSPropertyRule", [{"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "CSS.StyleSheetId"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "propertyName", "type": "object", "optional": false, "description": "Associated property name.", "typeRef": "CSS.Value"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}]);
308
311
  inspectorBackend.registerType("CSS.CSSFunctionParameter", [{"name": "name", "type": "string", "optional": false, "description": "The parameter name.", "typeRef": null}, {"name": "type", "type": "string", "optional": false, "description": "The parameter type.", "typeRef": null}]);
309
312
  inspectorBackend.registerType("CSS.CSSFunctionConditionNode", [{"name": "media", "type": "object", "optional": true, "description": "Media query for this conditional block. Only one type of condition should be set.", "typeRef": "CSS.CSSMedia"}, {"name": "containerQueries", "type": "object", "optional": true, "description": "Container query for this conditional block. Only one type of condition should be set.", "typeRef": "CSS.CSSContainerQuery"}, {"name": "supports", "type": "object", "optional": true, "description": "@supports CSS at-rule condition. Only one type of condition should be set.", "typeRef": "CSS.CSSSupports"}, {"name": "children", "type": "array", "optional": false, "description": "Block body.", "typeRef": "CSS.CSSFunctionNode"}, {"name": "conditionText", "type": "string", "optional": false, "description": "The condition text.", "typeRef": null}]);
@@ -1351,7 +1354,7 @@ inspectorBackend.registerCommand("Target.setAutoAttach", [{"name": "autoAttach",
1351
1354
  inspectorBackend.registerCommand("Target.autoAttachRelated", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}, {"name": "waitForDebuggerOnStart", "type": "boolean", "optional": false, "description": "Whether to pause new targets when attaching to them. Use `Runtime.runIfWaitingForDebugger` to run paused targets.", "typeRef": null}, {"name": "filter", "type": "array", "optional": true, "description": "Only targets matching filter will be attached.", "typeRef": "Target.TargetFilter"}], [], "Adds the specified target to the list of targets that will be monitored for any related target creation (such as child frames, child workers and new versions of service worker) and reported through `attachedToTarget`. The specified target is also auto-attached. This cancels the effect of any previous `setAutoAttach` and is also cancelled by subsequent `setAutoAttach`. Only available at the Browser target.");
1352
1355
  inspectorBackend.registerCommand("Target.setDiscoverTargets", [{"name": "discover", "type": "boolean", "optional": false, "description": "Whether to discover available targets.", "typeRef": null}, {"name": "filter", "type": "array", "optional": true, "description": "Only targets matching filter will be attached. If `discover` is false, `filter` must be omitted or empty.", "typeRef": "Target.TargetFilter"}], [], "Controls whether to discover available targets and notify via `targetCreated/targetInfoChanged/targetDestroyed` events.");
1353
1356
  inspectorBackend.registerCommand("Target.setRemoteLocations", [{"name": "locations", "type": "array", "optional": false, "description": "List of remote locations.", "typeRef": "Target.RemoteLocation"}], [], "Enables target discovery for the specified locations, when `setDiscoverTargets` was set to `true`.");
1354
- inspectorBackend.registerCommand("Target.openDevTools", [{"name": "targetId", "type": "string", "optional": false, "description": "This can be the page or tab target ID.", "typeRef": "Target.TargetID"}], ["targetId"], "Opens a DevTools window for the target.");
1357
+ inspectorBackend.registerCommand("Target.openDevTools", [{"name": "targetId", "type": "string", "optional": false, "description": "This can be the page or tab target ID.", "typeRef": "Target.TargetID"}, {"name": "panelId", "type": "string", "optional": true, "description": "The id of the panel we want DevTools to open initially. Currently supported panels are elements, console, network, sources and resources.", "typeRef": null}], ["targetId"], "Opens a DevTools window for the target.");
1355
1358
  inspectorBackend.registerType("Target.TargetInfo", [{"name": "targetId", "type": "string", "optional": false, "description": "", "typeRef": "Target.TargetID"}, {"name": "type", "type": "string", "optional": false, "description": "List of types: https://source.chromium.org/chromium/chromium/src/+/main:content/browser/devtools/devtools_agent_host_impl.cc?ss=chromium&q=f:devtools%20-f:out%20%22::kTypeTab%5B%5D%22", "typeRef": null}, {"name": "title", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "url", "type": "string", "optional": false, "description": "", "typeRef": null}, {"name": "attached", "type": "boolean", "optional": false, "description": "Whether the target has an attached client.", "typeRef": null}, {"name": "openerId", "type": "string", "optional": true, "description": "Opener target Id", "typeRef": "Target.TargetID"}, {"name": "canAccessOpener", "type": "boolean", "optional": false, "description": "Whether the target has access to the originating window.", "typeRef": null}, {"name": "openerFrameId", "type": "string", "optional": true, "description": "Frame id of originating window (is only set if target has an opener).", "typeRef": "Page.FrameId"}, {"name": "parentFrameId", "type": "string", "optional": true, "description": "Id of the parent frame, only present for the \\\"iframe\\\" targets.", "typeRef": "Page.FrameId"}, {"name": "browserContextId", "type": "string", "optional": true, "description": "", "typeRef": "Browser.BrowserContextID"}, {"name": "subtype", "type": "string", "optional": true, "description": "Provides additional details for specific target types. For example, for the type of \\\"page\\\", this may be set to \\\"prerender\\\".", "typeRef": null}]);
1356
1359
  inspectorBackend.registerType("Target.FilterEntry", [{"name": "exclude", "type": "boolean", "optional": true, "description": "If set, causes exclusion of matching targets from the list.", "typeRef": null}, {"name": "type", "type": "string", "optional": true, "description": "If not present, matches any type.", "typeRef": null}]);
1357
1360
  inspectorBackend.registerType("Target.TargetFilter", [{"name": "TargetFilter", "type": "array", "optional": false, "description": "The entries in TargetFilter are matched sequentially against targets and the first entry that matches determines if the target is included or not, depending on the value of `exclude` field in the entry. If filter is not specified, the one assumed is [{type: \\\"browser\\\", exclude: true}, {type: \\\"tab\\\", exclude: true}, {}] (i.e. include everything but `browser` and `tab`).", "typeRef": "Target.FilterEntry"}]);
@@ -3845,6 +3845,19 @@ export const generatedProperties = [
3845
3845
  ],
3846
3846
  "name": "rule-color"
3847
3847
  },
3848
+ {
3849
+ "longhands": [
3850
+ "row-rule-edge-start-outset",
3851
+ "row-rule-edge-end-outset",
3852
+ "row-rule-interior-start-outset",
3853
+ "row-rule-interior-end-outset",
3854
+ "column-rule-edge-start-outset",
3855
+ "column-rule-edge-end-outset",
3856
+ "column-rule-interior-start-outset",
3857
+ "column-rule-interior-end-outset"
3858
+ ],
3859
+ "name": "rule-outset"
3860
+ },
3848
3861
  {
3849
3862
  "longhands": [
3850
3863
  "column-rule-style",
@@ -544,9 +544,9 @@ export namespace Animation {
544
544
  */
545
545
  iterationStart: number;
546
546
  /**
547
- * `AnimationEffect`'s iterations.
547
+ * `AnimationEffect`'s iterations. Omitted if the value is infinite.
548
548
  */
549
- iterations: number;
549
+ iterations?: number;
550
550
  /**
551
551
  * `AnimationEffect`'s iteration duration.
552
552
  * Milliseconds for time based animations and
@@ -3452,6 +3452,53 @@ export namespace CSS {
3452
3452
  style: CSSStyle;
3453
3453
  }
3454
3454
 
3455
+ export const enum CSSAtRuleType {
3456
+ FontFace = 'font-face',
3457
+ FontFeatureValues = 'font-feature-values',
3458
+ FontPaletteValues = 'font-palette-values',
3459
+ }
3460
+
3461
+ export const enum CSSAtRuleSubsection {
3462
+ Swash = 'swash',
3463
+ Annotation = 'annotation',
3464
+ Ornaments = 'ornaments',
3465
+ Stylistic = 'stylistic',
3466
+ Styleset = 'styleset',
3467
+ CharacterVariant = 'character-variant',
3468
+ }
3469
+
3470
+ /**
3471
+ * CSS generic @rule representation.
3472
+ */
3473
+ export interface CSSAtRule {
3474
+ /**
3475
+ * Type of at-rule.
3476
+ */
3477
+ type: CSSAtRuleType;
3478
+ /**
3479
+ * Subsection of font-feature-values, if this is a subsection.
3480
+ */
3481
+ subsection?: CSSAtRuleSubsection;
3482
+ /**
3483
+ * LINT_SKIP.ThenChange(//third_party/blink/renderer/core/inspector/inspector_style_sheet.cc:FontVariantAlternatesFeatureType,//third_party/blink/renderer/core/inspector/inspector_css_agent.cc:FontVariantAlternatesFeatureType)
3484
+ * Associated name, if applicable.
3485
+ */
3486
+ name?: Value;
3487
+ /**
3488
+ * The css style sheet identifier (absent for user agent stylesheet and user-specified
3489
+ * stylesheet rules) this rule came from.
3490
+ */
3491
+ styleSheetId?: StyleSheetId;
3492
+ /**
3493
+ * Parent stylesheet's origin.
3494
+ */
3495
+ origin: StyleSheetOrigin;
3496
+ /**
3497
+ * Associated style declaration.
3498
+ */
3499
+ style: CSSStyle;
3500
+ }
3501
+
3455
3502
  /**
3456
3503
  * CSS property at-rule representation.
3457
3504
  */
@@ -3848,6 +3895,10 @@ export namespace CSS {
3848
3895
  * A font-palette-values rule matching this node.
3849
3896
  */
3850
3897
  cssFontPaletteValuesRule?: CSSFontPaletteValuesRule;
3898
+ /**
3899
+ * A list of simple @rules matching this node or its pseudo-elements.
3900
+ */
3901
+ cssAtRules?: CSSAtRule[];
3851
3902
  /**
3852
3903
  * Id of the first parent element that does not have display: contents.
3853
3904
  */
@@ -18464,6 +18515,11 @@ export namespace Target {
18464
18515
  * This can be the page or tab target ID.
18465
18516
  */
18466
18517
  targetId: TargetID;
18518
+ /**
18519
+ * The id of the panel we want DevTools to open initially. Currently
18520
+ * supported panels are elements, console, network, sources and resources.
18521
+ */
18522
+ panelId?: string;
18467
18523
  }
18468
18524
 
18469
18525
  export interface OpenDevToolsResponse extends ProtocolResponseWithError {
@@ -1,53 +1,3 @@
1
- Title: PerformanceTraceFormatter formatCriticalRequests
2
- Content:
3
- Critical network requests:
4
-
5
- Network requests data:
6
-
7
-
8
-
9
- allUrls = [0: http://localhost:8000/, 1: https://code.jquery.com/jquery-3.7.1.js, 2: http://localhost:8000/render-blocking-stylesheet.css, 3: http://localhost:8000/render-blocking-script.js]
10
-
11
- 0;s-1803;2 ms;3 ms;576 ms;583 ms;582 ms;0.4 ms;7 ms;200;text/html;VeryHigh;VeryHigh;VeryHigh;f;http/1.0;f;;[];[Content-Length: <redacted>|Date: Fri, 07 Mar 2025 15:02:27 GMT|Content-type: text/html|Last-Modified: Fri, 07 Mar 2025 14:58:55 GMT|Server: SimpleHTTP/0.6 Python/3.9.6]
12
- 1;s-1920;581 ms;585 ms;1,943 ms;1,944 ms;1,363 ms;776 ms;1 ms;200;application/javascript;High;High;High;t;h2;f;0;[];[content-encoding: gzip|etag: <redacted>|age: 3975412|x-cache: <redacted>|date: Fri, 07 Mar 2025 15:02:28 GMT|content-type: application/javascript; charset=utf-8|vary: Accept-Encoding|x-cache-hits: <redacted>|last-modified: Fri, 18 Oct 1991 12:00:00 GMT|x-served-by: <redacted>|cache-control: public, max-age=31536000, stale-while-revalidate=604800|x-timer: <redacted>|via: 1.1 varnish, 1.1 varnish|accept-ranges: bytes|access-control-allow-origin: *|content-length: <redacted>|server: nginx]
13
- 2;s-1924;582 ms;583 ms;1,193 ms;1,193 ms;612 ms;0.2 ms;0.2 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;http/1.0;f;0;[];[Content-Length: <redacted>|Date: Fri, 07 Mar 2025 15:02:28 GMT|Content-type: text/css|Last-Modified: Fri, 07 Mar 2025 14:58:07 GMT|Server: SimpleHTTP/0.6 Python/3.9.6]
14
- 3;s-1922;582 ms;583 ms;1,177 ms;1,178 ms;596 ms;0.4 ms;1 ms;200;text/javascript;High;High;High;t;http/1.0;f;0;[];[Content-Length: <redacted>|Date: Fri, 07 Mar 2025 15:02:28 GMT|Content-type: text/javascript|Last-Modified: Fri, 07 Mar 2025 15:00:28 GMT|Server: SimpleHTTP/0.6 Python/3.9.6]
15
- === end content
16
-
17
- Title: PerformanceTraceFormatter formatLongestTasks
18
- Content:
19
- Longest 3 tasks:
20
- - total time: 11 ms, event: (eventKey: r-62, ts: 2297273193336)
21
- - total time: 3 ms, event: (eventKey: r-723, ts: 2297274436743)
22
- - total time: 2 ms, event: (eventKey: r-631, ts: 2297274234151)
23
- === end content
24
-
25
- Title: PerformanceTraceFormatter formatMainThreadBottomUpSummary
26
- Content:
27
- This is the bottom-up summary for the entire trace. Only the top 10 activities (sorted by self time) are shown. An activity is all the aggregated time spent on the same type of work. For example, it can be all the time spent in a specific JavaScript function, or all the time spent in a specific browser rendering stage (like layout, v8 compile, parsing html). "Self time" represents the aggregated time spent directly in an activity, across all occurrences. "Total time" represents the aggregated time spent in an activity or any of its children.
28
-
29
- - self: 186 ms, total: 193 ms, source: Compile code
30
- - self: 98 ms, total: 993 ms, source: Task
31
- - self: 56 ms, total: 70 ms, source: Compile script
32
- - self: 52 ms, total: 64 ms, source: setTimeout
33
- - self: 38 ms, total: 40 ms, source: aC (url: https://s.yimg.com/aaq/f10d509c/d1irmdsmbztlvx.js, line: 0, column: 19068)
34
- - self: 35 ms, total: 35 ms, source: Recalculate style (url: https://news.yahoo.com/, line: 57, column: 187957)
35
- - self: 34 ms, total: 34 ms, source: Layout (url: https://news.yahoo.com/, line: 57, column: 187957)
36
- - self: 31 ms, total: 34 ms, source: clearTimeout
37
- - self: 30 ms, total: 53 ms, source: Parse HTML
38
- - self: 26 ms, total: 259 ms, source: Function call
39
- === end content
40
-
41
- Title: PerformanceTraceFormatter formatThirdPartySummary
42
- Content:
43
- Third party summary:
44
- - name: Google/Doubleclick Ads, main thread time: 53 ms, network transfer size: 258.6 kB
45
- - name: Taboola, main thread time: 43 ms, network transfer size: 393.6 kB
46
- - name: Google Tag Manager, main thread time: 19 ms, network transfer size: 123.8 kB
47
- - name: AOL / Oath / Verizon Media, main thread time: 5 ms, network transfer size: 42.3 kB
48
- - name: ay.delivery, main thread time: 4 ms, network transfer size: 123 kB
49
- === end content
50
-
51
1
  Title: PerformanceTraceFormatter formatMainThreadTrackSummary
52
2
  Content:
53
3
  # Top-down main thread summary
@@ -512,7 +462,7 @@ Network throttling: none
512
462
 
513
463
  The following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.
514
464
 
515
- ## insight set id: 86EB5E5C401E3E17ECE461B3FC627867
465
+ ## insight set id: NAVIGATION_0
516
466
 
517
467
  URL: https://web.dev/cls/
518
468
  Bounds: {min: 1020034834921, max: 1020036087961}
@@ -554,7 +504,7 @@ Network throttling: none
554
504
 
555
505
  The following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.
556
506
 
557
- ## insight set id: 513BDA1E9EC088611B53BFF7A859B5DD
507
+ ## insight set id: NAVIGATION_0
558
508
 
559
509
  URL: https://news.yahoo.com/
560
510
  Bounds: {min: 157423488682, max: 157427277166}
@@ -625,7 +575,7 @@ Network throttling: Fast 3G
625
575
 
626
576
  The following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.
627
577
 
628
- ## insight set id: 8671F33ECE0C8DBAEFBC2F9A2D1D6107
578
+ ## insight set id: NAVIGATION_0
629
579
 
630
580
  URL: http://localhost:8080/render-blocking
631
581
  Bounds: {min: 171607579779, max: 171613750571}
@@ -649,7 +599,7 @@ Available insights:
649
599
  example question: Show me the most impactful render blocking requests that I should focus on
650
600
  example question: How can I reduce the number of render blocking requests?
651
601
 
652
- ## insight set id: 1AE2016BBCC48AA090FDAE2CBBA01900
602
+ ## insight set id: NAVIGATION_1
653
603
 
654
604
  URL: http://localhost:8080/render-blocking
655
605
  Bounds: {min: 171613750571, max: 171616667355}
@@ -685,7 +635,7 @@ Network throttling: No throttling
685
635
 
686
636
  The following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.
687
637
 
688
- ## insight set id: 9094E106056B51D078CE44F3356FE194
638
+ ## insight set id: NAVIGATION_0
689
639
 
690
640
  URL: http://localhost/image-delivery-cases.html
691
641
  Bounds: {min: 59728649746, max: 59734400108}
@@ -758,7 +708,7 @@ Network throttling: No throttling
758
708
 
759
709
  The following is a list of insight sets. An insight set covers a specific part of the trace, split by navigations. The insights within each insight set are specific to that part of the trace. Be sure to consider the insight set id and bounds when calling functions. If no specific insight set or navigation is mentioned, assume the user is referring to the first one.
760
710
 
761
- ## insight set id: 9094E106056B51D078CE44F3356FE194
711
+ ## insight set id: NAVIGATION_0
762
712
 
763
713
  URL: http://localhost/image-delivery-cases.html
764
714
  Bounds: {min: 59728649746, max: 59734400108}
@@ -859,6 +809,121 @@ Available insights:
859
809
  example question: Which third parties are having the largest impact on my page performance?
860
810
  === end content
861
811
 
812
+ Title: PerformanceTraceFormatter formatCriticalRequests render-blocking-requests.json.gz
813
+ Content:
814
+ # Critical network requests
815
+
816
+
817
+ Network requests data:
818
+
819
+
820
+
821
+ allUrls = [0: http://localhost:8000/, 1: https://code.jquery.com/jquery-3.7.1.js, 2: http://localhost:8000/render-blocking-stylesheet.css, 3: http://localhost:8000/render-blocking-script.js]
822
+
823
+ 0;s-1803;2 ms;3 ms;576 ms;583 ms;582 ms;0.4 ms;7 ms;200;text/html;VeryHigh;VeryHigh;VeryHigh;f;http/1.0;f;;[];[Content-Length: <redacted>|Date: Fri, 07 Mar 2025 15:02:27 GMT|Content-type: text/html|Last-Modified: Fri, 07 Mar 2025 14:58:55 GMT|Server: SimpleHTTP/0.6 Python/3.9.6]
824
+ 1;s-1920;581 ms;585 ms;1,943 ms;1,944 ms;1,363 ms;776 ms;1 ms;200;application/javascript;High;High;High;t;h2;f;0;[];[content-encoding: gzip|etag: <redacted>|age: 3975412|x-cache: <redacted>|date: Fri, 07 Mar 2025 15:02:28 GMT|content-type: application/javascript; charset=utf-8|vary: Accept-Encoding|x-cache-hits: <redacted>|last-modified: Fri, 18 Oct 1991 12:00:00 GMT|x-served-by: <redacted>|cache-control: public, max-age=31536000, stale-while-revalidate=604800|x-timer: <redacted>|via: 1.1 varnish, 1.1 varnish|accept-ranges: bytes|access-control-allow-origin: *|content-length: <redacted>|server: nginx]
825
+ 2;s-1924;582 ms;583 ms;1,193 ms;1,193 ms;612 ms;0.2 ms;0.2 ms;200;text/css;VeryHigh;VeryHigh;VeryHigh;t;http/1.0;f;0;[];[Content-Length: <redacted>|Date: Fri, 07 Mar 2025 15:02:28 GMT|Content-type: text/css|Last-Modified: Fri, 07 Mar 2025 14:58:07 GMT|Server: SimpleHTTP/0.6 Python/3.9.6]
826
+ 3;s-1922;582 ms;583 ms;1,177 ms;1,178 ms;596 ms;0.4 ms;1 ms;200;text/javascript;High;High;High;t;http/1.0;f;0;[];[Content-Length: <redacted>|Date: Fri, 07 Mar 2025 15:02:28 GMT|Content-type: text/javascript|Last-Modified: Fri, 07 Mar 2025 15:00:28 GMT|Server: SimpleHTTP/0.6 Python/3.9.6]
827
+ === end content
828
+
829
+ Title: PerformanceTraceFormatter formatCriticalRequests multiple-navigations-render-blocking.json.gz
830
+ Content:
831
+ # Critical network requests
832
+
833
+ ## insight set id: NAVIGATION_0
834
+
835
+ none
836
+
837
+ ## insight set id: NAVIGATION_1
838
+
839
+ none
840
+ === end content
841
+
842
+ Title: PerformanceTraceFormatter formatLongestTasks long-task-from-worker-thread.json.gz
843
+ Content:
844
+ # Longest tasks
845
+
846
+ - total time: 11 ms, event: (eventKey: r-62, ts: 2297273193336)
847
+ - total time: 3 ms, event: (eventKey: r-723, ts: 2297274436743)
848
+ - total time: 2 ms, event: (eventKey: r-631, ts: 2297274234151)
849
+ === end content
850
+
851
+ Title: PerformanceTraceFormatter formatLongestTasks multiple-navigations-render-blocking.json.gz
852
+ Content:
853
+ # Longest tasks
854
+
855
+ ## insight set id: NAVIGATION_0
856
+
857
+ - total time: 8 ms, event: (eventKey: r-6426, ts: 171608877757)
858
+ - total time: 7 ms, event: (eventKey: r-3609, ts: 171608164318)
859
+ - total time: 2 ms, event: (eventKey: r-6501, ts: 171608885367)
860
+
861
+ ## insight set id: NAVIGATION_1
862
+
863
+ - total time: 3 ms, event: (eventKey: r-12777, ts: 171614328028)
864
+ - total time: 0.7 ms, event: (eventKey: r-15391, ts: 171615043591)
865
+ - total time: 0.7 ms, event: (eventKey: r-15448, ts: 171615044306)
866
+ === end content
867
+
868
+ Title: PerformanceTraceFormatter formatMainThreadBottomUpSummary yahoo-news.json.gz
869
+ Content:
870
+ # Main thread bottom-up summary
871
+
872
+ This is the bottom-up summary for the entire trace. Only the top 10 activities (sorted by self time) are shown. An activity is all the aggregated time spent on the same type of work. For example, it can be all the time spent in a specific JavaScript function, or all the time spent in a specific browser rendering stage (like layout, v8 compile, parsing html). "Self time" represents the aggregated time spent directly in an activity, across all occurrences. "Total time" represents the aggregated time spent in an activity or any of its children.
873
+
874
+ - self: 186 ms, total: 193 ms, source: Compile code
875
+ - self: 98 ms, total: 990 ms, source: Task
876
+ - self: 56 ms, total: 70 ms, source: Compile script
877
+ - self: 52 ms, total: 64 ms, source: setTimeout
878
+ - self: 38 ms, total: 40 ms, source: aC (url: https://s.yimg.com/aaq/f10d509c/d1irmdsmbztlvx.js, line: 0, column: 19068)
879
+ - self: 35 ms, total: 35 ms, source: Recalculate style (url: https://news.yahoo.com/, line: 57, column: 187957)
880
+ - self: 34 ms, total: 34 ms, source: Layout (url: https://news.yahoo.com/, line: 57, column: 187957)
881
+ - self: 31 ms, total: 34 ms, source: clearTimeout
882
+ - self: 30 ms, total: 53 ms, source: Parse HTML
883
+ - self: 26 ms, total: 259 ms, source: Function call
884
+ === end content
885
+
886
+ Title: PerformanceTraceFormatter formatMainThreadBottomUpSummary multiple-navigations-render-blocking.json.gz
887
+ Content:
888
+ # Main thread bottom-up summary
889
+
890
+ This is the bottom-up summary for the entire trace. Only the top 10 activities (sorted by self time) are shown. An activity is all the aggregated time spent on the same type of work. For example, it can be all the time spent in a specific JavaScript function, or all the time spent in a specific browser rendering stage (like layout, v8 compile, parsing html). "Self time" represents the aggregated time spent directly in an activity, across all occurrences. "Total time" represents the aggregated time spent in an activity or any of its children.
891
+
892
+ ## insight set id: NAVIGATION_0
893
+
894
+ - self: 10 ms, total: 21 ms, source: Task
895
+ - self: 7 ms, total: 7 ms, source: Layout
896
+ - self: 2 ms, total: 2 ms, source: Profiling overhead
897
+
898
+ ## insight set id: NAVIGATION_1
899
+
900
+ - self: 6 ms, total: 7 ms, source: Task
901
+ === end content
902
+
903
+ Title: PerformanceTraceFormatter formatThirdPartySummary yahoo-news.json.gz
904
+ Content:
905
+ # 3rd party summary
906
+
907
+ - name: Yahoo!, main thread time: 270 ms, network transfer size: 2.4 MB
908
+ - name: Google/Doubleclick Ads, main thread time: 53 ms, network transfer size: 258.6 kB
909
+ - name: Taboola, main thread time: 43 ms, network transfer size: 393.6 kB
910
+ - name: Google Tag Manager, main thread time: 19 ms, network transfer size: 123.8 kB
911
+ - name: AOL / Oath / Verizon Media, main thread time: 5 ms, network transfer size: 42.3 kB
912
+ === end content
913
+
914
+ Title: PerformanceTraceFormatter formatThirdPartySummary multiple-navigations-render-blocking.json.gz
915
+ Content:
916
+ # 3rd party summary
917
+
918
+ ## insight set id: NAVIGATION_0
919
+
920
+ - name: localhost, main thread time: 0.8 ms, network transfer size: 22.9 kB
921
+
922
+ ## insight set id: NAVIGATION_1
923
+
924
+ - name: localhost, main thread time: 0.3 ms, network transfer size: 22.9 kB
925
+ === end content
926
+
862
927
  Title: PerformanceTraceFormatter formatNetworkRequests formats network requests that have redirects
863
928
  Content:
864
929
  ## Network request: http://localhost:3000/redirect3