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,346 @@
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 '../common/common.js';
5
+ import { UserVisibleError } from '../platform/platform.js';
6
+ export class EnhancedTracesParser {
7
+ #trace;
8
+ #scriptRundownEvents = [];
9
+ #scriptToV8Context = new Map();
10
+ #scriptToFrame = new Map();
11
+ #scriptToScriptSource = new Map();
12
+ #largeScriptToScriptSource = new Map();
13
+ #scriptToSourceLength = new Map();
14
+ #targets = [];
15
+ #executionContexts = [];
16
+ #scripts = [];
17
+ static enhancedTraceVersion = 1;
18
+ constructor(trace) {
19
+ this.#trace = trace;
20
+ // Initialize with the trace provided.
21
+ try {
22
+ this.parseEnhancedTrace();
23
+ }
24
+ catch (e) {
25
+ throw new UserVisibleError.UserVisibleError(e);
26
+ }
27
+ }
28
+ parseEnhancedTrace() {
29
+ for (const event of this.#trace.traceEvents) {
30
+ if (this.isTracingStartInBrowserEvent(event)) {
31
+ // constructs all targets by devtools.timeline TracingStartedInBrowser
32
+ const data = event.args?.data;
33
+ for (const frame of data.frames) {
34
+ if (frame.url === 'about:blank') {
35
+ continue;
36
+ }
37
+ const frameId = frame.frame;
38
+ if (!this.#targets.find(target => target.targetId === frameId)) {
39
+ const frameType = frame.isOutermostMainFrame ? 'page' : 'iframe';
40
+ this.#targets.push({
41
+ targetId: frameId,
42
+ type: frameType,
43
+ pid: frame.processId,
44
+ url: frame.url,
45
+ });
46
+ }
47
+ }
48
+ }
49
+ else if (this.isFunctionCallEvent(event)) {
50
+ // constructs all script to frame mapping with devtools.timeline FunctionCall
51
+ const data = event.args?.data;
52
+ if (data.isolate) {
53
+ this.#scriptToFrame.set(this.getScriptIsolateId(data.isolate, data.scriptId), data.frame);
54
+ }
55
+ }
56
+ else if (this.isTargetRundownEvent(event)) {
57
+ // Set up script to v8 context mapping
58
+ const data = event.args?.data;
59
+ this.#scriptToV8Context.set(this.getScriptIsolateId(data.isolate, data.scriptId), data.v8context);
60
+ this.#scriptToFrame.set(this.getScriptIsolateId(data.isolate, data.scriptId), data.frame);
61
+ // All the targets should've been added by the TracingStartedInBrowser event, but just in case we're missing some there
62
+ const frameId = data.frame;
63
+ if (!this.#targets.find(target => target.targetId === frameId)) {
64
+ this.#targets.push({
65
+ targetId: frameId,
66
+ type: data.frameType,
67
+ isolate: data.isolate,
68
+ pid: event.pid,
69
+ url: data.url,
70
+ });
71
+ }
72
+ // Add execution context, need to put back execution context id with info from other traces
73
+ if (!this.#executionContexts.find(executionContext => executionContext.v8Context === data.v8context)) {
74
+ this.#executionContexts.push({
75
+ id: -1,
76
+ origin: data.origin,
77
+ v8Context: data.v8context,
78
+ auxData: {
79
+ frameId: data.frame,
80
+ isDefault: data.isDefault,
81
+ type: data.contextType,
82
+ },
83
+ isolate: data.isolate,
84
+ });
85
+ }
86
+ }
87
+ else if (this.isScriptRundownEvent(event)) {
88
+ this.#scriptRundownEvents.push(event);
89
+ const data = event.args.data;
90
+ // Add script
91
+ if (!this.#scripts.find(script => script.scriptId === String(data.scriptId) && script.isolate === data.isolate)) {
92
+ this.#scripts.push({
93
+ scriptId: String(data.scriptId),
94
+ isolate: data.isolate,
95
+ executionContextId: data.executionContextId,
96
+ startLine: data.startLine ?? 0,
97
+ startColumn: data.startColumn ?? 0,
98
+ endLine: data.endLine ?? 0,
99
+ endColumn: data.endColumn ?? 0,
100
+ hash: data.hash,
101
+ isModule: data.isModule,
102
+ url: data.url,
103
+ hasSourceURL: data.hasSourceUrl,
104
+ sourceURL: data.sourceUrl,
105
+ sourceMapURL: data.sourceMapUrl,
106
+ pid: event.pid,
107
+ });
108
+ }
109
+ }
110
+ else if (this.isScriptRundownSourceEvent(event)) {
111
+ // Set up script to source text and length mapping
112
+ const data = event.args.data;
113
+ const scriptIsolateId = this.getScriptIsolateId(data.isolate, data.scriptId);
114
+ if ('splitIndex' in data && 'splitCount' in data) {
115
+ if (!this.#largeScriptToScriptSource.has(scriptIsolateId)) {
116
+ this.#largeScriptToScriptSource.set(scriptIsolateId, new Array(data.splitCount).fill(''));
117
+ }
118
+ const splittedSource = this.#largeScriptToScriptSource.get(scriptIsolateId);
119
+ if (splittedSource && data.sourceText) {
120
+ splittedSource[data.splitIndex] = data.sourceText;
121
+ }
122
+ }
123
+ else {
124
+ if (data.sourceText) {
125
+ this.#scriptToScriptSource.set(scriptIsolateId, data.sourceText);
126
+ }
127
+ if (data.length) {
128
+ this.#scriptToSourceLength.set(scriptIsolateId, data.length);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
134
+ data() {
135
+ // Put back execution context id
136
+ const v8ContextToExecutionContextId = new Map();
137
+ this.#scriptRundownEvents.forEach(scriptRundownEvent => {
138
+ const data = scriptRundownEvent.args.data;
139
+ const v8Context = this.#scriptToV8Context.get(this.getScriptIsolateId(data.isolate, data.scriptId));
140
+ if (v8Context) {
141
+ v8ContextToExecutionContextId.set(v8Context, data.executionContextId);
142
+ }
143
+ });
144
+ this.#executionContexts.forEach(executionContext => {
145
+ if (executionContext.v8Context) {
146
+ const id = v8ContextToExecutionContextId.get(executionContext.v8Context);
147
+ if (id) {
148
+ executionContext.id = id;
149
+ }
150
+ }
151
+ });
152
+ // Put back script source text and length
153
+ this.#scripts.forEach(script => {
154
+ const scriptIsolateId = this.getScriptIsolateId(script.isolate, script.scriptId);
155
+ if (this.#scriptToScriptSource.has(scriptIsolateId)) {
156
+ script.sourceText = this.#scriptToScriptSource.get(scriptIsolateId);
157
+ script.length = this.#scriptToSourceLength.get(scriptIsolateId);
158
+ }
159
+ else if (this.#largeScriptToScriptSource.has(scriptIsolateId)) {
160
+ const splittedSources = this.#largeScriptToScriptSource.get(scriptIsolateId);
161
+ if (splittedSources) {
162
+ script.sourceText = splittedSources.join('');
163
+ script.length = script.sourceText.length;
164
+ }
165
+ }
166
+ // put in the aux data
167
+ const linkedExecutionContext = this.#executionContexts.find(context => context.id === script.executionContextId && context.isolate === script.isolate);
168
+ if (linkedExecutionContext) {
169
+ script.auxData = linkedExecutionContext.auxData;
170
+ // If a script successfully mapped to an execution context and aux data, link script to frame
171
+ if (script.auxData?.frameId) {
172
+ this.#scriptToFrame.set(scriptIsolateId, script.auxData?.frameId);
173
+ }
174
+ }
175
+ });
176
+ for (const script of this.#scripts) {
177
+ // Resolve the source map from the provided metadata.
178
+ // If no map is found for a given source map url, no source map is passed to the debugger model.
179
+ // Encoded as a data url so that the debugger model makes no network request.
180
+ // NOTE: consider passing directly as object and hacking `parsedScriptSource` in DebuggerModel.ts to handle
181
+ // this fake event. Would avoid a lot of wasteful (de)serialization. Maybe add SDK.Script.hydratedSourceMap.
182
+ this.resolveSourceMap(script);
183
+ }
184
+ return this.groupContextsAndScriptsUnderTarget(this.#targets, this.#executionContexts, this.#scripts);
185
+ }
186
+ resolveSourceMap(script) {
187
+ if (script.sourceMapURL?.startsWith('data:')) {
188
+ return;
189
+ }
190
+ const sourceMap = this.getSourceMapFromMetadata(script);
191
+ if (!sourceMap) {
192
+ return;
193
+ }
194
+ // Note: this encoding + re-parsing overhead cost ~10ms per 1MB of JSON on my
195
+ // Mac M1 Pro.
196
+ // See https://crrev.com/c/6490409/comments/f294c12a_69781e24
197
+ const payload = encodeURIComponent(JSON.stringify(sourceMap));
198
+ script.sourceMapURL = `data:application/json;charset=utf-8,${payload}`;
199
+ }
200
+ getSourceMapFromMetadata(script) {
201
+ const { hasSourceURL, sourceURL, url, sourceMapURL, isolate, scriptId } = script;
202
+ if (!sourceMapURL || !this.#trace.metadata.sourceMaps) {
203
+ return;
204
+ }
205
+ const frame = this.#scriptToFrame.get(this.getScriptIsolateId(isolate, scriptId));
206
+ if (!frame) {
207
+ return;
208
+ }
209
+ const target = this.#targets.find(t => t.targetId === frame);
210
+ if (!target) {
211
+ return;
212
+ }
213
+ let resolvedSourceUrl = url;
214
+ if (hasSourceURL && sourceURL) {
215
+ const targetUrl = target.url;
216
+ resolvedSourceUrl = Common.ParsedURL.ParsedURL.completeURL(targetUrl, sourceURL) ?? sourceURL;
217
+ }
218
+ // Resolve the source map url. The value given by v8 may be relative, so resolve it here.
219
+ // This process should match the one in `SourceMapManager.attachSourceMap`.
220
+ const resolvedSourceMapUrl = Common.ParsedURL.ParsedURL.completeURL(resolvedSourceUrl, sourceMapURL);
221
+ if (!resolvedSourceMapUrl) {
222
+ return;
223
+ }
224
+ const { sourceMap } = this.#trace.metadata.sourceMaps.find(m => m.sourceMapUrl === resolvedSourceMapUrl) ?? {};
225
+ return sourceMap;
226
+ }
227
+ getScriptIsolateId(isolate, scriptId) {
228
+ return scriptId + '@' + isolate;
229
+ }
230
+ getExecutionContextIsolateId(isolate, executionContextId) {
231
+ return executionContextId + '@' + isolate;
232
+ }
233
+ isTraceEvent(event) {
234
+ return 'cat' in event && 'pid' in event &&
235
+ 'args' in event && 'data' in event.args;
236
+ }
237
+ isTargetRundownEvent(event) {
238
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.target-rundown';
239
+ }
240
+ isScriptRundownEvent(event) {
241
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.v8-source-rundown';
242
+ }
243
+ isScriptRundownSourceEvent(event) {
244
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources';
245
+ }
246
+ isTracingStartInBrowserEvent(event) {
247
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.timeline' &&
248
+ event.name === 'TracingStartedInBrowser';
249
+ }
250
+ isFunctionCallEvent(event) {
251
+ return this.isTraceEvent(event) && event.cat === 'devtools.timeline' && event.name === 'FunctionCall';
252
+ }
253
+ groupContextsAndScriptsUnderTarget(targets, executionContexts, scripts) {
254
+ const data = [];
255
+ const targetIds = new Set();
256
+ const targetToExecutionContexts = new Map();
257
+ // We want to keep track of how each execution context is linked to targets so we may use this
258
+ // information to link scripts with no target to a target
259
+ const executionContextIsolateToTarget = new Map();
260
+ const targetToScripts = new Map();
261
+ const orphanScripts = [];
262
+ // Initialize all the mapping needed
263
+ for (const target of targets) {
264
+ targetIds.add(target.targetId);
265
+ targetToExecutionContexts.set(target.targetId, []);
266
+ targetToScripts.set(target.targetId, []);
267
+ }
268
+ // Put all of the known execution contexts under respective targets
269
+ for (const executionContext of executionContexts) {
270
+ const frameId = executionContext.auxData?.frameId;
271
+ if (frameId && targetIds.has(frameId)) {
272
+ targetToExecutionContexts.get(frameId)?.push(executionContext);
273
+ executionContextIsolateToTarget.set(this.getExecutionContextIsolateId(executionContext.isolate, executionContext.id), frameId);
274
+ }
275
+ else {
276
+ console.error('Execution context can\'t be linked to a target', executionContext);
277
+ }
278
+ }
279
+ // Put all of the scripts under respective targets with collected information
280
+ for (const script of scripts) {
281
+ const scriptExecutionContextIsolateId = this.getExecutionContextIsolateId(script.isolate, script.executionContextId);
282
+ const scriptFrameId = script.auxData?.frameId;
283
+ if (script.auxData?.frameId && targetIds.has(scriptFrameId)) {
284
+ targetToScripts.get(scriptFrameId)?.push(script);
285
+ executionContextIsolateToTarget.set(scriptExecutionContextIsolateId, scriptFrameId);
286
+ }
287
+ else if (this.#scriptToFrame.has(this.getScriptIsolateId(script.isolate, script.scriptId))) {
288
+ const targetId = this.#scriptToFrame.get(this.getScriptIsolateId(script.isolate, script.scriptId));
289
+ if (targetId) {
290
+ targetToScripts.get(targetId)?.push(script);
291
+ executionContextIsolateToTarget.set(scriptExecutionContextIsolateId, targetId);
292
+ }
293
+ }
294
+ else {
295
+ // These scripts are not linked to any target
296
+ orphanScripts.push(script);
297
+ }
298
+ }
299
+ // If a script is not linked to a target, use executionContext@isolate to link to a target
300
+ // Using PID is the last resort
301
+ for (const orphanScript of orphanScripts) {
302
+ const orphanScriptExecutionContextIsolateId = this.getExecutionContextIsolateId(orphanScript.isolate, orphanScript.executionContextId);
303
+ if (orphanScriptExecutionContextIsolateId in executionContextIsolateToTarget) {
304
+ const frameId = executionContextIsolateToTarget.get(orphanScriptExecutionContextIsolateId);
305
+ if (frameId) {
306
+ targetToScripts.get(frameId)?.push(orphanScript);
307
+ }
308
+ }
309
+ else if (orphanScript.pid) {
310
+ const target = targets.find(target => target.pid === orphanScript.pid);
311
+ if (target) {
312
+ targetToScripts.get(target.targetId)?.push(orphanScript);
313
+ }
314
+ }
315
+ else {
316
+ console.error('Script can\'t be linked to any target', orphanScript);
317
+ }
318
+ }
319
+ // Now all the scripts are linked to a target, we want to make sure all the scripts are pointing to a valid
320
+ // execution context. If not, we will create an artificial execution context for the script
321
+ for (const target of targets) {
322
+ const targetId = target.targetId;
323
+ const executionContexts = targetToExecutionContexts.get(targetId) || [];
324
+ const scripts = targetToScripts.get(targetId) || [];
325
+ for (const script of scripts) {
326
+ if (!executionContexts.find(context => context.id === script.executionContextId)) {
327
+ const artificialContext = {
328
+ id: script.executionContextId,
329
+ origin: '',
330
+ v8Context: '',
331
+ auxData: {
332
+ frameId: targetId,
333
+ isDefault: false,
334
+ type: 'type',
335
+ },
336
+ isolate: script.isolate,
337
+ };
338
+ executionContexts.push(artificialContext);
339
+ }
340
+ }
341
+ // Finally, we put all the information into the data structure we want to return as.
342
+ data.push({ target, executionContexts, scripts });
343
+ }
344
+ return data;
345
+ }
346
+ }
@@ -0,0 +1,125 @@
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 { CategorizedBreakpoint } from './CategorizedBreakpoint.js';
5
+ import { SDKModel } from './SDKModel.js';
6
+ import { TargetManager } from './TargetManager.js';
7
+ export class EventBreakpointsModel extends SDKModel {
8
+ agent;
9
+ constructor(target) {
10
+ super(target);
11
+ this.agent = target.eventBreakpointsAgent();
12
+ }
13
+ }
14
+ // This implementation (as opposed to similar class in DOMDebuggerModel) is for
15
+ // instrumentation breakpoints in targets that run JS but do not have a DOM.
16
+ class EventListenerBreakpoint extends CategorizedBreakpoint {
17
+ setEnabled(enabled) {
18
+ if (this.enabled() === enabled) {
19
+ return;
20
+ }
21
+ super.setEnabled(enabled);
22
+ for (const model of TargetManager.instance().models(EventBreakpointsModel)) {
23
+ this.updateOnModel(model);
24
+ }
25
+ }
26
+ updateOnModel(model) {
27
+ if (this.enabled()) {
28
+ void model.agent.invoke_setInstrumentationBreakpoint({ eventName: this.name });
29
+ }
30
+ else {
31
+ void model.agent.invoke_removeInstrumentationBreakpoint({ eventName: this.name });
32
+ }
33
+ }
34
+ static instrumentationPrefix = 'instrumentation:';
35
+ }
36
+ let eventBreakpointManagerInstance;
37
+ export class EventBreakpointsManager {
38
+ #eventListenerBreakpoints = [];
39
+ constructor() {
40
+ this.createInstrumentationBreakpoints("auction-worklet" /* Category.AUCTION_WORKLET */, [
41
+ "beforeBidderWorkletBiddingStart" /* InstrumentationNames.BEFORE_BIDDER_WORKLET_BIDDING_START */,
42
+ "beforeBidderWorkletReportingStart" /* InstrumentationNames.BEFORE_BIDDER_WORKLET_REPORTING_START */,
43
+ "beforeSellerWorkletScoringStart" /* InstrumentationNames.BEFORE_SELLER_WORKLET_SCORING_START */,
44
+ "beforeSellerWorkletReportingStart" /* InstrumentationNames.BEFORE_SELLER_WORKLET_REPORTING_START */,
45
+ ]);
46
+ this.createInstrumentationBreakpoints("animation" /* Category.ANIMATION */, [
47
+ "requestAnimationFrame" /* InstrumentationNames.REQUEST_ANIMATION_FRAME */,
48
+ "cancelAnimationFrame" /* InstrumentationNames.CANCEL_ANIMATION_FRAME */,
49
+ "requestAnimationFrame.callback" /* InstrumentationNames.REQUEST_ANIMATION_FRAME_CALLBACK */,
50
+ ]);
51
+ this.createInstrumentationBreakpoints("canvas" /* Category.CANVAS */, [
52
+ "canvasContextCreated" /* InstrumentationNames.CANVAS_CONTEXT_CREATED */,
53
+ "webglErrorFired" /* InstrumentationNames.WEBGL_ERROR_FIRED */,
54
+ "webglWarningFired" /* InstrumentationNames.WEBGL_WARNING_FIRED */,
55
+ ]);
56
+ this.createInstrumentationBreakpoints("geolocation" /* Category.GEOLOCATION */, [
57
+ "Geolocation.getCurrentPosition" /* InstrumentationNames.GEOLOCATION_GET_CURRENT_POSITION */,
58
+ "Geolocation.watchPosition" /* InstrumentationNames.GEOLOCATION_WATCH_POSITION */,
59
+ ]);
60
+ this.createInstrumentationBreakpoints("notification" /* Category.NOTIFICATION */, [
61
+ "Notification.requestPermission" /* InstrumentationNames.NOTIFICATION_REQUEST_PERMISSION */,
62
+ ]);
63
+ this.createInstrumentationBreakpoints("parse" /* Category.PARSE */, [
64
+ "Element.setInnerHTML" /* InstrumentationNames.ELEMENT_SET_INNER_HTML */,
65
+ "Document.write" /* InstrumentationNames.DOCUMENT_WRITE */,
66
+ ]);
67
+ this.createInstrumentationBreakpoints("script" /* Category.SCRIPT */, [
68
+ "scriptFirstStatement" /* InstrumentationNames.SCRIPT_FIRST_STATEMENT */,
69
+ "scriptBlockedByCSP" /* InstrumentationNames.SCRIPT_BLOCKED_BY_CSP */,
70
+ ]);
71
+ this.createInstrumentationBreakpoints("shared-storage-worklet" /* Category.SHARED_STORAGE_WORKLET */, [
72
+ "sharedStorageWorkletScriptFirstStatement" /* InstrumentationNames.SHARED_STORAGE_WORKLET_SCRIPT_FIRST_STATEMENT */,
73
+ ]);
74
+ this.createInstrumentationBreakpoints("timer" /* Category.TIMER */, [
75
+ "setTimeout" /* InstrumentationNames.SET_TIMEOUT */,
76
+ "clearTimeout" /* InstrumentationNames.CLEAR_TIMEOUT */,
77
+ "setTimeout.callback" /* InstrumentationNames.SET_TIMEOUT_CALLBACK */,
78
+ "setInterval" /* InstrumentationNames.SET_INTERVAL */,
79
+ "clearInterval" /* InstrumentationNames.CLEAR_INTERVAL */,
80
+ "setInterval.callback" /* InstrumentationNames.SET_INTERVAL_CALLBACK */,
81
+ ]);
82
+ this.createInstrumentationBreakpoints("window" /* Category.WINDOW */, [
83
+ "DOMWindow.close" /* InstrumentationNames.DOM_WINDOW_CLOSE */,
84
+ ]);
85
+ this.createInstrumentationBreakpoints("web-audio" /* Category.WEB_AUDIO */, [
86
+ "audioContextCreated" /* InstrumentationNames.AUDIO_CONTEXT_CREATED */,
87
+ "audioContextClosed" /* InstrumentationNames.AUDIO_CONTEXT_CLOSED */,
88
+ "audioContextResumed" /* InstrumentationNames.AUDIO_CONTEXT_RESUMED */,
89
+ "audioContextSuspended" /* InstrumentationNames.AUDIO_CONTEXT_SUSPENDED */,
90
+ ]);
91
+ TargetManager.instance().observeModels(EventBreakpointsModel, this);
92
+ }
93
+ static instance(opts = { forceNew: null }) {
94
+ const { forceNew } = opts;
95
+ if (!eventBreakpointManagerInstance || forceNew) {
96
+ eventBreakpointManagerInstance = new EventBreakpointsManager();
97
+ }
98
+ return eventBreakpointManagerInstance;
99
+ }
100
+ createInstrumentationBreakpoints(category, instrumentationNames) {
101
+ for (const instrumentationName of instrumentationNames) {
102
+ this.#eventListenerBreakpoints.push(new EventListenerBreakpoint(category, instrumentationName));
103
+ }
104
+ }
105
+ eventListenerBreakpoints() {
106
+ return this.#eventListenerBreakpoints.slice();
107
+ }
108
+ resolveEventListenerBreakpoint({ eventName }) {
109
+ if (!eventName.startsWith(EventListenerBreakpoint.instrumentationPrefix)) {
110
+ return null;
111
+ }
112
+ const instrumentationName = eventName.substring(EventListenerBreakpoint.instrumentationPrefix.length);
113
+ return this.#eventListenerBreakpoints.find(b => b.name === instrumentationName) || null;
114
+ }
115
+ modelAdded(eventBreakpointModel) {
116
+ for (const breakpoint of this.#eventListenerBreakpoints) {
117
+ if (breakpoint.enabled()) {
118
+ breakpoint.updateOnModel(eventBreakpointModel);
119
+ }
120
+ }
121
+ }
122
+ modelRemoved(_eventBreakpointModel) {
123
+ }
124
+ }
125
+ SDKModel.register(EventBreakpointsModel, { capabilities: 524288 /* Capability.EVENT_BREAKPOINTS */, autostart: false });
@@ -0,0 +1,4 @@
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
+ export {};
@@ -0,0 +1,199 @@
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
+ import * as Common from '../common/common.js';
5
+ import { Events as ResourceTreeModelEvents, ResourceTreeModel } from './ResourceTreeModel.js';
6
+ import { TargetManager } from './TargetManager.js';
7
+ let frameManagerInstance = null;
8
+ /**
9
+ * The FrameManager is a central storage for all #frames. It collects #frames from all
10
+ * ResourceTreeModel-instances (one per target), so that #frames can be found by id
11
+ * without needing to know their target.
12
+ */
13
+ export class FrameManager extends Common.ObjectWrapper.ObjectWrapper {
14
+ #eventListeners = new WeakMap();
15
+ // Maps frameIds to #frames and a count of how many ResourceTreeModels contain this frame.
16
+ // (OOPIFs are usually first attached to a new target and then detached from their old target,
17
+ // therefore being contained in 2 models for a short period of time.)
18
+ #frames = new Map();
19
+ #framesForTarget = new Map();
20
+ #outermostFrame = null;
21
+ #transferringFramesDataCache = new Map();
22
+ #awaitedFrames = new Map();
23
+ constructor() {
24
+ super();
25
+ TargetManager.instance().observeModels(ResourceTreeModel, this);
26
+ }
27
+ static instance({ forceNew } = { forceNew: false }) {
28
+ if (!frameManagerInstance || forceNew) {
29
+ frameManagerInstance = new FrameManager();
30
+ }
31
+ return frameManagerInstance;
32
+ }
33
+ static removeInstance() {
34
+ frameManagerInstance = null;
35
+ }
36
+ modelAdded(resourceTreeModel) {
37
+ const addListener = resourceTreeModel.addEventListener(ResourceTreeModelEvents.FrameAdded, this.frameAdded, this);
38
+ const detachListener = resourceTreeModel.addEventListener(ResourceTreeModelEvents.FrameDetached, this.frameDetached, this);
39
+ const navigatedListener = resourceTreeModel.addEventListener(ResourceTreeModelEvents.FrameNavigated, this.frameNavigated, this);
40
+ const resourceAddedListener = resourceTreeModel.addEventListener(ResourceTreeModelEvents.ResourceAdded, this.resourceAdded, this);
41
+ this.#eventListeners.set(resourceTreeModel, [addListener, detachListener, navigatedListener, resourceAddedListener]);
42
+ this.#framesForTarget.set(resourceTreeModel.target().id(), new Set());
43
+ }
44
+ modelRemoved(resourceTreeModel) {
45
+ const listeners = this.#eventListeners.get(resourceTreeModel);
46
+ if (listeners) {
47
+ Common.EventTarget.removeEventListeners(listeners);
48
+ }
49
+ // Iterate over this model's #frames and decrease their count or remove them.
50
+ // (The ResourceTreeModel does not send FrameDetached events when a model
51
+ // is removed.)
52
+ const frameSet = this.#framesForTarget.get(resourceTreeModel.target().id());
53
+ if (frameSet) {
54
+ for (const frameId of frameSet) {
55
+ this.decreaseOrRemoveFrame(frameId);
56
+ }
57
+ }
58
+ this.#framesForTarget.delete(resourceTreeModel.target().id());
59
+ }
60
+ frameAdded(event) {
61
+ const frame = event.data;
62
+ const frameData = this.#frames.get(frame.id);
63
+ // If the frame is already in the map, increase its count, otherwise add it to the map.
64
+ if (frameData) {
65
+ // In order to not lose the following attributes of a frame during
66
+ // an OOPIF transfer we need to copy them to the new frame
67
+ frame.setCreationStackTrace(frameData.frame.getCreationStackTraceData());
68
+ this.#frames.set(frame.id, { frame, count: frameData.count + 1 });
69
+ }
70
+ else {
71
+ // If the transferring frame's detached event is received before its frame added
72
+ // event in the new target, the frame's cached attributes are reassigned.
73
+ const cachedFrameAttributes = this.#transferringFramesDataCache.get(frame.id);
74
+ if (cachedFrameAttributes?.creationStackTrace && cachedFrameAttributes?.creationStackTraceTarget) {
75
+ frame.setCreationStackTrace({
76
+ creationStackTrace: cachedFrameAttributes.creationStackTrace,
77
+ creationStackTraceTarget: cachedFrameAttributes.creationStackTraceTarget,
78
+ });
79
+ }
80
+ this.#frames.set(frame.id, { frame, count: 1 });
81
+ this.#transferringFramesDataCache.delete(frame.id);
82
+ }
83
+ this.resetOutermostFrame();
84
+ // Add the frameId to the the targetId's set of frameIds.
85
+ const frameSet = this.#framesForTarget.get(frame.resourceTreeModel().target().id());
86
+ if (frameSet) {
87
+ frameSet.add(frame.id);
88
+ }
89
+ this.dispatchEventToListeners("FrameAddedToTarget" /* Events.FRAME_ADDED_TO_TARGET */, { frame });
90
+ this.resolveAwaitedFrame(frame);
91
+ }
92
+ frameDetached(event) {
93
+ const { frame, isSwap } = event.data;
94
+ // Decrease the frame's count or remove it entirely from the map.
95
+ this.decreaseOrRemoveFrame(frame.id);
96
+ // If the transferring frame's detached event is received before its frame
97
+ // added event in the new target, we persist some attributes of the frame here
98
+ // so that later on the frame added event in the new target they can be reassigned.
99
+ if (isSwap && !this.#frames.get(frame.id)) {
100
+ const traceData = frame.getCreationStackTraceData();
101
+ const cachedFrameAttributes = {
102
+ ...(traceData.creationStackTrace && { creationStackTrace: traceData.creationStackTrace }),
103
+ ...(traceData.creationStackTrace && { creationStackTraceTarget: traceData.creationStackTraceTarget }),
104
+ };
105
+ this.#transferringFramesDataCache.set(frame.id, cachedFrameAttributes);
106
+ }
107
+ // Remove the frameId from the target's set of frameIds.
108
+ const frameSet = this.#framesForTarget.get(frame.resourceTreeModel().target().id());
109
+ if (frameSet) {
110
+ frameSet.delete(frame.id);
111
+ }
112
+ }
113
+ frameNavigated(event) {
114
+ const frame = event.data;
115
+ this.dispatchEventToListeners("FrameNavigated" /* Events.FRAME_NAVIGATED */, { frame });
116
+ if (frame.isOutermostFrame()) {
117
+ this.dispatchEventToListeners("OutermostFrameNavigated" /* Events.OUTERMOST_FRAME_NAVIGATED */, { frame });
118
+ }
119
+ }
120
+ resourceAdded(event) {
121
+ this.dispatchEventToListeners("ResourceAdded" /* Events.RESOURCE_ADDED */, { resource: event.data });
122
+ }
123
+ decreaseOrRemoveFrame(frameId) {
124
+ const frameData = this.#frames.get(frameId);
125
+ if (frameData) {
126
+ if (frameData.count === 1) {
127
+ this.#frames.delete(frameId);
128
+ this.resetOutermostFrame();
129
+ this.dispatchEventToListeners("FrameRemoved" /* Events.FRAME_REMOVED */, { frameId });
130
+ }
131
+ else {
132
+ frameData.count--;
133
+ }
134
+ }
135
+ }
136
+ /**
137
+ * Looks for the outermost frame in `#frames` and sets `#outermostFrame` accordingly.
138
+ *
139
+ * Important: This method needs to be called everytime `#frames` is updated.
140
+ */
141
+ resetOutermostFrame() {
142
+ const outermostFrames = this.getAllFrames().filter(frame => frame.isOutermostFrame());
143
+ this.#outermostFrame = outermostFrames.length > 0 ? outermostFrames[0] : null;
144
+ }
145
+ /**
146
+ * Returns the ResourceTreeFrame with a given frameId.
147
+ * When a frame is being detached a new ResourceTreeFrame but with the same
148
+ * frameId is created. Consequently getFrame() will return a different
149
+ * ResourceTreeFrame after detachment. Callers of getFrame() should therefore
150
+ * immediately use the function return value and not store it for later use.
151
+ */
152
+ getFrame(frameId) {
153
+ const frameData = this.#frames.get(frameId);
154
+ if (frameData) {
155
+ return frameData.frame;
156
+ }
157
+ return null;
158
+ }
159
+ getAllFrames() {
160
+ return Array.from(this.#frames.values(), frameData => frameData.frame);
161
+ }
162
+ getOutermostFrame() {
163
+ return this.#outermostFrame;
164
+ }
165
+ async getOrWaitForFrame(frameId, notInTarget) {
166
+ const frame = this.getFrame(frameId);
167
+ if (frame && (!notInTarget || notInTarget !== frame.resourceTreeModel().target())) {
168
+ return frame;
169
+ }
170
+ return await new Promise(resolve => {
171
+ const waiting = this.#awaitedFrames.get(frameId);
172
+ if (waiting) {
173
+ waiting.push({ notInTarget, resolve });
174
+ }
175
+ else {
176
+ this.#awaitedFrames.set(frameId, [{ notInTarget, resolve }]);
177
+ }
178
+ });
179
+ }
180
+ resolveAwaitedFrame(frame) {
181
+ const waiting = this.#awaitedFrames.get(frame.id);
182
+ if (!waiting) {
183
+ return;
184
+ }
185
+ const newWaiting = waiting.filter(({ notInTarget, resolve }) => {
186
+ if (!notInTarget || notInTarget !== frame.resourceTreeModel().target()) {
187
+ resolve(frame);
188
+ return false;
189
+ }
190
+ return true;
191
+ });
192
+ if (newWaiting.length > 0) {
193
+ this.#awaitedFrames.set(frame.id, newWaiting);
194
+ }
195
+ else {
196
+ this.#awaitedFrames.delete(frame.id);
197
+ }
198
+ }
199
+ }