chrome-devtools-frontend 1.0.1665921 → 1.0.1667564

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 (312) hide show
  1. package/.agents/skills/devtools-testing-guidance/SKILL.md +4 -0
  2. package/.agents/skills/migrate-chromium-test/SKILL.md +63 -48
  3. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +14 -5
  4. package/.agents/skills/ui-eng-vision-logic-consolidator/SKILL.md +11 -2
  5. package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +46 -9
  6. package/.agents/skills/ui-eng-vision-test-scaffolder/SKILL.md +20 -1
  7. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +9 -0
  8. package/front_end/core/host/AidaClient.ts +115 -64
  9. package/front_end/core/host/GcaClient.ts +3 -3
  10. package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
  11. package/front_end/core/host/InspectorFrontendHostStub.ts +3 -3
  12. package/front_end/core/host/UserMetrics.ts +50 -13
  13. package/front_end/core/sdk/CSSMatchedStyles.ts +2 -5
  14. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +12 -0
  15. package/front_end/core/sdk/Connections.ts +1 -1
  16. package/front_end/core/sdk/DOMModel.test.api.ts +104 -0
  17. package/front_end/core/sdk/DOMModel.ts +23 -11
  18. package/front_end/core/sdk/DebuggerModel.ts +9 -9
  19. package/front_end/core/sdk/IsolateManager.ts +1 -1
  20. package/front_end/core/sdk/NetworkManager.ts +105 -4
  21. package/front_end/core/sdk/NetworkRequest.ts +10 -55
  22. package/front_end/core/sdk/OverlayModel.ts +15 -14
  23. package/front_end/core/sdk/RemoteObject.ts +1 -1
  24. package/front_end/devtools_compatibility.js +1 -0
  25. package/front_end/entrypoints/main/MainImpl.ts +5 -12
  26. package/front_end/entrypoints/main/SimpleApp.ts +9 -3
  27. package/front_end/foundation/Universe.ts +22 -0
  28. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  29. package/front_end/generated/protocol.ts +2 -1
  30. package/front_end/models/ai_assistance/agents/AiAgent.ts +22 -13
  31. package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +23 -10
  32. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +21 -5
  33. package/front_end/models/computed_style/ComputedStyleModel.ts +4 -7
  34. package/front_end/models/crux-manager/CrUXManager.ts +4 -0
  35. package/front_end/models/extensions/ExtensionAPI.ts +3 -3
  36. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +2 -2
  37. package/front_end/models/issues_manager/CookieIssue.ts +6 -127
  38. package/front_end/models/issues_manager/descriptions/CoepCorpNotSameOrigin.md +2 -2
  39. package/front_end/models/issues_manager/descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +3 -3
  40. package/front_end/models/issues_manager/descriptions/CoepCorpNotSameSite.md +2 -2
  41. package/front_end/models/issues_manager/descriptions/CoepFrameResourceNeedsCoepHeader.md +1 -1
  42. package/front_end/models/issues_manager/descriptions/CompatibilityModeQuirks.md +1 -1
  43. package/front_end/models/issues_manager/descriptions/CookieAttributeValueExceedsMaxSize.md +2 -2
  44. package/front_end/models/issues_manager/descriptions/LowTextContrast.md +1 -1
  45. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md +1 -1
  46. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md +1 -1
  47. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md +1 -1
  48. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md +1 -1
  49. package/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +3 -3
  50. package/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +3 -3
  51. package/front_end/models/issues_manager/descriptions/bounceTrackingMitigations.md +1 -1
  52. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowlistItemType.md +2 -2
  53. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidHeader.md +2 -2
  54. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidUrlPattern.md +3 -3
  55. package/front_end/models/issues_manager/descriptions/connectionAllowlistItemNotInnerList.md +2 -2
  56. package/front_end/models/issues_manager/descriptions/connectionAllowlistMoreThanOneList.md +2 -2
  57. package/front_end/models/issues_manager/descriptions/connectionAllowlistReportingEndpointNotToken.md +1 -1
  58. package/front_end/models/issues_manager/descriptions/cookieCrossSiteRedirectDowngrade.md +3 -3
  59. package/front_end/models/issues_manager/descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +1 -1
  60. package/front_end/models/issues_manager/descriptions/cookieExcludePortMismatch.md +1 -1
  61. package/front_end/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +1 -1
  62. package/front_end/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutSet.md +1 -1
  63. package/front_end/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutRead.md +1 -1
  64. package/front_end/models/issues_manager/descriptions/corsAllowCredentialsRequired.md +1 -1
  65. package/front_end/models/issues_manager/descriptions/corsDisabledScheme.md +2 -2
  66. package/front_end/models/issues_manager/descriptions/corsDisallowedByMode.md +2 -2
  67. package/front_end/models/issues_manager/descriptions/corsHeaderDisallowedByPreflightResponse.md +1 -1
  68. package/front_end/models/issues_manager/descriptions/corsInvalidHeaderValues.md +3 -3
  69. package/front_end/models/issues_manager/descriptions/corsLocalNetworkAccessPermissionDenied.md +1 -1
  70. package/front_end/models/issues_manager/descriptions/corsMethodDisallowedByPreflightResponse.md +1 -1
  71. package/front_end/models/issues_manager/descriptions/corsNoCorsRedirectModeNotFollow.md +1 -1
  72. package/front_end/models/issues_manager/descriptions/corsOriginMismatch.md +3 -3
  73. package/front_end/models/issues_manager/descriptions/corsPreflightResponseInvalid.md +2 -2
  74. package/front_end/models/issues_manager/descriptions/corsRedirectContainsCredentials.md +3 -3
  75. package/front_end/models/issues_manager/descriptions/corsWildcardOriginNotAllowed.md +4 -3
  76. package/front_end/models/issues_manager/descriptions/cspEvalViolation.md +4 -4
  77. package/front_end/models/issues_manager/descriptions/cspInlineViolation.md +2 -2
  78. package/front_end/models/issues_manager/descriptions/cspTrustedTypesPolicyViolation.md +2 -2
  79. package/front_end/models/issues_manager/descriptions/cspTrustedTypesSinkViolation.md +4 -4
  80. package/front_end/models/issues_manager/descriptions/cspURLViolation.md +4 -4
  81. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsEmptyList.md +1 -1
  82. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsHttpNotFound.md +1 -1
  83. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsInvalidContentType.md +1 -1
  84. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsInvalidResponse.md +1 -1
  85. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsNoResponse.md +1 -1
  86. package/front_end/models/issues_manager/descriptions/emailVerificationRequestDnsFetchFailed.md +1 -1
  87. package/front_end/models/issues_manager/descriptions/emailVerificationRequestDnsInvalidRecord.md +1 -1
  88. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownHttpNotFound.md +1 -1
  89. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidContentType.md +1 -1
  90. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidResponse.md +1 -1
  91. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownNoResponse.md +1 -1
  92. package/front_end/models/issues_manager/descriptions/emailVerificationRequestInvalidEmail.md +1 -1
  93. package/front_end/models/issues_manager/descriptions/emailVerificationRequestJwksHttpNotFound.md +1 -1
  94. package/front_end/models/issues_manager/descriptions/emailVerificationRequestJwksInvalidResponse.md +1 -1
  95. package/front_end/models/issues_manager/descriptions/emailVerificationRequestKeyBindingSigningFailed.md +1 -1
  96. package/front_end/models/issues_manager/descriptions/emailVerificationRequestRpOriginIsOpaque.md +1 -1
  97. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenHttpNotFound.md +1 -1
  98. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidContentType.md +1 -1
  99. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidResponse.md +1 -1
  100. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidSdJwt.md +1 -1
  101. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenMalformedSdJwt.md +1 -1
  102. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenNoResponse.md +1 -1
  103. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidAudience.md +1 -1
  104. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidIssuedAt.md +1 -1
  105. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidNonce.md +1 -1
  106. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidSdHash.md +1 -1
  107. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidTyp.md +1 -1
  108. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingAud.md +1 -1
  109. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingCnf.md +1 -1
  110. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingIat.md +1 -1
  111. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingNonce.md +1 -1
  112. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingSdHash.md +1 -1
  113. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbSignatureFailed.md +1 -1
  114. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmail.md +1 -1
  115. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmailVerified.md +1 -1
  116. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidHolderKey.md +1 -1
  117. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuedAt.md +1 -1
  118. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuer.md +1 -1
  119. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtJwksMissingKeys.md +1 -1
  120. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingCnf.md +1 -1
  121. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingEmail.md +1 -1
  122. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIat.md +1 -1
  123. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIss.md +1 -1
  124. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtSignatureFailed.md +1 -1
  125. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtUnsupportedHeaderAlg.md +1 -1
  126. package/front_end/models/issues_manager/descriptions/emailVerificationRequestUserLoggedOut.md +1 -1
  127. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownAccountsEndpointCrossOrigin.md +1 -1
  128. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownHttpNotFound.md +1 -1
  129. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidContentType.md +1 -1
  130. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidResponse.md +1 -1
  131. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownIssuanceEndpointCrossOrigin.md +1 -1
  132. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownListEmpty.md +1 -1
  133. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingAccountsEndpoint.md +1 -1
  134. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingIssuanceEndpoint.md +1 -1
  135. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownNoResponse.md +1 -1
  136. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownUnsupportedSigningAlgorithm.md +1 -1
  137. package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -1
  138. package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -1
  139. package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsNoResponse.md +1 -1
  140. package/front_end/models/issues_manager/descriptions/federatedAuthRequestApprovalDeclined.md +1 -1
  141. package/front_end/models/issues_manager/descriptions/federatedAuthRequestCanceled.md +1 -1
  142. package/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -1
  143. package/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorIdToken.md +1 -1
  144. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -1
  145. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -1
  146. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -1
  147. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -1
  148. package/front_end/models/issues_manager/descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -1
  149. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -1
  150. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -1
  151. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestNoResponse.md +1 -1
  152. package/front_end/models/issues_manager/descriptions/federatedAuthRequestTooManyRequests.md +1 -1
  153. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -1
  154. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -1
  155. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -1
  156. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -1
  157. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -1
  158. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -1
  159. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -1
  160. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -1
  161. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -1
  162. package/front_end/models/issues_manager/descriptions/fetchingPartitionedBlobURL.md +2 -2
  163. package/front_end/models/issues_manager/descriptions/genericFormAriaLabelledByToNonExistingIdError.md +2 -2
  164. package/front_end/models/issues_manager/descriptions/genericFormAutocompleteAttributeEmptyError.md +1 -1
  165. package/front_end/models/issues_manager/descriptions/genericFormDuplicateIdForInputError.md +1 -1
  166. package/front_end/models/issues_manager/descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +2 -2
  167. package/front_end/models/issues_manager/descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +2 -2
  168. package/front_end/models/issues_manager/descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +1 -1
  169. package/front_end/models/issues_manager/descriptions/genericFormInputWithNoLabelError.md +1 -1
  170. package/front_end/models/issues_manager/descriptions/genericFormLabelForMatchesNonExistingIdError.md +2 -2
  171. package/front_end/models/issues_manager/descriptions/genericFormLabelForNameError.md +1 -1
  172. package/front_end/models/issues_manager/descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +1 -1
  173. package/front_end/models/issues_manager/descriptions/genericFormModelContextMissingToolName.md +1 -1
  174. package/front_end/models/issues_manager/descriptions/genericFormModelContextParameterMissingName.md +1 -1
  175. package/front_end/models/issues_manager/descriptions/genericFormModelContextRequiredParameterMissingName.md +1 -1
  176. package/front_end/models/issues_manager/descriptions/genericNavigationEntryMarkedSkippable.md +2 -2
  177. package/front_end/models/issues_manager/descriptions/heavyAd.md +1 -1
  178. package/front_end/models/issues_manager/descriptions/lazyLoadImageZeroSize.md +1 -1
  179. package/front_end/models/issues_manager/descriptions/navigatingPartitionedBlobURL.md +3 -3
  180. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +1 -1
  181. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +1 -1
  182. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +1 -1
  183. package/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +2 -2
  184. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +2 -2
  185. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +2 -2
  186. package/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +1 -1
  187. package/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +2 -2
  188. package/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +2 -2
  189. package/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +2 -2
  190. package/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +2 -2
  191. package/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +1 -1
  192. package/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +2 -2
  193. package/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +2 -2
  194. package/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +2 -2
  195. package/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +1 -1
  196. package/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +2 -2
  197. package/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +1 -1
  198. package/front_end/models/issues_manager/descriptions/placeholderDescriptionForInvisibleIssues.md +1 -1
  199. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +1 -1
  200. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedSelectChild.md +1 -1
  201. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +1 -1
  202. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +1 -1
  203. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +1 -1
  204. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +1 -1
  205. package/front_end/models/issues_manager/descriptions/selectivePermissionsIntervention.md +3 -3
  206. package/front_end/models/issues_manager/descriptions/sharedArrayBuffer.md +1 -1
  207. package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -1
  208. package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +1 -1
  209. package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -1
  210. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -1
  211. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -1
  212. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorExpiredResponse.md +1 -1
  213. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +2 -2
  214. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -1
  215. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNavigationRequest.md +2 -2
  216. package/front_end/models/issues_manager/descriptions/sriInvalidSignatureHeader.md +4 -4
  217. package/front_end/models/issues_manager/descriptions/sriInvalidSignatureInputHeader.md +4 -4
  218. package/front_end/models/issues_manager/descriptions/sriMissingSignatureHeader.md +1 -1
  219. package/front_end/models/issues_manager/descriptions/sriMissingSignatureInputHeader.md +2 -2
  220. package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsIncorrectLength.md +2 -2
  221. package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsNotByteSequence.md +4 -4
  222. package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md +4 -4
  223. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md +1 -1
  224. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md +2 -2
  225. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +1 -1
  226. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +1 -1
  227. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md +2 -2
  228. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderKeyIdLength.md +5 -5
  229. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingLabel.md +3 -3
  230. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +2 -2
  231. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueMissingComponents.md +2 -2
  232. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +2 -2
  233. package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +4 -4
  234. package/front_end/models/issues_manager/descriptions/sriValidationFailedInvalidLength.md +3 -3
  235. package/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureExpired.md +2 -2
  236. package/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md +2 -2
  237. package/front_end/models/issues_manager/descriptions/stylesheetLateImport.md +1 -1
  238. package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +1 -1
  239. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +2 -2
  240. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +3 -3
  241. package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +2 -2
  242. package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +1 -1
  243. package/front_end/models/live-metrics/LiveMetrics.ts +59 -19
  244. package/front_end/models/live-metrics/web-vitals-injected/README.md +1 -1
  245. package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +6 -1
  246. package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +11 -3
  247. package/front_end/models/logs/LogManager.ts +1 -1
  248. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +1 -1
  249. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +6 -7
  250. package/front_end/models/workspace_diff/WorkspaceDiff.ts +13 -14
  251. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +15 -7
  252. package/front_end/panels/application/BackgroundServiceView.ts +18 -20
  253. package/front_end/panels/application/DOMStorageItemsView.ts +1 -2
  254. package/front_end/panels/application/KeyValueStorageItemsView.ts +12 -0
  255. package/front_end/panels/autofill/AutofillView.ts +17 -17
  256. package/front_end/panels/autofill/autofillView.css +7 -8
  257. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +31 -31
  258. package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +15 -15
  259. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +12 -12
  260. package/front_end/panels/browser_debugger/browser_debugger-meta.ts +27 -27
  261. package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +14 -6
  262. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +14 -6
  263. package/front_end/panels/common/AiCodeCompletionTeaser.ts +13 -6
  264. package/front_end/panels/common/GeminiRebrandPromoDialog.ts +1 -1
  265. package/front_end/panels/console/ConsoleInsightTeaser.ts +13 -6
  266. package/front_end/panels/console/ConsoleView.ts +6 -6
  267. package/front_end/panels/console_counters/WarningErrorCounter.ts +4 -4
  268. package/front_end/panels/coverage/CoverageModel.ts +11 -1
  269. package/front_end/panels/elements/StylePropertiesSection.ts +59 -10
  270. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +18 -7
  271. package/front_end/panels/elements/StylesSidebarPane.ts +48 -0
  272. package/front_end/panels/emulation/AdvancedApp.ts +18 -8
  273. package/front_end/panels/emulation/DeviceModeToolbar.ts +0 -1
  274. package/front_end/panels/emulation/DeviceModeView.ts +289 -164
  275. package/front_end/panels/emulation/MediaQueryInspector.ts +10 -6
  276. package/front_end/panels/emulation/deviceModeView.css +1 -0
  277. package/front_end/panels/event_listeners/EventListenersView.ts +8 -8
  278. package/front_end/panels/explain/components/ConsoleInsight.ts +15 -7
  279. package/front_end/panels/lighthouse/LighthouseController.ts +1 -6
  280. package/front_end/panels/network/NetworkLogView.ts +13 -14
  281. package/front_end/panels/screencast/ScreencastApp.ts +12 -6
  282. package/front_end/panels/screencast/ScreencastView.ts +37 -11
  283. package/front_end/panels/sensors/locationsSettingsTab.css +4 -0
  284. package/front_end/panels/settings/AISettingsTab.ts +13 -6
  285. package/front_end/panels/sources/DebuggerPlugin.ts +13 -2
  286. package/front_end/panels/sources/breakpointEditDialog.css +2 -2
  287. package/front_end/panels/timeline/components/LiveMetricsView.ts +14 -1
  288. package/front_end/panels/timeline/components/cpuThrottlingSelector.css +4 -0
  289. package/front_end/panels/timeline/components/liveMetricsView.css +28 -0
  290. package/front_end/panels/timeline/timeline-meta.ts +13 -0
  291. package/front_end/third_party/chromium/README.chromium +1 -1
  292. package/front_end/ui/components/menus/menu.css +4 -0
  293. package/front_end/ui/components/menus/menuItem.css +4 -0
  294. package/front_end/ui/components/menus/selectMenu.css +4 -0
  295. package/front_end/ui/components/menus/selectMenuButton.css +4 -0
  296. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +21 -10
  297. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +23 -12
  298. package/front_end/ui/components/text_editor/config.ts +7 -0
  299. package/front_end/ui/legacy/AppProvider.ts +2 -1
  300. package/front_end/ui/legacy/RootView.ts +8 -1
  301. package/front_end/ui/legacy/UniverseRequestEvent.ts +19 -0
  302. package/front_end/ui/legacy/Widget.ts +49 -6
  303. package/front_end/ui/legacy/inspectorCommon.css +1 -1
  304. package/front_end/ui/legacy/legacy.ts +2 -0
  305. package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
  306. package/package.json +1 -2
  307. package/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md +0 -8
  308. package/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md +0 -8
  309. package/front_end/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md +0 -8
  310. package/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md +0 -8
  311. package/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md +0 -8
  312. package/front_end/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +0 -8
@@ -753,7 +753,8 @@ export type ViewFunction = typeof DEFAULT_VIEW;
753
753
 
754
754
  export class ConsoleInsight extends UI.Widget.Widget {
755
755
  static async create(promptBuilder: PublicPromptBuilder, aidaClient: PublicAidaClient): Promise<Lit.LitTemplate> {
756
- const aidaPreconditions = await Host.AidaClient.AidaClient.checkAccessPreconditions();
756
+ const aidaPreconditions = Host.AidaClient.HostConfigTracker.instance().aidaAvailability ??
757
+ await Host.AidaClient.AidaClient.checkAccessPreconditions();
757
758
  return html`<devtools-widget class="devtools-console-insight" ${
758
759
  widget(element => new ConsoleInsight(promptBuilder, aidaClient, aidaPreconditions, element))}>
759
760
  </devtools-widget>`;
@@ -780,7 +781,8 @@ export class ConsoleInsight extends UI.Widget.Widget {
780
781
 
781
782
  #consoleInsightsEnabledSetting: Common.Settings.Setting<boolean>|undefined;
782
783
  #aidaPreconditions: Host.AidaClient.AidaAccessPreconditions;
783
- #boundOnAidaAvailabilityChange: () => Promise<void>;
784
+ #boundOnAidaAvailabilityChange:
785
+ (ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>) => void;
784
786
  #marked: Marked.Marked.Marked;
785
787
 
786
788
  constructor(
@@ -885,7 +887,10 @@ export class ConsoleInsight extends UI.Widget.Widget {
885
887
  Host.AidaClient.HostConfigTracker.instance().addEventListener(
886
888
  Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnAidaAvailabilityChange);
887
889
  // If AIDA availability has changed while the component was disconnected, we need to update.
888
- void this.#onAidaAvailabilityChange();
890
+ const initialAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
891
+ if (initialAvailability !== undefined) {
892
+ this.#updateAidaAvailability(initialAvailability);
893
+ }
889
894
  // The setting might have been turned on/off while the component was disconnected.
890
895
  // Update the state, unless the current state is already terminal (`INSIGHT` or `ERROR`).
891
896
  if (this.#state.type !== State.INSIGHT && this.#state.type !== State.ERROR) {
@@ -901,15 +906,18 @@ export class ConsoleInsight extends UI.Widget.Widget {
901
906
  Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnAidaAvailabilityChange);
902
907
  }
903
908
 
904
- async #onAidaAvailabilityChange(): Promise<void> {
905
- const currentAidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
906
- if (currentAidaAvailability !== this.#aidaPreconditions) {
907
- this.#aidaPreconditions = currentAidaAvailability;
909
+ #updateAidaAvailability(aidaAvailability: Host.AidaClient.AidaAccessPreconditions): void {
910
+ if (aidaAvailability !== this.#aidaPreconditions) {
911
+ this.#aidaPreconditions = aidaAvailability;
908
912
  this.#state = this.#getStateFromAidaAvailability();
909
913
  void this.#generateInsightIfNeeded();
910
914
  }
911
915
  }
912
916
 
917
+ #onAidaAvailabilityChange(ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>): void {
918
+ this.#updateAidaAvailability(ev.data);
919
+ }
920
+
913
921
  #onConsoleInsightsSettingChanged(): void {
914
922
  if (this.#consoleInsightsEnabledSetting?.getIfNotDisabled() === true) {
915
923
  this.#getOnboardingCompletedSetting().set(true);
@@ -27,7 +27,7 @@ const UIStrings = {
27
27
  'There may be stored data affecting loading performance in this location: {PH1}. Audit this page in an incognito window to stop those resources from affecting your scores.',
28
28
  /**
29
29
  * @description Text when stored data in multiple locations may affect Lighthouse run.
30
- * @example {IndexedDB, WebSQL} PH1
30
+ * @example {IndexedDB} PH1
31
31
  */
32
32
  thereMayBeStoredDataAffectingLoadingPlural:
33
33
  'There may be stored data affecting loading performance in these locations: {PH1}. Audit this page in an incognito window to stop those resources from affecting your scores.',
@@ -48,10 +48,6 @@ const UIStrings = {
48
48
  * @description Text in sidebar of the Application panel.
49
49
  */
50
50
  indexeddb: 'IndexedDB',
51
- /**
52
- * @description Text in sidebar of the Application panel.
53
- */
54
- webSql: 'Web SQL',
55
51
  /**
56
52
  * @description Text of checkbox to include running the performance audits in Lighthouse.
57
53
  */
@@ -713,7 +709,6 @@ export class LighthouseController extends Common.ObjectWrapper.ObjectWrapper<Eve
713
709
  const STORAGE_TYPE_NAMES = new Map([
714
710
  [Protocol.Storage.StorageType.Local_storage, i18nLazyString(UIStrings.localStorage)],
715
711
  [Protocol.Storage.StorageType.Indexeddb, i18nLazyString(UIStrings.indexeddb)],
716
- [Protocol.Storage.StorageType.Websql, i18nLazyString(UIStrings.webSql)],
717
712
  ]);
718
713
 
719
714
  let presets: LighthouseModel.RunTypes.Preset[]|null = null;
@@ -467,9 +467,9 @@ const UIStrings = {
467
467
  */
468
468
  blockRequestDomain: 'Block request domain',
469
469
  /**
470
- * @description Text to replay an XHR request
470
+ * @description Text to resend a network request
471
471
  */
472
- replayXhr: 'Replay XHR',
472
+ resend: 'Resend',
473
473
  /**
474
474
  * @description Text in Network Log View of the Network panel
475
475
  */
@@ -734,12 +734,11 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
734
734
  return !filter(request);
735
735
  }
736
736
 
737
- private static requestPathFilter(regex: RegExp|null, request: SDK.NetworkRequest.NetworkRequest): boolean {
737
+ private static requestHostAndPathFilter(regex: RegExp|null, request: SDK.NetworkRequest.NetworkRequest): boolean {
738
738
  if (!regex) {
739
739
  return false;
740
740
  }
741
-
742
- return regex.test(request.path() + '/' + request.name());
741
+ return regex.test(request.parsedURL.urlWithoutScheme());
743
742
  }
744
743
 
745
744
  private static subdomains(domain: string): string[] {
@@ -1186,9 +1185,9 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1186
1185
  return;
1187
1186
  }
1188
1187
 
1189
- if (SDK.NetworkManager.NetworkManager.canReplayRequest(request)) {
1188
+ if (SDK.NetworkManager.NetworkManager.canResendRequest(request)) {
1190
1189
  SDK.NetworkManager.NetworkManager.replayRequest(request);
1191
- void VisualLogging.logKeyDown(this.dataGrid.selectedNode.element(), event, 'replay-xhr');
1190
+ void VisualLogging.logKeyDown(this.dataGrid.selectedNode.element(), event, 'resend');
1192
1191
  }
1193
1192
  }
1194
1193
  });
@@ -1975,10 +1974,10 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
1975
1974
  {jslogContext: 'throttle-request-domain'});
1976
1975
  }
1977
1976
 
1978
- if (SDK.NetworkManager.NetworkManager.canReplayRequest(request)) {
1979
- contextMenu.debugSection().appendItem(
1980
- i18nString(UIStrings.replayXhr), SDK.NetworkManager.NetworkManager.replayRequest.bind(null, request),
1981
- {jslogContext: 'replay-xhr'});
1977
+ if (SDK.NetworkManager.NetworkManager.canResendRequest(request)) {
1978
+ contextMenu.debugSection().appendItem(i18nString(UIStrings.resend),
1979
+ SDK.NetworkManager.NetworkManager.replayRequest.bind(null, request),
1980
+ {jslogContext: 'resend'});
1982
1981
  }
1983
1982
  }
1984
1983
  }
@@ -2169,13 +2168,13 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
2169
2168
  if (key) {
2170
2169
  const defaultText = Platform.StringUtilities.escapeForRegExp(key + ':' + text);
2171
2170
  filter = this.createSpecialFilter((key as NetworkForward.UIFilter.FilterType), text) ||
2172
- NetworkLogView.requestPathFilter.bind(null, new RegExp(defaultText, 'i'));
2171
+ NetworkLogView.requestHostAndPathFilter.bind(null, new RegExp(defaultText, 'i'));
2173
2172
  } else if (descriptor.regex) {
2174
- filter = NetworkLogView.requestPathFilter.bind(null, (regex as RegExp));
2173
+ filter = NetworkLogView.requestHostAndPathFilter.bind(null, (regex as RegExp));
2175
2174
  } else if (this.isValidUrl(text)) {
2176
2175
  filter = NetworkLogView.requestUrlFilter.bind(null, text);
2177
2176
  } else {
2178
- filter = NetworkLogView.requestPathFilter.bind(
2177
+ filter = NetworkLogView.requestHostAndPathFilter.bind(
2179
2178
  null, new RegExp(Platform.StringUtilities.escapeForRegExp(text), 'i'));
2180
2179
  }
2181
2180
  if ((descriptor.negative && !invert) || (!descriptor.negative && invert)) {
@@ -6,6 +6,7 @@
6
6
  import * as Common from '../../core/common/common.js';
7
7
  import * as i18n from '../../core/i18n/i18n.js';
8
8
  import * as SDK from '../../core/sdk/sdk.js';
9
+ import type * as Foundation from '../../foundation/foundation.js';
9
10
  import * as UI from '../../ui/legacy/legacy.js';
10
11
 
11
12
  import {ScreencastView} from './ScreencastView.js';
@@ -28,7 +29,9 @@ export class ScreencastApp implements UI.App.App,
28
29
  private screenCaptureModel?: SDK.ScreenCaptureModel.ScreenCaptureModel;
29
30
  private screencastView?: ScreencastView;
30
31
  rootView?: UI.RootView.RootView;
31
- constructor() {
32
+ readonly #universe: Foundation.Universe.Universe;
33
+ constructor(universe: Foundation.Universe.Universe) {
34
+ this.#universe = universe;
32
35
  this.enabledSetting = Common.Settings.Settings.instance().createSetting('screencast-enabled', true);
33
36
  this.toggleButton = new UI.Toolbar.ToolbarToggle(i18nString(UIStrings.toggleScreencast), 'devices');
34
37
  this.toggleButton.setToggled(this.enabledSetting.get());
@@ -37,15 +40,18 @@ export class ScreencastApp implements UI.App.App,
37
40
  SDK.TargetManager.TargetManager.instance().observeModels(SDK.ScreenCaptureModel.ScreenCaptureModel, this);
38
41
  }
39
42
 
40
- static instance(): ScreencastApp {
43
+ static instance(universe?: Foundation.Universe.Universe): ScreencastApp {
41
44
  if (!appInstance) {
42
- appInstance = new ScreencastApp();
45
+ if (!universe) {
46
+ throw new Error('ScreencastApp.instance() requires a Universe on initial instantiation');
47
+ }
48
+ appInstance = new ScreencastApp(universe);
43
49
  }
44
50
  return appInstance;
45
51
  }
46
52
 
47
53
  presentUI(document: Document): void {
48
- this.rootView = new UI.RootView.RootView();
54
+ this.rootView = new UI.RootView.RootView(this.#universe);
49
55
  this.rootView.registerRequiredCSS(UI.inspectorCommonStyles);
50
56
 
51
57
  this.rootSplitWidget =
@@ -137,7 +143,7 @@ export class ScreencastAppProvider implements UI.AppProvider.AppProvider {
137
143
  return screencastAppProviderInstance;
138
144
  }
139
145
 
140
- createApp(): UI.App.App {
141
- return ScreencastApp.instance();
146
+ createApp(universe: Foundation.Universe.Universe): UI.App.App {
147
+ return ScreencastApp.instance(universe);
142
148
  }
143
149
  }
@@ -179,6 +179,18 @@ export class ScreencastView extends UI.Widget.VBox implements SDK.OverlayModel.H
179
179
  this.stopCasting();
180
180
  }
181
181
 
182
+ override onDetach(): void {
183
+ this.navigationProgressBar?.dispose();
184
+ SDK.TargetManager.TargetManager.instance().removeEventListener(SDK.TargetManager.Events.SUSPEND_STATE_CHANGED,
185
+ this.onSuspendStateChange, this);
186
+ if (this.resourceTreeModel) {
187
+ this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.PrimaryPageChanged,
188
+ this.requestNavigationHistoryEvent, this);
189
+ this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,
190
+ this.requestNavigationHistoryEvent, this);
191
+ }
192
+ }
193
+
182
194
  private async startCasting(): Promise<void> {
183
195
  if (SDK.TargetManager.TargetManager.instance().allTargetsSuspended()) {
184
196
  return;
@@ -629,11 +641,9 @@ export class ScreencastView extends UI.Widget.VBox implements SDK.OverlayModel.H
629
641
  }
630
642
 
631
643
  private createCheckerboardPattern(context: CanvasRenderingContext2D): CanvasPattern|null {
632
- const pattern = document.createElement('canvas');
633
644
  const size = 32;
634
- pattern.width = size * 2;
635
- pattern.height = size * 2;
636
- const pctx = pattern.getContext('2d', {willReadFrequently: true}) as CanvasRenderingContext2D;
645
+ const pattern = new OffscreenCanvas(size * 2, size * 2);
646
+ const pctx = pattern.getContext('2d', {willReadFrequently: true}) as OffscreenCanvasRenderingContext2D;
637
647
 
638
648
  pctx.fillStyle = 'var(--sys-color-neutral-outline)';
639
649
  pctx.fillRect(0, 0, size * 2, size * 2);
@@ -787,6 +797,8 @@ export const HTTP_REGEX = /^http:\/\/(.+)/;
787
797
  export const SCHEME_REGEX = /^(https?|about|chrome):/;
788
798
 
789
799
  export class ProgressTracker {
800
+ private readonly resourceTreeModel: SDK.ResourceTreeModel.ResourceTreeModel|null;
801
+ private readonly networkManager: SDK.NetworkManager.NetworkManager|null;
790
802
  private element: HTMLElement;
791
803
  private requestIds: Map<string, SDK.NetworkRequest.NetworkRequest>|null;
792
804
  private startedRequests: number;
@@ -797,14 +809,16 @@ export class ProgressTracker {
797
809
  resourceTreeModel: SDK.ResourceTreeModel.ResourceTreeModel|null,
798
810
  networkManager: SDK.NetworkManager.NetworkManager|null, element: HTMLElement) {
799
811
  this.element = element;
800
- if (resourceTreeModel) {
801
- resourceTreeModel.addEventListener(
802
- SDK.ResourceTreeModel.Events.PrimaryPageChanged, this.onPrimaryPageChanged, this);
803
- resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this.onLoad, this);
812
+ this.resourceTreeModel = resourceTreeModel;
813
+ this.networkManager = networkManager;
814
+ if (this.resourceTreeModel) {
815
+ this.resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.PrimaryPageChanged,
816
+ this.onPrimaryPageChanged, this);
817
+ this.resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this.onLoad, this);
804
818
  }
805
- if (networkManager) {
806
- networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted, this.onRequestStarted, this);
807
- networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished, this.onRequestFinished, this);
819
+ if (this.networkManager) {
820
+ this.networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted, this.onRequestStarted, this);
821
+ this.networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished, this.onRequestFinished, this);
808
822
  }
809
823
  this.requestIds = null;
810
824
  this.startedRequests = 0;
@@ -812,6 +826,18 @@ export class ProgressTracker {
812
826
  this.maxDisplayedProgress = 0;
813
827
  }
814
828
 
829
+ dispose(): void {
830
+ if (this.resourceTreeModel) {
831
+ this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.PrimaryPageChanged,
832
+ this.onPrimaryPageChanged, this);
833
+ this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this.onLoad, this);
834
+ }
835
+ if (this.networkManager) {
836
+ this.networkManager.removeEventListener(SDK.NetworkManager.Events.RequestStarted, this.onRequestStarted, this);
837
+ this.networkManager.removeEventListener(SDK.NetworkManager.Events.RequestFinished, this.onRequestFinished, this);
838
+ }
839
+ }
840
+
815
841
  private onPrimaryPageChanged(): void {
816
842
  this.requestIds = new Map();
817
843
  this.startedRequests = 0;
@@ -4,6 +4,10 @@
4
4
  * found in the LICENSE file.
5
5
  */
6
6
 
7
+ * {
8
+ font-family: var(--default-font-family);
9
+ }
10
+
7
11
  .add-locations-button {
8
12
  margin-bottom: var(--sys-size-5);
9
13
  border: none;
@@ -438,7 +438,8 @@ export class AISettingsTab extends UI.Widget.VBox {
438
438
  #aiAssistanceSetting?: Common.Settings.Setting<boolean>;
439
439
  #aiCodeCompletionSetting?: Common.Settings.Setting<boolean>;
440
440
  #aidaAvailability = Host.AidaClient.AidaAccessPreconditions.NO_ACCOUNT_EMAIL;
441
- #boundOnAidaAvailabilityChange: () => Promise<void>;
441
+ #boundOnAidaAvailabilityChange:
442
+ (ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>) => void;
442
443
  // Setting to parameters needed to display it in the UI.
443
444
  // To display a a setting, it needs to be added to this map.
444
445
  #settingToParams = new Map<Common.Settings.Setting<boolean>, AiSettingParams>();
@@ -514,7 +515,10 @@ export class AISettingsTab extends UI.Widget.VBox {
514
515
  super.wasShown();
515
516
  Host.AidaClient.HostConfigTracker.instance().addEventListener(
516
517
  Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnAidaAvailabilityChange);
517
- void this.#onAidaAvailabilityChange();
518
+ const initialAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
519
+ if (initialAvailability !== undefined) {
520
+ this.#updateAidaAvailability(initialAvailability);
521
+ }
518
522
  this.requestUpdate();
519
523
  }
520
524
 
@@ -657,14 +661,17 @@ export class AISettingsTab extends UI.Widget.VBox {
657
661
  }
658
662
  }
659
663
 
660
- async #onAidaAvailabilityChange(): Promise<void> {
661
- const currentAidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
662
- if (currentAidaAvailability !== this.#aidaAvailability) {
663
- this.#aidaAvailability = currentAidaAvailability;
664
+ #updateAidaAvailability(aidaAvailability: Host.AidaClient.AidaAccessPreconditions): void {
665
+ if (aidaAvailability !== this.#aidaAvailability) {
666
+ this.#aidaAvailability = aidaAvailability;
664
667
  this.requestUpdate();
665
668
  }
666
669
  }
667
670
 
671
+ #onAidaAvailabilityChange(ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>): void {
672
+ this.#updateAidaAvailability(ev.data);
673
+ }
674
+
668
675
  #getAiAssistanceSettingDescription(): Platform.UIString.LocalizedString {
669
676
  const {hostConfig} = Root.Runtime;
670
677
  if (hostConfig.devToolsAiAssistanceV2?.enabled) {
@@ -2287,16 +2287,27 @@ export function computePopoverHighlightRange(state: CodeMirror.EditorState, mime
2287
2287
  }
2288
2288
  }
2289
2289
 
2290
- function containsSideEffects(doc: CodeMirror.Text, root: CodeMirror.SyntaxNode): boolean {
2290
+ export function containsSideEffects(doc: CodeMirror.Text, root: CodeMirror.SyntaxNode): boolean {
2291
2291
  let containsSideEffects = false;
2292
2292
  root.toTree().iterate({
2293
2293
  enter(node: CodeMirror.SyntaxNode): boolean {
2294
2294
  switch (node.name) {
2295
2295
  case 'AssignmentExpression':
2296
- case 'CallExpression': {
2296
+ case 'CallExpression':
2297
+ case 'NewExpression':
2298
+ case 'TaggedTemplateExpression':
2299
+ case 'DynamicImport': {
2297
2300
  containsSideEffects = true;
2298
2301
  return false;
2299
2302
  }
2303
+ case 'UnaryExpression': {
2304
+ const text = doc.sliceString(root.from + node.from, root.from + node.to).trim();
2305
+ if (text.startsWith('delete')) {
2306
+ containsSideEffects = true;
2307
+ return false;
2308
+ }
2309
+ break;
2310
+ }
2300
2311
  case 'ArithOp': {
2301
2312
  const op = doc.sliceString(root.from + node.from, root.from + node.to);
2302
2313
  if (op === '++' || op === '--') {
@@ -31,13 +31,13 @@
31
31
  }
32
32
 
33
33
  :host-context(.sources-edit-breakpoint-dialog) .source-frame-breakpoint-toolbar {
34
- font-family: sans-serif;
34
+ font-family: var(--default-font-family);
35
35
  font-size: 12px;
36
36
  }
37
37
 
38
38
  :host-context(.sources-edit-breakpoint-dialog) .link,
39
39
  .devtools-link {
40
- font-family: sans-serif;
40
+ font-family: var(--default-font-family);
41
41
  font-size: 12px;
42
42
  margin: 0 3px;
43
43
  }
@@ -17,6 +17,7 @@ import * as SDK from '../../../core/sdk/sdk.js';
17
17
  import * as CrUXManager from '../../../models/crux-manager/crux-manager.js';
18
18
  import * as EmulationModel from '../../../models/emulation/emulation.js';
19
19
  import * as LiveMetrics from '../../../models/live-metrics/live-metrics.js';
20
+ import type * as Spec from '../../../models/live-metrics/web-vitals-injected/spec/spec.js';
20
21
  import * as Trace from '../../../models/trace/trace.js';
21
22
  import * as Buttons from '../../../ui/components/buttons/buttons.js';
22
23
  import type * as Menus from '../../../ui/components/menus/menus.js';
@@ -44,6 +45,10 @@ const DEVICE_OPTION_LIST: DeviceOption[] = ['AUTO', ...CrUXManager.DEVICE_SCOPE_
44
45
  const RTT_MINIMUM = 60;
45
46
 
46
47
  const UIStrings = {
48
+ /**
49
+ * @description Label of a badge/pill indicating that the metrics are for a soft navigation.
50
+ */
51
+ softNavigationPillText: 'SOFT NAV',
47
52
  /**
48
53
  * @description Title of a view that shows performance metrics from the local environment and field metrics collected from real users. "field metrics" should be interpreted as "real user metrics".
49
54
  */
@@ -317,6 +322,7 @@ export interface ViewInput {
317
322
  logExtraInteractionDetails: (interaction: LiveMetrics.Interaction) => void;
318
323
  highlightedInteractionId?: string;
319
324
  highlightedLayoutShiftClusterIds?: Set<string>;
325
+ navigationType?: Spec.NavigationType;
320
326
  }
321
327
 
322
328
  export interface ViewOutput {
@@ -1010,7 +1016,10 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
1010
1016
  <div class="container">
1011
1017
  <div class="live-metrics-view">
1012
1018
  <main class="live-metrics">
1013
- <h2 class="section-title">${liveMetricsTitle}</h2>
1019
+ <div class="section-header">
1020
+ <h2 class="section-title">${liveMetricsTitle}</h2>
1021
+ ${input.navigationType === 'soft-navigation' ? html`<span class="badge">${i18nString(UIStrings.softNavigationPillText)}</span>` : nothing}
1022
+ </div>
1014
1023
  <div class="metric-cards">
1015
1024
  <div id="lcp">
1016
1025
  ${renderLcpCard(input)}
@@ -1098,6 +1107,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
1098
1107
  #lcpValue?: LiveMetrics.LcpValue;
1099
1108
  #clsValue?: LiveMetrics.ClsValue;
1100
1109
  #inpValue?: LiveMetrics.InpValue;
1110
+ #navigationType?: Spec.NavigationType;
1101
1111
  #interactions: LiveMetrics.InteractionMap = new Map();
1102
1112
  #layoutShifts: LiveMetrics.LayoutShift[] = [];
1103
1113
 
@@ -1125,6 +1135,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
1125
1135
  this.#lcpValue = event.data.lcp;
1126
1136
  this.#clsValue = event.data.cls;
1127
1137
  this.#inpValue = event.data.inp;
1138
+ this.#navigationType = event.data.navigationType;
1128
1139
 
1129
1140
  const hasNewLS = this.#layoutShifts.length < event.data.layoutShifts.length;
1130
1141
  this.#layoutShifts = [...event.data.layoutShifts];
@@ -1182,6 +1193,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
1182
1193
  this.#inpValue = liveMetrics.inpValue;
1183
1194
  this.#interactions = liveMetrics.interactions;
1184
1195
  this.#layoutShifts = liveMetrics.layoutShifts;
1196
+ this.#navigationType = liveMetrics.navigationType;
1185
1197
  this.requestUpdate();
1186
1198
  }
1187
1199
 
@@ -1249,6 +1261,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
1249
1261
  logExtraInteractionDetails: this.#logExtraInteractionDetails.bind(this),
1250
1262
  highlightedInteractionId: this.#highlightedInteractionId,
1251
1263
  highlightedLayoutShiftClusterIds: this.#highlightedLayoutShiftClusterIds,
1264
+ navigationType: this.#navigationType,
1252
1265
  };
1253
1266
 
1254
1267
  this.#view(viewInput, this.#viewOutput, this.contentElement);
@@ -12,6 +12,10 @@
12
12
  height: 20px;
13
13
  }
14
14
 
15
+ * {
16
+ font-family: var(--default-font-family);
17
+ }
18
+
15
19
  devtools-icon[name="info"] {
16
20
  margin-left: var(--sys-size-3);
17
21
  width: var(--sys-size-8);
@@ -394,3 +394,31 @@ devtools-link {
394
394
  .node-description {
395
395
  margin-bottom: 12px;
396
396
  }
397
+
398
+ .section-header {
399
+ display: flex;
400
+ align-items: center;
401
+ gap: 8px;
402
+ margin-bottom: 10px;
403
+ }
404
+
405
+ .section-header .section-title {
406
+ margin-bottom: 0;
407
+ }
408
+
409
+ .section-header .badge {
410
+ display: inline-flex;
411
+ align-items: center;
412
+ width: fit-content;
413
+ height: var(--sys-size-8);
414
+ line-height: var(--sys-size-8);
415
+ border-radius: var(--sys-shape-corner-extra-small);
416
+ padding: 0 var(--sys-size-3);
417
+ border: var(--sys-size-1) solid var(--sys-color-primary);
418
+ color: var(--sys-color-primary);
419
+ font-weight: var(--ref-typeface-weight-bold);
420
+ font-size: var(--sys-size-5);
421
+ text-align: center;
422
+ margin-top: var(--sys-size-5);
423
+ margin-bottom: var(--sys-size-5);
424
+ }
@@ -66,6 +66,10 @@ const UIStrings = {
66
66
  * @description Title of a setting under the Performance category in Settings
67
67
  */
68
68
  timelineShowAllEvents: 'Show all events',
69
+ /**
70
+ * @description Title of a setting under the Performance category in Settings
71
+ */
72
+ enableSoftNavigations: 'Enable soft navigation performance monitoring',
69
73
  /**
70
74
  * @description Title of a setting under the Performance category in Settings
71
75
  */
@@ -399,6 +403,15 @@ Common.Settings.registerSettingExtension({
399
403
  defaultValue: false,
400
404
  });
401
405
 
406
+ Common.Settings.registerSettingExtension({
407
+ category: Common.Settings.SettingCategory.PERFORMANCE,
408
+ storageType: Common.Settings.SettingStorageType.SYNCED,
409
+ title: i18nLazyString(UIStrings.enableSoftNavigations),
410
+ settingName: 'timeline-enable-soft-navigations',
411
+ settingType: Common.Settings.SettingType.BOOLEAN,
412
+ defaultValue: true,
413
+ });
414
+
402
415
  // IMPORTANT: if you are updating this, you should also update the setting in
403
416
  // js_timeline-meta.
404
417
  Common.Settings.registerSettingExtension({
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: Internal
3
3
  Version: N/A
4
- Revision: 8e5dd02f11d866b080045c734fbb8cbb99e9064c
4
+ Revision: e5e53aeb8a8dee88dadf13158fd44662113307d2
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -16,6 +16,10 @@
16
16
  background-color: var(--override-menu-active-background-color, var(--sys-color-neutral-container));
17
17
  }
18
18
 
19
+ * {
20
+ font-family: inherit;
21
+ }
22
+
19
23
  #container {
20
24
  list-style-type: none;
21
25
  margin-top: var(--sys-size-4);
@@ -29,6 +29,10 @@
29
29
  padding: var(--sys-size-3) 0 var(--sys-size-3) var(--sys-size-9);
30
30
  }
31
31
 
32
+ * {
33
+ font-family: inherit;
34
+ }
35
+
32
36
  .is-selected-item::before {
33
37
  content: "";
34
38
  position: absolute;
@@ -20,6 +20,10 @@
20
20
  linear-gradient(var(--sys-color-state-ripple-neutral-on-subtle), var(--sys-color-state-ripple-neutral-on-subtle));
21
21
  }
22
22
 
23
+ * {
24
+ font-family: inherit;
25
+ }
26
+
23
27
  button {
24
28
  background: none;
25
29
  }
@@ -10,6 +10,10 @@
10
10
  display: block;
11
11
  }
12
12
 
13
+ * {
14
+ font-family: inherit;
15
+ }
16
+
13
17
  .show {
14
18
  display: block;
15
19
  font-size: 12px;
@@ -78,7 +78,16 @@ export class AiCodeCompletionProvider {
78
78
  #aiCodeGenerationConfig?: AiCodeGenerationConfig;
79
79
  #aiCodeGenerationProvider?: AiCodeGenerationProvider;
80
80
 
81
- #boundOnUpdateAiCodeCompletionState = this.#updateAiCodeCompletionState.bind(this);
81
+ #boundOnAidaAvailabilityChange =
82
+ (ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>): void => {
83
+ this.#updateAiCodeCompletionStateWithAvailability(ev.data);
84
+ };
85
+ #boundOnSettingChange = (): void => {
86
+ const aidaAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
87
+ if (aidaAvailability !== undefined) {
88
+ this.#updateAiCodeCompletionStateWithAvailability(aidaAvailability);
89
+ }
90
+ };
82
91
 
83
92
  private constructor(aiCodeCompletionConfig: AiCodeCompletionConfig) {
84
93
  if (!AiCodeCompletion.AiCodeCompletion.AiCodeCompletion.isAiCodeCompletionAvailable()) {
@@ -122,9 +131,9 @@ export class AiCodeCompletionProvider {
122
131
  dispose(): void {
123
132
  this.#detachTeaser();
124
133
  this.#teaser = undefined;
125
- this.#aiCodeCompletionSetting.removeChangeListener(this.#boundOnUpdateAiCodeCompletionState);
126
- Host.AidaClient.HostConfigTracker.instance().removeEventListener(
127
- Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnUpdateAiCodeCompletionState);
134
+ this.#aiCodeCompletionSetting.removeChangeListener(this.#boundOnSettingChange);
135
+ Host.AidaClient.HostConfigTracker.instance().removeEventListener(Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED,
136
+ this.#boundOnAidaAvailabilityChange);
128
137
  this.#cleanupAiCodeCompletion();
129
138
  this.#aiCodeGenerationProvider?.dispose();
130
139
  }
@@ -139,10 +148,13 @@ export class AiCodeCompletionProvider {
139
148
  this.#editor.editor.dispatch(
140
149
  {effects: this.#teaserCompartment.reconfigure([aiCodeCompletionTeaserExtension(this.#teaser)])});
141
150
  }
142
- Host.AidaClient.HostConfigTracker.instance().addEventListener(
143
- Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnUpdateAiCodeCompletionState);
144
- this.#aiCodeCompletionSetting.addChangeListener(this.#boundOnUpdateAiCodeCompletionState);
145
- void this.#updateAiCodeCompletionState();
151
+ Host.AidaClient.HostConfigTracker.instance().addEventListener(Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED,
152
+ this.#boundOnAidaAvailabilityChange);
153
+ this.#aiCodeCompletionSetting.addChangeListener(this.#boundOnSettingChange);
154
+ const initialAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
155
+ if (initialAvailability !== undefined) {
156
+ this.#updateAiCodeCompletionStateWithAvailability(initialAvailability);
157
+ }
146
158
  this.#aiCodeGenerationProvider?.editorInitialized(editor);
147
159
  }
148
160
 
@@ -183,8 +195,7 @@ export class AiCodeCompletionProvider {
183
195
  this.#aiCodeCompletionConfig?.onFeatureDisabled();
184
196
  }
185
197
 
186
- async #updateAiCodeCompletionState(): Promise<void> {
187
- const aidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
198
+ #updateAiCodeCompletionStateWithAvailability(aidaAvailability: Host.AidaClient.AidaAccessPreconditions): void {
188
199
  const isAvailable = aidaAvailability === Host.AidaClient.AidaAccessPreconditions.AVAILABLE;
189
200
  const devtoolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance().locale;
190
201
  const aiCodeCompletionEnabled =