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
@@ -1,9 +1,9 @@
1
- # A `signature` header member's value is parameterized.
1
+ # A `signature` header members value is parameterized
2
2
 
3
- Responses' [`signature`](signatureHeader) header should be formatted as a
4
- [Dictionary](sfDictionary) containing one or more signatures. Each member's key
3
+ Responses [`signature`](signatureHeader) header should be formatted as a
4
+ [Dictionary](sfDictionary) containing one or more signatures. Each members key
5
5
  is a label for the signature which maps it to the relevant metadata defined in a
6
- [`signature-input`](signatureInputHeader) header. Each member's value is a
6
+ [`signature-input`](signatureInputHeader) header. Each members value is a
7
7
  [Byte Sequence](sfByteSequence) containing the signature itself, with no
8
8
  additional parameters specified.
9
9
 
@@ -1,4 +1,4 @@
1
- # A `signature-input` header member's value contains an unknown component.
1
+ # A `signature-input` header members value contains an unknown component
2
2
 
3
3
  The metadata delivered via [`signature-input`](signatureInputHeader) can only
4
4
  contain a limited set of components in the list it specifies. The known
@@ -1,6 +1,6 @@
1
- # A `signature-input` header's component is not a string.
1
+ # A `signature-input` headers component isn’t a string
2
2
 
3
- Responses' [`signature-input`](signatureInputHeader) header's members' values
3
+ Responses [`signature-input`](signatureInputHeader) headers members values
4
4
  are [Inner Lists](sfInnerList) whose contents are each strings. Perhaps you
5
5
  forgot double-quotes around a component?
6
6
 
@@ -1,4 +1,4 @@
1
- # Invalid parameter on a derived component in a `signature-input` header.
1
+ # Invalid parameter on a derived component in a `signature-input` header
2
2
 
3
3
  Derived components must be specified as deriving from the request, using the
4
4
  [`req` parameter](componentParameterReq). No other parameter may be specified.
@@ -1,4 +1,4 @@
1
- # Invalid parameter on a header component in a `signature-input` header.
1
+ # Invalid parameter on a header component in a `signature-input` header
2
2
 
3
3
  The header [`unencoded-digest`](unencodedDigestHeader) must be specified as
4
4
  being strictly serialized in the signature base, using the
@@ -1,6 +1,6 @@
1
- # Invalid parameter on the list of components in a `signature-input` header.
1
+ # Invalid parameter on the list of components in a `signature-input` header
2
2
 
3
- The `signature-input` header's [Inner Lists](sfInnerList) must be specified with the
3
+ The `signature-input` headers [Inner Lists](sfInnerList) must be specified with the
4
4
  [`keyid` and `type` parameters](signatureParameters). The following parameters may
5
5
  also be specified:
6
6
 
@@ -1,10 +1,10 @@
1
- # Invalid `keyid` value in a `signature-input` header.
1
+ # Invalid `keyid` value in a `signature-input` header
2
2
 
3
- The key specified in a [`signature-input`](signatureInputHeader) header's
4
- [`keyid` parameter](signatureParameters) is not a base64-encoded
5
- 256 bit sequence, and therefore cannot be decoded as an Ed25519 public key.
3
+ The key specified in a [`signature-input`](signatureInputHeader) headers
4
+ [`keyid` parameter](signatureParameters) isn’t a base64-encoded
5
+ 256 bit sequence, and therefore can’t be decoded as an Ed25519 public key.
6
6
 
7
- Note that the `keyid` parameter's value is a string, not a
7
+ Note that the `keyid` parameters value is a string, not a
8
8
  [Byte Sequence](sfByteSequence). For example:
9
9
 
10
10
  ```
@@ -1,6 +1,6 @@
1
- # Label mismatch between `signature` and `signature-input` headers.
1
+ # Label mismatch between `signature` and `signature-input` headers
2
2
 
3
3
  A [`signature`](signatureHeader) header specifies a signature whose label does
4
4
  not appear in a corresponding [`signature-input`](signatureInputHeader) header.
5
- Without a `signature-input` header's definition of the signature's metadata,
6
- the signature cannot be verified.
5
+ Without a `signature-input` headers definition of the signatures metadata,
6
+ the signature can’t be verified.
@@ -1,6 +1,6 @@
1
- # Missing a required parameter on the list of components in a `signature-input` header.
1
+ # Missing a required parameter on the list of components in a `signature-input` header
2
2
 
3
- The [`signature-input`][signatureInputHeader] header's [Inner Lists](sfInnerList)
3
+ The [`signature-input`][signatureInputHeader] headers [Inner Lists](sfInnerList)
4
4
  must be specified with both the [`keyid` and `type` parameters](signatureParameters).
5
5
 
6
6
  ```
@@ -1,6 +1,6 @@
1
- # Missing a required component in a `signature-input` header.
1
+ # Missing a required component in a `signature-input` header
2
2
 
3
- The [`signature-input`](signatureInputHeader) header's
3
+ The [`signature-input`](signatureInputHeader) headers
4
4
  [Inner Lists](sfInnerList) must contain the string "`unencoded-digest`" with an
5
5
  `sf` parameter:
6
6
 
@@ -1,6 +1,6 @@
1
- # A `signature-input` header has a member whose value is not an Inner List.
1
+ # A `signature-input` header has a member whose value isn’t an Inner List
2
2
 
3
- The value of each member of a [`signature-input`](signatureInputHeader) header's
3
+ The value of each member of a [`signature-input`](signatureInputHeader) headers
4
4
  [Dictionary][sfDictionary] must be an [Inner List](sfInnerList) containing the
5
5
  set of components over which a signature is generated.
6
6
 
@@ -1,10 +1,10 @@
1
- # Integrity verification failed.
1
+ # Integrity verification failed
2
2
 
3
3
  The signature associated with a response could be successfully verified, but the
4
4
  public keys asserted in the [`signature-input`](signatureInputHeader)
5
- header's [`keyid` parameter](signatureParameters) do not match the integrity
6
- assertions made by the request's initiator. Verificiation failed.
5
+ headers [`keyid` parameter](signatureParameters) don’t match the integrity
6
+ assertions made by the requests initiator. Verification failed.
7
7
 
8
- The following are the keys specified by the request's initiator:
8
+ The following are the keys specified by the requests initiator:
9
9
 
10
10
  {PLACEHOLDER_integrityAssertions}
@@ -1,5 +1,5 @@
1
- # Signature verification failed: the signature provided is not an Ed25519 signature.
1
+ # Signature verification failed: the signature provided isn’t an Ed25519 signature
2
2
 
3
- The signature specified in a [`signature`](signatureHeader) header is not a
4
- base64-encoded 512 bit byte sequence, and can therefore not be verified as an
3
+ The signature specified in a [`signature`](signatureHeader) header isn’t a
4
+ base64-encoded 512 bit Byte Sequence, and can therefore not be verified as an
5
5
  Ed25519 signature.
@@ -1,6 +1,6 @@
1
- # Signature verification failed: the signature is expired.
1
+ # Signature verification failed: the signature is expired
2
2
 
3
3
  The [`expires` parameter](signatureParameters) specified in a
4
4
  [`signature-input`](signatureInputHeader) header is a UNIX timestamp
5
5
  representing a time in the past. The signature has therefore expired, and
6
- verification is not possible.
6
+ verification isn’t possible.
@@ -1,7 +1,7 @@
1
- # Signature verification failed.
1
+ # Signature verification failed
2
2
 
3
3
  The public key specified in the [`signature-input`](signatureInputHeader)
4
- header's [`keyid` parameter](signatureParameters) does not match the signature
4
+ headers [`keyid` parameter](signatureParameters) doesn’t match the signature
5
5
  specified in the [`signature`](signatureHeader) header. Verification failed.
6
6
 
7
7
  The following is the signature base over which the verification attempt was made:
@@ -1,4 +1,4 @@
1
1
  # Define @import rules at the top of the stylesheet
2
2
 
3
- An @import rule was ignored because it wasn't defined at the top of the stylesheet. Such rules must appear at the top,
3
+ An @import rule was ignored because it wasnt defined at the top of the stylesheet. Such rules must appear at the top,
4
4
  before any style declaration and any other at-rule with the exception of @charset and @layer.
@@ -1,3 +1,3 @@
1
1
  # Interactive element inside of a <summary> element
2
2
 
3
- An interactive element was found within a `<summary>` element. These elements will not consistently be accessible to people navigating by keyboard or using assistive technology.
3
+ An interactive element was found within a `<summary>` element. These elements won’t consistently be accessible to people navigating by keyboard or using assistive technology.
@@ -1,7 +1,7 @@
1
- # An `unencoded-digest` header contains a digest with an incorrect length.
1
+ # An `unencoded-digest` header contains a digest with an incorrect length
2
2
 
3
3
  [`unencoded-digest`](unencodedDigestHeader) headers contain SHA2 digests of a
4
- response's body. The digest delivered with this response is not the correct
4
+ responses body. The digest delivered with this response isn’t the correct
5
5
  length for the algorithm specified. SHA-256 digests should be 256 bits long,
6
6
  SHA-512 digests 512 bits long. For example, if the body was "Hello, world.", the
7
7
  following might be an appropriate header:
@@ -1,10 +1,10 @@
1
- # An `unencoded-digest` header contains a digest with an invalid type.
1
+ # An `unencoded-digest` header contains a digest with an invalid type
2
2
 
3
3
  [`unencoded-digest`](unencodedDigestHeader) headers must be formatted as a
4
- [Dictionary](sfDictionary), wherein each member's label specifies the hashing
4
+ [Dictionary](sfDictionary), wherein each members label specifies the hashing
5
5
  algorithm, and the value is a [Byte Sequence](sfByteSequence) containing the
6
6
  digest. The digest delivered with this response did not deliver the digest as a
7
- byte sequence.
7
+ Byte Sequence.
8
8
 
9
9
  For example, if the body was "Hello, world.":
10
10
 
@@ -1,7 +1,7 @@
1
- # An `unencoded-digest` header cannot be parsed.
1
+ # An `unencoded-digest` header can’t be parsed
2
2
 
3
3
  [`unencoded-digest`](unencodedDigestHeader) headers must be formatted as a
4
- [Dictionary](sfDictionary), wherein each member's label specifies the hashing
4
+ [Dictionary](sfDictionary), wherein each members label specifies the hashing
5
5
  algorithm, and the value is a [Byte Sequence](sfByteSequence) containing the
6
6
  digest. The digest delivered with this response did not format the response
7
7
  correctly.
@@ -1,4 +1,4 @@
1
- # An `unencoded-digest` header contains a digest with an invalid algorithm.
1
+ # An `unencoded-digest` header contains a digest with an invalid algorithm
2
2
 
3
3
  [`unencoded-digest`](unencodedDigestHeader) headers support only two hashing
4
4
  algorithms, SHA-256, and SHA-512. The digests delivered with this response
@@ -10,6 +10,7 @@ import * as Root from '../../core/root/root.js';
10
10
  import * as SDK from '../../core/sdk/sdk.js';
11
11
  import type * as Protocol from '../../generated/protocol.js';
12
12
  import * as EmulationModel from '../../models/emulation/emulation.js';
13
+ import * as CrUXManager from '../crux-manager/crux-manager.js';
13
14
 
14
15
  import * as Spec from './web-vitals-injected/spec/spec.js';
15
16
 
@@ -55,6 +56,7 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
55
56
  #interactions: InteractionMap = new Map();
56
57
  #interactionsByGroupId = new Map<Spec.InteractionEntryGroupId, Interaction[]>();
57
58
  #layoutShifts: LayoutShift[] = [];
59
+ #navigationType?: Spec.NavigationType;
58
60
  #lastEmulationChangeTime?: number;
59
61
  #mutex = new Common.Mutex.Mutex();
60
62
  readonly #targetManager: SDK.TargetManager.TargetManager;
@@ -69,6 +71,9 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
69
71
  this.#targetManager.addModelListener(SDK.ResourceTreeModel.ResourceTreeModel,
70
72
  SDK.ResourceTreeModel.Events.PrimaryPageChanged, this.#onPrimaryPageChanged,
71
73
  this);
74
+ Common.Settings.Settings.instance()
75
+ .moduleSetting('timeline-enable-soft-navigations')
76
+ .addChangeListener(this.#onSettingChanged, this);
72
77
  }
73
78
 
74
79
  #onPrimaryPageChanged(
@@ -106,6 +111,10 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
106
111
  return Root.DevToolsContext.globalInstance().get(LiveMetrics);
107
112
  }
108
113
 
114
+ get navigationType(): Spec.NavigationType|undefined {
115
+ return this.#navigationType;
116
+ }
117
+
109
118
  get lcpValue(): LcpValue|undefined {
110
119
  return this.#lcpValue;
111
120
  }
@@ -243,6 +252,7 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
243
252
  inp: this.#inpValue,
244
253
  interactions: this.#interactions,
245
254
  layoutShifts: this.#layoutShifts,
255
+ navigationType: this.#navigationType,
246
256
  });
247
257
  }
248
258
 
@@ -252,6 +262,7 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
252
262
  this.#inpValue = status.inp;
253
263
  this.#interactions = status.interactions;
254
264
  this.#layoutShifts = status.layoutShifts;
265
+ this.#navigationType = status.navigationType;
255
266
  this.#sendStatusUpdate();
256
267
  }
257
268
 
@@ -399,6 +410,11 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
399
410
  }
400
411
  case 'reset': {
401
412
  this.#clearMetrics();
413
+ this.#navigationType = webVitalsEvent.navigationType;
414
+ if (webVitalsEvent.url) {
415
+ CrUXManager.CrUXManager.instance().setMainDocumentURL(webVitalsEvent.url);
416
+ void CrUXManager.CrUXManager.instance().refresh();
417
+ }
402
418
  break;
403
419
  }
404
420
  }
@@ -413,6 +429,7 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
413
429
  this.#interactions.clear();
414
430
  this.#interactionsByGroupId.clear();
415
431
  this.#layoutShifts = [];
432
+ this.#navigationType = undefined;
416
433
  }
417
434
 
418
435
  #isPrimaryFrameExecutionContext(executionContextId: Protocol.Runtime.ExecutionContextId): boolean {
@@ -509,6 +526,46 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
509
526
  this.#target = undefined;
510
527
  }
511
528
 
529
+ async #injectScript(): Promise<void> {
530
+ // Extra check in case the target was removed while we were initializing.
531
+ // It's possible to be halfway-through enabling when the target is removed
532
+ // eg try loading 'devtools://devtools/bundled/devtools_app.html?ws=127.0.0.1:99/blah'
533
+ if (!this.#target) {
534
+ return;
535
+ }
536
+
537
+ // If DevTools is closed and reopened, the live metrics context from the previous
538
+ // session will persist. We should ensure any old live metrics contexts are killed
539
+ // before starting a new one.
540
+ await this.#killAllLiveMetricContexts();
541
+
542
+ // Remove any old instances of the script
543
+ if (this.#scriptIdentifier) {
544
+ await this.#target.pageAgent().invoke_removeScriptToEvaluateOnNewDocument({
545
+ identifier: this.#scriptIdentifier,
546
+ });
547
+ }
548
+
549
+ const softNavsSettingValue =
550
+ Common.Settings.Settings.instance().moduleSetting('timeline-enable-soft-navigations').get();
551
+ const source = `window.devToolsReportSoftNavs = ${softNavsSettingValue};\n` + await InjectedScript.get();
552
+
553
+ // Inject the script
554
+ const {identifier} = await this.#target.pageAgent().invoke_addScriptToEvaluateOnNewDocument({
555
+ source,
556
+ worldName: LIVE_METRICS_WORLD_NAME,
557
+ runImmediately: true,
558
+ });
559
+ this.#scriptIdentifier = identifier;
560
+ }
561
+
562
+ async #onSettingChanged(): Promise<void> {
563
+ if (!this.#target || !this.#enabled) {
564
+ return;
565
+ }
566
+ await this.#injectScript();
567
+ }
568
+
512
569
  async enable(): Promise<void> {
513
570
  if (this.#enabled) {
514
571
  return;
@@ -563,25 +620,7 @@ export class LiveMetrics extends Common.ObjectWrapper.ObjectWrapper<EventTypes>
563
620
  executionContextName: LIVE_METRICS_WORLD_NAME,
564
621
  });
565
622
 
566
- // If DevTools is closed and reopened, the live metrics context from the previous
567
- // session will persist. We should ensure any old live metrics contexts are killed
568
- // before starting a new one.
569
- await this.#killAllLiveMetricContexts();
570
-
571
- const source = await InjectedScript.get();
572
-
573
- // Extra check in case the target was removed while we were initializing.
574
- // It's possible to be halfway-through enabling when the target is removed
575
- // eg try loading 'devtools://devtools/bundled/devtools_app.html?ws=127.0.0.1:99/blah'
576
- if (!this.#target) {
577
- return;
578
- }
579
- const {identifier} = await this.#target?.pageAgent().invoke_addScriptToEvaluateOnNewDocument({
580
- source,
581
- worldName: LIVE_METRICS_WORLD_NAME,
582
- runImmediately: true,
583
- });
584
- this.#scriptIdentifier = identifier;
623
+ await this.#injectScript();
585
624
 
586
625
  this.#deviceModeModel?.addEventListener(
587
626
  EmulationModel.DeviceModeModel.Events.UPDATED, this.#onEmulationChanged, this);
@@ -687,6 +726,7 @@ export interface StatusEvent {
687
726
  inp?: InpValue;
688
727
  interactions: InteractionMap;
689
728
  layoutShifts: LayoutShift[];
729
+ navigationType?: Spec.NavigationType;
690
730
  }
691
731
 
692
732
  interface EventTypes {
@@ -1,5 +1,5 @@
1
1
  # Using the `web-vitals` library
2
2
 
3
- [`web-vitals`](https://github.com/GoogleChrome/web-vitals-extension) is a Google-maintained library that measures CWV metrics using their canonical definition. We use it to ensure we are using consistent implementations for measuring CWV across Google. It can also measure performance metrics of the current page *after* the they happen (See [`PerformanceObserver` buffered setting](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver/observe#buffered)). See [go/cpq:rpp-metric-observations](http://go/cpq:rpp-metric-observations) for more information.
3
+ [`web-vitals`](https://github.com/GoogleChrome/web-vitals) is a Google-maintained library that measures CWV metrics using their canonical definition. We use it to ensure we are using consistent implementations for measuring CWV across Google. It can also measure performance metrics of the current page *after* the they happen (See [`PerformanceObserver` buffered setting](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver/observe#buffered)). See [go/cpq:rpp-metric-observations](http://go/cpq:rpp-metric-observations) for more information.
4
4
 
5
5
  The web-vitals library needs to be run in the target page (although it can be used in an isolated execution context). We therefore need to create a JS binary that can be injected via `Page.evaluate`/`Page.addScriptToEvaluateOnNewDocument`. See `BUILD.gn` and `rollup.config.mjs` for how we bundle the JS binary.
@@ -2,7 +2,7 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
- import type {INPAttribution} from '../../../../third_party/web-vitals/web-vitals.js';
5
+ import type {INPAttribution, Metric} from '../../../../third_party/web-vitals/web-vitals.js';
6
6
  import type * as Trace from '../../../trace/trace.js';
7
7
 
8
8
  export const EVENT_BINDING_NAME = '__chromium_devtools_metrics_reporter';
@@ -99,6 +99,7 @@ export interface InteractionEntryEvent {
99
99
  eventName: string;
100
100
  entryGroupId: InteractionEntryGroupId;
101
101
  startTime: number;
102
+ navigationId: number;
102
103
  nextPaintTime?: number;
103
104
  duration: Trace.Types.Timing.Milli;
104
105
  subparts: InpSubparts;
@@ -106,6 +107,8 @@ export interface InteractionEntryEvent {
106
107
  longAnimationFrameEntries: PerformanceLongAnimationFrameTimingJSON[];
107
108
  }
108
109
 
110
+ export type NavigationType = Metric['navigationType'];
111
+
109
112
  export interface LayoutShiftEvent {
110
113
  name: 'LayoutShift';
111
114
  score: number;
@@ -115,6 +118,8 @@ export interface LayoutShiftEvent {
115
118
 
116
119
  export interface ResetEvent {
117
120
  name: 'reset';
121
+ url?: string;
122
+ navigationType?: NavigationType;
118
123
  }
119
124
 
120
125
  export type WebVitalsEvent =
@@ -15,6 +15,7 @@ declare const window: Window&{
15
15
  getNodeForIndex: (index: number) => Node | undefined,
16
16
  [Spec.INTERNAL_KILL_SWITCH]: () => void,
17
17
  [Spec.EVENT_BINDING_NAME]: (payload: string) => void,
18
+ devToolsReportSoftNavs?: boolean,
18
19
  };
19
20
 
20
21
  const eventListenerCleanupController = new AbortController();
@@ -174,10 +175,15 @@ function initialize(): void {
174
175
  // callback before any others.
175
176
  WebVitals.onBFCacheRestore(() => {
176
177
  startedHidden = false;
177
- sendEventToDevTools({name: 'reset'});
178
+ sendEventToDevTools({name: 'reset', navigationType: 'back-forward-cache'});
178
179
  });
179
180
 
181
+ let lastLcpNavigationId: number|undefined;
180
182
  onLCP(metric => {
183
+ if (lastLcpNavigationId && metric.navigationId && metric.navigationId !== lastLcpNavigationId) {
184
+ sendEventToDevTools({name: 'reset', url: window.location.href, navigationType: metric.navigationType});
185
+ }
186
+ lastLcpNavigationId = metric.navigationId;
181
187
  const event: Spec.LcpChangeEvent = {
182
188
  name: 'LCP',
183
189
  value: metric.value as Trace.Types.Timing.Milli,
@@ -195,7 +201,7 @@ function initialize(): void {
195
201
  event.nodeIndex = establishNodeIndex(element);
196
202
  }
197
203
  sendEventToDevTools(event);
198
- }, {reportAllChanges: true});
204
+ }, {reportAllChanges: true, reportSoftNavs: window.devToolsReportSoftNavs});
199
205
 
200
206
  onCLS(metric => {
201
207
  const event: Spec.ClsChangeEvent = {
@@ -204,7 +210,7 @@ function initialize(): void {
204
210
  clusterShiftIds: metric.entries.map(Spec.getUniqueLayoutShiftId),
205
211
  };
206
212
  sendEventToDevTools(event);
207
- }, {reportAllChanges: true});
213
+ }, {reportAllChanges: true, reportSoftNavs: window.devToolsReportSoftNavs});
208
214
 
209
215
  function onEachInteraction(interaction: WebVitals.INPMetricWithAttribution): void {
210
216
  // Multiple `InteractionEntry` events can be emitted for the same `uniqueInteractionId`
@@ -219,6 +225,7 @@ function initialize(): void {
219
225
  presentationDelay: interaction.attribution.presentationDelay as Trace.Types.Timing.Milli,
220
226
  },
221
227
  startTime: interaction.entries[0].startTime,
228
+ navigationId: interaction.navigationId,
222
229
  entryGroupId: interaction.entries[0].interactionId as Spec.InteractionEntryGroupId,
223
230
  nextPaintTime: interaction.attribution.nextPaintTime,
224
231
  interactionType: interaction.attribution.interactionType,
@@ -252,6 +259,7 @@ function initialize(): void {
252
259
  reportAllChanges: true,
253
260
  durationThreshold: 0,
254
261
  includeProcessedEventEntries: false,
262
+ reportSoftNavs: window.devToolsReportSoftNavs,
255
263
  onEachInteraction,
256
264
  generateTarget(el) {
257
265
  if (el) {
@@ -84,7 +84,7 @@ export class LogManager implements SDK.TargetManager.SDKModelObserver<SDK.LogMod
84
84
  if (this.#targetManager.targetById(workerId)) {
85
85
  return;
86
86
  }
87
- window.setTimeout(() => {
87
+ globalThis.setTimeout(() => {
88
88
  if (!this.#targetManager.targetById(workerId)) {
89
89
  consoleModel?.addMessage(consoleMessage);
90
90
  }
@@ -318,7 +318,7 @@ export class FileSystem extends Workspace.Workspace.ProjectStore {
318
318
  this.addFile(filePaths[i]);
319
319
  }
320
320
  if (to < filePaths.length) {
321
- window.setTimeout(reportFileChunk.bind(this, to), 100);
321
+ globalThis.setTimeout(reportFileChunk.bind(this, to), 100);
322
322
  } else if (this.type() === 'filesystem') {
323
323
  Host.userMetrics.workspacesPopulated(performance.now() - startTime);
324
324
  }
@@ -216,9 +216,8 @@ function createFunctionCode(
216
216
  */
217
217
  export async function getFunctionCodeFromLocation(
218
218
  target: SDK.Target.Target, url: Platform.DevToolsPath.UrlString, line: number, column: number,
219
- options?: CreateFunctionCodeOptions,
220
- debuggerWorkspaceBinding =
221
- Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()): Promise<FunctionCode|null> {
219
+ debuggerWorkspaceBinding: Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding,
220
+ options?: CreateFunctionCodeOptions): Promise<FunctionCode|null> {
222
221
  const debuggerModel = target.model(SDK.DebuggerModel.DebuggerModel);
223
222
  if (!debuggerModel) {
224
223
  throw new Error('missing debugger model');
@@ -246,7 +245,7 @@ export async function getFunctionCodeFromLocation(
246
245
  return null;
247
246
  }
248
247
 
249
- return await getFunctionCodeFromRawLocation(rawLocation, options, debuggerWorkspaceBinding);
248
+ return await getFunctionCodeFromRawLocation(rawLocation, debuggerWorkspaceBinding, options);
250
249
  }
251
250
 
252
251
  async function format(uiSourceCode: Workspace.UISourceCode.UISourceCode, content: string,
@@ -265,9 +264,9 @@ async function format(uiSourceCode: Workspace.UISourceCode.UISourceCode, content
265
264
  * Returns a {@link FunctionCode} for the given raw location.
266
265
  */
267
266
  export async function getFunctionCodeFromRawLocation(
268
- rawLocation: SDK.DebuggerModel.Location, options?: CreateFunctionCodeOptions,
269
- debuggerWorkspaceBinding =
270
- Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance()): Promise<FunctionCode|null> {
267
+ rawLocation: SDK.DebuggerModel.Location,
268
+ debuggerWorkspaceBinding: Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding,
269
+ options?: CreateFunctionCodeOptions): Promise<FunctionCode|null> {
271
270
  const functionBounds = await debuggerWorkspaceBinding.functionBoundsAtRawLocation(rawLocation);
272
271
  if (!functionBounds) {
273
272
  return null;
@@ -209,7 +209,7 @@ export class UISourceCodeDiff extends Common.ObjectWrapper.ObjectWrapper<UISourc
209
209
  readonly #networkPersistenceManager: Persistence.NetworkPersistenceManager.NetworkPersistenceManager;
210
210
  readonly #settings: Common.Settings.Settings;
211
211
  #requestDiffPromise: Promise<DiffResponse|null>|null = null;
212
- #pendingChanges: number|null = null;
212
+ #pendingChanges?: ReturnType<typeof setTimeout>;
213
213
  dispose = false;
214
214
  constructor(
215
215
  uiSourceCode: Workspace.UISourceCode.UISourceCode,
@@ -225,23 +225,22 @@ export class UISourceCodeDiff extends Common.ObjectWrapper.ObjectWrapper<UISourc
225
225
  }
226
226
 
227
227
  #uiSourceCodeChanged(): void {
228
- if (this.#pendingChanges) {
229
228
  clearTimeout(this.#pendingChanges);
230
- this.#pendingChanges = null;
231
- }
232
- this.#requestDiffPromise = null;
229
+ this.#pendingChanges = undefined;
233
230
 
234
- const content = this.#uiSourceCode.content();
235
- const delay = (!content || content.length < 65536) ? 0 : 200;
236
- this.#pendingChanges = window.setTimeout(emitDiffChanged.bind(this), delay);
231
+ this.#requestDiffPromise = null;
237
232
 
238
- function emitDiffChanged(this: UISourceCodeDiff): void {
239
- if (this.dispose) {
240
- return;
233
+ const content = this.#uiSourceCode.content();
234
+ const delay = (!content || content.length < 65536) ? 0 : 200;
235
+ this.#pendingChanges = globalThis.setTimeout(emitDiffChanged.bind(this), delay);
236
+
237
+ function emitDiffChanged(this: UISourceCodeDiff): void {
238
+ if (this.dispose) {
239
+ return;
240
+ }
241
+ this.dispatchEventToListeners(UISourceCodeDiffEvents.DIFF_CHANGED);
242
+ this.#pendingChanges = undefined;
241
243
  }
242
- this.dispatchEventToListeners(UISourceCodeDiffEvents.DIFF_CHANGED);
243
- this.#pendingChanges = null;
244
- }
245
244
  }
246
245
 
247
246
  requestDiff(): Promise<DiffResponse|null> {
@@ -960,7 +960,8 @@ export class AiAssistancePanel extends UI.Panel.Panel {
960
960
  const {forceNew} = opts;
961
961
  if (!panelInstance || forceNew) {
962
962
  const aidaClient = new Host.AidaClient.AidaClient();
963
- const aidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
963
+ const aidaAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability ??
964
+ await Host.AidaClient.AidaClient.checkAccessPreconditions();
964
965
  panelInstance = new AiAssistancePanel(defaultView, {aidaClient, aidaAvailability});
965
966
  }
966
967
 
@@ -1129,7 +1130,6 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1129
1130
  super.wasShown();
1130
1131
  this.#viewOutput.chatView?.restoreScrollPosition();
1131
1132
  this.#viewOutput.chatView?.focusTextInput();
1132
- void this.#handleAidaAvailabilityChange();
1133
1133
  this.#selectedElement =
1134
1134
  createDOMNodeContext(selectedElementFilter(UI.Context.Context.instance().flavor(SDK.DOMModel.DOMNode)));
1135
1135
  this.#selectedRequest =
@@ -1147,6 +1147,10 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1147
1147
  this.#aiAssistanceEnabledSetting?.addChangeListener(this.requestUpdate, this);
1148
1148
  Host.AidaClient.HostConfigTracker.instance().addEventListener(
1149
1149
  Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#handleAidaAvailabilityChange);
1150
+ const initialAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
1151
+ if (initialAvailability !== undefined) {
1152
+ this.#updateAidaAvailability(initialAvailability);
1153
+ }
1150
1154
  this.#toggleSearchElementAction?.addEventListener(UI.ActionRegistration.Events.TOGGLED, this.requestUpdate, this);
1151
1155
 
1152
1156
  UI.Context.Context.instance().addFlavorChangeListener(SDK.DOMModel.DOMNode, this.#handleDOMNodeFlavorChange);
@@ -1226,13 +1230,17 @@ export class AiAssistancePanel extends UI.Panel.Panel {
1226
1230
  }
1227
1231
  }
1228
1232
 
1229
- #handleAidaAvailabilityChange = async(): Promise<void> => {
1230
- const currentAidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
1231
- if (currentAidaAvailability !== this.#aidaAvailability) {
1232
- this.#aidaAvailability = currentAidaAvailability;
1233
+ #updateAidaAvailability(aidaAvailability: Host.AidaClient.AidaAccessPreconditions): void {
1234
+ if (aidaAvailability !== this.#aidaAvailability) {
1235
+ this.#aidaAvailability = aidaAvailability;
1233
1236
  this.requestUpdate();
1234
1237
  }
1235
- };
1238
+ }
1239
+
1240
+ #handleAidaAvailabilityChange =
1241
+ (ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>): void => {
1242
+ this.#updateAidaAvailability(ev.data);
1243
+ };
1236
1244
 
1237
1245
  #handleDOMNodeFlavorChange = (ev: Common.EventTarget.EventTargetEvent<SDK.DOMModel.DOMNode>): void => {
1238
1246
  if (this.#selectedElement?.getItem() === ev.data) {