chrome-devtools-mcp 0.0.1 → 0.0.2

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 (354) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +196 -0
  3. package/build/node_modules/chrome-devtools-frontend/LICENSE +27 -0
  4. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +4 -0
  5. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +17 -0
  6. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +43 -0
  7. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +27 -0
  8. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +2029 -0
  9. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +330 -0
  10. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +221 -0
  11. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +86 -0
  12. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +14 -0
  13. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +14 -0
  14. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +64 -0
  15. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +4 -0
  16. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +29 -0
  17. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Linkifier.js +34 -0
  18. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +20 -0
  19. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +49 -0
  20. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +86 -0
  21. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +459 -0
  22. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +137 -0
  23. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/QueryParamHandler.js +4 -0
  24. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +69 -0
  25. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +506 -0
  26. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +13 -0
  27. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +159 -0
  28. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +24 -0
  29. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +79 -0
  30. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +164 -0
  31. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +1281 -0
  32. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +97 -0
  33. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +17 -0
  34. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +40 -0
  35. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +71 -0
  36. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +127 -0
  37. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Worker.js +44 -0
  38. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +44 -0
  39. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +415 -0
  40. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +161 -0
  41. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +510 -0
  42. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +66 -0
  43. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +59 -0
  44. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +232 -0
  45. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +953 -0
  46. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +12 -0
  47. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +9 -0
  48. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +199 -0
  49. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +4 -0
  50. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +4 -0
  51. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DOMUtilities.js +122 -0
  52. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +13 -0
  53. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +27 -0
  54. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +21 -0
  55. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +79 -0
  56. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +143 -0
  57. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +72 -0
  58. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +536 -0
  59. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +9 -0
  60. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +157 -0
  61. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +24 -0
  62. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +4 -0
  63. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +22 -0
  64. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +26 -0
  65. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +800 -0
  66. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/NodeURL.js +31 -0
  67. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +13 -0
  68. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +1 -0
  69. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +5 -0
  70. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +281 -0
  71. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +846 -0
  72. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +155 -0
  73. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +99 -0
  74. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +220 -0
  75. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +98 -0
  76. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +31 -0
  77. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +22 -0
  78. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +1279 -0
  79. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +100 -0
  80. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +1518 -0
  81. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +902 -0
  82. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +315 -0
  83. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +572 -0
  84. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +1316 -0
  85. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +53 -0
  86. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +361 -0
  87. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +22 -0
  88. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +275 -0
  89. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +166 -0
  90. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +24 -0
  91. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +29 -0
  92. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +232 -0
  93. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +47 -0
  94. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +242 -0
  95. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +629 -0
  96. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +14 -0
  97. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +241 -0
  98. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +198 -0
  99. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +163 -0
  100. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +597 -0
  101. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +1610 -0
  102. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +1231 -0
  103. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +527 -0
  104. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +346 -0
  105. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +125 -0
  106. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +4 -0
  107. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +199 -0
  108. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +130 -0
  109. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +73 -0
  110. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +83 -0
  111. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +208 -0
  112. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +41 -0
  113. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +95 -0
  114. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +34 -0
  115. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +1915 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1660 -0
  117. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +48 -0
  118. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +765 -0
  119. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +384 -0
  120. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +25 -0
  121. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +300 -0
  122. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +67 -0
  123. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +62 -0
  124. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +563 -0
  125. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +292 -0
  126. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +4 -0
  127. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +905 -0
  128. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +163 -0
  129. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +922 -0
  130. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +535 -0
  131. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +45 -0
  132. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +174 -0
  133. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +395 -0
  134. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +54 -0
  135. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +67 -0
  136. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +110 -0
  137. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +216 -0
  138. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +271 -0
  139. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +511 -0
  140. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +678 -0
  141. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +41 -0
  142. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +132 -0
  143. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +189 -0
  144. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +156 -0
  145. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +276 -0
  146. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +143 -0
  147. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +53 -0
  148. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +262 -0
  149. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +382 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +49 -0
  151. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +66 -0
  152. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +1117 -0
  153. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +89 -0
  154. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +1513 -0
  155. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +339 -0
  156. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +1558 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7473 -0
  158. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +4 -0
  159. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +260 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +1096 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +130 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +514 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +90 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +120 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +332 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +370 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +171 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +547 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +592 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +483 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +446 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +400 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +540 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +207 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +98 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +251 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +297 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +184 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +493 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +184 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +744 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +488 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +208 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +180 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +256 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +89 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +81 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +160 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +117 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +262 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +188 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +182 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +88 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +199 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +544 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +191 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +135 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +97 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +101 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +565 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +38 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +944 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +148 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +8 -0
  330. package/build/src/McpContext.js +204 -0
  331. package/build/src/McpResponse.js +178 -0
  332. package/build/src/Mutex.js +40 -0
  333. package/build/src/PageCollector.js +68 -0
  334. package/build/src/browser.js +105 -0
  335. package/build/src/formatters/consoleFormatter.js +71 -0
  336. package/build/src/formatters/networkFormatter.js +34 -0
  337. package/build/src/formatters/snapshotFormatter.js +75 -0
  338. package/build/src/index.js +206 -0
  339. package/build/src/logger.js +26 -0
  340. package/build/src/tools/ToolDefinition.js +8 -0
  341. package/build/src/tools/categories.js +14 -0
  342. package/build/src/tools/console.js +19 -0
  343. package/build/src/tools/emulation.js +61 -0
  344. package/build/src/tools/input.js +202 -0
  345. package/build/src/tools/network.js +35 -0
  346. package/build/src/tools/pages.js +181 -0
  347. package/build/src/tools/performance.js +116 -0
  348. package/build/src/tools/screenshot.js +65 -0
  349. package/build/src/tools/script.js +35 -0
  350. package/build/src/tools/snapshot.js +42 -0
  351. package/build/src/trace-processing/parse.js +73 -0
  352. package/build/src/waitForHelpers.js +109 -0
  353. package/package.json +53 -6
  354. package/README +0 -1
@@ -0,0 +1,262 @@
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
+ import * as Common from '../common/common.js';
5
+ import * as Platform from '../platform/platform.js';
6
+ import * as ProtocolClient from '../protocol_client/protocol_client.js';
7
+ import { SDKModel } from './SDKModel.js';
8
+ export class Target extends ProtocolClient.InspectorBackend.TargetBase {
9
+ #targetManager;
10
+ #name;
11
+ #inspectedURL = Platform.DevToolsPath.EmptyUrlString;
12
+ #inspectedURLName = '';
13
+ #capabilitiesMask;
14
+ #type;
15
+ #parentTarget;
16
+ #id;
17
+ #modelByConstructor = new Map();
18
+ #isSuspended;
19
+ /**
20
+ * Generally when a target crashes we don't need to know, with one exception.
21
+ * If a target crashes during the recording of a performance trace, after the
22
+ * trace when we try to resume() it, it will fail because it has crashed. This
23
+ * causes the performance panel to freeze (see crbug.com/333989070). So we
24
+ * mark the target as crashed so we can exit without trying to resume it. In
25
+ * `ChildTargetManager` we will mark a target as "un-crashed" when we get the
26
+ * `targetInfoChanged` event. This helps ensure we can deal with cases where
27
+ * the page crashes, but a reload fixes it and the targets get restored (see
28
+ * crbug.com/387258086).
29
+ */
30
+ #hasCrashed = false;
31
+ #targetInfo;
32
+ #creatingModels;
33
+ constructor(targetManager, id, name, type, parentTarget, sessionId, suspended, connection, targetInfo) {
34
+ const needsNodeJSPatching = type === Type.NODE;
35
+ super(needsNodeJSPatching, parentTarget, sessionId, connection);
36
+ this.#targetManager = targetManager;
37
+ this.#name = name;
38
+ this.#capabilitiesMask = 0;
39
+ switch (type) {
40
+ case Type.FRAME:
41
+ this.#capabilitiesMask = 1 /* Capability.BROWSER */ | 8192 /* Capability.STORAGE */ | 2 /* Capability.DOM */ | 4 /* Capability.JS */ |
42
+ 8 /* Capability.LOG */ | 16 /* Capability.NETWORK */ | 32 /* Capability.TARGET */ | 128 /* Capability.TRACING */ | 256 /* Capability.EMULATION */ |
43
+ 1024 /* Capability.INPUT */ | 2048 /* Capability.INSPECTOR */ | 32768 /* Capability.AUDITS */ | 65536 /* Capability.WEB_AUTHN */ | 131072 /* Capability.IO */ |
44
+ 262144 /* Capability.MEDIA */ | 524288 /* Capability.EVENT_BREAKPOINTS */;
45
+ if (parentTarget?.type() !== Type.FRAME) {
46
+ // This matches backend exposing certain capabilities only for the main frame.
47
+ this.#capabilitiesMask |=
48
+ 4096 /* Capability.DEVICE_EMULATION */ | 64 /* Capability.SCREEN_CAPTURE */ | 512 /* Capability.SECURITY */ | 16384 /* Capability.SERVICE_WORKER */;
49
+ if (Common.ParsedURL.schemeIs(targetInfo?.url, 'chrome-extension:')) {
50
+ this.#capabilitiesMask &= ~512 /* Capability.SECURITY */;
51
+ }
52
+ // TODO(dgozman): we report service workers for the whole frame tree on the main frame,
53
+ // while we should be able to only cover the subtree corresponding to the target.
54
+ }
55
+ break;
56
+ case Type.ServiceWorker:
57
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 8 /* Capability.LOG */ | 16 /* Capability.NETWORK */ | 32 /* Capability.TARGET */ |
58
+ 2048 /* Capability.INSPECTOR */ | 131072 /* Capability.IO */ | 524288 /* Capability.EVENT_BREAKPOINTS */;
59
+ if (parentTarget?.type() !== Type.FRAME) {
60
+ this.#capabilitiesMask |= 1 /* Capability.BROWSER */;
61
+ }
62
+ break;
63
+ case Type.SHARED_WORKER:
64
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 8 /* Capability.LOG */ | 16 /* Capability.NETWORK */ | 32 /* Capability.TARGET */ |
65
+ 131072 /* Capability.IO */ | 262144 /* Capability.MEDIA */ | 2048 /* Capability.INSPECTOR */ | 524288 /* Capability.EVENT_BREAKPOINTS */;
66
+ break;
67
+ case Type.SHARED_STORAGE_WORKLET:
68
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 8 /* Capability.LOG */ | 2048 /* Capability.INSPECTOR */ | 524288 /* Capability.EVENT_BREAKPOINTS */;
69
+ break;
70
+ case Type.Worker:
71
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 8 /* Capability.LOG */ | 16 /* Capability.NETWORK */ | 32 /* Capability.TARGET */ |
72
+ 131072 /* Capability.IO */ | 262144 /* Capability.MEDIA */ | 256 /* Capability.EMULATION */ | 524288 /* Capability.EVENT_BREAKPOINTS */;
73
+ break;
74
+ case Type.WORKLET:
75
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 8 /* Capability.LOG */ | 524288 /* Capability.EVENT_BREAKPOINTS */ | 16 /* Capability.NETWORK */;
76
+ break;
77
+ case Type.NODE:
78
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 16 /* Capability.NETWORK */ | 32 /* Capability.TARGET */ | 131072 /* Capability.IO */;
79
+ break;
80
+ case Type.AUCTION_WORKLET:
81
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 524288 /* Capability.EVENT_BREAKPOINTS */;
82
+ break;
83
+ case Type.BROWSER:
84
+ this.#capabilitiesMask = 32 /* Capability.TARGET */ | 131072 /* Capability.IO */;
85
+ break;
86
+ case Type.TAB:
87
+ this.#capabilitiesMask = 32 /* Capability.TARGET */ | 128 /* Capability.TRACING */;
88
+ break;
89
+ case Type.NODE_WORKER:
90
+ this.#capabilitiesMask = 4 /* Capability.JS */ | 16 /* Capability.NETWORK */ | 32 /* Capability.TARGET */ | 131072 /* Capability.IO */;
91
+ }
92
+ this.#type = type;
93
+ this.#parentTarget = parentTarget;
94
+ this.#id = id;
95
+ this.#isSuspended = suspended;
96
+ this.#targetInfo = targetInfo;
97
+ }
98
+ createModels(required) {
99
+ this.#creatingModels = true;
100
+ const registeredModels = Array.from(SDKModel.registeredModels.entries());
101
+ // Create early models.
102
+ for (const [modelClass, info] of registeredModels) {
103
+ if (info.early) {
104
+ this.model(modelClass);
105
+ }
106
+ }
107
+ // Create autostart and required models.
108
+ for (const [modelClass, info] of registeredModels) {
109
+ if (info.autostart || required.has(modelClass)) {
110
+ this.model(modelClass);
111
+ }
112
+ }
113
+ this.#creatingModels = false;
114
+ }
115
+ id() {
116
+ return this.#id;
117
+ }
118
+ name() {
119
+ return this.#name || this.#inspectedURLName;
120
+ }
121
+ setName(name) {
122
+ if (this.#name === name) {
123
+ return;
124
+ }
125
+ this.#name = name;
126
+ this.#targetManager.onNameChange(this);
127
+ }
128
+ type() {
129
+ return this.#type;
130
+ }
131
+ markAsNodeJSForTest() {
132
+ super.markAsNodeJSForTest();
133
+ this.#type = Type.NODE;
134
+ }
135
+ targetManager() {
136
+ return this.#targetManager;
137
+ }
138
+ hasAllCapabilities(capabilitiesMask) {
139
+ // TODO(dgozman): get rid of this method, once we never observe targets with
140
+ // capability mask.
141
+ return (this.#capabilitiesMask & capabilitiesMask) === capabilitiesMask;
142
+ }
143
+ decorateLabel(label) {
144
+ return (this.#type === Type.Worker || this.#type === Type.ServiceWorker) ? '\u2699 ' + label : label;
145
+ }
146
+ parentTarget() {
147
+ return this.#parentTarget;
148
+ }
149
+ outermostTarget() {
150
+ let lastTarget = null;
151
+ let currentTarget = this;
152
+ do {
153
+ if (currentTarget.type() !== Type.TAB && currentTarget.type() !== Type.BROWSER) {
154
+ lastTarget = currentTarget;
155
+ }
156
+ currentTarget = currentTarget.parentTarget();
157
+ } while (currentTarget);
158
+ return lastTarget;
159
+ }
160
+ dispose(reason) {
161
+ super.dispose(reason);
162
+ this.#targetManager.removeTarget(this);
163
+ for (const model of this.#modelByConstructor.values()) {
164
+ model.dispose();
165
+ }
166
+ }
167
+ model(modelClass) {
168
+ if (!this.#modelByConstructor.get(modelClass)) {
169
+ const info = SDKModel.registeredModels.get(modelClass);
170
+ if (info === undefined) {
171
+ throw new Error('Model class is not registered');
172
+ }
173
+ if ((this.#capabilitiesMask & info.capabilities) === info.capabilities) {
174
+ const model = new modelClass(this);
175
+ this.#modelByConstructor.set(modelClass, model);
176
+ if (!this.#creatingModels) {
177
+ this.#targetManager.modelAdded(modelClass, model, this.#targetManager.isInScope(this));
178
+ }
179
+ }
180
+ }
181
+ return this.#modelByConstructor.get(modelClass) || null;
182
+ }
183
+ models() {
184
+ return this.#modelByConstructor;
185
+ }
186
+ inspectedURL() {
187
+ return this.#inspectedURL;
188
+ }
189
+ setInspectedURL(inspectedURL) {
190
+ this.#inspectedURL = inspectedURL;
191
+ const parsedURL = Common.ParsedURL.ParsedURL.fromString(inspectedURL);
192
+ this.#inspectedURLName = parsedURL ? parsedURL.lastPathComponentWithFragment() : '#' + this.#id;
193
+ this.#targetManager.onInspectedURLChange(this);
194
+ if (!this.#name) {
195
+ this.#targetManager.onNameChange(this);
196
+ }
197
+ }
198
+ hasCrashed() {
199
+ return this.#hasCrashed;
200
+ }
201
+ setHasCrashed(isCrashed) {
202
+ const wasCrashed = this.#hasCrashed;
203
+ this.#hasCrashed = isCrashed;
204
+ // If the target has now been restored, check to see if it needs resuming.
205
+ // This ensures that if a target crashes whilst suspended, it is resumed
206
+ // when it is recovered.
207
+ // If the target is not suspended, resume() is a no-op, so it's safe to call.
208
+ if (wasCrashed && !isCrashed) {
209
+ void this.resume();
210
+ }
211
+ }
212
+ async suspend(reason) {
213
+ if (this.#isSuspended) {
214
+ return;
215
+ }
216
+ this.#isSuspended = true;
217
+ // If the target has crashed, we will not attempt to suspend all the
218
+ // models, but we still mark it as suspended so we correctly track the
219
+ // state.
220
+ if (this.#hasCrashed) {
221
+ return;
222
+ }
223
+ await Promise.all(Array.from(this.models().values(), m => m.preSuspendModel(reason)));
224
+ await Promise.all(Array.from(this.models().values(), m => m.suspendModel(reason)));
225
+ }
226
+ async resume() {
227
+ if (!this.#isSuspended) {
228
+ return;
229
+ }
230
+ this.#isSuspended = false;
231
+ if (this.#hasCrashed) {
232
+ return;
233
+ }
234
+ await Promise.all(Array.from(this.models().values(), m => m.resumeModel()));
235
+ await Promise.all(Array.from(this.models().values(), m => m.postResumeModel()));
236
+ }
237
+ suspended() {
238
+ return this.#isSuspended;
239
+ }
240
+ updateTargetInfo(targetInfo) {
241
+ this.#targetInfo = targetInfo;
242
+ }
243
+ targetInfo() {
244
+ return this.#targetInfo;
245
+ }
246
+ }
247
+ export var Type;
248
+ (function (Type) {
249
+ Type["FRAME"] = "frame";
250
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- Used by web_tests.
251
+ Type["ServiceWorker"] = "service-worker";
252
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- Used by web_tests.
253
+ Type["Worker"] = "worker";
254
+ Type["SHARED_WORKER"] = "shared-worker";
255
+ Type["SHARED_STORAGE_WORKLET"] = "shared-storage-worklet";
256
+ Type["NODE"] = "node";
257
+ Type["BROWSER"] = "browser";
258
+ Type["AUCTION_WORKLET"] = "auction-worklet";
259
+ Type["WORKLET"] = "worklet";
260
+ Type["TAB"] = "tab";
261
+ Type["NODE_WORKER"] = "node-worker";
262
+ })(Type || (Type = {}));
@@ -0,0 +1,382 @@
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
+ import * as Common from '../common/common.js';
5
+ import * as Host from '../host/host.js';
6
+ import * as Platform from '../platform/platform.js';
7
+ import { assertNotNullOrUndefined } from '../platform/platform.js';
8
+ import * as Root from '../root/root.js';
9
+ import { StubConnection } from './Connections.js';
10
+ import { RehydratingConnection } from './RehydratingConnection.js';
11
+ import { SDKModel } from './SDKModel.js';
12
+ import { Target, Type as TargetType } from './Target.js';
13
+ let targetManagerInstance;
14
+ export class TargetManager extends Common.ObjectWrapper.ObjectWrapper {
15
+ #targets;
16
+ #observers;
17
+ /* eslint-disable @typescript-eslint/no-explicit-any */
18
+ #modelListeners;
19
+ #modelObservers;
20
+ #scopedObservers;
21
+ /* eslint-enable @typescript-eslint/no-explicit-any */
22
+ #isSuspended;
23
+ #browserTarget;
24
+ #scopeTarget;
25
+ #defaultScopeSet;
26
+ #scopeChangeListeners;
27
+ constructor() {
28
+ super();
29
+ this.#targets = new Set();
30
+ this.#observers = new Set();
31
+ this.#modelListeners = new Platform.MapUtilities.Multimap();
32
+ this.#modelObservers = new Platform.MapUtilities.Multimap();
33
+ this.#isSuspended = false;
34
+ this.#browserTarget = null;
35
+ this.#scopeTarget = null;
36
+ this.#scopedObservers = new WeakSet();
37
+ this.#defaultScopeSet = false;
38
+ this.#scopeChangeListeners = new Set();
39
+ }
40
+ static instance({ forceNew } = { forceNew: false }) {
41
+ if (!targetManagerInstance || forceNew) {
42
+ targetManagerInstance = new TargetManager();
43
+ }
44
+ return targetManagerInstance;
45
+ }
46
+ static removeInstance() {
47
+ targetManagerInstance = undefined;
48
+ }
49
+ onInspectedURLChange(target) {
50
+ if (target !== this.#scopeTarget) {
51
+ return;
52
+ }
53
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.inspectedURLChanged(target.inspectedURL() || Platform.DevToolsPath.EmptyUrlString);
54
+ this.dispatchEventToListeners("InspectedURLChanged" /* Events.INSPECTED_URL_CHANGED */, target);
55
+ }
56
+ onNameChange(target) {
57
+ this.dispatchEventToListeners("NameChanged" /* Events.NAME_CHANGED */, target);
58
+ }
59
+ async suspendAllTargets(reason) {
60
+ if (this.#isSuspended) {
61
+ return;
62
+ }
63
+ this.#isSuspended = true;
64
+ this.dispatchEventToListeners("SuspendStateChanged" /* Events.SUSPEND_STATE_CHANGED */);
65
+ const suspendPromises = Array.from(this.#targets.values(), target => target.suspend(reason));
66
+ await Promise.all(suspendPromises);
67
+ }
68
+ async resumeAllTargets() {
69
+ if (!this.#isSuspended) {
70
+ return;
71
+ }
72
+ this.#isSuspended = false;
73
+ this.dispatchEventToListeners("SuspendStateChanged" /* Events.SUSPEND_STATE_CHANGED */);
74
+ const resumePromises = Array.from(this.#targets.values(), target => target.resume());
75
+ await Promise.all(resumePromises);
76
+ }
77
+ allTargetsSuspended() {
78
+ return this.#isSuspended;
79
+ }
80
+ models(modelClass, opts) {
81
+ const result = [];
82
+ for (const target of this.#targets) {
83
+ if (opts?.scoped && !this.isInScope(target)) {
84
+ continue;
85
+ }
86
+ const model = target.model(modelClass);
87
+ if (!model) {
88
+ continue;
89
+ }
90
+ result.push(model);
91
+ }
92
+ return result;
93
+ }
94
+ inspectedURL() {
95
+ const mainTarget = this.primaryPageTarget();
96
+ return mainTarget ? mainTarget.inspectedURL() : '';
97
+ }
98
+ observeModels(modelClass, observer, opts) {
99
+ const models = this.models(modelClass, opts);
100
+ this.#modelObservers.set(modelClass, observer);
101
+ if (opts?.scoped) {
102
+ this.#scopedObservers.add(observer);
103
+ }
104
+ for (const model of models) {
105
+ observer.modelAdded(model);
106
+ }
107
+ }
108
+ unobserveModels(modelClass, observer) {
109
+ this.#modelObservers.delete(modelClass, observer);
110
+ this.#scopedObservers.delete(observer);
111
+ }
112
+ modelAdded(modelClass, model, inScope) {
113
+ for (const observer of this.#modelObservers.get(modelClass).values()) {
114
+ if (!this.#scopedObservers.has(observer) || inScope) {
115
+ observer.modelAdded(model);
116
+ }
117
+ }
118
+ }
119
+ modelRemoved(modelClass, model, inScope) {
120
+ for (const observer of this.#modelObservers.get(modelClass).values()) {
121
+ if (!this.#scopedObservers.has(observer) || inScope) {
122
+ observer.modelRemoved(model);
123
+ }
124
+ }
125
+ }
126
+ addModelListener(modelClass, eventType, listener, thisObject, opts) {
127
+ const wrappedListener = (event) => {
128
+ if (!opts?.scoped || this.isInScope(event)) {
129
+ listener.call(thisObject, event);
130
+ }
131
+ };
132
+ for (const model of this.models(modelClass)) {
133
+ model.addEventListener(eventType, wrappedListener);
134
+ }
135
+ this.#modelListeners.set(eventType, { modelClass, thisObject, listener, wrappedListener });
136
+ }
137
+ removeModelListener(modelClass, eventType, listener, thisObject) {
138
+ if (!this.#modelListeners.has(eventType)) {
139
+ return;
140
+ }
141
+ let wrappedListener = null;
142
+ for (const info of this.#modelListeners.get(eventType)) {
143
+ if (info.modelClass === modelClass && info.listener === listener && info.thisObject === thisObject) {
144
+ wrappedListener = info.wrappedListener;
145
+ this.#modelListeners.delete(eventType, info);
146
+ }
147
+ }
148
+ if (wrappedListener) {
149
+ for (const model of this.models(modelClass)) {
150
+ model.removeEventListener(eventType, wrappedListener);
151
+ }
152
+ }
153
+ }
154
+ observeTargets(targetObserver, opts) {
155
+ if (this.#observers.has(targetObserver)) {
156
+ throw new Error('Observer can only be registered once');
157
+ }
158
+ if (opts?.scoped) {
159
+ this.#scopedObservers.add(targetObserver);
160
+ }
161
+ for (const target of this.#targets) {
162
+ if (!opts?.scoped || this.isInScope(target)) {
163
+ targetObserver.targetAdded(target);
164
+ }
165
+ }
166
+ this.#observers.add(targetObserver);
167
+ }
168
+ unobserveTargets(targetObserver) {
169
+ this.#observers.delete(targetObserver);
170
+ this.#scopedObservers.delete(targetObserver);
171
+ }
172
+ createTarget(id, name, type, parentTarget, sessionId, waitForDebuggerInPage, connection, targetInfo) {
173
+ const target = new Target(this, id, name, type, parentTarget, sessionId || '', this.#isSuspended, connection || null, targetInfo);
174
+ if (waitForDebuggerInPage) {
175
+ void target.pageAgent().invoke_waitForDebugger();
176
+ }
177
+ target.createModels(new Set(this.#modelObservers.keysArray()));
178
+ this.#targets.add(target);
179
+ const inScope = this.isInScope(target);
180
+ // Iterate over a copy. #observers might be modified during iteration.
181
+ for (const observer of [...this.#observers]) {
182
+ if (!this.#scopedObservers.has(observer) || inScope) {
183
+ observer.targetAdded(target);
184
+ }
185
+ }
186
+ for (const [modelClass, model] of target.models().entries()) {
187
+ this.modelAdded(modelClass, model, inScope);
188
+ }
189
+ for (const key of this.#modelListeners.keysArray()) {
190
+ for (const info of this.#modelListeners.get(key)) {
191
+ const model = target.model(info.modelClass);
192
+ if (model) {
193
+ model.addEventListener(key, info.wrappedListener);
194
+ }
195
+ }
196
+ }
197
+ if ((target === target.outermostTarget() &&
198
+ (target.type() !== TargetType.FRAME || target === this.primaryPageTarget())) &&
199
+ !this.#defaultScopeSet) {
200
+ this.setScopeTarget(target);
201
+ }
202
+ return target;
203
+ }
204
+ removeTarget(target) {
205
+ if (!this.#targets.has(target)) {
206
+ return;
207
+ }
208
+ const inScope = this.isInScope(target);
209
+ this.#targets.delete(target);
210
+ for (const modelClass of target.models().keys()) {
211
+ const model = target.models().get(modelClass);
212
+ assertNotNullOrUndefined(model);
213
+ this.modelRemoved(modelClass, model, inScope);
214
+ }
215
+ // Iterate over a copy. #observers might be modified during iteration.
216
+ for (const observer of [...this.#observers]) {
217
+ if (!this.#scopedObservers.has(observer) || inScope) {
218
+ observer.targetRemoved(target);
219
+ }
220
+ }
221
+ for (const key of this.#modelListeners.keysArray()) {
222
+ for (const info of this.#modelListeners.get(key)) {
223
+ const model = target.model(info.modelClass);
224
+ if (model) {
225
+ model.removeEventListener(key, info.wrappedListener);
226
+ }
227
+ }
228
+ }
229
+ }
230
+ targets() {
231
+ return [...this.#targets];
232
+ }
233
+ targetById(id) {
234
+ // TODO(dgozman): add a map #id -> #target.
235
+ return this.targets().find(target => target.id() === id) || null;
236
+ }
237
+ rootTarget() {
238
+ if (this.#targets.size === 0) {
239
+ return null;
240
+ }
241
+ return this.#targets.values().next().value ?? null;
242
+ }
243
+ primaryPageTarget() {
244
+ let target = this.rootTarget();
245
+ if (target?.type() === TargetType.TAB) {
246
+ target =
247
+ this.targets().find(t => t.parentTarget() === target && t.type() === TargetType.FRAME && !t.targetInfo()?.subtype?.length) ||
248
+ null;
249
+ }
250
+ return target;
251
+ }
252
+ browserTarget() {
253
+ return this.#browserTarget;
254
+ }
255
+ /**
256
+ * If this returns true, the target is not connected to a legit CDP server.
257
+ * However, it's not exhaustive, so some `false` responses may be misleading.
258
+ * (eg., tab URL of `devtools://devtools/bundled/devtools_app.html` uses a MainConnection but has no CDP server behind it).
259
+ */
260
+ hasFakeConnection() {
261
+ // There _may_ be a race condition hiding here on the router/connection creation.
262
+ // So we play it safe and consider "no connection yet" as "not fake".
263
+ const connection = this.primaryPageTarget()?.router()?.connection();
264
+ if (!connection) {
265
+ return false;
266
+ }
267
+ const isFakeConnection = (connection instanceof StubConnection) || (connection instanceof RehydratingConnection);
268
+ return isFakeConnection;
269
+ }
270
+ async maybeAttachInitialTarget() {
271
+ if (!Boolean(Root.Runtime.Runtime.queryParam('browserConnection'))) {
272
+ return false;
273
+ }
274
+ if (!this.#browserTarget) {
275
+ this.#browserTarget = new Target(this, /* #id*/ 'main', /* #name*/ 'browser', TargetType.BROWSER, /* #parentTarget*/ null,
276
+ /* #sessionId */ '', /* suspended*/ false, /* #connection*/ null, /* targetInfo*/ undefined);
277
+ this.#browserTarget.createModels(new Set(this.#modelObservers.keysArray()));
278
+ }
279
+ const targetId = await Host.InspectorFrontendHost.InspectorFrontendHostInstance.initialTargetId();
280
+ // Do not await for Target.autoAttachRelated to return, as it goes throguh the renderer and we don't want to block early
281
+ // at front-end initialization if a renderer is stuck. The rest of #target discovery and auto-attach process should happen
282
+ // asynchronously upon Target.attachedToTarget.
283
+ void this.#browserTarget.targetAgent().invoke_autoAttachRelated({
284
+ targetId,
285
+ waitForDebuggerOnStart: true,
286
+ });
287
+ return true;
288
+ }
289
+ clearAllTargetsForTest() {
290
+ this.#targets.clear();
291
+ }
292
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
293
+ isInScope(arg) {
294
+ if (!arg) {
295
+ return false;
296
+ }
297
+ if (isSDKModelEvent(arg)) {
298
+ arg = arg.source;
299
+ }
300
+ if (arg instanceof SDKModel) {
301
+ arg = arg.target();
302
+ }
303
+ while (arg && arg !== this.#scopeTarget) {
304
+ arg = arg.parentTarget();
305
+ }
306
+ return Boolean(arg) && arg === this.#scopeTarget;
307
+ }
308
+ // Sets a root of a scope substree.
309
+ // TargetManager API invoked with `scoped: true` will behave as if targets
310
+ // outside of the scope subtree don't exist. Concretely this means that
311
+ // target observers, model observers and model listeners won't be invoked for targets outside of the
312
+ // scope tree. This method will invoke targetRemoved and modelRemoved for
313
+ // objects in the previous scope, as if they disappear and then will invoke
314
+ // targetAdded and modelAdded as if they just appeared.
315
+ // Note that scopeTarget could be null, which will effectively prevent scoped
316
+ // observes from getting any events.
317
+ setScopeTarget(scopeTarget) {
318
+ if (scopeTarget === this.#scopeTarget) {
319
+ return;
320
+ }
321
+ for (const target of this.targets()) {
322
+ if (!this.isInScope(target)) {
323
+ continue;
324
+ }
325
+ for (const modelClass of this.#modelObservers.keysArray()) {
326
+ const model = target.models().get(modelClass);
327
+ if (!model) {
328
+ continue;
329
+ }
330
+ for (const observer of [...this.#modelObservers.get(modelClass)].filter(o => this.#scopedObservers.has(o))) {
331
+ observer.modelRemoved(model);
332
+ }
333
+ }
334
+ // Iterate over a copy. #observers might be modified during iteration.
335
+ for (const observer of [...this.#observers].filter(o => this.#scopedObservers.has(o))) {
336
+ observer.targetRemoved(target);
337
+ }
338
+ }
339
+ this.#scopeTarget = scopeTarget;
340
+ for (const target of this.targets()) {
341
+ if (!this.isInScope(target)) {
342
+ continue;
343
+ }
344
+ for (const observer of [...this.#observers].filter(o => this.#scopedObservers.has(o))) {
345
+ observer.targetAdded(target);
346
+ }
347
+ for (const [modelClass, model] of target.models().entries()) {
348
+ for (const observer of [...this.#modelObservers.get(modelClass)].filter(o => this.#scopedObservers.has(o))) {
349
+ observer.modelAdded(model);
350
+ }
351
+ }
352
+ }
353
+ for (const scopeChangeListener of this.#scopeChangeListeners) {
354
+ scopeChangeListener();
355
+ }
356
+ if (scopeTarget?.inspectedURL()) {
357
+ this.onInspectedURLChange(scopeTarget);
358
+ }
359
+ }
360
+ addScopeChangeListener(listener) {
361
+ this.#scopeChangeListeners.add(listener);
362
+ }
363
+ scopeTarget() {
364
+ return this.#scopeTarget;
365
+ }
366
+ }
367
+ export class Observer {
368
+ targetAdded(_target) {
369
+ }
370
+ targetRemoved(_target) {
371
+ }
372
+ }
373
+ export class SDKModelObserver {
374
+ modelAdded(_model) {
375
+ }
376
+ modelRemoved(_model) {
377
+ }
378
+ }
379
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
380
+ function isSDKModelEvent(arg) {
381
+ return 'source' in arg && arg.source instanceof SDKModel;
382
+ }
@@ -0,0 +1,49 @@
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
+ import * as Common from '../../core/common/common.js';
5
+ import { ResourceTreeModel } from './ResourceTreeModel.js';
6
+ // A thin wrapper class, mostly to enable instanceof-based revealing of traces to open in Timeline.
7
+ export class TraceObject {
8
+ traceEvents;
9
+ metadata;
10
+ constructor(traceEvents, metadata = {}) {
11
+ this.traceEvents = traceEvents;
12
+ this.metadata = metadata;
13
+ }
14
+ }
15
+ // Another thin wrapper class to enable revealing individual trace events (aka entries) in Timeline panel.
16
+ export class RevealableEvent {
17
+ event;
18
+ // Only Trace.Types.Events.Event are passed in, but we can't depend on that type from SDK
19
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
20
+ constructor(event) {
21
+ this.event = event;
22
+ }
23
+ }
24
+ /**
25
+ * Another wrapper class for revealing network requests in Network panel. The reason is the `Open in Network panel`
26
+ * option is handled by the context menu provider, which will add this option for all supporting types. And there are a
27
+ * lot of context menu providers that support `SDK.NetworkRequest.NetworkRequest`, for example `Override content` by
28
+ * PersistenceActions, but we so far just want the one to reveal in network panel, so add a new class which will only be
29
+ * supported by Network panel.
30
+ *
31
+ * Also we want to have a different behavior(select the network request) from the `SDK.NetworkRequest.NetworkRequest`
32
+ * (highlight the network request once).
33
+ */
34
+ export class RevealableNetworkRequest {
35
+ networkRequest;
36
+ constructor(networkRequest) {
37
+ this.networkRequest = networkRequest;
38
+ }
39
+ // Only Trace.Types.Events.SyntheticNetworkRequest are passed in, but we can't depend on that type from SDK
40
+ static create(event) {
41
+ const syntheticNetworkRequest = event;
42
+ // @ts-expect-error We don't have type checking here to confirm these events have .args.data.url.
43
+ const url = syntheticNetworkRequest.args.data.url;
44
+ const urlWithoutHash = Common.ParsedURL.ParsedURL.urlWithoutHash(url);
45
+ const resource = ResourceTreeModel.resourceForURL(url) ?? ResourceTreeModel.resourceForURL(urlWithoutHash);
46
+ const sdkNetworkRequest = resource?.request;
47
+ return sdkNetworkRequest ? new RevealableNetworkRequest(sdkNetworkRequest) : null;
48
+ }
49
+ }