chrome-devtools-mcp-for-extension 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +268 -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 +144 -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 +1252 -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 +186 -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 +957 -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 +60 -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 +802 -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 +4 -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 +1284 -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 +1336 -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 +350 -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 +1916 -0
  116. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +1668 -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 +286 -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 +651 -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 +386 -0
  150. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +52 -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 +1561 -0
  157. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +7514 -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 +262 -0
  160. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +979 -0
  161. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +613 -0
  162. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +139 -0
  163. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +372 -0
  164. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +132 -0
  165. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +105 -0
  166. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +243 -0
  167. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +407 -0
  168. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +130 -0
  169. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +992 -0
  170. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +574 -0
  171. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +112 -0
  172. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +186 -0
  173. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +60 -0
  174. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +107 -0
  175. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +244 -0
  176. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +473 -0
  177. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +399 -0
  178. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +87 -0
  179. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +181 -0
  180. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +268 -0
  181. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +55 -0
  182. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +20 -0
  183. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +514 -0
  184. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +90 -0
  185. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +6 -0
  186. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +283 -0
  187. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +4 -0
  188. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +775 -0
  189. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +1706 -0
  190. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +6 -0
  191. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +131 -0
  192. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +77 -0
  193. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +6 -0
  194. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +347 -0
  195. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +4 -0
  196. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +67 -0
  197. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +494 -0
  198. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +49 -0
  199. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +73 -0
  200. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +7 -0
  201. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +4 -0
  202. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +256 -0
  203. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +120 -0
  204. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +6 -0
  205. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +626 -0
  206. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +59 -0
  207. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeTreeCache.js +32 -0
  208. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +7 -0
  209. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +4 -0
  210. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +67 -0
  211. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +97 -0
  212. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +113 -0
  213. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +5 -0
  214. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +7 -0
  215. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +32 -0
  216. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +173 -0
  217. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +30 -0
  218. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +32 -0
  219. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +79 -0
  220. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +69 -0
  221. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +35 -0
  222. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +231 -0
  223. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +355 -0
  224. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +68 -0
  225. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +14 -0
  226. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +122 -0
  227. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +81 -0
  228. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +370 -0
  229. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +166 -0
  230. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +114 -0
  231. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +555 -0
  232. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +815 -0
  233. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +44 -0
  234. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +76 -0
  235. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +162 -0
  236. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +191 -0
  237. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +118 -0
  238. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +50 -0
  239. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +592 -0
  240. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +10 -0
  241. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +109 -0
  242. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +26 -0
  243. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +187 -0
  244. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +162 -0
  245. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +21 -0
  246. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +263 -0
  247. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +148 -0
  248. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +483 -0
  249. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +35 -0
  250. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +147 -0
  251. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +180 -0
  252. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +126 -0
  253. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +85 -0
  254. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +27 -0
  255. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +103 -0
  256. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +445 -0
  257. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +21 -0
  258. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +401 -0
  259. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +33 -0
  260. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +540 -0
  261. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +42 -0
  262. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +349 -0
  263. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +346 -0
  264. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +207 -0
  265. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +97 -0
  266. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +251 -0
  267. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +71 -0
  268. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +101 -0
  269. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +317 -0
  270. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +183 -0
  271. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +134 -0
  272. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +33 -0
  273. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +7 -0
  274. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +163 -0
  275. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +1 -0
  276. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +41 -0
  277. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +102 -0
  278. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +495 -0
  279. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +74 -0
  280. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +184 -0
  281. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +806 -0
  282. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +254 -0
  283. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +10 -0
  284. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +488 -0
  285. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +208 -0
  286. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +340 -0
  287. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +180 -0
  288. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +257 -0
  289. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +89 -0
  290. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +81 -0
  291. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +160 -0
  292. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +117 -0
  293. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +262 -0
  294. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +188 -0
  295. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +182 -0
  296. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +88 -0
  297. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +21 -0
  298. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +199 -0
  299. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +544 -0
  300. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +191 -0
  301. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +135 -0
  302. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +92 -0
  303. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +97 -0
  304. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +101 -0
  305. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +9 -0
  306. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +18 -0
  307. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +6 -0
  308. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +488 -0
  309. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +5 -0
  310. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +276 -0
  311. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +63 -0
  312. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +82 -0
  313. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +551 -0
  314. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +7 -0
  315. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +9 -0
  316. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +136 -0
  317. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +67 -0
  318. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +68 -0
  319. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +48 -0
  320. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +68 -0
  321. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +101 -0
  322. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +64 -0
  323. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +78 -0
  324. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +11 -0
  325. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +115 -0
  326. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +42 -0
  327. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +47 -0
  328. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +134 -0
  329. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +450 -0
  330. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +154 -0
  331. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +9 -0
  332. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +24 -0
  333. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +4 -0
  334. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +17 -0
  335. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +18 -0
  336. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +37 -0
  337. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +57 -0
  338. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +4 -0
  339. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +15 -0
  340. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +574 -0
  341. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +9 -0
  342. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +201 -0
  343. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +4 -0
  344. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +64 -0
  345. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +511 -0
  346. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +113 -0
  347. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +563 -0
  348. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +204 -0
  349. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +9 -0
  350. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +1 -0
  351. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +202 -0
  352. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +2 -0
  353. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +940 -0
  354. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +26 -0
  355. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +196 -0
  356. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +226 -0
  357. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +4 -0
  358. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +394 -0
  359. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +24 -0
  360. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +283 -0
  361. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +7 -0
  362. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +9 -0
  363. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +84 -0
  364. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +4 -0
  365. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +20 -0
  366. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +146 -0
  367. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +2 -0
  368. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +2 -0
  369. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +118 -0
  370. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +40 -0
  371. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +26 -0
  372. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +4 -0
  373. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +215 -0
  374. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +4 -0
  375. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +4 -0
  376. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +4 -0
  377. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +2 -0
  378. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +2 -0
  379. package/build/src/McpContext.js +283 -0
  380. package/build/src/McpResponse.js +223 -0
  381. package/build/src/Mutex.js +40 -0
  382. package/build/src/PageCollector.js +68 -0
  383. package/build/src/WaitForHelper.js +134 -0
  384. package/build/src/browser.js +493 -0
  385. package/build/src/cli.js +156 -0
  386. package/build/src/formatters/consoleFormatter.js +73 -0
  387. package/build/src/formatters/networkFormatter.js +34 -0
  388. package/build/src/formatters/snapshotFormatter.js +75 -0
  389. package/build/src/index.js +13 -0
  390. package/build/src/logger.js +27 -0
  391. package/build/src/main.js +139 -0
  392. package/build/src/system-profile.js +181 -0
  393. package/build/src/tools/ToolDefinition.js +9 -0
  394. package/build/src/tools/bookmarks.js +310 -0
  395. package/build/src/tools/categories.js +15 -0
  396. package/build/src/tools/console.js +19 -0
  397. package/build/src/tools/emulation.js +61 -0
  398. package/build/src/tools/extensions.js +184 -0
  399. package/build/src/tools/input.js +201 -0
  400. package/build/src/tools/network.js +77 -0
  401. package/build/src/tools/pages.js +188 -0
  402. package/build/src/tools/performance.js +145 -0
  403. package/build/src/tools/screenshot.js +65 -0
  404. package/build/src/tools/script.js +57 -0
  405. package/build/src/tools/snapshot.js +42 -0
  406. package/build/src/tools/webstore-auto-screenshot.js +159 -0
  407. package/build/src/tools/webstore-submission.js +332 -0
  408. package/build/src/trace-processing/parse.js +93 -0
  409. package/build/src/utils/pagination.js +49 -0
  410. package/package.json +79 -0
@@ -0,0 +1,350 @@
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.isTracingStartedInBrowser(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.isRundownScriptCompiled(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: String(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: String(data.isolate),
84
+ name: data.origin,
85
+ uniqueId: `${data.v8context}-${data.isolate}`,
86
+ });
87
+ }
88
+ }
89
+ else if (this.isRundownScript(event)) {
90
+ this.#scriptRundownEvents.push(event);
91
+ const data = event.args.data;
92
+ // Add script
93
+ if (!this.#scripts.find(script => script.scriptId === String(data.scriptId) && script.isolate === String(data.isolate))) {
94
+ this.#scripts.push({
95
+ scriptId: String(data.scriptId),
96
+ isolate: String(data.isolate),
97
+ buildId: '',
98
+ executionContextId: data.executionContextId,
99
+ startLine: data.startLine ?? 0,
100
+ startColumn: data.startColumn ?? 0,
101
+ endLine: data.endLine ?? 0,
102
+ endColumn: data.endColumn ?? 0,
103
+ hash: data.hash ?? '',
104
+ isModule: data.isModule,
105
+ url: data.url ?? '',
106
+ hasSourceURL: data.hasSourceUrl,
107
+ sourceURL: data.sourceUrl ?? '',
108
+ sourceMapURL: data.sourceMapUrl,
109
+ pid: event.pid,
110
+ });
111
+ }
112
+ }
113
+ else if (this.isRundownScriptSource(event)) {
114
+ // Set up script to source text and length mapping
115
+ const data = event.args.data;
116
+ const scriptIsolateId = this.getScriptIsolateId(data.isolate, data.scriptId);
117
+ if ('splitIndex' in data && 'splitCount' in data) {
118
+ if (!this.#largeScriptToScriptSource.has(scriptIsolateId)) {
119
+ this.#largeScriptToScriptSource.set(scriptIsolateId, new Array(data.splitCount).fill(''));
120
+ }
121
+ const splittedSource = this.#largeScriptToScriptSource.get(scriptIsolateId);
122
+ if (splittedSource && data.sourceText) {
123
+ splittedSource[data.splitIndex] = data.sourceText;
124
+ }
125
+ }
126
+ else {
127
+ if (data.sourceText) {
128
+ this.#scriptToScriptSource.set(scriptIsolateId, data.sourceText);
129
+ }
130
+ if (data.length) {
131
+ this.#scriptToSourceLength.set(scriptIsolateId, data.length);
132
+ }
133
+ }
134
+ }
135
+ }
136
+ }
137
+ data() {
138
+ // Put back execution context id
139
+ const v8ContextToExecutionContextId = new Map();
140
+ this.#scriptRundownEvents.forEach(scriptRundownEvent => {
141
+ const data = scriptRundownEvent.args.data;
142
+ const v8Context = this.#scriptToV8Context.get(this.getScriptIsolateId(data.isolate, data.scriptId));
143
+ if (v8Context) {
144
+ v8ContextToExecutionContextId.set(v8Context, data.executionContextId);
145
+ }
146
+ });
147
+ this.#executionContexts.forEach(executionContext => {
148
+ if (executionContext.v8Context) {
149
+ const id = v8ContextToExecutionContextId.get(executionContext.v8Context);
150
+ if (id) {
151
+ executionContext.id = id;
152
+ }
153
+ }
154
+ });
155
+ // Put back script source text and length
156
+ this.#scripts.forEach(script => {
157
+ const scriptIsolateId = this.getScriptIsolateId(script.isolate, script.scriptId);
158
+ if (this.#scriptToScriptSource.has(scriptIsolateId)) {
159
+ script.sourceText = this.#scriptToScriptSource.get(scriptIsolateId);
160
+ script.length = this.#scriptToSourceLength.get(scriptIsolateId);
161
+ }
162
+ else if (this.#largeScriptToScriptSource.has(scriptIsolateId)) {
163
+ const splittedSources = this.#largeScriptToScriptSource.get(scriptIsolateId);
164
+ if (splittedSources) {
165
+ script.sourceText = splittedSources.join('');
166
+ script.length = script.sourceText.length;
167
+ }
168
+ }
169
+ // put in the aux data
170
+ const linkedExecutionContext = this.#executionContexts.find(context => context.id === script.executionContextId && context.isolate === script.isolate);
171
+ if (linkedExecutionContext) {
172
+ script.executionContextAuxData = linkedExecutionContext.auxData;
173
+ // If a script successfully mapped to an execution context and aux data, link script to frame
174
+ if (script.executionContextAuxData?.frameId) {
175
+ this.#scriptToFrame.set(scriptIsolateId, script.executionContextAuxData?.frameId);
176
+ }
177
+ }
178
+ });
179
+ for (const script of this.#scripts) {
180
+ // Resolve the source map from the provided metadata.
181
+ // If no map is found for a given source map url, no source map is passed to the debugger model.
182
+ // Encoded as a data url so that the debugger model makes no network request.
183
+ // NOTE: consider passing directly as object and hacking `parsedScriptSource` in DebuggerModel.ts to handle
184
+ // this fake event. Would avoid a lot of wasteful (de)serialization. Maybe add SDK.Script.hydratedSourceMap.
185
+ this.resolveSourceMap(script);
186
+ }
187
+ return this.groupContextsAndScriptsUnderTarget(this.#targets, this.#executionContexts, this.#scripts);
188
+ }
189
+ resolveSourceMap(script) {
190
+ if (script.sourceMapURL?.startsWith('data:')) {
191
+ return;
192
+ }
193
+ const sourceMap = this.getSourceMapFromMetadata(script);
194
+ if (!sourceMap) {
195
+ return;
196
+ }
197
+ // Note: this encoding + re-parsing overhead cost ~10ms per 1MB of JSON on my
198
+ // Mac M1 Pro.
199
+ // See https://crrev.com/c/6490409/comments/f294c12a_69781e24
200
+ const payload = encodeURIComponent(JSON.stringify(sourceMap));
201
+ script.sourceMapURL = `data:application/json;charset=utf-8,${payload}`;
202
+ }
203
+ getSourceMapFromMetadata(script) {
204
+ const { hasSourceURL, sourceURL, url, sourceMapURL, isolate, scriptId } = script;
205
+ if (!sourceMapURL || !this.#trace.metadata.sourceMaps) {
206
+ return;
207
+ }
208
+ const frame = this.#scriptToFrame.get(this.getScriptIsolateId(isolate, scriptId));
209
+ if (!frame) {
210
+ return;
211
+ }
212
+ const target = this.#targets.find(t => t.targetId === frame);
213
+ if (!target) {
214
+ return;
215
+ }
216
+ let resolvedSourceUrl = url;
217
+ if (hasSourceURL && sourceURL) {
218
+ const targetUrl = target.url;
219
+ resolvedSourceUrl = Common.ParsedURL.ParsedURL.completeURL(targetUrl, sourceURL) ?? sourceURL;
220
+ }
221
+ // Resolve the source map url. The value given by v8 may be relative, so resolve it here.
222
+ // This process should match the one in `SourceMapManager.attachSourceMap`.
223
+ const resolvedSourceMapUrl = Common.ParsedURL.ParsedURL.completeURL(resolvedSourceUrl, sourceMapURL);
224
+ if (!resolvedSourceMapUrl) {
225
+ return;
226
+ }
227
+ const { sourceMap } = this.#trace.metadata.sourceMaps.find(m => m.sourceMapUrl === resolvedSourceMapUrl) ?? {};
228
+ return sourceMap;
229
+ }
230
+ getScriptIsolateId(isolate, scriptId) {
231
+ return `${scriptId}@${isolate}`;
232
+ }
233
+ getExecutionContextIsolateId(isolate, executionContextId) {
234
+ return `${executionContextId}@${isolate}`;
235
+ }
236
+ isTraceEvent(event) {
237
+ return 'cat' in event && 'pid' in event && 'args' in event &&
238
+ 'data' in event.args;
239
+ }
240
+ isRundownScriptCompiled(event) {
241
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.target-rundown';
242
+ }
243
+ isRundownScript(event) {
244
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.v8-source-rundown';
245
+ }
246
+ isRundownScriptSource(event) {
247
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.v8-source-rundown-sources';
248
+ }
249
+ isTracingStartedInBrowser(event) {
250
+ return this.isTraceEvent(event) && event.cat === 'disabled-by-default-devtools.timeline' &&
251
+ event.name === 'TracingStartedInBrowser';
252
+ }
253
+ isFunctionCallEvent(event) {
254
+ return this.isTraceEvent(event) && event.cat === 'devtools.timeline' && event.name === 'FunctionCall';
255
+ }
256
+ groupContextsAndScriptsUnderTarget(targets, executionContexts, scripts) {
257
+ const data = [];
258
+ const targetIds = new Set();
259
+ const targetToExecutionContexts = new Map();
260
+ // We want to keep track of how each execution context is linked to targets so we may use this
261
+ // information to link scripts with no target to a target
262
+ const executionContextIsolateToTarget = new Map();
263
+ const targetToScripts = new Map();
264
+ const orphanScripts = [];
265
+ // Initialize all the mapping needed
266
+ for (const target of targets) {
267
+ targetIds.add(target.targetId);
268
+ targetToExecutionContexts.set(target.targetId, []);
269
+ targetToScripts.set(target.targetId, []);
270
+ }
271
+ // Put all of the known execution contexts under respective targets
272
+ for (const executionContext of executionContexts) {
273
+ const frameId = executionContext.auxData?.frameId;
274
+ if (frameId && targetIds.has(frameId)) {
275
+ targetToExecutionContexts.get(frameId)?.push(executionContext);
276
+ executionContextIsolateToTarget.set(this.getExecutionContextIsolateId(executionContext.isolate, executionContext.id), frameId);
277
+ }
278
+ else {
279
+ console.error('Execution context can\'t be linked to a target', executionContext);
280
+ }
281
+ }
282
+ // Put all of the scripts under respective targets with collected information
283
+ for (const script of scripts) {
284
+ const scriptExecutionContextIsolateId = this.getExecutionContextIsolateId(script.isolate, script.executionContextId);
285
+ const scriptFrameId = script.executionContextAuxData?.frameId;
286
+ if (script.executionContextAuxData?.frameId && targetIds.has(scriptFrameId)) {
287
+ targetToScripts.get(scriptFrameId)?.push(script);
288
+ executionContextIsolateToTarget.set(scriptExecutionContextIsolateId, scriptFrameId);
289
+ }
290
+ else if (this.#scriptToFrame.has(this.getScriptIsolateId(script.isolate, script.scriptId))) {
291
+ const targetId = this.#scriptToFrame.get(this.getScriptIsolateId(script.isolate, script.scriptId));
292
+ if (targetId) {
293
+ targetToScripts.get(targetId)?.push(script);
294
+ executionContextIsolateToTarget.set(scriptExecutionContextIsolateId, targetId);
295
+ }
296
+ }
297
+ else {
298
+ // These scripts are not linked to any target
299
+ orphanScripts.push(script);
300
+ }
301
+ }
302
+ // If a script is not linked to a target, use executionContext@isolate to link to a target
303
+ // Using PID is the last resort
304
+ for (const orphanScript of orphanScripts) {
305
+ const orphanScriptExecutionContextIsolateId = this.getExecutionContextIsolateId(orphanScript.isolate, orphanScript.executionContextId);
306
+ const frameId = executionContextIsolateToTarget.get(orphanScriptExecutionContextIsolateId);
307
+ if (frameId) {
308
+ // Found a link via execution context, use it.
309
+ targetToScripts.get(frameId)?.push(orphanScript);
310
+ }
311
+ else if (orphanScript.pid) {
312
+ const target = targets.find(target => target.pid === orphanScript.pid);
313
+ if (target) {
314
+ targetToScripts.get(target.targetId)?.push(orphanScript);
315
+ }
316
+ }
317
+ else {
318
+ console.error('Script can\'t be linked to any target', orphanScript);
319
+ }
320
+ }
321
+ // Now all the scripts are linked to a target, we want to make sure all the scripts are pointing to a valid
322
+ // execution context. If not, we will create an artificial execution context for the script
323
+ for (const target of targets) {
324
+ const targetId = target.targetId;
325
+ const executionContexts = targetToExecutionContexts.get(targetId) || [];
326
+ const scripts = targetToScripts.get(targetId) || [];
327
+ for (const script of scripts) {
328
+ if (!executionContexts.find(context => context.id === script.executionContextId)) {
329
+ const artificialContext = {
330
+ id: script.executionContextId,
331
+ origin: '',
332
+ v8Context: '',
333
+ name: '',
334
+ auxData: {
335
+ frameId: targetId,
336
+ isDefault: false,
337
+ type: 'type',
338
+ },
339
+ isolate: script.isolate,
340
+ uniqueId: `${targetId}-${script.isolate}`,
341
+ };
342
+ executionContexts.push(artificialContext);
343
+ }
344
+ }
345
+ // Finally, we put all the information into the data structure we want to return as.
346
+ data.push({ target, executionContexts, scripts });
347
+ }
348
+ return data;
349
+ }
350
+ }
@@ -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
+ }