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
|
@@ -753,7 +753,8 @@ export type ViewFunction = typeof DEFAULT_VIEW;
|
|
|
753
753
|
|
|
754
754
|
export class ConsoleInsight extends UI.Widget.Widget {
|
|
755
755
|
static async create(promptBuilder: PublicPromptBuilder, aidaClient: PublicAidaClient): Promise<Lit.LitTemplate> {
|
|
756
|
-
const aidaPreconditions =
|
|
756
|
+
const aidaPreconditions = Host.AidaClient.HostConfigTracker.instance().aidaAvailability ??
|
|
757
|
+
await Host.AidaClient.AidaClient.checkAccessPreconditions();
|
|
757
758
|
return html`<devtools-widget class="devtools-console-insight" ${
|
|
758
759
|
widget(element => new ConsoleInsight(promptBuilder, aidaClient, aidaPreconditions, element))}>
|
|
759
760
|
</devtools-widget>`;
|
|
@@ -780,7 +781,8 @@ export class ConsoleInsight extends UI.Widget.Widget {
|
|
|
780
781
|
|
|
781
782
|
#consoleInsightsEnabledSetting: Common.Settings.Setting<boolean>|undefined;
|
|
782
783
|
#aidaPreconditions: Host.AidaClient.AidaAccessPreconditions;
|
|
783
|
-
#boundOnAidaAvailabilityChange:
|
|
784
|
+
#boundOnAidaAvailabilityChange:
|
|
785
|
+
(ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>) => void;
|
|
784
786
|
#marked: Marked.Marked.Marked;
|
|
785
787
|
|
|
786
788
|
constructor(
|
|
@@ -885,7 +887,10 @@ export class ConsoleInsight extends UI.Widget.Widget {
|
|
|
885
887
|
Host.AidaClient.HostConfigTracker.instance().addEventListener(
|
|
886
888
|
Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnAidaAvailabilityChange);
|
|
887
889
|
// If AIDA availability has changed while the component was disconnected, we need to update.
|
|
888
|
-
|
|
890
|
+
const initialAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
|
|
891
|
+
if (initialAvailability !== undefined) {
|
|
892
|
+
this.#updateAidaAvailability(initialAvailability);
|
|
893
|
+
}
|
|
889
894
|
// The setting might have been turned on/off while the component was disconnected.
|
|
890
895
|
// Update the state, unless the current state is already terminal (`INSIGHT` or `ERROR`).
|
|
891
896
|
if (this.#state.type !== State.INSIGHT && this.#state.type !== State.ERROR) {
|
|
@@ -901,15 +906,18 @@ export class ConsoleInsight extends UI.Widget.Widget {
|
|
|
901
906
|
Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnAidaAvailabilityChange);
|
|
902
907
|
}
|
|
903
908
|
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
this.#aidaPreconditions = currentAidaAvailability;
|
|
909
|
+
#updateAidaAvailability(aidaAvailability: Host.AidaClient.AidaAccessPreconditions): void {
|
|
910
|
+
if (aidaAvailability !== this.#aidaPreconditions) {
|
|
911
|
+
this.#aidaPreconditions = aidaAvailability;
|
|
908
912
|
this.#state = this.#getStateFromAidaAvailability();
|
|
909
913
|
void this.#generateInsightIfNeeded();
|
|
910
914
|
}
|
|
911
915
|
}
|
|
912
916
|
|
|
917
|
+
#onAidaAvailabilityChange(ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>): void {
|
|
918
|
+
this.#updateAidaAvailability(ev.data);
|
|
919
|
+
}
|
|
920
|
+
|
|
913
921
|
#onConsoleInsightsSettingChanged(): void {
|
|
914
922
|
if (this.#consoleInsightsEnabledSetting?.getIfNotDisabled() === true) {
|
|
915
923
|
this.#getOnboardingCompletedSetting().set(true);
|
|
@@ -27,7 +27,7 @@ const UIStrings = {
|
|
|
27
27
|
'There may be stored data affecting loading performance in this location: {PH1}. Audit this page in an incognito window to stop those resources from affecting your scores.',
|
|
28
28
|
/**
|
|
29
29
|
* @description Text when stored data in multiple locations may affect Lighthouse run.
|
|
30
|
-
* @example {IndexedDB
|
|
30
|
+
* @example {IndexedDB} PH1
|
|
31
31
|
*/
|
|
32
32
|
thereMayBeStoredDataAffectingLoadingPlural:
|
|
33
33
|
'There may be stored data affecting loading performance in these locations: {PH1}. Audit this page in an incognito window to stop those resources from affecting your scores.',
|
|
@@ -48,10 +48,6 @@ const UIStrings = {
|
|
|
48
48
|
* @description Text in sidebar of the Application panel.
|
|
49
49
|
*/
|
|
50
50
|
indexeddb: 'IndexedDB',
|
|
51
|
-
/**
|
|
52
|
-
* @description Text in sidebar of the Application panel.
|
|
53
|
-
*/
|
|
54
|
-
webSql: 'Web SQL',
|
|
55
51
|
/**
|
|
56
52
|
* @description Text of checkbox to include running the performance audits in Lighthouse.
|
|
57
53
|
*/
|
|
@@ -713,7 +709,6 @@ export class LighthouseController extends Common.ObjectWrapper.ObjectWrapper<Eve
|
|
|
713
709
|
const STORAGE_TYPE_NAMES = new Map([
|
|
714
710
|
[Protocol.Storage.StorageType.Local_storage, i18nLazyString(UIStrings.localStorage)],
|
|
715
711
|
[Protocol.Storage.StorageType.Indexeddb, i18nLazyString(UIStrings.indexeddb)],
|
|
716
|
-
[Protocol.Storage.StorageType.Websql, i18nLazyString(UIStrings.webSql)],
|
|
717
712
|
]);
|
|
718
713
|
|
|
719
714
|
let presets: LighthouseModel.RunTypes.Preset[]|null = null;
|
|
@@ -467,9 +467,9 @@ const UIStrings = {
|
|
|
467
467
|
*/
|
|
468
468
|
blockRequestDomain: 'Block request domain',
|
|
469
469
|
/**
|
|
470
|
-
* @description Text to
|
|
470
|
+
* @description Text to resend a network request
|
|
471
471
|
*/
|
|
472
|
-
|
|
472
|
+
resend: 'Resend',
|
|
473
473
|
/**
|
|
474
474
|
* @description Text in Network Log View of the Network panel
|
|
475
475
|
*/
|
|
@@ -734,12 +734,11 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
|
|
|
734
734
|
return !filter(request);
|
|
735
735
|
}
|
|
736
736
|
|
|
737
|
-
private static
|
|
737
|
+
private static requestHostAndPathFilter(regex: RegExp|null, request: SDK.NetworkRequest.NetworkRequest): boolean {
|
|
738
738
|
if (!regex) {
|
|
739
739
|
return false;
|
|
740
740
|
}
|
|
741
|
-
|
|
742
|
-
return regex.test(request.path() + '/' + request.name());
|
|
741
|
+
return regex.test(request.parsedURL.urlWithoutScheme());
|
|
743
742
|
}
|
|
744
743
|
|
|
745
744
|
private static subdomains(domain: string): string[] {
|
|
@@ -1186,9 +1185,9 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
|
|
|
1186
1185
|
return;
|
|
1187
1186
|
}
|
|
1188
1187
|
|
|
1189
|
-
if (SDK.NetworkManager.NetworkManager.
|
|
1188
|
+
if (SDK.NetworkManager.NetworkManager.canResendRequest(request)) {
|
|
1190
1189
|
SDK.NetworkManager.NetworkManager.replayRequest(request);
|
|
1191
|
-
void VisualLogging.logKeyDown(this.dataGrid.selectedNode.element(), event, '
|
|
1190
|
+
void VisualLogging.logKeyDown(this.dataGrid.selectedNode.element(), event, 'resend');
|
|
1192
1191
|
}
|
|
1193
1192
|
}
|
|
1194
1193
|
});
|
|
@@ -1975,10 +1974,10 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
|
|
|
1975
1974
|
{jslogContext: 'throttle-request-domain'});
|
|
1976
1975
|
}
|
|
1977
1976
|
|
|
1978
|
-
if (SDK.NetworkManager.NetworkManager.
|
|
1979
|
-
contextMenu.debugSection().appendItem(
|
|
1980
|
-
|
|
1981
|
-
|
|
1977
|
+
if (SDK.NetworkManager.NetworkManager.canResendRequest(request)) {
|
|
1978
|
+
contextMenu.debugSection().appendItem(i18nString(UIStrings.resend),
|
|
1979
|
+
SDK.NetworkManager.NetworkManager.replayRequest.bind(null, request),
|
|
1980
|
+
{jslogContext: 'resend'});
|
|
1982
1981
|
}
|
|
1983
1982
|
}
|
|
1984
1983
|
}
|
|
@@ -2169,13 +2168,13 @@ export class NetworkLogView extends Common.ObjectWrapper.eventMixin<EventTypes,
|
|
|
2169
2168
|
if (key) {
|
|
2170
2169
|
const defaultText = Platform.StringUtilities.escapeForRegExp(key + ':' + text);
|
|
2171
2170
|
filter = this.createSpecialFilter((key as NetworkForward.UIFilter.FilterType), text) ||
|
|
2172
|
-
NetworkLogView.
|
|
2171
|
+
NetworkLogView.requestHostAndPathFilter.bind(null, new RegExp(defaultText, 'i'));
|
|
2173
2172
|
} else if (descriptor.regex) {
|
|
2174
|
-
filter = NetworkLogView.
|
|
2173
|
+
filter = NetworkLogView.requestHostAndPathFilter.bind(null, (regex as RegExp));
|
|
2175
2174
|
} else if (this.isValidUrl(text)) {
|
|
2176
2175
|
filter = NetworkLogView.requestUrlFilter.bind(null, text);
|
|
2177
2176
|
} else {
|
|
2178
|
-
filter = NetworkLogView.
|
|
2177
|
+
filter = NetworkLogView.requestHostAndPathFilter.bind(
|
|
2179
2178
|
null, new RegExp(Platform.StringUtilities.escapeForRegExp(text), 'i'));
|
|
2180
2179
|
}
|
|
2181
2180
|
if ((descriptor.negative && !invert) || (!descriptor.negative && invert)) {
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
import * as Common from '../../core/common/common.js';
|
|
7
7
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
8
8
|
import * as SDK from '../../core/sdk/sdk.js';
|
|
9
|
+
import type * as Foundation from '../../foundation/foundation.js';
|
|
9
10
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
10
11
|
|
|
11
12
|
import {ScreencastView} from './ScreencastView.js';
|
|
@@ -28,7 +29,9 @@ export class ScreencastApp implements UI.App.App,
|
|
|
28
29
|
private screenCaptureModel?: SDK.ScreenCaptureModel.ScreenCaptureModel;
|
|
29
30
|
private screencastView?: ScreencastView;
|
|
30
31
|
rootView?: UI.RootView.RootView;
|
|
31
|
-
|
|
32
|
+
readonly #universe: Foundation.Universe.Universe;
|
|
33
|
+
constructor(universe: Foundation.Universe.Universe) {
|
|
34
|
+
this.#universe = universe;
|
|
32
35
|
this.enabledSetting = Common.Settings.Settings.instance().createSetting('screencast-enabled', true);
|
|
33
36
|
this.toggleButton = new UI.Toolbar.ToolbarToggle(i18nString(UIStrings.toggleScreencast), 'devices');
|
|
34
37
|
this.toggleButton.setToggled(this.enabledSetting.get());
|
|
@@ -37,15 +40,18 @@ export class ScreencastApp implements UI.App.App,
|
|
|
37
40
|
SDK.TargetManager.TargetManager.instance().observeModels(SDK.ScreenCaptureModel.ScreenCaptureModel, this);
|
|
38
41
|
}
|
|
39
42
|
|
|
40
|
-
static instance(): ScreencastApp {
|
|
43
|
+
static instance(universe?: Foundation.Universe.Universe): ScreencastApp {
|
|
41
44
|
if (!appInstance) {
|
|
42
|
-
|
|
45
|
+
if (!universe) {
|
|
46
|
+
throw new Error('ScreencastApp.instance() requires a Universe on initial instantiation');
|
|
47
|
+
}
|
|
48
|
+
appInstance = new ScreencastApp(universe);
|
|
43
49
|
}
|
|
44
50
|
return appInstance;
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
presentUI(document: Document): void {
|
|
48
|
-
this.rootView = new UI.RootView.RootView();
|
|
54
|
+
this.rootView = new UI.RootView.RootView(this.#universe);
|
|
49
55
|
this.rootView.registerRequiredCSS(UI.inspectorCommonStyles);
|
|
50
56
|
|
|
51
57
|
this.rootSplitWidget =
|
|
@@ -137,7 +143,7 @@ export class ScreencastAppProvider implements UI.AppProvider.AppProvider {
|
|
|
137
143
|
return screencastAppProviderInstance;
|
|
138
144
|
}
|
|
139
145
|
|
|
140
|
-
createApp(): UI.App.App {
|
|
141
|
-
return ScreencastApp.instance();
|
|
146
|
+
createApp(universe: Foundation.Universe.Universe): UI.App.App {
|
|
147
|
+
return ScreencastApp.instance(universe);
|
|
142
148
|
}
|
|
143
149
|
}
|
|
@@ -179,6 +179,18 @@ export class ScreencastView extends UI.Widget.VBox implements SDK.OverlayModel.H
|
|
|
179
179
|
this.stopCasting();
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
+
override onDetach(): void {
|
|
183
|
+
this.navigationProgressBar?.dispose();
|
|
184
|
+
SDK.TargetManager.TargetManager.instance().removeEventListener(SDK.TargetManager.Events.SUSPEND_STATE_CHANGED,
|
|
185
|
+
this.onSuspendStateChange, this);
|
|
186
|
+
if (this.resourceTreeModel) {
|
|
187
|
+
this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.PrimaryPageChanged,
|
|
188
|
+
this.requestNavigationHistoryEvent, this);
|
|
189
|
+
this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,
|
|
190
|
+
this.requestNavigationHistoryEvent, this);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
182
194
|
private async startCasting(): Promise<void> {
|
|
183
195
|
if (SDK.TargetManager.TargetManager.instance().allTargetsSuspended()) {
|
|
184
196
|
return;
|
|
@@ -629,11 +641,9 @@ export class ScreencastView extends UI.Widget.VBox implements SDK.OverlayModel.H
|
|
|
629
641
|
}
|
|
630
642
|
|
|
631
643
|
private createCheckerboardPattern(context: CanvasRenderingContext2D): CanvasPattern|null {
|
|
632
|
-
const pattern = document.createElement('canvas');
|
|
633
644
|
const size = 32;
|
|
634
|
-
pattern
|
|
635
|
-
pattern.
|
|
636
|
-
const pctx = pattern.getContext('2d', {willReadFrequently: true}) as CanvasRenderingContext2D;
|
|
645
|
+
const pattern = new OffscreenCanvas(size * 2, size * 2);
|
|
646
|
+
const pctx = pattern.getContext('2d', {willReadFrequently: true}) as OffscreenCanvasRenderingContext2D;
|
|
637
647
|
|
|
638
648
|
pctx.fillStyle = 'var(--sys-color-neutral-outline)';
|
|
639
649
|
pctx.fillRect(0, 0, size * 2, size * 2);
|
|
@@ -787,6 +797,8 @@ export const HTTP_REGEX = /^http:\/\/(.+)/;
|
|
|
787
797
|
export const SCHEME_REGEX = /^(https?|about|chrome):/;
|
|
788
798
|
|
|
789
799
|
export class ProgressTracker {
|
|
800
|
+
private readonly resourceTreeModel: SDK.ResourceTreeModel.ResourceTreeModel|null;
|
|
801
|
+
private readonly networkManager: SDK.NetworkManager.NetworkManager|null;
|
|
790
802
|
private element: HTMLElement;
|
|
791
803
|
private requestIds: Map<string, SDK.NetworkRequest.NetworkRequest>|null;
|
|
792
804
|
private startedRequests: number;
|
|
@@ -797,14 +809,16 @@ export class ProgressTracker {
|
|
|
797
809
|
resourceTreeModel: SDK.ResourceTreeModel.ResourceTreeModel|null,
|
|
798
810
|
networkManager: SDK.NetworkManager.NetworkManager|null, element: HTMLElement) {
|
|
799
811
|
this.element = element;
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.
|
|
812
|
+
this.resourceTreeModel = resourceTreeModel;
|
|
813
|
+
this.networkManager = networkManager;
|
|
814
|
+
if (this.resourceTreeModel) {
|
|
815
|
+
this.resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.PrimaryPageChanged,
|
|
816
|
+
this.onPrimaryPageChanged, this);
|
|
817
|
+
this.resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this.onLoad, this);
|
|
804
818
|
}
|
|
805
|
-
if (networkManager) {
|
|
806
|
-
networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted, this.onRequestStarted, this);
|
|
807
|
-
networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished, this.onRequestFinished, this);
|
|
819
|
+
if (this.networkManager) {
|
|
820
|
+
this.networkManager.addEventListener(SDK.NetworkManager.Events.RequestStarted, this.onRequestStarted, this);
|
|
821
|
+
this.networkManager.addEventListener(SDK.NetworkManager.Events.RequestFinished, this.onRequestFinished, this);
|
|
808
822
|
}
|
|
809
823
|
this.requestIds = null;
|
|
810
824
|
this.startedRequests = 0;
|
|
@@ -812,6 +826,18 @@ export class ProgressTracker {
|
|
|
812
826
|
this.maxDisplayedProgress = 0;
|
|
813
827
|
}
|
|
814
828
|
|
|
829
|
+
dispose(): void {
|
|
830
|
+
if (this.resourceTreeModel) {
|
|
831
|
+
this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.PrimaryPageChanged,
|
|
832
|
+
this.onPrimaryPageChanged, this);
|
|
833
|
+
this.resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this.onLoad, this);
|
|
834
|
+
}
|
|
835
|
+
if (this.networkManager) {
|
|
836
|
+
this.networkManager.removeEventListener(SDK.NetworkManager.Events.RequestStarted, this.onRequestStarted, this);
|
|
837
|
+
this.networkManager.removeEventListener(SDK.NetworkManager.Events.RequestFinished, this.onRequestFinished, this);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
|
|
815
841
|
private onPrimaryPageChanged(): void {
|
|
816
842
|
this.requestIds = new Map();
|
|
817
843
|
this.startedRequests = 0;
|
|
@@ -438,7 +438,8 @@ export class AISettingsTab extends UI.Widget.VBox {
|
|
|
438
438
|
#aiAssistanceSetting?: Common.Settings.Setting<boolean>;
|
|
439
439
|
#aiCodeCompletionSetting?: Common.Settings.Setting<boolean>;
|
|
440
440
|
#aidaAvailability = Host.AidaClient.AidaAccessPreconditions.NO_ACCOUNT_EMAIL;
|
|
441
|
-
#boundOnAidaAvailabilityChange:
|
|
441
|
+
#boundOnAidaAvailabilityChange:
|
|
442
|
+
(ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>) => void;
|
|
442
443
|
// Setting to parameters needed to display it in the UI.
|
|
443
444
|
// To display a a setting, it needs to be added to this map.
|
|
444
445
|
#settingToParams = new Map<Common.Settings.Setting<boolean>, AiSettingParams>();
|
|
@@ -514,7 +515,10 @@ export class AISettingsTab extends UI.Widget.VBox {
|
|
|
514
515
|
super.wasShown();
|
|
515
516
|
Host.AidaClient.HostConfigTracker.instance().addEventListener(
|
|
516
517
|
Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#boundOnAidaAvailabilityChange);
|
|
517
|
-
|
|
518
|
+
const initialAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
|
|
519
|
+
if (initialAvailability !== undefined) {
|
|
520
|
+
this.#updateAidaAvailability(initialAvailability);
|
|
521
|
+
}
|
|
518
522
|
this.requestUpdate();
|
|
519
523
|
}
|
|
520
524
|
|
|
@@ -657,14 +661,17 @@ export class AISettingsTab extends UI.Widget.VBox {
|
|
|
657
661
|
}
|
|
658
662
|
}
|
|
659
663
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
this.#aidaAvailability = currentAidaAvailability;
|
|
664
|
+
#updateAidaAvailability(aidaAvailability: Host.AidaClient.AidaAccessPreconditions): void {
|
|
665
|
+
if (aidaAvailability !== this.#aidaAvailability) {
|
|
666
|
+
this.#aidaAvailability = aidaAvailability;
|
|
664
667
|
this.requestUpdate();
|
|
665
668
|
}
|
|
666
669
|
}
|
|
667
670
|
|
|
671
|
+
#onAidaAvailabilityChange(ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>): void {
|
|
672
|
+
this.#updateAidaAvailability(ev.data);
|
|
673
|
+
}
|
|
674
|
+
|
|
668
675
|
#getAiAssistanceSettingDescription(): Platform.UIString.LocalizedString {
|
|
669
676
|
const {hostConfig} = Root.Runtime;
|
|
670
677
|
if (hostConfig.devToolsAiAssistanceV2?.enabled) {
|
|
@@ -2287,16 +2287,27 @@ export function computePopoverHighlightRange(state: CodeMirror.EditorState, mime
|
|
|
2287
2287
|
}
|
|
2288
2288
|
}
|
|
2289
2289
|
|
|
2290
|
-
function containsSideEffects(doc: CodeMirror.Text, root: CodeMirror.SyntaxNode): boolean {
|
|
2290
|
+
export function containsSideEffects(doc: CodeMirror.Text, root: CodeMirror.SyntaxNode): boolean {
|
|
2291
2291
|
let containsSideEffects = false;
|
|
2292
2292
|
root.toTree().iterate({
|
|
2293
2293
|
enter(node: CodeMirror.SyntaxNode): boolean {
|
|
2294
2294
|
switch (node.name) {
|
|
2295
2295
|
case 'AssignmentExpression':
|
|
2296
|
-
case 'CallExpression':
|
|
2296
|
+
case 'CallExpression':
|
|
2297
|
+
case 'NewExpression':
|
|
2298
|
+
case 'TaggedTemplateExpression':
|
|
2299
|
+
case 'DynamicImport': {
|
|
2297
2300
|
containsSideEffects = true;
|
|
2298
2301
|
return false;
|
|
2299
2302
|
}
|
|
2303
|
+
case 'UnaryExpression': {
|
|
2304
|
+
const text = doc.sliceString(root.from + node.from, root.from + node.to).trim();
|
|
2305
|
+
if (text.startsWith('delete')) {
|
|
2306
|
+
containsSideEffects = true;
|
|
2307
|
+
return false;
|
|
2308
|
+
}
|
|
2309
|
+
break;
|
|
2310
|
+
}
|
|
2300
2311
|
case 'ArithOp': {
|
|
2301
2312
|
const op = doc.sliceString(root.from + node.from, root.from + node.to);
|
|
2302
2313
|
if (op === '++' || op === '--') {
|
|
@@ -31,13 +31,13 @@
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
:host-context(.sources-edit-breakpoint-dialog) .source-frame-breakpoint-toolbar {
|
|
34
|
-
font-family:
|
|
34
|
+
font-family: var(--default-font-family);
|
|
35
35
|
font-size: 12px;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
:host-context(.sources-edit-breakpoint-dialog) .link,
|
|
39
39
|
.devtools-link {
|
|
40
|
-
font-family:
|
|
40
|
+
font-family: var(--default-font-family);
|
|
41
41
|
font-size: 12px;
|
|
42
42
|
margin: 0 3px;
|
|
43
43
|
}
|
|
@@ -17,6 +17,7 @@ import * as SDK from '../../../core/sdk/sdk.js';
|
|
|
17
17
|
import * as CrUXManager from '../../../models/crux-manager/crux-manager.js';
|
|
18
18
|
import * as EmulationModel from '../../../models/emulation/emulation.js';
|
|
19
19
|
import * as LiveMetrics from '../../../models/live-metrics/live-metrics.js';
|
|
20
|
+
import type * as Spec from '../../../models/live-metrics/web-vitals-injected/spec/spec.js';
|
|
20
21
|
import * as Trace from '../../../models/trace/trace.js';
|
|
21
22
|
import * as Buttons from '../../../ui/components/buttons/buttons.js';
|
|
22
23
|
import type * as Menus from '../../../ui/components/menus/menus.js';
|
|
@@ -44,6 +45,10 @@ const DEVICE_OPTION_LIST: DeviceOption[] = ['AUTO', ...CrUXManager.DEVICE_SCOPE_
|
|
|
44
45
|
const RTT_MINIMUM = 60;
|
|
45
46
|
|
|
46
47
|
const UIStrings = {
|
|
48
|
+
/**
|
|
49
|
+
* @description Label of a badge/pill indicating that the metrics are for a soft navigation.
|
|
50
|
+
*/
|
|
51
|
+
softNavigationPillText: 'SOFT NAV',
|
|
47
52
|
/**
|
|
48
53
|
* @description Title of a view that shows performance metrics from the local environment and field metrics collected from real users. "field metrics" should be interpreted as "real user metrics".
|
|
49
54
|
*/
|
|
@@ -317,6 +322,7 @@ export interface ViewInput {
|
|
|
317
322
|
logExtraInteractionDetails: (interaction: LiveMetrics.Interaction) => void;
|
|
318
323
|
highlightedInteractionId?: string;
|
|
319
324
|
highlightedLayoutShiftClusterIds?: Set<string>;
|
|
325
|
+
navigationType?: Spec.NavigationType;
|
|
320
326
|
}
|
|
321
327
|
|
|
322
328
|
export interface ViewOutput {
|
|
@@ -1010,7 +1016,10 @@ export const DEFAULT_VIEW: View = (input, output, target) => {
|
|
|
1010
1016
|
<div class="container">
|
|
1011
1017
|
<div class="live-metrics-view">
|
|
1012
1018
|
<main class="live-metrics">
|
|
1013
|
-
<
|
|
1019
|
+
<div class="section-header">
|
|
1020
|
+
<h2 class="section-title">${liveMetricsTitle}</h2>
|
|
1021
|
+
${input.navigationType === 'soft-navigation' ? html`<span class="badge">${i18nString(UIStrings.softNavigationPillText)}</span>` : nothing}
|
|
1022
|
+
</div>
|
|
1014
1023
|
<div class="metric-cards">
|
|
1015
1024
|
<div id="lcp">
|
|
1016
1025
|
${renderLcpCard(input)}
|
|
@@ -1098,6 +1107,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
|
|
|
1098
1107
|
#lcpValue?: LiveMetrics.LcpValue;
|
|
1099
1108
|
#clsValue?: LiveMetrics.ClsValue;
|
|
1100
1109
|
#inpValue?: LiveMetrics.InpValue;
|
|
1110
|
+
#navigationType?: Spec.NavigationType;
|
|
1101
1111
|
#interactions: LiveMetrics.InteractionMap = new Map();
|
|
1102
1112
|
#layoutShifts: LiveMetrics.LayoutShift[] = [];
|
|
1103
1113
|
|
|
@@ -1125,6 +1135,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
|
|
|
1125
1135
|
this.#lcpValue = event.data.lcp;
|
|
1126
1136
|
this.#clsValue = event.data.cls;
|
|
1127
1137
|
this.#inpValue = event.data.inp;
|
|
1138
|
+
this.#navigationType = event.data.navigationType;
|
|
1128
1139
|
|
|
1129
1140
|
const hasNewLS = this.#layoutShifts.length < event.data.layoutShifts.length;
|
|
1130
1141
|
this.#layoutShifts = [...event.data.layoutShifts];
|
|
@@ -1182,6 +1193,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
|
|
|
1182
1193
|
this.#inpValue = liveMetrics.inpValue;
|
|
1183
1194
|
this.#interactions = liveMetrics.interactions;
|
|
1184
1195
|
this.#layoutShifts = liveMetrics.layoutShifts;
|
|
1196
|
+
this.#navigationType = liveMetrics.navigationType;
|
|
1185
1197
|
this.requestUpdate();
|
|
1186
1198
|
}
|
|
1187
1199
|
|
|
@@ -1249,6 +1261,7 @@ export class LiveMetricsView extends UI.Widget.Widget {
|
|
|
1249
1261
|
logExtraInteractionDetails: this.#logExtraInteractionDetails.bind(this),
|
|
1250
1262
|
highlightedInteractionId: this.#highlightedInteractionId,
|
|
1251
1263
|
highlightedLayoutShiftClusterIds: this.#highlightedLayoutShiftClusterIds,
|
|
1264
|
+
navigationType: this.#navigationType,
|
|
1252
1265
|
};
|
|
1253
1266
|
|
|
1254
1267
|
this.#view(viewInput, this.#viewOutput, this.contentElement);
|
|
@@ -394,3 +394,31 @@ devtools-link {
|
|
|
394
394
|
.node-description {
|
|
395
395
|
margin-bottom: 12px;
|
|
396
396
|
}
|
|
397
|
+
|
|
398
|
+
.section-header {
|
|
399
|
+
display: flex;
|
|
400
|
+
align-items: center;
|
|
401
|
+
gap: 8px;
|
|
402
|
+
margin-bottom: 10px;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.section-header .section-title {
|
|
406
|
+
margin-bottom: 0;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
.section-header .badge {
|
|
410
|
+
display: inline-flex;
|
|
411
|
+
align-items: center;
|
|
412
|
+
width: fit-content;
|
|
413
|
+
height: var(--sys-size-8);
|
|
414
|
+
line-height: var(--sys-size-8);
|
|
415
|
+
border-radius: var(--sys-shape-corner-extra-small);
|
|
416
|
+
padding: 0 var(--sys-size-3);
|
|
417
|
+
border: var(--sys-size-1) solid var(--sys-color-primary);
|
|
418
|
+
color: var(--sys-color-primary);
|
|
419
|
+
font-weight: var(--ref-typeface-weight-bold);
|
|
420
|
+
font-size: var(--sys-size-5);
|
|
421
|
+
text-align: center;
|
|
422
|
+
margin-top: var(--sys-size-5);
|
|
423
|
+
margin-bottom: var(--sys-size-5);
|
|
424
|
+
}
|
|
@@ -66,6 +66,10 @@ const UIStrings = {
|
|
|
66
66
|
* @description Title of a setting under the Performance category in Settings
|
|
67
67
|
*/
|
|
68
68
|
timelineShowAllEvents: 'Show all events',
|
|
69
|
+
/**
|
|
70
|
+
* @description Title of a setting under the Performance category in Settings
|
|
71
|
+
*/
|
|
72
|
+
enableSoftNavigations: 'Enable soft navigation performance monitoring',
|
|
69
73
|
/**
|
|
70
74
|
* @description Title of a setting under the Performance category in Settings
|
|
71
75
|
*/
|
|
@@ -399,6 +403,15 @@ Common.Settings.registerSettingExtension({
|
|
|
399
403
|
defaultValue: false,
|
|
400
404
|
});
|
|
401
405
|
|
|
406
|
+
Common.Settings.registerSettingExtension({
|
|
407
|
+
category: Common.Settings.SettingCategory.PERFORMANCE,
|
|
408
|
+
storageType: Common.Settings.SettingStorageType.SYNCED,
|
|
409
|
+
title: i18nLazyString(UIStrings.enableSoftNavigations),
|
|
410
|
+
settingName: 'timeline-enable-soft-navigations',
|
|
411
|
+
settingType: Common.Settings.SettingType.BOOLEAN,
|
|
412
|
+
defaultValue: true,
|
|
413
|
+
});
|
|
414
|
+
|
|
402
415
|
// IMPORTANT: if you are updating this, you should also update the setting in
|
|
403
416
|
// js_timeline-meta.
|
|
404
417
|
Common.Settings.registerSettingExtension({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Name: Dependencies sourced from the upstream `chromium` repository
|
|
2
2
|
URL: Internal
|
|
3
3
|
Version: N/A
|
|
4
|
-
Revision:
|
|
4
|
+
Revision: e5e53aeb8a8dee88dadf13158fd44662113307d2
|
|
5
5
|
Update Mechanism: Manual (https://crbug.com/428069060)
|
|
6
6
|
License: BSD-3-Clause
|
|
7
7
|
License File: LICENSE
|
|
@@ -78,7 +78,16 @@ export class AiCodeCompletionProvider {
|
|
|
78
78
|
#aiCodeGenerationConfig?: AiCodeGenerationConfig;
|
|
79
79
|
#aiCodeGenerationProvider?: AiCodeGenerationProvider;
|
|
80
80
|
|
|
81
|
-
#
|
|
81
|
+
#boundOnAidaAvailabilityChange =
|
|
82
|
+
(ev: Common.EventTarget.EventTargetEvent<Host.AidaClient.AidaAccessPreconditions>): void => {
|
|
83
|
+
this.#updateAiCodeCompletionStateWithAvailability(ev.data);
|
|
84
|
+
};
|
|
85
|
+
#boundOnSettingChange = (): void => {
|
|
86
|
+
const aidaAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
|
|
87
|
+
if (aidaAvailability !== undefined) {
|
|
88
|
+
this.#updateAiCodeCompletionStateWithAvailability(aidaAvailability);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
82
91
|
|
|
83
92
|
private constructor(aiCodeCompletionConfig: AiCodeCompletionConfig) {
|
|
84
93
|
if (!AiCodeCompletion.AiCodeCompletion.AiCodeCompletion.isAiCodeCompletionAvailable()) {
|
|
@@ -122,9 +131,9 @@ export class AiCodeCompletionProvider {
|
|
|
122
131
|
dispose(): void {
|
|
123
132
|
this.#detachTeaser();
|
|
124
133
|
this.#teaser = undefined;
|
|
125
|
-
this.#aiCodeCompletionSetting.removeChangeListener(this.#
|
|
126
|
-
Host.AidaClient.HostConfigTracker.instance().removeEventListener(
|
|
127
|
-
|
|
134
|
+
this.#aiCodeCompletionSetting.removeChangeListener(this.#boundOnSettingChange);
|
|
135
|
+
Host.AidaClient.HostConfigTracker.instance().removeEventListener(Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED,
|
|
136
|
+
this.#boundOnAidaAvailabilityChange);
|
|
128
137
|
this.#cleanupAiCodeCompletion();
|
|
129
138
|
this.#aiCodeGenerationProvider?.dispose();
|
|
130
139
|
}
|
|
@@ -139,10 +148,13 @@ export class AiCodeCompletionProvider {
|
|
|
139
148
|
this.#editor.editor.dispatch(
|
|
140
149
|
{effects: this.#teaserCompartment.reconfigure([aiCodeCompletionTeaserExtension(this.#teaser)])});
|
|
141
150
|
}
|
|
142
|
-
Host.AidaClient.HostConfigTracker.instance().addEventListener(
|
|
143
|
-
|
|
144
|
-
this.#aiCodeCompletionSetting.addChangeListener(this.#
|
|
145
|
-
|
|
151
|
+
Host.AidaClient.HostConfigTracker.instance().addEventListener(Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED,
|
|
152
|
+
this.#boundOnAidaAvailabilityChange);
|
|
153
|
+
this.#aiCodeCompletionSetting.addChangeListener(this.#boundOnSettingChange);
|
|
154
|
+
const initialAvailability = Host.AidaClient.HostConfigTracker.instance().aidaAvailability;
|
|
155
|
+
if (initialAvailability !== undefined) {
|
|
156
|
+
this.#updateAiCodeCompletionStateWithAvailability(initialAvailability);
|
|
157
|
+
}
|
|
146
158
|
this.#aiCodeGenerationProvider?.editorInitialized(editor);
|
|
147
159
|
}
|
|
148
160
|
|
|
@@ -183,8 +195,7 @@ export class AiCodeCompletionProvider {
|
|
|
183
195
|
this.#aiCodeCompletionConfig?.onFeatureDisabled();
|
|
184
196
|
}
|
|
185
197
|
|
|
186
|
-
|
|
187
|
-
const aidaAvailability = await Host.AidaClient.AidaClient.checkAccessPreconditions();
|
|
198
|
+
#updateAiCodeCompletionStateWithAvailability(aidaAvailability: Host.AidaClient.AidaAccessPreconditions): void {
|
|
188
199
|
const isAvailable = aidaAvailability === Host.AidaClient.AidaAccessPreconditions.AVAILABLE;
|
|
189
200
|
const devtoolsLocale = i18n.DevToolsLocale.DevToolsLocale.instance().locale;
|
|
190
201
|
const aiCodeCompletionEnabled =
|