@mcp-b/chrome-devtools-mcp 1.1.0 → 1.1.1

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 (656) hide show
  1. package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
  2. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
  3. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
  4. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
  5. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
  6. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2033 -0
  7. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +332 -0
  8. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +79 -0
  10. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
  11. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
  12. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +66 -0
  13. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
  14. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
  15. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +22 -0
  16. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
  17. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +449 -0
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +144 -0
  20. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
  21. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +495 -0
  22. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +15 -0
  23. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +164 -0
  24. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
  25. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +78 -0
  26. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
  27. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1263 -0
  28. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
  29. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +14 -0
  30. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
  31. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
  32. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
  33. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +41 -0
  34. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +434 -0
  35. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/DispatchHttpRequestClient.js +66 -0
  36. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +202 -0
  37. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +92 -0
  38. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +69 -0
  39. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostStub.js +430 -0
  40. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +61 -0
  41. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +220 -0
  42. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +968 -0
  43. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +13 -0
  44. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/ByteUtilities.js +72 -0
  45. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/DevToolsLocale.js +64 -0
  46. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/NumberFormatter.js +67 -0
  47. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/collect-ui-strings.js +73 -0
  48. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/generate-locales-js.js +51 -0
  49. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +9 -0
  50. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18nImpl.js +135 -0
  51. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18nTypes.js +4 -0
  52. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/locales.js +14 -0
  53. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/time-utilities.js +148 -0
  54. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
  55. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
  56. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
  57. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
  58. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
  59. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/HostRuntime.js +19 -0
  60. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
  61. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
  62. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
  63. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
  64. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +538 -0
  65. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
  66. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
  67. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
  68. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
  69. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
  70. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/HostRuntime.js +4 -0
  71. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/api/api.js +5 -0
  72. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/HostRuntime.js +63 -0
  73. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/browser/browser.js +5 -0
  74. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/HostRuntime.js +72 -0
  75. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/node/node.js +5 -0
  76. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
  77. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/CDPConnection.js +17 -0
  78. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/ConnectionTransport.js +12 -0
  79. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/DevToolsCDPConnection.js +138 -0
  80. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +539 -0
  81. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +8 -0
  82. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/DevToolsContext.js +54 -0
  83. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +11 -0
  84. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +6 -0
  85. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
  86. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +845 -0
  87. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
  88. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
  89. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +217 -0
  90. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
  91. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
  92. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
  93. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1318 -0
  94. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
  95. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1532 -0
  96. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +908 -0
  97. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +312 -0
  98. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +574 -0
  99. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1346 -0
  100. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
  101. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +403 -0
  102. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
  103. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +21 -0
  104. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
  105. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
  106. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
  107. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
  108. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +236 -0
  109. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
  110. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +205 -0
  111. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
  112. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
  113. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
  114. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
  115. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
  117. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1635 -0
  118. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1216 -0
  119. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
  120. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +364 -0
  121. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +127 -0
  122. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
  123. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
  124. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
  125. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +75 -0
  126. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +80 -0
  127. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
  128. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
  129. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
  130. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
  131. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +2223 -0
  132. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1654 -0
  133. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
  134. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
  135. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
  136. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
  137. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +310 -0
  138. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
  139. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
  140. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +608 -0
  141. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +413 -0
  142. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
  143. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +908 -0
  144. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
  145. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +923 -0
  146. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
  147. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
  148. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScopeTreeCache.js +36 -0
  149. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +176 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +420 -0
  151. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
  152. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
  153. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +113 -0
  154. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
  155. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
  156. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +691 -0
  158. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +57 -0
  159. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +201 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +508 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +257 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +395 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +55 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1166 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +91 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/foundation/Universe.js +34 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/foundation/foundation.js +5 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +2640 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +384 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1532 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7602 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +289 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +995 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +664 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +139 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +377 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +131 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +149 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +245 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +486 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +130 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +992 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +592 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +112 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +186 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +60 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +107 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +244 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +564 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +437 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +87 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +182 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +268 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +55 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +20 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +516 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +89 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +285 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +4 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +775 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +1706 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +6 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +145 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +77 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +6 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +347 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +4 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/AttributionReportingIssue.js +201 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/BounceTrackingIssue.js +49 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/CheckFormsIssuesTrigger.js +31 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/ClientHintIssue.js +71 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/ContentSecurityPolicyIssue.js +135 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/ContrastCheckTrigger.js +59 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/CookieDeprecationMetadataIssue.js +58 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/CookieIssue.js +514 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/CorsIssue.js +244 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/CrossOriginEmbedderPolicyIssue.js +110 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/DeprecationIssue.js +90 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/ElementAccessibilityIssue.js +95 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/FederatedAuthRequestIssue.js +231 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/FederatedAuthUserInfoRequestIssue.js +141 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/GenericIssue.js +212 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/HeavyAdIssue.js +52 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/Issue.js +152 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/IssueAggregator.js +314 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/IssueResolver.js +40 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManager.js +416 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/IssuesManagerEvents.js +4 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/LowTextContrastIssue.js +48 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/MarkdownIssueDescription.js +104 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/MixedContentIssue.js +55 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/PartitioningBlobURLIssue.js +58 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/PropertyRuleIssue.js +58 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/QuirksModeIssue.js +48 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/RelatedIssue.js +70 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/SRIMessageSignatureIssue.js +87 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/SharedArrayBufferIssue.js +49 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/SharedDictionaryIssue.js +292 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/SourceFrameIssuesManager.js +81 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/StylesheetLoadingIssue.js +59 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/UnencodedDigestIssue.js +62 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/CoepCoopSandboxedIframeCannotNavigateToCoopPage.md +4 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/CoepCorpNotSameOrigin.md +8 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +18 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/CoepCorpNotSameSite.md +7 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/CoepFrameResourceNeedsCoepHeader.md +10 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/CompatibilityModeQuirks.md +5 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/CookieAttributeValueExceedsMaxSize.md +5 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/LowTextContrast.md +5 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md +8 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md +8 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md +8 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteInvalidSameParty.md +8 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md +8 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md +8 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md +8 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md +8 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteSamePartyCrossPartyContextSet.md +10 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +9 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +9 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md +8 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md +8 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +8 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arInsecureContext.md +7 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arInvalidInfoHeader.md +5 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arInvalidRegisterOsSourceHeader.md +5 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arInvalidRegisterOsTriggerHeader.md +5 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md +5 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md +5 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +5 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +6 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arNoRegisterOsSourceHeader.md +5 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arNoRegisterOsTriggerHeader.md +5 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arNoRegisterSourceHeader.md +5 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arNoRegisterTriggerHeader.md +5 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arNoWebOrOsSupport.md +4 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arOsSourceIgnored.md +18 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arOsTriggerIgnored.md +19 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +8 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arSourceAndTriggerHeaders.md +9 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arSourceIgnored.md +13 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arTriggerIgnored.md +12 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arUntrustworthyReportingOrigin.md +10 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/arWebAndOsHeaders.md +11 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/bounceTrackingMitigations.md +3 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/clientHintMetaTagAllowListInvalidOrigin.md +4 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/clientHintMetaTagModifiedHTML.md +4 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieCrossSiteRedirectDowngrade.md +12 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +4 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieExcludeDomainNonAscii.md +11 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieExcludePortMismatch.md +8 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +7 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutRead.md +6 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutSet.md +6 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieWarnDomainNonAscii.md +11 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieWarnMetadataGrantRead.md +4 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieWarnMetadataGrantSet.md +4 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutRead.md +6 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutSet.md +6 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsAllowCredentialsRequired.md +6 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsDisabledScheme.md +7 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsDisallowedByMode.md +7 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsHeaderDisallowedByPreflightResponse.md +5 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsInsecurePrivateNetwork.md +10 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsInvalidHeaderValues.md +7 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsLocalNetworkAccessPermissionDenied.md +19 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsMethodDisallowedByPreflightResponse.md +5 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsNoCorsRedirectModeNotFollow.md +5 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsOriginMismatch.md +6 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsPreflightAllowPrivateNetworkError.md +10 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsPreflightResponseInvalid.md +5 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsPrivateNetworkPermissionDenied.md +10 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsRedirectContainsCredentials.md +5 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/corsWildcardOriginNotAllowed.md +8 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cspEvalViolation.md +9 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cspInlineViolation.md +10 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cspTrustedTypesPolicyViolation.md +5 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cspTrustedTypesSinkViolation.md +8 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/cspURLViolation.md +10 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/deprecation.md +3 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -0
  330. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsNoResponse.md +1 -0
  331. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestApprovalDeclined.md +1 -0
  332. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestCanceled.md +1 -0
  333. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataHttpNotFound.md +1 -0
  334. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataInvalidResponse.md +1 -0
  335. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestClientMetadataNoResponse.md +1 -0
  336. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -0
  337. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorIdToken.md +1 -0
  338. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -0
  339. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -0
  340. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -0
  341. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -0
  342. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -0
  343. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -0
  344. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -0
  345. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestNoResponse.md +1 -0
  346. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthRequestTooManyRequests.md +1 -0
  347. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -0
  348. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -0
  349. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -0
  350. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -0
  351. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -0
  352. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -0
  353. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -0
  354. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -0
  355. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -0
  356. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/fetchingPartitionedBlobURL.md +7 -0
  357. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormAriaLabelledByToNonExistingIdError.md +8 -0
  358. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormAutocompleteAttributeEmptyError.md +5 -0
  359. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormDuplicateIdForInputError.md +5 -0
  360. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +5 -0
  361. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +5 -0
  362. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +5 -0
  363. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormInputWithNoLabelError.md +5 -0
  364. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormLabelForMatchesNonExistingIdError.md +5 -0
  365. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormLabelForNameError.md +5 -0
  366. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +5 -0
  367. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericNavigationEntryMarkedSkippable.md +7 -0
  368. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/genericResponseWasBlockedByORB.md +4 -0
  369. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/heavyAd.md +10 -0
  370. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/mixedContent.md +5 -0
  371. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/navigatingPartitionedBlobURL.md +5 -0
  372. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/placeholderDescriptionForInvisibleIssues.md +3 -0
  373. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/propertyRuleInvalidNameIssue.md +3 -0
  374. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/propertyRuleIssue.md +7 -0
  375. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +7 -0
  376. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedSelectChild.md +7 -0
  377. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +3 -0
  378. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +3 -0
  379. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +3 -0
  380. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +3 -0
  381. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedArrayBuffer.md +7 -0
  382. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -0
  383. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorDictionaryLoadFailure.md +3 -0
  384. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +3 -0
  385. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -0
  386. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -0
  387. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -0
  388. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorExpiredResponse.md +3 -0
  389. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +3 -0
  390. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInsufficientResources.md +1 -0
  391. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidMatchField.md +1 -0
  392. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -0
  393. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidTTLField.md +1 -0
  394. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNavigationRequest.md +3 -0
  395. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNoMatchField.md +1 -0
  396. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonIntegerTTLField.md +1 -0
  397. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonListMatchDestField.md +1 -0
  398. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonSecureContext.md +3 -0
  399. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringIdField.md +1 -0
  400. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringInMatchDestList.md +1 -0
  401. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonStringMatchField.md +1 -0
  402. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNonTokenTypeField.md +1 -0
  403. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorRequestAborted.md +1 -0
  404. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorShuttingDown.md +1 -0
  405. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorTooLongIdField.md +3 -0
  406. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorUnsupportedType.md +3 -0
  407. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriInvalidSignatureHeader.md +14 -0
  408. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriInvalidSignatureInputHeader.md +15 -0
  409. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriMissingSignatureHeader.md +8 -0
  410. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriMissingSignatureInputHeader.md +7 -0
  411. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsIncorrectLength.md +11 -0
  412. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsNotByteSequence.md +14 -0
  413. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md +15 -0
  414. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md +8 -0
  415. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md +13 -0
  416. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +4 -0
  417. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +5 -0
  418. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md +11 -0
  419. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderKeyIdLength.md +12 -0
  420. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingLabel.md +6 -0
  421. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +8 -0
  422. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueMissingComponents.md +11 -0
  423. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +11 -0
  424. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +10 -0
  425. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriValidationFailedInvalidLength.md +5 -0
  426. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureExpired.md +6 -0
  427. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md +11 -0
  428. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/stylesheetLateImport.md +4 -0
  429. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/stylesheetRequestFailed.md +3 -0
  430. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
  431. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
  432. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +17 -0
  433. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +14 -0
  434. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
  435. package/build/node_modules/chrome-devtools-frontend/front_end/models/issues_manager/issues_manager.js +35 -0
  436. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  437. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  438. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  439. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  440. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  441. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  442. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  443. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +122 -0
  444. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  445. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/FunctionCodeResolver.js +192 -0
  446. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +622 -0
  447. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +59 -0
  448. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +7 -0
  449. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +4 -0
  450. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +67 -0
  451. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +97 -0
  452. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +121 -0
  453. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +5 -0
  454. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +7 -0
  455. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  456. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  457. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  458. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  459. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  460. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  461. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  462. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  463. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +355 -0
  464. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  465. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  466. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  467. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  468. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +371 -0
  469. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +169 -0
  470. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  471. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +555 -0
  472. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  473. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  474. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  475. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  476. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  477. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  478. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  479. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +599 -0
  480. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  481. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  482. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  483. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  484. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  485. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  486. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  487. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  488. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +485 -0
  489. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  490. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  491. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  492. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  493. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  494. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  495. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  496. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +449 -0
  497. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  498. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +404 -0
  499. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  500. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +566 -0
  501. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  502. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  503. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  504. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +260 -0
  505. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +97 -0
  506. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +276 -0
  507. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  508. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  509. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +317 -0
  510. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +183 -0
  511. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  512. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  513. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  514. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  515. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  516. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  517. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  518. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +495 -0
  519. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  520. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +186 -0
  521. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +820 -0
  522. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  523. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  524. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +489 -0
  525. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +209 -0
  526. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  527. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +181 -0
  528. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +258 -0
  529. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +90 -0
  530. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +82 -0
  531. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +161 -0
  532. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +129 -0
  533. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +263 -0
  534. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +199 -0
  535. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +183 -0
  536. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +90 -0
  537. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  538. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +200 -0
  539. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +545 -0
  540. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +192 -0
  541. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +136 -0
  542. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  543. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +98 -0
  544. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +102 -0
  545. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  546. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  547. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  548. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  549. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  550. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  551. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  552. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  553. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  554. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  555. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  556. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  557. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  558. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  559. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  560. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  561. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  562. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  563. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  564. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  565. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  566. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  567. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  568. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  569. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  570. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  571. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  572. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  573. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  574. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  575. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  576. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  577. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  578. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  579. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  580. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +580 -0
  581. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  582. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +224 -0
  583. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +4 -0
  584. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +64 -0
  585. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +504 -0
  586. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +113 -0
  587. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +601 -0
  588. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +201 -0
  589. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace-meta.js +34 -0
  590. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +9 -0
  591. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  592. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/i18n/LICENSE +202 -0
  593. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/i18n/i18n-impl.js +46 -0
  594. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/i18n/i18n.js +6 -0
  595. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/i18n/localized-string-set.js +122 -0
  596. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/LICENSE +33 -0
  597. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/intl-messageformat.js +5 -0
  598. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/index.js +13 -0
  599. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +1725 -0
  600. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +1840 -0
  601. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/index.js +10 -0
  602. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/core.js +233 -0
  603. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/error.js +48 -0
  604. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +177 -0
  605. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/core.js +236 -0
  606. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/error.js +51 -0
  607. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/intl-messageformat/package/src/formatters.js +182 -0
  608. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  609. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +2 -0
  610. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +940 -0
  611. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/LICENSE +39 -0
  612. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/marked.js +2 -0
  613. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/bin/main.js +255 -0
  614. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/bin/marked.js +11 -0
  615. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.esm.js +2695 -0
  616. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.js +2233 -0
  617. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/lib/marked.umd.js +2719 -0
  618. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/Lexer.js +453 -0
  619. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/Parser.js +233 -0
  620. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/Renderer.js +137 -0
  621. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/Slugger.js +46 -0
  622. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/TextRenderer.js +34 -0
  623. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/Tokenizer.js +683 -0
  624. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/defaults.js +27 -0
  625. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/helpers.js +240 -0
  626. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/marked.js +318 -0
  627. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/marked/package/src/rules.js +243 -0
  628. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  629. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  630. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  631. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  632. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  633. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  634. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  635. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  636. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  637. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  638. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  639. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  640. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +146 -0
  641. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  642. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  643. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  644. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  645. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  646. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  647. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  648. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  649. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  650. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  651. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  652. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +2 -0
  653. package/build/node_modules/chrome-devtools-frontend/mcp/HostBindings.js +222 -0
  654. package/build/node_modules/chrome-devtools-frontend/mcp/mcp.js +35 -0
  655. package/build/src/index.js +0 -0
  656. package/package.json +21 -20
@@ -0,0 +1,2223 @@
1
+ // Copyright 2011 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ var _a;
5
+ import * as TextUtils from '../../models/text_utils/text_utils.js';
6
+ import * as Common from '../common/common.js';
7
+ import * as i18n from '../i18n/i18n.js';
8
+ import * as Platform from '../platform/platform.js';
9
+ import * as Root from '../root/root.js';
10
+ import { Cookie } from './Cookie.js';
11
+ import { DirectSocketChunkType, DirectSocketStatus, DirectSocketType, Events as NetworkRequestEvents, NetworkRequest, } from './NetworkRequest.js';
12
+ import { SDKModel } from './SDKModel.js';
13
+ import { TargetManager } from './TargetManager.js';
14
+ const UIStrings = {
15
+ /**
16
+ * @description Explanation why no content is shown for WebSocket connection.
17
+ */
18
+ noContentForWebSocket: 'Content for WebSockets is currently not supported',
19
+ /**
20
+ * @description Explanation why no content is shown for redirect response.
21
+ */
22
+ noContentForRedirect: 'No content available because this request was redirected',
23
+ /**
24
+ * @description Explanation why no content is shown for preflight request.
25
+ */
26
+ noContentForPreflight: 'No content available for preflight request',
27
+ /**
28
+ * @description Text to indicate that network throttling is disabled
29
+ */
30
+ noThrottling: 'No throttling',
31
+ /**
32
+ * @description Text to indicate the network connectivity is offline
33
+ */
34
+ offline: 'Offline',
35
+ /**
36
+ * @description Text in Network Manager representing the "3G" throttling preset.
37
+ */
38
+ slowG: '3G', // Named `slowG` for legacy reasons and because this value
39
+ // is serialized locally on the user's machine: if we
40
+ // change it we break their stored throttling settings.
41
+ // (See crrev.com/c/2947255)
42
+ /**
43
+ * @description Text in Network Manager representing the "Slow 4G" throttling preset
44
+ */
45
+ fastG: 'Slow 4G', // Named `fastG` for legacy reasons and because this value
46
+ // is serialized locally on the user's machine: if we
47
+ // change it we break their stored throttling settings.
48
+ // (See crrev.com/c/2947255)
49
+ /**
50
+ * @description Text in Network Manager representing the "Fast 4G" throttling preset
51
+ */
52
+ fast4G: 'Fast 4G',
53
+ /**
54
+ * @description Text in Network Manager representing the "Blocking" throttling preset
55
+ */
56
+ block: 'Block',
57
+ /**
58
+ * @description Text in Network Manager
59
+ * @example {https://example.com} PH1
60
+ */
61
+ requestWasBlockedByDevtoolsS: 'Request was blocked by DevTools: "{PH1}"',
62
+ /**
63
+ * @description Message in Network Manager
64
+ * @example {XHR} PH1
65
+ * @example {GET} PH2
66
+ * @example {https://example.com} PH3
67
+ */
68
+ sFailedLoadingSS: '{PH1} failed loading: {PH2} "{PH3}".',
69
+ /**
70
+ * @description Message in Network Manager
71
+ * @example {XHR} PH1
72
+ * @example {GET} PH2
73
+ * @example {https://example.com} PH3
74
+ */
75
+ sFinishedLoadingSS: '{PH1} finished loading: {PH2} "{PH3}".',
76
+ /**
77
+ * @description One of direct socket connection statuses
78
+ */
79
+ directSocketStatusOpening: 'Opening',
80
+ /**
81
+ * @description One of direct socket connection statuses
82
+ */
83
+ directSocketStatusOpen: 'Open',
84
+ /**
85
+ * @description One of direct socket connection statuses
86
+ */
87
+ directSocketStatusClosed: 'Closed',
88
+ /**
89
+ * @description One of direct socket connection statuses
90
+ */
91
+ directSocketStatusAborted: 'Aborted',
92
+ };
93
+ const str_ = i18n.i18n.registerUIStrings('core/sdk/NetworkManager.ts', UIStrings);
94
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
95
+ const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
96
+ const requestToManagerMap = new WeakMap();
97
+ const CONNECTION_TYPES = new Map([
98
+ ['2g', "cellular2g" /* Protocol.Network.ConnectionType.Cellular2g */],
99
+ ['3g', "cellular3g" /* Protocol.Network.ConnectionType.Cellular3g */],
100
+ ['4g', "cellular4g" /* Protocol.Network.ConnectionType.Cellular4g */],
101
+ ['bluetooth', "bluetooth" /* Protocol.Network.ConnectionType.Bluetooth */],
102
+ ['wifi', "wifi" /* Protocol.Network.ConnectionType.Wifi */],
103
+ ['wimax', "wimax" /* Protocol.Network.ConnectionType.Wimax */],
104
+ ]);
105
+ /**
106
+ * We store two settings to disk to persist network throttling.
107
+ * 1. The custom conditions that the user has defined.
108
+ * 2. The active `key` that applies the correct current preset.
109
+ * The reason the setting creation functions are defined here is because they are referred
110
+ * to in multiple places, and this ensures we don't have accidental typos which
111
+ * mean extra settings get mistakenly created.
112
+ */
113
+ export function customUserNetworkConditionsSetting() {
114
+ return Common.Settings.Settings.instance().moduleSetting('custom-network-conditions');
115
+ }
116
+ export function activeNetworkThrottlingKeySetting() {
117
+ return Common.Settings.Settings.instance().createSetting('active-network-condition-key', "NO_THROTTLING" /* PredefinedThrottlingConditionKey.NO_THROTTLING */);
118
+ }
119
+ export class NetworkManager extends SDKModel {
120
+ dispatcher;
121
+ fetchDispatcher;
122
+ #networkAgent;
123
+ #bypassServiceWorkerSetting;
124
+ activeNetworkThrottlingKey = activeNetworkThrottlingKeySetting();
125
+ constructor(target) {
126
+ super(target);
127
+ this.dispatcher = new NetworkDispatcher(this);
128
+ this.fetchDispatcher = new FetchDispatcher(target.fetchAgent(), this);
129
+ this.#networkAgent = target.networkAgent();
130
+ target.registerNetworkDispatcher(this.dispatcher);
131
+ target.registerFetchDispatcher(this.fetchDispatcher);
132
+ if (Common.Settings.Settings.instance().moduleSetting('cache-disabled').get()) {
133
+ void this.#networkAgent.invoke_setCacheDisabled({ cacheDisabled: true });
134
+ }
135
+ if (Root.Runtime.hostConfig.devToolsPrivacyUI?.enabled &&
136
+ Root.Runtime.hostConfig.thirdPartyCookieControls?.managedBlockThirdPartyCookies !== true &&
137
+ (Common.Settings.Settings.instance().createSetting('cookie-control-override-enabled', undefined).get() ||
138
+ Common.Settings.Settings.instance().createSetting('grace-period-mitigation-disabled', undefined).get() ||
139
+ Common.Settings.Settings.instance().createSetting('heuristic-mitigation-disabled', undefined).get())) {
140
+ this.cookieControlFlagsSettingChanged();
141
+ }
142
+ void this.#networkAgent.invoke_enable({
143
+ maxPostDataSize: MAX_EAGER_POST_REQUEST_BODY_LENGTH,
144
+ enableDurableMessages: Root.Runtime.hostConfig.devToolsEnableDurableMessages?.enabled,
145
+ maxTotalBufferSize: MAX_RESPONSE_BODY_TOTAL_BUFFER_LENGTH,
146
+ reportDirectSocketTraffic: true,
147
+ });
148
+ void this.#networkAgent.invoke_setAttachDebugStack({ enabled: true });
149
+ this.#bypassServiceWorkerSetting =
150
+ Common.Settings.Settings.instance().createSetting('bypass-service-worker', false);
151
+ if (this.#bypassServiceWorkerSetting.get()) {
152
+ this.bypassServiceWorkerChanged();
153
+ }
154
+ this.#bypassServiceWorkerSetting.addChangeListener(this.bypassServiceWorkerChanged, this);
155
+ Common.Settings.Settings.instance()
156
+ .moduleSetting('cache-disabled')
157
+ .addChangeListener(this.cacheDisabledSettingChanged, this);
158
+ Common.Settings.Settings.instance()
159
+ .createSetting('cookie-control-override-enabled', undefined)
160
+ .addChangeListener(this.cookieControlFlagsSettingChanged, this);
161
+ Common.Settings.Settings.instance()
162
+ .createSetting('grace-period-mitigation-disabled', undefined)
163
+ .addChangeListener(this.cookieControlFlagsSettingChanged, this);
164
+ Common.Settings.Settings.instance()
165
+ .createSetting('heuristic-mitigation-disabled', undefined)
166
+ .addChangeListener(this.cookieControlFlagsSettingChanged, this);
167
+ }
168
+ static forRequest(request) {
169
+ return requestToManagerMap.get(request) || null;
170
+ }
171
+ static canReplayRequest(request) {
172
+ return Boolean(requestToManagerMap.get(request)) && Boolean(request.backendRequestId()) && !request.isRedirect() &&
173
+ request.resourceType() === Common.ResourceType.resourceTypes.XHR;
174
+ }
175
+ static replayRequest(request) {
176
+ const manager = requestToManagerMap.get(request);
177
+ const requestId = request.backendRequestId();
178
+ if (!manager || !requestId || request.isRedirect()) {
179
+ return;
180
+ }
181
+ void manager.#networkAgent.invoke_replayXHR({ requestId });
182
+ }
183
+ static async searchInRequest(request, query, caseSensitive, isRegex) {
184
+ const manager = NetworkManager.forRequest(request);
185
+ const requestId = request.backendRequestId();
186
+ if (!manager || !requestId || request.isRedirect()) {
187
+ return [];
188
+ }
189
+ const response = await manager.#networkAgent.invoke_searchInResponseBody({ requestId, query, caseSensitive, isRegex });
190
+ return TextUtils.TextUtils.performSearchInSearchMatches(response.result || [], query, caseSensitive, isRegex);
191
+ }
192
+ static async requestContentData(request) {
193
+ if (request.resourceType() === Common.ResourceType.resourceTypes.WebSocket) {
194
+ return { error: i18nString(UIStrings.noContentForWebSocket) };
195
+ }
196
+ if (!request.finished) {
197
+ await request.once(NetworkRequestEvents.FINISHED_LOADING);
198
+ }
199
+ if (request.isRedirect()) {
200
+ return { error: i18nString(UIStrings.noContentForRedirect) };
201
+ }
202
+ if (request.isPreflightRequest()) {
203
+ return { error: i18nString(UIStrings.noContentForPreflight) };
204
+ }
205
+ const manager = NetworkManager.forRequest(request);
206
+ if (!manager) {
207
+ return { error: 'No network manager for request' };
208
+ }
209
+ const requestId = request.backendRequestId();
210
+ if (!requestId) {
211
+ return { error: 'No backend request id for request' };
212
+ }
213
+ const response = await manager.#networkAgent.invoke_getResponseBody({ requestId });
214
+ const error = response.getError();
215
+ if (error) {
216
+ return { error };
217
+ }
218
+ return new TextUtils.ContentData.ContentData(response.body, response.base64Encoded, request.mimeType, request.charset() ?? undefined);
219
+ }
220
+ /**
221
+ * Returns the already received bytes for an in-flight request. After calling this method
222
+ * "dataReceived" events will contain additional data.
223
+ */
224
+ static async streamResponseBody(request) {
225
+ if (request.finished) {
226
+ return { error: 'Streaming the response body is only available for in-flight requests.' };
227
+ }
228
+ const manager = NetworkManager.forRequest(request);
229
+ if (!manager) {
230
+ return { error: 'No network manager for request' };
231
+ }
232
+ const requestId = request.backendRequestId();
233
+ if (!requestId) {
234
+ return { error: 'No backend request id for request' };
235
+ }
236
+ const response = await manager.#networkAgent.invoke_streamResourceContent({ requestId });
237
+ const error = response.getError();
238
+ if (error) {
239
+ return { error };
240
+ }
241
+ // Wait for at least the `responseReceived event so we have accurate mimetype and charset.
242
+ await request.waitForResponseReceived();
243
+ return new TextUtils.ContentData.ContentData(response.bufferedData, /* isBase64=*/ true, request.mimeType, request.charset() ?? undefined);
244
+ }
245
+ static async requestPostData(request) {
246
+ const manager = NetworkManager.forRequest(request);
247
+ if (!manager) {
248
+ console.error('No network manager for request');
249
+ return null;
250
+ }
251
+ const requestId = request.backendRequestId();
252
+ if (!requestId) {
253
+ console.error('No backend request id for request');
254
+ return null;
255
+ }
256
+ try {
257
+ const { postData } = await manager.#networkAgent.invoke_getRequestPostData({ requestId });
258
+ return postData;
259
+ }
260
+ catch (e) {
261
+ return e.message;
262
+ }
263
+ }
264
+ static connectionType(conditions) {
265
+ if (!conditions.download && !conditions.upload) {
266
+ return "none" /* Protocol.Network.ConnectionType.None */;
267
+ }
268
+ try {
269
+ const title = typeof conditions.title === 'function' ? conditions.title().toLowerCase() : conditions.title.toLowerCase();
270
+ for (const [name, protocolType] of CONNECTION_TYPES) {
271
+ if (title.includes(name)) {
272
+ return protocolType;
273
+ }
274
+ }
275
+ }
276
+ catch {
277
+ // If the i18nKey for this condition has changed, calling conditions.title() will break, so in that case we reset to NONE
278
+ return "none" /* Protocol.Network.ConnectionType.None */;
279
+ }
280
+ return "other" /* Protocol.Network.ConnectionType.Other */;
281
+ }
282
+ static lowercaseHeaders(headers) {
283
+ const newHeaders = {};
284
+ for (const headerName in headers) {
285
+ newHeaders[headerName.toLowerCase()] = headers[headerName];
286
+ }
287
+ return newHeaders;
288
+ }
289
+ requestForURL(url) {
290
+ return this.dispatcher.requestForURL(url);
291
+ }
292
+ requestForId(id) {
293
+ return this.dispatcher.requestForId(id);
294
+ }
295
+ requestForLoaderId(loaderId) {
296
+ return this.dispatcher.requestForLoaderId(loaderId);
297
+ }
298
+ cacheDisabledSettingChanged({ data: enabled }) {
299
+ void this.#networkAgent.invoke_setCacheDisabled({ cacheDisabled: enabled });
300
+ }
301
+ cookieControlFlagsSettingChanged() {
302
+ const overridesEnabled = Boolean(Common.Settings.Settings.instance().createSetting('cookie-control-override-enabled', undefined).get());
303
+ const gracePeriodEnabled = overridesEnabled ?
304
+ Boolean(Common.Settings.Settings.instance().createSetting('grace-period-mitigation-disabled', undefined).get()) :
305
+ false;
306
+ const heuristicEnabled = overridesEnabled ?
307
+ Boolean(Common.Settings.Settings.instance().createSetting('heuristic-mitigation-disabled', undefined).get()) :
308
+ false;
309
+ void this.#networkAgent.invoke_setCookieControls({
310
+ enableThirdPartyCookieRestriction: overridesEnabled,
311
+ disableThirdPartyCookieMetadata: gracePeriodEnabled,
312
+ disableThirdPartyCookieHeuristics: heuristicEnabled,
313
+ });
314
+ }
315
+ dispose() {
316
+ Common.Settings.Settings.instance()
317
+ .moduleSetting('cache-disabled')
318
+ .removeChangeListener(this.cacheDisabledSettingChanged, this);
319
+ }
320
+ bypassServiceWorkerChanged() {
321
+ void this.#networkAgent.invoke_setBypassServiceWorker({ bypass: this.#bypassServiceWorkerSetting.get() });
322
+ }
323
+ async getSecurityIsolationStatus(frameId) {
324
+ const result = await this.#networkAgent.invoke_getSecurityIsolationStatus({ frameId: frameId ?? undefined });
325
+ if (result.getError()) {
326
+ return null;
327
+ }
328
+ return result.status;
329
+ }
330
+ async enableReportingApi(enable = true) {
331
+ return await this.#networkAgent.invoke_enableReportingApi({ enable });
332
+ }
333
+ async loadNetworkResource(frameId, url, options) {
334
+ const result = await this.#networkAgent.invoke_loadNetworkResource({ frameId: frameId ?? undefined, url, options });
335
+ if (result.getError()) {
336
+ throw new Error(result.getError());
337
+ }
338
+ return result.resource;
339
+ }
340
+ clearRequests() {
341
+ this.dispatcher.clearRequests();
342
+ }
343
+ }
344
+ export var Events;
345
+ (function (Events) {
346
+ /* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */
347
+ Events["RequestStarted"] = "RequestStarted";
348
+ Events["RequestUpdated"] = "RequestUpdated";
349
+ Events["RequestFinished"] = "RequestFinished";
350
+ Events["RequestUpdateDropped"] = "RequestUpdateDropped";
351
+ Events["ResponseReceived"] = "ResponseReceived";
352
+ Events["MessageGenerated"] = "MessageGenerated";
353
+ Events["RequestRedirected"] = "RequestRedirected";
354
+ Events["LoadingFinished"] = "LoadingFinished";
355
+ Events["ReportingApiReportAdded"] = "ReportingApiReportAdded";
356
+ Events["ReportingApiReportUpdated"] = "ReportingApiReportUpdated";
357
+ Events["ReportingApiEndpointsChangedForOrigin"] = "ReportingApiEndpointsChangedForOrigin";
358
+ /* eslint-enable @typescript-eslint/naming-convention */
359
+ })(Events || (Events = {}));
360
+ /**
361
+ * Define some built-in DevTools throttling presets.
362
+ * Note that for the download, upload and RTT values we multiply them by adjustment factors to make DevTools' emulation more accurate.
363
+ * @see https://docs.google.com/document/d/10lfVdS1iDWCRKQXPfbxEn4Or99D64mvNlugP1AQuFlE/edit for historical context.
364
+ * @see https://crbug.com/342406608#comment10 for context around the addition of 4G presets in June 2024.
365
+ */
366
+ export const BlockingConditions = {
367
+ key: "BLOCKING" /* PredefinedThrottlingConditionKey.BLOCKING */,
368
+ block: true,
369
+ title: i18nLazyString(UIStrings.block),
370
+ };
371
+ export const NoThrottlingConditions = {
372
+ key: "NO_THROTTLING" /* PredefinedThrottlingConditionKey.NO_THROTTLING */,
373
+ title: i18nLazyString(UIStrings.noThrottling),
374
+ i18nTitleKey: UIStrings.noThrottling,
375
+ download: -1,
376
+ upload: -1,
377
+ latency: 0,
378
+ };
379
+ export const OfflineConditions = {
380
+ key: "OFFLINE" /* PredefinedThrottlingConditionKey.OFFLINE */,
381
+ title: i18nLazyString(UIStrings.offline),
382
+ i18nTitleKey: UIStrings.offline,
383
+ download: 0,
384
+ upload: 0,
385
+ latency: 0,
386
+ };
387
+ const slow3GTargetLatency = 400;
388
+ export const Slow3GConditions = {
389
+ key: "SPEED_3G" /* PredefinedThrottlingConditionKey.SPEED_3G */,
390
+ title: i18nLazyString(UIStrings.slowG),
391
+ i18nTitleKey: UIStrings.slowG,
392
+ // ~500Kbps down
393
+ download: 500 * 1000 / 8 * .8,
394
+ // ~500Kbps up
395
+ upload: 500 * 1000 / 8 * .8,
396
+ // 400ms RTT
397
+ latency: slow3GTargetLatency * 5,
398
+ targetLatency: slow3GTargetLatency,
399
+ };
400
+ // Note for readers: this used to be called "Fast 3G" but it was renamed in May
401
+ // 2024 to align with LH (crbug.com/342406608).
402
+ const slow4GTargetLatency = 150;
403
+ export const Slow4GConditions = {
404
+ key: "SPEED_SLOW_4G" /* PredefinedThrottlingConditionKey.SPEED_SLOW_4G */,
405
+ title: i18nLazyString(UIStrings.fastG),
406
+ i18nTitleKey: UIStrings.fastG,
407
+ // ~1.6 Mbps down
408
+ download: 1.6 * 1000 * 1000 / 8 * .9,
409
+ // ~0.75 Mbps up
410
+ upload: 750 * 1000 / 8 * .9,
411
+ // 150ms RTT
412
+ latency: slow4GTargetLatency * 3.75,
413
+ targetLatency: slow4GTargetLatency,
414
+ };
415
+ const fast4GTargetLatency = 60;
416
+ export const Fast4GConditions = {
417
+ key: "SPEED_FAST_4G" /* PredefinedThrottlingConditionKey.SPEED_FAST_4G */,
418
+ title: i18nLazyString(UIStrings.fast4G),
419
+ i18nTitleKey: UIStrings.fast4G,
420
+ // 9 Mbps down
421
+ download: 9 * 1000 * 1000 / 8 * .9,
422
+ // 1.5 Mbps up
423
+ upload: 1.5 * 1000 * 1000 / 8 * .9,
424
+ // 60ms RTT
425
+ latency: fast4GTargetLatency * 2.75,
426
+ targetLatency: fast4GTargetLatency,
427
+ };
428
+ const MAX_EAGER_POST_REQUEST_BODY_LENGTH = 64 * 1024; // bytes
429
+ const MAX_RESPONSE_BODY_TOTAL_BUFFER_LENGTH = 250 * 1024 * 1024; // bytes
430
+ export class FetchDispatcher {
431
+ #fetchAgent;
432
+ #manager;
433
+ constructor(agent, manager) {
434
+ this.#fetchAgent = agent;
435
+ this.#manager = manager;
436
+ }
437
+ requestPaused({ requestId, request, resourceType, responseStatusCode, responseHeaders, networkId }) {
438
+ const networkRequest = networkId ? this.#manager.requestForId(networkId) : null;
439
+ // If there was no 'Network.responseReceivedExtraInfo' event (e.g. for 'file:/' URLSs),
440
+ // populate 'originalResponseHeaders' with the headers from the 'Fetch.requestPaused' event.
441
+ if (networkRequest?.originalResponseHeaders.length === 0 && responseHeaders) {
442
+ networkRequest.originalResponseHeaders = responseHeaders;
443
+ }
444
+ void MultitargetNetworkManager.instance().requestIntercepted(new InterceptedRequest(this.#fetchAgent, request, resourceType, requestId, networkRequest, responseStatusCode, responseHeaders));
445
+ }
446
+ authRequired({}) {
447
+ }
448
+ }
449
+ export class NetworkDispatcher {
450
+ #manager;
451
+ #requestsById = new Map();
452
+ #requestsByURL = new Map();
453
+ #requestsByLoaderId = new Map();
454
+ #requestIdToExtraInfoBuilder = new Map();
455
+ /**
456
+ * In case of an early abort or a cache hit, the Trust Token done event is
457
+ * reported before the request itself is created in `requestWillBeSent`.
458
+ * This causes the event to be lost as no `NetworkRequest` instance has been
459
+ * created yet.
460
+ * This map caches the events temporarily and populates the NetworkRequest
461
+ * once it is created in `requestWillBeSent`.
462
+ */
463
+ #requestIdToTrustTokenEvent = new Map();
464
+ constructor(manager) {
465
+ this.#manager = manager;
466
+ MultitargetNetworkManager.instance().addEventListener("RequestIntercepted" /* MultitargetNetworkManager.Events.REQUEST_INTERCEPTED */, this.#markAsIntercepted.bind(this));
467
+ }
468
+ #markAsIntercepted(event) {
469
+ const request = this.requestForId(event.data);
470
+ if (request) {
471
+ request.setWasIntercepted(true);
472
+ }
473
+ }
474
+ headersMapToHeadersArray(headersMap) {
475
+ const result = [];
476
+ for (const name in headersMap) {
477
+ const values = headersMap[name].split('\n');
478
+ for (let i = 0; i < values.length; ++i) {
479
+ result.push({ name, value: values[i] });
480
+ }
481
+ }
482
+ return result;
483
+ }
484
+ updateNetworkRequestWithRequest(networkRequest, request) {
485
+ networkRequest.requestMethod = request.method;
486
+ networkRequest.setRequestHeaders(this.headersMapToHeadersArray(request.headers));
487
+ networkRequest.setRequestFormData(Boolean(request.hasPostData), request.postData || null);
488
+ networkRequest.setInitialPriority(request.initialPriority);
489
+ networkRequest.mixedContentType = request.mixedContentType || "none" /* Protocol.Security.MixedContentType.None */;
490
+ networkRequest.setReferrerPolicy(request.referrerPolicy);
491
+ networkRequest.setIsSameSite(request.isSameSite || false);
492
+ networkRequest.setIsAdRelated(request.isAdRelated || false);
493
+ }
494
+ updateNetworkRequestWithResponse(networkRequest, response) {
495
+ if (response.url && networkRequest.url() !== response.url) {
496
+ networkRequest.setUrl(response.url);
497
+ }
498
+ networkRequest.mimeType = response.mimeType;
499
+ networkRequest.setCharset(response.charset);
500
+ if (!networkRequest.statusCode || networkRequest.wasIntercepted()) {
501
+ networkRequest.statusCode = response.status;
502
+ }
503
+ if (!networkRequest.statusText || networkRequest.wasIntercepted()) {
504
+ networkRequest.statusText = response.statusText;
505
+ }
506
+ if (!networkRequest.hasExtraResponseInfo() || networkRequest.wasIntercepted()) {
507
+ networkRequest.responseHeaders = this.headersMapToHeadersArray(response.headers);
508
+ }
509
+ if (response.encodedDataLength >= 0) {
510
+ networkRequest.setTransferSize(response.encodedDataLength);
511
+ }
512
+ if (response.requestHeaders && !networkRequest.hasExtraRequestInfo()) {
513
+ // TODO(http://crbug.com/1004979): Stop using response.requestHeaders and
514
+ // response.requestHeadersText once shared workers
515
+ // emit Network.*ExtraInfo events for their network #requests.
516
+ networkRequest.setRequestHeaders(this.headersMapToHeadersArray(response.requestHeaders));
517
+ networkRequest.setRequestHeadersText(response.requestHeadersText || '');
518
+ }
519
+ networkRequest.connectionReused = response.connectionReused;
520
+ networkRequest.connectionId = String(response.connectionId);
521
+ if (response.remoteIPAddress) {
522
+ networkRequest.setRemoteAddress(response.remoteIPAddress, response.remotePort || -1);
523
+ }
524
+ if (response.fromServiceWorker) {
525
+ networkRequest.fetchedViaServiceWorker = true;
526
+ }
527
+ if (response.fromDiskCache) {
528
+ networkRequest.setFromDiskCache();
529
+ }
530
+ if (response.fromPrefetchCache) {
531
+ networkRequest.setFromPrefetchCache();
532
+ }
533
+ if (response.fromEarlyHints) {
534
+ networkRequest.setFromEarlyHints();
535
+ }
536
+ if (response.cacheStorageCacheName) {
537
+ networkRequest.setResponseCacheStorageCacheName(response.cacheStorageCacheName);
538
+ }
539
+ if (response.serviceWorkerRouterInfo) {
540
+ networkRequest.serviceWorkerRouterInfo = response.serviceWorkerRouterInfo;
541
+ }
542
+ if (response.responseTime) {
543
+ networkRequest.setResponseRetrievalTime(new Date(response.responseTime));
544
+ }
545
+ networkRequest.timing = response.timing;
546
+ networkRequest.protocol = response.protocol || '';
547
+ networkRequest.alternateProtocolUsage = response.alternateProtocolUsage;
548
+ if (response.serviceWorkerResponseSource) {
549
+ networkRequest.setServiceWorkerResponseSource(response.serviceWorkerResponseSource);
550
+ }
551
+ networkRequest.setSecurityState(response.securityState);
552
+ if (response.securityDetails) {
553
+ networkRequest.setSecurityDetails(response.securityDetails);
554
+ }
555
+ const newResourceType = Common.ResourceType.ResourceType.fromMimeTypeOverride(networkRequest.mimeType);
556
+ if (newResourceType) {
557
+ networkRequest.setResourceType(newResourceType);
558
+ }
559
+ if (networkRequest.responseReceivedPromiseResolve) {
560
+ // Anyone interested in waiting for response headers being available?
561
+ networkRequest.responseReceivedPromiseResolve();
562
+ }
563
+ else {
564
+ // If not, make sure no one will wait on it in the future.
565
+ networkRequest.responseReceivedPromise = Promise.resolve();
566
+ }
567
+ }
568
+ requestForId(id) {
569
+ return this.#requestsById.get(id) || null;
570
+ }
571
+ requestForURL(url) {
572
+ return this.#requestsByURL.get(url) || null;
573
+ }
574
+ requestForLoaderId(loaderId) {
575
+ return this.#requestsByLoaderId.get(loaderId) || null;
576
+ }
577
+ resourceChangedPriority({ requestId, newPriority }) {
578
+ const networkRequest = this.#requestsById.get(requestId);
579
+ if (networkRequest) {
580
+ networkRequest.setPriority(newPriority);
581
+ }
582
+ }
583
+ signedExchangeReceived({ requestId, info }) {
584
+ // While loading a signed exchange, a signedExchangeReceived event is sent
585
+ // between two requestWillBeSent events.
586
+ // 1. The first requestWillBeSent is sent while starting the navigation (or
587
+ // prefetching).
588
+ // 2. This signedExchangeReceived event is sent when the browser detects the
589
+ // signed exchange.
590
+ // 3. The second requestWillBeSent is sent with the generated redirect
591
+ // response and a new redirected request which URL is the inner request
592
+ // URL of the signed exchange.
593
+ let networkRequest = this.#requestsById.get(requestId);
594
+ // |requestId| is available only for navigation #requests. If the request was
595
+ // sent from a renderer process for prefetching, it is not available. In the
596
+ // case, need to fallback to look for the URL.
597
+ // TODO(crbug/841076): Sends the request ID of prefetching to the browser
598
+ // process and DevTools to find the matching request.
599
+ if (!networkRequest) {
600
+ networkRequest = this.#requestsByURL.get(info.outerResponse.url);
601
+ if (!networkRequest) {
602
+ return;
603
+ }
604
+ // Or clause is never hit, but is here because we can't use non-null assertions.
605
+ const backendRequestId = networkRequest.backendRequestId() || requestId;
606
+ requestId = backendRequestId;
607
+ }
608
+ networkRequest.setSignedExchangeInfo(info);
609
+ networkRequest.setResourceType(Common.ResourceType.resourceTypes.SignedExchange);
610
+ this.updateNetworkRequestWithResponse(networkRequest, info.outerResponse);
611
+ this.updateNetworkRequest(networkRequest);
612
+ this.getExtraInfoBuilder(requestId).addHasExtraInfo(info.hasExtraInfo);
613
+ this.#manager.dispatchEventToListeners(Events.ResponseReceived, { request: networkRequest, response: info.outerResponse });
614
+ }
615
+ requestWillBeSent({ requestId, loaderId, documentURL, request, timestamp, wallTime, initiator, redirectHasExtraInfo, redirectResponse, type, frameId, hasUserGesture, }) {
616
+ let networkRequest = this.#requestsById.get(requestId);
617
+ if (networkRequest) {
618
+ // FIXME: move this check to the backend.
619
+ if (!redirectResponse) {
620
+ return;
621
+ }
622
+ // If signedExchangeReceived event has already been sent for the request,
623
+ // ignores the internally generated |redirectResponse|. The
624
+ // |outerResponse| of SignedExchangeInfo was set to |networkRequest| in
625
+ // signedExchangeReceived().
626
+ if (!networkRequest.signedExchangeInfo()) {
627
+ this.responseReceived({
628
+ requestId,
629
+ loaderId,
630
+ timestamp,
631
+ type: type || "Other" /* Protocol.Network.ResourceType.Other */,
632
+ response: redirectResponse,
633
+ hasExtraInfo: redirectHasExtraInfo,
634
+ frameId,
635
+ });
636
+ }
637
+ networkRequest = this.appendRedirect(requestId, timestamp, request.url);
638
+ this.#manager.dispatchEventToListeners(Events.RequestRedirected, networkRequest);
639
+ }
640
+ else {
641
+ networkRequest = NetworkRequest.create(requestId, request.url, documentURL, frameId ?? null, loaderId, initiator, hasUserGesture);
642
+ requestToManagerMap.set(networkRequest, this.#manager);
643
+ }
644
+ networkRequest.hasNetworkData = true;
645
+ this.updateNetworkRequestWithRequest(networkRequest, request);
646
+ networkRequest.setIssueTime(timestamp, wallTime);
647
+ networkRequest.setResourceType(type ? Common.ResourceType.resourceTypes[type] : Common.ResourceType.resourceTypes.Other);
648
+ if (request.trustTokenParams) {
649
+ networkRequest.setTrustTokenParams(request.trustTokenParams);
650
+ }
651
+ const maybeTrustTokenEvent = this.#requestIdToTrustTokenEvent.get(requestId);
652
+ if (maybeTrustTokenEvent) {
653
+ networkRequest.setTrustTokenOperationDoneEvent(maybeTrustTokenEvent);
654
+ this.#requestIdToTrustTokenEvent.delete(requestId);
655
+ }
656
+ this.getExtraInfoBuilder(requestId).addRequest(networkRequest);
657
+ this.startNetworkRequest(networkRequest, request);
658
+ }
659
+ requestServedFromCache({ requestId }) {
660
+ const networkRequest = this.#requestsById.get(requestId);
661
+ if (!networkRequest) {
662
+ return;
663
+ }
664
+ networkRequest.setFromMemoryCache();
665
+ }
666
+ responseReceived({ requestId, loaderId, timestamp, type, response, hasExtraInfo, frameId }) {
667
+ const networkRequest = this.#requestsById.get(requestId);
668
+ const lowercaseHeaders = NetworkManager.lowercaseHeaders(response.headers);
669
+ if (!networkRequest) {
670
+ const lastModifiedHeader = lowercaseHeaders['last-modified'];
671
+ // We missed the requestWillBeSent.
672
+ const eventData = {
673
+ url: response.url,
674
+ frameId: frameId ?? null,
675
+ loaderId,
676
+ resourceType: type,
677
+ mimeType: response.mimeType,
678
+ lastModified: lastModifiedHeader ? new Date(lastModifiedHeader) : null,
679
+ };
680
+ this.#manager.dispatchEventToListeners(Events.RequestUpdateDropped, eventData);
681
+ return;
682
+ }
683
+ networkRequest.responseReceivedTime = timestamp;
684
+ networkRequest.setResourceType(Common.ResourceType.resourceTypes[type]);
685
+ this.updateNetworkRequestWithResponse(networkRequest, response);
686
+ this.updateNetworkRequest(networkRequest);
687
+ this.getExtraInfoBuilder(requestId).addHasExtraInfo(hasExtraInfo);
688
+ this.#manager.dispatchEventToListeners(Events.ResponseReceived, { request: networkRequest, response });
689
+ }
690
+ dataReceived(event) {
691
+ let networkRequest = this.#requestsById.get(event.requestId);
692
+ if (!networkRequest) {
693
+ networkRequest = this.maybeAdoptMainResourceRequest(event.requestId);
694
+ }
695
+ if (!networkRequest) {
696
+ return;
697
+ }
698
+ networkRequest.addDataReceivedEvent(event);
699
+ this.updateNetworkRequest(networkRequest);
700
+ }
701
+ loadingFinished({ requestId, timestamp: finishTime, encodedDataLength }) {
702
+ let networkRequest = this.#requestsById.get(requestId);
703
+ if (!networkRequest) {
704
+ networkRequest = this.maybeAdoptMainResourceRequest(requestId);
705
+ }
706
+ if (!networkRequest) {
707
+ return;
708
+ }
709
+ this.getExtraInfoBuilder(requestId).finished();
710
+ this.finishNetworkRequest(networkRequest, finishTime, encodedDataLength);
711
+ this.#manager.dispatchEventToListeners(Events.LoadingFinished, networkRequest);
712
+ }
713
+ loadingFailed({ requestId, timestamp: time, type: resourceType, errorText: localizedDescription, canceled, blockedReason, corsErrorStatus, }) {
714
+ const networkRequest = this.#requestsById.get(requestId);
715
+ if (!networkRequest) {
716
+ return;
717
+ }
718
+ networkRequest.failed = true;
719
+ networkRequest.setResourceType(Common.ResourceType.resourceTypes[resourceType]);
720
+ networkRequest.canceled = Boolean(canceled);
721
+ if (blockedReason) {
722
+ networkRequest.setBlockedReason(blockedReason);
723
+ if (blockedReason === "inspector" /* Protocol.Network.BlockedReason.Inspector */) {
724
+ const message = i18nString(UIStrings.requestWasBlockedByDevtoolsS, { PH1: networkRequest.url() });
725
+ this.#manager.dispatchEventToListeners(Events.MessageGenerated, { message, requestId, warning: true });
726
+ }
727
+ }
728
+ if (corsErrorStatus) {
729
+ networkRequest.setCorsErrorStatus(corsErrorStatus);
730
+ }
731
+ networkRequest.localizedFailDescription = localizedDescription;
732
+ this.getExtraInfoBuilder(requestId).finished();
733
+ this.finishNetworkRequest(networkRequest, time, -1);
734
+ }
735
+ webSocketCreated({ requestId, url: requestURL, initiator }) {
736
+ const networkRequest = NetworkRequest.createForSocket(requestId, requestURL, initiator);
737
+ requestToManagerMap.set(networkRequest, this.#manager);
738
+ networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebSocket);
739
+ this.startNetworkRequest(networkRequest, null);
740
+ }
741
+ webSocketWillSendHandshakeRequest({ requestId, timestamp: time, wallTime, request }) {
742
+ const networkRequest = this.#requestsById.get(requestId);
743
+ if (!networkRequest) {
744
+ return;
745
+ }
746
+ networkRequest.requestMethod = 'GET';
747
+ networkRequest.setRequestHeaders(this.headersMapToHeadersArray(request.headers));
748
+ networkRequest.setIssueTime(time, wallTime);
749
+ this.updateNetworkRequest(networkRequest);
750
+ }
751
+ webSocketHandshakeResponseReceived({ requestId, timestamp: time, response }) {
752
+ const networkRequest = this.#requestsById.get(requestId);
753
+ if (!networkRequest) {
754
+ return;
755
+ }
756
+ networkRequest.statusCode = response.status;
757
+ networkRequest.statusText = response.statusText;
758
+ networkRequest.responseHeaders = this.headersMapToHeadersArray(response.headers);
759
+ networkRequest.responseHeadersText = response.headersText || '';
760
+ if (response.requestHeaders) {
761
+ networkRequest.setRequestHeaders(this.headersMapToHeadersArray(response.requestHeaders));
762
+ }
763
+ if (response.requestHeadersText) {
764
+ networkRequest.setRequestHeadersText(response.requestHeadersText);
765
+ }
766
+ networkRequest.responseReceivedTime = time;
767
+ networkRequest.protocol = 'websocket';
768
+ this.updateNetworkRequest(networkRequest);
769
+ }
770
+ webSocketFrameReceived({ requestId, timestamp: time, response }) {
771
+ const networkRequest = this.#requestsById.get(requestId);
772
+ if (!networkRequest) {
773
+ return;
774
+ }
775
+ networkRequest.addProtocolFrame(response, time, false);
776
+ networkRequest.responseReceivedTime = time;
777
+ this.updateNetworkRequest(networkRequest);
778
+ }
779
+ webSocketFrameSent({ requestId, timestamp: time, response }) {
780
+ const networkRequest = this.#requestsById.get(requestId);
781
+ if (!networkRequest) {
782
+ return;
783
+ }
784
+ networkRequest.addProtocolFrame(response, time, true);
785
+ networkRequest.responseReceivedTime = time;
786
+ this.updateNetworkRequest(networkRequest);
787
+ }
788
+ webSocketFrameError({ requestId, timestamp: time, errorMessage }) {
789
+ const networkRequest = this.#requestsById.get(requestId);
790
+ if (!networkRequest) {
791
+ return;
792
+ }
793
+ networkRequest.addProtocolFrameError(errorMessage, time);
794
+ networkRequest.responseReceivedTime = time;
795
+ this.updateNetworkRequest(networkRequest);
796
+ }
797
+ webSocketClosed({ requestId, timestamp: time }) {
798
+ const networkRequest = this.#requestsById.get(requestId);
799
+ if (!networkRequest) {
800
+ return;
801
+ }
802
+ this.finishNetworkRequest(networkRequest, time, -1);
803
+ }
804
+ eventSourceMessageReceived({ requestId, timestamp: time, eventName, eventId, data }) {
805
+ const networkRequest = this.#requestsById.get(requestId);
806
+ if (!networkRequest) {
807
+ return;
808
+ }
809
+ networkRequest.addEventSourceMessage(time, eventName, eventId, data);
810
+ }
811
+ requestIntercepted({}) {
812
+ }
813
+ requestWillBeSentExtraInfo({ requestId, associatedCookies, headers, clientSecurityState, connectTiming, siteHasCookieInOtherPartition, appliedNetworkConditionsId }) {
814
+ const blockedRequestCookies = [];
815
+ const includedRequestCookies = [];
816
+ for (const { blockedReasons, exemptionReason, cookie } of associatedCookies) {
817
+ if (blockedReasons.length === 0) {
818
+ includedRequestCookies.push({ exemptionReason, cookie: Cookie.fromProtocolCookie(cookie) });
819
+ }
820
+ else {
821
+ blockedRequestCookies.push({ blockedReasons, cookie: Cookie.fromProtocolCookie(cookie) });
822
+ }
823
+ }
824
+ const extraRequestInfo = {
825
+ blockedRequestCookies,
826
+ includedRequestCookies,
827
+ requestHeaders: this.headersMapToHeadersArray(headers),
828
+ clientSecurityState,
829
+ connectTiming,
830
+ siteHasCookieInOtherPartition,
831
+ appliedNetworkConditionsId,
832
+ };
833
+ this.getExtraInfoBuilder(requestId).addRequestExtraInfo(extraRequestInfo);
834
+ const networkRequest = this.#requestsById.get(requestId);
835
+ if (appliedNetworkConditionsId && networkRequest) {
836
+ networkRequest.setAppliedNetworkConditions(appliedNetworkConditionsId);
837
+ this.updateNetworkRequest(networkRequest);
838
+ }
839
+ }
840
+ responseReceivedEarlyHints({ requestId, headers, }) {
841
+ this.getExtraInfoBuilder(requestId).setEarlyHintsHeaders(this.headersMapToHeadersArray(headers));
842
+ }
843
+ responseReceivedExtraInfo({ requestId, blockedCookies, headers, headersText, resourceIPAddressSpace, statusCode, cookiePartitionKey, cookiePartitionKeyOpaque, exemptedCookies, }) {
844
+ const extraResponseInfo = {
845
+ blockedResponseCookies: blockedCookies.map(blockedCookie => ({
846
+ blockedReasons: blockedCookie.blockedReasons,
847
+ cookieLine: blockedCookie.cookieLine,
848
+ cookie: blockedCookie.cookie ? Cookie.fromProtocolCookie(blockedCookie.cookie) : null,
849
+ })),
850
+ responseHeaders: this.headersMapToHeadersArray(headers),
851
+ responseHeadersText: headersText,
852
+ resourceIPAddressSpace,
853
+ statusCode,
854
+ cookiePartitionKey,
855
+ cookiePartitionKeyOpaque,
856
+ exemptedResponseCookies: exemptedCookies?.map(exemptedCookie => ({
857
+ cookie: Cookie.fromProtocolCookie(exemptedCookie.cookie),
858
+ cookieLine: exemptedCookie.cookieLine,
859
+ exemptionReason: exemptedCookie.exemptionReason,
860
+ })),
861
+ };
862
+ this.getExtraInfoBuilder(requestId).addResponseExtraInfo(extraResponseInfo);
863
+ }
864
+ getExtraInfoBuilder(requestId) {
865
+ let builder;
866
+ if (!this.#requestIdToExtraInfoBuilder.has(requestId)) {
867
+ builder = new ExtraInfoBuilder();
868
+ this.#requestIdToExtraInfoBuilder.set(requestId, builder);
869
+ }
870
+ else {
871
+ builder = this.#requestIdToExtraInfoBuilder.get(requestId);
872
+ }
873
+ return builder;
874
+ }
875
+ appendRedirect(requestId, time, redirectURL) {
876
+ const originalNetworkRequest = this.#requestsById.get(requestId);
877
+ if (!originalNetworkRequest) {
878
+ throw new Error(`Could not find original network request for ${requestId}`);
879
+ }
880
+ let redirectCount = 0;
881
+ for (let redirect = originalNetworkRequest.redirectSource(); redirect; redirect = redirect.redirectSource()) {
882
+ redirectCount++;
883
+ }
884
+ originalNetworkRequest.markAsRedirect(redirectCount);
885
+ this.finishNetworkRequest(originalNetworkRequest, time, -1);
886
+ const newNetworkRequest = NetworkRequest.create(requestId, redirectURL, originalNetworkRequest.documentURL, originalNetworkRequest.frameId, originalNetworkRequest.loaderId, originalNetworkRequest.initiator(), originalNetworkRequest.hasUserGesture() ?? undefined);
887
+ requestToManagerMap.set(newNetworkRequest, this.#manager);
888
+ newNetworkRequest.setRedirectSource(originalNetworkRequest);
889
+ originalNetworkRequest.setRedirectDestination(newNetworkRequest);
890
+ return newNetworkRequest;
891
+ }
892
+ maybeAdoptMainResourceRequest(requestId) {
893
+ const request = MultitargetNetworkManager.instance().inflightMainResourceRequests.get(requestId);
894
+ if (!request) {
895
+ return null;
896
+ }
897
+ const oldDispatcher = NetworkManager.forRequest(request).dispatcher;
898
+ oldDispatcher.#requestsById.delete(requestId);
899
+ oldDispatcher.#requestsByURL.delete(request.url());
900
+ const loaderId = request.loaderId;
901
+ if (loaderId) {
902
+ oldDispatcher.#requestsByLoaderId.delete(loaderId);
903
+ }
904
+ const builder = oldDispatcher.#requestIdToExtraInfoBuilder.get(requestId);
905
+ oldDispatcher.#requestIdToExtraInfoBuilder.delete(requestId);
906
+ this.#requestsById.set(requestId, request);
907
+ this.#requestsByURL.set(request.url(), request);
908
+ if (loaderId) {
909
+ this.#requestsByLoaderId.set(loaderId, request);
910
+ }
911
+ if (builder) {
912
+ this.#requestIdToExtraInfoBuilder.set(requestId, builder);
913
+ }
914
+ requestToManagerMap.set(request, this.#manager);
915
+ return request;
916
+ }
917
+ startNetworkRequest(networkRequest, originalRequest) {
918
+ this.#requestsById.set(networkRequest.requestId(), networkRequest);
919
+ this.#requestsByURL.set(networkRequest.url(), networkRequest);
920
+ const loaderId = networkRequest.loaderId;
921
+ if (loaderId) {
922
+ this.#requestsByLoaderId.set(loaderId, networkRequest);
923
+ }
924
+ // The following relies on the fact that loaderIds and requestIds
925
+ // are globally unique and that the main request has them equal. If
926
+ // loaderId is an empty string, it indicates a worker request. For the
927
+ // request to fetch the main worker script, the request ID is the future
928
+ // worker target ID and, therefore, it is unique.
929
+ if (networkRequest.loaderId === networkRequest.requestId() || networkRequest.loaderId === '') {
930
+ MultitargetNetworkManager.instance().inflightMainResourceRequests.set(networkRequest.requestId(), networkRequest);
931
+ }
932
+ this.#manager.dispatchEventToListeners(Events.RequestStarted, { request: networkRequest, originalRequest });
933
+ }
934
+ updateNetworkRequest(networkRequest) {
935
+ this.#manager.dispatchEventToListeners(Events.RequestUpdated, networkRequest);
936
+ }
937
+ finishNetworkRequest(networkRequest, finishTime, encodedDataLength) {
938
+ networkRequest.endTime = finishTime;
939
+ networkRequest.finished = true;
940
+ if (encodedDataLength >= 0) {
941
+ const redirectSource = networkRequest.redirectSource();
942
+ if (redirectSource?.signedExchangeInfo()) {
943
+ networkRequest.setTransferSize(0);
944
+ redirectSource.setTransferSize(encodedDataLength);
945
+ this.updateNetworkRequest(redirectSource);
946
+ }
947
+ else {
948
+ networkRequest.setTransferSize(encodedDataLength);
949
+ }
950
+ }
951
+ this.#manager.dispatchEventToListeners(Events.RequestFinished, networkRequest);
952
+ MultitargetNetworkManager.instance().inflightMainResourceRequests.delete(networkRequest.requestId());
953
+ if (Common.Settings.Settings.instance().moduleSetting('monitoring-xhr-enabled').get() &&
954
+ networkRequest.resourceType().category() === Common.ResourceType.resourceCategories.XHR) {
955
+ let message;
956
+ const failedToLoad = networkRequest.failed || networkRequest.hasErrorStatusCode();
957
+ if (failedToLoad) {
958
+ message = i18nString(UIStrings.sFailedLoadingSS, { PH1: networkRequest.resourceType().title(), PH2: networkRequest.requestMethod, PH3: networkRequest.url() });
959
+ }
960
+ else {
961
+ message = i18nString(UIStrings.sFinishedLoadingSS, { PH1: networkRequest.resourceType().title(), PH2: networkRequest.requestMethod, PH3: networkRequest.url() });
962
+ }
963
+ this.#manager.dispatchEventToListeners(Events.MessageGenerated, { message, requestId: networkRequest.requestId(), warning: false });
964
+ }
965
+ }
966
+ clearRequests() {
967
+ for (const [requestId, request] of this.#requestsById) {
968
+ if (request.finished) {
969
+ this.#requestsById.delete(requestId);
970
+ }
971
+ }
972
+ for (const [requestURL, request] of this.#requestsByURL) {
973
+ if (request.finished) {
974
+ this.#requestsByURL.delete(requestURL);
975
+ }
976
+ }
977
+ for (const [requestLoaderId, request] of this.#requestsByLoaderId) {
978
+ if (request.finished) {
979
+ this.#requestsByLoaderId.delete(requestLoaderId);
980
+ }
981
+ }
982
+ for (const [requestId, builder] of this.#requestIdToExtraInfoBuilder) {
983
+ if (builder.isFinished()) {
984
+ this.#requestIdToExtraInfoBuilder.delete(requestId);
985
+ }
986
+ }
987
+ }
988
+ webTransportCreated({ transportId, url: requestURL, timestamp: time, initiator }) {
989
+ const networkRequest = NetworkRequest.createForSocket(transportId, requestURL, initiator);
990
+ networkRequest.hasNetworkData = true;
991
+ requestToManagerMap.set(networkRequest, this.#manager);
992
+ networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebTransport);
993
+ networkRequest.setIssueTime(time, 0);
994
+ // TODO(yoichio): Add appropreate events to address abort cases.
995
+ this.startNetworkRequest(networkRequest, null);
996
+ }
997
+ webTransportConnectionEstablished({ transportId, timestamp: time }) {
998
+ const networkRequest = this.#requestsById.get(transportId);
999
+ if (!networkRequest) {
1000
+ return;
1001
+ }
1002
+ // This dummy deltas are needed to show this request as being
1003
+ // downloaded(blue) given typical WebTransport is kept for a while.
1004
+ // TODO(yoichio): Add appropreate events to fix these dummy datas.
1005
+ // DNS lookup?
1006
+ networkRequest.responseReceivedTime = time;
1007
+ networkRequest.endTime = time + 0.001;
1008
+ this.updateNetworkRequest(networkRequest);
1009
+ }
1010
+ webTransportClosed({ transportId, timestamp: time }) {
1011
+ const networkRequest = this.#requestsById.get(transportId);
1012
+ if (!networkRequest) {
1013
+ return;
1014
+ }
1015
+ networkRequest.endTime = time;
1016
+ this.finishNetworkRequest(networkRequest, time, 0);
1017
+ }
1018
+ directTCPSocketCreated(event) {
1019
+ const requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
1020
+ const networkRequest = NetworkRequest.createForSocket(event.identifier, requestURL, event.initiator);
1021
+ networkRequest.hasNetworkData = true;
1022
+ networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
1023
+ networkRequest.protocol = i18n.i18n.lockedString('tcp');
1024
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpening);
1025
+ networkRequest.directSocketInfo = {
1026
+ type: DirectSocketType.TCP,
1027
+ status: DirectSocketStatus.OPENING,
1028
+ createOptions: {
1029
+ remoteAddr: event.remoteAddr,
1030
+ remotePort: event.remotePort,
1031
+ noDelay: event.options.noDelay,
1032
+ keepAliveDelay: event.options.keepAliveDelay,
1033
+ sendBufferSize: event.options.sendBufferSize,
1034
+ receiveBufferSize: event.options.receiveBufferSize,
1035
+ dnsQueryType: event.options.dnsQueryType,
1036
+ }
1037
+ };
1038
+ networkRequest.setResourceType(Common.ResourceType.resourceTypes.DirectSocket);
1039
+ networkRequest.setIssueTime(event.timestamp, event.timestamp);
1040
+ requestToManagerMap.set(networkRequest, this.#manager);
1041
+ this.startNetworkRequest(networkRequest, null);
1042
+ }
1043
+ directTCPSocketOpened(event) {
1044
+ const networkRequest = this.#requestsById.get(event.identifier);
1045
+ if (!networkRequest?.directSocketInfo) {
1046
+ return;
1047
+ }
1048
+ networkRequest.responseReceivedTime = event.timestamp;
1049
+ networkRequest.directSocketInfo.status = DirectSocketStatus.OPEN;
1050
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpen);
1051
+ networkRequest.directSocketInfo.openInfo = {
1052
+ remoteAddr: event.remoteAddr,
1053
+ remotePort: event.remotePort,
1054
+ localAddr: event.localAddr,
1055
+ localPort: event.localPort,
1056
+ };
1057
+ networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
1058
+ const requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
1059
+ networkRequest.setUrl(requestURL);
1060
+ this.updateNetworkRequest(networkRequest);
1061
+ }
1062
+ directTCPSocketAborted(event) {
1063
+ const networkRequest = this.#requestsById.get(event.identifier);
1064
+ if (!networkRequest?.directSocketInfo) {
1065
+ return;
1066
+ }
1067
+ networkRequest.failed = true;
1068
+ networkRequest.directSocketInfo.status = DirectSocketStatus.ABORTED;
1069
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusAborted);
1070
+ networkRequest.directSocketInfo.errorMessage = event.errorMessage;
1071
+ this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1072
+ }
1073
+ directTCPSocketClosed(event) {
1074
+ const networkRequest = this.#requestsById.get(event.identifier);
1075
+ if (!networkRequest?.directSocketInfo) {
1076
+ return;
1077
+ }
1078
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusClosed);
1079
+ networkRequest.directSocketInfo.status = DirectSocketStatus.CLOSED;
1080
+ this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1081
+ }
1082
+ directTCPSocketChunkSent(event) {
1083
+ const networkRequest = this.#requestsById.get(event.identifier);
1084
+ if (!networkRequest) {
1085
+ return;
1086
+ }
1087
+ networkRequest.addDirectSocketChunk({
1088
+ data: event.data,
1089
+ type: DirectSocketChunkType.SEND,
1090
+ timestamp: event.timestamp,
1091
+ });
1092
+ networkRequest.responseReceivedTime = event.timestamp;
1093
+ this.updateNetworkRequest(networkRequest);
1094
+ }
1095
+ directTCPSocketChunkReceived(event) {
1096
+ const networkRequest = this.#requestsById.get(event.identifier);
1097
+ if (!networkRequest) {
1098
+ return;
1099
+ }
1100
+ networkRequest.addDirectSocketChunk({
1101
+ data: event.data,
1102
+ type: DirectSocketChunkType.RECEIVE,
1103
+ timestamp: event.timestamp,
1104
+ });
1105
+ networkRequest.responseReceivedTime = event.timestamp;
1106
+ this.updateNetworkRequest(networkRequest);
1107
+ }
1108
+ directUDPSocketCreated(event) {
1109
+ let requestURL = '';
1110
+ let type;
1111
+ if (event.options.remoteAddr && event.options.remotePort) {
1112
+ requestURL = this.concatHostPort(event.options.remoteAddr, event.options.remotePort);
1113
+ type = DirectSocketType.UDP_CONNECTED;
1114
+ }
1115
+ else if (event.options.localAddr) {
1116
+ requestURL = this.concatHostPort(event.options.localAddr, event.options.localPort);
1117
+ type = DirectSocketType.UDP_BOUND;
1118
+ }
1119
+ else {
1120
+ // Must be present in a valid command if remoteAddr
1121
+ // is not specified.
1122
+ return;
1123
+ }
1124
+ const networkRequest = NetworkRequest.createForSocket(event.identifier, requestURL, event.initiator);
1125
+ networkRequest.hasNetworkData = true;
1126
+ if (event.options.remoteAddr && event.options.remotePort) {
1127
+ networkRequest.setRemoteAddress(event.options.remoteAddr, event.options.remotePort);
1128
+ }
1129
+ networkRequest.protocol = i18n.i18n.lockedString('udp');
1130
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpening);
1131
+ networkRequest.directSocketInfo = {
1132
+ type,
1133
+ status: DirectSocketStatus.OPENING,
1134
+ createOptions: {
1135
+ remoteAddr: event.options.remoteAddr,
1136
+ remotePort: event.options.remotePort,
1137
+ localAddr: event.options.localAddr,
1138
+ localPort: event.options.localPort,
1139
+ sendBufferSize: event.options.sendBufferSize,
1140
+ receiveBufferSize: event.options.receiveBufferSize,
1141
+ dnsQueryType: event.options.dnsQueryType,
1142
+ multicastLoopback: event.options.multicastLoopback,
1143
+ multicastTimeToLive: event.options.multicastTimeToLive,
1144
+ multicastAllowAddressSharing: event.options.multicastAllowAddressSharing,
1145
+ },
1146
+ joinedMulticastGroups: new Set(),
1147
+ };
1148
+ networkRequest.setResourceType(Common.ResourceType.resourceTypes.DirectSocket);
1149
+ networkRequest.setIssueTime(event.timestamp, event.timestamp);
1150
+ requestToManagerMap.set(networkRequest, this.#manager);
1151
+ this.startNetworkRequest(networkRequest, null);
1152
+ }
1153
+ directUDPSocketOpened(event) {
1154
+ const networkRequest = this.#requestsById.get(event.identifier);
1155
+ if (!networkRequest?.directSocketInfo) {
1156
+ return;
1157
+ }
1158
+ let requestURL;
1159
+ if (networkRequest.directSocketInfo.type === DirectSocketType.UDP_CONNECTED) {
1160
+ if (!event.remoteAddr || !event.remotePort) {
1161
+ // Connected socket must have remoteAdd and remotePort.
1162
+ return;
1163
+ }
1164
+ networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
1165
+ requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
1166
+ }
1167
+ else {
1168
+ requestURL = this.concatHostPort(event.localAddr, event.localPort);
1169
+ }
1170
+ networkRequest.setUrl(requestURL);
1171
+ networkRequest.responseReceivedTime = event.timestamp;
1172
+ networkRequest.directSocketInfo.status = DirectSocketStatus.OPEN;
1173
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpen);
1174
+ networkRequest.directSocketInfo.openInfo = {
1175
+ remoteAddr: event.remoteAddr,
1176
+ remotePort: event.remotePort,
1177
+ localAddr: event.localAddr,
1178
+ localPort: event.localPort,
1179
+ };
1180
+ this.updateNetworkRequest(networkRequest);
1181
+ }
1182
+ directUDPSocketAborted(event) {
1183
+ const networkRequest = this.#requestsById.get(event.identifier);
1184
+ if (!networkRequest?.directSocketInfo) {
1185
+ return;
1186
+ }
1187
+ networkRequest.failed = true;
1188
+ networkRequest.directSocketInfo.status = DirectSocketStatus.ABORTED;
1189
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusAborted);
1190
+ networkRequest.directSocketInfo.errorMessage = event.errorMessage;
1191
+ this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1192
+ }
1193
+ directUDPSocketClosed(event) {
1194
+ const networkRequest = this.#requestsById.get(event.identifier);
1195
+ if (!networkRequest?.directSocketInfo) {
1196
+ return;
1197
+ }
1198
+ networkRequest.statusText = i18nString(UIStrings.directSocketStatusClosed);
1199
+ networkRequest.directSocketInfo.status = DirectSocketStatus.CLOSED;
1200
+ this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1201
+ }
1202
+ directUDPSocketChunkSent(event) {
1203
+ const networkRequest = this.#requestsById.get(event.identifier);
1204
+ if (!networkRequest) {
1205
+ return;
1206
+ }
1207
+ networkRequest.addDirectSocketChunk({
1208
+ data: event.message.data,
1209
+ type: DirectSocketChunkType.SEND,
1210
+ timestamp: event.timestamp,
1211
+ remoteAddress: event.message.remoteAddr,
1212
+ remotePort: event.message.remotePort
1213
+ });
1214
+ networkRequest.responseReceivedTime = event.timestamp;
1215
+ this.updateNetworkRequest(networkRequest);
1216
+ }
1217
+ directUDPSocketChunkReceived(event) {
1218
+ const networkRequest = this.#requestsById.get(event.identifier);
1219
+ if (!networkRequest) {
1220
+ return;
1221
+ }
1222
+ networkRequest.addDirectSocketChunk({
1223
+ data: event.message.data,
1224
+ type: DirectSocketChunkType.RECEIVE,
1225
+ timestamp: event.timestamp,
1226
+ remoteAddress: event.message.remoteAddr,
1227
+ remotePort: event.message.remotePort
1228
+ });
1229
+ networkRequest.responseReceivedTime = event.timestamp;
1230
+ this.updateNetworkRequest(networkRequest);
1231
+ }
1232
+ directUDPSocketJoinedMulticastGroup(event) {
1233
+ const networkRequest = this.#requestsById.get(event.identifier);
1234
+ if (!networkRequest?.directSocketInfo) {
1235
+ return;
1236
+ }
1237
+ if (!networkRequest.directSocketInfo.joinedMulticastGroups) {
1238
+ networkRequest.directSocketInfo.joinedMulticastGroups = new Set();
1239
+ }
1240
+ if (!networkRequest.directSocketInfo.joinedMulticastGroups.has(event.IPAddress)) {
1241
+ networkRequest.directSocketInfo.joinedMulticastGroups.add(event.IPAddress);
1242
+ this.updateNetworkRequest(networkRequest);
1243
+ }
1244
+ }
1245
+ directUDPSocketLeftMulticastGroup(event) {
1246
+ const networkRequest = this.#requestsById.get(event.identifier);
1247
+ if (!networkRequest?.directSocketInfo?.joinedMulticastGroups) {
1248
+ return;
1249
+ }
1250
+ if (networkRequest.directSocketInfo.joinedMulticastGroups.delete(event.IPAddress)) {
1251
+ this.updateNetworkRequest(networkRequest);
1252
+ }
1253
+ }
1254
+ trustTokenOperationDone(event) {
1255
+ const request = this.#requestsById.get(event.requestId);
1256
+ if (!request) {
1257
+ this.#requestIdToTrustTokenEvent.set(event.requestId, event);
1258
+ return;
1259
+ }
1260
+ request.setTrustTokenOperationDoneEvent(event);
1261
+ }
1262
+ reportingApiReportAdded(data) {
1263
+ this.#manager.dispatchEventToListeners(Events.ReportingApiReportAdded, data.report);
1264
+ }
1265
+ reportingApiReportUpdated(data) {
1266
+ this.#manager.dispatchEventToListeners(Events.ReportingApiReportUpdated, data.report);
1267
+ }
1268
+ reportingApiEndpointsChangedForOrigin(data) {
1269
+ this.#manager.dispatchEventToListeners(Events.ReportingApiEndpointsChangedForOrigin, data);
1270
+ }
1271
+ policyUpdated() {
1272
+ }
1273
+ /**
1274
+ * @deprecated
1275
+ * This method is only kept for usage in a web test.
1276
+ */
1277
+ createNetworkRequest(requestId, frameId, loaderId, url, documentURL, initiator) {
1278
+ const request = NetworkRequest.create(requestId, url, documentURL, frameId, loaderId, initiator);
1279
+ requestToManagerMap.set(request, this.#manager);
1280
+ return request;
1281
+ }
1282
+ concatHostPort(host, port) {
1283
+ if (!port || port === 0) {
1284
+ return host;
1285
+ }
1286
+ return `${host}:${port}`;
1287
+ }
1288
+ }
1289
+ export class RequestURLPattern {
1290
+ constructorString;
1291
+ pattern;
1292
+ constructor(constructorString, pattern) {
1293
+ this.constructorString = constructorString;
1294
+ this.pattern = pattern;
1295
+ if (pattern.hasRegExpGroups) {
1296
+ throw new Error('RegExp groups are not allowed');
1297
+ }
1298
+ }
1299
+ static isValidPattern(pattern) {
1300
+ try {
1301
+ const urlPattern = new URLPattern(pattern);
1302
+ return urlPattern.hasRegExpGroups ? "has-regexp-groups" /* RequestURLPatternValidity.HAS_REGEXP_GROUPS */ : "valid" /* RequestURLPatternValidity.VALID */;
1303
+ }
1304
+ catch {
1305
+ return "failed-to-parse" /* RequestURLPatternValidity.FAILED_TO_PARSE */;
1306
+ }
1307
+ }
1308
+ static create(constructorString) {
1309
+ try {
1310
+ const urlPattern = new URLPattern(constructorString);
1311
+ return urlPattern.hasRegExpGroups ? null : new RequestURLPattern(constructorString, urlPattern);
1312
+ }
1313
+ catch {
1314
+ return null;
1315
+ }
1316
+ }
1317
+ static upgradeFromWildcard(pattern) {
1318
+ const tryCreate = (constructorString) => {
1319
+ const result = this.create(constructorString);
1320
+ if (result?.pattern.protocol === 'localhost' && result?.pattern.hostname === '') {
1321
+ // localhost:1234 parses as a valid pattern, do the right thing here instead
1322
+ return tryCreate(`*://${constructorString}`);
1323
+ }
1324
+ return result;
1325
+ };
1326
+ return tryCreate(pattern) // try as is
1327
+ ??
1328
+ // Try to upgrade patterns created from the network panel, which either blocks the full url (sans
1329
+ // protocol) or just the domain name. In both cases the wildcard patterns had implicit wildcards at the end.
1330
+ // We explicitly add that here, which will match both domain names without path (implicitly setting pathname
1331
+ // to '*') and urls with path (appending * to the pathname).
1332
+ tryCreate(`*://${pattern}*`);
1333
+ }
1334
+ }
1335
+ export class RequestCondition extends Common.ObjectWrapper.ObjectWrapper {
1336
+ #pattern;
1337
+ #enabled;
1338
+ #conditions;
1339
+ #ruleIds = new Set();
1340
+ static createFromSetting(setting) {
1341
+ if ('urlPattern' in setting) {
1342
+ const pattern = RequestURLPattern.create(setting.urlPattern) ?? {
1343
+ wildcardURL: setting.urlPattern,
1344
+ upgradedPattern: RequestURLPattern.upgradeFromWildcard(setting.urlPattern) ?? undefined,
1345
+ };
1346
+ const conditions = getPredefinedOrBlockingCondition(setting.conditions) ??
1347
+ customUserNetworkConditionsSetting().get().find(condition => condition.key === setting.conditions) ??
1348
+ NoThrottlingConditions;
1349
+ return new this(pattern, setting.enabled, conditions);
1350
+ }
1351
+ const pattern = {
1352
+ wildcardURL: setting.url,
1353
+ upgradedPattern: RequestURLPattern.upgradeFromWildcard(setting.url) ?? undefined
1354
+ };
1355
+ return new this(pattern, setting.enabled, BlockingConditions);
1356
+ }
1357
+ static create(pattern, conditions) {
1358
+ return new this(pattern, /* enabled=*/ true, conditions);
1359
+ }
1360
+ constructor(pattern, enabled, conditions) {
1361
+ super();
1362
+ this.#pattern = pattern;
1363
+ this.#enabled = enabled;
1364
+ this.#conditions = conditions;
1365
+ }
1366
+ get isBlocking() {
1367
+ return this.conditions === BlockingConditions;
1368
+ }
1369
+ get ruleIds() {
1370
+ return this.#ruleIds;
1371
+ }
1372
+ get constructorString() {
1373
+ return this.#pattern instanceof RequestURLPattern ? this.#pattern.constructorString :
1374
+ this.#pattern.upgradedPattern?.constructorString;
1375
+ }
1376
+ get wildcardURL() {
1377
+ return 'wildcardURL' in this.#pattern ? this.#pattern.wildcardURL : undefined;
1378
+ }
1379
+ get constructorStringOrWildcardURL() {
1380
+ return this.#pattern instanceof RequestURLPattern ?
1381
+ this.#pattern.constructorString :
1382
+ (this.#pattern.upgradedPattern?.constructorString ?? this.#pattern.wildcardURL);
1383
+ }
1384
+ set pattern(pattern) {
1385
+ if (typeof pattern === 'string') {
1386
+ // TODO(pfaffe) Remove once the feature flag is no longer required
1387
+ if (Root.Runtime.hostConfig.devToolsIndividualRequestThrottling?.enabled) {
1388
+ throw new Error('Should not use wildcard urls');
1389
+ }
1390
+ this.#pattern = {
1391
+ wildcardURL: pattern,
1392
+ upgradedPattern: RequestURLPattern.upgradeFromWildcard(pattern) ?? undefined
1393
+ };
1394
+ }
1395
+ else {
1396
+ this.#pattern = pattern;
1397
+ }
1398
+ this.dispatchEventToListeners("request-condition-changed" /* RequestCondition.Events.REQUEST_CONDITION_CHANGED */);
1399
+ }
1400
+ get enabled() {
1401
+ return this.#enabled;
1402
+ }
1403
+ set enabled(enabled) {
1404
+ this.#enabled = enabled;
1405
+ this.dispatchEventToListeners("request-condition-changed" /* RequestCondition.Events.REQUEST_CONDITION_CHANGED */);
1406
+ }
1407
+ get conditions() {
1408
+ return this.#conditions;
1409
+ }
1410
+ set conditions(conditions) {
1411
+ this.#conditions = conditions;
1412
+ this.#ruleIds = new Set();
1413
+ this.dispatchEventToListeners("request-condition-changed" /* RequestCondition.Events.REQUEST_CONDITION_CHANGED */);
1414
+ }
1415
+ toSetting() {
1416
+ const enabled = this.enabled;
1417
+ if (this.#pattern instanceof RequestURLPattern) {
1418
+ return { enabled, urlPattern: this.#pattern.constructorString, conditions: this.#conditions.key };
1419
+ }
1420
+ if (this.#conditions !== BlockingConditions && this.#pattern.upgradedPattern) {
1421
+ return { enabled, urlPattern: this.#pattern.upgradedPattern.constructorString, conditions: this.#conditions.key };
1422
+ }
1423
+ return { enabled, url: this.#pattern.wildcardURL };
1424
+ }
1425
+ get originalOrUpgradedURLPattern() {
1426
+ return this.#pattern instanceof RequestURLPattern ? this.#pattern.pattern : this.#pattern.upgradedPattern?.pattern;
1427
+ }
1428
+ }
1429
+ export class RequestConditions extends Common.ObjectWrapper.ObjectWrapper {
1430
+ #setting = Common.Settings.Settings.instance().createSetting('network-blocked-patterns', []);
1431
+ #conditionsEnabledSetting = Common.Settings.Settings.instance().moduleSetting('request-blocking-enabled');
1432
+ #conditions = [];
1433
+ #requestConditionsById = new Map();
1434
+ #conditionsAppliedForTestPromise = Promise.resolve();
1435
+ constructor() {
1436
+ super();
1437
+ for (const condition of this.#setting.get()) {
1438
+ try {
1439
+ this.#conditions.push(RequestCondition.createFromSetting(condition));
1440
+ }
1441
+ catch (e) {
1442
+ console.error('Error loading throttling settings: ', e);
1443
+ }
1444
+ }
1445
+ for (const condition of this.#conditions) {
1446
+ condition.addEventListener("request-condition-changed" /* RequestCondition.Events.REQUEST_CONDITION_CHANGED */, this.#conditionsChanged, this);
1447
+ }
1448
+ this.#conditionsEnabledSetting.addChangeListener(() => this.dispatchEventToListeners("request-conditions-changed" /* RequestConditions.Events.REQUEST_CONDITIONS_CHANGED */));
1449
+ }
1450
+ get count() {
1451
+ return this.#conditions.length;
1452
+ }
1453
+ get conditionsEnabled() {
1454
+ return this.#conditionsEnabledSetting.get();
1455
+ }
1456
+ set conditionsEnabled(enabled) {
1457
+ if (this.#conditionsEnabledSetting.get() === enabled) {
1458
+ return;
1459
+ }
1460
+ this.#conditionsEnabledSetting.set(enabled);
1461
+ }
1462
+ findCondition(pattern) {
1463
+ if (Root.Runtime.hostConfig.devToolsIndividualRequestThrottling?.enabled) {
1464
+ return this.#conditions.find(condition => condition.constructorString === pattern);
1465
+ }
1466
+ return this.#conditions.find(condition => condition.wildcardURL === pattern);
1467
+ }
1468
+ has(url) {
1469
+ return Boolean(this.findCondition(url));
1470
+ }
1471
+ add(...conditions) {
1472
+ this.#conditions.push(...conditions);
1473
+ for (const condition of conditions) {
1474
+ condition.addEventListener("request-condition-changed" /* RequestCondition.Events.REQUEST_CONDITION_CHANGED */, this.#conditionsChanged, this);
1475
+ }
1476
+ this.#conditionsChanged();
1477
+ }
1478
+ decreasePriority(condition) {
1479
+ const index = this.#conditions.indexOf(condition);
1480
+ if (index < 0 || index >= this.#conditions.length - 1) {
1481
+ return;
1482
+ }
1483
+ Platform.ArrayUtilities.swap(this.#conditions, index, index + 1);
1484
+ this.#conditionsChanged();
1485
+ }
1486
+ increasePriority(condition) {
1487
+ const index = this.#conditions.indexOf(condition);
1488
+ if (index <= 0) {
1489
+ return;
1490
+ }
1491
+ Platform.ArrayUtilities.swap(this.#conditions, index - 1, index);
1492
+ this.#conditionsChanged();
1493
+ }
1494
+ delete(condition) {
1495
+ const index = this.#conditions.indexOf(condition);
1496
+ if (index < 0) {
1497
+ return;
1498
+ }
1499
+ condition.removeEventListener("request-condition-changed" /* RequestCondition.Events.REQUEST_CONDITION_CHANGED */, this.#conditionsChanged, this);
1500
+ this.#conditions.splice(index, 1);
1501
+ this.#conditionsChanged();
1502
+ }
1503
+ clear() {
1504
+ this.#conditions.splice(0);
1505
+ this.#conditionsChanged();
1506
+ for (const condition of this.#conditions) {
1507
+ condition.removeEventListener("request-condition-changed" /* RequestCondition.Events.REQUEST_CONDITION_CHANGED */, this.#conditionsChanged, this);
1508
+ }
1509
+ }
1510
+ #conditionsChanged() {
1511
+ this.#setting.set(this.#conditions.map(condition => condition.toSetting()));
1512
+ this.dispatchEventToListeners("request-conditions-changed" /* RequestConditions.Events.REQUEST_CONDITIONS_CHANGED */);
1513
+ }
1514
+ get conditions() {
1515
+ return this.#conditions.values();
1516
+ }
1517
+ applyConditions(offline, globalConditions, ...agents) {
1518
+ function isNonBlockingCondition(condition) {
1519
+ return !('block' in condition);
1520
+ }
1521
+ if (Root.Runtime.hostConfig.devToolsIndividualRequestThrottling?.enabled) {
1522
+ const urlPatterns = [];
1523
+ // We store all this info out-of-band to prevent races with changing conditions while the promise is still pending
1524
+ const matchedNetworkConditions = [];
1525
+ if (this.conditionsEnabled) {
1526
+ for (const condition of this.#conditions) {
1527
+ const urlPattern = condition.constructorString;
1528
+ const conditions = condition.conditions;
1529
+ if (!condition.enabled || !urlPattern || conditions === NoThrottlingConditions) {
1530
+ continue;
1531
+ }
1532
+ const block = !isNonBlockingCondition(conditions);
1533
+ urlPatterns.push({ urlPattern, block });
1534
+ if (!block) {
1535
+ const { ruleIds } = condition;
1536
+ matchedNetworkConditions.push({ ruleIds, urlPattern, conditions });
1537
+ }
1538
+ }
1539
+ if (globalConditions) {
1540
+ matchedNetworkConditions.push({ conditions: globalConditions });
1541
+ }
1542
+ }
1543
+ const promises = [];
1544
+ for (const agent of agents) {
1545
+ promises.push(agent.invoke_setBlockedURLs({ urlPatterns }));
1546
+ promises.push(agent
1547
+ .invoke_emulateNetworkConditionsByRule({
1548
+ offline,
1549
+ matchedNetworkConditions: matchedNetworkConditions.map(({ urlPattern, conditions }) => ({
1550
+ urlPattern: urlPattern ?? '',
1551
+ latency: conditions.latency,
1552
+ downloadThroughput: conditions.download < 0 ? 0 : conditions.download,
1553
+ uploadThroughput: conditions.upload < 0 ? 0 : conditions.upload,
1554
+ packetLoss: (conditions.packetLoss ?? 0) < 0 ? 0 : conditions.packetLoss,
1555
+ packetQueueLength: conditions.packetQueueLength,
1556
+ packetReordering: conditions.packetReordering,
1557
+ connectionType: NetworkManager.connectionType(conditions),
1558
+ }))
1559
+ })
1560
+ .then(response => {
1561
+ if (!response.getError()) {
1562
+ for (let i = 0; i < response.ruleIds.length; ++i) {
1563
+ const ruleId = response.ruleIds[i];
1564
+ const { ruleIds, conditions, urlPattern } = matchedNetworkConditions[i];
1565
+ if (ruleIds) {
1566
+ this.#requestConditionsById.set(ruleId, { urlPattern, conditions });
1567
+ matchedNetworkConditions[i].ruleIds?.add(ruleId);
1568
+ }
1569
+ }
1570
+ }
1571
+ }));
1572
+ promises.push(agent.invoke_overrideNetworkState({
1573
+ offline,
1574
+ latency: globalConditions?.latency ?? 0,
1575
+ downloadThroughput: globalConditions?.download ?? -1,
1576
+ uploadThroughput: globalConditions?.upload ?? -1,
1577
+ connectionType: globalConditions ? NetworkManager.connectionType(globalConditions) :
1578
+ "none" /* Protocol.Network.ConnectionType.None */,
1579
+ }));
1580
+ }
1581
+ this.#conditionsAppliedForTestPromise = this.#conditionsAppliedForTestPromise.then(() => Promise.all(promises));
1582
+ return urlPatterns.length > 0;
1583
+ }
1584
+ const urls = this.conditionsEnabled ?
1585
+ this.#conditions.filter(condition => condition.enabled && condition.wildcardURL)
1586
+ .map(condition => condition.wildcardURL) :
1587
+ [];
1588
+ for (const agent of agents) {
1589
+ void agent.invoke_setBlockedURLs({ urls });
1590
+ }
1591
+ return urls.length > 0;
1592
+ }
1593
+ conditionsAppliedForTest() {
1594
+ return this.#conditionsAppliedForTestPromise;
1595
+ }
1596
+ conditionsForId(appliedNetworkConditionsId) {
1597
+ const requestConditions = this.#requestConditionsById.get(appliedNetworkConditionsId);
1598
+ if (!requestConditions) {
1599
+ return undefined;
1600
+ }
1601
+ const { conditions, urlPattern } = requestConditions;
1602
+ return new AppliedNetworkConditions(conditions, appliedNetworkConditionsId, urlPattern);
1603
+ }
1604
+ }
1605
+ _a = RequestConditions;
1606
+ export class AppliedNetworkConditions {
1607
+ conditions;
1608
+ appliedNetworkConditionsId;
1609
+ urlPattern;
1610
+ constructor(conditions, appliedNetworkConditionsId, urlPattern) {
1611
+ this.conditions = conditions;
1612
+ this.appliedNetworkConditionsId = appliedNetworkConditionsId;
1613
+ this.urlPattern = urlPattern;
1614
+ }
1615
+ }
1616
+ export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrapper {
1617
+ #targetManager;
1618
+ #userAgentOverride = '';
1619
+ #userAgentMetadataOverride = null;
1620
+ #customAcceptedEncodings = null;
1621
+ #networkAgents = new Set();
1622
+ #fetchAgents = new Set();
1623
+ inflightMainResourceRequests = new Map();
1624
+ #networkConditions = NoThrottlingConditions;
1625
+ #updatingInterceptionPatternsPromise = null;
1626
+ #requestConditions = new RequestConditions();
1627
+ #urlsForRequestInterceptor = new Platform.MapUtilities.Multimap();
1628
+ #extraHeaders;
1629
+ #customUserAgent;
1630
+ #isBlocking = false;
1631
+ constructor(targetManager) {
1632
+ super();
1633
+ this.#targetManager = targetManager;
1634
+ // TODO(allada) Remove these and merge it with request interception.
1635
+ const blockedPatternChanged = () => {
1636
+ this.updateBlockedPatterns();
1637
+ this.dispatchEventToListeners("BlockedPatternsChanged" /* MultitargetNetworkManager.Events.BLOCKED_PATTERNS_CHANGED */);
1638
+ };
1639
+ this.#requestConditions.addEventListener("request-conditions-changed" /* RequestConditions.Events.REQUEST_CONDITIONS_CHANGED */, blockedPatternChanged);
1640
+ this.updateBlockedPatterns();
1641
+ this.#targetManager.observeModels(NetworkManager, this);
1642
+ }
1643
+ static instance(opts = { forceNew: null }) {
1644
+ const { forceNew, targetManager } = opts;
1645
+ if (!Root.DevToolsContext.globalInstance().has(MultitargetNetworkManager) || forceNew) {
1646
+ Root.DevToolsContext.globalInstance().set(MultitargetNetworkManager, new MultitargetNetworkManager(targetManager ?? TargetManager.instance()));
1647
+ }
1648
+ return Root.DevToolsContext.globalInstance().get(MultitargetNetworkManager);
1649
+ }
1650
+ static dispose() {
1651
+ Root.DevToolsContext.globalInstance().delete(MultitargetNetworkManager);
1652
+ }
1653
+ static patchUserAgentWithChromeVersion(uaString) {
1654
+ // Patches Chrome/ChrOS version from user #agent ("1.2.3.4" when user #agent is: "Chrome/1.2.3.4").
1655
+ // Otherwise, ignore it. This assumes additional appVersions appear after the Chrome version.
1656
+ const chromeVersion = Root.Runtime.getChromeVersion();
1657
+ if (chromeVersion.length > 0) {
1658
+ // "1.2.3.4" becomes "1.0.100.0"
1659
+ const additionalAppVersion = chromeVersion.split('.', 1)[0] + '.0.100.0';
1660
+ return Platform.StringUtilities.sprintf(uaString, chromeVersion, additionalAppVersion);
1661
+ }
1662
+ return uaString;
1663
+ }
1664
+ static patchUserAgentMetadataWithChromeVersion(userAgentMetadata) {
1665
+ // Patches Chrome/ChrOS version from user #agent metadata ("1.2.3.4" when user #agent is: "Chrome/1.2.3.4").
1666
+ // Otherwise, ignore it. This assumes additional appVersions appear after the Chrome version.
1667
+ if (!userAgentMetadata.brands) {
1668
+ return;
1669
+ }
1670
+ const chromeVersion = Root.Runtime.getChromeVersion();
1671
+ if (chromeVersion.length === 0) {
1672
+ return;
1673
+ }
1674
+ const majorVersion = chromeVersion.split('.', 1)[0];
1675
+ for (const brand of userAgentMetadata.brands) {
1676
+ if (brand.version.includes('%s')) {
1677
+ brand.version = Platform.StringUtilities.sprintf(brand.version, majorVersion);
1678
+ }
1679
+ }
1680
+ if (userAgentMetadata.fullVersion) {
1681
+ if (userAgentMetadata.fullVersion.includes('%s')) {
1682
+ userAgentMetadata.fullVersion = Platform.StringUtilities.sprintf(userAgentMetadata.fullVersion, chromeVersion);
1683
+ }
1684
+ }
1685
+ }
1686
+ modelAdded(networkManager) {
1687
+ const networkAgent = networkManager.target().networkAgent();
1688
+ const fetchAgent = networkManager.target().fetchAgent();
1689
+ if (this.#extraHeaders) {
1690
+ void networkAgent.invoke_setExtraHTTPHeaders({ headers: this.#extraHeaders });
1691
+ }
1692
+ if (this.currentUserAgent()) {
1693
+ void networkAgent.invoke_setUserAgentOverride({ userAgent: this.currentUserAgent(), userAgentMetadata: this.#userAgentMetadataOverride || undefined });
1694
+ }
1695
+ this.#requestConditions.applyConditions(this.isOffline(), this.isThrottling() ? this.#networkConditions : null, networkAgent);
1696
+ if (this.isIntercepting()) {
1697
+ void fetchAgent.invoke_enable({ patterns: this.#urlsForRequestInterceptor.valuesArray() });
1698
+ }
1699
+ if (this.#customAcceptedEncodings === null) {
1700
+ void networkAgent.invoke_clearAcceptedEncodingsOverride();
1701
+ }
1702
+ else {
1703
+ void networkAgent.invoke_setAcceptedEncodings({ encodings: this.#customAcceptedEncodings });
1704
+ }
1705
+ this.#networkAgents.add(networkAgent);
1706
+ this.#fetchAgents.add(fetchAgent);
1707
+ if (this.isThrottling() && !Root.Runtime.hostConfig.devToolsIndividualRequestThrottling?.enabled) {
1708
+ this.updateNetworkConditions(networkAgent);
1709
+ }
1710
+ }
1711
+ modelRemoved(networkManager) {
1712
+ for (const entry of this.inflightMainResourceRequests) {
1713
+ const manager = NetworkManager.forRequest((entry[1]));
1714
+ if (manager !== networkManager) {
1715
+ continue;
1716
+ }
1717
+ this.inflightMainResourceRequests.delete((entry[0]));
1718
+ }
1719
+ this.#networkAgents.delete(networkManager.target().networkAgent());
1720
+ this.#fetchAgents.delete(networkManager.target().fetchAgent());
1721
+ }
1722
+ isThrottling() {
1723
+ return this.#networkConditions.download >= 0 || this.#networkConditions.upload >= 0 ||
1724
+ this.#networkConditions.latency > 0;
1725
+ }
1726
+ isOffline() {
1727
+ return !this.#networkConditions.download && !this.#networkConditions.upload;
1728
+ }
1729
+ setNetworkConditions(conditions) {
1730
+ this.#networkConditions = conditions;
1731
+ if (Root.Runtime.hostConfig.devToolsIndividualRequestThrottling?.enabled) {
1732
+ this.#requestConditions.applyConditions(this.isOffline(), this.isThrottling() ? this.#networkConditions : null, ...this.#networkAgents);
1733
+ }
1734
+ else {
1735
+ for (const agent of this.#networkAgents) {
1736
+ this.updateNetworkConditions(agent);
1737
+ }
1738
+ }
1739
+ this.dispatchEventToListeners("ConditionsChanged" /* MultitargetNetworkManager.Events.CONDITIONS_CHANGED */);
1740
+ }
1741
+ networkConditions() {
1742
+ return this.#networkConditions;
1743
+ }
1744
+ updateNetworkConditions(networkAgent) {
1745
+ const conditions = this.#networkConditions;
1746
+ if (!this.isThrottling()) {
1747
+ void networkAgent.invoke_emulateNetworkConditions({
1748
+ offline: false,
1749
+ latency: 0,
1750
+ downloadThroughput: 0,
1751
+ uploadThroughput: 0,
1752
+ });
1753
+ }
1754
+ else {
1755
+ void networkAgent.invoke_emulateNetworkConditions({
1756
+ offline: this.isOffline(),
1757
+ latency: conditions.latency,
1758
+ downloadThroughput: conditions.download < 0 ? 0 : conditions.download,
1759
+ uploadThroughput: conditions.upload < 0 ? 0 : conditions.upload,
1760
+ packetLoss: (conditions.packetLoss ?? 0) < 0 ? 0 : conditions.packetLoss,
1761
+ packetQueueLength: conditions.packetQueueLength,
1762
+ packetReordering: conditions.packetReordering,
1763
+ connectionType: NetworkManager.connectionType(conditions),
1764
+ });
1765
+ }
1766
+ }
1767
+ setExtraHTTPHeaders(headers) {
1768
+ this.#extraHeaders = headers;
1769
+ for (const agent of this.#networkAgents) {
1770
+ void agent.invoke_setExtraHTTPHeaders({ headers: this.#extraHeaders });
1771
+ }
1772
+ }
1773
+ currentUserAgent() {
1774
+ return this.#customUserAgent ? this.#customUserAgent : this.#userAgentOverride;
1775
+ }
1776
+ updateUserAgentOverride() {
1777
+ const userAgent = this.currentUserAgent();
1778
+ for (const agent of this.#networkAgents) {
1779
+ void agent.invoke_setUserAgentOverride({ userAgent, userAgentMetadata: this.#userAgentMetadataOverride || undefined });
1780
+ }
1781
+ }
1782
+ setUserAgentOverride(userAgent, userAgentMetadataOverride) {
1783
+ const uaChanged = (this.#userAgentOverride !== userAgent);
1784
+ this.#userAgentOverride = userAgent;
1785
+ if (!this.#customUserAgent) {
1786
+ this.#userAgentMetadataOverride = userAgentMetadataOverride;
1787
+ this.updateUserAgentOverride();
1788
+ }
1789
+ else {
1790
+ this.#userAgentMetadataOverride = null;
1791
+ }
1792
+ if (uaChanged) {
1793
+ this.dispatchEventToListeners("UserAgentChanged" /* MultitargetNetworkManager.Events.USER_AGENT_CHANGED */);
1794
+ }
1795
+ }
1796
+ setCustomUserAgentOverride(userAgent, userAgentMetadataOverride = null) {
1797
+ this.#customUserAgent = userAgent;
1798
+ this.#userAgentMetadataOverride = userAgentMetadataOverride;
1799
+ this.updateUserAgentOverride();
1800
+ }
1801
+ setCustomAcceptedEncodingsOverride(acceptedEncodings) {
1802
+ this.#customAcceptedEncodings = acceptedEncodings;
1803
+ this.updateAcceptedEncodingsOverride();
1804
+ this.dispatchEventToListeners("AcceptedEncodingsChanged" /* MultitargetNetworkManager.Events.ACCEPTED_ENCODINGS_CHANGED */);
1805
+ }
1806
+ clearCustomAcceptedEncodingsOverride() {
1807
+ this.#customAcceptedEncodings = null;
1808
+ this.updateAcceptedEncodingsOverride();
1809
+ this.dispatchEventToListeners("AcceptedEncodingsChanged" /* MultitargetNetworkManager.Events.ACCEPTED_ENCODINGS_CHANGED */);
1810
+ }
1811
+ isAcceptedEncodingOverrideSet() {
1812
+ return this.#customAcceptedEncodings !== null;
1813
+ }
1814
+ updateAcceptedEncodingsOverride() {
1815
+ const customAcceptedEncodings = this.#customAcceptedEncodings;
1816
+ for (const agent of this.#networkAgents) {
1817
+ if (customAcceptedEncodings === null) {
1818
+ void agent.invoke_clearAcceptedEncodingsOverride();
1819
+ }
1820
+ else {
1821
+ void agent.invoke_setAcceptedEncodings({ encodings: customAcceptedEncodings });
1822
+ }
1823
+ }
1824
+ }
1825
+ get requestConditions() {
1826
+ return this.#requestConditions;
1827
+ }
1828
+ isBlocking() {
1829
+ return this.#isBlocking && this.requestConditions.conditionsEnabled;
1830
+ }
1831
+ /**
1832
+ * @deprecated Kept for layout tests
1833
+ * TODO(pfaffe) remove
1834
+ */
1835
+ setBlockingEnabled(enabled) {
1836
+ this.requestConditions.conditionsEnabled = enabled;
1837
+ }
1838
+ /**
1839
+ * @deprecated Kept for layout tests
1840
+ * TODO(pfaffe) remove
1841
+ */
1842
+ setBlockedPatterns(patterns) {
1843
+ this.requestConditions.clear();
1844
+ this.requestConditions.add(...patterns.map(pattern => RequestCondition.createFromSetting(pattern)));
1845
+ }
1846
+ updateBlockedPatterns() {
1847
+ this.#isBlocking = this.#requestConditions.applyConditions(this.isOffline(), this.isThrottling() ? this.#networkConditions : null, ...this.#networkAgents);
1848
+ }
1849
+ isIntercepting() {
1850
+ return Boolean(this.#urlsForRequestInterceptor.size);
1851
+ }
1852
+ setInterceptionHandlerForPatterns(patterns, requestInterceptor) {
1853
+ // Note: requestInterceptors may receive interception #requests for patterns they did not subscribe to.
1854
+ this.#urlsForRequestInterceptor.deleteAll(requestInterceptor);
1855
+ for (const newPattern of patterns) {
1856
+ this.#urlsForRequestInterceptor.set(requestInterceptor, newPattern);
1857
+ }
1858
+ return this.updateInterceptionPatternsOnNextTick();
1859
+ }
1860
+ updateInterceptionPatternsOnNextTick() {
1861
+ // This is used so we can register and unregister patterns in loops without sending lots of protocol messages.
1862
+ if (!this.#updatingInterceptionPatternsPromise) {
1863
+ this.#updatingInterceptionPatternsPromise = Promise.resolve().then(this.updateInterceptionPatterns.bind(this));
1864
+ }
1865
+ return this.#updatingInterceptionPatternsPromise;
1866
+ }
1867
+ async updateInterceptionPatterns() {
1868
+ if (!Common.Settings.Settings.instance().moduleSetting('cache-disabled').get()) {
1869
+ Common.Settings.Settings.instance().moduleSetting('cache-disabled').set(true);
1870
+ }
1871
+ this.#updatingInterceptionPatternsPromise = null;
1872
+ const promises = [];
1873
+ for (const agent of this.#fetchAgents) {
1874
+ promises.push(agent.invoke_enable({ patterns: this.#urlsForRequestInterceptor.valuesArray() }));
1875
+ }
1876
+ this.dispatchEventToListeners("InterceptorsChanged" /* MultitargetNetworkManager.Events.INTERCEPTORS_CHANGED */);
1877
+ await Promise.all(promises);
1878
+ }
1879
+ async requestIntercepted(interceptedRequest) {
1880
+ for (const requestInterceptor of this.#urlsForRequestInterceptor.keysArray()) {
1881
+ await requestInterceptor(interceptedRequest);
1882
+ if (interceptedRequest.hasResponded() && interceptedRequest.networkRequest) {
1883
+ this.dispatchEventToListeners("RequestIntercepted" /* MultitargetNetworkManager.Events.REQUEST_INTERCEPTED */, interceptedRequest.networkRequest.requestId());
1884
+ return;
1885
+ }
1886
+ }
1887
+ if (!interceptedRequest.hasResponded()) {
1888
+ interceptedRequest.continueRequestWithoutChange();
1889
+ }
1890
+ }
1891
+ clearBrowserCache() {
1892
+ for (const agent of this.#networkAgents) {
1893
+ void agent.invoke_clearBrowserCache();
1894
+ }
1895
+ }
1896
+ clearBrowserCookies() {
1897
+ for (const agent of this.#networkAgents) {
1898
+ void agent.invoke_clearBrowserCookies();
1899
+ }
1900
+ }
1901
+ async getCertificate(origin) {
1902
+ const target = this.#targetManager.primaryPageTarget();
1903
+ if (!target) {
1904
+ return [];
1905
+ }
1906
+ const certificate = await target.networkAgent().invoke_getCertificate({ origin });
1907
+ if (!certificate) {
1908
+ return [];
1909
+ }
1910
+ return certificate.tableNames;
1911
+ }
1912
+ appliedRequestConditions(requestInternal) {
1913
+ if (!requestInternal.appliedNetworkConditionsId) {
1914
+ return undefined;
1915
+ }
1916
+ return this.requestConditions.conditionsForId(requestInternal.appliedNetworkConditionsId);
1917
+ }
1918
+ }
1919
+ export class InterceptedRequest {
1920
+ #fetchAgent;
1921
+ #hasResponded = false;
1922
+ request;
1923
+ resourceType;
1924
+ responseStatusCode;
1925
+ responseHeaders;
1926
+ requestId;
1927
+ networkRequest;
1928
+ constructor(fetchAgent, request, resourceType, requestId, networkRequest, responseStatusCode, responseHeaders) {
1929
+ this.#fetchAgent = fetchAgent;
1930
+ this.request = request;
1931
+ this.resourceType = resourceType;
1932
+ this.responseStatusCode = responseStatusCode;
1933
+ this.responseHeaders = responseHeaders;
1934
+ this.requestId = requestId;
1935
+ this.networkRequest = networkRequest;
1936
+ }
1937
+ hasResponded() {
1938
+ return this.#hasResponded;
1939
+ }
1940
+ static mergeSetCookieHeaders(originalSetCookieHeaders, setCookieHeadersFromOverrides) {
1941
+ // Generates a map containing the `set-cookie` headers. Valid `set-cookie`
1942
+ // headers are stored by the cookie name. Malformed `set-cookie` headers are
1943
+ // stored by the whole header value. Duplicates are allowed.
1944
+ const generateHeaderMap = (headers) => {
1945
+ const result = new Map();
1946
+ for (const header of headers) {
1947
+ // The regex matches cookie headers of the form '<header-name>=<header-value>'.
1948
+ // <header-name> is a token as defined in https://www.rfc-editor.org/rfc/rfc9110.html#name-tokens.
1949
+ // The shape of <header-value> is not being validated at all here.
1950
+ const match = header.value.match(/^([a-zA-Z0-9!#$%&'*+.^_`|~-]+=)(.*)$/);
1951
+ if (match) {
1952
+ if (result.has(match[1])) {
1953
+ result.get(match[1])?.push(header.value);
1954
+ }
1955
+ else {
1956
+ result.set(match[1], [header.value]);
1957
+ }
1958
+ }
1959
+ else if (result.has(header.value)) {
1960
+ result.get(header.value)?.push(header.value);
1961
+ }
1962
+ else {
1963
+ result.set(header.value, [header.value]);
1964
+ }
1965
+ }
1966
+ return result;
1967
+ };
1968
+ const originalHeadersMap = generateHeaderMap(originalSetCookieHeaders);
1969
+ const overridesHeaderMap = generateHeaderMap(setCookieHeadersFromOverrides);
1970
+ // Iterate over original headers. If the same key is found among the
1971
+ // overrides, use those instead.
1972
+ const mergedHeaders = [];
1973
+ for (const [key, headerValues] of originalHeadersMap) {
1974
+ if (overridesHeaderMap.has(key)) {
1975
+ for (const headerValue of overridesHeaderMap.get(key) || []) {
1976
+ mergedHeaders.push({ name: 'set-cookie', value: headerValue });
1977
+ }
1978
+ }
1979
+ else {
1980
+ for (const headerValue of headerValues) {
1981
+ mergedHeaders.push({ name: 'set-cookie', value: headerValue });
1982
+ }
1983
+ }
1984
+ }
1985
+ // Finally add all overrides which have not been added yet.
1986
+ for (const [key, headerValues] of overridesHeaderMap) {
1987
+ if (originalHeadersMap.has(key)) {
1988
+ continue;
1989
+ }
1990
+ for (const headerValue of headerValues) {
1991
+ mergedHeaders.push({ name: 'set-cookie', value: headerValue });
1992
+ }
1993
+ }
1994
+ return mergedHeaders;
1995
+ }
1996
+ async continueRequestWithContent(contentBlob, encoded, responseHeaders, isBodyOverridden) {
1997
+ this.#hasResponded = true;
1998
+ const body = encoded ? await contentBlob.text() : await Common.Base64.encode(contentBlob).catch(err => {
1999
+ console.error(err);
2000
+ return '';
2001
+ });
2002
+ const responseCode = isBodyOverridden ? 200 : (this.responseStatusCode || 200);
2003
+ if (this.networkRequest) {
2004
+ const originalSetCookieHeaders = this.networkRequest?.originalResponseHeaders.filter(header => header.name === 'set-cookie') || [];
2005
+ const setCookieHeadersFromOverrides = responseHeaders.filter(header => header.name === 'set-cookie');
2006
+ this.networkRequest.setCookieHeaders =
2007
+ InterceptedRequest.mergeSetCookieHeaders(originalSetCookieHeaders, setCookieHeadersFromOverrides);
2008
+ this.networkRequest.hasOverriddenContent = isBodyOverridden;
2009
+ }
2010
+ void this.#fetchAgent.invoke_fulfillRequest({ requestId: this.requestId, responseCode, body, responseHeaders });
2011
+ MultitargetNetworkManager.instance().dispatchEventToListeners("RequestFulfilled" /* MultitargetNetworkManager.Events.REQUEST_FULFILLED */, this.request.url);
2012
+ }
2013
+ continueRequestWithoutChange() {
2014
+ console.assert(!this.#hasResponded);
2015
+ this.#hasResponded = true;
2016
+ void this.#fetchAgent.invoke_continueRequest({ requestId: this.requestId });
2017
+ }
2018
+ async responseBody() {
2019
+ const response = await this.#fetchAgent.invoke_getResponseBody({ requestId: this.requestId });
2020
+ const error = response.getError();
2021
+ if (error) {
2022
+ return { error };
2023
+ }
2024
+ const { mimeType, charset } = this.getMimeTypeAndCharset();
2025
+ return new TextUtils.ContentData.ContentData(response.body, response.base64Encoded, mimeType ?? 'application/octet-stream', charset ?? undefined);
2026
+ }
2027
+ isRedirect() {
2028
+ return this.responseStatusCode !== undefined && this.responseStatusCode >= 300 && this.responseStatusCode < 400;
2029
+ }
2030
+ /**
2031
+ * Tries to determine the MIME type and charset for this intercepted request.
2032
+ * Looks at the intercepted response headers first (for Content-Type header), then
2033
+ * checks the `NetworkRequest` if we have one.
2034
+ */
2035
+ getMimeTypeAndCharset() {
2036
+ for (const header of this.responseHeaders ?? []) {
2037
+ if (header.name.toLowerCase() === 'content-type') {
2038
+ return Platform.MimeType.parseContentType(header.value);
2039
+ }
2040
+ }
2041
+ const mimeType = this.networkRequest?.mimeType ?? null;
2042
+ const charset = this.networkRequest?.charset() ?? null;
2043
+ return { mimeType, charset };
2044
+ }
2045
+ }
2046
+ /**
2047
+ * Helper class to match #requests created from requestWillBeSent with
2048
+ * requestWillBeSentExtraInfo and responseReceivedExtraInfo when they have the
2049
+ * same requestId due to redirects.
2050
+ */
2051
+ class ExtraInfoBuilder {
2052
+ #requests = [];
2053
+ #responseExtraInfoFlag = [];
2054
+ #requestExtraInfos = [];
2055
+ #responseExtraInfos = [];
2056
+ #responseEarlyHintsHeaders = [];
2057
+ #finished = false;
2058
+ addRequest(req) {
2059
+ this.#requests.push(req);
2060
+ this.sync(this.#requests.length - 1);
2061
+ }
2062
+ addHasExtraInfo(hasExtraInfo) {
2063
+ this.#responseExtraInfoFlag.push(hasExtraInfo);
2064
+ // This comes in response, so it can't come before request or after next
2065
+ // request in the redirect chain.
2066
+ console.assert(this.#requests.length === this.#responseExtraInfoFlag.length, 'request/response count mismatch');
2067
+ if (!hasExtraInfo) {
2068
+ // We may potentially have gotten extra infos from the next redirect
2069
+ // request already. Account for that by inserting null for missing
2070
+ // extra infos at current position.
2071
+ this.#requestExtraInfos.splice(this.#requests.length - 1, 0, null);
2072
+ this.#responseExtraInfos.splice(this.#requests.length - 1, 0, null);
2073
+ }
2074
+ this.sync(this.#requests.length - 1);
2075
+ }
2076
+ addRequestExtraInfo(info) {
2077
+ this.#requestExtraInfos.push(info);
2078
+ this.sync(this.#requestExtraInfos.length - 1);
2079
+ }
2080
+ addResponseExtraInfo(info) {
2081
+ this.#responseExtraInfos.push(info);
2082
+ this.sync(this.#responseExtraInfos.length - 1);
2083
+ }
2084
+ setEarlyHintsHeaders(earlyHintsHeaders) {
2085
+ this.#responseEarlyHintsHeaders = earlyHintsHeaders;
2086
+ this.updateFinalRequest();
2087
+ }
2088
+ finished() {
2089
+ this.#finished = true;
2090
+ // We may have missed responseReceived event in case of failure.
2091
+ // That said, the ExtraInfo events still may be here, so mark them
2092
+ // as present. Event if they are not, this is harmless.
2093
+ // TODO(caseq): consider if we need to report hasExtraInfo in the
2094
+ // loadingFailed event.
2095
+ if (this.#responseExtraInfoFlag.length < this.#requests.length) {
2096
+ this.#responseExtraInfoFlag.push(true);
2097
+ this.sync(this.#responseExtraInfoFlag.length - 1);
2098
+ }
2099
+ console.assert(this.#requests.length === this.#responseExtraInfoFlag.length, 'request/response count mismatch when request finished');
2100
+ this.updateFinalRequest();
2101
+ }
2102
+ isFinished() {
2103
+ return this.#finished;
2104
+ }
2105
+ sync(index) {
2106
+ const req = this.#requests[index];
2107
+ if (!req) {
2108
+ return;
2109
+ }
2110
+ // No response yet, so we don't know if extra info would
2111
+ // be there, bail out for now.
2112
+ if (index >= this.#responseExtraInfoFlag.length) {
2113
+ return;
2114
+ }
2115
+ if (!this.#responseExtraInfoFlag[index]) {
2116
+ return;
2117
+ }
2118
+ const requestExtraInfo = this.#requestExtraInfos[index];
2119
+ if (requestExtraInfo) {
2120
+ req.addExtraRequestInfo(requestExtraInfo);
2121
+ this.#requestExtraInfos[index] = null;
2122
+ }
2123
+ const responseExtraInfo = this.#responseExtraInfos[index];
2124
+ if (responseExtraInfo) {
2125
+ req.addExtraResponseInfo(responseExtraInfo);
2126
+ this.#responseExtraInfos[index] = null;
2127
+ }
2128
+ }
2129
+ finalRequest() {
2130
+ if (!this.#finished) {
2131
+ return null;
2132
+ }
2133
+ return this.#requests[this.#requests.length - 1] || null;
2134
+ }
2135
+ updateFinalRequest() {
2136
+ if (!this.#finished) {
2137
+ return;
2138
+ }
2139
+ const finalRequest = this.finalRequest();
2140
+ finalRequest?.setEarlyHintsHeaders(this.#responseEarlyHintsHeaders);
2141
+ }
2142
+ }
2143
+ SDKModel.register(NetworkManager, { capabilities: 16 /* Capability.NETWORK */, autostart: true });
2144
+ export function networkConditionsEqual(first, second) {
2145
+ if ('block' in first || 'block' in second) {
2146
+ if ('block' in first && 'block' in second) {
2147
+ const firstTitle = (typeof first.title === 'function' ? first.title() : first.title);
2148
+ const secondTitle = (typeof second.title === 'function' ? second.title() : second.title);
2149
+ return firstTitle === secondTitle && first.block === second.block;
2150
+ }
2151
+ return false;
2152
+ }
2153
+ // Caution: titles might be different function instances, which produce
2154
+ // the same value.
2155
+ // We prefer to use the i18nTitleKey to prevent against locale changes or
2156
+ // UIString changes that might change the value vs what the user has stored
2157
+ // locally.
2158
+ const firstTitle = first.i18nTitleKey || (typeof first.title === 'function' ? first.title() : first.title);
2159
+ const secondTitle = second.i18nTitleKey || (typeof second.title === 'function' ? second.title() : second.title);
2160
+ return second.download === first.download && second.upload === first.upload && second.latency === first.latency &&
2161
+ first.packetLoss === second.packetLoss && first.packetQueueLength === second.packetQueueLength &&
2162
+ first.packetReordering === second.packetReordering && secondTitle === firstTitle;
2163
+ }
2164
+ export const THROTTLING_CONDITIONS_LOOKUP = new Map([
2165
+ ["NO_THROTTLING" /* PredefinedThrottlingConditionKey.NO_THROTTLING */, NoThrottlingConditions],
2166
+ ["OFFLINE" /* PredefinedThrottlingConditionKey.OFFLINE */, OfflineConditions],
2167
+ ["SPEED_3G" /* PredefinedThrottlingConditionKey.SPEED_3G */, Slow3GConditions],
2168
+ ["SPEED_SLOW_4G" /* PredefinedThrottlingConditionKey.SPEED_SLOW_4G */, Slow4GConditions],
2169
+ ["SPEED_FAST_4G" /* PredefinedThrottlingConditionKey.SPEED_FAST_4G */, Fast4GConditions]
2170
+ ]);
2171
+ function keyIsPredefined(key) {
2172
+ return !key.startsWith('USER_CUSTOM_SETTING_');
2173
+ }
2174
+ export function keyIsCustomUser(key) {
2175
+ return key.startsWith('USER_CUSTOM_SETTING_');
2176
+ }
2177
+ export function getPredefinedCondition(key) {
2178
+ if (!keyIsPredefined(key)) {
2179
+ return null;
2180
+ }
2181
+ return THROTTLING_CONDITIONS_LOOKUP.get(key) ?? null;
2182
+ }
2183
+ export function getPredefinedOrBlockingCondition(key) {
2184
+ return key === "BLOCKING" /* PredefinedThrottlingConditionKey.BLOCKING */ ? BlockingConditions : getPredefinedCondition(key);
2185
+ }
2186
+ /**
2187
+ * For the given Round Trip Time (in MilliSeconds), return the best throttling conditions.
2188
+ */
2189
+ export function getRecommendedNetworkPreset(rtt) {
2190
+ const RTT_COMPARISON_THRESHOLD = 200;
2191
+ const RTT_MINIMUM = 60;
2192
+ if (!Number.isFinite(rtt)) {
2193
+ return null;
2194
+ }
2195
+ if (rtt < RTT_MINIMUM) {
2196
+ return null;
2197
+ }
2198
+ // We pick from the set of presets in the panel but do not want to allow
2199
+ // the "No Throttling" option to be picked.
2200
+ const presets = THROTTLING_CONDITIONS_LOOKUP.values()
2201
+ .filter(condition => {
2202
+ return condition !== NoThrottlingConditions;
2203
+ })
2204
+ .toArray();
2205
+ let closestPreset = null;
2206
+ let smallestDiff = Infinity;
2207
+ for (const preset of presets) {
2208
+ const { targetLatency } = preset;
2209
+ if (!targetLatency) {
2210
+ continue;
2211
+ }
2212
+ const diff = Math.abs(targetLatency - rtt);
2213
+ if (diff > RTT_COMPARISON_THRESHOLD) {
2214
+ continue;
2215
+ }
2216
+ if (smallestDiff < diff) {
2217
+ continue;
2218
+ }
2219
+ closestPreset = preset;
2220
+ smallestDiff = diff;
2221
+ }
2222
+ return closestPreset;
2223
+ }