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.
- package/.agents/skills/devtools-testing-guidance/SKILL.md +4 -0
- package/.agents/skills/migrate-chromium-test/SKILL.md +63 -48
- package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +14 -5
- package/.agents/skills/ui-eng-vision-logic-consolidator/SKILL.md +11 -2
- package/.agents/skills/ui-eng-vision-orchestrator/SKILL.md +46 -9
- package/.agents/skills/ui-eng-vision-test-scaffolder/SKILL.md +20 -1
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +9 -0
- package/front_end/core/host/AidaClient.ts +115 -64
- package/front_end/core/host/GcaClient.ts +3 -3
- package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
- package/front_end/core/host/InspectorFrontendHostStub.ts +3 -3
- package/front_end/core/host/UserMetrics.ts +50 -13
- package/front_end/core/sdk/CSSMatchedStyles.ts +2 -5
- package/front_end/core/sdk/CSSPropertyParserMatchers.ts +12 -0
- package/front_end/core/sdk/Connections.ts +1 -1
- package/front_end/core/sdk/DOMModel.test.api.ts +104 -0
- package/front_end/core/sdk/DOMModel.ts +23 -11
- package/front_end/core/sdk/DebuggerModel.ts +9 -9
- package/front_end/core/sdk/IsolateManager.ts +1 -1
- package/front_end/core/sdk/NetworkManager.ts +105 -4
- package/front_end/core/sdk/NetworkRequest.ts +10 -55
- package/front_end/core/sdk/OverlayModel.ts +15 -14
- package/front_end/core/sdk/RemoteObject.ts +1 -1
- package/front_end/devtools_compatibility.js +1 -0
- package/front_end/entrypoints/main/MainImpl.ts +5 -12
- package/front_end/entrypoints/main/SimpleApp.ts +9 -3
- package/front_end/foundation/Universe.ts +22 -0
- package/front_end/generated/InspectorBackendCommands.ts +2 -2
- package/front_end/generated/protocol.ts +2 -1
- package/front_end/models/ai_assistance/agents/AiAgent.ts +22 -13
- package/front_end/models/ai_assistance/contexts/PerformanceTraceContext.ts +23 -10
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +21 -5
- package/front_end/models/computed_style/ComputedStyleModel.ts +4 -7
- package/front_end/models/crux-manager/CrUXManager.ts +4 -0
- package/front_end/models/extensions/ExtensionAPI.ts +3 -3
- package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +2 -2
- package/front_end/models/issues_manager/CookieIssue.ts +6 -127
- package/front_end/models/issues_manager/descriptions/CoepCorpNotSameOrigin.md +2 -2
- package/front_end/models/issues_manager/descriptions/CoepCorpNotSameOriginAfterDefaultedToSameOriginByCoep.md +3 -3
- package/front_end/models/issues_manager/descriptions/CoepCorpNotSameSite.md +2 -2
- package/front_end/models/issues_manager/descriptions/CoepFrameResourceNeedsCoepHeader.md +1 -1
- package/front_end/models/issues_manager/descriptions/CompatibilityModeQuirks.md +1 -1
- package/front_end/models/issues_manager/descriptions/CookieAttributeValueExceedsMaxSize.md +2 -2
- package/front_end/models/issues_manager/descriptions/LowTextContrast.md +1 -1
- package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorRead.md +1 -1
- package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureErrorSet.md +1 -1
- package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnRead.md +1 -1
- package/front_end/models/issues_manager/descriptions/SameSiteNoneInsecureWarnSet.md +1 -1
- package/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeRead.md +3 -3
- package/front_end/models/issues_manager/descriptions/SameSiteUnspecifiedLaxAllowUnsafeSet.md +3 -3
- package/front_end/models/issues_manager/descriptions/bounceTrackingMitigations.md +1 -1
- package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidAllowlistItemType.md +2 -2
- package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidHeader.md +2 -2
- package/front_end/models/issues_manager/descriptions/connectionAllowlistInvalidUrlPattern.md +3 -3
- package/front_end/models/issues_manager/descriptions/connectionAllowlistItemNotInnerList.md +2 -2
- package/front_end/models/issues_manager/descriptions/connectionAllowlistMoreThanOneList.md +2 -2
- package/front_end/models/issues_manager/descriptions/connectionAllowlistReportingEndpointNotToken.md +1 -1
- package/front_end/models/issues_manager/descriptions/cookieCrossSiteRedirectDowngrade.md +3 -3
- package/front_end/models/issues_manager/descriptions/cookieExcludeBlockedWithinRelatedWebsiteSet.md +1 -1
- package/front_end/models/issues_manager/descriptions/cookieExcludePortMismatch.md +1 -1
- package/front_end/models/issues_manager/descriptions/cookieExcludeSchemeMismatch.md +1 -1
- package/front_end/models/issues_manager/descriptions/cookieExcludeThirdPartyPhaseoutSet.md +1 -1
- package/front_end/models/issues_manager/descriptions/cookieWarnThirdPartyPhaseoutRead.md +1 -1
- package/front_end/models/issues_manager/descriptions/corsAllowCredentialsRequired.md +1 -1
- package/front_end/models/issues_manager/descriptions/corsDisabledScheme.md +2 -2
- package/front_end/models/issues_manager/descriptions/corsDisallowedByMode.md +2 -2
- package/front_end/models/issues_manager/descriptions/corsHeaderDisallowedByPreflightResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/corsInvalidHeaderValues.md +3 -3
- package/front_end/models/issues_manager/descriptions/corsLocalNetworkAccessPermissionDenied.md +1 -1
- package/front_end/models/issues_manager/descriptions/corsMethodDisallowedByPreflightResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/corsNoCorsRedirectModeNotFollow.md +1 -1
- package/front_end/models/issues_manager/descriptions/corsOriginMismatch.md +3 -3
- package/front_end/models/issues_manager/descriptions/corsPreflightResponseInvalid.md +2 -2
- package/front_end/models/issues_manager/descriptions/corsRedirectContainsCredentials.md +3 -3
- package/front_end/models/issues_manager/descriptions/corsWildcardOriginNotAllowed.md +4 -3
- package/front_end/models/issues_manager/descriptions/cspEvalViolation.md +4 -4
- package/front_end/models/issues_manager/descriptions/cspInlineViolation.md +2 -2
- package/front_end/models/issues_manager/descriptions/cspTrustedTypesPolicyViolation.md +2 -2
- package/front_end/models/issues_manager/descriptions/cspTrustedTypesSinkViolation.md +4 -4
- package/front_end/models/issues_manager/descriptions/cspURLViolation.md +4 -4
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsEmptyList.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsInvalidContentType.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestAccountsNoResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestDnsFetchFailed.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestDnsInvalidRecord.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidContentType.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestEmailVerificationWellKnownNoResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestInvalidEmail.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestJwksHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestJwksInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestKeyBindingSigningFailed.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestRpOriginIsOpaque.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidContentType.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenInvalidSdJwt.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenMalformedSdJwt.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenNoResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidAudience.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidIssuedAt.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidNonce.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidSdHash.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbInvalidTyp.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingAud.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingCnf.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingIat.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingNonce.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbMissingSdHash.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationKbSignatureFailed.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmail.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidEmailVerified.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidHolderKey.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuedAt.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtInvalidIssuer.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtJwksMissingKeys.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingCnf.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingEmail.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIat.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtMissingIss.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtSignatureFailed.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestTokenVerificationSdJwtUnsupportedHeaderAlg.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestUserLoggedOut.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownAccountsEndpointCrossOrigin.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidContentType.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownIssuanceEndpointCrossOrigin.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownListEmpty.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingAccountsEndpoint.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownMissingIssuanceEndpoint.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownNoResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/emailVerificationRequestWellKnownUnsupportedSigningAlgorithm.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestAccountsNoResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestApprovalDeclined.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestCanceled.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorFetchingSignin.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestErrorIdToken.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidRequest.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestIdTokenNoResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestInvalidSigninResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestHttpNotFound.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestInvalidResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestManifestNoResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthRequestTooManyRequests.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidAccountsResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestInvalidConfigOrWellKnown.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoAccountSharingPermission.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoApiPermission.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNoReturningUserFromFetchedAccounts.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotIframe.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotPotentiallyTrustworthy.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSameOrigin.md +1 -1
- package/front_end/models/issues_manager/descriptions/federatedAuthUserInfoRequestNotSignedInWithIdp.md +1 -1
- package/front_end/models/issues_manager/descriptions/fetchingPartitionedBlobURL.md +2 -2
- package/front_end/models/issues_manager/descriptions/genericFormAriaLabelledByToNonExistingIdError.md +2 -2
- package/front_end/models/issues_manager/descriptions/genericFormAutocompleteAttributeEmptyError.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormDuplicateIdForInputError.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormEmptyIdAndNameAttributesForInputError.md +2 -2
- package/front_end/models/issues_manager/descriptions/genericFormInputAssignedAutocompleteValueToIdOrNameAttributeError.md +2 -2
- package/front_end/models/issues_manager/descriptions/genericFormInputHasWrongButWellIntendedAutocompleteValueError.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormInputWithNoLabelError.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormLabelForMatchesNonExistingIdError.md +2 -2
- package/front_end/models/issues_manager/descriptions/genericFormLabelForNameError.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormLabelHasNeitherForNorNestedInputError.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormModelContextMissingToolName.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormModelContextParameterMissingName.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericFormModelContextRequiredParameterMissingName.md +1 -1
- package/front_end/models/issues_manager/descriptions/genericNavigationEntryMarkedSkippable.md +2 -2
- package/front_end/models/issues_manager/descriptions/heavyAd.md +1 -1
- package/front_end/models/issues_manager/descriptions/lazyLoadImageZeroSize.md +1 -1
- package/front_end/models/issues_manager/descriptions/navigatingPartitionedBlobURL.md +3 -3
- package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabled.md +1 -1
- package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluder.md +1 -1
- package/front_end/models/issues_manager/descriptions/permissionElementActivationDisabledWithOccluderParent.md +1 -1
- package/front_end/models/issues_manager/descriptions/permissionElementFencedFrameDisallowed.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooLarge.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementFontSizeTooSmall.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementInsetBoxShadowUnsupported.md +1 -1
- package/front_end/models/issues_manager/descriptions/permissionElementInvalidDisplayStyle.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementInvalidSizeValue.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementInvalidType.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementInvalidTypeActivation.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementNonOpaqueColor.md +1 -1
- package/front_end/models/issues_manager/descriptions/permissionElementPaddingBottomUnsupported.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementPaddingRightUnsupported.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementRequestInProgress.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementSecurityChecksFailed.md +1 -1
- package/front_end/models/issues_manager/descriptions/permissionElementTypeNotSupported.md +2 -2
- package/front_end/models/issues_manager/descriptions/permissionElementUntrustedEvent.md +1 -1
- package/front_end/models/issues_manager/descriptions/placeholderDescriptionForInvisibleIssues.md +1 -1
- package/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedOptGroupChild.md +1 -1
- package/front_end/models/issues_manager/descriptions/selectElementAccessibilityDisallowedSelectChild.md +1 -1
- package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentAttributesSelectDescendant.md +1 -1
- package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentLegendChild.md +1 -1
- package/front_end/models/issues_manager/descriptions/selectElementAccessibilityInteractiveContentOptionChild.md +1 -1
- package/front_end/models/issues_manager/descriptions/selectElementAccessibilityNonPhrasingContentOptionChild.md +1 -1
- package/front_end/models/issues_manager/descriptions/selectivePermissionsIntervention.md +3 -3
- package/front_end/models/issues_manager/descriptions/sharedArrayBuffer.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorCrossOriginNoCorsRequest.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorMatchingDictionaryNotUsed.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryUseErrorUnexpectedContentDictionaryHeader.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorCossOriginNoCorsRequest.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorDisallowedBySettings.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorExpiredResponse.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorFeatureDisabled.md +2 -2
- package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorInvalidStructuredHeader.md +1 -1
- package/front_end/models/issues_manager/descriptions/sharedDictionaryWriteErrorNavigationRequest.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriInvalidSignatureHeader.md +4 -4
- package/front_end/models/issues_manager/descriptions/sriInvalidSignatureInputHeader.md +4 -4
- package/front_end/models/issues_manager/descriptions/sriMissingSignatureHeader.md +1 -1
- package/front_end/models/issues_manager/descriptions/sriMissingSignatureInputHeader.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsIncorrectLength.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsNotByteSequence.md +4 -4
- package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md +4 -4
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md +1 -1
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidDerivedComponentParameter.md +1 -1
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidHeaderComponentParameter.md +1 -1
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderKeyIdLength.md +5 -5
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingLabel.md +3 -3
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderMissingRequiredParameters.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueMissingComponents.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md +4 -4
- package/front_end/models/issues_manager/descriptions/sriValidationFailedInvalidLength.md +3 -3
- package/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureExpired.md +2 -2
- package/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md +2 -2
- package/front_end/models/issues_manager/descriptions/stylesheetLateImport.md +1 -1
- package/front_end/models/issues_manager/descriptions/summaryElementAccessibilityInteractiveContentSummaryDescendant.md +1 -1
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md +2 -2
- package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestType.md +3 -3
- package/front_end/models/issues_manager/descriptions/unencodedDigestMalformedDictionary.md +2 -2
- package/front_end/models/issues_manager/descriptions/unencodedDigestUnknownAlgorithm.md +1 -1
- package/front_end/models/live-metrics/LiveMetrics.ts +59 -19
- package/front_end/models/live-metrics/web-vitals-injected/README.md +1 -1
- package/front_end/models/live-metrics/web-vitals-injected/spec/spec.ts +6 -1
- package/front_end/models/live-metrics/web-vitals-injected/web-vitals-injected.ts +11 -3
- package/front_end/models/logs/LogManager.ts +1 -1
- package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +1 -1
- package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +6 -7
- package/front_end/models/workspace_diff/WorkspaceDiff.ts +13 -14
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +15 -7
- package/front_end/panels/application/BackgroundServiceView.ts +18 -20
- package/front_end/panels/application/DOMStorageItemsView.ts +1 -2
- package/front_end/panels/application/KeyValueStorageItemsView.ts +12 -0
- package/front_end/panels/autofill/AutofillView.ts +17 -17
- package/front_end/panels/autofill/autofillView.css +7 -8
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +31 -31
- package/front_end/panels/browser_debugger/DOMBreakpointsSidebarPane.ts +15 -15
- package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +12 -12
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +27 -27
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +14 -6
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +14 -6
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +13 -6
- package/front_end/panels/common/GeminiRebrandPromoDialog.ts +1 -1
- package/front_end/panels/console/ConsoleInsightTeaser.ts +13 -6
- package/front_end/panels/console/ConsoleView.ts +6 -6
- package/front_end/panels/console_counters/WarningErrorCounter.ts +4 -4
- package/front_end/panels/coverage/CoverageModel.ts +11 -1
- package/front_end/panels/elements/StylePropertiesSection.ts +59 -10
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +18 -7
- package/front_end/panels/elements/StylesSidebarPane.ts +48 -0
- package/front_end/panels/emulation/AdvancedApp.ts +18 -8
- package/front_end/panels/emulation/DeviceModeToolbar.ts +0 -1
- package/front_end/panels/emulation/DeviceModeView.ts +289 -164
- package/front_end/panels/emulation/MediaQueryInspector.ts +10 -6
- package/front_end/panels/emulation/deviceModeView.css +1 -0
- package/front_end/panels/event_listeners/EventListenersView.ts +8 -8
- package/front_end/panels/explain/components/ConsoleInsight.ts +15 -7
- package/front_end/panels/lighthouse/LighthouseController.ts +1 -6
- package/front_end/panels/network/NetworkLogView.ts +13 -14
- package/front_end/panels/screencast/ScreencastApp.ts +12 -6
- package/front_end/panels/screencast/ScreencastView.ts +37 -11
- package/front_end/panels/sensors/locationsSettingsTab.css +4 -0
- package/front_end/panels/settings/AISettingsTab.ts +13 -6
- package/front_end/panels/sources/DebuggerPlugin.ts +13 -2
- package/front_end/panels/sources/breakpointEditDialog.css +2 -2
- package/front_end/panels/timeline/components/LiveMetricsView.ts +14 -1
- package/front_end/panels/timeline/components/cpuThrottlingSelector.css +4 -0
- package/front_end/panels/timeline/components/liveMetricsView.css +28 -0
- package/front_end/panels/timeline/timeline-meta.ts +13 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/ui/components/menus/menu.css +4 -0
- package/front_end/ui/components/menus/menuItem.css +4 -0
- package/front_end/ui/components/menus/selectMenu.css +4 -0
- package/front_end/ui/components/menus/selectMenuButton.css +4 -0
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +21 -10
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +23 -12
- package/front_end/ui/components/text_editor/config.ts +7 -0
- package/front_end/ui/legacy/AppProvider.ts +2 -1
- package/front_end/ui/legacy/RootView.ts +8 -1
- package/front_end/ui/legacy/UniverseRequestEvent.ts +19 -0
- package/front_end/ui/legacy/Widget.ts +49 -6
- package/front_end/ui/legacy/inspectorCommon.css +1 -1
- package/front_end/ui/legacy/legacy.ts +2 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
- package/package.json +1 -2
- package/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeRead.md +0 -8
- package/front_end/models/issues_manager/descriptions/SameSiteExcludeContextDowngradeSet.md +0 -8
- package/front_end/models/issues_manager/descriptions/SameSiteExcludeNavigationContextDowngrade.md +0 -8
- package/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeRead.md +0 -8
- package/front_end/models/issues_manager/descriptions/SameSiteWarnCrossDowngradeSet.md +0 -8
- package/front_end/models/issues_manager/descriptions/SameSiteWarnStrictLaxDowngradeStrict.md +0 -8
package/front_end/models/issues_manager/descriptions/sriSignatureHeaderValueIsParameterized.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
# A `signature` header member
|
|
1
|
+
# A `signature` header member’s value is parameterized
|
|
2
2
|
|
|
3
|
-
Responses
|
|
4
|
-
[Dictionary](sfDictionary) containing one or more signatures. Each member
|
|
3
|
+
Responses’ [`signature`](signatureHeader) header should be formatted as a
|
|
4
|
+
[Dictionary](sfDictionary) containing one or more signatures. Each member’s 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
|
|
6
|
+
[`signature-input`](signatureInputHeader) header. Each member’s value is a
|
|
7
7
|
[Byte Sequence](sfByteSequence) containing the signature itself, with no
|
|
8
8
|
additional parameters specified.
|
|
9
9
|
|
package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentName.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# A `signature-input` header member
|
|
1
|
+
# A `signature-input` header member’s 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
|
package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidComponentType.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# A `signature-input` header
|
|
1
|
+
# A `signature-input` header’s component isn’t a string
|
|
2
2
|
|
|
3
|
-
Responses
|
|
3
|
+
Responses’ [`signature-input`](signatureInputHeader) header’s 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
|
package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderInvalidParameter.md
CHANGED
|
@@ -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
|
|
3
|
+
The `signature-input` header’s [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
|
|
4
|
-
[`keyid` parameter](signatureParameters)
|
|
5
|
-
256 bit sequence, and therefore
|
|
3
|
+
The key specified in a [`signature-input`](signatureInputHeader) header’s
|
|
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
|
|
7
|
+
Note that the `keyid` parameter’s 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
|
|
6
|
-
the signature
|
|
5
|
+
Without a `signature-input` header’s definition of the signature’s 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
|
|
3
|
+
The [`signature-input`][signatureInputHeader] header’s [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
|
|
3
|
+
The [`signature-input`](signatureInputHeader) header’s
|
|
4
4
|
[Inner Lists](sfInnerList) must contain the string "`unencoded-digest`" with an
|
|
5
5
|
`sf` parameter:
|
|
6
6
|
|
package/front_end/models/issues_manager/descriptions/sriSignatureInputHeaderValueNotInnerList.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# A `signature-input` header has a member whose value
|
|
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
|
|
3
|
+
The value of each member of a [`signature-input`](signatureInputHeader) header’s
|
|
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
|
|
package/front_end/models/issues_manager/descriptions/sriValidationFailedIntegrityMismatch.md
CHANGED
|
@@ -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
|
|
6
|
-
assertions made by the request
|
|
5
|
+
header’s [`keyid` parameter](signatureParameters) don’t match the integrity
|
|
6
|
+
assertions made by the request’s initiator. Verification failed.
|
|
7
7
|
|
|
8
|
-
The following are the keys specified by the request
|
|
8
|
+
The following are the keys specified by the request’s initiator:
|
|
9
9
|
|
|
10
10
|
{PLACEHOLDER_integrityAssertions}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Signature verification failed: the signature provided
|
|
1
|
+
# Signature verification failed: the signature provided isn’t an Ed25519 signature
|
|
2
2
|
|
|
3
|
-
The signature specified in a [`signature`](signatureHeader) header
|
|
4
|
-
base64-encoded 512 bit
|
|
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
|
|
6
|
+
verification isn’t possible.
|
package/front_end/models/issues_manager/descriptions/sriValidationFailedSignatureMismatch.md
CHANGED
|
@@ -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
|
|
4
|
+
header’s [`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
|
|
3
|
+
An @import rule was ignored because it wasn’t 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
|
|
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.
|
package/front_end/models/issues_manager/descriptions/unencodedDigestIncorrectDigestLength.md
CHANGED
|
@@ -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
|
|
4
|
+
response’s 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
|
|
4
|
+
[Dictionary](sfDictionary), wherein each member’s 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
|
-
|
|
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
|
|
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
|
|
4
|
+
[Dictionary](sfDictionary), wherein each member’s 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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
220
|
-
|
|
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,
|
|
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,
|
|
269
|
-
debuggerWorkspaceBinding
|
|
270
|
-
|
|
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
|
|
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 =
|
|
231
|
-
}
|
|
232
|
-
this.#requestDiffPromise = null;
|
|
229
|
+
this.#pendingChanges = undefined;
|
|
233
230
|
|
|
234
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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 =
|
|
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
|
-
#
|
|
1230
|
-
|
|
1231
|
-
|
|
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) {
|