chrome-devtools-frontend 1.0.1665921 → 1.0.1666631

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 (242) 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 +109 -60
  9. package/front_end/core/host/GcaClient.ts +3 -3
  10. package/front_end/core/host/UserMetrics.ts +1 -12
  11. package/front_end/core/sdk/NetworkRequest.ts +10 -55
  12. package/front_end/entrypoints/main/MainImpl.ts +0 -10
  13. package/front_end/foundation/Universe.ts +16 -0
  14. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  15. package/front_end/generated/protocol.ts +2 -1
  16. package/front_end/models/ai_assistance/agents/AiAgent.ts +22 -13
  17. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +21 -5
  18. package/front_end/models/issues_manager/CookieIssue.ts +6 -127
  19. package/front_end/models/issues_manager/descriptions/CoepCorpNotSameOrigin.md +2 -2
  20. package/front_end/models/issues_manager/descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +3 -3
  21. package/front_end/models/issues_manager/descriptions/CoepCorpNotSameSite.md +2 -2
  22. package/front_end/models/issues_manager/descriptions/CoepFrameResourceNeedsCoepHeader.md +1 -1
  23. package/front_end/models/issues_manager/descriptions/CompatibilityModeQuirks.md +1 -1
  24. package/front_end/models/issues_manager/descriptions/CookieAttributeValueExceedsMaxSize.md +2 -2
  25. package/front_end/models/issues_manager/descriptions/LowTextContrast.md +1 -1
  26. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md +1 -1
  27. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md +1 -1
  28. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md +1 -1
  29. package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md +1 -1
  30. package/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +3 -3
  31. package/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +3 -3
  32. package/front_end/models/issues_manager/descriptions/bounceTrackingMitigations.md +1 -1
  33. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowlistItemType.md +2 -2
  34. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidHeader.md +2 -2
  35. package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidUrlPattern.md +3 -3
  36. package/front_end/models/issues_manager/descriptions/connectionAllowlistItemNotInnerList.md +2 -2
  37. package/front_end/models/issues_manager/descriptions/connectionAllowlistMoreThanOneList.md +2 -2
  38. package/front_end/models/issues_manager/descriptions/connectionAllowlistReportingEndpointNotToken.md +1 -1
  39. package/front_end/models/issues_manager/descriptions/cookieCrossSiteRedirectDowngrade.md +3 -3
  40. package/front_end/models/issues_manager/descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +1 -1
  41. package/front_end/models/issues_manager/descriptions/cookieExcludePortMismatch.md +1 -1
  42. package/front_end/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +1 -1
  43. package/front_end/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutSet.md +1 -1
  44. package/front_end/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutRead.md +1 -1
  45. package/front_end/models/issues_manager/descriptions/corsAllowCredentialsRequired.md +1 -1
  46. package/front_end/models/issues_manager/descriptions/corsDisabledScheme.md +2 -2
  47. package/front_end/models/issues_manager/descriptions/corsDisallowedByMode.md +2 -2
  48. package/front_end/models/issues_manager/descriptions/corsHeaderDisallowedByPreflightResponse.md +1 -1
  49. package/front_end/models/issues_manager/descriptions/corsInvalidHeaderValues.md +3 -3
  50. package/front_end/models/issues_manager/descriptions/corsLocalNetworkAccessPermissionDenied.md +1 -1
  51. package/front_end/models/issues_manager/descriptions/corsMethodDisallowedByPreflightResponse.md +1 -1
  52. package/front_end/models/issues_manager/descriptions/corsNoCorsRedirectModeNotFollow.md +1 -1
  53. package/front_end/models/issues_manager/descriptions/corsOriginMismatch.md +3 -3
  54. package/front_end/models/issues_manager/descriptions/corsPreflightResponseInvalid.md +2 -2
  55. package/front_end/models/issues_manager/descriptions/corsRedirectContainsCredentials.md +3 -3
  56. package/front_end/models/issues_manager/descriptions/corsWildcardOriginNotAllowed.md +4 -3
  57. package/front_end/models/issues_manager/descriptions/cspEvalViolation.md +4 -4
  58. package/front_end/models/issues_manager/descriptions/cspInlineViolation.md +2 -2
  59. package/front_end/models/issues_manager/descriptions/cspTrustedTypesPolicyViolation.md +2 -2
  60. package/front_end/models/issues_manager/descriptions/cspTrustedTypesSinkViolation.md +4 -4
  61. package/front_end/models/issues_manager/descriptions/cspURLViolation.md +4 -4
  62. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsEmptyList.md +1 -1
  63. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsHttpNotFound.md +1 -1
  64. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsInvalidContentType.md +1 -1
  65. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsInvalidResponse.md +1 -1
  66. package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsNoResponse.md +1 -1
  67. package/front_end/models/issues_manager/descriptions/emailVerificationRequestDnsFetchFailed.md +1 -1
  68. package/front_end/models/issues_manager/descriptions/emailVerificationRequestDnsInvalidRecord.md +1 -1
  69. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownHttpNotFound.md +1 -1
  70. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidContentType.md +1 -1
  71. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidResponse.md +1 -1
  72. package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownNoResponse.md +1 -1
  73. package/front_end/models/issues_manager/descriptions/emailVerificationRequestInvalidEmail.md +1 -1
  74. package/front_end/models/issues_manager/descriptions/emailVerificationRequestJwksHttpNotFound.md +1 -1
  75. package/front_end/models/issues_manager/descriptions/emailVerificationRequestJwksInvalidResponse.md +1 -1
  76. package/front_end/models/issues_manager/descriptions/emailVerificationRequestKeyBindingSigningFailed.md +1 -1
  77. package/front_end/models/issues_manager/descriptions/emailVerificationRequestRpOriginIsOpaque.md +1 -1
  78. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenHttpNotFound.md +1 -1
  79. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidContentType.md +1 -1
  80. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidResponse.md +1 -1
  81. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidSdJwt.md +1 -1
  82. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenMalformedSdJwt.md +1 -1
  83. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenNoResponse.md +1 -1
  84. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidAudience.md +1 -1
  85. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidIssuedAt.md +1 -1
  86. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidNonce.md +1 -1
  87. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidSdHash.md +1 -1
  88. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidTyp.md +1 -1
  89. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingAud.md +1 -1
  90. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingCnf.md +1 -1
  91. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingIat.md +1 -1
  92. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingNonce.md +1 -1
  93. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingSdHash.md +1 -1
  94. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbSignatureFailed.md +1 -1
  95. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmail.md +1 -1
  96. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmailVerified.md +1 -1
  97. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidHolderKey.md +1 -1
  98. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuedAt.md +1 -1
  99. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuer.md +1 -1
  100. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtJwksMissingKeys.md +1 -1
  101. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingCnf.md +1 -1
  102. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingEmail.md +1 -1
  103. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIat.md +1 -1
  104. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIss.md +1 -1
  105. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtSignatureFailed.md +1 -1
  106. package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtUnsupportedHeaderAlg.md +1 -1
  107. package/front_end/models/issues_manager/descriptions/emailVerificationRequestUserLoggedOut.md +1 -1
  108. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownAccountsEndpointCrossOrigin.md +1 -1
  109. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownHttpNotFound.md +1 -1
  110. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidContentType.md +1 -1
  111. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidResponse.md +1 -1
  112. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownIssuanceEndpointCrossOrigin.md +1 -1
  113. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownListEmpty.md +1 -1
  114. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingAccountsEndpoint.md +1 -1
  115. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingIssuanceEndpoint.md +1 -1
  116. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownNoResponse.md +1 -1
  117. package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownUnsupportedSigningAlgorithm.md +1 -1
  118. package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -1
  119. package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -1
  120. package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsNoResponse.md +1 -1
  121. package/front_end/models/issues_manager/descriptions/federatedAuthRequestApprovalDeclined.md +1 -1
  122. package/front_end/models/issues_manager/descriptions/federatedAuthRequestCanceled.md +1 -1
  123. package/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -1
  124. package/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorIdToken.md +1 -1
  125. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -1
  126. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -1
  127. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -1
  128. package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -1
  129. package/front_end/models/issues_manager/descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -1
  130. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -1
  131. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -1
  132. package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestNoResponse.md +1 -1
  133. package/front_end/models/issues_manager/descriptions/federatedAuthRequestTooManyRequests.md +1 -1
  134. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -1
  135. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -1
  136. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -1
  137. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -1
  138. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -1
  139. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -1
  140. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -1
  141. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -1
  142. package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -1
  143. package/front_end/models/issues_manager/descriptions/fetchingPartitionedBlobURL.md +2 -2
  144. package/front_end/models/issues_manager/descriptions/genericFormAriaLabelledByToNonExistingIdError.md +2 -2
  145. package/front_end/models/issues_manager/descriptions/genericFormAutocompleteAttributeEmptyError.md +1 -1
  146. package/front_end/models/issues_manager/descriptions/genericFormDuplicateIdForInputError.md +1 -1
  147. package/front_end/models/issues_manager/descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +2 -2
  148. package/front_end/models/issues_manager/descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +2 -2
  149. package/front_end/models/issues_manager/descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +1 -1
  150. package/front_end/models/issues_manager/descriptions/genericFormInputWithNoLabelError.md +1 -1
  151. package/front_end/models/issues_manager/descriptions/genericFormLabelForMatchesNonExistingIdError.md +2 -2
  152. package/front_end/models/issues_manager/descriptions/genericFormLabelForNameError.md +1 -1
  153. package/front_end/models/issues_manager/descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +1 -1
  154. package/front_end/models/issues_manager/descriptions/genericFormModelContextMissingToolName.md +1 -1
  155. package/front_end/models/issues_manager/descriptions/genericFormModelContextParameterMissingName.md +1 -1
  156. package/front_end/models/issues_manager/descriptions/genericFormModelContextRequiredParameterMissingName.md +1 -1
  157. package/front_end/models/issues_manager/descriptions/genericNavigationEntryMarkedSkippable.md +2 -2
  158. package/front_end/models/issues_manager/descriptions/heavyAd.md +1 -1
  159. package/front_end/models/issues_manager/descriptions/lazyLoadImageZeroSize.md +1 -1
  160. package/front_end/models/issues_manager/descriptions/navigatingPartitionedBlobURL.md +3 -3
  161. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +1 -1
  162. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +1 -1
  163. package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +1 -1
  164. package/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +2 -2
  165. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +2 -2
  166. package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +2 -2
  167. package/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +1 -1
  168. package/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +2 -2
  169. package/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +2 -2
  170. package/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +2 -2
  171. package/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +2 -2
  172. package/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +1 -1
  173. package/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +2 -2
  174. package/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +2 -2
  175. package/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +2 -2
  176. package/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +1 -1
  177. package/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +2 -2
  178. package/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +1 -1
  179. package/front_end/models/issues_manager/descriptions/placeholderDescriptionForInvisibleIssues.md +1 -1
  180. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +1 -1
  181. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedSelectChild.md +1 -1
  182. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +1 -1
  183. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +1 -1
  184. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +1 -1
  185. package/front_end/models/issues_manager/descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +1 -1
  186. package/front_end/models/issues_manager/descriptions/selectivePermissionsIntervention.md +3 -3
  187. package/front_end/models/issues_manager/descriptions/sharedArrayBuffer.md +1 -1
  188. package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -1
  189. package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +1 -1
  190. package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -1
  191. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -1
  192. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -1
  193. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorExpiredResponse.md +1 -1
  194. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +2 -2
  195. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -1
  196. package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNavigationRequest.md +2 -2
  197. package/front_end/models/issues_manager/descriptions/sriInvalidSignatureHeader.md +4 -4
  198. package/front_end/models/issues_manager/descriptions/sriInvalidSignatureInputHeader.md +4 -4
  199. package/front_end/models/issues_manager/descriptions/sriMissingSignatureHeader.md +1 -1
  200. package/front_end/models/issues_manager/descriptions/sriMissingSignatureInputHeader.md +2 -2
  201. package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsIncorrectLength.md +2 -2
  202. package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsNotByteSequence.md +4 -4
  203. package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md +4 -4
  204. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md +1 -1
  205. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md +2 -2
  206. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +1 -1
  207. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +1 -1
  208. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md +2 -2
  209. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderKeyIdLength.md +5 -5
  210. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingLabel.md +3 -3
  211. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +2 -2
  212. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueMissingComponents.md +2 -2
  213. package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +2 -2
  214. package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +4 -4
  215. package/front_end/models/issues_manager/descriptions/sriValidationFailedInvalidLength.md +3 -3
  216. package/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureExpired.md +2 -2
  217. package/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md +2 -2
  218. package/front_end/models/issues_manager/descriptions/stylesheetLateImport.md +1 -1
  219. package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +1 -1
  220. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +2 -2
  221. package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +3 -3
  222. package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +2 -2
  223. package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +1 -1
  224. package/front_end/panels/application/DOMStorageItemsView.ts +1 -2
  225. package/front_end/panels/application/KeyValueStorageItemsView.ts +12 -0
  226. package/front_end/panels/elements/StylePropertiesSection.ts +25 -9
  227. package/front_end/panels/elements/StylesSidebarPane.ts +48 -0
  228. package/front_end/panels/emulation/DeviceModeToolbar.ts +0 -1
  229. package/front_end/panels/emulation/DeviceModeView.ts +289 -164
  230. package/front_end/panels/emulation/MediaQueryInspector.ts +10 -6
  231. package/front_end/panels/emulation/deviceModeView.css +1 -0
  232. package/front_end/panels/lighthouse/LighthouseController.ts +1 -6
  233. package/front_end/panels/sources/breakpointEditDialog.css +2 -2
  234. package/front_end/third_party/chromium/README.chromium +1 -1
  235. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +1 -2
  236. package/package.json +1 -2
  237. package/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md +0 -8
  238. package/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md +0 -8
  239. package/front_end/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md +0 -8
  240. package/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md +0 -8
  241. package/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md +0 -8
  242. package/front_end/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +0 -8
@@ -1,7 +1,7 @@
1
- # Selective Permissions Intervention
1
+ # Selective permissions intervention
2
2
 
3
- The Selective Permissions Intervention blocks calls to privacy-sensitive APIs when they are called from ad scripts in order to align the permission grant with the user's intent. The particular API that was blocked, the call-stack that triggered the intervention, and why the script that called the API is considered ad-related is shown below.
3
+ The Selective Permissions Intervention blocks calls to privacy-sensitive APIs when they are called from ad scripts to align the permission grant with the users intent. The particular API that was blocked, the call-stack that triggered the intervention, and why the script that called the API is considered ad-related is shown below.
4
4
 
5
5
  Note that Chrome considers any script with a URL that matches a rule in the [filterlist](ChromeFilterlistRepository) as ad script, and the matching rule is shown in the Ad Ancestry section. In addition, any script loaded while an ad script is in the JavaScript stack will also be considered an ad script by Chrome and is also shown in Ad Ancestry.
6
6
 
7
- If you believe this intervention was in error (e.g., this call would occur even when loading the page with an ad blocker enabled), then please [file a bug](SelectivePermissionsInterventionIssue).
7
+ If you believe this intervention was in error (e.g., this call would occur even when loading the page with an ad blocker enabled), then [file a bug](SelectivePermissionsInterventionIssue).
@@ -2,6 +2,6 @@
2
2
 
3
3
  SharedArrayBuffers (SABs) can be used to construct high-resolution timers. High-resolution timers simplify Spectre attacks on cross-origin resources.
4
4
 
5
- To mitigate security risks across browsers, SharedArrayBuffers are gated behind cross-origin isolated contexts starting with Chrome 92 (July 2021). To continue using SharedArrayBuffers, please ensure that this page opts-into cross-origin isolation by setting Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy appropriately.
5
+ To mitigate security risks across browsers, SharedArrayBuffers are gated behind cross-origin isolated contexts starting with Chrome 92 (July 2021). To continue using SharedArrayBuffers, ensure that this page opts-into cross-origin isolation by setting Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy appropriately.
6
6
 
7
7
  Note that for each iframe, only the first issue is reported for performance reasons.
@@ -1 +1 @@
1
- # Found a matching dictionary, but the dictionary can't be used for the cross origin no-cors request
1
+ # Found a matching dictionary, but the dictionary cant be used for the cross origin no-cors request
@@ -1,3 +1,3 @@
1
- # Found a matching dictionary, but the dictionary is not used for the response
1
+ # Found a matching dictionary, but the dictionary isn’t used for the response
2
2
 
3
3
  Consider revisiting the `match` pattern or `match-dest` of the dictionary.
@@ -1 +1 @@
1
- # Can't decode the response because the header of dictionary compressed stream was not set correctly
1
+ # Cant decode the response because the header of dictionary compressed stream wasn’t set correctly
@@ -1 +1 @@
1
- # Can't register the cross origin response fetched by a no-cors request as as a dictionary
1
+ # Cant register the cross origin response fetched by a no-cors request as as a dictionary
@@ -1 +1 @@
1
- # Compression Dictionary is disabled by settings
1
+ # compression dictionary is disabled by settings
@@ -1,3 +1,3 @@
1
- # The response can't be used as a dictionary because its freshness is expired
1
+ # The response cant be used as a dictionary because its freshness is expired
2
2
 
3
3
  Check `Cache-Control` and `Expires` headers.
@@ -1,3 +1,3 @@
1
- # Compression Dictionary Transport feature is disabled
1
+ # compression dictionary transport feature is disabled
2
2
 
3
- Please enable chrome://flags/#enable-compression-dictionary-transport
3
+ enable chrome://flags/#enable-compression-dictionary-transport
@@ -1 +1 @@
1
- # `Use-As-Dictionary` HTTP response header is not a valid Structured Field value
1
+ # `Use-As-Dictionary` HTTP response header isn’t a valid Structured Field Value
@@ -1,3 +1,3 @@
1
- # Can't register the response of the navigation request as a dictionary
1
+ # Cant register the response of the navigation request as a dictionary
2
2
 
3
- Navigation responses are not usable as compression dictionaries.
3
+ Navigation responses aren’t usable as compression dictionaries.
@@ -1,9 +1,9 @@
1
- # A `signature` header is not formatted as a Structured Field Dictionary.
1
+ # A `signature` header isn’t formatted as a Structured Field Dictionary
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
6
- a [`signature-input`](signatureInputHeader) header. Each member's value is a
6
+ a [`signature-input`](signatureInputHeader) header. Each members value is a
7
7
  [Byte Sequence](sfByteSequence) containing the signature itself.
8
8
 
9
9
  For example, the following header contains a single Ed25519 signature labeled
@@ -1,10 +1,10 @@
1
- # A `signature-input` header is not formatted as a Structured Field Dictionary.
1
+ # A `signature-input` header isn’t formatted as a Structured Field Dictionary
2
2
 
3
- Responses' [`signature-input`](signatureInputHeader) header should be formatted
3
+ Responses [`signature-input`](signatureInputHeader) header should be formatted
4
4
  as a [Dictionary](sfDictionary) containing metadata regarding one or more
5
- signatures. Each member's key is a label for the metadata which maps it to the
5
+ signatures. Each members key is a label for the metadata which maps it to the
6
6
  relevant signature defined in a [`signature`](signatureHeader) header. Each
7
- member's value is an [Inner List](sfInnerList) containing a set of components
7
+ members value is an [Inner List](sfInnerList) containing a set of components
8
8
  over which a signature is generated. The list may have one or more parameters.
9
9
 
10
10
  For example, the following header contains metadata for a signature labeled
@@ -1,4 +1,4 @@
1
- # A `signature-input` header was specified without an accompanying `signature` header.
1
+ # A `signature-input` header was specified without an accompanying `signature` header
2
2
 
3
3
  [`signature-input`](signatureInputHeader) headers specify metadata that allows
4
4
  verification of signatures delivered with a response. If no
@@ -1,7 +1,7 @@
1
- # A `signature` header was specified without an accompanying `signature-input` header.
1
+ # A `signature` header was specified without an accompanying `signature-input` header
2
2
 
3
3
  [`signature`](signatureHeader) headers specify signatures which can be verified
4
- against a given response. Verification cannot proceed, however, in the absence of a
4
+ against a given response. Verification can’t proceed, however, in the absence of a
5
5
  [`signature-input`](signatureInputHeader) header which defines relevant metadata
6
6
  which allows servers and clients to agree on the exact message which is being
7
7
  signed. Both headers must be present for verification to proceed.
@@ -1,7 +1,7 @@
1
- # A `signature` header contains a signature which cannot be verified.
1
+ # A `signature` header contains a signature which can’t be verified
2
2
 
3
3
  This browser can only verify Ed25519 signatures, which are 512 bits long. The
4
- signature delivered with this response does not match that length.
4
+ signature delivered with this response doesn’t match that length.
5
5
 
6
6
  For example, the following header contains a valid Ed25519 signature labeled
7
7
  "label":
@@ -1,9 +1,9 @@
1
- # A `signature` header member's value is not a Byte Sequence.
1
+ # A `signature` header members value isn’t a Byte Sequence
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
6
- a [`signature-input`](signatureInputHeader) header. Each member's value is a
6
+ a [`signature-input`](signatureInputHeader) header. Each members value is a
7
7
  [Byte Sequence](sfByteSequence) containing the signature itself.
8
8
 
9
9
  For example, the following header contains a single Ed25519 signature labeled
@@ -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
@@ -1,7 +1,6 @@
1
1
  // Copyright 2021 The Chromium Authors
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
- /* eslint-disable @devtools/no-imperative-dom-api */
5
4
 
6
5
  /*
7
6
  * Copyright (C) 2008 Nokia Inc. All rights reserved.
@@ -104,7 +103,7 @@ export class DOMStorageItemsView extends KeyValueStorageItemsView {
104
103
  Common.EventTarget.removeEventListeners(this.eventListeners);
105
104
  this.domStorage = domStorage;
106
105
  const storageKind = domStorage.isLocalStorage ? 'local-storage-data' : 'session-storage-data';
107
- this.element.setAttribute('jslog', `${VisualLogging.pane().context(storageKind)}`);
106
+ this.jslog = `${VisualLogging.pane().context(storageKind)}`;
108
107
  if (domStorage.storageKey) {
109
108
  this.toolbar?.setStorageKey(domStorage.storageKey);
110
109
  }
@@ -436,6 +436,18 @@ export abstract class KeyValueStorageItemsView extends UI.Widget.VBox {
436
436
  }
437
437
  }
438
438
 
439
+ protected set jslog(jslog: string|undefined) {
440
+ if (this.#jslog === jslog) {
441
+ return;
442
+ }
443
+ this.#jslog = jslog;
444
+ this.performUpdate();
445
+ }
446
+
447
+ protected get jslog(): string|undefined {
448
+ return this.#jslog;
449
+ }
450
+
439
451
  set editable(editable: boolean) {
440
452
  this.#editable = editable;
441
453
  this.performUpdate();
@@ -275,7 +275,7 @@ export class StylePropertiesSection {
275
275
  this.selectorElement.classList.add('selector');
276
276
  this.selectorElement.textContent = headerText;
277
277
  selectorContainer.appendChild(this.selectorElement);
278
- this.selectorElement.addEventListener('mouseenter', this.onMouseEnterSelector.bind(this), false);
278
+ this.selectorElement.addEventListener('mouseenter', () => this.onMouseEnterSelector(), false);
279
279
  this.selectorElement.addEventListener('mouseleave', this.onMouseOutSelector.bind(this), false);
280
280
  this.#specificityTooltips = selectorContainer.createChild('span');
281
281
 
@@ -679,23 +679,35 @@ export class StylePropertiesSection {
679
679
  SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(SDK.TargetManager.TargetManager.instance());
680
680
  }
681
681
 
682
- private onMouseEnterSelector(): void {
682
+ private onMouseEnterSelector(ruleOrSelector?: SDK.CSSRule.CSSStyleRule|string): void {
683
683
  if (this.hoverTimer) {
684
684
  clearTimeout(this.hoverTimer);
685
685
  }
686
- this.hoverTimer = window.setTimeout(this.highlight.bind(this), 300);
686
+ this.hoverTimer = window.setTimeout(this.highlight.bind(this, undefined, ruleOrSelector), 300);
687
687
  }
688
688
 
689
- highlight(mode: string|undefined = 'all'): void {
689
+ /**
690
+ * Highlights the DOM node associated with this style section in the page overlay.
691
+ * Use `ruleOrSelector` to highlight elements matching a specific parent/ancestor
692
+ * rule or selector, or omit it to use the selector of the rule displayed in this section.
693
+ *
694
+ * @param mode Highlight mode (defaults to `'all'`).
695
+ * @param ruleOrSelector Parent selector string, parent rule, or `undefined`.
696
+ */
697
+ highlight(mode: string|undefined = 'all', ruleOrSelector?: SDK.CSSRule.CSSStyleRule|string): void {
690
698
  SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(SDK.TargetManager.TargetManager.instance());
691
699
  const node = this.stylesContainer.node();
692
700
  if (!node) {
693
701
  return;
694
702
  }
695
- const selectorList =
696
- this.styleInternal.parentRule && this.styleInternal.parentRule instanceof SDK.CSSRule.CSSStyleRule ?
697
- this.styleInternal.parentRule.selectorText() :
698
- undefined;
703
+ let selectorList: string|undefined;
704
+ if (typeof ruleOrSelector === 'string') {
705
+ selectorList = ruleOrSelector;
706
+ } else if (ruleOrSelector instanceof SDK.CSSRule.CSSStyleRule) {
707
+ selectorList = ruleOrSelector.selectorText();
708
+ } else if (this.styleInternal.parentRule instanceof SDK.CSSRule.CSSStyleRule) {
709
+ selectorList = this.styleInternal.parentRule.selectorText();
710
+ }
699
711
  node.domModel().overlayModel().highlightInOverlay({node, selectorList}, mode);
700
712
  }
701
713
 
@@ -1140,6 +1152,8 @@ export class StylePropertiesSection {
1140
1152
  }
1141
1153
 
1142
1154
  const selectorElement = container.createChild('span', 'selector');
1155
+ selectorElement.addEventListener('mouseenter', () => this.onMouseEnterSelector(parentRule), false);
1156
+ selectorElement.addEventListener('mouseleave', this.onMouseOutSelector.bind(this), false);
1143
1157
  const specificityContainer = container.createChild('span');
1144
1158
  this.renderSelectorsToElement(parentRule.selectors, matchingSelectors, this.elementToSelectorIndex,
1145
1159
  selectorElement, specificityContainer);
@@ -1150,6 +1164,8 @@ export class StylePropertiesSection {
1150
1164
  }
1151
1165
 
1152
1166
  const nestingElement = document.createElement('div');
1167
+ nestingElement.addEventListener('mouseenter', () => this.onMouseEnterSelector(nestingSelector), false);
1168
+ nestingElement.addEventListener('mouseleave', this.onMouseOutSelector.bind(this), false);
1153
1169
  nestingElement.textContent = `${nestingSelector} {`;
1154
1170
  return nestingElement;
1155
1171
  }
@@ -1502,7 +1518,7 @@ export class StylePropertiesSection {
1502
1518
  }
1503
1519
 
1504
1520
  markSelectorHighlights(): void {
1505
- const selectors = this.selectorElement.getElementsByClassName('simple-selector');
1521
+ const selectors = this.element.getElementsByClassName('simple-selector');
1506
1522
  const regex = this.stylesContainer.filterRegex();
1507
1523
  for (let i = 0; i < selectors.length; ++i) {
1508
1524
  const selectorMatchesFilter = regex?.test(selectors[i].textContent || '');
@@ -235,6 +235,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
235
235
  #shouldRenderLazily = false;
236
236
  #lazyRenderObserver?: IntersectionObserver;
237
237
  #lazyRenderCallbacks = new WeakMap<Element, () => void>();
238
+ #elementsForSyncViewportCheck: Element[] = [];
238
239
  #updateId = 0;
239
240
 
240
241
  constructor(computedStyleModel: ComputedStyle.ComputedStyleModel.ComputedStyleModel) {
@@ -990,6 +991,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
990
991
 
991
992
  const focusedIndex = this.focusedSectionIndex();
992
993
 
994
+ this.#elementsForSyncViewportCheck = [];
993
995
  this.linkifier.reset();
994
996
  const prevSections = this.sectionBlocks.map(block => block.sections).flat();
995
997
 
@@ -1047,6 +1049,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
1047
1049
  }
1048
1050
 
1049
1051
  this.sectionsContainer.contentElement.appendChild(fragment);
1052
+ this.#performSyncViewportCheck();
1050
1053
 
1051
1054
  if (elementToFocus) {
1052
1055
  elementToFocus.focus();
@@ -1655,9 +1658,54 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
1655
1658
  }, {rootMargin: '100px'});
1656
1659
  }
1657
1660
  this.#lazyRenderCallbacks.set(element, callback);
1661
+ this.#elementsForSyncViewportCheck.push(element);
1658
1662
  this.#lazyRenderObserver.observe(element);
1659
1663
  }
1660
1664
 
1665
+ #performSyncViewportCheck(): void {
1666
+ if (!this.#shouldRenderLazily || this.#elementsForSyncViewportCheck.length === 0) {
1667
+ this.#elementsForSyncViewportCheck = [];
1668
+ return;
1669
+ }
1670
+ const scrollContainer = this.contentElement.parentElement;
1671
+ if (!scrollContainer) {
1672
+ this.#elementsForSyncViewportCheck = [];
1673
+ return;
1674
+ }
1675
+ const {top, bottom} = scrollContainer.getBoundingClientRect();
1676
+ if (bottom === top) {
1677
+ this.#elementsForSyncViewportCheck = [];
1678
+ return;
1679
+ }
1680
+ // Expand the bounding calculation by ±100px to accurately match the {rootMargin: '100px'}
1681
+ // option configured on the IntersectionObserver in trackForLazyRendering.
1682
+ const viewportTop = top - 100;
1683
+ const viewportBottom = bottom + 100;
1684
+
1685
+ const visibleElements: Element[] = [];
1686
+ for (const element of this.#elementsForSyncViewportCheck) {
1687
+ if (!element.isConnected || !this.#lazyRenderCallbacks.has(element)) {
1688
+ continue;
1689
+ }
1690
+ const rect = element.getBoundingClientRect();
1691
+ if (rect.top > viewportBottom) {
1692
+ break;
1693
+ }
1694
+ if (rect.bottom >= viewportTop) {
1695
+ visibleElements.push(element);
1696
+ }
1697
+ }
1698
+ this.#elementsForSyncViewportCheck = [];
1699
+
1700
+ for (const element of visibleElements) {
1701
+ const callback = this.#lazyRenderCallbacks.get(element);
1702
+ if (callback) {
1703
+ callback();
1704
+ this.untrackForLazyRendering(element);
1705
+ }
1706
+ }
1707
+ }
1708
+
1661
1709
  shouldRenderLazily(): boolean {
1662
1710
  return this.#shouldRenderLazily;
1663
1711
  }
@@ -460,7 +460,6 @@ export class DeviceModeToolbar extends UI.Widget.Widget {
460
460
  this.showMediaInspectorSetting.addChangeListener(this.requestUpdate, this);
461
461
  this.showRulersSetting = Common.Settings.Settings.instance().moduleSetting('emulation.show-rulers');
462
462
  this.showRulersSetting.addChangeListener(this.requestUpdate, this);
463
-
464
463
  this.showDeviceScaleFactorSetting =
465
464
  Common.Settings.Settings.instance().createSetting('emulation.show-device-scale-factor', false);
466
465
  this.showDeviceScaleFactorSetting.addChangeListener(this.requestUpdate, this);