@nimbus21.ai/chrome-devtools-mcp 0.6.3 → 0.12.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 (621) hide show
  1. package/README.md +311 -26
  2. package/build/src/DevToolsConnectionAdapter.js +69 -0
  3. package/build/src/DevtoolsUtils.js +208 -0
  4. package/build/src/McpContext.js +247 -50
  5. package/build/src/McpResponse.js +211 -48
  6. package/build/src/PageCollector.js +247 -33
  7. package/build/src/WaitForHelper.js +5 -0
  8. package/build/src/browser.js +97 -33
  9. package/build/src/cli.js +139 -16
  10. package/build/src/formatters/consoleFormatter.js +108 -60
  11. package/build/src/formatters/networkFormatter.js +45 -2
  12. package/build/src/formatters/snapshotFormatter.js +57 -59
  13. package/build/src/issue-descriptions.js +39 -0
  14. package/build/src/logger.js +1 -1
  15. package/build/src/main.js +68 -68
  16. package/build/src/polyfill.js +2 -2
  17. package/build/src/third_party/THIRD_PARTY_NOTICES +2010 -0
  18. package/build/src/third_party/devtools.js +6 -0
  19. package/build/src/third_party/index.js +171065 -0
  20. package/build/src/third_party/issue-descriptions/CoepCoopSandboxedIframeCannotNavigateToCoopPage.md +4 -0
  21. package/build/src/third_party/issue-descriptions/CoepCorpNotSameOrigin.md +8 -0
  22. package/build/src/third_party/issue-descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +18 -0
  23. package/build/src/third_party/issue-descriptions/CoepCorpNotSameSite.md +7 -0
  24. package/build/src/third_party/issue-descriptions/CoepFrameResourceNeedsCoepHeader.md +10 -0
  25. package/build/src/third_party/issue-descriptions/CompatibilityModeQuirks.md +5 -0
  26. package/build/src/third_party/issue-descriptions/CookieAttributeValueExceedsMaxSize.md +5 -0
  27. package/build/src/third_party/issue-descriptions/LowTextContrast.md +5 -0
  28. package/build/src/third_party/issue-descriptions/SameSiteExcludeContextDowngradeRead.md +8 -0
  29. package/build/src/third_party/issue-descriptions/SameSiteExcludeContextDowngradeSet.md +8 -0
  30. package/build/src/third_party/issue-descriptions/SameSiteExcludeNavigationContextDowngrade.md +8 -0
  31. package/build/src/third_party/issue-descriptions/SameSiteInvalidSameParty.md +8 -0
  32. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureErrorRead.md +8 -0
  33. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureErrorSet.md +8 -0
  34. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureWarnRead.md +8 -0
  35. package/build/src/third_party/issue-descriptions/SameSiteNoneInsecureWarnSet.md +8 -0
  36. package/build/src/third_party/issue-descriptions/SameSiteSamePartyCrossPartyContextSet.md +10 -0
  37. package/build/src/third_party/issue-descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +9 -0
  38. package/build/src/third_party/issue-descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +9 -0
  39. package/build/src/third_party/issue-descriptions/SameSiteWarnCrossDowngradeRead.md +8 -0
  40. package/build/src/third_party/issue-descriptions/SameSiteWarnCrossDowngradeSet.md +8 -0
  41. package/build/src/third_party/issue-descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +8 -0
  42. package/build/src/third_party/issue-descriptions/arInsecureContext.md +7 -0
  43. package/build/src/third_party/issue-descriptions/arInvalidInfoHeader.md +5 -0
  44. package/build/src/third_party/issue-descriptions/arInvalidRegisterOsSourceHeader.md +5 -0
  45. package/build/src/third_party/issue-descriptions/arInvalidRegisterOsTriggerHeader.md +5 -0
  46. package/build/src/third_party/issue-descriptions/arInvalidRegisterSourceHeader.md +5 -0
  47. package/build/src/third_party/issue-descriptions/arInvalidRegisterTriggerHeader.md +5 -0
  48. package/build/src/third_party/issue-descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +5 -0
  49. package/build/src/third_party/issue-descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +6 -0
  50. package/build/src/third_party/issue-descriptions/arNoRegisterOsSourceHeader.md +5 -0
  51. package/build/src/third_party/issue-descriptions/arNoRegisterOsTriggerHeader.md +5 -0
  52. package/build/src/third_party/issue-descriptions/arNoRegisterSourceHeader.md +5 -0
  53. package/build/src/third_party/issue-descriptions/arNoRegisterTriggerHeader.md +5 -0
  54. package/build/src/third_party/issue-descriptions/arNoWebOrOsSupport.md +4 -0
  55. package/build/src/third_party/issue-descriptions/arOsSourceIgnored.md +18 -0
  56. package/build/src/third_party/issue-descriptions/arOsTriggerIgnored.md +19 -0
  57. package/build/src/third_party/issue-descriptions/arPermissionPolicyDisabled.md +8 -0
  58. package/build/src/third_party/issue-descriptions/arSourceAndTriggerHeaders.md +9 -0
  59. package/build/src/third_party/issue-descriptions/arSourceIgnored.md +13 -0
  60. package/build/src/third_party/issue-descriptions/arTriggerIgnored.md +12 -0
  61. package/build/src/third_party/issue-descriptions/arUntrustworthyReportingOrigin.md +10 -0
  62. package/build/src/third_party/issue-descriptions/arWebAndOsHeaders.md +11 -0
  63. package/build/src/third_party/issue-descriptions/bounceTrackingMitigations.md +3 -0
  64. package/build/src/third_party/issue-descriptions/clientHintMetaTagAllowListInvalidOrigin.md +4 -0
  65. package/build/src/third_party/issue-descriptions/clientHintMetaTagModifiedHTML.md +4 -0
  66. package/build/src/third_party/issue-descriptions/cookieCrossSiteRedirectDowngrade.md +12 -0
  67. package/build/src/third_party/issue-descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +4 -0
  68. package/build/src/third_party/issue-descriptions/cookieExcludeDomainNonAscii.md +11 -0
  69. package/build/src/third_party/issue-descriptions/cookieExcludePortMismatch.md +8 -0
  70. package/build/src/third_party/issue-descriptions/cookieExcludeSchemeMismatch.md +7 -0
  71. package/build/src/third_party/issue-descriptions/cookieExcludeThirdPartyPhaseoutRead.md +6 -0
  72. package/build/src/third_party/issue-descriptions/cookieExcludeThirdPartyPhaseoutSet.md +6 -0
  73. package/build/src/third_party/issue-descriptions/cookieWarnDomainNonAscii.md +11 -0
  74. package/build/src/third_party/issue-descriptions/cookieWarnMetadataGrantRead.md +4 -0
  75. package/build/src/third_party/issue-descriptions/cookieWarnMetadataGrantSet.md +4 -0
  76. package/build/src/third_party/issue-descriptions/cookieWarnThirdPartyPhaseoutRead.md +6 -0
  77. package/build/src/third_party/issue-descriptions/cookieWarnThirdPartyPhaseoutSet.md +6 -0
  78. package/build/src/third_party/issue-descriptions/corsAllowCredentialsRequired.md +6 -0
  79. package/build/src/third_party/issue-descriptions/corsDisabledScheme.md +7 -0
  80. package/build/src/third_party/issue-descriptions/corsDisallowedByMode.md +7 -0
  81. package/build/src/third_party/issue-descriptions/corsHeaderDisallowedByPreflightResponse.md +5 -0
  82. package/build/src/third_party/issue-descriptions/corsInsecurePrivateNetwork.md +10 -0
  83. package/build/src/third_party/issue-descriptions/corsInvalidHeaderValues.md +7 -0
  84. package/build/src/third_party/issue-descriptions/corsLocalNetworkAccessPermissionDenied.md +19 -0
  85. package/build/src/third_party/issue-descriptions/corsMethodDisallowedByPreflightResponse.md +5 -0
  86. package/build/src/third_party/issue-descriptions/corsNoCorsRedirectModeNotFollow.md +5 -0
  87. package/build/src/third_party/issue-descriptions/corsOriginMismatch.md +6 -0
  88. package/build/src/third_party/issue-descriptions/corsPreflightAllowPrivateNetworkError.md +10 -0
  89. package/build/src/third_party/issue-descriptions/corsPreflightResponseInvalid.md +5 -0
  90. package/build/src/third_party/issue-descriptions/corsPrivateNetworkPermissionDenied.md +10 -0
  91. package/build/src/third_party/issue-descriptions/corsRedirectContainsCredentials.md +5 -0
  92. package/build/src/third_party/issue-descriptions/corsWildcardOriginNotAllowed.md +8 -0
  93. package/build/src/third_party/issue-descriptions/cspEvalViolation.md +9 -0
  94. package/build/src/third_party/issue-descriptions/cspInlineViolation.md +10 -0
  95. package/build/src/third_party/issue-descriptions/cspTrustedTypesPolicyViolation.md +5 -0
  96. package/build/src/third_party/issue-descriptions/cspTrustedTypesSinkViolation.md +8 -0
  97. package/build/src/third_party/issue-descriptions/cspURLViolation.md +10 -0
  98. package/build/src/third_party/issue-descriptions/deprecation.md +3 -0
  99. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -0
  100. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -0
  101. package/build/src/third_party/issue-descriptions/federatedAuthRequestAccountsNoResponse.md +1 -0
  102. package/build/src/third_party/issue-descriptions/federatedAuthRequestApprovalDeclined.md +1 -0
  103. package/build/src/third_party/issue-descriptions/federatedAuthRequestCanceled.md +1 -0
  104. package/build/src/third_party/issue-descriptions/federatedAuthRequestClientMetadataHttpNotFound.md +1 -0
  105. package/build/src/third_party/issue-descriptions/federatedAuthRequestClientMetadataInvalidResponse.md +1 -0
  106. package/build/src/third_party/issue-descriptions/federatedAuthRequestClientMetadataNoResponse.md +1 -0
  107. package/build/src/third_party/issue-descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -0
  108. package/build/src/third_party/issue-descriptions/federatedAuthRequestErrorIdToken.md +1 -0
  109. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -0
  110. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -0
  111. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -0
  112. package/build/src/third_party/issue-descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -0
  113. package/build/src/third_party/issue-descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -0
  114. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -0
  115. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -0
  116. package/build/src/third_party/issue-descriptions/federatedAuthRequestManifestNoResponse.md +1 -0
  117. package/build/src/third_party/issue-descriptions/federatedAuthRequestTooManyRequests.md +1 -0
  118. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -0
  119. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -0
  120. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -0
  121. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -0
  122. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -0
  123. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -0
  124. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -0
  125. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -0
  126. package/build/src/third_party/issue-descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -0
  127. package/build/src/third_party/issue-descriptions/fetchingPartitionedBlobURL.md +7 -0
  128. package/build/src/third_party/issue-descriptions/genericFormAriaLabelledByToNonExistingIdError.md +8 -0
  129. package/build/src/third_party/issue-descriptions/genericFormAutocompleteAttributeEmptyError.md +5 -0
  130. package/build/src/third_party/issue-descriptions/genericFormDuplicateIdForInputError.md +5 -0
  131. package/build/src/third_party/issue-descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +5 -0
  132. package/build/src/third_party/issue-descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +5 -0
  133. package/build/src/third_party/issue-descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +5 -0
  134. package/build/src/third_party/issue-descriptions/genericFormInputWithNoLabelError.md +5 -0
  135. package/build/src/third_party/issue-descriptions/genericFormLabelForMatchesNonExistingIdError.md +5 -0
  136. package/build/src/third_party/issue-descriptions/genericFormLabelForNameError.md +5 -0
  137. package/build/src/third_party/issue-descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +5 -0
  138. package/build/src/third_party/issue-descriptions/genericNavigationEntryMarkedSkippable.md +7 -0
  139. package/build/src/third_party/issue-descriptions/genericResponseWasBlockedByORB.md +4 -0
  140. package/build/src/third_party/issue-descriptions/heavyAd.md +10 -0
  141. package/build/src/third_party/issue-descriptions/mixedContent.md +5 -0
  142. package/build/src/third_party/issue-descriptions/navigatingPartitionedBlobURL.md +5 -0
  143. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabled.md +7 -0
  144. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabledWithOccluder.md +9 -0
  145. package/build/src/third_party/issue-descriptions/permissionElementActivationDisabledWithOccluderParent.md +9 -0
  146. package/build/src/third_party/issue-descriptions/permissionElementCspFrameAncestorsMissing.md +5 -0
  147. package/build/src/third_party/issue-descriptions/permissionElementFencedFrameDisallowed.md +5 -0
  148. package/build/src/third_party/issue-descriptions/permissionElementFontSizeTooLarge.md +5 -0
  149. package/build/src/third_party/issue-descriptions/permissionElementFontSizeTooSmall.md +5 -0
  150. package/build/src/third_party/issue-descriptions/permissionElementGeolocationDeprecated.md +5 -0
  151. package/build/src/third_party/issue-descriptions/permissionElementInsetBoxShadowUnsupported.md +5 -0
  152. package/build/src/third_party/issue-descriptions/permissionElementInvalidDisplayStyle.md +5 -0
  153. package/build/src/third_party/issue-descriptions/permissionElementInvalidSizeValue.md +5 -0
  154. package/build/src/third_party/issue-descriptions/permissionElementInvalidType.md +5 -0
  155. package/build/src/third_party/issue-descriptions/permissionElementInvalidTypeActivation.md +5 -0
  156. package/build/src/third_party/issue-descriptions/permissionElementLowContrast.md +5 -0
  157. package/build/src/third_party/issue-descriptions/permissionElementNonOpaqueColor.md +5 -0
  158. package/build/src/third_party/issue-descriptions/permissionElementPaddingBottomUnsupported.md +6 -0
  159. package/build/src/third_party/issue-descriptions/permissionElementPaddingRightUnsupported.md +6 -0
  160. package/build/src/third_party/issue-descriptions/permissionElementPermissionsPolicyBlocked.md +5 -0
  161. package/build/src/third_party/issue-descriptions/permissionElementRegistrationFailed.md +5 -0
  162. package/build/src/third_party/issue-descriptions/permissionElementRequestInProgress.md +5 -0
  163. package/build/src/third_party/issue-descriptions/permissionElementSecurityChecksFailed.md +5 -0
  164. package/build/src/third_party/issue-descriptions/permissionElementTypeNotSupported.md +5 -0
  165. package/build/src/third_party/issue-descriptions/permissionElementUntrustedEvent.md +7 -0
  166. package/build/src/third_party/issue-descriptions/placeholderDescriptionForInvisibleIssues.md +3 -0
  167. package/build/src/third_party/issue-descriptions/propertyRuleInvalidNameIssue.md +3 -0
  168. package/build/src/third_party/issue-descriptions/propertyRuleIssue.md +7 -0
  169. package/build/src/third_party/issue-descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +7 -0
  170. package/build/src/third_party/issue-descriptions/selectElementAccessibilityDisallowedSelectChild.md +7 -0
  171. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +3 -0
  172. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +3 -0
  173. package/build/src/third_party/issue-descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +3 -0
  174. package/build/src/third_party/issue-descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +3 -0
  175. package/build/src/third_party/issue-descriptions/sharedArrayBuffer.md +7 -0
  176. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -0
  177. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorDictionaryLoadFailure.md +3 -0
  178. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +3 -0
  179. package/build/src/third_party/issue-descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -0
  180. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -0
  181. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -0
  182. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorExpiredResponse.md +3 -0
  183. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +3 -0
  184. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInsufficientResources.md +1 -0
  185. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInvalidMatchField.md +1 -0
  186. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -0
  187. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorInvalidTTLField.md +1 -0
  188. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNavigationRequest.md +3 -0
  189. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNoMatchField.md +1 -0
  190. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonIntegerTTLField.md +1 -0
  191. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonListMatchDestField.md +1 -0
  192. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonSecureContext.md +3 -0
  193. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonStringIdField.md +1 -0
  194. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonStringInMatchDestList.md +1 -0
  195. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonStringMatchField.md +1 -0
  196. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorNonTokenTypeField.md +1 -0
  197. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorRequestAborted.md +1 -0
  198. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorShuttingDown.md +1 -0
  199. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorTooLongIdField.md +3 -0
  200. package/build/src/third_party/issue-descriptions/sharedDictionaryWriteErrorUnsupportedType.md +3 -0
  201. package/build/src/third_party/issue-descriptions/sriInvalidSignatureHeader.md +14 -0
  202. package/build/src/third_party/issue-descriptions/sriInvalidSignatureInputHeader.md +15 -0
  203. package/build/src/third_party/issue-descriptions/sriMissingSignatureHeader.md +8 -0
  204. package/build/src/third_party/issue-descriptions/sriMissingSignatureInputHeader.md +7 -0
  205. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsIncorrectLength.md +11 -0
  206. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsNotByteSequence.md +14 -0
  207. package/build/src/third_party/issue-descriptions/sriSignatureHeaderValueIsParameterized.md +15 -0
  208. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidComponentName.md +8 -0
  209. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidComponentType.md +13 -0
  210. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +4 -0
  211. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +5 -0
  212. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderInvalidParameter.md +11 -0
  213. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderKeyIdLength.md +12 -0
  214. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderMissingLabel.md +6 -0
  215. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +8 -0
  216. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderValueMissingComponents.md +11 -0
  217. package/build/src/third_party/issue-descriptions/sriSignatureInputHeaderValueNotInnerList.md +11 -0
  218. package/build/src/third_party/issue-descriptions/sriValidationFailedIntegrityMismatch.md +10 -0
  219. package/build/src/third_party/issue-descriptions/sriValidationFailedInvalidLength.md +5 -0
  220. package/build/src/third_party/issue-descriptions/sriValidationFailedSignatureExpired.md +6 -0
  221. package/build/src/third_party/issue-descriptions/sriValidationFailedSignatureMismatch.md +11 -0
  222. package/build/src/third_party/issue-descriptions/stylesheetLateImport.md +4 -0
  223. package/build/src/third_party/issue-descriptions/stylesheetRequestFailed.md +3 -0
  224. package/build/src/third_party/issue-descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +3 -0
  225. package/build/src/third_party/issue-descriptions/unencodedDigestIncorrectDigestLength.md +12 -0
  226. package/build/src/third_party/issue-descriptions/unencodedDigestIncorrectDigestType.md +17 -0
  227. package/build/src/third_party/issue-descriptions/unencodedDigestMalformedDictionary.md +14 -0
  228. package/build/src/third_party/issue-descriptions/unencodedDigestUnknownAlgorithm.md +15 -0
  229. package/build/src/tools/ToolDefinition.js +2 -2
  230. package/build/src/tools/categories.js +17 -9
  231. package/build/src/tools/console.js +73 -7
  232. package/build/src/tools/emulation.js +64 -38
  233. package/build/src/tools/input.js +113 -46
  234. package/build/src/tools/network.js +44 -14
  235. package/build/src/tools/pages.js +84 -52
  236. package/build/src/tools/performance.js +14 -12
  237. package/build/src/tools/screenshot.js +14 -11
  238. package/build/src/tools/script.js +29 -15
  239. package/build/src/tools/snapshot.js +27 -23
  240. package/build/src/tools/tools.js +29 -0
  241. package/build/src/trace-processing/parse.js +17 -26
  242. package/build/src/utils/keyboard.js +296 -0
  243. package/build/src/utils/types.js +6 -0
  244. package/package.json +34 -25
  245. package/build/node_modules/chrome-devtools-frontend/LICENSE +0 -27
  246. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/App.js +0 -4
  247. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/AppProvider.js +0 -17
  248. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Base64.js +0 -43
  249. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/CharacterIdMap.js +0 -27
  250. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Color.js +0 -2029
  251. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorConverter.js +0 -330
  252. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ColorUtils.js +0 -221
  253. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Console.js +0 -86
  254. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Debouncer.js +0 -14
  255. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/EventTarget.js +0 -14
  256. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Gzip.js +0 -64
  257. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/JavaScriptMetaData.js +0 -4
  258. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Lazy.js +0 -29
  259. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Linkifier.js +0 -34
  260. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/MapWithDefault.js +0 -20
  261. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Mutex.js +0 -49
  262. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Object.js +0 -86
  263. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ParsedURL.js +0 -459
  264. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Progress.js +0 -144
  265. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/QueryParamHandler.js +0 -4
  266. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResolverBase.js +0 -69
  267. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ResourceType.js +0 -506
  268. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/ReturnToPanel.js +0 -13
  269. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Revealer.js +0 -159
  270. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Runnable.js +0 -24
  271. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SegmentedRange.js +0 -79
  272. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SettingRegistration.js +0 -164
  273. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Settings.js +0 -1252
  274. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/SimpleHistoryManager.js +0 -97
  275. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/StringOutputStream.js +0 -17
  276. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/TextDictionary.js +0 -40
  277. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Throttler.js +0 -71
  278. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Trie.js +0 -127
  279. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/Worker.js +0 -44
  280. package/build/node_modules/chrome-devtools-frontend/front_end/core/common/common.js +0 -44
  281. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/AidaClient.js +0 -415
  282. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/GdpClient.js +0 -186
  283. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHost.js +0 -513
  284. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/InspectorFrontendHostAPI.js +0 -66
  285. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/Platform.js +0 -59
  286. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/ResourceLoader.js +0 -232
  287. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/UserMetrics.js +0 -957
  288. package/build/node_modules/chrome-devtools-frontend/front_end/core/host/host.js +0 -12
  289. package/build/node_modules/chrome-devtools-frontend/front_end/core/i18n/i18n.js +0 -60
  290. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/ArrayUtilities.js +0 -199
  291. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Brand.js +0 -4
  292. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Constructor.js +0 -4
  293. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DOMUtilities.js +0 -122
  294. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DateUtilities.js +0 -13
  295. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/DevToolsPath.js +0 -27
  296. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/KeyboardUtilities.js +0 -21
  297. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MapUtilities.js +0 -79
  298. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/MimeType.js +0 -143
  299. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/NumberUtilities.js +0 -72
  300. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/StringUtilities.js +0 -536
  301. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/Timing.js +0 -9
  302. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypedArrayUtilities.js +0 -157
  303. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/TypescriptUtilities.js +0 -24
  304. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UIString.js +0 -4
  305. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/UserVisibleError.js +0 -22
  306. package/build/node_modules/chrome-devtools-frontend/front_end/core/platform/platform.js +0 -26
  307. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js +0 -802
  308. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/NodeURL.js +0 -31
  309. package/build/node_modules/chrome-devtools-frontend/front_end/core/protocol_client/protocol_client.js +0 -13
  310. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/Runtime.js +0 -4
  311. package/build/node_modules/chrome-devtools-frontend/front_end/core/root/root.js +0 -5
  312. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AccessibilityModel.js +0 -281
  313. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AnimationModel.js +0 -846
  314. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/AutofillModel.js +0 -155
  315. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUProfilerModel.js +0 -99
  316. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CPUThrottlingManager.js +0 -220
  317. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSContainerQuery.js +0 -98
  318. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSFontFace.js +0 -31
  319. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSLayer.js +0 -22
  320. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMatchedStyles.js +0 -1284
  321. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMedia.js +0 -100
  322. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSMetadata.js +0 -1518
  323. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSModel.js +0 -908
  324. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSProperty.js +0 -315
  325. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParser.js +0 -572
  326. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSPropertyParserMatchers.js +0 -1336
  327. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSQuery.js +0 -53
  328. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSRule.js +0 -365
  329. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSScope.js +0 -22
  330. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStartingStyle.js +0 -21
  331. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleDeclaration.js +0 -275
  332. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSStyleSheetHeader.js +0 -166
  333. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CSSSupports.js +0 -24
  334. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CategorizedBreakpoint.js +0 -29
  335. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ChildTargetManager.js +0 -232
  336. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CompilerSourceMappingContentProvider.js +0 -47
  337. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Connections.js +0 -242
  338. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModel.js +0 -629
  339. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ConsoleModelTypes.js +0 -14
  340. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Cookie.js +0 -241
  341. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieModel.js +0 -198
  342. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/CookieParser.js +0 -163
  343. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMDebuggerModel.js +0 -597
  344. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DOMModel.js +0 -1628
  345. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/DebuggerModel.js +0 -1231
  346. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EmulationModel.js +0 -527
  347. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EnhancedTracesParser.js +0 -350
  348. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/EventBreakpointsModel.js +0 -125
  349. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameAssociated.js +0 -4
  350. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/FrameManager.js +0 -199
  351. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HeapProfilerModel.js +0 -130
  352. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/HttpReasonPhraseStrings.js +0 -73
  353. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IOModel.js +0 -83
  354. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IsolateManager.js +0 -208
  355. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/IssuesModel.js +0 -41
  356. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LayerTreeBase.js +0 -95
  357. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/LogModel.js +0 -34
  358. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkManager.js +0 -1916
  359. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/NetworkRequest.js +0 -1668
  360. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayColorGenerator.js +0 -48
  361. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayModel.js +0 -765
  362. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/OverlayPersistentHighlighter.js +0 -384
  363. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageLoad.js +0 -25
  364. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PageResourceLoader.js +0 -300
  365. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PaintProfiler.js +0 -67
  366. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PerformanceMetricsModel.js +0 -62
  367. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/PreloadingModel.js +0 -563
  368. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingConnection.js +0 -290
  369. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RehydratingObject.js +0 -4
  370. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RemoteObject.js +0 -905
  371. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Resource.js +0 -163
  372. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ResourceTreeModel.js +0 -922
  373. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/RuntimeModel.js +0 -535
  374. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SDKModel.js +0 -45
  375. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ScreenCaptureModel.js +0 -174
  376. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Script.js +0 -395
  377. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SecurityOriginManager.js +0 -54
  378. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEvents.js +0 -67
  379. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerSentEventsProtocol.js +0 -110
  380. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServerTiming.js +0 -216
  381. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerCacheModel.js +0 -271
  382. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/ServiceWorkerManager.js +0 -511
  383. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMap.js +0 -651
  384. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapCache.js +0 -41
  385. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapFunctionRanges.js +0 -132
  386. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapManager.js +0 -189
  387. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopeChainEntry.js +0 -156
  388. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/SourceMapScopesInfo.js +0 -276
  389. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageBucketsModel.js +0 -143
  390. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/StorageKeyManager.js +0 -53
  391. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/Target.js +0 -262
  392. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TargetManager.js +0 -386
  393. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/TraceObject.js +0 -52
  394. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/WebAuthnModel.js +0 -66
  395. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk-meta.js +0 -1117
  396. package/build/node_modules/chrome-devtools-frontend/front_end/core/sdk/sdk.js +0 -90
  397. package/build/node_modules/chrome-devtools-frontend/front_end/generated/ARIAProperties.js +0 -1513
  398. package/build/node_modules/chrome-devtools-frontend/front_end/generated/Deprecation.js +0 -339
  399. package/build/node_modules/chrome-devtools-frontend/front_end/generated/InspectorBackendCommands.js +0 -1562
  400. package/build/node_modules/chrome-devtools-frontend/front_end/generated/SupportedCSSProperties.js +0 -7514
  401. package/build/node_modules/chrome-devtools-frontend/front_end/generated/protocol.js +0 -4
  402. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/NetworkRequestFormatter.js +0 -262
  403. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.js +0 -979
  404. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.js +0 -613
  405. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/data_formatters/UnitFormatters.js +0 -139
  406. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AICallTree.js +0 -372
  407. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIContext.js +0 -132
  408. package/build/node_modules/chrome-devtools-frontend/front_end/models/ai_assistance/performance/AIQueries.js +0 -105
  409. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CSSWorkspaceBinding.js +0 -243
  410. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/CompilerScriptMapping.js +0 -407
  411. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ContentProviderBasedProject.js +0 -130
  412. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerLanguagePlugins.js +0 -992
  413. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DebuggerWorkspaceBinding.js +0 -574
  414. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/DefaultScriptMapping.js +0 -112
  415. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/FileUtils.js +0 -186
  416. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/LiveLocation.js +0 -60
  417. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/NetworkProject.js +0 -107
  418. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/PresentationConsoleMessageHelper.js +0 -244
  419. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceMapping.js +0 -473
  420. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceScriptMapping.js +0 -399
  421. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/ResourceUtils.js +0 -87
  422. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/SASSSourceMapping.js +0 -181
  423. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/StylesSourceMapping.js +0 -268
  424. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/TempFile.js +0 -55
  425. package/build/node_modules/chrome-devtools-frontend/front_end/models/bindings/bindings.js +0 -20
  426. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/CPUProfileDataModel.js +0 -514
  427. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/ProfileTreeModel.js +0 -90
  428. package/build/node_modules/chrome-devtools-frontend/front_end/models/cpu_profile/cpu_profile.js +0 -6
  429. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/CrUXManager.js +0 -283
  430. package/build/node_modules/chrome-devtools-frontend/front_end/models/crux-manager/crux-manager.js +0 -4
  431. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/DeviceModeModel.js +0 -775
  432. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/EmulatedDevices.js +0 -1706
  433. package/build/node_modules/chrome-devtools-frontend/front_end/models/emulation/emulation.js +0 -6
  434. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/FormatterWorkerPool.js +0 -131
  435. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/ScriptFormatter.js +0 -77
  436. package/build/node_modules/chrome-devtools-frontend/front_end/models/formatter/formatter.js +0 -6
  437. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/GeometryImpl.js +0 -347
  438. package/build/node_modules/chrome-devtools-frontend/front_end/models/geometry/geometry.js +0 -4
  439. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/LogManager.js +0 -67
  440. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/NetworkLog.js +0 -494
  441. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/RequestResolver.js +0 -49
  442. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs-meta.js +0 -73
  443. package/build/node_modules/chrome-devtools-frontend/front_end/models/logs/logs.js +0 -7
  444. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/Calculator.js +0 -4
  445. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/NetworkTimeCalculator.js +0 -256
  446. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/RequestTimeRanges.js +0 -120
  447. package/build/node_modules/chrome-devtools-frontend/front_end/models/network_time_calculator/network_time_calculator.js +0 -6
  448. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/NamesResolver.js +0 -626
  449. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeChainModel.js +0 -59
  450. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/ScopeTreeCache.js +0 -32
  451. package/build/node_modules/chrome-devtools-frontend/front_end/models/source_map_scopes/source_map_scopes.js +0 -7
  452. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTrace.js +0 -4
  453. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceImpl.js +0 -67
  454. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/StackTraceModel.js +0 -97
  455. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/Trie.js +0 -113
  456. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace.js +0 -5
  457. package/build/node_modules/chrome-devtools-frontend/front_end/models/stack_trace/stack_trace_impl.js +0 -7
  458. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/CodeMirrorUtils.js +0 -32
  459. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentData.js +0 -173
  460. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/ContentProvider.js +0 -30
  461. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StaticContentProvider.js +0 -32
  462. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/StreamingContentData.js +0 -79
  463. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/Text.js +0 -69
  464. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextCursor.js +0 -35
  465. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextRange.js +0 -231
  466. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/TextUtils.js +0 -355
  467. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/WasmDisassembly.js +0 -68
  468. package/build/node_modules/chrome-devtools-frontend/front_end/models/text_utils/text_utils.js +0 -14
  469. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EntityMapper.js +0 -122
  470. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/EventsSerializer.js +0 -81
  471. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/LanternComputationData.js +0 -370
  472. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/ModelImpl.js +0 -166
  473. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Name.js +0 -114
  474. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Processor.js +0 -555
  475. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/Styles.js +0 -815
  476. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/FilmStrip.js +0 -44
  477. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/MainThreadActivity.js +0 -76
  478. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ScriptDuplication.js +0 -162
  479. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/StackTraceForEvent.js +0 -191
  480. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/ThirdParties.js +0 -118
  481. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceFilter.js +0 -50
  482. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/TraceTree.js +0 -592
  483. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/extras/extras.js +0 -10
  484. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationFramesHandler.js +0 -109
  485. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AnimationHandler.js +0 -26
  486. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AsyncJSCallsHandler.js +0 -187
  487. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/AuctionWorkletsHandler.js +0 -162
  488. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/DOMStatsHandler.js +0 -21
  489. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ExtensionTraceDataHandler.js +0 -263
  490. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FlowsHandler.js +0 -148
  491. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/FramesHandler.js +0 -483
  492. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/GPUHandler.js +0 -35
  493. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ImagePaintingHandler.js +0 -147
  494. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InitiatorsHandler.js +0 -180
  495. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/InvalidationsHandler.js +0 -126
  496. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestImagePaintHandler.js +0 -85
  497. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LargestTextPaintHandler.js +0 -27
  498. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayerTreeHandler.js +0 -103
  499. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/LayoutShiftsHandler.js +0 -445
  500. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MemoryHandler.js +0 -21
  501. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/MetaHandler.js +0 -401
  502. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ModelHandlers.js +0 -33
  503. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/NetworkRequestsHandler.js +0 -540
  504. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageFramesHandler.js +0 -42
  505. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/PageLoadMetricsHandler.js +0 -349
  506. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/RendererHandler.js +0 -346
  507. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SamplesHandler.js +0 -207
  508. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScreenshotsHandler.js +0 -97
  509. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/ScriptsHandler.js +0 -252
  510. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/SelectorStatsHandler.js +0 -71
  511. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/Threads.js +0 -101
  512. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserInteractionsHandler.js +0 -317
  513. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/UserTimingsHandler.js +0 -183
  514. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WarningsHandler.js +0 -134
  515. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/WorkersHandler.js +0 -33
  516. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/handlers.js +0 -7
  517. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/helpers.js +0 -163
  518. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/handlers/types.js +0 -1
  519. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Extensions.js +0 -41
  520. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Network.js +0 -102
  521. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SamplesIntegrator.js +0 -495
  522. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/SyntheticEvents.js +0 -74
  523. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Timing.js +0 -184
  524. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/Trace.js +0 -806
  525. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/TreeHelpers.js +0 -254
  526. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/helpers/helpers.js +0 -10
  527. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/CLSCulprits.js +0 -488
  528. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Cache.js +0 -208
  529. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Common.js +0 -340
  530. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DOMSize.js +0 -180
  531. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DocumentLatency.js +0 -257
  532. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/DuplicatedJavaScript.js +0 -89
  533. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/FontDisplay.js +0 -81
  534. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ForcedReflow.js +0 -160
  535. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/INPBreakdown.js +0 -117
  536. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ImageDelivery.js +0 -262
  537. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPBreakdown.js +0 -188
  538. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LCPDiscovery.js +0 -182
  539. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/LegacyJavaScript.js +0 -89
  540. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Models.js +0 -21
  541. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ModernHTTP.js +0 -199
  542. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/NetworkDependencyTree.js +0 -544
  543. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/RenderBlocking.js +0 -191
  544. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/SlowCSSSelector.js +0 -135
  545. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Statistics.js +0 -92
  546. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/ThirdParties.js +0 -97
  547. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/Viewport.js +0 -101
  548. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/insights.js +0 -9
  549. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/insights/types.js +0 -18
  550. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/LanternError.js +0 -6
  551. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/NetworkAnalyzer.js +0 -488
  552. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/core/core.js +0 -5
  553. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/BaseNode.js +0 -276
  554. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/CPUNode.js +0 -63
  555. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/NetworkNode.js +0 -82
  556. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/PageDependencyGraph.js +0 -551
  557. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/graph/graph.js +0 -7
  558. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/lantern.js +0 -9
  559. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/FirstContentfulPaint.js +0 -136
  560. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Interactive.js +0 -67
  561. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/LargestContentfulPaint.js +0 -68
  562. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/MaxPotentialFID.js +0 -48
  563. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/Metric.js +0 -68
  564. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/SpeedIndex.js +0 -101
  565. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TBTUtils.js +0 -64
  566. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/TotalBlockingTime.js +0 -78
  567. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/metrics/metrics.js +0 -11
  568. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/ConnectionPool.js +0 -115
  569. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Constants.js +0 -42
  570. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/DNSCache.js +0 -47
  571. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/SimulationTimingMap.js +0 -134
  572. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/Simulator.js +0 -450
  573. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/TCPConnection.js +0 -154
  574. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/simulation/simulation.js +0 -9
  575. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/Lantern.js +0 -24
  576. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/lantern/types/types.js +0 -4
  577. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/trace.js +0 -17
  578. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Configuration.js +0 -18
  579. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Extensions.js +0 -37
  580. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/File.js +0 -57
  581. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Overlays.js +0 -4
  582. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/Timing.js +0 -15
  583. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/TraceEvents.js +0 -574
  584. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace/types/types.js +0 -9
  585. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/SourceMapsResolver.js +0 -201
  586. package/build/node_modules/chrome-devtools-frontend/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.js +0 -4
  587. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/FileManager.js +0 -64
  588. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/IgnoreListManager.js +0 -511
  589. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/SearchConfig.js +0 -113
  590. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/UISourceCode.js +0 -563
  591. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/WorkspaceImpl.js +0 -204
  592. package/build/node_modules/chrome-devtools-frontend/front_end/models/workspace/workspace.js +0 -9
  593. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/codemirror.next/codemirror.next.js +0 -1
  594. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/LICENSE +0 -202
  595. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/legacy-javascript.js +0 -2
  596. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/legacy-javascript/lib/legacy-javascript.js +0 -940
  597. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/LICENSE +0 -26
  598. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/builder.js +0 -196
  599. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/builder/safe_builder.js +0 -226
  600. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/codec.js +0 -4
  601. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +0 -394
  602. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encode.js +0 -24
  603. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +0 -283
  604. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/mod.js +0 -7
  605. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/util.js +0 -9
  606. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/package/src/vlq.js +0 -84
  607. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/source-map-scopes-codec/source-map-scopes-codec.js +0 -4
  608. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/LICENSE +0 -20
  609. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/lib/nostats-subset.js +0 -146
  610. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-nostats-subset.js +0 -2
  611. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/httparchive-subset.js +0 -2
  612. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.js +0 -118
  613. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/create-entity-finder-api.test.js +0 -40
  614. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/entities.test.js +0 -26
  615. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.js +0 -4
  616. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/index.test.js +0 -215
  617. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive-nostats.js +0 -4
  618. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/httparchive.js +0 -4
  619. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/lib/subsets/nostats.js +0 -4
  620. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/package/nostats-subset.js +0 -2
  621. package/build/node_modules/chrome-devtools-frontend/front_end/third_party/third-party-web/third-party-web.js +0 -2
@@ -1,1916 +0,0 @@
1
- // Copyright 2011 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 TextUtils from '../../models/text_utils/text_utils.js';
5
- import * as Common from '../common/common.js';
6
- import * as Host from '../host/host.js';
7
- import * as i18n from '../i18n/i18n.js';
8
- import * as Platform from '../platform/platform.js';
9
- import * as Root from '../root/root.js';
10
- import { Cookie } from './Cookie.js';
11
- import { DirectSocketChunkType, DirectSocketStatus, DirectSocketType, Events as NetworkRequestEvents, NetworkRequest } from './NetworkRequest.js';
12
- import { SDKModel } from './SDKModel.js';
13
- import { TargetManager } from './TargetManager.js';
14
- const UIStrings = {
15
- /**
16
- * @description Explanation why no content is shown for WebSocket connection.
17
- */
18
- noContentForWebSocket: 'Content for WebSockets is currently not supported',
19
- /**
20
- * @description Explanation why no content is shown for redirect response.
21
- */
22
- noContentForRedirect: 'No content available because this request was redirected',
23
- /**
24
- * @description Explanation why no content is shown for preflight request.
25
- */
26
- noContentForPreflight: 'No content available for preflight request',
27
- /**
28
- * @description Text to indicate that network throttling is disabled
29
- */
30
- noThrottling: 'No throttling',
31
- /**
32
- * @description Text to indicate the network connectivity is offline
33
- */
34
- offline: 'Offline',
35
- /**
36
- * @description Text in Network Manager representing the "3G" throttling preset.
37
- */
38
- slowG: '3G', // Named `slowG` for legacy reasons and because this value
39
- // is serialized locally on the user's machine: if we
40
- // change it we break their stored throttling settings.
41
- // (See crrev.com/c/2947255)
42
- /**
43
- * @description Text in Network Manager representing the "Slow 4G" throttling preset
44
- */
45
- fastG: 'Slow 4G', // Named `fastG` for legacy reasons and because this value
46
- // is serialized locally on the user's machine: if we
47
- // change it we break their stored throttling settings.
48
- // (See crrev.com/c/2947255)
49
- /**
50
- * @description Text in Network Manager representing the "Fast 4G" throttling preset
51
- */
52
- fast4G: 'Fast 4G',
53
- /**
54
- * @description Text in Network Manager
55
- * @example {https://example.com} PH1
56
- */
57
- requestWasBlockedByDevtoolsS: 'Request was blocked by DevTools: "{PH1}"',
58
- /**
59
- * @description Message in Network Manager
60
- * @example {XHR} PH1
61
- * @example {GET} PH2
62
- * @example {https://example.com} PH3
63
- */
64
- sFailedLoadingSS: '{PH1} failed loading: {PH2} "{PH3}".',
65
- /**
66
- * @description Message in Network Manager
67
- * @example {XHR} PH1
68
- * @example {GET} PH2
69
- * @example {https://example.com} PH3
70
- */
71
- sFinishedLoadingSS: '{PH1} finished loading: {PH2} "{PH3}".',
72
- /**
73
- * @description One of direct socket connection statuses
74
- */
75
- directSocketStatusOpening: 'Opening',
76
- /**
77
- * @description One of direct socket connection statuses
78
- */
79
- directSocketStatusOpen: 'Open',
80
- /**
81
- * @description One of direct socket connection statuses
82
- */
83
- directSocketStatusClosed: 'Closed',
84
- /**
85
- * @description One of direct socket connection statuses
86
- */
87
- directSocketStatusAborted: 'Aborted',
88
- };
89
- const str_ = i18n.i18n.registerUIStrings('core/sdk/NetworkManager.ts', UIStrings);
90
- const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
91
- const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
92
- const requestToManagerMap = new WeakMap();
93
- const CONNECTION_TYPES = new Map([
94
- ['2g', "cellular2g" /* Protocol.Network.ConnectionType.Cellular2g */],
95
- ['3g', "cellular3g" /* Protocol.Network.ConnectionType.Cellular3g */],
96
- ['4g', "cellular4g" /* Protocol.Network.ConnectionType.Cellular4g */],
97
- ['bluetooth', "bluetooth" /* Protocol.Network.ConnectionType.Bluetooth */],
98
- ['wifi', "wifi" /* Protocol.Network.ConnectionType.Wifi */],
99
- ['wimax', "wimax" /* Protocol.Network.ConnectionType.Wimax */],
100
- ]);
101
- /**
102
- * We store two settings to disk to persist network throttling.
103
- * 1. The custom conditions that the user has defined.
104
- * 2. The active `key` that applies the correct current preset.
105
- * The reason the setting creation functions are defined here is because they are referred
106
- * to in multiple places, and this ensures we don't have accidental typos which
107
- * mean extra settings get mistakenly created.
108
- */
109
- export function customUserNetworkConditionsSetting() {
110
- return Common.Settings.Settings.instance().moduleSetting('custom-network-conditions');
111
- }
112
- export function activeNetworkThrottlingKeySetting() {
113
- return Common.Settings.Settings.instance().createSetting('active-network-condition-key', "NO_THROTTLING" /* PredefinedThrottlingConditionKey.NO_THROTTLING */);
114
- }
115
- export class NetworkManager extends SDKModel {
116
- dispatcher;
117
- fetchDispatcher;
118
- #networkAgent;
119
- #bypassServiceWorkerSetting;
120
- activeNetworkThrottlingKey = activeNetworkThrottlingKeySetting();
121
- constructor(target) {
122
- super(target);
123
- this.dispatcher = new NetworkDispatcher(this);
124
- this.fetchDispatcher = new FetchDispatcher(target.fetchAgent(), this);
125
- this.#networkAgent = target.networkAgent();
126
- target.registerNetworkDispatcher(this.dispatcher);
127
- target.registerFetchDispatcher(this.fetchDispatcher);
128
- if (Common.Settings.Settings.instance().moduleSetting('cache-disabled').get()) {
129
- void this.#networkAgent.invoke_setCacheDisabled({ cacheDisabled: true });
130
- }
131
- if (Root.Runtime.hostConfig.devToolsPrivacyUI?.enabled &&
132
- Root.Runtime.hostConfig.thirdPartyCookieControls?.managedBlockThirdPartyCookies !== true &&
133
- (Common.Settings.Settings.instance().createSetting('cookie-control-override-enabled', undefined).get() ||
134
- Common.Settings.Settings.instance().createSetting('grace-period-mitigation-disabled', undefined).get() ||
135
- Common.Settings.Settings.instance().createSetting('heuristic-mitigation-disabled', undefined).get())) {
136
- this.cookieControlFlagsSettingChanged();
137
- }
138
- void this.#networkAgent.invoke_enable({
139
- maxPostDataSize: MAX_EAGER_POST_REQUEST_BODY_LENGTH,
140
- reportDirectSocketTraffic: true,
141
- });
142
- void this.#networkAgent.invoke_setAttachDebugStack({ enabled: true });
143
- this.#bypassServiceWorkerSetting =
144
- Common.Settings.Settings.instance().createSetting('bypass-service-worker', false);
145
- if (this.#bypassServiceWorkerSetting.get()) {
146
- this.bypassServiceWorkerChanged();
147
- }
148
- this.#bypassServiceWorkerSetting.addChangeListener(this.bypassServiceWorkerChanged, this);
149
- Common.Settings.Settings.instance()
150
- .moduleSetting('cache-disabled')
151
- .addChangeListener(this.cacheDisabledSettingChanged, this);
152
- Common.Settings.Settings.instance()
153
- .createSetting('cookie-control-override-enabled', undefined)
154
- .addChangeListener(this.cookieControlFlagsSettingChanged, this);
155
- Common.Settings.Settings.instance()
156
- .createSetting('grace-period-mitigation-disabled', undefined)
157
- .addChangeListener(this.cookieControlFlagsSettingChanged, this);
158
- Common.Settings.Settings.instance()
159
- .createSetting('heuristic-mitigation-disabled', undefined)
160
- .addChangeListener(this.cookieControlFlagsSettingChanged, this);
161
- }
162
- static forRequest(request) {
163
- return requestToManagerMap.get(request) || null;
164
- }
165
- static canReplayRequest(request) {
166
- return Boolean(requestToManagerMap.get(request)) && Boolean(request.backendRequestId()) && !request.isRedirect() &&
167
- request.resourceType() === Common.ResourceType.resourceTypes.XHR;
168
- }
169
- static replayRequest(request) {
170
- const manager = requestToManagerMap.get(request);
171
- const requestId = request.backendRequestId();
172
- if (!manager || !requestId || request.isRedirect()) {
173
- return;
174
- }
175
- void manager.#networkAgent.invoke_replayXHR({ requestId });
176
- }
177
- static async searchInRequest(request, query, caseSensitive, isRegex) {
178
- const manager = NetworkManager.forRequest(request);
179
- const requestId = request.backendRequestId();
180
- if (!manager || !requestId || request.isRedirect()) {
181
- return [];
182
- }
183
- const response = await manager.#networkAgent.invoke_searchInResponseBody({ requestId, query, caseSensitive, isRegex });
184
- return TextUtils.TextUtils.performSearchInSearchMatches(response.result || [], query, caseSensitive, isRegex);
185
- }
186
- static async requestContentData(request) {
187
- if (request.resourceType() === Common.ResourceType.resourceTypes.WebSocket) {
188
- return { error: i18nString(UIStrings.noContentForWebSocket) };
189
- }
190
- if (!request.finished) {
191
- await request.once(NetworkRequestEvents.FINISHED_LOADING);
192
- }
193
- if (request.isRedirect()) {
194
- return { error: i18nString(UIStrings.noContentForRedirect) };
195
- }
196
- if (request.isPreflightRequest()) {
197
- return { error: i18nString(UIStrings.noContentForPreflight) };
198
- }
199
- const manager = NetworkManager.forRequest(request);
200
- if (!manager) {
201
- return { error: 'No network manager for request' };
202
- }
203
- const requestId = request.backendRequestId();
204
- if (!requestId) {
205
- return { error: 'No backend request id for request' };
206
- }
207
- const response = await manager.#networkAgent.invoke_getResponseBody({ requestId });
208
- const error = response.getError();
209
- if (error) {
210
- return { error };
211
- }
212
- return new TextUtils.ContentData.ContentData(response.body, response.base64Encoded, request.mimeType, request.charset() ?? undefined);
213
- }
214
- /**
215
- * Returns the already received bytes for an in-flight request. After calling this method
216
- * "dataReceived" events will contain additional data.
217
- */
218
- static async streamResponseBody(request) {
219
- if (request.finished) {
220
- return { error: 'Streaming the response body is only available for in-flight requests.' };
221
- }
222
- const manager = NetworkManager.forRequest(request);
223
- if (!manager) {
224
- return { error: 'No network manager for request' };
225
- }
226
- const requestId = request.backendRequestId();
227
- if (!requestId) {
228
- return { error: 'No backend request id for request' };
229
- }
230
- const response = await manager.#networkAgent.invoke_streamResourceContent({ requestId });
231
- const error = response.getError();
232
- if (error) {
233
- return { error };
234
- }
235
- // Wait for at least the `responseReceived event so we have accurate mimetype and charset.
236
- await request.waitForResponseReceived();
237
- return new TextUtils.ContentData.ContentData(response.bufferedData, /* isBase64=*/ true, request.mimeType, request.charset() ?? undefined);
238
- }
239
- static async requestPostData(request) {
240
- const manager = NetworkManager.forRequest(request);
241
- if (!manager) {
242
- console.error('No network manager for request');
243
- return null;
244
- }
245
- const requestId = request.backendRequestId();
246
- if (!requestId) {
247
- console.error('No backend request id for request');
248
- return null;
249
- }
250
- try {
251
- const { postData } = await manager.#networkAgent.invoke_getRequestPostData({ requestId });
252
- return postData;
253
- }
254
- catch (e) {
255
- return e.message;
256
- }
257
- }
258
- static connectionType(conditions) {
259
- if (!conditions.download && !conditions.upload) {
260
- return "none" /* Protocol.Network.ConnectionType.None */;
261
- }
262
- try {
263
- const title = typeof conditions.title === 'function' ? conditions.title().toLowerCase() : conditions.title.toLowerCase();
264
- for (const [name, protocolType] of CONNECTION_TYPES) {
265
- if (title.includes(name)) {
266
- return protocolType;
267
- }
268
- }
269
- }
270
- catch {
271
- // If the i18nKey for this condition has changed, calling conditions.title() will break, so in that case we reset to NONE
272
- return "none" /* Protocol.Network.ConnectionType.None */;
273
- }
274
- return "other" /* Protocol.Network.ConnectionType.Other */;
275
- }
276
- static lowercaseHeaders(headers) {
277
- const newHeaders = {};
278
- for (const headerName in headers) {
279
- newHeaders[headerName.toLowerCase()] = headers[headerName];
280
- }
281
- return newHeaders;
282
- }
283
- requestForURL(url) {
284
- return this.dispatcher.requestForURL(url);
285
- }
286
- requestForId(id) {
287
- return this.dispatcher.requestForId(id);
288
- }
289
- requestForLoaderId(loaderId) {
290
- return this.dispatcher.requestForLoaderId(loaderId);
291
- }
292
- cacheDisabledSettingChanged({ data: enabled }) {
293
- void this.#networkAgent.invoke_setCacheDisabled({ cacheDisabled: enabled });
294
- }
295
- cookieControlFlagsSettingChanged() {
296
- const overridesEnabled = Boolean(Common.Settings.Settings.instance().createSetting('cookie-control-override-enabled', undefined).get());
297
- const gracePeriodEnabled = overridesEnabled ?
298
- Boolean(Common.Settings.Settings.instance().createSetting('grace-period-mitigation-disabled', undefined).get()) :
299
- false;
300
- const heuristicEnabled = overridesEnabled ?
301
- Boolean(Common.Settings.Settings.instance().createSetting('heuristic-mitigation-disabled', undefined).get()) :
302
- false;
303
- void this.#networkAgent.invoke_setCookieControls({
304
- enableThirdPartyCookieRestriction: overridesEnabled,
305
- disableThirdPartyCookieMetadata: gracePeriodEnabled,
306
- disableThirdPartyCookieHeuristics: heuristicEnabled,
307
- });
308
- }
309
- dispose() {
310
- Common.Settings.Settings.instance()
311
- .moduleSetting('cache-disabled')
312
- .removeChangeListener(this.cacheDisabledSettingChanged, this);
313
- }
314
- bypassServiceWorkerChanged() {
315
- void this.#networkAgent.invoke_setBypassServiceWorker({ bypass: this.#bypassServiceWorkerSetting.get() });
316
- }
317
- async getSecurityIsolationStatus(frameId) {
318
- const result = await this.#networkAgent.invoke_getSecurityIsolationStatus({ frameId: frameId ?? undefined });
319
- if (result.getError()) {
320
- return null;
321
- }
322
- return result.status;
323
- }
324
- async getIpProtectionProxyStatus() {
325
- const result = await this.#networkAgent.invoke_getIPProtectionProxyStatus();
326
- if (result.getError()) {
327
- return null;
328
- }
329
- return result.status;
330
- }
331
- async enableReportingApi(enable = true) {
332
- return await this.#networkAgent.invoke_enableReportingApi({ enable });
333
- }
334
- async loadNetworkResource(frameId, url, options) {
335
- const result = await this.#networkAgent.invoke_loadNetworkResource({ frameId: frameId ?? undefined, url, options });
336
- if (result.getError()) {
337
- throw new Error(result.getError());
338
- }
339
- return result.resource;
340
- }
341
- clearRequests() {
342
- this.dispatcher.clearRequests();
343
- }
344
- }
345
- export var Events;
346
- (function (Events) {
347
- /* eslint-disable @typescript-eslint/naming-convention -- Used by web_tests. */
348
- Events["RequestStarted"] = "RequestStarted";
349
- Events["RequestUpdated"] = "RequestUpdated";
350
- Events["RequestFinished"] = "RequestFinished";
351
- Events["RequestUpdateDropped"] = "RequestUpdateDropped";
352
- Events["ResponseReceived"] = "ResponseReceived";
353
- Events["MessageGenerated"] = "MessageGenerated";
354
- Events["RequestRedirected"] = "RequestRedirected";
355
- Events["LoadingFinished"] = "LoadingFinished";
356
- Events["ReportingApiReportAdded"] = "ReportingApiReportAdded";
357
- Events["ReportingApiReportUpdated"] = "ReportingApiReportUpdated";
358
- Events["ReportingApiEndpointsChangedForOrigin"] = "ReportingApiEndpointsChangedForOrigin";
359
- /* eslint-enable @typescript-eslint/naming-convention */
360
- })(Events || (Events = {}));
361
- /**
362
- * Define some built-in DevTools throttling presets.
363
- * Note that for the download, upload and RTT values we multiply them by adjustment factors to make DevTools' emulation more accurate.
364
- * @see https://docs.google.com/document/d/10lfVdS1iDWCRKQXPfbxEn4Or99D64mvNlugP1AQuFlE/edit for historical context.
365
- * @see https://crbug.com/342406608#comment10 for context around the addition of 4G presets in June 2024.
366
- */
367
- export const NoThrottlingConditions = {
368
- key: "NO_THROTTLING" /* PredefinedThrottlingConditionKey.NO_THROTTLING */,
369
- title: i18nLazyString(UIStrings.noThrottling),
370
- i18nTitleKey: UIStrings.noThrottling,
371
- download: -1,
372
- upload: -1,
373
- latency: 0,
374
- };
375
- export const OfflineConditions = {
376
- key: "OFFLINE" /* PredefinedThrottlingConditionKey.OFFLINE */,
377
- title: i18nLazyString(UIStrings.offline),
378
- i18nTitleKey: UIStrings.offline,
379
- download: 0,
380
- upload: 0,
381
- latency: 0,
382
- };
383
- const slow3GTargetLatency = 400;
384
- export const Slow3GConditions = {
385
- key: "SPEED_3G" /* PredefinedThrottlingConditionKey.SPEED_3G */,
386
- title: i18nLazyString(UIStrings.slowG),
387
- i18nTitleKey: UIStrings.slowG,
388
- // ~500Kbps down
389
- download: 500 * 1000 / 8 * .8,
390
- // ~500Kbps up
391
- upload: 500 * 1000 / 8 * .8,
392
- // 400ms RTT
393
- latency: slow3GTargetLatency * 5,
394
- targetLatency: slow3GTargetLatency,
395
- };
396
- // Note for readers: this used to be called "Fast 3G" but it was renamed in May
397
- // 2024 to align with LH (crbug.com/342406608).
398
- const slow4GTargetLatency = 150;
399
- export const Slow4GConditions = {
400
- key: "SPEED_SLOW_4G" /* PredefinedThrottlingConditionKey.SPEED_SLOW_4G */,
401
- title: i18nLazyString(UIStrings.fastG),
402
- i18nTitleKey: UIStrings.fastG,
403
- // ~1.6 Mbps down
404
- download: 1.6 * 1000 * 1000 / 8 * .9,
405
- // ~0.75 Mbps up
406
- upload: 750 * 1000 / 8 * .9,
407
- // 150ms RTT
408
- latency: slow4GTargetLatency * 3.75,
409
- targetLatency: slow4GTargetLatency,
410
- };
411
- const fast4GTargetLatency = 60;
412
- export const Fast4GConditions = {
413
- key: "SPEED_FAST_4G" /* PredefinedThrottlingConditionKey.SPEED_FAST_4G */,
414
- title: i18nLazyString(UIStrings.fast4G),
415
- i18nTitleKey: UIStrings.fast4G,
416
- // 9 Mbps down
417
- download: 9 * 1000 * 1000 / 8 * .9,
418
- // 1.5 Mbps up
419
- upload: 1.5 * 1000 * 1000 / 8 * .9,
420
- // 60ms RTT
421
- latency: fast4GTargetLatency * 2.75,
422
- targetLatency: fast4GTargetLatency,
423
- };
424
- const MAX_EAGER_POST_REQUEST_BODY_LENGTH = 64 * 1024; // bytes
425
- export class FetchDispatcher {
426
- #fetchAgent;
427
- #manager;
428
- constructor(agent, manager) {
429
- this.#fetchAgent = agent;
430
- this.#manager = manager;
431
- }
432
- requestPaused({ requestId, request, resourceType, responseStatusCode, responseHeaders, networkId }) {
433
- const networkRequest = networkId ? this.#manager.requestForId(networkId) : null;
434
- // If there was no 'Network.responseReceivedExtraInfo' event (e.g. for 'file:/' URLSs),
435
- // populate 'originalResponseHeaders' with the headers from the 'Fetch.requestPaused' event.
436
- if (networkRequest?.originalResponseHeaders.length === 0 && responseHeaders) {
437
- networkRequest.originalResponseHeaders = responseHeaders;
438
- }
439
- void MultitargetNetworkManager.instance().requestIntercepted(new InterceptedRequest(this.#fetchAgent, request, resourceType, requestId, networkRequest, responseStatusCode, responseHeaders));
440
- }
441
- authRequired({}) {
442
- }
443
- }
444
- export class NetworkDispatcher {
445
- #manager;
446
- #requestsById = new Map();
447
- #requestsByURL = new Map();
448
- #requestsByLoaderId = new Map();
449
- #requestIdToExtraInfoBuilder = new Map();
450
- /**
451
- * In case of an early abort or a cache hit, the Trust Token done event is
452
- * reported before the request itself is created in `requestWillBeSent`.
453
- * This causes the event to be lost as no `NetworkRequest` instance has been
454
- * created yet.
455
- * This map caches the events temporarily and populates the NetworkRequest
456
- * once it is created in `requestWillBeSent`.
457
- */
458
- #requestIdToTrustTokenEvent = new Map();
459
- constructor(manager) {
460
- this.#manager = manager;
461
- MultitargetNetworkManager.instance().addEventListener("RequestIntercepted" /* MultitargetNetworkManager.Events.REQUEST_INTERCEPTED */, this.#markAsIntercepted.bind(this));
462
- }
463
- #markAsIntercepted(event) {
464
- const request = this.requestForId(event.data);
465
- if (request) {
466
- request.setWasIntercepted(true);
467
- }
468
- }
469
- headersMapToHeadersArray(headersMap) {
470
- const result = [];
471
- for (const name in headersMap) {
472
- const values = headersMap[name].split('\n');
473
- for (let i = 0; i < values.length; ++i) {
474
- result.push({ name, value: values[i] });
475
- }
476
- }
477
- return result;
478
- }
479
- updateNetworkRequestWithRequest(networkRequest, request) {
480
- networkRequest.requestMethod = request.method;
481
- networkRequest.setRequestHeaders(this.headersMapToHeadersArray(request.headers));
482
- networkRequest.setRequestFormData(Boolean(request.hasPostData), request.postData || null);
483
- networkRequest.setInitialPriority(request.initialPriority);
484
- networkRequest.mixedContentType = request.mixedContentType || "none" /* Protocol.Security.MixedContentType.None */;
485
- networkRequest.setReferrerPolicy(request.referrerPolicy);
486
- networkRequest.setIsSameSite(request.isSameSite || false);
487
- networkRequest.setIsAdRelated(request.isAdRelated || false);
488
- }
489
- updateNetworkRequestWithResponse(networkRequest, response) {
490
- if (response.url && networkRequest.url() !== response.url) {
491
- networkRequest.setUrl(response.url);
492
- }
493
- networkRequest.mimeType = response.mimeType;
494
- networkRequest.setCharset(response.charset);
495
- if (!networkRequest.statusCode || networkRequest.wasIntercepted()) {
496
- networkRequest.statusCode = response.status;
497
- }
498
- if (!networkRequest.statusText || networkRequest.wasIntercepted()) {
499
- networkRequest.statusText = response.statusText;
500
- }
501
- if (!networkRequest.hasExtraResponseInfo() || networkRequest.wasIntercepted()) {
502
- networkRequest.responseHeaders = this.headersMapToHeadersArray(response.headers);
503
- }
504
- if (response.encodedDataLength >= 0) {
505
- networkRequest.setTransferSize(response.encodedDataLength);
506
- }
507
- if (response.requestHeaders && !networkRequest.hasExtraRequestInfo()) {
508
- // TODO(http://crbug.com/1004979): Stop using response.requestHeaders and
509
- // response.requestHeadersText once shared workers
510
- // emit Network.*ExtraInfo events for their network #requests.
511
- networkRequest.setRequestHeaders(this.headersMapToHeadersArray(response.requestHeaders));
512
- networkRequest.setRequestHeadersText(response.requestHeadersText || '');
513
- }
514
- networkRequest.connectionReused = response.connectionReused;
515
- networkRequest.connectionId = String(response.connectionId);
516
- if (response.remoteIPAddress) {
517
- networkRequest.setRemoteAddress(response.remoteIPAddress, response.remotePort || -1);
518
- }
519
- if (response.fromServiceWorker) {
520
- networkRequest.fetchedViaServiceWorker = true;
521
- }
522
- if (response.fromDiskCache) {
523
- networkRequest.setFromDiskCache();
524
- }
525
- if (response.fromPrefetchCache) {
526
- networkRequest.setFromPrefetchCache();
527
- }
528
- if (response.fromEarlyHints) {
529
- networkRequest.setFromEarlyHints();
530
- }
531
- if (response.cacheStorageCacheName) {
532
- networkRequest.setResponseCacheStorageCacheName(response.cacheStorageCacheName);
533
- }
534
- if (response.serviceWorkerRouterInfo) {
535
- networkRequest.serviceWorkerRouterInfo = response.serviceWorkerRouterInfo;
536
- }
537
- if (response.responseTime) {
538
- networkRequest.setResponseRetrievalTime(new Date(response.responseTime));
539
- }
540
- networkRequest.timing = response.timing;
541
- networkRequest.protocol = response.protocol || '';
542
- networkRequest.alternateProtocolUsage = response.alternateProtocolUsage;
543
- if (response.serviceWorkerResponseSource) {
544
- networkRequest.setServiceWorkerResponseSource(response.serviceWorkerResponseSource);
545
- }
546
- networkRequest.setSecurityState(response.securityState);
547
- if (response.securityDetails) {
548
- networkRequest.setSecurityDetails(response.securityDetails);
549
- }
550
- // TODO(crbug.com/425645896): Remove this guard once IP Protection is fully launched.
551
- if (Root.Runtime.hostConfig.devToolsIpProtectionInDevTools?.enabled) {
552
- if (response.isIpProtectionUsed) {
553
- networkRequest.setIsIpProtectionUsed(response.isIpProtectionUsed);
554
- }
555
- }
556
- const newResourceType = Common.ResourceType.ResourceType.fromMimeTypeOverride(networkRequest.mimeType);
557
- if (newResourceType) {
558
- networkRequest.setResourceType(newResourceType);
559
- }
560
- if (networkRequest.responseReceivedPromiseResolve) {
561
- // Anyone interested in waiting for response headers being available?
562
- networkRequest.responseReceivedPromiseResolve();
563
- }
564
- else {
565
- // If not, make sure no one will wait on it in the future.
566
- networkRequest.responseReceivedPromise = Promise.resolve();
567
- }
568
- }
569
- requestForId(id) {
570
- return this.#requestsById.get(id) || null;
571
- }
572
- requestForURL(url) {
573
- return this.#requestsByURL.get(url) || null;
574
- }
575
- requestForLoaderId(loaderId) {
576
- return this.#requestsByLoaderId.get(loaderId) || null;
577
- }
578
- resourceChangedPriority({ requestId, newPriority }) {
579
- const networkRequest = this.#requestsById.get(requestId);
580
- if (networkRequest) {
581
- networkRequest.setPriority(newPriority);
582
- }
583
- }
584
- signedExchangeReceived({ requestId, info }) {
585
- // While loading a signed exchange, a signedExchangeReceived event is sent
586
- // between two requestWillBeSent events.
587
- // 1. The first requestWillBeSent is sent while starting the navigation (or
588
- // prefetching).
589
- // 2. This signedExchangeReceived event is sent when the browser detects the
590
- // signed exchange.
591
- // 3. The second requestWillBeSent is sent with the generated redirect
592
- // response and a new redirected request which URL is the inner request
593
- // URL of the signed exchange.
594
- let networkRequest = this.#requestsById.get(requestId);
595
- // |requestId| is available only for navigation #requests. If the request was
596
- // sent from a renderer process for prefetching, it is not available. In the
597
- // case, need to fallback to look for the URL.
598
- // TODO(crbug/841076): Sends the request ID of prefetching to the browser
599
- // process and DevTools to find the matching request.
600
- if (!networkRequest) {
601
- networkRequest = this.#requestsByURL.get(info.outerResponse.url);
602
- if (!networkRequest) {
603
- return;
604
- }
605
- // Or clause is never hit, but is here because we can't use non-null assertions.
606
- const backendRequestId = networkRequest.backendRequestId() || requestId;
607
- requestId = backendRequestId;
608
- }
609
- networkRequest.setSignedExchangeInfo(info);
610
- networkRequest.setResourceType(Common.ResourceType.resourceTypes.SignedExchange);
611
- this.updateNetworkRequestWithResponse(networkRequest, info.outerResponse);
612
- this.updateNetworkRequest(networkRequest);
613
- this.getExtraInfoBuilder(requestId).addHasExtraInfo(info.hasExtraInfo);
614
- this.#manager.dispatchEventToListeners(Events.ResponseReceived, { request: networkRequest, response: info.outerResponse });
615
- }
616
- requestWillBeSent({ requestId, loaderId, documentURL, request, timestamp, wallTime, initiator, redirectHasExtraInfo, redirectResponse, type, frameId, hasUserGesture, }) {
617
- let networkRequest = this.#requestsById.get(requestId);
618
- if (networkRequest) {
619
- // FIXME: move this check to the backend.
620
- if (!redirectResponse) {
621
- return;
622
- }
623
- // If signedExchangeReceived event has already been sent for the request,
624
- // ignores the internally generated |redirectResponse|. The
625
- // |outerResponse| of SignedExchangeInfo was set to |networkRequest| in
626
- // signedExchangeReceived().
627
- if (!networkRequest.signedExchangeInfo()) {
628
- this.responseReceived({
629
- requestId,
630
- loaderId,
631
- timestamp,
632
- type: type || "Other" /* Protocol.Network.ResourceType.Other */,
633
- response: redirectResponse,
634
- hasExtraInfo: redirectHasExtraInfo,
635
- frameId,
636
- });
637
- }
638
- networkRequest = this.appendRedirect(requestId, timestamp, request.url);
639
- this.#manager.dispatchEventToListeners(Events.RequestRedirected, networkRequest);
640
- }
641
- else {
642
- networkRequest = NetworkRequest.create(requestId, request.url, documentURL, frameId ?? null, loaderId, initiator, hasUserGesture);
643
- requestToManagerMap.set(networkRequest, this.#manager);
644
- }
645
- networkRequest.hasNetworkData = true;
646
- this.updateNetworkRequestWithRequest(networkRequest, request);
647
- networkRequest.setIssueTime(timestamp, wallTime);
648
- networkRequest.setResourceType(type ? Common.ResourceType.resourceTypes[type] : Common.ResourceType.resourceTypes.Other);
649
- if (request.trustTokenParams) {
650
- networkRequest.setTrustTokenParams(request.trustTokenParams);
651
- }
652
- const maybeTrustTokenEvent = this.#requestIdToTrustTokenEvent.get(requestId);
653
- if (maybeTrustTokenEvent) {
654
- networkRequest.setTrustTokenOperationDoneEvent(maybeTrustTokenEvent);
655
- this.#requestIdToTrustTokenEvent.delete(requestId);
656
- }
657
- this.getExtraInfoBuilder(requestId).addRequest(networkRequest);
658
- this.startNetworkRequest(networkRequest, request);
659
- }
660
- requestServedFromCache({ requestId }) {
661
- const networkRequest = this.#requestsById.get(requestId);
662
- if (!networkRequest) {
663
- return;
664
- }
665
- networkRequest.setFromMemoryCache();
666
- }
667
- responseReceived({ requestId, loaderId, timestamp, type, response, hasExtraInfo, frameId }) {
668
- const networkRequest = this.#requestsById.get(requestId);
669
- const lowercaseHeaders = NetworkManager.lowercaseHeaders(response.headers);
670
- if (!networkRequest) {
671
- const lastModifiedHeader = lowercaseHeaders['last-modified'];
672
- // We missed the requestWillBeSent.
673
- const eventData = {
674
- url: response.url,
675
- frameId: frameId ?? null,
676
- loaderId,
677
- resourceType: type,
678
- mimeType: response.mimeType,
679
- lastModified: lastModifiedHeader ? new Date(lastModifiedHeader) : null,
680
- };
681
- this.#manager.dispatchEventToListeners(Events.RequestUpdateDropped, eventData);
682
- return;
683
- }
684
- networkRequest.responseReceivedTime = timestamp;
685
- networkRequest.setResourceType(Common.ResourceType.resourceTypes[type]);
686
- this.updateNetworkRequestWithResponse(networkRequest, response);
687
- this.updateNetworkRequest(networkRequest);
688
- this.getExtraInfoBuilder(requestId).addHasExtraInfo(hasExtraInfo);
689
- this.#manager.dispatchEventToListeners(Events.ResponseReceived, { request: networkRequest, response });
690
- }
691
- dataReceived(event) {
692
- let networkRequest = this.#requestsById.get(event.requestId);
693
- if (!networkRequest) {
694
- networkRequest = this.maybeAdoptMainResourceRequest(event.requestId);
695
- }
696
- if (!networkRequest) {
697
- return;
698
- }
699
- networkRequest.addDataReceivedEvent(event);
700
- this.updateNetworkRequest(networkRequest);
701
- }
702
- loadingFinished({ requestId, timestamp: finishTime, encodedDataLength }) {
703
- let networkRequest = this.#requestsById.get(requestId);
704
- if (!networkRequest) {
705
- networkRequest = this.maybeAdoptMainResourceRequest(requestId);
706
- }
707
- if (!networkRequest) {
708
- return;
709
- }
710
- this.getExtraInfoBuilder(requestId).finished();
711
- this.finishNetworkRequest(networkRequest, finishTime, encodedDataLength);
712
- this.#manager.dispatchEventToListeners(Events.LoadingFinished, networkRequest);
713
- }
714
- loadingFailed({ requestId, timestamp: time, type: resourceType, errorText: localizedDescription, canceled, blockedReason, corsErrorStatus, }) {
715
- const networkRequest = this.#requestsById.get(requestId);
716
- if (!networkRequest) {
717
- return;
718
- }
719
- networkRequest.failed = true;
720
- networkRequest.setResourceType(Common.ResourceType.resourceTypes[resourceType]);
721
- networkRequest.canceled = Boolean(canceled);
722
- if (blockedReason) {
723
- networkRequest.setBlockedReason(blockedReason);
724
- if (blockedReason === "inspector" /* Protocol.Network.BlockedReason.Inspector */) {
725
- const message = i18nString(UIStrings.requestWasBlockedByDevtoolsS, { PH1: networkRequest.url() });
726
- this.#manager.dispatchEventToListeners(Events.MessageGenerated, { message, requestId, warning: true });
727
- }
728
- }
729
- if (corsErrorStatus) {
730
- networkRequest.setCorsErrorStatus(corsErrorStatus);
731
- }
732
- networkRequest.localizedFailDescription = localizedDescription;
733
- this.getExtraInfoBuilder(requestId).finished();
734
- this.finishNetworkRequest(networkRequest, time, -1);
735
- }
736
- webSocketCreated({ requestId, url: requestURL, initiator }) {
737
- const networkRequest = NetworkRequest.createForSocket(requestId, requestURL, initiator);
738
- requestToManagerMap.set(networkRequest, this.#manager);
739
- networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebSocket);
740
- this.startNetworkRequest(networkRequest, null);
741
- }
742
- webSocketWillSendHandshakeRequest({ requestId, timestamp: time, wallTime, request }) {
743
- const networkRequest = this.#requestsById.get(requestId);
744
- if (!networkRequest) {
745
- return;
746
- }
747
- networkRequest.requestMethod = 'GET';
748
- networkRequest.setRequestHeaders(this.headersMapToHeadersArray(request.headers));
749
- networkRequest.setIssueTime(time, wallTime);
750
- this.updateNetworkRequest(networkRequest);
751
- }
752
- webSocketHandshakeResponseReceived({ requestId, timestamp: time, response }) {
753
- const networkRequest = this.#requestsById.get(requestId);
754
- if (!networkRequest) {
755
- return;
756
- }
757
- networkRequest.statusCode = response.status;
758
- networkRequest.statusText = response.statusText;
759
- networkRequest.responseHeaders = this.headersMapToHeadersArray(response.headers);
760
- networkRequest.responseHeadersText = response.headersText || '';
761
- if (response.requestHeaders) {
762
- networkRequest.setRequestHeaders(this.headersMapToHeadersArray(response.requestHeaders));
763
- }
764
- if (response.requestHeadersText) {
765
- networkRequest.setRequestHeadersText(response.requestHeadersText);
766
- }
767
- networkRequest.responseReceivedTime = time;
768
- networkRequest.protocol = 'websocket';
769
- this.updateNetworkRequest(networkRequest);
770
- }
771
- webSocketFrameReceived({ requestId, timestamp: time, response }) {
772
- const networkRequest = this.#requestsById.get(requestId);
773
- if (!networkRequest) {
774
- return;
775
- }
776
- networkRequest.addProtocolFrame(response, time, false);
777
- networkRequest.responseReceivedTime = time;
778
- this.updateNetworkRequest(networkRequest);
779
- }
780
- webSocketFrameSent({ requestId, timestamp: time, response }) {
781
- const networkRequest = this.#requestsById.get(requestId);
782
- if (!networkRequest) {
783
- return;
784
- }
785
- networkRequest.addProtocolFrame(response, time, true);
786
- networkRequest.responseReceivedTime = time;
787
- this.updateNetworkRequest(networkRequest);
788
- }
789
- webSocketFrameError({ requestId, timestamp: time, errorMessage }) {
790
- const networkRequest = this.#requestsById.get(requestId);
791
- if (!networkRequest) {
792
- return;
793
- }
794
- networkRequest.addProtocolFrameError(errorMessage, time);
795
- networkRequest.responseReceivedTime = time;
796
- this.updateNetworkRequest(networkRequest);
797
- }
798
- webSocketClosed({ requestId, timestamp: time }) {
799
- const networkRequest = this.#requestsById.get(requestId);
800
- if (!networkRequest) {
801
- return;
802
- }
803
- this.finishNetworkRequest(networkRequest, time, -1);
804
- }
805
- eventSourceMessageReceived({ requestId, timestamp: time, eventName, eventId, data }) {
806
- const networkRequest = this.#requestsById.get(requestId);
807
- if (!networkRequest) {
808
- return;
809
- }
810
- networkRequest.addEventSourceMessage(time, eventName, eventId, data);
811
- }
812
- requestIntercepted({}) {
813
- }
814
- requestWillBeSentExtraInfo({ requestId, associatedCookies, headers, clientSecurityState, connectTiming, siteHasCookieInOtherPartition }) {
815
- const blockedRequestCookies = [];
816
- const includedRequestCookies = [];
817
- for (const { blockedReasons, exemptionReason, cookie } of associatedCookies) {
818
- if (blockedReasons.length === 0) {
819
- includedRequestCookies.push({ exemptionReason, cookie: Cookie.fromProtocolCookie(cookie) });
820
- }
821
- else {
822
- blockedRequestCookies.push({ blockedReasons, cookie: Cookie.fromProtocolCookie(cookie) });
823
- }
824
- }
825
- const extraRequestInfo = {
826
- blockedRequestCookies,
827
- includedRequestCookies,
828
- requestHeaders: this.headersMapToHeadersArray(headers),
829
- clientSecurityState,
830
- connectTiming,
831
- siteHasCookieInOtherPartition,
832
- };
833
- this.getExtraInfoBuilder(requestId).addRequestExtraInfo(extraRequestInfo);
834
- }
835
- responseReceivedEarlyHints({ requestId, headers, }) {
836
- this.getExtraInfoBuilder(requestId).setEarlyHintsHeaders(this.headersMapToHeadersArray(headers));
837
- }
838
- responseReceivedExtraInfo({ requestId, blockedCookies, headers, headersText, resourceIPAddressSpace, statusCode, cookiePartitionKey, cookiePartitionKeyOpaque, exemptedCookies, }) {
839
- const extraResponseInfo = {
840
- blockedResponseCookies: blockedCookies.map(blockedCookie => ({
841
- blockedReasons: blockedCookie.blockedReasons,
842
- cookieLine: blockedCookie.cookieLine,
843
- cookie: blockedCookie.cookie ? Cookie.fromProtocolCookie(blockedCookie.cookie) : null,
844
- })),
845
- responseHeaders: this.headersMapToHeadersArray(headers),
846
- responseHeadersText: headersText,
847
- resourceIPAddressSpace,
848
- statusCode,
849
- cookiePartitionKey,
850
- cookiePartitionKeyOpaque,
851
- exemptedResponseCookies: exemptedCookies?.map(exemptedCookie => ({
852
- cookie: Cookie.fromProtocolCookie(exemptedCookie.cookie),
853
- cookieLine: exemptedCookie.cookieLine,
854
- exemptionReason: exemptedCookie.exemptionReason,
855
- })),
856
- };
857
- this.getExtraInfoBuilder(requestId).addResponseExtraInfo(extraResponseInfo);
858
- }
859
- getExtraInfoBuilder(requestId) {
860
- let builder;
861
- if (!this.#requestIdToExtraInfoBuilder.has(requestId)) {
862
- builder = new ExtraInfoBuilder();
863
- this.#requestIdToExtraInfoBuilder.set(requestId, builder);
864
- }
865
- else {
866
- builder = this.#requestIdToExtraInfoBuilder.get(requestId);
867
- }
868
- return builder;
869
- }
870
- appendRedirect(requestId, time, redirectURL) {
871
- const originalNetworkRequest = this.#requestsById.get(requestId);
872
- if (!originalNetworkRequest) {
873
- throw new Error(`Could not find original network request for ${requestId}`);
874
- }
875
- let redirectCount = 0;
876
- for (let redirect = originalNetworkRequest.redirectSource(); redirect; redirect = redirect.redirectSource()) {
877
- redirectCount++;
878
- }
879
- originalNetworkRequest.markAsRedirect(redirectCount);
880
- this.finishNetworkRequest(originalNetworkRequest, time, -1);
881
- const newNetworkRequest = NetworkRequest.create(requestId, redirectURL, originalNetworkRequest.documentURL, originalNetworkRequest.frameId, originalNetworkRequest.loaderId, originalNetworkRequest.initiator(), originalNetworkRequest.hasUserGesture() ?? undefined);
882
- requestToManagerMap.set(newNetworkRequest, this.#manager);
883
- newNetworkRequest.setRedirectSource(originalNetworkRequest);
884
- originalNetworkRequest.setRedirectDestination(newNetworkRequest);
885
- return newNetworkRequest;
886
- }
887
- maybeAdoptMainResourceRequest(requestId) {
888
- const request = MultitargetNetworkManager.instance().inflightMainResourceRequests.get(requestId);
889
- if (!request) {
890
- return null;
891
- }
892
- const oldDispatcher = NetworkManager.forRequest(request).dispatcher;
893
- oldDispatcher.#requestsById.delete(requestId);
894
- oldDispatcher.#requestsByURL.delete(request.url());
895
- const loaderId = request.loaderId;
896
- if (loaderId) {
897
- oldDispatcher.#requestsByLoaderId.delete(loaderId);
898
- }
899
- const builder = oldDispatcher.#requestIdToExtraInfoBuilder.get(requestId);
900
- oldDispatcher.#requestIdToExtraInfoBuilder.delete(requestId);
901
- this.#requestsById.set(requestId, request);
902
- this.#requestsByURL.set(request.url(), request);
903
- if (loaderId) {
904
- this.#requestsByLoaderId.set(loaderId, request);
905
- }
906
- if (builder) {
907
- this.#requestIdToExtraInfoBuilder.set(requestId, builder);
908
- }
909
- requestToManagerMap.set(request, this.#manager);
910
- return request;
911
- }
912
- startNetworkRequest(networkRequest, originalRequest) {
913
- this.#requestsById.set(networkRequest.requestId(), networkRequest);
914
- this.#requestsByURL.set(networkRequest.url(), networkRequest);
915
- const loaderId = networkRequest.loaderId;
916
- if (loaderId) {
917
- this.#requestsByLoaderId.set(loaderId, networkRequest);
918
- }
919
- // The following relies on the fact that loaderIds and requestIds
920
- // are globally unique and that the main request has them equal. If
921
- // loaderId is an empty string, it indicates a worker request. For the
922
- // request to fetch the main worker script, the request ID is the future
923
- // worker target ID and, therefore, it is unique.
924
- if (networkRequest.loaderId === networkRequest.requestId() || networkRequest.loaderId === '') {
925
- MultitargetNetworkManager.instance().inflightMainResourceRequests.set(networkRequest.requestId(), networkRequest);
926
- }
927
- this.#manager.dispatchEventToListeners(Events.RequestStarted, { request: networkRequest, originalRequest });
928
- }
929
- updateNetworkRequest(networkRequest) {
930
- this.#manager.dispatchEventToListeners(Events.RequestUpdated, networkRequest);
931
- }
932
- finishNetworkRequest(networkRequest, finishTime, encodedDataLength) {
933
- networkRequest.endTime = finishTime;
934
- networkRequest.finished = true;
935
- if (encodedDataLength >= 0) {
936
- const redirectSource = networkRequest.redirectSource();
937
- if (redirectSource?.signedExchangeInfo()) {
938
- networkRequest.setTransferSize(0);
939
- redirectSource.setTransferSize(encodedDataLength);
940
- this.updateNetworkRequest(redirectSource);
941
- }
942
- else {
943
- networkRequest.setTransferSize(encodedDataLength);
944
- }
945
- }
946
- this.#manager.dispatchEventToListeners(Events.RequestFinished, networkRequest);
947
- MultitargetNetworkManager.instance().inflightMainResourceRequests.delete(networkRequest.requestId());
948
- if (Common.Settings.Settings.instance().moduleSetting('monitoring-xhr-enabled').get() &&
949
- networkRequest.resourceType().category() === Common.ResourceType.resourceCategories.XHR) {
950
- let message;
951
- const failedToLoad = networkRequest.failed || networkRequest.hasErrorStatusCode();
952
- if (failedToLoad) {
953
- message = i18nString(UIStrings.sFailedLoadingSS, { PH1: networkRequest.resourceType().title(), PH2: networkRequest.requestMethod, PH3: networkRequest.url() });
954
- }
955
- else {
956
- message = i18nString(UIStrings.sFinishedLoadingSS, { PH1: networkRequest.resourceType().title(), PH2: networkRequest.requestMethod, PH3: networkRequest.url() });
957
- }
958
- this.#manager.dispatchEventToListeners(Events.MessageGenerated, { message, requestId: networkRequest.requestId(), warning: false });
959
- }
960
- }
961
- clearRequests() {
962
- for (const [requestId, request] of this.#requestsById) {
963
- if (request.finished) {
964
- this.#requestsById.delete(requestId);
965
- }
966
- }
967
- for (const [requestURL, request] of this.#requestsByURL) {
968
- if (request.finished) {
969
- this.#requestsByURL.delete(requestURL);
970
- }
971
- }
972
- for (const [requestLoaderId, request] of this.#requestsByLoaderId) {
973
- if (request.finished) {
974
- this.#requestsByLoaderId.delete(requestLoaderId);
975
- }
976
- }
977
- for (const [requestId, builder] of this.#requestIdToExtraInfoBuilder) {
978
- if (builder.isFinished()) {
979
- this.#requestIdToExtraInfoBuilder.delete(requestId);
980
- }
981
- }
982
- }
983
- webTransportCreated({ transportId, url: requestURL, timestamp: time, initiator }) {
984
- const networkRequest = NetworkRequest.createForSocket(transportId, requestURL, initiator);
985
- networkRequest.hasNetworkData = true;
986
- requestToManagerMap.set(networkRequest, this.#manager);
987
- networkRequest.setResourceType(Common.ResourceType.resourceTypes.WebTransport);
988
- networkRequest.setIssueTime(time, 0);
989
- // TODO(yoichio): Add appropreate events to address abort cases.
990
- this.startNetworkRequest(networkRequest, null);
991
- }
992
- webTransportConnectionEstablished({ transportId, timestamp: time }) {
993
- const networkRequest = this.#requestsById.get(transportId);
994
- if (!networkRequest) {
995
- return;
996
- }
997
- // This dummy deltas are needed to show this request as being
998
- // downloaded(blue) given typical WebTransport is kept for a while.
999
- // TODO(yoichio): Add appropreate events to fix these dummy datas.
1000
- // DNS lookup?
1001
- networkRequest.responseReceivedTime = time;
1002
- networkRequest.endTime = time + 0.001;
1003
- this.updateNetworkRequest(networkRequest);
1004
- }
1005
- webTransportClosed({ transportId, timestamp: time }) {
1006
- const networkRequest = this.#requestsById.get(transportId);
1007
- if (!networkRequest) {
1008
- return;
1009
- }
1010
- networkRequest.endTime = time;
1011
- this.finishNetworkRequest(networkRequest, time, 0);
1012
- }
1013
- directTCPSocketCreated(event) {
1014
- const requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
1015
- const networkRequest = NetworkRequest.createForSocket(event.identifier, requestURL, event.initiator);
1016
- networkRequest.hasNetworkData = true;
1017
- networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
1018
- networkRequest.protocol = i18n.i18n.lockedString('tcp');
1019
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpening);
1020
- networkRequest.directSocketInfo = {
1021
- type: DirectSocketType.TCP,
1022
- status: DirectSocketStatus.OPENING,
1023
- createOptions: {
1024
- remoteAddr: event.remoteAddr,
1025
- remotePort: event.remotePort,
1026
- noDelay: event.options.noDelay,
1027
- keepAliveDelay: event.options.keepAliveDelay,
1028
- sendBufferSize: event.options.sendBufferSize,
1029
- receiveBufferSize: event.options.receiveBufferSize,
1030
- dnsQueryType: event.options.dnsQueryType,
1031
- }
1032
- };
1033
- networkRequest.setResourceType(Common.ResourceType.resourceTypes.DirectSocket);
1034
- networkRequest.setIssueTime(event.timestamp, event.timestamp);
1035
- requestToManagerMap.set(networkRequest, this.#manager);
1036
- this.startNetworkRequest(networkRequest, null);
1037
- }
1038
- directTCPSocketOpened(event) {
1039
- const networkRequest = this.#requestsById.get(event.identifier);
1040
- if (!networkRequest?.directSocketInfo) {
1041
- return;
1042
- }
1043
- networkRequest.responseReceivedTime = event.timestamp;
1044
- networkRequest.directSocketInfo.status = DirectSocketStatus.OPEN;
1045
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpen);
1046
- networkRequest.directSocketInfo.openInfo = {
1047
- remoteAddr: event.remoteAddr,
1048
- remotePort: event.remotePort,
1049
- localAddr: event.localAddr,
1050
- localPort: event.localPort,
1051
- };
1052
- networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
1053
- const requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
1054
- networkRequest.setUrl(requestURL);
1055
- this.updateNetworkRequest(networkRequest);
1056
- }
1057
- directTCPSocketAborted(event) {
1058
- const networkRequest = this.#requestsById.get(event.identifier);
1059
- if (!networkRequest?.directSocketInfo) {
1060
- return;
1061
- }
1062
- networkRequest.failed = true;
1063
- networkRequest.directSocketInfo.status = DirectSocketStatus.ABORTED;
1064
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusAborted);
1065
- networkRequest.directSocketInfo.errorMessage = event.errorMessage;
1066
- this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1067
- }
1068
- directTCPSocketClosed(event) {
1069
- const networkRequest = this.#requestsById.get(event.identifier);
1070
- if (!networkRequest?.directSocketInfo) {
1071
- return;
1072
- }
1073
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusClosed);
1074
- networkRequest.directSocketInfo.status = DirectSocketStatus.CLOSED;
1075
- this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1076
- }
1077
- directTCPSocketChunkSent(event) {
1078
- const networkRequest = this.#requestsById.get(event.identifier);
1079
- if (!networkRequest) {
1080
- return;
1081
- }
1082
- networkRequest.addDirectSocketChunk({
1083
- data: event.data,
1084
- type: DirectSocketChunkType.SEND,
1085
- timestamp: event.timestamp,
1086
- });
1087
- networkRequest.responseReceivedTime = event.timestamp;
1088
- this.updateNetworkRequest(networkRequest);
1089
- }
1090
- directTCPSocketChunkReceived(event) {
1091
- const networkRequest = this.#requestsById.get(event.identifier);
1092
- if (!networkRequest) {
1093
- return;
1094
- }
1095
- networkRequest.addDirectSocketChunk({
1096
- data: event.data,
1097
- type: DirectSocketChunkType.RECEIVE,
1098
- timestamp: event.timestamp,
1099
- });
1100
- networkRequest.responseReceivedTime = event.timestamp;
1101
- this.updateNetworkRequest(networkRequest);
1102
- }
1103
- directUDPSocketCreated(event) {
1104
- let requestURL = '';
1105
- let type;
1106
- if (event.options.remoteAddr && event.options.remotePort) {
1107
- requestURL = this.concatHostPort(event.options.remoteAddr, event.options.remotePort);
1108
- type = DirectSocketType.UDP_CONNECTED;
1109
- }
1110
- else if (event.options.localAddr) {
1111
- requestURL = this.concatHostPort(event.options.localAddr, event.options.localPort);
1112
- type = DirectSocketType.UDP_BOUND;
1113
- }
1114
- else {
1115
- // Must be present in a valid command if remoteAddr
1116
- // is not specified.
1117
- return;
1118
- }
1119
- const networkRequest = NetworkRequest.createForSocket(event.identifier, requestURL, event.initiator);
1120
- networkRequest.hasNetworkData = true;
1121
- if (event.options.remoteAddr && event.options.remotePort) {
1122
- networkRequest.setRemoteAddress(event.options.remoteAddr, event.options.remotePort);
1123
- }
1124
- networkRequest.protocol = i18n.i18n.lockedString('udp');
1125
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpening);
1126
- networkRequest.directSocketInfo = {
1127
- type,
1128
- status: DirectSocketStatus.OPENING,
1129
- createOptions: {
1130
- remoteAddr: event.options.remoteAddr,
1131
- remotePort: event.options.remotePort,
1132
- localAddr: event.options.localAddr,
1133
- localPort: event.options.localPort,
1134
- sendBufferSize: event.options.sendBufferSize,
1135
- receiveBufferSize: event.options.receiveBufferSize,
1136
- dnsQueryType: event.options.dnsQueryType,
1137
- }
1138
- };
1139
- networkRequest.setResourceType(Common.ResourceType.resourceTypes.DirectSocket);
1140
- networkRequest.setIssueTime(event.timestamp, event.timestamp);
1141
- requestToManagerMap.set(networkRequest, this.#manager);
1142
- this.startNetworkRequest(networkRequest, null);
1143
- }
1144
- directUDPSocketOpened(event) {
1145
- const networkRequest = this.#requestsById.get(event.identifier);
1146
- if (!networkRequest?.directSocketInfo) {
1147
- return;
1148
- }
1149
- let requestURL;
1150
- if (networkRequest.directSocketInfo.type === DirectSocketType.UDP_CONNECTED) {
1151
- if (!event.remoteAddr || !event.remotePort) {
1152
- // Connected socket must have remoteAdd and remotePort.
1153
- return;
1154
- }
1155
- networkRequest.setRemoteAddress(event.remoteAddr, event.remotePort);
1156
- requestURL = this.concatHostPort(event.remoteAddr, event.remotePort);
1157
- }
1158
- else {
1159
- requestURL = this.concatHostPort(event.localAddr, event.localPort);
1160
- }
1161
- networkRequest.setUrl(requestURL);
1162
- networkRequest.responseReceivedTime = event.timestamp;
1163
- networkRequest.directSocketInfo.status = DirectSocketStatus.OPEN;
1164
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusOpen);
1165
- networkRequest.directSocketInfo.openInfo = {
1166
- remoteAddr: event.remoteAddr,
1167
- remotePort: event.remotePort,
1168
- localAddr: event.localAddr,
1169
- localPort: event.localPort,
1170
- };
1171
- this.updateNetworkRequest(networkRequest);
1172
- }
1173
- directUDPSocketAborted(event) {
1174
- const networkRequest = this.#requestsById.get(event.identifier);
1175
- if (!networkRequest?.directSocketInfo) {
1176
- return;
1177
- }
1178
- networkRequest.failed = true;
1179
- networkRequest.directSocketInfo.status = DirectSocketStatus.ABORTED;
1180
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusAborted);
1181
- networkRequest.directSocketInfo.errorMessage = event.errorMessage;
1182
- this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1183
- }
1184
- directUDPSocketClosed(event) {
1185
- const networkRequest = this.#requestsById.get(event.identifier);
1186
- if (!networkRequest?.directSocketInfo) {
1187
- return;
1188
- }
1189
- networkRequest.statusText = i18nString(UIStrings.directSocketStatusClosed);
1190
- networkRequest.directSocketInfo.status = DirectSocketStatus.CLOSED;
1191
- this.finishNetworkRequest(networkRequest, event.timestamp, 0);
1192
- }
1193
- directUDPSocketChunkSent(event) {
1194
- const networkRequest = this.#requestsById.get(event.identifier);
1195
- if (!networkRequest) {
1196
- return;
1197
- }
1198
- networkRequest.addDirectSocketChunk({
1199
- data: event.message.data,
1200
- type: DirectSocketChunkType.SEND,
1201
- timestamp: event.timestamp,
1202
- remoteAddress: event.message.remoteAddr,
1203
- remotePort: event.message.remotePort
1204
- });
1205
- networkRequest.responseReceivedTime = event.timestamp;
1206
- this.updateNetworkRequest(networkRequest);
1207
- }
1208
- directUDPSocketChunkReceived(event) {
1209
- const networkRequest = this.#requestsById.get(event.identifier);
1210
- if (!networkRequest) {
1211
- return;
1212
- }
1213
- networkRequest.addDirectSocketChunk({
1214
- data: event.message.data,
1215
- type: DirectSocketChunkType.RECEIVE,
1216
- timestamp: event.timestamp,
1217
- remoteAddress: event.message.remoteAddr,
1218
- remotePort: event.message.remotePort
1219
- });
1220
- networkRequest.responseReceivedTime = event.timestamp;
1221
- this.updateNetworkRequest(networkRequest);
1222
- }
1223
- trustTokenOperationDone(event) {
1224
- const request = this.#requestsById.get(event.requestId);
1225
- if (!request) {
1226
- this.#requestIdToTrustTokenEvent.set(event.requestId, event);
1227
- return;
1228
- }
1229
- request.setTrustTokenOperationDoneEvent(event);
1230
- }
1231
- subresourceWebBundleMetadataReceived({ requestId, urls }) {
1232
- const extraInfoBuilder = this.getExtraInfoBuilder(requestId);
1233
- extraInfoBuilder.setWebBundleInfo({ resourceUrls: urls });
1234
- const finalRequest = extraInfoBuilder.finalRequest();
1235
- if (finalRequest) {
1236
- this.updateNetworkRequest(finalRequest);
1237
- }
1238
- }
1239
- subresourceWebBundleMetadataError({ requestId, errorMessage }) {
1240
- const extraInfoBuilder = this.getExtraInfoBuilder(requestId);
1241
- extraInfoBuilder.setWebBundleInfo({ errorMessage });
1242
- const finalRequest = extraInfoBuilder.finalRequest();
1243
- if (finalRequest) {
1244
- this.updateNetworkRequest(finalRequest);
1245
- }
1246
- }
1247
- subresourceWebBundleInnerResponseParsed({ innerRequestId, bundleRequestId }) {
1248
- const extraInfoBuilder = this.getExtraInfoBuilder(innerRequestId);
1249
- extraInfoBuilder.setWebBundleInnerRequestInfo({ bundleRequestId });
1250
- const finalRequest = extraInfoBuilder.finalRequest();
1251
- if (finalRequest) {
1252
- this.updateNetworkRequest(finalRequest);
1253
- }
1254
- }
1255
- subresourceWebBundleInnerResponseError({ innerRequestId, errorMessage }) {
1256
- const extraInfoBuilder = this.getExtraInfoBuilder(innerRequestId);
1257
- extraInfoBuilder.setWebBundleInnerRequestInfo({ errorMessage });
1258
- const finalRequest = extraInfoBuilder.finalRequest();
1259
- if (finalRequest) {
1260
- this.updateNetworkRequest(finalRequest);
1261
- }
1262
- }
1263
- reportingApiReportAdded(data) {
1264
- this.#manager.dispatchEventToListeners(Events.ReportingApiReportAdded, data.report);
1265
- }
1266
- reportingApiReportUpdated(data) {
1267
- this.#manager.dispatchEventToListeners(Events.ReportingApiReportUpdated, data.report);
1268
- }
1269
- reportingApiEndpointsChangedForOrigin(data) {
1270
- this.#manager.dispatchEventToListeners(Events.ReportingApiEndpointsChangedForOrigin, data);
1271
- }
1272
- policyUpdated() {
1273
- }
1274
- /**
1275
- * @deprecated
1276
- * This method is only kept for usage in a web test.
1277
- */
1278
- createNetworkRequest(requestId, frameId, loaderId, url, documentURL, initiator) {
1279
- const request = NetworkRequest.create(requestId, url, documentURL, frameId, loaderId, initiator);
1280
- requestToManagerMap.set(request, this.#manager);
1281
- return request;
1282
- }
1283
- concatHostPort(host, port) {
1284
- if (!port || port === 0) {
1285
- return host;
1286
- }
1287
- return `${host}:${port}`;
1288
- }
1289
- }
1290
- let multiTargetNetworkManagerInstance;
1291
- export class MultitargetNetworkManager extends Common.ObjectWrapper.ObjectWrapper {
1292
- #userAgentOverride = '';
1293
- #userAgentMetadataOverride = null;
1294
- #customAcceptedEncodings = null;
1295
- #networkAgents = new Set();
1296
- #fetchAgents = new Set();
1297
- inflightMainResourceRequests = new Map();
1298
- #networkConditions = NoThrottlingConditions;
1299
- #updatingInterceptionPatternsPromise = null;
1300
- #blockingEnabledSetting = Common.Settings.Settings.instance().moduleSetting('request-blocking-enabled');
1301
- #blockedPatternsSetting = Common.Settings.Settings.instance().createSetting('network-blocked-patterns', []);
1302
- #effectiveBlockedURLs = [];
1303
- #urlsForRequestInterceptor = new Platform.MapUtilities.Multimap();
1304
- #extraHeaders;
1305
- #customUserAgent;
1306
- constructor() {
1307
- super();
1308
- // TODO(allada) Remove these and merge it with request interception.
1309
- const blockedPatternChanged = () => {
1310
- this.updateBlockedPatterns();
1311
- this.dispatchEventToListeners("BlockedPatternsChanged" /* MultitargetNetworkManager.Events.BLOCKED_PATTERNS_CHANGED */);
1312
- };
1313
- this.#blockingEnabledSetting.addChangeListener(blockedPatternChanged);
1314
- this.#blockedPatternsSetting.addChangeListener(blockedPatternChanged);
1315
- this.updateBlockedPatterns();
1316
- TargetManager.instance().observeModels(NetworkManager, this);
1317
- }
1318
- static instance(opts = { forceNew: null }) {
1319
- const { forceNew } = opts;
1320
- if (!multiTargetNetworkManagerInstance || forceNew) {
1321
- multiTargetNetworkManagerInstance = new MultitargetNetworkManager();
1322
- }
1323
- return multiTargetNetworkManagerInstance;
1324
- }
1325
- static dispose() {
1326
- multiTargetNetworkManagerInstance = null;
1327
- }
1328
- static patchUserAgentWithChromeVersion(uaString) {
1329
- // Patches Chrome/ChrOS version from user #agent ("1.2.3.4" when user #agent is: "Chrome/1.2.3.4").
1330
- // Otherwise, ignore it. This assumes additional appVersions appear after the Chrome version.
1331
- const chromeVersion = Root.Runtime.getChromeVersion();
1332
- if (chromeVersion.length > 0) {
1333
- // "1.2.3.4" becomes "1.0.100.0"
1334
- const additionalAppVersion = chromeVersion.split('.', 1)[0] + '.0.100.0';
1335
- return Platform.StringUtilities.sprintf(uaString, chromeVersion, additionalAppVersion);
1336
- }
1337
- return uaString;
1338
- }
1339
- static patchUserAgentMetadataWithChromeVersion(userAgentMetadata) {
1340
- // Patches Chrome/ChrOS version from user #agent metadata ("1.2.3.4" when user #agent is: "Chrome/1.2.3.4").
1341
- // Otherwise, ignore it. This assumes additional appVersions appear after the Chrome version.
1342
- if (!userAgentMetadata.brands) {
1343
- return;
1344
- }
1345
- const chromeVersion = Root.Runtime.getChromeVersion();
1346
- if (chromeVersion.length === 0) {
1347
- return;
1348
- }
1349
- const majorVersion = chromeVersion.split('.', 1)[0];
1350
- for (const brand of userAgentMetadata.brands) {
1351
- if (brand.version.includes('%s')) {
1352
- brand.version = Platform.StringUtilities.sprintf(brand.version, majorVersion);
1353
- }
1354
- }
1355
- if (userAgentMetadata.fullVersion) {
1356
- if (userAgentMetadata.fullVersion.includes('%s')) {
1357
- userAgentMetadata.fullVersion = Platform.StringUtilities.sprintf(userAgentMetadata.fullVersion, chromeVersion);
1358
- }
1359
- }
1360
- }
1361
- modelAdded(networkManager) {
1362
- const networkAgent = networkManager.target().networkAgent();
1363
- const fetchAgent = networkManager.target().fetchAgent();
1364
- if (this.#extraHeaders) {
1365
- void networkAgent.invoke_setExtraHTTPHeaders({ headers: this.#extraHeaders });
1366
- }
1367
- if (this.currentUserAgent()) {
1368
- void networkAgent.invoke_setUserAgentOverride({ userAgent: this.currentUserAgent(), userAgentMetadata: this.#userAgentMetadataOverride || undefined });
1369
- }
1370
- if (this.#effectiveBlockedURLs.length) {
1371
- void networkAgent.invoke_setBlockedURLs({ urls: this.#effectiveBlockedURLs });
1372
- }
1373
- if (this.isIntercepting()) {
1374
- void fetchAgent.invoke_enable({ patterns: this.#urlsForRequestInterceptor.valuesArray() });
1375
- }
1376
- if (this.#customAcceptedEncodings === null) {
1377
- void networkAgent.invoke_clearAcceptedEncodingsOverride();
1378
- }
1379
- else {
1380
- void networkAgent.invoke_setAcceptedEncodings({ encodings: this.#customAcceptedEncodings });
1381
- }
1382
- this.#networkAgents.add(networkAgent);
1383
- this.#fetchAgents.add(fetchAgent);
1384
- if (this.isThrottling()) {
1385
- this.updateNetworkConditions(networkAgent);
1386
- }
1387
- }
1388
- modelRemoved(networkManager) {
1389
- for (const entry of this.inflightMainResourceRequests) {
1390
- const manager = NetworkManager.forRequest((entry[1]));
1391
- if (manager !== networkManager) {
1392
- continue;
1393
- }
1394
- this.inflightMainResourceRequests.delete((entry[0]));
1395
- }
1396
- this.#networkAgents.delete(networkManager.target().networkAgent());
1397
- this.#fetchAgents.delete(networkManager.target().fetchAgent());
1398
- }
1399
- isThrottling() {
1400
- return this.#networkConditions.download >= 0 || this.#networkConditions.upload >= 0 ||
1401
- this.#networkConditions.latency > 0;
1402
- }
1403
- isOffline() {
1404
- return !this.#networkConditions.download && !this.#networkConditions.upload;
1405
- }
1406
- setNetworkConditions(conditions) {
1407
- this.#networkConditions = conditions;
1408
- for (const agent of this.#networkAgents) {
1409
- this.updateNetworkConditions(agent);
1410
- }
1411
- this.dispatchEventToListeners("ConditionsChanged" /* MultitargetNetworkManager.Events.CONDITIONS_CHANGED */);
1412
- }
1413
- networkConditions() {
1414
- return this.#networkConditions;
1415
- }
1416
- updateNetworkConditions(networkAgent) {
1417
- const conditions = this.#networkConditions;
1418
- if (!this.isThrottling()) {
1419
- void networkAgent.invoke_emulateNetworkConditions({
1420
- offline: false,
1421
- latency: 0,
1422
- downloadThroughput: 0,
1423
- uploadThroughput: 0,
1424
- });
1425
- }
1426
- else {
1427
- void networkAgent.invoke_emulateNetworkConditions({
1428
- offline: this.isOffline(),
1429
- latency: conditions.latency,
1430
- downloadThroughput: conditions.download < 0 ? 0 : conditions.download,
1431
- uploadThroughput: conditions.upload < 0 ? 0 : conditions.upload,
1432
- packetLoss: (conditions.packetLoss ?? 0) < 0 ? 0 : conditions.packetLoss,
1433
- packetQueueLength: conditions.packetQueueLength,
1434
- packetReordering: conditions.packetReordering,
1435
- connectionType: NetworkManager.connectionType(conditions),
1436
- });
1437
- }
1438
- }
1439
- setExtraHTTPHeaders(headers) {
1440
- this.#extraHeaders = headers;
1441
- for (const agent of this.#networkAgents) {
1442
- void agent.invoke_setExtraHTTPHeaders({ headers: this.#extraHeaders });
1443
- }
1444
- }
1445
- currentUserAgent() {
1446
- return this.#customUserAgent ? this.#customUserAgent : this.#userAgentOverride;
1447
- }
1448
- updateUserAgentOverride() {
1449
- const userAgent = this.currentUserAgent();
1450
- for (const agent of this.#networkAgents) {
1451
- void agent.invoke_setUserAgentOverride({ userAgent, userAgentMetadata: this.#userAgentMetadataOverride || undefined });
1452
- }
1453
- }
1454
- setUserAgentOverride(userAgent, userAgentMetadataOverride) {
1455
- const uaChanged = (this.#userAgentOverride !== userAgent);
1456
- this.#userAgentOverride = userAgent;
1457
- if (!this.#customUserAgent) {
1458
- this.#userAgentMetadataOverride = userAgentMetadataOverride;
1459
- this.updateUserAgentOverride();
1460
- }
1461
- else {
1462
- this.#userAgentMetadataOverride = null;
1463
- }
1464
- if (uaChanged) {
1465
- this.dispatchEventToListeners("UserAgentChanged" /* MultitargetNetworkManager.Events.USER_AGENT_CHANGED */);
1466
- }
1467
- }
1468
- setCustomUserAgentOverride(userAgent, userAgentMetadataOverride = null) {
1469
- this.#customUserAgent = userAgent;
1470
- this.#userAgentMetadataOverride = userAgentMetadataOverride;
1471
- this.updateUserAgentOverride();
1472
- }
1473
- setCustomAcceptedEncodingsOverride(acceptedEncodings) {
1474
- this.#customAcceptedEncodings = acceptedEncodings;
1475
- this.updateAcceptedEncodingsOverride();
1476
- this.dispatchEventToListeners("AcceptedEncodingsChanged" /* MultitargetNetworkManager.Events.ACCEPTED_ENCODINGS_CHANGED */);
1477
- }
1478
- clearCustomAcceptedEncodingsOverride() {
1479
- this.#customAcceptedEncodings = null;
1480
- this.updateAcceptedEncodingsOverride();
1481
- this.dispatchEventToListeners("AcceptedEncodingsChanged" /* MultitargetNetworkManager.Events.ACCEPTED_ENCODINGS_CHANGED */);
1482
- }
1483
- isAcceptedEncodingOverrideSet() {
1484
- return this.#customAcceptedEncodings !== null;
1485
- }
1486
- updateAcceptedEncodingsOverride() {
1487
- const customAcceptedEncodings = this.#customAcceptedEncodings;
1488
- for (const agent of this.#networkAgents) {
1489
- if (customAcceptedEncodings === null) {
1490
- void agent.invoke_clearAcceptedEncodingsOverride();
1491
- }
1492
- else {
1493
- void agent.invoke_setAcceptedEncodings({ encodings: customAcceptedEncodings });
1494
- }
1495
- }
1496
- }
1497
- // TODO(allada) Move all request blocking into interception and let view manage blocking.
1498
- blockedPatterns() {
1499
- return this.#blockedPatternsSetting.get().slice();
1500
- }
1501
- blockingEnabled() {
1502
- return this.#blockingEnabledSetting.get();
1503
- }
1504
- isBlocking() {
1505
- return Boolean(this.#effectiveBlockedURLs.length);
1506
- }
1507
- setBlockedPatterns(patterns) {
1508
- this.#blockedPatternsSetting.set(patterns);
1509
- }
1510
- setBlockingEnabled(enabled) {
1511
- if (this.#blockingEnabledSetting.get() === enabled) {
1512
- return;
1513
- }
1514
- this.#blockingEnabledSetting.set(enabled);
1515
- }
1516
- updateBlockedPatterns() {
1517
- const urls = [];
1518
- if (this.#blockingEnabledSetting.get()) {
1519
- for (const pattern of this.#blockedPatternsSetting.get()) {
1520
- if (pattern.enabled) {
1521
- urls.push(pattern.url);
1522
- }
1523
- }
1524
- }
1525
- if (!urls.length && !this.#effectiveBlockedURLs.length) {
1526
- return;
1527
- }
1528
- this.#effectiveBlockedURLs = urls;
1529
- for (const agent of this.#networkAgents) {
1530
- void agent.invoke_setBlockedURLs({ urls: this.#effectiveBlockedURLs });
1531
- }
1532
- }
1533
- isIntercepting() {
1534
- return Boolean(this.#urlsForRequestInterceptor.size);
1535
- }
1536
- setInterceptionHandlerForPatterns(patterns, requestInterceptor) {
1537
- // Note: requestInterceptors may receive interception #requests for patterns they did not subscribe to.
1538
- this.#urlsForRequestInterceptor.deleteAll(requestInterceptor);
1539
- for (const newPattern of patterns) {
1540
- this.#urlsForRequestInterceptor.set(requestInterceptor, newPattern);
1541
- }
1542
- return this.updateInterceptionPatternsOnNextTick();
1543
- }
1544
- updateInterceptionPatternsOnNextTick() {
1545
- // This is used so we can register and unregister patterns in loops without sending lots of protocol messages.
1546
- if (!this.#updatingInterceptionPatternsPromise) {
1547
- this.#updatingInterceptionPatternsPromise = Promise.resolve().then(this.updateInterceptionPatterns.bind(this));
1548
- }
1549
- return this.#updatingInterceptionPatternsPromise;
1550
- }
1551
- async updateInterceptionPatterns() {
1552
- if (!Common.Settings.Settings.instance().moduleSetting('cache-disabled').get()) {
1553
- Common.Settings.Settings.instance().moduleSetting('cache-disabled').set(true);
1554
- }
1555
- this.#updatingInterceptionPatternsPromise = null;
1556
- const promises = [];
1557
- for (const agent of this.#fetchAgents) {
1558
- promises.push(agent.invoke_enable({ patterns: this.#urlsForRequestInterceptor.valuesArray() }));
1559
- }
1560
- this.dispatchEventToListeners("InterceptorsChanged" /* MultitargetNetworkManager.Events.INTERCEPTORS_CHANGED */);
1561
- await Promise.all(promises);
1562
- }
1563
- async requestIntercepted(interceptedRequest) {
1564
- for (const requestInterceptor of this.#urlsForRequestInterceptor.keysArray()) {
1565
- await requestInterceptor(interceptedRequest);
1566
- if (interceptedRequest.hasResponded() && interceptedRequest.networkRequest) {
1567
- this.dispatchEventToListeners("RequestIntercepted" /* MultitargetNetworkManager.Events.REQUEST_INTERCEPTED */, interceptedRequest.networkRequest.requestId());
1568
- return;
1569
- }
1570
- }
1571
- if (!interceptedRequest.hasResponded()) {
1572
- interceptedRequest.continueRequestWithoutChange();
1573
- }
1574
- }
1575
- clearBrowserCache() {
1576
- for (const agent of this.#networkAgents) {
1577
- void agent.invoke_clearBrowserCache();
1578
- }
1579
- }
1580
- clearBrowserCookies() {
1581
- for (const agent of this.#networkAgents) {
1582
- void agent.invoke_clearBrowserCookies();
1583
- }
1584
- }
1585
- async getCertificate(origin) {
1586
- const target = TargetManager.instance().primaryPageTarget();
1587
- if (!target) {
1588
- return [];
1589
- }
1590
- const certificate = await target.networkAgent().invoke_getCertificate({ origin });
1591
- if (!certificate) {
1592
- return [];
1593
- }
1594
- return certificate.tableNames;
1595
- }
1596
- async loadResource(url) {
1597
- const headers = {};
1598
- const currentUserAgent = this.currentUserAgent();
1599
- if (currentUserAgent) {
1600
- headers['User-Agent'] = currentUserAgent;
1601
- }
1602
- if (Common.Settings.Settings.instance().moduleSetting('cache-disabled').get()) {
1603
- headers['Cache-Control'] = 'no-cache';
1604
- }
1605
- const allowRemoteFilePaths = Common.Settings.Settings.instance().moduleSetting('network.enable-remote-file-loading').get();
1606
- return await new Promise(resolve => Host.ResourceLoader.load(url, headers, (success, _responseHeaders, content, errorDescription) => {
1607
- resolve({ success, content, errorDescription });
1608
- }, allowRemoteFilePaths));
1609
- }
1610
- }
1611
- export class InterceptedRequest {
1612
- #fetchAgent;
1613
- #hasResponded = false;
1614
- request;
1615
- resourceType;
1616
- responseStatusCode;
1617
- responseHeaders;
1618
- requestId;
1619
- networkRequest;
1620
- constructor(fetchAgent, request, resourceType, requestId, networkRequest, responseStatusCode, responseHeaders) {
1621
- this.#fetchAgent = fetchAgent;
1622
- this.request = request;
1623
- this.resourceType = resourceType;
1624
- this.responseStatusCode = responseStatusCode;
1625
- this.responseHeaders = responseHeaders;
1626
- this.requestId = requestId;
1627
- this.networkRequest = networkRequest;
1628
- }
1629
- hasResponded() {
1630
- return this.#hasResponded;
1631
- }
1632
- static mergeSetCookieHeaders(originalSetCookieHeaders, setCookieHeadersFromOverrides) {
1633
- // Generates a map containing the `set-cookie` headers. Valid `set-cookie`
1634
- // headers are stored by the cookie name. Malformed `set-cookie` headers are
1635
- // stored by the whole header value. Duplicates are allowed.
1636
- const generateHeaderMap = (headers) => {
1637
- const result = new Map();
1638
- for (const header of headers) {
1639
- // The regex matches cookie headers of the form '<header-name>=<header-value>'.
1640
- // <header-name> is a token as defined in https://www.rfc-editor.org/rfc/rfc9110.html#name-tokens.
1641
- // The shape of <header-value> is not being validated at all here.
1642
- const match = header.value.match(/^([a-zA-Z0-9!#$%&'*+.^_`|~-]+=)(.*)$/);
1643
- if (match) {
1644
- if (result.has(match[1])) {
1645
- result.get(match[1])?.push(header.value);
1646
- }
1647
- else {
1648
- result.set(match[1], [header.value]);
1649
- }
1650
- }
1651
- else if (result.has(header.value)) {
1652
- result.get(header.value)?.push(header.value);
1653
- }
1654
- else {
1655
- result.set(header.value, [header.value]);
1656
- }
1657
- }
1658
- return result;
1659
- };
1660
- const originalHeadersMap = generateHeaderMap(originalSetCookieHeaders);
1661
- const overridesHeaderMap = generateHeaderMap(setCookieHeadersFromOverrides);
1662
- // Iterate over original headers. If the same key is found among the
1663
- // overrides, use those instead.
1664
- const mergedHeaders = [];
1665
- for (const [key, headerValues] of originalHeadersMap) {
1666
- if (overridesHeaderMap.has(key)) {
1667
- for (const headerValue of overridesHeaderMap.get(key) || []) {
1668
- mergedHeaders.push({ name: 'set-cookie', value: headerValue });
1669
- }
1670
- }
1671
- else {
1672
- for (const headerValue of headerValues) {
1673
- mergedHeaders.push({ name: 'set-cookie', value: headerValue });
1674
- }
1675
- }
1676
- }
1677
- // Finally add all overrides which have not been added yet.
1678
- for (const [key, headerValues] of overridesHeaderMap) {
1679
- if (originalHeadersMap.has(key)) {
1680
- continue;
1681
- }
1682
- for (const headerValue of headerValues) {
1683
- mergedHeaders.push({ name: 'set-cookie', value: headerValue });
1684
- }
1685
- }
1686
- return mergedHeaders;
1687
- }
1688
- async continueRequestWithContent(contentBlob, encoded, responseHeaders, isBodyOverridden) {
1689
- this.#hasResponded = true;
1690
- const body = encoded ? await contentBlob.text() : await Common.Base64.encode(contentBlob).catch(err => {
1691
- console.error(err);
1692
- return '';
1693
- });
1694
- const responseCode = isBodyOverridden ? 200 : (this.responseStatusCode || 200);
1695
- if (this.networkRequest) {
1696
- const originalSetCookieHeaders = this.networkRequest?.originalResponseHeaders.filter(header => header.name === 'set-cookie') || [];
1697
- const setCookieHeadersFromOverrides = responseHeaders.filter(header => header.name === 'set-cookie');
1698
- this.networkRequest.setCookieHeaders =
1699
- InterceptedRequest.mergeSetCookieHeaders(originalSetCookieHeaders, setCookieHeadersFromOverrides);
1700
- this.networkRequest.hasOverriddenContent = isBodyOverridden;
1701
- }
1702
- void this.#fetchAgent.invoke_fulfillRequest({ requestId: this.requestId, responseCode, body, responseHeaders });
1703
- MultitargetNetworkManager.instance().dispatchEventToListeners("RequestFulfilled" /* MultitargetNetworkManager.Events.REQUEST_FULFILLED */, this.request.url);
1704
- }
1705
- continueRequestWithoutChange() {
1706
- console.assert(!this.#hasResponded);
1707
- this.#hasResponded = true;
1708
- void this.#fetchAgent.invoke_continueRequest({ requestId: this.requestId });
1709
- }
1710
- async responseBody() {
1711
- const response = await this.#fetchAgent.invoke_getResponseBody({ requestId: this.requestId });
1712
- const error = response.getError();
1713
- if (error) {
1714
- return { error };
1715
- }
1716
- const { mimeType, charset } = this.getMimeTypeAndCharset();
1717
- return new TextUtils.ContentData.ContentData(response.body, response.base64Encoded, mimeType ?? 'application/octet-stream', charset ?? undefined);
1718
- }
1719
- isRedirect() {
1720
- return this.responseStatusCode !== undefined && this.responseStatusCode >= 300 && this.responseStatusCode < 400;
1721
- }
1722
- /**
1723
- * Tries to determine the MIME type and charset for this intercepted request.
1724
- * Looks at the intercepted response headers first (for Content-Type header), then
1725
- * checks the `NetworkRequest` if we have one.
1726
- */
1727
- getMimeTypeAndCharset() {
1728
- for (const header of this.responseHeaders ?? []) {
1729
- if (header.name.toLowerCase() === 'content-type') {
1730
- return Platform.MimeType.parseContentType(header.value);
1731
- }
1732
- }
1733
- const mimeType = this.networkRequest?.mimeType ?? null;
1734
- const charset = this.networkRequest?.charset() ?? null;
1735
- return { mimeType, charset };
1736
- }
1737
- }
1738
- /**
1739
- * Helper class to match #requests created from requestWillBeSent with
1740
- * requestWillBeSentExtraInfo and responseReceivedExtraInfo when they have the
1741
- * same requestId due to redirects.
1742
- */
1743
- class ExtraInfoBuilder {
1744
- #requests = [];
1745
- #responseExtraInfoFlag = [];
1746
- #requestExtraInfos = [];
1747
- #responseExtraInfos = [];
1748
- #responseEarlyHintsHeaders = [];
1749
- #finished = false;
1750
- #webBundleInfo = null;
1751
- #webBundleInnerRequestInfo = null;
1752
- addRequest(req) {
1753
- this.#requests.push(req);
1754
- this.sync(this.#requests.length - 1);
1755
- }
1756
- addHasExtraInfo(hasExtraInfo) {
1757
- this.#responseExtraInfoFlag.push(hasExtraInfo);
1758
- // This comes in response, so it can't come before request or after next
1759
- // request in the redirect chain.
1760
- console.assert(this.#requests.length === this.#responseExtraInfoFlag.length, 'request/response count mismatch');
1761
- if (!hasExtraInfo) {
1762
- // We may potentially have gotten extra infos from the next redirect
1763
- // request already. Account for that by inserting null for missing
1764
- // extra infos at current position.
1765
- this.#requestExtraInfos.splice(this.#requests.length - 1, 0, null);
1766
- this.#responseExtraInfos.splice(this.#requests.length - 1, 0, null);
1767
- }
1768
- this.sync(this.#requests.length - 1);
1769
- }
1770
- addRequestExtraInfo(info) {
1771
- this.#requestExtraInfos.push(info);
1772
- this.sync(this.#requestExtraInfos.length - 1);
1773
- }
1774
- addResponseExtraInfo(info) {
1775
- this.#responseExtraInfos.push(info);
1776
- this.sync(this.#responseExtraInfos.length - 1);
1777
- }
1778
- setEarlyHintsHeaders(earlyHintsHeaders) {
1779
- this.#responseEarlyHintsHeaders = earlyHintsHeaders;
1780
- this.updateFinalRequest();
1781
- }
1782
- setWebBundleInfo(info) {
1783
- this.#webBundleInfo = info;
1784
- this.updateFinalRequest();
1785
- }
1786
- setWebBundleInnerRequestInfo(info) {
1787
- this.#webBundleInnerRequestInfo = info;
1788
- this.updateFinalRequest();
1789
- }
1790
- finished() {
1791
- this.#finished = true;
1792
- // We may have missed responseReceived event in case of failure.
1793
- // That said, the ExtraInfo events still may be here, so mark them
1794
- // as present. Event if they are not, this is harmless.
1795
- // TODO(caseq): consider if we need to report hasExtraInfo in the
1796
- // loadingFailed event.
1797
- if (this.#responseExtraInfoFlag.length < this.#requests.length) {
1798
- this.#responseExtraInfoFlag.push(true);
1799
- this.sync(this.#responseExtraInfoFlag.length - 1);
1800
- }
1801
- console.assert(this.#requests.length === this.#responseExtraInfoFlag.length, 'request/response count mismatch when request finished');
1802
- this.updateFinalRequest();
1803
- }
1804
- isFinished() {
1805
- return this.#finished;
1806
- }
1807
- sync(index) {
1808
- const req = this.#requests[index];
1809
- if (!req) {
1810
- return;
1811
- }
1812
- // No response yet, so we don't know if extra info would
1813
- // be there, bail out for now.
1814
- if (index >= this.#responseExtraInfoFlag.length) {
1815
- return;
1816
- }
1817
- if (!this.#responseExtraInfoFlag[index]) {
1818
- return;
1819
- }
1820
- const requestExtraInfo = this.#requestExtraInfos[index];
1821
- if (requestExtraInfo) {
1822
- req.addExtraRequestInfo(requestExtraInfo);
1823
- this.#requestExtraInfos[index] = null;
1824
- }
1825
- const responseExtraInfo = this.#responseExtraInfos[index];
1826
- if (responseExtraInfo) {
1827
- req.addExtraResponseInfo(responseExtraInfo);
1828
- this.#responseExtraInfos[index] = null;
1829
- }
1830
- }
1831
- finalRequest() {
1832
- if (!this.#finished) {
1833
- return null;
1834
- }
1835
- return this.#requests[this.#requests.length - 1] || null;
1836
- }
1837
- updateFinalRequest() {
1838
- if (!this.#finished) {
1839
- return;
1840
- }
1841
- const finalRequest = this.finalRequest();
1842
- finalRequest?.setWebBundleInfo(this.#webBundleInfo);
1843
- finalRequest?.setWebBundleInnerRequestInfo(this.#webBundleInnerRequestInfo);
1844
- finalRequest?.setEarlyHintsHeaders(this.#responseEarlyHintsHeaders);
1845
- }
1846
- }
1847
- SDKModel.register(NetworkManager, { capabilities: 16 /* Capability.NETWORK */, autostart: true });
1848
- export function networkConditionsEqual(first, second) {
1849
- // Caution: titles might be different function instances, which produce
1850
- // the same value.
1851
- // We prefer to use the i18nTitleKey to prevent against locale changes or
1852
- // UIString changes that might change the value vs what the user has stored
1853
- // locally.
1854
- const firstTitle = first.i18nTitleKey || (typeof first.title === 'function' ? first.title() : first.title);
1855
- const secondTitle = second.i18nTitleKey || (typeof second.title === 'function' ? second.title() : second.title);
1856
- return second.download === first.download && second.upload === first.upload && second.latency === first.latency &&
1857
- first.packetLoss === second.packetLoss && first.packetQueueLength === second.packetQueueLength &&
1858
- first.packetReordering === second.packetReordering && secondTitle === firstTitle;
1859
- }
1860
- export const THROTTLING_CONDITIONS_LOOKUP = new Map([
1861
- ["NO_THROTTLING" /* PredefinedThrottlingConditionKey.NO_THROTTLING */, NoThrottlingConditions],
1862
- ["OFFLINE" /* PredefinedThrottlingConditionKey.OFFLINE */, OfflineConditions],
1863
- ["SPEED_3G" /* PredefinedThrottlingConditionKey.SPEED_3G */, Slow3GConditions],
1864
- ["SPEED_SLOW_4G" /* PredefinedThrottlingConditionKey.SPEED_SLOW_4G */, Slow4GConditions],
1865
- ["SPEED_FAST_4G" /* PredefinedThrottlingConditionKey.SPEED_FAST_4G */, Fast4GConditions]
1866
- ]);
1867
- function keyIsPredefined(key) {
1868
- return !key.startsWith('USER_CUSTOM_SETTING_');
1869
- }
1870
- export function keyIsCustomUser(key) {
1871
- return key.startsWith('USER_CUSTOM_SETTING_');
1872
- }
1873
- export function getPredefinedCondition(key) {
1874
- if (!keyIsPredefined(key)) {
1875
- return null;
1876
- }
1877
- return THROTTLING_CONDITIONS_LOOKUP.get(key) ?? null;
1878
- }
1879
- /**
1880
- * For the given Round Trip Time (in MilliSeconds), return the best throttling conditions.
1881
- */
1882
- export function getRecommendedNetworkPreset(rtt) {
1883
- const RTT_COMPARISON_THRESHOLD = 200;
1884
- const RTT_MINIMUM = 60;
1885
- if (!Number.isFinite(rtt)) {
1886
- return null;
1887
- }
1888
- if (rtt < RTT_MINIMUM) {
1889
- return null;
1890
- }
1891
- // We pick from the set of presets in the panel but do not want to allow
1892
- // the "No Throttling" option to be picked.
1893
- const presets = THROTTLING_CONDITIONS_LOOKUP.values()
1894
- .filter(condition => {
1895
- return condition !== NoThrottlingConditions;
1896
- })
1897
- .toArray();
1898
- let closestPreset = null;
1899
- let smallestDiff = Infinity;
1900
- for (const preset of presets) {
1901
- const { targetLatency } = preset;
1902
- if (!targetLatency) {
1903
- continue;
1904
- }
1905
- const diff = Math.abs(targetLatency - rtt);
1906
- if (diff > RTT_COMPARISON_THRESHOLD) {
1907
- continue;
1908
- }
1909
- if (smallestDiff < diff) {
1910
- continue;
1911
- }
1912
- closestPreset = preset;
1913
- smallestDiff = diff;
1914
- }
1915
- return closestPreset;
1916
- }