chrome-devtools-frontend 1.0.1657855 → 1.0.1660788

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 (274) hide show
  1. package/.agents/skills/migrate-chromium-test/SKILL.md +15 -70
  2. package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +37 -18
  3. package/.agents/skills/version-control/SKILL.md +8 -1
  4. package/AUTHORS +1 -0
  5. package/SECURITY.md +3 -0
  6. package/docs/get_the_code.md +6 -0
  7. package/front_end/Tests.js +6 -6
  8. package/front_end/core/common/Gzip.ts +12 -5
  9. package/front_end/core/host/AidaClient.ts +35 -9
  10. package/front_end/core/host/GdpClient.ts +10 -7
  11. package/front_end/core/platform/StringUtilities.ts +35 -0
  12. package/front_end/core/sdk/AccessibilityModel.snapshot.txt +17 -0
  13. package/front_end/core/sdk/AccessibilityModel.ts +132 -2
  14. package/front_end/core/sdk/CPUThrottlingManager.ts +8 -5
  15. package/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +2 -5
  16. package/front_end/core/sdk/ConsoleModel.ts +5 -5
  17. package/front_end/core/sdk/DOMDebuggerModel.ts +5 -1
  18. package/front_end/core/sdk/DOMModel.ts +32 -18
  19. package/front_end/core/sdk/NetworkManager.ts +57 -11
  20. package/front_end/core/sdk/NetworkRequest.ts +37 -1
  21. package/front_end/core/sdk/OverlayModel.ts +45 -6
  22. package/front_end/core/sdk/ResourceTreeModel.ts +6 -7
  23. package/front_end/core/sdk/ScreenCaptureModel.ts +2 -2
  24. package/front_end/core/sdk/ServerTiming.ts +17 -13
  25. package/front_end/core/sdk/ServiceWorkerCacheModel.ts +4 -2
  26. package/front_end/core/sdk/ServiceWorkerManager.ts +19 -5
  27. package/front_end/core/sdk/TargetManager.ts +10 -1
  28. package/front_end/core/sdk/TraceObject.ts +4 -2
  29. package/front_end/core/sdk/sdk-meta.ts +170 -0
  30. package/front_end/design_system_tokens.css +0 -5
  31. package/front_end/entrypoints/formatter_worker/FormattedContentBuilder.ts +5 -2
  32. package/front_end/entrypoints/formatter_worker/HTMLFormatter.ts +26 -4
  33. package/front_end/entrypoints/formatter_worker/JavaScriptFormatter.ts +8 -3
  34. package/front_end/entrypoints/inspector_main/InspectorMain.ts +4 -4
  35. package/front_end/entrypoints/inspector_main/OutermostTargetSelector.ts +2 -2
  36. package/front_end/entrypoints/inspector_main/RenderingOptions.ts +36 -37
  37. package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +15 -33
  38. package/front_end/entrypoints/js_app/js_app.ts +6 -5
  39. package/front_end/entrypoints/main/GlobalAiButton.ts +4 -4
  40. package/front_end/entrypoints/main/MainImpl.ts +18 -21
  41. package/front_end/entrypoints/main/main-meta.ts +42 -42
  42. package/front_end/entrypoints/node_app/node_app.ts +3 -2
  43. package/front_end/entrypoints/worker_app/WorkerMain.ts +1 -1
  44. package/front_end/foundation/Universe.ts +44 -1
  45. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  46. package/front_end/generated/SupportedCSSProperties.js +19 -12
  47. package/front_end/generated/protocol.ts +3 -1
  48. package/front_end/models/ai_assistance/AiConversation.ts +19 -17
  49. package/front_end/models/ai_assistance/AiHistoryStorage.ts +37 -14
  50. package/front_end/models/ai_assistance/AiUtils.ts +38 -42
  51. package/front_end/models/ai_assistance/agents/AiAgent.ts +5 -1
  52. package/front_end/models/ai_assistance/agents/ContextSelectionAgent.ts +3 -2
  53. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +2 -1
  54. package/front_end/models/ai_assistance/agents/StorageAgent.ts +7 -5
  55. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +270 -286
  56. package/front_end/models/ai_assistance/data_formatters/UnitFormatters.ts +20 -0
  57. package/front_end/models/ai_assistance/performance/AICallTree.ts +3 -1
  58. package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +3 -2
  59. package/front_end/models/autofill_manager/AutofillManager.ts +3 -1
  60. package/front_end/models/bindings/CompilerScriptMapping.ts +2 -1
  61. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +2 -1
  62. package/front_end/models/bindings/NetworkProject.ts +4 -0
  63. package/front_end/models/bindings/PresentationConsoleMessageHelper.ts +2 -1
  64. package/front_end/models/bindings/ResourceUtils.ts +1 -1
  65. package/front_end/models/bindings/SASSSourceMapping.ts +8 -5
  66. package/front_end/models/emulation/EmulatedDevices.ts +389 -8
  67. package/front_end/models/extensions/ExtensionAPI.ts +6 -6
  68. package/front_end/models/extensions/LanguageExtensionEndpoint.ts +13 -12
  69. package/front_end/models/issues_manager/BounceTrackingIssue.ts +1 -1
  70. package/front_end/models/issues_manager/ClientHintIssue.ts +1 -1
  71. package/front_end/models/issues_manager/ConnectionAllowlistIssue.ts +1 -1
  72. package/front_end/models/issues_manager/ContentSecurityPolicyIssue.ts +7 -7
  73. package/front_end/models/issues_manager/CookieDeprecationMetadataIssue.ts +2 -2
  74. package/front_end/models/issues_manager/CookieIssue.ts +6 -7
  75. package/front_end/models/issues_manager/CorsIssue.ts +3 -3
  76. package/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.ts +2 -2
  77. package/front_end/models/issues_manager/DeprecationIssue.ts +3 -3
  78. package/front_end/models/issues_manager/EmailVerificationRequestIssue.ts +1 -1
  79. package/front_end/models/issues_manager/FederatedAuthRequestIssue.ts +1 -1
  80. package/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.ts +1 -1
  81. package/front_end/models/issues_manager/GenericIssue.ts +7 -7
  82. package/front_end/models/issues_manager/HeavyAdIssue.ts +3 -3
  83. package/front_end/models/issues_manager/Issue.ts +8 -8
  84. package/front_end/models/issues_manager/MixedContentIssue.ts +1 -1
  85. package/front_end/models/issues_manager/PartitioningBlobURLIssue.ts +3 -3
  86. package/front_end/models/issues_manager/QuirksModeIssue.ts +1 -1
  87. package/front_end/models/issues_manager/SRIMessageSignatureIssue.ts +2 -2
  88. package/front_end/models/issues_manager/SelectivePermissionsInterventionIssue.ts +2 -2
  89. package/front_end/models/issues_manager/SharedArrayBufferIssue.ts +2 -2
  90. package/front_end/models/issues_manager/SharedDictionaryIssue.ts +1 -1
  91. package/front_end/models/issues_manager/UnencodedDigestIssue.ts +3 -3
  92. package/front_end/models/javascript_metadata/NativeFunctions.js +5 -1
  93. package/front_end/models/stack_trace/StackTraceModel.ts +3 -3
  94. package/front_end/models/text_utils/ContentData.ts +27 -0
  95. package/front_end/models/trace/helpers/SamplesIntegrator.ts +21 -5
  96. package/front_end/models/trace_source_maps_resolver/SourceMapsResolver.ts +29 -14
  97. package/front_end/models/web_mcp/WebMCPModel.ts +24 -6
  98. package/front_end/models/workspace/IgnoreListManager.ts +6 -6
  99. package/front_end/models/workspace/UISourceCode.ts +3 -3
  100. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +25 -22
  101. package/front_end/panels/ai_assistance/ExportConversation.ts +3 -4
  102. package/front_end/panels/ai_assistance/ai_assistance-meta.ts +3 -3
  103. package/front_end/panels/ai_assistance/components/ChatInput.ts +2 -2
  104. package/front_end/panels/ai_assistance/components/ChatMessage.ts +7 -0
  105. package/front_end/panels/ai_assistance/components/DisabledWidget.ts +2 -2
  106. package/front_end/panels/animation/AnimationTimeline.ts +17 -19
  107. package/front_end/panels/animation/AnimationUI.ts +5 -5
  108. package/front_end/panels/animation/animation-meta.ts +2 -2
  109. package/front_end/panels/application/ApplicationPanelSidebar.ts +4 -3
  110. package/front_end/panels/application/DeviceBoundSessionsView.ts +2 -6
  111. package/front_end/panels/application/IndexedDBViews.ts +220 -266
  112. package/front_end/panels/application/OpenedWindowDetailsView.ts +1 -1
  113. package/front_end/panels/application/ResourcesPanel.ts +9 -2
  114. package/front_end/panels/application/ServiceWorkersView.ts +252 -211
  115. package/front_end/panels/application/StorageView.ts +97 -33
  116. package/front_end/panels/application/WebMCPView.ts +15 -1
  117. package/front_end/panels/application/indexedDBViews.css +38 -9
  118. package/front_end/panels/application/preloading/helper/PreloadingForward.ts +2 -1
  119. package/front_end/panels/application/storageView.css +26 -9
  120. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +5 -1
  121. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +8 -6
  122. package/front_end/panels/common/DOMLinkifier.ts +1 -1
  123. package/front_end/panels/common/ExtensionServer.ts +119 -14
  124. package/front_end/panels/console/ConsoleContextSelector.ts +1 -1
  125. package/front_end/panels/console/ConsolePinPane.ts +2 -2
  126. package/front_end/panels/console/ConsolePrompt.ts +2 -2
  127. package/front_end/panels/console/ConsoleView.ts +1 -1
  128. package/front_end/panels/console/SymbolizedErrorWidget.ts +2 -1
  129. package/front_end/panels/console_counters/WarningErrorCounter.ts +2 -2
  130. package/front_end/panels/coverage/CoverageListView.ts +28 -28
  131. package/front_end/panels/coverage/CoverageModel.ts +2 -1
  132. package/front_end/panels/coverage/CoverageView.ts +22 -22
  133. package/front_end/panels/coverage/coverage-meta.ts +5 -5
  134. package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +36 -36
  135. package/front_end/panels/css_overview/CSSOverviewProcessingView.ts +1 -1
  136. package/front_end/panels/css_overview/CSSOverviewSidebarPanel.ts +2 -2
  137. package/front_end/panels/css_overview/CSSOverviewStartView.ts +6 -6
  138. package/front_end/panels/css_overview/CSSOverviewUnusedDeclarations.ts +6 -6
  139. package/front_end/panels/css_overview/css_overview-meta.ts +2 -2
  140. package/front_end/panels/developer_resources/DeveloperResourcesListView.ts +1 -1
  141. package/front_end/panels/elements/AccessibilityTreeUtils.ts +8 -102
  142. package/front_end/panels/elements/AccessibilityTreeView.ts +163 -70
  143. package/front_end/panels/elements/ElementsPanel.ts +17 -11
  144. package/front_end/panels/elements/ElementsTreeElement.ts +4 -1
  145. package/front_end/panels/elements/ElementsTreeOutline.ts +4 -4
  146. package/front_end/panels/elements/LayoutPane.ts +1 -1
  147. package/front_end/panels/elements/MetricsSidebarPane.ts +100 -34
  148. package/front_end/panels/elements/StylePropertiesSection.ts +2 -2
  149. package/front_end/panels/elements/StylePropertyTreeElement.ts +8 -2
  150. package/front_end/panels/elements/StylesSidebarPane.ts +1 -1
  151. package/front_end/panels/elements/components/AccessibilityTreeNode.ts +7 -18
  152. package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +2 -2
  153. package/front_end/panels/elements/components/QueryContainer.ts +1 -1
  154. package/front_end/panels/issues/AffectedDirectivesView.ts +1 -1
  155. package/front_end/panels/issues/AffectedResourcesView.ts +2 -1
  156. package/front_end/panels/layer_viewer/LayerViewHost.ts +1 -1
  157. package/front_end/panels/network/NetworkDataGridNode.ts +124 -36
  158. package/front_end/panels/network/NetworkLogView.ts +9 -1
  159. package/front_end/panels/network/NetworkLogViewColumns.ts +18 -0
  160. package/front_end/panels/network/NetworkPanel.ts +2 -1
  161. package/front_end/panels/network/RequestPayloadView.ts +53 -7
  162. package/front_end/panels/network/RequestPreviewView.ts +7 -1
  163. package/front_end/panels/network/components/ResponseHeaderSection.ts +1 -1
  164. package/front_end/panels/network/forward/UIFilter.ts +1 -0
  165. package/front_end/panels/network/requestPayloadView.css +10 -0
  166. package/front_end/panels/performance_monitor/PerformanceMonitor.ts +12 -12
  167. package/front_end/panels/performance_monitor/performance_monitor-meta.ts +7 -7
  168. package/front_end/panels/profiler/HeapDetachedElementsView.ts +2 -2
  169. package/front_end/panels/profiler/HeapProfileView.ts +563 -51
  170. package/front_end/panels/profiler/HeapSnapshotView.ts +13 -8
  171. package/front_end/panels/profiler/ProfilesPanel.ts +13 -7
  172. package/front_end/panels/profiler/WritableProfileHeader.ts +152 -0
  173. package/front_end/panels/profiler/profiler.ts +2 -2
  174. package/front_end/panels/recorder/RecorderController.ts +14 -15
  175. package/front_end/panels/recorder/components/CreateRecordingView.ts +11 -11
  176. package/front_end/panels/recorder/components/ExtensionView.ts +74 -83
  177. package/front_end/panels/recorder/components/RecordingListView.ts +3 -3
  178. package/front_end/panels/recorder/components/RecordingView.ts +13 -10
  179. package/front_end/panels/recorder/components/ReplaySection.ts +9 -9
  180. package/front_end/panels/recorder/components/StepEditor.ts +352 -321
  181. package/front_end/panels/recorder/components/StepView.ts +36 -37
  182. package/front_end/panels/recorder/components/recordingView.css +1 -1
  183. package/front_end/panels/recorder/models/RecorderSettings.ts +2 -2
  184. package/front_end/panels/recorder/recorder-meta.ts +7 -7
  185. package/front_end/panels/screencast/ScreencastApp.ts +1 -1
  186. package/front_end/panels/screencast/ScreencastView.ts +12 -12
  187. package/front_end/panels/search/SearchResultsPane.ts +4 -4
  188. package/front_end/panels/search/SearchView.ts +20 -20
  189. package/front_end/panels/security/SecurityModel.ts +7 -7
  190. package/front_end/panels/security/SecurityPanel.ts +99 -107
  191. package/front_end/panels/security/SecurityPanelSidebar.ts +7 -7
  192. package/front_end/panels/security/security-meta.ts +2 -2
  193. package/front_end/panels/sensors/LocationsSettingsTab.ts +19 -19
  194. package/front_end/panels/sensors/SensorsView.ts +27 -27
  195. package/front_end/panels/sensors/sensors-meta.ts +13 -167
  196. package/front_end/panels/settings/AISettingsTab.ts +98 -56
  197. package/front_end/panels/settings/EditFileSystemView.ts +2 -2
  198. package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +20 -20
  199. package/front_end/panels/settings/KeybindsSettingsTab.ts +20 -21
  200. package/front_end/panels/settings/SettingsScreen.ts +11 -11
  201. package/front_end/panels/settings/WorkspaceSettingsTab.ts +5 -5
  202. package/front_end/panels/settings/components/SyncSection.ts +12 -12
  203. package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +13 -13
  204. package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +31 -31
  205. package/front_end/panels/settings/emulation/emulation-meta.ts +1 -1
  206. package/front_end/panels/settings/settings-meta.ts +14 -14
  207. package/front_end/panels/sources/NavigatorView.ts +7 -6
  208. package/front_end/panels/sources/ScopeChainSidebarPane.ts +83 -37
  209. package/front_end/panels/sources/SourcesNavigator.ts +20 -18
  210. package/front_end/panels/sources/SourcesView.ts +10 -1
  211. package/front_end/panels/sources/scopeChainSidebarPane.css +12 -4
  212. package/front_end/panels/sources/sources-meta.ts +4 -4
  213. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +5 -2
  214. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +2 -1
  215. package/front_end/panels/timeline/TimelineFlameChartNetworkDataProvider.ts +2 -1
  216. package/front_end/panels/timeline/TimelineFlameChartView.ts +1 -1
  217. package/front_end/panels/timeline/TimelinePanel.ts +2 -1
  218. package/front_end/panels/timeline/TimelineUIUtils.ts +5 -2
  219. package/front_end/panels/timeline/components/NetworkRequestDetails.ts +4 -2
  220. package/front_end/panels/timeline/components/NetworkRequestTooltip.ts +4 -2
  221. package/front_end/panels/timeline/components/insights/ImageRef.ts +2 -1
  222. package/front_end/panels/utils/utils.ts +7 -3
  223. package/front_end/panels/web_audio/WebAudioView.ts +17 -18
  224. package/front_end/panels/web_audio/web_audio-meta.ts +3 -3
  225. package/front_end/panels/whats_new/ReleaseNoteView.ts +1 -1
  226. package/front_end/panels/whats_new/whats_new-meta.ts +11 -11
  227. package/front_end/third_party/chromium/README.chromium +1 -1
  228. package/front_end/third_party/lit/lib/async-directive.d.ts +2 -1
  229. package/front_end/third_party/lit/lib/async-directive.js +1 -1
  230. package/front_end/third_party/lit/lib/async-directive.js.map +1 -1
  231. package/front_end/third_party/lit/lib/decorators.d.ts +2 -1
  232. package/front_end/third_party/lit/lib/decorators.js.map +1 -1
  233. package/front_end/third_party/lit/lib/directive.d.ts +2 -1
  234. package/front_end/third_party/lit/lib/directive.js.map +1 -1
  235. package/front_end/third_party/lit/lib/directives.d.ts +2 -1
  236. package/front_end/third_party/lit/lib/directives.js +8 -8
  237. package/front_end/third_party/lit/lib/directives.js.map +1 -1
  238. package/front_end/third_party/lit/lib/lit.d.ts +2 -1
  239. package/front_end/third_party/lit/lib/lit.js +1 -1
  240. package/front_end/third_party/lit/lib/lit.js.map +1 -1
  241. package/front_end/third_party/lit/lib/static-html.d.ts +2 -1
  242. package/front_end/third_party/lit/lib/static-html.js +1 -1
  243. package/front_end/third_party/lit/lib/static-html.js.map +1 -1
  244. package/front_end/third_party/lit/package.json +2 -2
  245. package/front_end/third_party/lit/rebuild.sh +1 -1
  246. package/front_end/third_party/lit/src/async-directive.ts +5 -0
  247. package/front_end/ui/components/dialogs/Dialog.ts +1 -1
  248. package/front_end/ui/components/dialogs/ShortcutDialog.ts +1 -1
  249. package/front_end/ui/components/diff_view/DiffView.ts +2 -2
  250. package/front_end/ui/components/issue_counter/IssueCounter.ts +3 -3
  251. package/front_end/ui/components/issue_counter/IssueLinkIcon.ts +5 -5
  252. package/front_end/ui/components/lists/List.ts +2 -2
  253. package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
  254. package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +5 -5
  255. package/front_end/ui/components/settings/SettingCheckbox.ts +1 -1
  256. package/front_end/ui/components/snackbars/Snackbar.ts +1 -1
  257. package/front_end/ui/components/survey_link/SurveyLink.ts +3 -3
  258. package/front_end/ui/components/text_editor/config.ts +2 -2
  259. package/front_end/ui/components/tree_outline/TreeOutline.ts +34 -1
  260. package/front_end/ui/legacy/ReportView.ts +5 -0
  261. package/front_end/ui/legacy/Treeoutline.ts +3 -0
  262. package/front_end/ui/legacy/View.ts +1 -1
  263. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +2 -0
  264. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -3
  265. package/front_end/ui/legacy/components/data_grid/data_grid.ts +1 -0
  266. package/front_end/ui/legacy/components/object_ui/ObjectPopoverHelper.ts +1 -1
  267. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +100 -36
  268. package/front_end/ui/legacy/components/source_frame/ResourceSourceFrame.ts +7 -1
  269. package/front_end/ui/legacy/components/utils/ImagePreview.ts +4 -2
  270. package/front_end/ui/legacy/inspectorCommon.css +5 -0
  271. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  272. package/mcp/mcp.ts +2 -0
  273. package/package.json +4 -4
  274. package/front_end/panels/profiler/ProfileView.ts +0 -611
@@ -3,9 +3,10 @@
3
3
  // found in the LICENSE file.
4
4
 
5
5
  import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
6
- import type * as Protocol from '../../generated/protocol.js';
6
+ import * as Protocol from '../../generated/protocol.js';
7
7
 
8
- import {DeferredDOMNode, DOMModel, type DOMNode, Events as DOMModelEvents} from './DOMModel.js';
8
+ import {DeferredDOMNode, DOMDocument, DOMModel, type DOMNode, Events as DOMModelEvents} from './DOMModel.js';
9
+ import type {FrameManager} from './FrameManager.js';
9
10
  import {SDKModel} from './SDKModel.js';
10
11
  import {Capability, type Target} from './Target.js';
11
12
 
@@ -23,6 +24,7 @@ export interface CoreOrProtocolAxProperty {
23
24
 
24
25
  export class AccessibilityNode {
25
26
  readonly #accessibilityModel: AccessibilityModel;
27
+ readonly #frameManager: FrameManager;
26
28
  readonly #id: Protocol.Accessibility.AXNodeId;
27
29
  readonly #backendDOMNodeId: Protocol.DOM.BackendNodeId|null;
28
30
  readonly #deferredDOMNode: DeferredDOMNode|null;
@@ -39,6 +41,7 @@ export class AccessibilityNode {
39
41
 
40
42
  constructor(accessibilityModel: AccessibilityModel, payload: Protocol.Accessibility.AXNode) {
41
43
  this.#accessibilityModel = accessibilityModel;
44
+ this.#frameManager = accessibilityModel.target().targetManager().getFrameManager();
42
45
 
43
46
  this.#id = payload.nodeId;
44
47
  accessibilityModel.setAXNodeForAXId(this.#id, this);
@@ -190,6 +193,63 @@ export class AccessibilityNode {
190
193
  getFrameId(): Protocol.Page.FrameId|null {
191
194
  return this.#frameId || this.parentNode()?.getFrameId() || null;
192
195
  }
196
+
197
+ isLeafNode(): boolean {
198
+ return this.numChildren() === 0 && this.role()?.value !== 'Iframe';
199
+ }
200
+
201
+ getNodeId(): string {
202
+ return this.getFrameId() + '#' + this.id();
203
+ }
204
+
205
+ async getChildren(): Promise<AccessibilityNode[]> {
206
+ if (this.role()?.value === 'Iframe') {
207
+ const domNode = await this.deferredDOMNode()?.resolvePromise();
208
+ if (!domNode) {
209
+ throw new Error('Could not find corresponding DOMNode');
210
+ }
211
+ const frameId = domNode.frameOwnerFrameId();
212
+ if (!frameId) {
213
+ throw new Error('No owner frameId on iframe node');
214
+ }
215
+ const localRoot = await getRootNode(frameId, this.#frameManager);
216
+ return [localRoot];
217
+ }
218
+ return await this.accessibilityModel().requestAXChildren(this.id(), this.getFrameId() || undefined);
219
+ }
220
+
221
+ async axNodeToText(depth = 0): Promise<string> {
222
+ const indent = ' '.repeat(depth);
223
+ const role = this.role()?.value || '';
224
+ const name = this.name()?.value || '';
225
+ const properties = this.properties() || [];
226
+ const ignored = this.ignored();
227
+ let childDepth = depth + 1;
228
+
229
+ const lines = [];
230
+ if (ignored) {
231
+ if (depth === 0) {
232
+ lines.push('Ignored\n');
233
+ } else {
234
+ childDepth = depth;
235
+ }
236
+ } else {
237
+ let line = `${indent}${role} "${name}"`;
238
+ for (const prop of properties) {
239
+ if (prop.value && isPrintableType(prop.value.type)) {
240
+ line += ` ${prop.name}: ${prop.value.value}`;
241
+ }
242
+ }
243
+ lines.push(line + '\n');
244
+ }
245
+
246
+ const children = await this.getChildren();
247
+ for (const child of children) {
248
+ lines.push(await child.axNodeToText(childDepth));
249
+ }
250
+
251
+ return lines.join('');
252
+ }
193
253
  }
194
254
 
195
255
  export const enum Events {
@@ -363,3 +423,73 @@ export class AccessibilityModel extends SDKModel<EventTypes> implements Protocol
363
423
  }
364
424
 
365
425
  SDKModel.register(AccessibilityModel, {capabilities: Capability.DOM, autostart: false});
426
+
427
+ function getModel(frameId: Protocol.Page.FrameId, frameManager: FrameManager): AccessibilityModel {
428
+ const frame = frameManager.getFrame(frameId);
429
+ const model = frame?.resourceTreeModel().target().model(AccessibilityModel);
430
+ if (!model) {
431
+ throw new Error('Could not instantiate model for frameId');
432
+ }
433
+ return model;
434
+ }
435
+
436
+ export async function getRootNode(frameId: Protocol.Page.FrameId,
437
+ frameManager: FrameManager): Promise<AccessibilityNode> {
438
+ const model = getModel(frameId, frameManager);
439
+ const root = await model.requestRootNode(frameId);
440
+ if (!root) {
441
+ throw new Error('No accessibility root for frame');
442
+ }
443
+ return root;
444
+ }
445
+
446
+ function getFrameIdForNodeOrDocument(node: DOMNode): Protocol.Page.FrameId {
447
+ let frameId;
448
+ if (node instanceof DOMDocument) {
449
+ frameId = node.body?.frameId();
450
+ } else {
451
+ frameId = node.frameId();
452
+ }
453
+ if (!frameId) {
454
+ throw new Error('No frameId for DOM node');
455
+ }
456
+ return frameId;
457
+ }
458
+
459
+ export async function getNodeAndAncestorsFromDOMNode(domNode: DOMNode): Promise<AccessibilityNode[]> {
460
+ const frameManager = domNode.domModel().target().targetManager().getFrameManager();
461
+ let frameId = getFrameIdForNodeOrDocument(domNode);
462
+ const model = getModel(frameId, frameManager);
463
+ const result = await model.requestAndLoadSubTreeToNode(domNode);
464
+ if (!result) {
465
+ throw new Error('Could not retrieve accessibility node for inspected DOM node');
466
+ }
467
+
468
+ const outermostFrameId = frameManager.getOutermostFrame()?.id;
469
+ if (!outermostFrameId) {
470
+ return result;
471
+ }
472
+ while (frameId !== outermostFrameId) {
473
+ const node = await frameManager.getFrame(frameId)?.getOwnerDOMNodeOrDocument();
474
+ if (!node) {
475
+ break;
476
+ }
477
+ frameId = getFrameIdForNodeOrDocument(node);
478
+ const model = getModel(frameId, frameManager);
479
+ const ancestors = await model.requestAndLoadSubTreeToNode(node);
480
+ result.push(...ancestors || []);
481
+ }
482
+ return result;
483
+ }
484
+
485
+ export function isPrintableType(valueType: Protocol.Accessibility.AXValueType): boolean {
486
+ switch (valueType) {
487
+ case Protocol.Accessibility.AXValueType.Boolean:
488
+ case Protocol.Accessibility.AXValueType.BooleanOrUndefined:
489
+ case Protocol.Accessibility.AXValueType.String:
490
+ case Protocol.Accessibility.AXValueType.Number:
491
+ return true;
492
+ default:
493
+ return false;
494
+ }
495
+ }
@@ -19,7 +19,10 @@ export class CPUThrottlingManager extends Common.ObjectWrapper.ObjectWrapper<Eve
19
19
  super();
20
20
  this.#targetManager = targetManager;
21
21
  this.#cpuThrottlingRate = 1; // No throttling
22
- targetManager.observeModels(EmulationModel, this);
22
+ }
23
+
24
+ initialize(): void {
25
+ this.#targetManager.observeModels(EmulationModel, this);
23
26
  }
24
27
 
25
28
  static instance(opts: {
@@ -29,10 +32,10 @@ export class CPUThrottlingManager extends Common.ObjectWrapper.ObjectWrapper<Eve
29
32
  } = {forceNew: null}): CPUThrottlingManager {
30
33
  const {forceNew} = opts;
31
34
  if (!Root.DevToolsContext.globalInstance().has(CPUThrottlingManager) || forceNew) {
32
- Root.DevToolsContext.globalInstance().set(
33
- CPUThrottlingManager,
34
- new CPUThrottlingManager(opts.settings ?? Common.Settings.Settings.instance(),
35
- opts.targetManager ?? TargetManager.instance()));
35
+ const manager = new CPUThrottlingManager(opts.settings ?? Common.Settings.Settings.instance(),
36
+ opts.targetManager ?? TargetManager.instance());
37
+ manager.initialize();
38
+ Root.DevToolsContext.globalInstance().set(CPUThrottlingManager, manager);
36
39
  }
37
40
 
38
41
  return Root.DevToolsContext.globalInstance().get(CPUThrottlingManager);
@@ -7,7 +7,7 @@ import type * as Common from '../common/common.js';
7
7
  import * as i18n from '../i18n/i18n.js';
8
8
  import type * as Platform from '../platform/platform.js';
9
9
 
10
- import {PageResourceLoader, type PageResourceLoadInitiator} from './PageResourceLoader.js';
10
+ import type {PageResourceLoader, PageResourceLoadInitiator} from './PageResourceLoader.js';
11
11
 
12
12
  const UIStrings = {
13
13
  /**
@@ -28,10 +28,7 @@ export class CompilerSourceMappingContentProvider implements TextUtils.ContentPr
28
28
  readonly #pageResourceLoader: PageResourceLoader;
29
29
 
30
30
  constructor(sourceURL: Platform.DevToolsPath.UrlString, contentType: Common.ResourceType.ResourceType,
31
- initiator: PageResourceLoadInitiator,
32
- pageResourceLoader: PageResourceLoader = initiator.target ?
33
- initiator.target.targetManager().context.get(PageResourceLoader) :
34
- PageResourceLoader.instance()) {
31
+ initiator: PageResourceLoadInitiator, pageResourceLoader: PageResourceLoader) {
35
32
  this.#sourceURL = sourceURL;
36
33
  this.#contentType = contentType;
37
34
  this.#initiator = initiator;
@@ -35,7 +35,7 @@ import {
35
35
  } from './RuntimeModel.js';
36
36
  import {SDKModel} from './SDKModel.js';
37
37
  import {Capability, type Target, Type} from './Target.js';
38
- import {TargetManager} from './TargetManager.js';
38
+ import type {TargetManager} from './TargetManager.js';
39
39
 
40
40
  export {FrontendMessageType} from './ConsoleModelTypes.js';
41
41
 
@@ -357,7 +357,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
357
357
  }
358
358
 
359
359
  // messages[] are not ordered by timestamp.
360
- static allMessagesUnordered(targetManager: TargetManager = TargetManager.instance()): ConsoleMessage[] {
360
+ static allMessagesUnordered(targetManager: TargetManager): ConsoleMessage[] {
361
361
  const messages = [];
362
362
  for (const target of targetManager.targets()) {
363
363
  const targetMessages = target.model(ConsoleModel)?.messages() || [];
@@ -366,7 +366,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
366
366
  return messages;
367
367
  }
368
368
 
369
- static requestClearMessages(targetManager: TargetManager = TargetManager.instance()): void {
369
+ static requestClearMessages(targetManager: TargetManager): void {
370
370
  for (const logModel of targetManager.models(LogModel)) {
371
371
  logModel.requestClear();
372
372
  }
@@ -394,7 +394,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
394
394
  return this.#errors;
395
395
  }
396
396
 
397
- static allErrors(targetManager: TargetManager = TargetManager.instance()): number {
397
+ static allErrors(targetManager: TargetManager): number {
398
398
  let errors = 0;
399
399
  for (const target of targetManager.targets()) {
400
400
  errors += target.model(ConsoleModel)?.errors() || 0;
@@ -406,7 +406,7 @@ export class ConsoleModel extends SDKModel<EventTypes> {
406
406
  return this.#warnings;
407
407
  }
408
408
 
409
- static allWarnings(targetManager: TargetManager = TargetManager.instance()): number {
409
+ static allWarnings(targetManager: TargetManager): number {
410
410
  let warnings = 0;
411
411
  for (const target of targetManager.targets()) {
412
412
  warnings += target.model(ConsoleModel)?.warnings() || 0;
@@ -661,7 +661,9 @@ export class DOMDebuggerManager implements SDKModelObserver<DOMDebuggerModel> {
661
661
  this.createEventListenerBreakpoints(
662
662
  Category.XHR, ['readystatechange', 'load', 'loadstart', 'loadend', 'abort', 'error', 'progress', 'timeout'],
663
663
  ['xmlhttprequest', 'xmlhttprequestupload']);
664
+ }
664
665
 
666
+ initialize(): void {
665
667
  this.#targetManager.observeModels(DOMDebuggerModel, this);
666
668
  }
667
669
 
@@ -671,9 +673,11 @@ export class DOMDebuggerManager implements SDKModelObserver<DOMDebuggerModel> {
671
673
  } = {forceNew: null}): DOMDebuggerManager {
672
674
  const {forceNew, targetManager} = opts;
673
675
  if (!Root.DevToolsContext.globalInstance().has(DOMDebuggerManager) || forceNew) {
676
+ const manager = new DOMDebuggerManager(targetManager ?? TargetManager.instance());
677
+ manager.initialize();
674
678
  Root.DevToolsContext.globalInstance().set(
675
679
  DOMDebuggerManager,
676
- new DOMDebuggerManager(targetManager ?? TargetManager.instance()),
680
+ manager,
677
681
  );
678
682
  }
679
683
 
@@ -1127,27 +1127,33 @@ export class DOMNode extends Common.ObjectWrapper.ObjectWrapper<DOMNodeEventType
1127
1127
  return model;
1128
1128
  }
1129
1129
 
1130
- async setAsInspectedNode(): Promise<void> {
1131
- let node: DOMNode|null = this;
1132
- if (node?.pseudoType()) {
1133
- node = node.parentNode;
1130
+ canInspectNode(): boolean {
1131
+ if (this.ancestorUserAgentShadowRoot()) {
1132
+ return false;
1134
1133
  }
1135
- while (node) {
1136
- let ancestor = node.ancestorUserAgentShadowRoot();
1137
- if (!ancestor) {
1138
- break;
1139
- }
1140
- ancestor = node.ancestorShadowHost();
1141
- if (!ancestor) {
1142
- break;
1143
- }
1144
- // User #agent shadow root, keep climbing up.
1145
- node = ancestor;
1134
+
1135
+ if (this.#pseudoType) {
1136
+ return [
1137
+ Protocol.DOM.PseudoType.Before,
1138
+ Protocol.DOM.PseudoType.After,
1139
+ Protocol.DOM.PseudoType.Marker,
1140
+ Protocol.DOM.PseudoType.ScrollMarker,
1141
+ Protocol.DOM.PseudoType.Backdrop,
1142
+ Protocol.DOM.PseudoType.ViewTransition,
1143
+ Protocol.DOM.PseudoType.ViewTransitionGroup,
1144
+ Protocol.DOM.PseudoType.ViewTransitionImagePair,
1145
+ Protocol.DOM.PseudoType.ViewTransitionOld,
1146
+ Protocol.DOM.PseudoType.ViewTransitionNew,
1147
+ ].includes(this.#pseudoType);
1146
1148
  }
1147
- if (!node) {
1148
- throw new Error('In DOMNode.setAsInspectedNode: node is expected to not be null.');
1149
+ return true;
1150
+ }
1151
+
1152
+ async setAsInspectedNode(): Promise<void> {
1153
+ if (!this.canInspectNode()) {
1154
+ return;
1149
1155
  }
1150
- await this.#agent.invoke_setInspectedNode({nodeId: node.id});
1156
+ await this.#agent.invoke_setInspectedNode({nodeId: this.id});
1151
1157
  }
1152
1158
 
1153
1159
  enclosingElementOrSelf(): DOMNode|null {
@@ -2365,6 +2371,10 @@ export class DOMNodeSnapshot extends DOMNode {
2365
2371
  _callback?: ((arg0: string|null, arg1: DOMNode|null) => void)|undefined): void {
2366
2372
  }
2367
2373
 
2374
+ override canInspectNode(): boolean {
2375
+ return false;
2376
+ }
2377
+
2368
2378
  override setAsInspectedNode(): Promise<void> {
2369
2379
  return Promise.resolve();
2370
2380
  }
@@ -2410,6 +2420,10 @@ export class DOMDocumentSnapshot extends DOMDocument {
2410
2420
  _callback?: ((arg0: string|null, arg1: DOMNode|null) => void)|undefined): void {
2411
2421
  }
2412
2422
 
2423
+ override canInspectNode(): boolean {
2424
+ return false;
2425
+ }
2426
+
2413
2427
  override setAsInspectedNode(): Promise<void> {
2414
2428
  return Promise.resolve();
2415
2429
  }
@@ -323,6 +323,45 @@ export class NetworkManager extends SDKModel<EventTypes> {
323
323
  }
324
324
  }
325
325
 
326
+ /**
327
+ * Returns the request post data as a ContentData suitable for binary
328
+ * viewers (hex, base64, utf-8) in the Payload tab. When the backend
329
+ * provides base64-encoded (possibly compressed) data, the body is
330
+ * decompressed first so viewers show the actual payload bytes rather
331
+ * than gzip/deflate framing.
332
+ */
333
+ static async requestPostDataContentData(request: NetworkRequest): Promise<TextUtils.ContentData.ContentDataOrError> {
334
+ const manager = NetworkManager.forRequest(request);
335
+ if (!manager) {
336
+ return {error: 'No network manager for request'};
337
+ }
338
+ const requestId = request.backendRequestId();
339
+ if (!requestId) {
340
+ return {error: 'No backend request id for request'};
341
+ }
342
+ try {
343
+ const response = await manager.#networkAgent.invoke_getRequestPostData({requestId});
344
+ const error = response.getError();
345
+ if (error) {
346
+ return {error};
347
+ }
348
+ const {postData, base64Encoded} = response;
349
+ if (!postData) {
350
+ return {error: 'No post data'};
351
+ }
352
+ const requestContentType = request.requestContentType() ?? 'application/octet-stream';
353
+ const {charset} = Platform.MimeType.parseContentType(requestContentType);
354
+
355
+ if (base64Encoded && postData) {
356
+ return await TextUtils.ContentData.ContentData.fromCompressedBase64(
357
+ postData, requestContentType, charset ?? undefined, request.requestContentEncoding());
358
+ }
359
+ return new TextUtils.ContentData.ContentData(postData, false, requestContentType, charset ?? undefined);
360
+ } catch (e) {
361
+ return {error: e.message};
362
+ }
363
+ }
364
+
326
365
  /**
327
366
  * Attempts to decompress a compressed request body.
328
367
  * Returns the decompressed string, or null if decompression is not applicable.
@@ -658,6 +697,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
658
697
  networkRequest.setReferrerPolicy(request.referrerPolicy);
659
698
  networkRequest.setIsSameSite(request.isSameSite || false);
660
699
  networkRequest.setIsAdRelated(request.isAdRelated || false);
700
+ networkRequest.setIsLinkPreload(request.isLinkPreload || false);
661
701
  }
662
702
 
663
703
  private updateNetworkRequestWithResponse(networkRequest: NetworkRequest, response: Protocol.Network.Response): void {
@@ -847,7 +887,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
847
887
  } else {
848
888
  networkRequest = NetworkRequest.create(
849
889
  requestId, request.url as Platform.DevToolsPath.UrlString, documentURL as Platform.DevToolsPath.UrlString,
850
- frameId ?? null, loaderId, initiator, hasUserGesture);
890
+ frameId ?? null, loaderId, initiator, hasUserGesture, this.#manager.target().targetManager().getConsole());
851
891
  if (renderBlockingBehavior) {
852
892
  networkRequest.setRenderBlockingBehavior(renderBlockingBehavior);
853
893
  }
@@ -969,7 +1009,8 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
969
1009
 
970
1010
  webSocketCreated({requestId, url: requestURL, initiator}: Protocol.Network.WebSocketCreatedEvent): void {
971
1011
  const networkRequest =
972
- NetworkRequest.createForSocket(requestId, requestURL as Platform.DevToolsPath.UrlString, initiator);
1012
+ NetworkRequest.createForSocket(requestId, requestURL as Platform.DevToolsPath.UrlString, initiator,
1013
+ this.#manager.target().targetManager().getConsole());
973
1014
  requestToManagerMap.set(networkRequest, this.#manager);
974
1015
  networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebSocket);
975
1016
  this.startNetworkRequest(networkRequest, null);
@@ -1174,7 +1215,7 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
1174
1215
  const newNetworkRequest = NetworkRequest.create(
1175
1216
  requestId, redirectURL, originalNetworkRequest.documentURL, originalNetworkRequest.frameId,
1176
1217
  originalNetworkRequest.loaderId, originalNetworkRequest.initiator(),
1177
- originalNetworkRequest.hasUserGesture() ?? undefined);
1218
+ originalNetworkRequest.hasUserGesture() ?? undefined, this.#manager.target().targetManager().getConsole());
1178
1219
  requestToManagerMap.set(newNetworkRequest, this.#manager);
1179
1220
  newNetworkRequest.setRedirectSource(originalNetworkRequest);
1180
1221
  originalNetworkRequest.setRedirectDestination(newNetworkRequest);
@@ -1296,7 +1337,8 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
1296
1337
  webTransportCreated({transportId, url: requestURL, timestamp: time, initiator}:
1297
1338
  Protocol.Network.WebTransportCreatedEvent): void {
1298
1339
  const networkRequest =
1299
- NetworkRequest.createForSocket(transportId, requestURL as Platform.DevToolsPath.UrlString, initiator);
1340
+ NetworkRequest.createForSocket(transportId, requestURL as Platform.DevToolsPath.UrlString, initiator,
1341
+ this.#manager.target().targetManager().getConsole());
1300
1342
  networkRequest.hasNetworkData = true;
1301
1343
  requestToManagerMap.set(networkRequest, this.#manager);
1302
1344
  networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebTransport);
@@ -1333,8 +1375,9 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
1333
1375
 
1334
1376
  directTCPSocketCreated(event: Protocol.Network.DirectTCPSocketCreatedEvent): void {
1335
1377
  const requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
1336
- const networkRequest = NetworkRequest.createForSocket(
1337
- event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator);
1378
+ const networkRequest =
1379
+ NetworkRequest.createForSocket(event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator,
1380
+ this.#manager.target().targetManager().getConsole());
1338
1381
  networkRequest.hasNetworkData = true;
1339
1382
  networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
1340
1383
  networkRequest.protocol = i18n.i18n.lockedString('tcp');
@@ -1448,8 +1491,9 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
1448
1491
  // is not specified.
1449
1492
  return;
1450
1493
  }
1451
- const networkRequest = NetworkRequest.createForSocket(
1452
- event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator);
1494
+ const networkRequest =
1495
+ NetworkRequest.createForSocket(event.identifier, requestURL as Platform.DevToolsPath.UrlString, event.initiator,
1496
+ this.#manager.target().targetManager().getConsole());
1453
1497
  networkRequest.hasNetworkData = true;
1454
1498
  if (event.options.remoteAddr && event.options.remotePort) {
1455
1499
  networkRequest.setRemoteAddress(event.options.remoteAddr, event.options.remotePort);
@@ -1633,9 +1677,9 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
1633
1677
  protected createNetworkRequest(
1634
1678
  requestId: Protocol.Network.RequestId, frameId: Protocol.Page.FrameId, loaderId: Protocol.Network.LoaderId,
1635
1679
  url: string, documentURL: string, initiator: Protocol.Network.Initiator|null): NetworkRequest {
1636
- const request = NetworkRequest.create(
1637
- requestId, url as Platform.DevToolsPath.UrlString, documentURL as Platform.DevToolsPath.UrlString, frameId,
1638
- loaderId, initiator);
1680
+ const request = NetworkRequest.create(requestId, url as Platform.DevToolsPath.UrlString,
1681
+ documentURL as Platform.DevToolsPath.UrlString, frameId, loaderId, initiator,
1682
+ undefined, this.#manager.target().targetManager().getConsole());
1639
1683
  requestToManagerMap.set(request, this.#manager);
1640
1684
  return request;
1641
1685
  }
@@ -1964,6 +2008,7 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
1964
2008
  promises.push(agent
1965
2009
  .invoke_emulateNetworkConditionsByRule({
1966
2010
  offline,
2011
+ emulateOfflineServiceWorker: offline,
1967
2012
  matchedNetworkConditions: matchedNetworkConditions.map(
1968
2013
  ({urlPattern, conditions}) => ({
1969
2014
  urlPattern: urlPattern ?? '',
@@ -1974,6 +2019,7 @@ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper<Reques
1974
2019
  packetQueueLength: conditions.packetQueueLength,
1975
2020
  packetReordering: conditions.packetReordering,
1976
2021
  connectionType: NetworkManager.connectionType(conditions),
2022
+ offline,
1977
2023
  }))
1978
2024
  })
1979
2025
  .then(response => {
@@ -296,7 +296,9 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
296
296
  directSocketInfo?: DirectSocketInfo;
297
297
  readonly #directSocketChunks: DirectSocketChunk[] = [];
298
298
  #isAdRelated: boolean;
299
+ #isLinkPreload: boolean;
299
300
  #appliedNetworkConditionsId?: string;
301
+ readonly #console: Common.Console.Console;
300
302
 
301
303
  constructor(
302
304
  requestId: string,
@@ -307,6 +309,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
307
309
  loaderId: Protocol.Network.LoaderId|null,
308
310
  initiator: Protocol.Network.Initiator|null,
309
311
  hasUserGesture?: boolean,
312
+ console: Common.Console.Console = Common.Console.Console.instance(),
310
313
  ) {
311
314
  super();
312
315
 
@@ -319,6 +322,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
319
322
  this.#initiator = initiator;
320
323
  this.#hasUserGesture = hasUserGesture;
321
324
  this.#isAdRelated = false;
325
+ this.#isLinkPreload = false;
326
+ this.#console = console;
322
327
  }
323
328
 
324
329
  static create(
@@ -329,6 +334,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
329
334
  loaderId: Protocol.Network.LoaderId|null,
330
335
  initiator: Protocol.Network.Initiator|null,
331
336
  hasUserGesture?: boolean,
337
+ console?: Common.Console.Console,
332
338
  ): NetworkRequest {
333
339
  return new NetworkRequest(
334
340
  backendRequestId,
@@ -339,6 +345,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
339
345
  loaderId,
340
346
  initiator,
341
347
  hasUserGesture,
348
+ console,
342
349
  );
343
350
  }
344
351
 
@@ -346,6 +353,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
346
353
  backendRequestId: Protocol.Network.RequestId,
347
354
  requestURL: Platform.DevToolsPath.UrlString,
348
355
  initiator?: Protocol.Network.Initiator,
356
+ console?: Common.Console.Console,
349
357
  ): NetworkRequest {
350
358
  return new NetworkRequest(
351
359
  backendRequestId,
@@ -355,6 +363,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
355
363
  null,
356
364
  null,
357
365
  initiator || null,
366
+ undefined,
367
+ console,
358
368
  );
359
369
  }
360
370
 
@@ -363,6 +373,7 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
363
373
  url: Platform.DevToolsPath.UrlString,
364
374
  documentURL: Platform.DevToolsPath.UrlString,
365
375
  initiator: Protocol.Network.Initiator|null,
376
+ console?: Common.Console.Console,
366
377
  ): NetworkRequest {
367
378
  return new NetworkRequest(
368
379
  requestId,
@@ -372,6 +383,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
372
383
  null,
373
384
  null,
374
385
  initiator,
386
+ undefined,
387
+ console,
375
388
  );
376
389
  }
377
390
 
@@ -909,6 +922,11 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
909
922
  this.#initiator.type === Protocol.Network.InitiatorType.Preflight);
910
923
  }
911
924
 
925
+ isPreloadRequest(): boolean {
926
+ return (this.#initiator !== null && this.#initiator !== undefined &&
927
+ this.#initiator.type === Protocol.Network.InitiatorType.Preload);
928
+ }
929
+
912
930
  redirectDestination(): NetworkRequest|null {
913
931
  return this.#redirectDestination;
914
932
  }
@@ -960,6 +978,15 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
960
978
  this.#formParametersPromise = null;
961
979
  }
962
980
 
981
+ /**
982
+ * Returns the raw request body as ContentData, preserving base64 encoding
983
+ * for binary payloads. This enables binary viewers (hex, base64, utf-8)
984
+ * in the Payload tab.
985
+ */
986
+ requestFormDataContentData(): Promise<TextUtils.ContentData.ContentDataOrError> {
987
+ return NetworkManager.requestPostDataContentData(this);
988
+ }
989
+
963
990
  private filteredProtocolName(): string {
964
991
  const protocol = this.protocol.toLowerCase();
965
992
  if (protocol === 'h2') {
@@ -1201,7 +1228,8 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
1201
1228
  get serverTimings(): ServerTiming[]|null {
1202
1229
  if (typeof this.#serverTimings === 'undefined') {
1203
1230
  this.#serverTimings = ServerTiming.parseHeaders(
1204
- this.responseHeaders,
1231
+ this.responseHeaders.map(x => ({name: x.name, value: x.value})),
1232
+ this.#console,
1205
1233
  );
1206
1234
  }
1207
1235
  return this.#serverTimings;
@@ -1837,6 +1865,14 @@ export class NetworkRequest extends Common.ObjectWrapper.ObjectWrapper<EventType
1837
1865
  return this.#isAdRelated;
1838
1866
  }
1839
1867
 
1868
+ setIsLinkPreload(isLinkPreload: boolean): void {
1869
+ this.#isLinkPreload = isLinkPreload;
1870
+ }
1871
+
1872
+ isLinkPreload(): boolean {
1873
+ return this.#isLinkPreload;
1874
+ }
1875
+
1840
1876
  getAssociatedData(key: string): object|null {
1841
1877
  return this.#associatedData.get(key) || null;
1842
1878
  }