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,922 @@
1
+ // Copyright 2021 The Chromium Authors
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+ import * as Common from '../common/common.js';
5
+ import * as i18n from '../i18n/i18n.js';
6
+ import * as Platform from '../platform/platform.js';
7
+ import { DOMModel } from './DOMModel.js';
8
+ import { FrameManager } from './FrameManager.js';
9
+ import { Events as NetworkManagerEvents, NetworkManager } from './NetworkManager.js';
10
+ import { Resource } from './Resource.js';
11
+ import { ExecutionContext, RuntimeModel } from './RuntimeModel.js';
12
+ import { SDKModel } from './SDKModel.js';
13
+ import { SecurityOriginManager } from './SecurityOriginManager.js';
14
+ import { StorageKeyManager } from './StorageKeyManager.js';
15
+ import { Type } from './Target.js';
16
+ import { TargetManager } from './TargetManager.js';
17
+ export class ResourceTreeModel extends SDKModel {
18
+ agent;
19
+ storageAgent;
20
+ #securityOriginManager;
21
+ #storageKeyManager;
22
+ framesInternal = new Map();
23
+ #cachedResourcesProcessed = false;
24
+ #pendingReloadOptions = null;
25
+ #reloadSuspensionCount = 0;
26
+ isInterstitialShowing = false;
27
+ mainFrame = null;
28
+ #pendingBackForwardCacheNotUsedEvents = new Set();
29
+ constructor(target) {
30
+ super(target);
31
+ const networkManager = target.model(NetworkManager);
32
+ if (networkManager) {
33
+ networkManager.addEventListener(NetworkManagerEvents.RequestFinished, this.onRequestFinished, this);
34
+ networkManager.addEventListener(NetworkManagerEvents.RequestUpdateDropped, this.onRequestUpdateDropped, this);
35
+ }
36
+ this.agent = target.pageAgent();
37
+ this.storageAgent = target.storageAgent();
38
+ void this.agent.invoke_enable({});
39
+ this.#securityOriginManager = target.model(SecurityOriginManager);
40
+ this.#storageKeyManager = target.model(StorageKeyManager);
41
+ target.registerPageDispatcher(new PageDispatcher(this));
42
+ void this.#buildResourceTree();
43
+ }
44
+ async #buildResourceTree() {
45
+ return await this.agent.invoke_getResourceTree().then(event => {
46
+ this.processCachedResources(event.getError() ? null : event.frameTree);
47
+ if (this.mainFrame) {
48
+ this.processPendingEvents(this.mainFrame);
49
+ }
50
+ });
51
+ }
52
+ static frameForRequest(request) {
53
+ const networkManager = NetworkManager.forRequest(request);
54
+ const resourceTreeModel = networkManager ? networkManager.target().model(ResourceTreeModel) : null;
55
+ if (!resourceTreeModel) {
56
+ return null;
57
+ }
58
+ return request.frameId ? resourceTreeModel.frameForId(request.frameId) : null;
59
+ }
60
+ static frames() {
61
+ const result = [];
62
+ for (const resourceTreeModel of TargetManager.instance().models(ResourceTreeModel)) {
63
+ result.push(...resourceTreeModel.frames());
64
+ }
65
+ return result;
66
+ }
67
+ static resourceForURL(url) {
68
+ for (const resourceTreeModel of TargetManager.instance().models(ResourceTreeModel)) {
69
+ const mainFrame = resourceTreeModel.mainFrame;
70
+ // Workers call into this with no #frames available.
71
+ const result = mainFrame ? mainFrame.resourceForURL(url) : null;
72
+ if (result) {
73
+ return result;
74
+ }
75
+ }
76
+ return null;
77
+ }
78
+ static reloadAllPages(bypassCache, scriptToEvaluateOnLoad) {
79
+ for (const resourceTreeModel of TargetManager.instance().models(ResourceTreeModel)) {
80
+ if (resourceTreeModel.target().parentTarget()?.type() !== Type.FRAME) {
81
+ resourceTreeModel.reloadPage(bypassCache, scriptToEvaluateOnLoad);
82
+ }
83
+ }
84
+ }
85
+ async storageKeyForFrame(frameId) {
86
+ if (!this.framesInternal.has(frameId)) {
87
+ return null;
88
+ }
89
+ const response = await this.storageAgent.invoke_getStorageKeyForFrame({ frameId });
90
+ if (response.getError() === 'Frame tree node for given frame not found') {
91
+ return null;
92
+ }
93
+ return response.storageKey;
94
+ }
95
+ domModel() {
96
+ return this.target().model(DOMModel);
97
+ }
98
+ processCachedResources(mainFramePayload) {
99
+ // TODO(caseq): the url check below is a mergeable, conservative
100
+ // workaround for a problem caused by us requesting resources from a
101
+ // subtarget frame before it has committed. The proper fix is likely
102
+ // to be too complicated to be safely merged.
103
+ // See https://crbug.com/1081270 for details.
104
+ if (mainFramePayload && mainFramePayload.frame.url !== ':') {
105
+ this.dispatchEventToListeners(Events.WillLoadCachedResources);
106
+ this.addFramesRecursively(null, mainFramePayload);
107
+ this.target().setInspectedURL(mainFramePayload.frame.url);
108
+ }
109
+ this.#cachedResourcesProcessed = true;
110
+ const runtimeModel = this.target().model(RuntimeModel);
111
+ if (runtimeModel) {
112
+ runtimeModel.setExecutionContextComparator(this.executionContextComparator.bind(this));
113
+ runtimeModel.fireExecutionContextOrderChanged();
114
+ }
115
+ this.dispatchEventToListeners(Events.CachedResourcesLoaded, this);
116
+ }
117
+ cachedResourcesLoaded() {
118
+ return this.#cachedResourcesProcessed;
119
+ }
120
+ addFrame(frame, _aboutToNavigate) {
121
+ this.framesInternal.set(frame.id, frame);
122
+ if (frame.isMainFrame()) {
123
+ this.mainFrame = frame;
124
+ }
125
+ this.dispatchEventToListeners(Events.FrameAdded, frame);
126
+ this.updateSecurityOrigins();
127
+ void this.updateStorageKeys();
128
+ }
129
+ frameAttached(frameId, parentFrameId, stackTrace) {
130
+ const sameTargetParentFrame = parentFrameId ? (this.framesInternal.get(parentFrameId) || null) : null;
131
+ // Do nothing unless cached resource tree is processed - it will overwrite everything.
132
+ if (!this.#cachedResourcesProcessed && sameTargetParentFrame) {
133
+ return null;
134
+ }
135
+ if (this.framesInternal.has(frameId)) {
136
+ return null;
137
+ }
138
+ const frame = new ResourceTreeFrame(this, sameTargetParentFrame, frameId, null, stackTrace || null);
139
+ if (parentFrameId && !sameTargetParentFrame) {
140
+ frame.crossTargetParentFrameId = parentFrameId;
141
+ }
142
+ if (frame.isMainFrame() && this.mainFrame) {
143
+ // Navigation to the new backend process.
144
+ this.frameDetached(this.mainFrame.id, false);
145
+ }
146
+ this.addFrame(frame, true);
147
+ return frame;
148
+ }
149
+ frameNavigated(framePayload, type) {
150
+ const sameTargetParentFrame = framePayload.parentId ? (this.framesInternal.get(framePayload.parentId) || null) : null;
151
+ // Do nothing unless cached resource tree is processed - it will overwrite everything.
152
+ if (!this.#cachedResourcesProcessed && sameTargetParentFrame) {
153
+ return;
154
+ }
155
+ let frame = this.framesInternal.get(framePayload.id) || null;
156
+ if (!frame) {
157
+ // Simulate missed "frameAttached" for a main frame navigation to the new backend process.
158
+ frame = this.frameAttached(framePayload.id, framePayload.parentId || null);
159
+ console.assert(Boolean(frame));
160
+ if (!frame) {
161
+ return;
162
+ }
163
+ }
164
+ this.dispatchEventToListeners(Events.FrameWillNavigate, frame);
165
+ frame.navigate(framePayload);
166
+ if (type) {
167
+ frame.backForwardCacheDetails.restoredFromCache = type === "BackForwardCacheRestore" /* Protocol.Page.NavigationType.BackForwardCacheRestore */;
168
+ }
169
+ if (frame.isMainFrame()) {
170
+ this.target().setInspectedURL(frame.url);
171
+ }
172
+ this.dispatchEventToListeners(Events.FrameNavigated, frame);
173
+ if (frame.isPrimaryFrame()) {
174
+ this.primaryPageChanged(frame, "Navigation" /* PrimaryPageChangeType.NAVIGATION */);
175
+ }
176
+ // Fill frame with retained resources (the ones loaded using new loader).
177
+ const resources = frame.resources();
178
+ for (let i = 0; i < resources.length; ++i) {
179
+ this.dispatchEventToListeners(Events.ResourceAdded, resources[i]);
180
+ }
181
+ this.updateSecurityOrigins();
182
+ void this.updateStorageKeys();
183
+ if (frame.backForwardCacheDetails.restoredFromCache) {
184
+ FrameManager.instance().modelRemoved(this);
185
+ FrameManager.instance().modelAdded(this);
186
+ void this.#buildResourceTree();
187
+ }
188
+ }
189
+ primaryPageChanged(frame, type) {
190
+ this.processPendingEvents(frame);
191
+ this.dispatchEventToListeners(Events.PrimaryPageChanged, { frame, type });
192
+ const networkManager = this.target().model(NetworkManager);
193
+ if (networkManager && frame.isOutermostFrame()) {
194
+ networkManager.clearRequests();
195
+ }
196
+ }
197
+ documentOpened(framePayload) {
198
+ this.frameNavigated(framePayload, undefined);
199
+ const frame = this.framesInternal.get(framePayload.id);
200
+ if (frame && !frame.getResourcesMap().get(framePayload.url)) {
201
+ const frameResource = this.createResourceFromFramePayload(framePayload, framePayload.url, Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null, null);
202
+ frameResource.isGenerated = true;
203
+ frame.addResource(frameResource);
204
+ }
205
+ }
206
+ frameDetached(frameId, isSwap) {
207
+ // Do nothing unless cached resource tree is processed - it will overwrite everything.
208
+ if (!this.#cachedResourcesProcessed) {
209
+ return;
210
+ }
211
+ const frame = this.framesInternal.get(frameId);
212
+ if (!frame) {
213
+ return;
214
+ }
215
+ const sameTargetParentFrame = frame.sameTargetParentFrame();
216
+ if (sameTargetParentFrame) {
217
+ sameTargetParentFrame.removeChildFrame(frame, isSwap);
218
+ }
219
+ else {
220
+ frame.remove(isSwap);
221
+ }
222
+ this.updateSecurityOrigins();
223
+ void this.updateStorageKeys();
224
+ }
225
+ onRequestFinished(event) {
226
+ if (!this.#cachedResourcesProcessed) {
227
+ return;
228
+ }
229
+ const request = event.data;
230
+ if (request.failed) {
231
+ return;
232
+ }
233
+ const frame = request.frameId ? this.framesInternal.get(request.frameId) : null;
234
+ if (frame) {
235
+ frame.addRequest(request);
236
+ }
237
+ }
238
+ onRequestUpdateDropped(event) {
239
+ if (!this.#cachedResourcesProcessed) {
240
+ return;
241
+ }
242
+ const data = event.data;
243
+ const frameId = data.frameId;
244
+ if (!frameId) {
245
+ return;
246
+ }
247
+ const frame = this.framesInternal.get(frameId);
248
+ if (!frame) {
249
+ return;
250
+ }
251
+ const url = data.url;
252
+ if (frame.getResourcesMap().get(url)) {
253
+ return;
254
+ }
255
+ const resource = new Resource(this, null, url, frame.url, frameId, data.loaderId, Common.ResourceType.resourceTypes[data.resourceType], data.mimeType, data.lastModified, null);
256
+ frame.addResource(resource);
257
+ }
258
+ frameForId(frameId) {
259
+ return this.framesInternal.get(frameId) || null;
260
+ }
261
+ forAllResources(callback) {
262
+ if (this.mainFrame) {
263
+ return this.mainFrame.callForFrameResources(callback);
264
+ }
265
+ return false;
266
+ }
267
+ frames() {
268
+ return [...this.framesInternal.values()];
269
+ }
270
+ addFramesRecursively(sameTargetParentFrame, frameTreePayload) {
271
+ const framePayload = frameTreePayload.frame;
272
+ let frame = this.framesInternal.get(framePayload.id);
273
+ if (!frame) {
274
+ frame = new ResourceTreeFrame(this, sameTargetParentFrame, framePayload.id, framePayload, null);
275
+ }
276
+ if (!sameTargetParentFrame && framePayload.parentId) {
277
+ frame.crossTargetParentFrameId = framePayload.parentId;
278
+ }
279
+ this.addFrame(frame);
280
+ for (const childFrame of frameTreePayload.childFrames || []) {
281
+ this.addFramesRecursively(frame, childFrame);
282
+ }
283
+ for (let i = 0; i < frameTreePayload.resources.length; ++i) {
284
+ const subresource = frameTreePayload.resources[i];
285
+ const resource = this.createResourceFromFramePayload(framePayload, subresource.url, Common.ResourceType.resourceTypes[subresource.type], subresource.mimeType, subresource.lastModified || null, subresource.contentSize || null);
286
+ frame.addResource(resource);
287
+ }
288
+ if (!frame.getResourcesMap().get(framePayload.url)) {
289
+ const frameResource = this.createResourceFromFramePayload(framePayload, framePayload.url, Common.ResourceType.resourceTypes.Document, framePayload.mimeType, null, null);
290
+ frame.addResource(frameResource);
291
+ }
292
+ }
293
+ createResourceFromFramePayload(frame, url, type, mimeType, lastModifiedTime, contentSize) {
294
+ const lastModified = typeof lastModifiedTime === 'number' ? new Date(lastModifiedTime * 1000) : null;
295
+ return new Resource(this, null, url, frame.url, frame.id, frame.loaderId, type, mimeType, lastModified, contentSize);
296
+ }
297
+ suspendReload() {
298
+ this.#reloadSuspensionCount++;
299
+ }
300
+ resumeReload() {
301
+ this.#reloadSuspensionCount--;
302
+ console.assert(this.#reloadSuspensionCount >= 0, 'Unbalanced call to ResourceTreeModel.resumeReload()');
303
+ if (!this.#reloadSuspensionCount && this.#pendingReloadOptions) {
304
+ const { ignoreCache, scriptToEvaluateOnLoad } = this.#pendingReloadOptions;
305
+ this.reloadPage(ignoreCache, scriptToEvaluateOnLoad);
306
+ }
307
+ }
308
+ reloadPage(ignoreCache, scriptToEvaluateOnLoad) {
309
+ const loaderId = this.mainFrame?.loaderId;
310
+ if (!loaderId) {
311
+ return;
312
+ }
313
+ // Only dispatch PageReloadRequested upon first reload request to simplify client logic.
314
+ if (!this.#pendingReloadOptions) {
315
+ this.dispatchEventToListeners(Events.PageReloadRequested, this);
316
+ }
317
+ if (this.#reloadSuspensionCount) {
318
+ this.#pendingReloadOptions = { ignoreCache, scriptToEvaluateOnLoad };
319
+ return;
320
+ }
321
+ this.#pendingReloadOptions = null;
322
+ const networkManager = this.target().model(NetworkManager);
323
+ if (networkManager) {
324
+ networkManager.clearRequests();
325
+ }
326
+ this.dispatchEventToListeners(Events.WillReloadPage);
327
+ void this.agent.invoke_reload({ ignoreCache, scriptToEvaluateOnLoad, loaderId });
328
+ }
329
+ navigate(url) {
330
+ return this.agent.invoke_navigate({ url });
331
+ }
332
+ async navigationHistory() {
333
+ const response = await this.agent.invoke_getNavigationHistory();
334
+ if (response.getError()) {
335
+ return null;
336
+ }
337
+ return { currentIndex: response.currentIndex, entries: response.entries };
338
+ }
339
+ navigateToHistoryEntry(entry) {
340
+ void this.agent.invoke_navigateToHistoryEntry({ entryId: entry.id });
341
+ }
342
+ setLifecycleEventsEnabled(enabled) {
343
+ return this.agent.invoke_setLifecycleEventsEnabled({ enabled });
344
+ }
345
+ async fetchAppManifest() {
346
+ const response = await this.agent.invoke_getAppManifest({});
347
+ if (response.getError()) {
348
+ return { url: response.url, data: null, errors: [] };
349
+ }
350
+ return { url: response.url, data: response.data || null, errors: response.errors };
351
+ }
352
+ async getInstallabilityErrors() {
353
+ const response = await this.agent.invoke_getInstallabilityErrors();
354
+ return response.installabilityErrors || [];
355
+ }
356
+ async getAppId() {
357
+ return await this.agent.invoke_getAppId();
358
+ }
359
+ executionContextComparator(a, b) {
360
+ function framePath(frame) {
361
+ let currentFrame = frame;
362
+ const parents = [];
363
+ while (currentFrame) {
364
+ parents.push(currentFrame);
365
+ currentFrame = currentFrame.sameTargetParentFrame();
366
+ }
367
+ return parents.reverse();
368
+ }
369
+ if (a.target() !== b.target()) {
370
+ return ExecutionContext.comparator(a, b);
371
+ }
372
+ const framesA = a.frameId ? framePath(this.frameForId(a.frameId)) : [];
373
+ const framesB = b.frameId ? framePath(this.frameForId(b.frameId)) : [];
374
+ let frameA;
375
+ let frameB;
376
+ for (let i = 0;; i++) {
377
+ if (!framesA[i] || !framesB[i] || (framesA[i] !== framesB[i])) {
378
+ frameA = framesA[i];
379
+ frameB = framesB[i];
380
+ break;
381
+ }
382
+ }
383
+ if (!frameA && frameB) {
384
+ return -1;
385
+ }
386
+ if (!frameB && frameA) {
387
+ return 1;
388
+ }
389
+ if (frameA && frameB) {
390
+ return frameA.id.localeCompare(frameB.id);
391
+ }
392
+ return ExecutionContext.comparator(a, b);
393
+ }
394
+ getSecurityOriginData() {
395
+ const securityOrigins = new Set();
396
+ let mainSecurityOrigin = null;
397
+ let unreachableMainSecurityOrigin = null;
398
+ for (const frame of this.framesInternal.values()) {
399
+ const origin = frame.securityOrigin;
400
+ if (!origin) {
401
+ continue;
402
+ }
403
+ securityOrigins.add(origin);
404
+ if (frame.isMainFrame()) {
405
+ mainSecurityOrigin = origin;
406
+ if (frame.unreachableUrl()) {
407
+ const unreachableParsed = new Common.ParsedURL.ParsedURL(frame.unreachableUrl());
408
+ unreachableMainSecurityOrigin = unreachableParsed.securityOrigin();
409
+ }
410
+ }
411
+ }
412
+ return {
413
+ securityOrigins,
414
+ mainSecurityOrigin,
415
+ unreachableMainSecurityOrigin,
416
+ };
417
+ }
418
+ async getStorageKeyData() {
419
+ const storageKeys = new Set();
420
+ let mainStorageKey = null;
421
+ for (const { isMainFrame, storageKey } of await Promise.all([...this.framesInternal.values()].map(f => f.getStorageKey(/* forceFetch */ false).then(k => ({
422
+ isMainFrame: f.isMainFrame(),
423
+ storageKey: k,
424
+ }))))) {
425
+ if (isMainFrame) {
426
+ mainStorageKey = storageKey;
427
+ }
428
+ if (storageKey) {
429
+ storageKeys.add(storageKey);
430
+ }
431
+ }
432
+ return { storageKeys, mainStorageKey };
433
+ }
434
+ updateSecurityOrigins() {
435
+ const data = this.getSecurityOriginData();
436
+ this.#securityOriginManager.setMainSecurityOrigin(data.mainSecurityOrigin || '', data.unreachableMainSecurityOrigin || '');
437
+ this.#securityOriginManager.updateSecurityOrigins(data.securityOrigins);
438
+ }
439
+ async updateStorageKeys() {
440
+ const data = await this.getStorageKeyData();
441
+ this.#storageKeyManager.setMainStorageKey(data.mainStorageKey || '');
442
+ this.#storageKeyManager.updateStorageKeys(data.storageKeys);
443
+ }
444
+ async getMainStorageKey() {
445
+ return this.mainFrame ? await this.mainFrame.getStorageKey(/* forceFetch */ false) : null;
446
+ }
447
+ getMainSecurityOrigin() {
448
+ const data = this.getSecurityOriginData();
449
+ return data.mainSecurityOrigin || data.unreachableMainSecurityOrigin;
450
+ }
451
+ onBackForwardCacheNotUsed(event) {
452
+ if (this.mainFrame && this.mainFrame.id === event.frameId && this.mainFrame.loaderId === event.loaderId) {
453
+ this.mainFrame.setBackForwardCacheDetails(event);
454
+ this.dispatchEventToListeners(Events.BackForwardCacheDetailsUpdated, this.mainFrame);
455
+ }
456
+ else {
457
+ this.#pendingBackForwardCacheNotUsedEvents.add(event);
458
+ }
459
+ }
460
+ processPendingEvents(frame) {
461
+ if (!frame.isMainFrame()) {
462
+ return;
463
+ }
464
+ for (const event of this.#pendingBackForwardCacheNotUsedEvents) {
465
+ if (frame.id === event.frameId && frame.loaderId === event.loaderId) {
466
+ frame.setBackForwardCacheDetails(event);
467
+ this.#pendingBackForwardCacheNotUsedEvents.delete(event);
468
+ break;
469
+ }
470
+ }
471
+ // No need to dispatch events here as this method call is followed by a `PrimaryPageChanged` event.
472
+ }
473
+ }
474
+ export var Events;
475
+ (function (Events) {
476
+ /* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */
477
+ Events["FrameAdded"] = "FrameAdded";
478
+ Events["FrameNavigated"] = "FrameNavigated";
479
+ Events["FrameDetached"] = "FrameDetached";
480
+ Events["FrameResized"] = "FrameResized";
481
+ Events["FrameWillNavigate"] = "FrameWillNavigate";
482
+ Events["PrimaryPageChanged"] = "PrimaryPageChanged";
483
+ Events["ResourceAdded"] = "ResourceAdded";
484
+ Events["WillLoadCachedResources"] = "WillLoadCachedResources";
485
+ Events["CachedResourcesLoaded"] = "CachedResourcesLoaded";
486
+ Events["DOMContentLoaded"] = "DOMContentLoaded";
487
+ Events["LifecycleEvent"] = "LifecycleEvent";
488
+ Events["Load"] = "Load";
489
+ Events["PageReloadRequested"] = "PageReloadRequested";
490
+ Events["WillReloadPage"] = "WillReloadPage";
491
+ Events["InterstitialShown"] = "InterstitialShown";
492
+ Events["InterstitialHidden"] = "InterstitialHidden";
493
+ Events["BackForwardCacheDetailsUpdated"] = "BackForwardCacheDetailsUpdated";
494
+ Events["JavaScriptDialogOpening"] = "JavaScriptDialogOpening";
495
+ /* eslint-enable @typescript-eslint/naming-convention */
496
+ })(Events || (Events = {}));
497
+ export class ResourceTreeFrame {
498
+ #model;
499
+ #sameTargetParentFrame;
500
+ #id;
501
+ crossTargetParentFrameId = null;
502
+ #loaderId;
503
+ #name;
504
+ #url;
505
+ #domainAndRegistry;
506
+ #securityOrigin;
507
+ #securityOriginDetails;
508
+ #storageKey;
509
+ #unreachableUrl;
510
+ #adFrameStatus;
511
+ #secureContextType;
512
+ #crossOriginIsolatedContextType;
513
+ #gatedAPIFeatures;
514
+ #creationStackTrace;
515
+ #creationStackTraceTarget = null;
516
+ #childFrames = new Set();
517
+ resourcesMap = new Map();
518
+ backForwardCacheDetails = {
519
+ restoredFromCache: undefined,
520
+ explanations: [],
521
+ explanationsTree: undefined,
522
+ };
523
+ constructor(model, parentFrame, frameId, payload, creationStackTrace) {
524
+ this.#model = model;
525
+ this.#sameTargetParentFrame = parentFrame;
526
+ this.#id = frameId;
527
+ this.#loaderId = payload?.loaderId ?? '';
528
+ this.#name = payload?.name;
529
+ this.#url = payload && payload.url || Platform.DevToolsPath.EmptyUrlString;
530
+ this.#domainAndRegistry = (payload?.domainAndRegistry) || '';
531
+ this.#securityOrigin = payload?.securityOrigin ?? null;
532
+ this.#securityOriginDetails = payload?.securityOriginDetails;
533
+ this.#unreachableUrl =
534
+ (payload && payload.unreachableUrl) || Platform.DevToolsPath.EmptyUrlString;
535
+ this.#adFrameStatus = payload?.adFrameStatus;
536
+ this.#secureContextType = payload?.secureContextType ?? null;
537
+ this.#crossOriginIsolatedContextType = payload?.crossOriginIsolatedContextType ?? null;
538
+ this.#gatedAPIFeatures = payload?.gatedAPIFeatures ?? null;
539
+ this.#creationStackTrace = creationStackTrace;
540
+ if (this.#sameTargetParentFrame) {
541
+ this.#sameTargetParentFrame.#childFrames.add(this);
542
+ }
543
+ }
544
+ isSecureContext() {
545
+ return this.#secureContextType !== null && this.#secureContextType.startsWith('Secure');
546
+ }
547
+ getSecureContextType() {
548
+ return this.#secureContextType;
549
+ }
550
+ isCrossOriginIsolated() {
551
+ return this.#crossOriginIsolatedContextType !== null && this.#crossOriginIsolatedContextType.startsWith('Isolated');
552
+ }
553
+ getCrossOriginIsolatedContextType() {
554
+ return this.#crossOriginIsolatedContextType;
555
+ }
556
+ getGatedAPIFeatures() {
557
+ return this.#gatedAPIFeatures;
558
+ }
559
+ getCreationStackTraceData() {
560
+ return {
561
+ creationStackTrace: this.#creationStackTrace,
562
+ creationStackTraceTarget: this.#creationStackTraceTarget || this.resourceTreeModel().target(),
563
+ };
564
+ }
565
+ navigate(framePayload) {
566
+ this.#loaderId = framePayload.loaderId;
567
+ this.#name = framePayload.name;
568
+ this.#url = framePayload.url;
569
+ this.#domainAndRegistry = framePayload.domainAndRegistry;
570
+ this.#securityOrigin = framePayload.securityOrigin;
571
+ this.#securityOriginDetails = framePayload.securityOriginDetails;
572
+ void this.getStorageKey(/* forceFetch */ true);
573
+ this.#unreachableUrl =
574
+ framePayload.unreachableUrl || Platform.DevToolsPath.EmptyUrlString;
575
+ this.#adFrameStatus = framePayload?.adFrameStatus;
576
+ this.#secureContextType = framePayload.secureContextType;
577
+ this.#crossOriginIsolatedContextType = framePayload.crossOriginIsolatedContextType;
578
+ this.#gatedAPIFeatures = framePayload.gatedAPIFeatures;
579
+ this.backForwardCacheDetails = {
580
+ restoredFromCache: undefined,
581
+ explanations: [],
582
+ explanationsTree: undefined,
583
+ };
584
+ const mainResource = this.resourcesMap.get(this.#url);
585
+ this.resourcesMap.clear();
586
+ this.removeChildFrames();
587
+ if (mainResource && mainResource.loaderId === this.#loaderId) {
588
+ this.addResource(mainResource);
589
+ }
590
+ }
591
+ resourceTreeModel() {
592
+ return this.#model;
593
+ }
594
+ get id() {
595
+ return this.#id;
596
+ }
597
+ get name() {
598
+ return this.#name || '';
599
+ }
600
+ get url() {
601
+ return this.#url;
602
+ }
603
+ domainAndRegistry() {
604
+ return this.#domainAndRegistry;
605
+ }
606
+ async getAdScriptAncestry(frameId) {
607
+ const res = await this.#model.agent.invoke_getAdScriptAncestry({ frameId });
608
+ return res.adScriptAncestry || null;
609
+ }
610
+ get securityOrigin() {
611
+ return this.#securityOrigin;
612
+ }
613
+ get securityOriginDetails() {
614
+ return this.#securityOriginDetails ?? null;
615
+ }
616
+ getStorageKey(forceFetch) {
617
+ if (!this.#storageKey || forceFetch) {
618
+ this.#storageKey = this.#model.storageKeyForFrame(this.#id);
619
+ }
620
+ return this.#storageKey;
621
+ }
622
+ unreachableUrl() {
623
+ return this.#unreachableUrl;
624
+ }
625
+ get loaderId() {
626
+ return this.#loaderId;
627
+ }
628
+ adFrameType() {
629
+ return this.#adFrameStatus?.adFrameType || "none" /* Protocol.Page.AdFrameType.None */;
630
+ }
631
+ adFrameStatus() {
632
+ return this.#adFrameStatus;
633
+ }
634
+ get childFrames() {
635
+ return [...this.#childFrames];
636
+ }
637
+ /**
638
+ * Returns the parent frame if both #frames are part of the same process/target.
639
+ */
640
+ sameTargetParentFrame() {
641
+ return this.#sameTargetParentFrame;
642
+ }
643
+ /**
644
+ * Returns the parent frame if both #frames are part of different processes/targets (child is an OOPIF).
645
+ */
646
+ crossTargetParentFrame() {
647
+ if (!this.crossTargetParentFrameId) {
648
+ return null;
649
+ }
650
+ const parentTarget = this.#model.target().parentTarget();
651
+ if (parentTarget?.type() !== Type.FRAME) {
652
+ return null;
653
+ }
654
+ const parentModel = parentTarget.model(ResourceTreeModel);
655
+ if (!parentModel) {
656
+ return null;
657
+ }
658
+ // Note that parent #model has already processed cached resources:
659
+ // - when parent target was created, we issued getResourceTree call;
660
+ // - strictly after we issued setAutoAttach call;
661
+ // - both of them were handled in renderer in the same order;
662
+ // - cached resource tree got processed on parent #model;
663
+ // - child target was created as a result of setAutoAttach call.
664
+ return parentModel.framesInternal.get(this.crossTargetParentFrameId) || null;
665
+ }
666
+ /**
667
+ * Returns the parent frame. There is only 1 parent and it's either in the
668
+ * same target or it's cross-target.
669
+ */
670
+ parentFrame() {
671
+ return this.sameTargetParentFrame() || this.crossTargetParentFrame();
672
+ }
673
+ /**
674
+ * Returns true if this is the main frame of its target. A main frame is the root of the frame tree i.e. a frame without
675
+ * a parent, but the whole frame tree could be embedded in another frame tree (e.g. OOPIFs, fenced frames, portals).
676
+ * https://chromium.googlesource.com/chromium/src/+/HEAD/docs/frame_trees.md
677
+ */
678
+ isMainFrame() {
679
+ return !this.#sameTargetParentFrame;
680
+ }
681
+ /**
682
+ * Returns true if this is a main frame which is not embedded in another frame tree. With MPArch features such as
683
+ * back/forward cache or prerender there can be multiple outermost frames.
684
+ * https://chromium.googlesource.com/chromium/src/+/HEAD/docs/frame_trees.md
685
+ */
686
+ isOutermostFrame() {
687
+ return this.#model.target().parentTarget()?.type() !== Type.FRAME && !this.#sameTargetParentFrame &&
688
+ !this.crossTargetParentFrameId;
689
+ }
690
+ /**
691
+ * Returns true if this is the primary frame of the browser tab. There can only be one primary frame for each
692
+ * browser tab. It is the outermost frame being actively displayed in the browser tab.
693
+ * https://chromium.googlesource.com/chromium/src/+/HEAD/docs/frame_trees.md
694
+ */
695
+ isPrimaryFrame() {
696
+ return !this.#sameTargetParentFrame && this.#model.target() === TargetManager.instance().primaryPageTarget();
697
+ }
698
+ removeChildFrame(frame, isSwap) {
699
+ this.#childFrames.delete(frame);
700
+ frame.remove(isSwap);
701
+ }
702
+ removeChildFrames() {
703
+ const frames = this.#childFrames;
704
+ this.#childFrames = new Set();
705
+ for (const frame of frames) {
706
+ frame.remove(false);
707
+ }
708
+ }
709
+ remove(isSwap) {
710
+ this.removeChildFrames();
711
+ this.#model.framesInternal.delete(this.id);
712
+ this.#model.dispatchEventToListeners(Events.FrameDetached, { frame: this, isSwap });
713
+ }
714
+ addResource(resource) {
715
+ if (this.resourcesMap.get(resource.url) === resource) {
716
+ // Already in the tree, we just got an extra update.
717
+ return;
718
+ }
719
+ this.resourcesMap.set(resource.url, resource);
720
+ this.#model.dispatchEventToListeners(Events.ResourceAdded, resource);
721
+ }
722
+ addRequest(request) {
723
+ let resource = this.resourcesMap.get(request.url());
724
+ if (resource && resource.request === request) {
725
+ // Already in the tree, we just got an extra update.
726
+ return;
727
+ }
728
+ resource = new Resource(this.#model, request, request.url(), request.documentURL, request.frameId, request.loaderId, request.resourceType(), request.mimeType, null, null);
729
+ this.resourcesMap.set(resource.url, resource);
730
+ this.#model.dispatchEventToListeners(Events.ResourceAdded, resource);
731
+ }
732
+ resources() {
733
+ return Array.from(this.resourcesMap.values());
734
+ }
735
+ resourceForURL(url) {
736
+ const resource = this.resourcesMap.get(url);
737
+ if (resource) {
738
+ return resource;
739
+ }
740
+ for (const frame of this.#childFrames) {
741
+ const resource = frame.resourceForURL(url);
742
+ if (resource) {
743
+ return resource;
744
+ }
745
+ }
746
+ return null;
747
+ }
748
+ callForFrameResources(callback) {
749
+ for (const resource of this.resourcesMap.values()) {
750
+ if (callback(resource)) {
751
+ return true;
752
+ }
753
+ }
754
+ for (const frame of this.#childFrames) {
755
+ if (frame.callForFrameResources(callback)) {
756
+ return true;
757
+ }
758
+ }
759
+ return false;
760
+ }
761
+ displayName() {
762
+ if (this.isOutermostFrame()) {
763
+ return i18n.i18n.lockedString('top');
764
+ }
765
+ const subtitle = new Common.ParsedURL.ParsedURL(this.#url).displayName;
766
+ if (subtitle) {
767
+ if (!this.#name) {
768
+ return subtitle;
769
+ }
770
+ return this.#name + ' (' + subtitle + ')';
771
+ }
772
+ return i18n.i18n.lockedString('iframe');
773
+ }
774
+ async getOwnerDeferredDOMNode() {
775
+ const parentFrame = this.parentFrame();
776
+ if (!parentFrame) {
777
+ return null;
778
+ }
779
+ return await parentFrame.resourceTreeModel().domModel().getOwnerNodeForFrame(this.#id);
780
+ }
781
+ async getOwnerDOMNodeOrDocument() {
782
+ const deferredNode = await this.getOwnerDeferredDOMNode();
783
+ if (deferredNode) {
784
+ return await deferredNode.resolvePromise();
785
+ }
786
+ if (this.isOutermostFrame()) {
787
+ return await this.resourceTreeModel().domModel().requestDocument();
788
+ }
789
+ return null;
790
+ }
791
+ async highlight() {
792
+ const parentFrame = this.parentFrame();
793
+ const parentTarget = this.resourceTreeModel().target().parentTarget();
794
+ const highlightFrameOwner = async (domModel) => {
795
+ const deferredNode = await domModel.getOwnerNodeForFrame(this.#id);
796
+ if (deferredNode) {
797
+ domModel.overlayModel().highlightInOverlay({ deferredNode, selectorList: '' }, 'all', true);
798
+ }
799
+ };
800
+ if (parentFrame) {
801
+ return await highlightFrameOwner(parentFrame.resourceTreeModel().domModel());
802
+ }
803
+ // Fenced frames.
804
+ if (parentTarget?.type() === Type.FRAME) {
805
+ const domModel = parentTarget.model(DOMModel);
806
+ if (domModel) {
807
+ return await highlightFrameOwner(domModel);
808
+ }
809
+ }
810
+ // For the outermost frame there is no owner node. Highlight the whole #document instead.
811
+ const document = await this.resourceTreeModel().domModel().requestDocument();
812
+ if (document) {
813
+ this.resourceTreeModel().domModel().overlayModel().highlightInOverlay({ node: document, selectorList: '' }, 'all', true);
814
+ }
815
+ }
816
+ async getPermissionsPolicyState() {
817
+ const response = await this.resourceTreeModel().target().pageAgent().invoke_getPermissionsPolicyState({ frameId: this.#id });
818
+ if (response.getError()) {
819
+ return null;
820
+ }
821
+ return response.states;
822
+ }
823
+ async getOriginTrials() {
824
+ const response = await this.resourceTreeModel().target().pageAgent().invoke_getOriginTrials({ frameId: this.#id });
825
+ if (response.getError()) {
826
+ return [];
827
+ }
828
+ return response.originTrials;
829
+ }
830
+ setCreationStackTrace(creationStackTraceData) {
831
+ this.#creationStackTrace = creationStackTraceData.creationStackTrace;
832
+ this.#creationStackTraceTarget = creationStackTraceData.creationStackTraceTarget;
833
+ }
834
+ setBackForwardCacheDetails(event) {
835
+ this.backForwardCacheDetails.restoredFromCache = false;
836
+ this.backForwardCacheDetails.explanations = event.notRestoredExplanations;
837
+ this.backForwardCacheDetails.explanationsTree = event.notRestoredExplanationsTree;
838
+ }
839
+ getResourcesMap() {
840
+ return this.resourcesMap;
841
+ }
842
+ }
843
+ export class PageDispatcher {
844
+ #resourceTreeModel;
845
+ constructor(resourceTreeModel) {
846
+ this.#resourceTreeModel = resourceTreeModel;
847
+ }
848
+ backForwardCacheNotUsed(params) {
849
+ this.#resourceTreeModel.onBackForwardCacheNotUsed(params);
850
+ }
851
+ domContentEventFired({ timestamp }) {
852
+ this.#resourceTreeModel.dispatchEventToListeners(Events.DOMContentLoaded, timestamp);
853
+ }
854
+ loadEventFired({ timestamp }) {
855
+ this.#resourceTreeModel.dispatchEventToListeners(Events.Load, { resourceTreeModel: this.#resourceTreeModel, loadTime: timestamp });
856
+ }
857
+ lifecycleEvent({ frameId, name }) {
858
+ this.#resourceTreeModel.dispatchEventToListeners(Events.LifecycleEvent, { frameId, name });
859
+ }
860
+ frameAttached({ frameId, parentFrameId, stack }) {
861
+ this.#resourceTreeModel.frameAttached(frameId, parentFrameId, stack);
862
+ }
863
+ frameNavigated({ frame, type }) {
864
+ this.#resourceTreeModel.frameNavigated(frame, type);
865
+ }
866
+ documentOpened({ frame }) {
867
+ this.#resourceTreeModel.documentOpened(frame);
868
+ }
869
+ frameDetached({ frameId, reason }) {
870
+ this.#resourceTreeModel.frameDetached(frameId, reason === "swap" /* Protocol.Page.FrameDetachedEventReason.Swap */);
871
+ }
872
+ frameSubtreeWillBeDetached(_params) {
873
+ }
874
+ frameStartedLoading({}) {
875
+ }
876
+ frameStoppedLoading({}) {
877
+ }
878
+ frameRequestedNavigation({}) {
879
+ }
880
+ frameScheduledNavigation({}) {
881
+ }
882
+ frameClearedScheduledNavigation({}) {
883
+ }
884
+ frameStartedNavigating({}) {
885
+ }
886
+ navigatedWithinDocument({}) {
887
+ }
888
+ frameResized() {
889
+ this.#resourceTreeModel.dispatchEventToListeners(Events.FrameResized);
890
+ }
891
+ javascriptDialogOpening(event) {
892
+ this.#resourceTreeModel.dispatchEventToListeners(Events.JavaScriptDialogOpening, event);
893
+ if (!event.hasBrowserHandler) {
894
+ void this.#resourceTreeModel.agent.invoke_handleJavaScriptDialog({ accept: false });
895
+ }
896
+ }
897
+ javascriptDialogClosed({}) {
898
+ }
899
+ screencastFrame({}) {
900
+ }
901
+ screencastVisibilityChanged({}) {
902
+ }
903
+ interstitialShown() {
904
+ this.#resourceTreeModel.isInterstitialShowing = true;
905
+ this.#resourceTreeModel.dispatchEventToListeners(Events.InterstitialShown);
906
+ }
907
+ interstitialHidden() {
908
+ this.#resourceTreeModel.isInterstitialShowing = false;
909
+ this.#resourceTreeModel.dispatchEventToListeners(Events.InterstitialHidden);
910
+ }
911
+ windowOpen({}) {
912
+ }
913
+ compilationCacheProduced({}) {
914
+ }
915
+ fileChooserOpened({}) {
916
+ }
917
+ downloadWillBegin({}) {
918
+ }
919
+ downloadProgress() {
920
+ }
921
+ }
922
+ SDKModel.register(ResourceTreeModel, { capabilities: 2 /* Capability.DOM */, autostart: true, early: true });