devtools-tracing 1.0.0

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 (397) hide show
  1. package/generate.ts +643 -0
  2. package/index.ts +16 -0
  3. package/lib/front_end/core/common/App.ts +7 -0
  4. package/lib/front_end/core/common/AppProvider.ts +32 -0
  5. package/lib/front_end/core/common/Base64.ts +47 -0
  6. package/lib/front_end/core/common/CharacterIdMap.ts +30 -0
  7. package/lib/front_end/core/common/Color.ts +2506 -0
  8. package/lib/front_end/core/common/ColorConverter.ts +402 -0
  9. package/lib/front_end/core/common/ColorUtils.ts +252 -0
  10. package/lib/front_end/core/common/Console.ts +114 -0
  11. package/lib/front_end/core/common/Debouncer.ts +15 -0
  12. package/lib/front_end/core/common/EventTarget.ts +52 -0
  13. package/lib/front_end/core/common/Gzip.ts +74 -0
  14. package/lib/front_end/core/common/JavaScriptMetaData.ts +29 -0
  15. package/lib/front_end/core/common/Lazy.ts +31 -0
  16. package/lib/front_end/core/common/Linkifier.ts +55 -0
  17. package/lib/front_end/core/common/MapWithDefault.ts +26 -0
  18. package/lib/front_end/core/common/Mutex.ts +55 -0
  19. package/lib/front_end/core/common/Object.ts +145 -0
  20. package/lib/front_end/core/common/ParsedURL.ts +554 -0
  21. package/lib/front_end/core/common/Progress.ts +180 -0
  22. package/lib/front_end/core/common/QueryParamHandler.ts +7 -0
  23. package/lib/front_end/core/common/ResolverBase.ts +85 -0
  24. package/lib/front_end/core/common/ResourceType.ts +588 -0
  25. package/lib/front_end/core/common/ReturnToPanel.ts +17 -0
  26. package/lib/front_end/core/common/Revealer.ts +192 -0
  27. package/lib/front_end/core/common/Runnable.ts +41 -0
  28. package/lib/front_end/core/common/SegmentedRange.ts +87 -0
  29. package/lib/front_end/core/common/SettingRegistration.ts +339 -0
  30. package/lib/front_end/core/common/Settings.ts +1497 -0
  31. package/lib/front_end/core/common/SimpleHistoryManager.ts +124 -0
  32. package/lib/front_end/core/common/StringOutputStream.ts +26 -0
  33. package/lib/front_end/core/common/TextDictionary.ts +48 -0
  34. package/lib/front_end/core/common/Throttler.ts +99 -0
  35. package/lib/front_end/core/common/Trie.ts +152 -0
  36. package/lib/front_end/core/common/Worker.ts +60 -0
  37. package/lib/front_end/core/common/common.ts +81 -0
  38. package/lib/front_end/core/host/AidaClient.ts +733 -0
  39. package/lib/front_end/core/host/GdpClient.ts +316 -0
  40. package/lib/front_end/core/host/InspectorFrontendHost.ts +648 -0
  41. package/lib/front_end/core/host/InspectorFrontendHostAPI.ts +551 -0
  42. package/lib/front_end/core/host/Platform.ts +76 -0
  43. package/lib/front_end/core/host/ResourceLoader.ts +282 -0
  44. package/lib/front_end/core/host/UserMetrics.ts +1230 -0
  45. package/lib/front_end/core/host/host.ts +23 -0
  46. package/lib/front_end/core/i18n/ByteUtilities.ts +82 -0
  47. package/lib/front_end/core/i18n/DevToolsLocale.ts +87 -0
  48. package/lib/front_end/core/i18n/NumberFormatter.ts +82 -0
  49. package/lib/front_end/core/i18n/i18n.ts +17 -0
  50. package/lib/front_end/core/i18n/i18nImpl.ts +204 -0
  51. package/lib/front_end/core/i18n/i18nTypes.ts +10 -0
  52. package/lib/front_end/core/i18n/locales.js +14 -0
  53. package/lib/front_end/core/i18n/time-utilities.ts +174 -0
  54. package/lib/front_end/core/platform/ArrayUtilities.ts +271 -0
  55. package/lib/front_end/core/platform/Brand.ts +23 -0
  56. package/lib/front_end/core/platform/Constructor.ts +10 -0
  57. package/lib/front_end/core/platform/DOMUtilities.ts +138 -0
  58. package/lib/front_end/core/platform/DateUtilities.ts +15 -0
  59. package/lib/front_end/core/platform/DevToolsPath.ts +53 -0
  60. package/lib/front_end/core/platform/KeyboardUtilities.ts +38 -0
  61. package/lib/front_end/core/platform/MapUtilities.ts +95 -0
  62. package/lib/front_end/core/platform/MimeType.ts +175 -0
  63. package/lib/front_end/core/platform/NumberUtilities.ts +80 -0
  64. package/lib/front_end/core/platform/StringUtilities.ts +588 -0
  65. package/lib/front_end/core/platform/Timing.ts +17 -0
  66. package/lib/front_end/core/platform/TypedArrayUtilities.ts +189 -0
  67. package/lib/front_end/core/platform/TypescriptUtilities.ts +86 -0
  68. package/lib/front_end/core/platform/UIString.ts +39 -0
  69. package/lib/front_end/core/platform/UserVisibleError.ts +28 -0
  70. package/lib/front_end/core/platform/platform.ts +45 -0
  71. package/lib/front_end/core/protocol_client/ConnectionTransport.ts +26 -0
  72. package/lib/front_end/core/protocol_client/InspectorBackend.ts +1050 -0
  73. package/lib/front_end/core/protocol_client/NodeURL.ts +42 -0
  74. package/lib/front_end/core/protocol_client/protocol_client.ts +13 -0
  75. package/lib/front_end/core/root/Runtime.ts +609 -0
  76. package/lib/front_end/core/root/root.ts +6 -0
  77. package/lib/front_end/core/sdk/AccessibilityModel.ts +353 -0
  78. package/lib/front_end/core/sdk/AnimationModel.ts +1041 -0
  79. package/lib/front_end/core/sdk/AutofillModel.ts +184 -0
  80. package/lib/front_end/core/sdk/CPUProfilerModel.ts +148 -0
  81. package/lib/front_end/core/sdk/CPUThrottlingManager.ts +282 -0
  82. package/lib/front_end/core/sdk/CSSContainerQuery.ts +139 -0
  83. package/lib/front_end/core/sdk/CSSFontFace.ts +40 -0
  84. package/lib/front_end/core/sdk/CSSLayer.ts +30 -0
  85. package/lib/front_end/core/sdk/CSSMatchedStyles.ts +1646 -0
  86. package/lib/front_end/core/sdk/CSSMedia.ts +121 -0
  87. package/lib/front_end/core/sdk/CSSMetadata.ts +1647 -0
  88. package/lib/front_end/core/sdk/CSSModel.ts +1128 -0
  89. package/lib/front_end/core/sdk/CSSProperty.ts +384 -0
  90. package/lib/front_end/core/sdk/CSSPropertyParser.ts +681 -0
  91. package/lib/front_end/core/sdk/CSSPropertyParserMatchers.ts +1395 -0
  92. package/lib/front_end/core/sdk/CSSQuery.ts +72 -0
  93. package/lib/front_end/core/sdk/CSSRule.ts +465 -0
  94. package/lib/front_end/core/sdk/CSSScope.ts +30 -0
  95. package/lib/front_end/core/sdk/CSSStartingStyle.ts +29 -0
  96. package/lib/front_end/core/sdk/CSSStyleDeclaration.ts +313 -0
  97. package/lib/front_end/core/sdk/CSSStyleSheetHeader.ts +196 -0
  98. package/lib/front_end/core/sdk/CSSSupports.ts +33 -0
  99. package/lib/front_end/core/sdk/CategorizedBreakpoint.ts +64 -0
  100. package/lib/front_end/core/sdk/ChildTargetManager.ts +314 -0
  101. package/lib/front_end/core/sdk/CompilerSourceMappingContentProvider.ts +62 -0
  102. package/lib/front_end/core/sdk/Connections.ts +293 -0
  103. package/lib/front_end/core/sdk/ConsoleModel.ts +808 -0
  104. package/lib/front_end/core/sdk/ConsoleModelTypes.ts +15 -0
  105. package/lib/front_end/core/sdk/Cookie.ts +319 -0
  106. package/lib/front_end/core/sdk/CookieModel.ts +239 -0
  107. package/lib/front_end/core/sdk/CookieParser.ts +185 -0
  108. package/lib/front_end/core/sdk/DOMDebuggerModel.ts +787 -0
  109. package/lib/front_end/core/sdk/DOMModel.ts +1961 -0
  110. package/lib/front_end/core/sdk/DebuggerModel.ts +1605 -0
  111. package/lib/front_end/core/sdk/EmulationModel.ts +648 -0
  112. package/lib/front_end/core/sdk/EnhancedTracesParser.ts +515 -0
  113. package/lib/front_end/core/sdk/EventBreakpointsModel.ts +183 -0
  114. package/lib/front_end/core/sdk/FrameAssociated.ts +11 -0
  115. package/lib/front_end/core/sdk/FrameManager.ts +259 -0
  116. package/lib/front_end/core/sdk/HeapProfilerModel.ts +225 -0
  117. package/lib/front_end/core/sdk/HttpReasonPhraseStrings.ts +77 -0
  118. package/lib/front_end/core/sdk/IOModel.ts +91 -0
  119. package/lib/front_end/core/sdk/IsolateManager.ts +257 -0
  120. package/lib/front_end/core/sdk/IssuesModel.ts +70 -0
  121. package/lib/front_end/core/sdk/LayerTreeBase.ts +169 -0
  122. package/lib/front_end/core/sdk/LogModel.ts +56 -0
  123. package/lib/front_end/core/sdk/NetworkManager.ts +2823 -0
  124. package/lib/front_end/core/sdk/NetworkRequest.ts +2253 -0
  125. package/lib/front_end/core/sdk/OverlayColorGenerator.ts +52 -0
  126. package/lib/front_end/core/sdk/OverlayModel.ts +1011 -0
  127. package/lib/front_end/core/sdk/OverlayPersistentHighlighter.ts +522 -0
  128. package/lib/front_end/core/sdk/PageLoad.ts +35 -0
  129. package/lib/front_end/core/sdk/PageResourceLoader.ts +435 -0
  130. package/lib/front_end/core/sdk/PaintProfiler.ts +110 -0
  131. package/lib/front_end/core/sdk/PerformanceMetricsModel.ts +84 -0
  132. package/lib/front_end/core/sdk/PreloadingModel.ts +863 -0
  133. package/lib/front_end/core/sdk/RehydratingConnection.ts +386 -0
  134. package/lib/front_end/core/sdk/RehydratingObject.ts +66 -0
  135. package/lib/front_end/core/sdk/RemoteObject.ts +1160 -0
  136. package/lib/front_end/core/sdk/Resource.ts +232 -0
  137. package/lib/front_end/core/sdk/ResourceTreeModel.ts +1160 -0
  138. package/lib/front_end/core/sdk/RuntimeModel.ts +732 -0
  139. package/lib/front_end/core/sdk/SDKModel.ts +65 -0
  140. package/lib/front_end/core/sdk/ScopeTreeCache.ts +45 -0
  141. package/lib/front_end/core/sdk/ScreenCaptureModel.ts +255 -0
  142. package/lib/front_end/core/sdk/Script.ts +534 -0
  143. package/lib/front_end/core/sdk/SecurityOriginManager.ts +76 -0
  144. package/lib/front_end/core/sdk/ServerSentEvents.ts +80 -0
  145. package/lib/front_end/core/sdk/ServerSentEventsProtocol.ts +122 -0
  146. package/lib/front_end/core/sdk/ServerTiming.ts +260 -0
  147. package/lib/front_end/core/sdk/ServiceWorkerCacheModel.ts +377 -0
  148. package/lib/front_end/core/sdk/ServiceWorkerManager.ts +605 -0
  149. package/lib/front_end/core/sdk/SourceMap.ts +867 -0
  150. package/lib/front_end/core/sdk/SourceMapCache.ts +54 -0
  151. package/lib/front_end/core/sdk/SourceMapFunctionRanges.ts +156 -0
  152. package/lib/front_end/core/sdk/SourceMapManager.ts +239 -0
  153. package/lib/front_end/core/sdk/SourceMapScopeChainEntry.ts +189 -0
  154. package/lib/front_end/core/sdk/SourceMapScopesInfo.ts +508 -0
  155. package/lib/front_end/core/sdk/StorageBucketsModel.ts +204 -0
  156. package/lib/front_end/core/sdk/StorageKeyManager.ts +98 -0
  157. package/lib/front_end/core/sdk/Target.ts +332 -0
  158. package/lib/front_end/core/sdk/TargetManager.ts +453 -0
  159. package/lib/front_end/core/sdk/TraceObject.ts +61 -0
  160. package/lib/front_end/core/sdk/WebAuthnModel.ts +104 -0
  161. package/lib/front_end/core/sdk/sdk.ts +174 -0
  162. package/lib/front_end/entrypoints/formatter_worker/FormatterActions.ts +59 -0
  163. package/lib/front_end/generated/InspectorBackendCommands.js +1617 -0
  164. package/lib/front_end/generated/SupportedCSSProperties.js +7512 -0
  165. package/lib/front_end/generated/protocol-proxy-api.d.ts +5022 -0
  166. package/lib/front_end/generated/protocol.ts +22014 -0
  167. package/lib/front_end/models/cpu_profile/CPUProfileDataModel.ts +571 -0
  168. package/lib/front_end/models/cpu_profile/ProfileTreeModel.ts +103 -0
  169. package/lib/front_end/models/cpu_profile/cpu_profile.ts +11 -0
  170. package/lib/front_end/models/formatter/FormatterWorkerPool.ts +219 -0
  171. package/lib/front_end/models/formatter/ScriptFormatter.ts +112 -0
  172. package/lib/front_end/models/formatter/formatter.ts +8 -0
  173. package/lib/front_end/models/text_utils/CodeMirrorUtils.ts +37 -0
  174. package/lib/front_end/models/text_utils/ContentData.ts +199 -0
  175. package/lib/front_end/models/text_utils/ContentProvider.ts +68 -0
  176. package/lib/front_end/models/text_utils/StaticContentProvider.ts +49 -0
  177. package/lib/front_end/models/text_utils/StreamingContentData.ts +108 -0
  178. package/lib/front_end/models/text_utils/Text.ts +90 -0
  179. package/lib/front_end/models/text_utils/TextCursor.ts +44 -0
  180. package/lib/front_end/models/text_utils/TextRange.ts +266 -0
  181. package/lib/front_end/models/text_utils/TextUtils.ts +401 -0
  182. package/lib/front_end/models/text_utils/WasmDisassembly.ts +87 -0
  183. package/lib/front_end/models/text_utils/text_utils.ts +27 -0
  184. package/lib/front_end/models/trace/EntityMapper.ts +141 -0
  185. package/lib/front_end/models/trace/EventsSerializer.ts +101 -0
  186. package/lib/front_end/models/trace/LanternComputationData.ts +438 -0
  187. package/lib/front_end/models/trace/ModelImpl.ts +236 -0
  188. package/lib/front_end/models/trace/Name.ts +136 -0
  189. package/lib/front_end/models/trace/Processor.ts +652 -0
  190. package/lib/front_end/models/trace/Styles.ts +1138 -0
  191. package/lib/front_end/models/trace/extras/FilmStrip.ts +78 -0
  192. package/lib/front_end/models/trace/extras/MainThreadActivity.ts +86 -0
  193. package/lib/front_end/models/trace/extras/ScriptDuplication.ts +236 -0
  194. package/lib/front_end/models/trace/extras/StackTraceForEvent.ts +203 -0
  195. package/lib/front_end/models/trace/extras/ThirdParties.ts +164 -0
  196. package/lib/front_end/models/trace/extras/TraceFilter.ts +62 -0
  197. package/lib/front_end/models/trace/extras/TraceTree.ts +701 -0
  198. package/lib/front_end/models/trace/extras/extras.ts +11 -0
  199. package/lib/front_end/models/trace/handlers/AnimationFramesHandler.ts +128 -0
  200. package/lib/front_end/models/trace/handlers/AnimationHandler.ts +36 -0
  201. package/lib/front_end/models/trace/handlers/AsyncJSCallsHandler.ts +239 -0
  202. package/lib/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +183 -0
  203. package/lib/front_end/models/trace/handlers/DOMStatsHandler.ts +31 -0
  204. package/lib/front_end/models/trace/handlers/ExtensionTraceDataHandler.ts +306 -0
  205. package/lib/front_end/models/trace/handlers/FlowsHandler.ts +175 -0
  206. package/lib/front_end/models/trace/handlers/FramesHandler.ts +571 -0
  207. package/lib/front_end/models/trace/handlers/GPUHandler.ts +50 -0
  208. package/lib/front_end/models/trace/handlers/ImagePaintingHandler.ts +183 -0
  209. package/lib/front_end/models/trace/handlers/InitiatorsHandler.ts +193 -0
  210. package/lib/front_end/models/trace/handlers/InvalidationsHandler.ts +168 -0
  211. package/lib/front_end/models/trace/handlers/LargestImagePaintHandler.ts +109 -0
  212. package/lib/front_end/models/trace/handlers/LargestTextPaintHandler.ts +35 -0
  213. package/lib/front_end/models/trace/handlers/LayerTreeHandler.ts +123 -0
  214. package/lib/front_end/models/trace/handlers/LayoutShiftsHandler.ts +573 -0
  215. package/lib/front_end/models/trace/handlers/MemoryHandler.ts +31 -0
  216. package/lib/front_end/models/trace/handlers/MetaHandler.ts +525 -0
  217. package/lib/front_end/models/trace/handlers/ModelHandlers.ts +34 -0
  218. package/lib/front_end/models/trace/handlers/NetworkRequestsHandler.ts +672 -0
  219. package/lib/front_end/models/trace/handlers/PageFramesHandler.ts +52 -0
  220. package/lib/front_end/models/trace/handlers/PageLoadMetricsHandler.ts +460 -0
  221. package/lib/front_end/models/trace/handlers/RendererHandler.ts +428 -0
  222. package/lib/front_end/models/trace/handlers/SamplesHandler.ts +271 -0
  223. package/lib/front_end/models/trace/handlers/ScreenshotsHandler.ts +122 -0
  224. package/lib/front_end/models/trace/handlers/ScriptsHandler.ts +336 -0
  225. package/lib/front_end/models/trace/handlers/SelectorStatsHandler.ts +110 -0
  226. package/lib/front_end/models/trace/handlers/Threads.ts +139 -0
  227. package/lib/front_end/models/trace/handlers/UserInteractionsHandler.ts +400 -0
  228. package/lib/front_end/models/trace/handlers/UserTimingsHandler.ts +233 -0
  229. package/lib/front_end/models/trace/handlers/WarningsHandler.ts +162 -0
  230. package/lib/front_end/models/trace/handlers/WorkersHandler.ts +45 -0
  231. package/lib/front_end/models/trace/handlers/handlers.ts +8 -0
  232. package/lib/front_end/models/trace/handlers/helpers.ts +196 -0
  233. package/lib/front_end/models/trace/handlers/types.ts +75 -0
  234. package/lib/front_end/models/trace/helpers/Extensions.ts +54 -0
  235. package/lib/front_end/models/trace/helpers/Network.ts +129 -0
  236. package/lib/front_end/models/trace/helpers/SamplesIntegrator.ts +544 -0
  237. package/lib/front_end/models/trace/helpers/SyntheticEvents.ts +87 -0
  238. package/lib/front_end/models/trace/helpers/Timing.ts +248 -0
  239. package/lib/front_end/models/trace/helpers/Trace.ts +928 -0
  240. package/lib/front_end/models/trace/helpers/TreeHelpers.ts +320 -0
  241. package/lib/front_end/models/trace/helpers/helpers.ts +11 -0
  242. package/lib/front_end/models/trace/insights/CLSCulprits.ts +668 -0
  243. package/lib/front_end/models/trace/insights/Cache.ts +269 -0
  244. package/lib/front_end/models/trace/insights/Common.ts +453 -0
  245. package/lib/front_end/models/trace/insights/DOMSize.ts +223 -0
  246. package/lib/front_end/models/trace/insights/DocumentLatency.ts +319 -0
  247. package/lib/front_end/models/trace/insights/DuplicatedJavaScript.ts +126 -0
  248. package/lib/front_end/models/trace/insights/FontDisplay.ts +119 -0
  249. package/lib/front_end/models/trace/insights/ForcedReflow.ts +220 -0
  250. package/lib/front_end/models/trace/insights/INPBreakdown.ts +171 -0
  251. package/lib/front_end/models/trace/insights/ImageDelivery.ts +348 -0
  252. package/lib/front_end/models/trace/insights/LCPBreakdown.ts +268 -0
  253. package/lib/front_end/models/trace/insights/LCPDiscovery.ts +237 -0
  254. package/lib/front_end/models/trace/insights/LegacyJavaScript.ts +138 -0
  255. package/lib/front_end/models/trace/insights/Models.ts +22 -0
  256. package/lib/front_end/models/trace/insights/ModernHTTP.ts +257 -0
  257. package/lib/front_end/models/trace/insights/NetworkDependencyTree.ts +726 -0
  258. package/lib/front_end/models/trace/insights/RenderBlocking.ts +257 -0
  259. package/lib/front_end/models/trace/insights/SlowCSSSelector.ts +175 -0
  260. package/lib/front_end/models/trace/insights/Statistics.ts +101 -0
  261. package/lib/front_end/models/trace/insights/ThirdParties.ts +130 -0
  262. package/lib/front_end/models/trace/insights/Viewport.ts +138 -0
  263. package/lib/front_end/models/trace/insights/insights.ts +10 -0
  264. package/lib/front_end/models/trace/insights/types.ts +157 -0
  265. package/lib/front_end/models/trace/lantern/core/LanternError.ts +7 -0
  266. package/lib/front_end/models/trace/lantern/core/NetworkAnalyzer.ts +619 -0
  267. package/lib/front_end/models/trace/lantern/core/core.ts +6 -0
  268. package/lib/front_end/models/trace/lantern/graph/BaseNode.ts +345 -0
  269. package/lib/front_end/models/trace/lantern/graph/CPUNode.ts +80 -0
  270. package/lib/front_end/models/trace/lantern/graph/NetworkNode.ts +101 -0
  271. package/lib/front_end/models/trace/lantern/graph/PageDependencyGraph.ts +636 -0
  272. package/lib/front_end/models/trace/lantern/graph/graph.ts +8 -0
  273. package/lib/front_end/models/trace/lantern/lantern.ts +17 -0
  274. package/lib/front_end/models/trace/lantern/metrics/FirstContentfulPaint.ts +187 -0
  275. package/lib/front_end/models/trace/lantern/metrics/Interactive.ts +88 -0
  276. package/lib/front_end/models/trace/lantern/metrics/LargestContentfulPaint.ts +92 -0
  277. package/lib/front_end/models/trace/lantern/metrics/MaxPotentialFID.ts +72 -0
  278. package/lib/front_end/models/trace/lantern/metrics/Metric.ts +126 -0
  279. package/lib/front_end/models/trace/lantern/metrics/SpeedIndex.ts +126 -0
  280. package/lib/front_end/models/trace/lantern/metrics/TBTUtils.ts +82 -0
  281. package/lib/front_end/models/trace/lantern/metrics/TotalBlockingTime.ts +112 -0
  282. package/lib/front_end/models/trace/lantern/metrics/metrics.ts +12 -0
  283. package/lib/front_end/models/trace/lantern/simulation/ConnectionPool.ts +150 -0
  284. package/lib/front_end/models/trace/lantern/simulation/Constants.ts +46 -0
  285. package/lib/front_end/models/trace/lantern/simulation/DNSCache.ts +61 -0
  286. package/lib/front_end/models/trace/lantern/simulation/SimulationTimingMap.ts +196 -0
  287. package/lib/front_end/models/trace/lantern/simulation/Simulator.ts +556 -0
  288. package/lib/front_end/models/trace/lantern/simulation/TCPConnection.ts +192 -0
  289. package/lib/front_end/models/trace/lantern/simulation/simulation.ts +10 -0
  290. package/lib/front_end/models/trace/lantern/types/Lantern.ts +220 -0
  291. package/lib/front_end/models/trace/lantern/types/types.ts +5 -0
  292. package/lib/front_end/models/trace/trace.ts +33 -0
  293. package/lib/front_end/models/trace/types/Configuration.ts +110 -0
  294. package/lib/front_end/models/trace/types/Extensions.ts +136 -0
  295. package/lib/front_end/models/trace/types/File.ts +281 -0
  296. package/lib/front_end/models/trace/types/Overlays.ts +138 -0
  297. package/lib/front_end/models/trace/types/Timing.ts +30 -0
  298. package/lib/front_end/models/trace/types/TraceEvents.ts +3277 -0
  299. package/lib/front_end/models/trace/types/types.ts +10 -0
  300. package/lib/front_end/third_party/i18n/LICENSE +202 -0
  301. package/lib/front_end/third_party/i18n/README.chromium +15 -0
  302. package/lib/front_end/third_party/i18n/i18n-impl.ts +61 -0
  303. package/lib/front_end/third_party/i18n/i18n.ts +11 -0
  304. package/lib/front_end/third_party/i18n/localized-string-set.ts +129 -0
  305. package/lib/front_end/third_party/intl-messageformat/LICENSE +33 -0
  306. package/lib/front_end/third_party/intl-messageformat/README.chromium +24 -0
  307. package/lib/front_end/third_party/intl-messageformat/intl-messageformat-tsconfig.json +16 -0
  308. package/lib/front_end/third_party/intl-messageformat/intl-messageformat.ts +6 -0
  309. package/lib/front_end/third_party/intl-messageformat/package/LICENSE.md +33 -0
  310. package/lib/front_end/third_party/intl-messageformat/package/README.md +3 -0
  311. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts +6 -0
  312. package/lib/front_end/third_party/intl-messageformat/package/index.d.ts.map +1 -0
  313. package/lib/front_end/third_party/intl-messageformat/package/index.js +13 -0
  314. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.d.ts +5 -0
  315. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.esm.js +1710 -0
  316. package/lib/front_end/third_party/intl-messageformat/package/intl-messageformat.iife.js +1815 -0
  317. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts +6 -0
  318. package/lib/front_end/third_party/intl-messageformat/package/lib/index.d.ts.map +1 -0
  319. package/lib/front_end/third_party/intl-messageformat/package/lib/index.js +10 -0
  320. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts +34 -0
  321. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.d.ts.map +1 -0
  322. package/lib/front_end/third_party/intl-messageformat/package/lib/src/core.js +229 -0
  323. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts +28 -0
  324. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.d.ts.map +1 -0
  325. package/lib/front_end/third_party/intl-messageformat/package/lib/src/error.js +48 -0
  326. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts +34 -0
  327. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.d.ts.map +1 -0
  328. package/lib/front_end/third_party/intl-messageformat/package/lib/src/formatters.js +179 -0
  329. package/lib/front_end/third_party/intl-messageformat/package/package.json +42 -0
  330. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts +34 -0
  331. package/lib/front_end/third_party/intl-messageformat/package/src/core.d.ts.map +1 -0
  332. package/lib/front_end/third_party/intl-messageformat/package/src/core.js +230 -0
  333. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts +28 -0
  334. package/lib/front_end/third_party/intl-messageformat/package/src/error.d.ts.map +1 -0
  335. package/lib/front_end/third_party/intl-messageformat/package/src/error.js +51 -0
  336. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts +34 -0
  337. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.d.ts.map +1 -0
  338. package/lib/front_end/third_party/intl-messageformat/package/src/formatters.js +182 -0
  339. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/error.d.ts +79 -0
  340. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/index.d.ts +15 -0
  341. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/parser.d.ts +153 -0
  342. package/lib/front_end/third_party/intl-messageformat/package/src/icu-messageformat-parser/types.d.ts +139 -0
  343. package/lib/front_end/third_party/legacy-javascript/LICENSE +202 -0
  344. package/lib/front_end/third_party/legacy-javascript/README.chromium +13 -0
  345. package/lib/front_end/third_party/legacy-javascript/legacy-javascript-tsconfig.json +8 -0
  346. package/lib/front_end/third_party/legacy-javascript/legacy-javascript.ts +3 -0
  347. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.d.ts +18 -0
  348. package/lib/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +943 -0
  349. package/lib/front_end/third_party/legacy-javascript/package.json +8 -0
  350. package/lib/front_end/third_party/legacy-javascript/rebuild.sh +9 -0
  351. package/lib/front_end/third_party/third-party-web/LICENSE +20 -0
  352. package/lib/front_end/third_party/third-party-web/README.chromium +13 -0
  353. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.d.ts +2 -0
  354. package/lib/front_end/third_party/third-party-web/lib/nostats-subset.js +149 -0
  355. package/lib/front_end/third_party/third-party-web/package/LICENSE +20 -0
  356. package/lib/front_end/third_party/third-party-web/package/README.md +929 -0
  357. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive-nostats.json +1 -0
  358. package/lib/front_end/third_party/third-party-web/package/dist/entities-httparchive.json +1 -0
  359. package/lib/front_end/third_party/third-party-web/package/dist/entities-nostats.json +1 -0
  360. package/lib/front_end/third_party/third-party-web/package/dist/entities.json +1 -0
  361. package/lib/front_end/third_party/third-party-web/package/facades.md +46 -0
  362. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.d.ts +1 -0
  363. package/lib/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +1 -0
  364. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.d.ts +1 -0
  365. package/lib/front_end/third_party/third-party-web/package/httparchive-subset.js +1 -0
  366. package/lib/front_end/third_party/third-party-web/package/lib/__snapshots__/index.test.js.snap +1006 -0
  367. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +139 -0
  368. package/lib/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +44 -0
  369. package/lib/front_end/third_party/third-party-web/package/lib/entities.test.js +27 -0
  370. package/lib/front_end/third_party/third-party-web/package/lib/index.d.ts +34 -0
  371. package/lib/front_end/third_party/third-party-web/package/lib/index.js +3 -0
  372. package/lib/front_end/third_party/third-party-web/package/lib/index.test.js +246 -0
  373. package/lib/front_end/third_party/third-party-web/package/lib/markdown/faqs.partial.md +36 -0
  374. package/lib/front_end/third_party/third-party-web/package/lib/markdown/goals.partial.md +9 -0
  375. package/lib/front_end/third_party/third-party-web/package/lib/markdown/methodology.partial.md +5 -0
  376. package/lib/front_end/third_party/third-party-web/package/lib/markdown/template.md +151 -0
  377. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-02-01.md +1 -0
  378. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-03-01.md +1 -0
  379. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-06.md +1 -0
  380. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2019-05-13.md +14 -0
  381. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2021-01-01.md +1 -0
  382. package/lib/front_end/third_party/third-party-web/package/lib/markdown/updates/2024-07-01.md +3 -0
  383. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.d.ts +1 -0
  384. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +3 -0
  385. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.d.ts +1 -0
  386. package/lib/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +3 -0
  387. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.d.ts +1 -0
  388. package/lib/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +3 -0
  389. package/lib/front_end/third_party/third-party-web/package/nostats-subset.d.ts +1 -0
  390. package/lib/front_end/third_party/third-party-web/package/nostats-subset.js +1 -0
  391. package/lib/front_end/third_party/third-party-web/package/package.json +46 -0
  392. package/lib/front_end/third_party/third-party-web/package.json +8 -0
  393. package/lib/front_end/third_party/third-party-web/rebuild.sh +13 -0
  394. package/lib/front_end/third_party/third-party-web/third-party-web-tsconfig.json +8 -0
  395. package/lib/front_end/third_party/third-party-web/third-party-web.ts +3 -0
  396. package/package.json +24 -0
  397. package/patches/chrome-devtools-frontend+1.0.1533544.patch +187 -0
@@ -0,0 +1,453 @@
1
+ // Copyright 2021 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
+
5
+ import type * as Protocol from '../../generated/protocol.js';
6
+ import * as Common from '../common/common.js';
7
+ import * as Host from '../host/host.js';
8
+ import * as Platform from '../platform/platform.js';
9
+ import {assertNotNullOrUndefined} from '../platform/platform.js';
10
+ import type * as ProtocolClient from '../protocol_client/protocol_client.js';
11
+ import * as Root from '../root/root.js';
12
+
13
+ import {SDKModel} from './SDKModel.js';
14
+ import {Target, Type as TargetType} from './Target.js';
15
+
16
+ let targetManagerInstance: TargetManager|undefined;
17
+ type ModelClass<T = SDKModel> = new (arg1: Target) => T;
18
+
19
+ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper<EventTypes> {
20
+ #targets: Set<Target>;
21
+ readonly #observers: Set<Observer>;
22
+ /* eslint-disable @typescript-eslint/no-explicit-any */
23
+ #modelListeners: Platform.MapUtilities.Multimap<string|symbol|number, {
24
+ modelClass: ModelClass,
25
+ thisObject: Object|undefined,
26
+ listener: Common.EventTarget.EventListener<any, any>,
27
+ wrappedListener: Common.EventTarget.EventListener<any, any>,
28
+ }>;
29
+ readonly #modelObservers: Platform.MapUtilities.Multimap<ModelClass, SDKModelObserver<any>>;
30
+ #scopedObservers: WeakSet<Observer|SDKModelObserver<any>>;
31
+ /* eslint-enable @typescript-eslint/no-explicit-any */
32
+ #isSuspended: boolean;
33
+ #browserTarget: Target|null;
34
+ #scopeTarget: Target|null;
35
+ #defaultScopeSet: boolean;
36
+ readonly #scopeChangeListeners: Set<() => void>;
37
+
38
+ private constructor() {
39
+ super();
40
+ this.#targets = new Set();
41
+ this.#observers = new Set();
42
+ this.#modelListeners = new Platform.MapUtilities.Multimap();
43
+ this.#modelObservers = new Platform.MapUtilities.Multimap();
44
+ this.#isSuspended = false;
45
+ this.#browserTarget = null;
46
+ this.#scopeTarget = null;
47
+ this.#scopedObservers = new WeakSet();
48
+ this.#defaultScopeSet = false;
49
+ this.#scopeChangeListeners = new Set();
50
+ }
51
+
52
+ static instance({forceNew}: {
53
+ forceNew: boolean,
54
+ } = {forceNew: false}): TargetManager {
55
+ if (!targetManagerInstance || forceNew) {
56
+ targetManagerInstance = new TargetManager();
57
+ }
58
+
59
+ return targetManagerInstance;
60
+ }
61
+
62
+ static removeInstance(): void {
63
+ targetManagerInstance = undefined;
64
+ }
65
+
66
+ onInspectedURLChange(target: Target): void {
67
+ if (target !== this.#scopeTarget) {
68
+ return;
69
+ }
70
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.inspectedURLChanged(
71
+ target.inspectedURL() || Platform.DevToolsPath.EmptyUrlString);
72
+ this.dispatchEventToListeners(Events.INSPECTED_URL_CHANGED, target);
73
+ }
74
+
75
+ onNameChange(target: Target): void {
76
+ this.dispatchEventToListeners(Events.NAME_CHANGED, target);
77
+ }
78
+
79
+ async suspendAllTargets(reason?: string): Promise<void> {
80
+ if (this.#isSuspended) {
81
+ return;
82
+ }
83
+ this.#isSuspended = true;
84
+ this.dispatchEventToListeners(Events.SUSPEND_STATE_CHANGED);
85
+ const suspendPromises = Array.from(this.#targets.values(), target => target.suspend(reason));
86
+ await Promise.all(suspendPromises);
87
+ }
88
+
89
+ async resumeAllTargets(): Promise<void> {
90
+ if (!this.#isSuspended) {
91
+ return;
92
+ }
93
+ this.#isSuspended = false;
94
+ this.dispatchEventToListeners(Events.SUSPEND_STATE_CHANGED);
95
+ const resumePromises = Array.from(this.#targets.values(), target => target.resume());
96
+ await Promise.all(resumePromises);
97
+ }
98
+
99
+ allTargetsSuspended(): boolean {
100
+ return this.#isSuspended;
101
+ }
102
+
103
+ models<T extends SDKModel>(modelClass: ModelClass<T>, opts?: {scoped: boolean}): T[] {
104
+ const result = [];
105
+ for (const target of this.#targets) {
106
+ if (opts?.scoped && !this.isInScope(target)) {
107
+ continue;
108
+ }
109
+ const model = target.model(modelClass);
110
+ if (!model) {
111
+ continue;
112
+ }
113
+ result.push(model);
114
+ }
115
+ return result;
116
+ }
117
+
118
+ inspectedURL(): string {
119
+ const mainTarget = this.primaryPageTarget();
120
+ return mainTarget ? mainTarget.inspectedURL() : '';
121
+ }
122
+
123
+ observeModels<T extends SDKModel>(modelClass: ModelClass<T>, observer: SDKModelObserver<T>, opts?: {scoped: boolean}):
124
+ void {
125
+ const models = this.models(modelClass, opts);
126
+ this.#modelObservers.set(modelClass, observer);
127
+ if (opts?.scoped) {
128
+ this.#scopedObservers.add(observer);
129
+ }
130
+ for (const model of models) {
131
+ observer.modelAdded(model);
132
+ }
133
+ }
134
+
135
+ unobserveModels<T extends SDKModel>(modelClass: ModelClass<T>, observer: SDKModelObserver<T>): void {
136
+ this.#modelObservers.delete(modelClass, observer);
137
+ this.#scopedObservers.delete(observer);
138
+ }
139
+
140
+ modelAdded(modelClass: ModelClass, model: SDKModel, inScope: boolean): void {
141
+ for (const observer of this.#modelObservers.get(modelClass).values()) {
142
+ if (!this.#scopedObservers.has(observer) || inScope) {
143
+ observer.modelAdded(model);
144
+ }
145
+ }
146
+ }
147
+
148
+ private modelRemoved(modelClass: ModelClass, model: SDKModel, inScope: boolean): void {
149
+ for (const observer of this.#modelObservers.get(modelClass).values()) {
150
+ if (!this.#scopedObservers.has(observer) || inScope) {
151
+ observer.modelRemoved(model);
152
+ }
153
+ }
154
+ }
155
+
156
+ addModelListener<Events, T extends keyof Events>(
157
+ modelClass: ModelClass<SDKModel<Events>>, eventType: T, listener: Common.EventTarget.EventListener<Events, T>,
158
+ thisObject?: Object, opts?: {scoped: boolean}): void {
159
+ const wrappedListener = (event: Common.EventTarget.EventTargetEvent<Events[T], Events>): void => {
160
+ if (!opts?.scoped || this.isInScope(event)) {
161
+ listener.call(thisObject, event);
162
+ }
163
+ };
164
+ for (const model of this.models(modelClass)) {
165
+ model.addEventListener(eventType, wrappedListener);
166
+ }
167
+ this.#modelListeners.set(eventType, {modelClass, thisObject, listener, wrappedListener});
168
+ }
169
+
170
+ removeModelListener<Events, T extends keyof Events>(
171
+ modelClass: ModelClass<SDKModel<Events>>, eventType: T, listener: Common.EventTarget.EventListener<Events, T>,
172
+ thisObject?: Object): void {
173
+ if (!this.#modelListeners.has(eventType)) {
174
+ return;
175
+ }
176
+ let wrappedListener = null;
177
+ for (const info of this.#modelListeners.get(eventType)) {
178
+ if (info.modelClass === modelClass && info.listener === listener && info.thisObject === thisObject) {
179
+ wrappedListener = info.wrappedListener;
180
+ this.#modelListeners.delete(eventType, info);
181
+ }
182
+ }
183
+ if (wrappedListener) {
184
+ for (const model of this.models(modelClass)) {
185
+ model.removeEventListener(eventType, wrappedListener);
186
+ }
187
+ }
188
+ }
189
+
190
+ observeTargets(targetObserver: Observer, opts?: {scoped: boolean}): void {
191
+ if (this.#observers.has(targetObserver)) {
192
+ throw new Error('Observer can only be registered once');
193
+ }
194
+ if (opts?.scoped) {
195
+ this.#scopedObservers.add(targetObserver);
196
+ }
197
+ for (const target of this.#targets) {
198
+ if (!opts?.scoped || this.isInScope(target)) {
199
+ targetObserver.targetAdded(target);
200
+ }
201
+ }
202
+ this.#observers.add(targetObserver);
203
+ }
204
+
205
+ unobserveTargets(targetObserver: Observer): void {
206
+ this.#observers.delete(targetObserver);
207
+ this.#scopedObservers.delete(targetObserver);
208
+ }
209
+
210
+ createTarget(
211
+ id: Protocol.Target.TargetID|'main', name: string, type: TargetType, parentTarget: Target|null,
212
+ sessionId?: string, waitForDebuggerInPage?: boolean,
213
+ connection?: ProtocolClient.ConnectionTransport.ConnectionTransport,
214
+ targetInfo?: Protocol.Target.TargetInfo): Target {
215
+ const target = new Target(
216
+ this, id, name, type, parentTarget, sessionId || '', this.#isSuspended, connection || null, targetInfo);
217
+ if (waitForDebuggerInPage) {
218
+ void target.pageAgent().invoke_waitForDebugger();
219
+ }
220
+ target.createModels(new Set(this.#modelObservers.keysArray()));
221
+ this.#targets.add(target);
222
+
223
+ const inScope = this.isInScope(target);
224
+ // Iterate over a copy. #observers might be modified during iteration.
225
+ for (const observer of [...this.#observers]) {
226
+ if (!this.#scopedObservers.has(observer) || inScope) {
227
+ observer.targetAdded(target);
228
+ }
229
+ }
230
+
231
+ for (const [modelClass, model] of target.models().entries()) {
232
+ this.modelAdded(modelClass, model, inScope);
233
+ }
234
+
235
+ for (const key of this.#modelListeners.keysArray()) {
236
+ for (const info of this.#modelListeners.get(key)) {
237
+ const model = target.model(info.modelClass);
238
+ if (model) {
239
+ model.addEventListener(key, info.wrappedListener);
240
+ }
241
+ }
242
+ }
243
+
244
+ if ((target === target.outermostTarget() &&
245
+ (target.type() !== TargetType.FRAME || target === this.primaryPageTarget())) &&
246
+ !this.#defaultScopeSet) {
247
+ this.setScopeTarget(target);
248
+ }
249
+
250
+ return target;
251
+ }
252
+
253
+ removeTarget(target: Target): void {
254
+ if (!this.#targets.has(target)) {
255
+ return;
256
+ }
257
+
258
+ const inScope = this.isInScope(target);
259
+ this.#targets.delete(target);
260
+ for (const modelClass of target.models().keys()) {
261
+ const model = target.models().get(modelClass);
262
+ assertNotNullOrUndefined(model);
263
+ this.modelRemoved(modelClass, model, inScope);
264
+ }
265
+
266
+ // Iterate over a copy. #observers might be modified during iteration.
267
+ for (const observer of [...this.#observers]) {
268
+ if (!this.#scopedObservers.has(observer) || inScope) {
269
+ observer.targetRemoved(target);
270
+ }
271
+ }
272
+
273
+ for (const key of this.#modelListeners.keysArray()) {
274
+ for (const info of this.#modelListeners.get(key)) {
275
+ const model = target.model(info.modelClass);
276
+ if (model) {
277
+ model.removeEventListener(key, info.wrappedListener);
278
+ }
279
+ }
280
+ }
281
+ }
282
+
283
+ targets(): Target[] {
284
+ return [...this.#targets];
285
+ }
286
+
287
+ targetById(id: string): Target|null {
288
+ // TODO(dgozman): add a map #id -> #target.
289
+ return this.targets().find(target => target.id() === id) || null;
290
+ }
291
+
292
+ rootTarget(): Target|null {
293
+ if (this.#targets.size === 0) {
294
+ return null;
295
+ }
296
+ return this.#targets.values().next().value ?? null;
297
+ }
298
+
299
+ primaryPageTarget(): Target|null {
300
+ let target = this.rootTarget();
301
+ if (target?.type() === TargetType.TAB) {
302
+ target =
303
+ this.targets().find(
304
+ t => t.parentTarget() === target && t.type() === TargetType.FRAME && !t.targetInfo()?.subtype?.length) ||
305
+ null;
306
+ }
307
+ return target;
308
+ }
309
+
310
+ browserTarget(): Target|null {
311
+ return this.#browserTarget;
312
+ }
313
+
314
+ async maybeAttachInitialTarget(): Promise<boolean> {
315
+ if (!Boolean(Root.Runtime.Runtime.queryParam('browserConnection'))) {
316
+ return false;
317
+ }
318
+ if (!this.#browserTarget) {
319
+ this.#browserTarget = new Target(
320
+ this, /* #id*/ 'main', /* #name*/ 'browser', TargetType.BROWSER, /* #parentTarget*/ null,
321
+ /* #sessionId */ '', /* suspended*/ false, /* #connection*/ null, /* targetInfo*/ undefined);
322
+ this.#browserTarget.createModels(new Set(this.#modelObservers.keysArray()));
323
+ }
324
+ const targetId =
325
+ await Host.InspectorFrontendHost.InspectorFrontendHostInstance.initialTargetId() as Protocol.Target.TargetID;
326
+ // Do not await for Target.autoAttachRelated to return, as it goes throguh the renderer and we don't want to block early
327
+ // at front-end initialization if a renderer is stuck. The rest of #target discovery and auto-attach process should happen
328
+ // asynchronously upon Target.attachedToTarget.
329
+ void this.#browserTarget.targetAgent().invoke_autoAttachRelated({
330
+ targetId,
331
+ waitForDebuggerOnStart: true,
332
+ });
333
+ return true;
334
+ }
335
+
336
+ clearAllTargetsForTest(): void {
337
+ this.#targets.clear();
338
+ }
339
+
340
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
341
+ isInScope(arg: SDKModel|Target|Common.EventTarget.EventTargetEvent<any, any>|null): boolean {
342
+ if (!arg) {
343
+ return false;
344
+ }
345
+ if (isSDKModelEvent(arg)) {
346
+ arg = arg.source as SDKModel;
347
+ }
348
+ if (arg instanceof SDKModel) {
349
+ arg = arg.target();
350
+ }
351
+ while (arg && arg !== this.#scopeTarget) {
352
+ arg = arg.parentTarget();
353
+ }
354
+ return Boolean(arg) && arg === this.#scopeTarget;
355
+ }
356
+
357
+ // Sets a root of a scope substree.
358
+ // TargetManager API invoked with `scoped: true` will behave as if targets
359
+ // outside of the scope subtree don't exist. Concretely this means that
360
+ // target observers, model observers and model listeners won't be invoked for targets outside of the
361
+ // scope tree. This method will invoke targetRemoved and modelRemoved for
362
+ // objects in the previous scope, as if they disappear and then will invoke
363
+ // targetAdded and modelAdded as if they just appeared.
364
+ // Note that scopeTarget could be null, which will effectively prevent scoped
365
+ // observes from getting any events.
366
+ setScopeTarget(scopeTarget: Target|null): void {
367
+ if (scopeTarget === this.#scopeTarget) {
368
+ return;
369
+ }
370
+ for (const target of this.targets()) {
371
+ if (!this.isInScope(target)) {
372
+ continue;
373
+ }
374
+ for (const modelClass of this.#modelObservers.keysArray()) {
375
+ const model = target.models().get(modelClass);
376
+ if (!model) {
377
+ continue;
378
+ }
379
+ for (const observer of [...this.#modelObservers.get(modelClass)].filter(o => this.#scopedObservers.has(o))) {
380
+ observer.modelRemoved(model);
381
+ }
382
+ }
383
+
384
+ // Iterate over a copy. #observers might be modified during iteration.
385
+ for (const observer of [...this.#observers].filter(o => this.#scopedObservers.has(o))) {
386
+ observer.targetRemoved(target);
387
+ }
388
+ }
389
+ this.#scopeTarget = scopeTarget;
390
+ for (const target of this.targets()) {
391
+ if (!this.isInScope(target)) {
392
+ continue;
393
+ }
394
+
395
+ for (const observer of [...this.#observers].filter(o => this.#scopedObservers.has(o))) {
396
+ observer.targetAdded(target);
397
+ }
398
+
399
+ for (const [modelClass, model] of target.models().entries()) {
400
+ for (const observer of [...this.#modelObservers.get(modelClass)].filter(o => this.#scopedObservers.has(o))) {
401
+ observer.modelAdded(model);
402
+ }
403
+ }
404
+ }
405
+ for (const scopeChangeListener of this.#scopeChangeListeners) {
406
+ scopeChangeListener();
407
+ }
408
+ if (scopeTarget?.inspectedURL()) {
409
+ this.onInspectedURLChange(scopeTarget);
410
+ }
411
+ }
412
+
413
+ addScopeChangeListener(listener: () => void): void {
414
+ this.#scopeChangeListeners.add(listener);
415
+ }
416
+
417
+ scopeTarget(): Target|null {
418
+ return this.#scopeTarget;
419
+ }
420
+ }
421
+
422
+ export const enum Events {
423
+ AVAILABLE_TARGETS_CHANGED = 'AvailableTargetsChanged',
424
+ INSPECTED_URL_CHANGED = 'InspectedURLChanged',
425
+ NAME_CHANGED = 'NameChanged',
426
+ SUSPEND_STATE_CHANGED = 'SuspendStateChanged',
427
+ }
428
+
429
+ export interface EventTypes {
430
+ [Events.AVAILABLE_TARGETS_CHANGED]: Protocol.Target.TargetInfo[];
431
+ [Events.INSPECTED_URL_CHANGED]: Target;
432
+ [Events.NAME_CHANGED]: Target;
433
+ [Events.SUSPEND_STATE_CHANGED]: void;
434
+ }
435
+
436
+ export class Observer {
437
+ targetAdded(_target: Target): void {
438
+ }
439
+ targetRemoved(_target: Target): void {
440
+ }
441
+ }
442
+
443
+ export class SDKModelObserver<T> {
444
+ modelAdded(_model: T): void {
445
+ }
446
+ modelRemoved(_model: T): void {
447
+ }
448
+ }
449
+
450
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
451
+ function isSDKModelEvent(arg: Object): arg is Common.EventTarget.EventTargetEvent<any, any> {
452
+ return 'source' in arg && arg.source instanceof SDKModel;
453
+ }
@@ -0,0 +1,61 @@
1
+ // Copyright 2024 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
+
5
+ import * as Common from '../../core/common/common.js';
6
+ import type * as Platform from '../../core/platform/platform.js';
7
+ import type * as Protocol from '../../generated/protocol.js';
8
+
9
+ import type {NetworkRequest} from './NetworkRequest.js';
10
+ import {ResourceTreeModel} from './ResourceTreeModel.js';
11
+ import type {SourceMapV3} from './SourceMap.js';
12
+
13
+ /** A thin wrapper class, mostly to enable instanceof-based revealing of traces to open in Timeline. **/
14
+ export class TraceObject {
15
+ readonly traceEvents: Protocol.Tracing.DataCollectedEvent['value'];
16
+ readonly metadata: {sourceMaps?: Array<{sourceMapUrl: string, sourceMap: SourceMapV3, url: string}>};
17
+ constructor(payload: Protocol.Tracing.DataCollectedEvent['value']|TraceObject, meta?: Object) {
18
+ if (Array.isArray(payload)) {
19
+ this.traceEvents = payload;
20
+ this.metadata = meta ?? {};
21
+ } else {
22
+ this.traceEvents = payload.traceEvents;
23
+ this.metadata = payload.metadata;
24
+ }
25
+ }
26
+ }
27
+
28
+ /** Another thin wrapper class to enable revealing individual trace events (aka entries) in Timeline panel. **/
29
+ export class RevealableEvent {
30
+ // Only Trace.Types.Events.Event are passed in, but we can't depend on that type from SDK
31
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
32
+ constructor(public event: any) {
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Another wrapper class for revealing network requests in Network panel. The reason is the `Open in Network panel`
38
+ * option is handled by the context menu provider, which will add this option for all supporting types. And there are a
39
+ * lot of context menu providers that support `SDK.NetworkRequest.NetworkRequest`, for example `Override content` by
40
+ * PersistenceActions, but we so far just want the one to reveal in network panel, so add a new class which will only be
41
+ * supported by Network panel.
42
+ *
43
+ * Also we want to have a different behavior(select the network request) from the `SDK.NetworkRequest.NetworkRequest`
44
+ * (highlight the network request once).
45
+ */
46
+ export class RevealableNetworkRequest {
47
+ constructor(public networkRequest: NetworkRequest) {
48
+ }
49
+
50
+ // Only Trace.Types.Events.SyntheticNetworkRequest are passed in, but we can't depend on that type from SDK
51
+ static create(event: unknown): RevealableNetworkRequest|null {
52
+ const syntheticNetworkRequest = event;
53
+ // @ts-expect-error We don't have type checking here to confirm these events have .args.data.url.
54
+ const url = syntheticNetworkRequest.args.data.url as Platform.DevToolsPath.UrlString;
55
+ const urlWithoutHash = Common.ParsedURL.ParsedURL.urlWithoutHash(url) as Platform.DevToolsPath.UrlString;
56
+
57
+ const resource = ResourceTreeModel.resourceForURL(url) ?? ResourceTreeModel.resourceForURL(urlWithoutHash);
58
+ const sdkNetworkRequest = resource?.request;
59
+ return sdkNetworkRequest ? new RevealableNetworkRequest(sdkNetworkRequest) : null;
60
+ }
61
+ }
@@ -0,0 +1,104 @@
1
+ // Copyright 2020 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
+
5
+ import type * as ProtocolProxyApi from '../../generated/protocol-proxy-api.js';
6
+ import type * as Protocol from '../../generated/protocol.js';
7
+
8
+ import {SDKModel} from './SDKModel.js';
9
+ import {Capability, type Target} from './Target.js';
10
+
11
+ export const enum Events {
12
+ CREDENTIAL_ADDED = 'CredentialAdded',
13
+ CREDENTIAL_ASSERTED = 'CredentialAsserted',
14
+ CREDENTIAL_DELETED = 'CredentialDeleted',
15
+ CREDENTIAL_UPDATED = 'CredentialUpdated',
16
+ }
17
+
18
+ export interface EventTypes {
19
+ [Events.CREDENTIAL_ADDED]: Protocol.WebAuthn.CredentialAddedEvent;
20
+ [Events.CREDENTIAL_ASSERTED]: Protocol.WebAuthn.CredentialAssertedEvent;
21
+ [Events.CREDENTIAL_DELETED]: Protocol.WebAuthn.CredentialDeletedEvent;
22
+ [Events.CREDENTIAL_UPDATED]: Protocol.WebAuthn.CredentialUpdatedEvent;
23
+ }
24
+
25
+ export class WebAuthnModel extends SDKModel<EventTypes> {
26
+ readonly #agent: ProtocolProxyApi.WebAuthnApi;
27
+ constructor(target: Target) {
28
+ super(target);
29
+ this.#agent = target.webAuthnAgent();
30
+ target.registerWebAuthnDispatcher(new WebAuthnDispatcher(this));
31
+ }
32
+
33
+ setVirtualAuthEnvEnabled(enable: boolean): Promise<Object> {
34
+ if (enable) {
35
+ return this.#agent.invoke_enable({enableUI: true});
36
+ }
37
+ return this.#agent.invoke_disable();
38
+ }
39
+
40
+ async addAuthenticator(options: Protocol.WebAuthn.VirtualAuthenticatorOptions):
41
+ Promise<Protocol.WebAuthn.AuthenticatorId> {
42
+ const response = await this.#agent.invoke_addVirtualAuthenticator({options});
43
+ return response.authenticatorId;
44
+ }
45
+
46
+ async removeAuthenticator(authenticatorId: Protocol.WebAuthn.AuthenticatorId): Promise<void> {
47
+ await this.#agent.invoke_removeVirtualAuthenticator({authenticatorId});
48
+ }
49
+
50
+ async setAutomaticPresenceSimulation(authenticatorId: Protocol.WebAuthn.AuthenticatorId, enabled: boolean):
51
+ Promise<void> {
52
+ await this.#agent.invoke_setAutomaticPresenceSimulation({authenticatorId, enabled});
53
+ }
54
+
55
+ async getCredentials(authenticatorId: Protocol.WebAuthn.AuthenticatorId): Promise<Protocol.WebAuthn.Credential[]> {
56
+ const response = await this.#agent.invoke_getCredentials({authenticatorId});
57
+ return response.credentials;
58
+ }
59
+
60
+ async removeCredential(authenticatorId: Protocol.WebAuthn.AuthenticatorId, credentialId: string): Promise<void> {
61
+ await this.#agent.invoke_removeCredential({authenticatorId, credentialId});
62
+ }
63
+
64
+ credentialAdded(params: Protocol.WebAuthn.CredentialAddedEvent): void {
65
+ this.dispatchEventToListeners(Events.CREDENTIAL_ADDED, params);
66
+ }
67
+
68
+ credentialAsserted(params: Protocol.WebAuthn.CredentialAssertedEvent): void {
69
+ this.dispatchEventToListeners(Events.CREDENTIAL_ASSERTED, params);
70
+ }
71
+
72
+ credentialDeleted(params: Protocol.WebAuthn.CredentialDeletedEvent): void {
73
+ this.dispatchEventToListeners(Events.CREDENTIAL_DELETED, params);
74
+ }
75
+
76
+ credentialUpdated(params: Protocol.WebAuthn.CredentialUpdatedEvent): void {
77
+ this.dispatchEventToListeners(Events.CREDENTIAL_UPDATED, params);
78
+ }
79
+ }
80
+
81
+ class WebAuthnDispatcher implements ProtocolProxyApi.WebAuthnDispatcher {
82
+ readonly #model: WebAuthnModel;
83
+ constructor(model: WebAuthnModel) {
84
+ this.#model = model;
85
+ }
86
+
87
+ credentialAdded(params: Protocol.WebAuthn.CredentialAddedEvent): void {
88
+ this.#model.credentialAdded(params);
89
+ }
90
+
91
+ credentialAsserted(params: Protocol.WebAuthn.CredentialAssertedEvent): void {
92
+ this.#model.credentialAsserted(params);
93
+ }
94
+
95
+ credentialDeleted(params: Protocol.WebAuthn.CredentialDeletedEvent): void {
96
+ this.#model.credentialDeleted(params);
97
+ }
98
+
99
+ credentialUpdated(params: Protocol.WebAuthn.CredentialUpdatedEvent): void {
100
+ this.#model.credentialUpdated(params);
101
+ }
102
+ }
103
+
104
+ SDKModel.register(WebAuthnModel, {capabilities: Capability.WEB_AUTHN, autostart: false});