chrome-devtools-frontend 1.0.1593518 → 1.0.1595090
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/docs/contributing/settings-experiments-features.md +93 -98
- package/front_end/core/common/README.md +126 -0
- package/front_end/core/host/UserMetrics.ts +1 -2
- package/front_end/core/protocol_client/InspectorBackend.ts +4 -0
- package/front_end/core/root/ExperimentNames.ts +0 -1
- package/front_end/core/sdk/CSSModel.ts +22 -0
- package/front_end/core/sdk/CSSNavigation.ts +33 -0
- package/front_end/core/sdk/CSSRule.ts +12 -2
- package/front_end/core/sdk/EmulationModel.ts +41 -1
- package/front_end/core/sdk/sdk-meta.ts +22 -18
- package/front_end/core/sdk/sdk.ts +2 -0
- package/front_end/design_system_tokens.css +538 -259
- package/front_end/entrypoints/main/MainImpl.ts +0 -6
- package/front_end/entrypoints/main/main-meta.ts +2 -2
- package/front_end/generated/InspectorBackendCommands.ts +6 -4
- package/front_end/generated/SupportedCSSProperties.js +12 -0
- package/front_end/generated/protocol-mapping.d.ts +7 -0
- package/front_end/generated/protocol-proxy-api.d.ts +5 -0
- package/front_end/generated/protocol.ts +47 -0
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +1 -0
- package/front_end/models/emulation/DeviceModeModel.ts +47 -0
- package/front_end/models/issues_manager/Issue.ts +1 -0
- package/front_end/models/issues_manager/IssueAggregator.ts +9 -9
- package/front_end/models/issues_manager/IssuesManager.ts +5 -5
- package/front_end/models/issues_manager/SelectivePermissionsInterventionIssue.ts +65 -0
- package/front_end/models/issues_manager/descriptions/selectivePermissionsIntervention.md +7 -0
- package/front_end/models/issues_manager/issues_manager.ts +2 -4
- package/front_end/models/javascript_metadata/NativeFunctions.js +48 -9
- package/front_end/models/lighthouse/lighthouse.ts +9 -0
- package/front_end/models/persistence/persistence-meta.ts +4 -4
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +12 -1
- package/front_end/panels/ai_assistance/components/ChatInput.ts +37 -30
- package/front_end/panels/ai_assistance/components/ChatView.ts +4 -2
- package/front_end/panels/ai_assistance/components/chatInput.css +26 -1
- package/front_end/panels/application/StorageView.ts +8 -2
- package/front_end/panels/application/preloading/PreloadingView.ts +105 -7
- package/front_end/panels/application/preloading/preloadingView.css +4 -0
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +3 -0
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +3 -0
- package/front_end/panels/console/ConsoleView.ts +2 -2
- package/front_end/panels/console/console-meta.ts +18 -14
- package/front_end/panels/elements/ComputedStyleWidget.ts +12 -7
- package/front_end/panels/elements/ElementsPanel.ts +1 -1
- package/front_end/panels/elements/ElementsTreeOutline.ts +4 -6
- package/front_end/panels/elements/ImagePreviewPopover.ts +6 -9
- package/front_end/panels/elements/StylePropertiesSection.ts +30 -0
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -6
- package/front_end/panels/elements/StylesSidebarPane.ts +92 -7
- package/front_end/panels/elements/elements-meta.ts +12 -8
- package/front_end/panels/emulation/DeviceModeToolbar.ts +206 -66
- package/front_end/panels/issues/AffectedSelectivePermissionsInterventionView.ts +120 -0
- package/front_end/panels/issues/HiddenIssuesRow.ts +1 -1
- package/front_end/panels/issues/IssueKindView.ts +2 -1
- package/front_end/panels/issues/IssueView.ts +4 -4
- package/front_end/panels/issues/IssuesPane.ts +8 -2
- package/front_end/panels/issues/issues.ts +2 -0
- package/front_end/panels/lighthouse/LighthouseController.ts +3 -3
- package/front_end/panels/lighthouse/LighthousePanel.ts +9 -5
- package/front_end/panels/lighthouse/LighthouseProtocolService.ts +5 -5
- package/front_end/panels/lighthouse/LighthouseReportRenderer.ts +6 -7
- package/front_end/panels/lighthouse/LighthouseReportSelector.ts +4 -3
- package/front_end/panels/lighthouse/LighthouseStartView.ts +99 -38
- package/front_end/panels/lighthouse/LighthouseTimespanView.ts +53 -14
- package/front_end/panels/lighthouse/RadioSetting.ts +33 -19
- package/front_end/panels/lighthouse/lighthouse.ts +2 -2
- package/front_end/panels/media/PlayerMessagesView.ts +62 -49
- package/front_end/panels/media/media.ts +2 -0
- package/front_end/panels/media/playerMessagesView.css +1 -1
- package/front_end/panels/profiler/HeapSnapshotGridNodes.ts +49 -24
- package/front_end/panels/settings/FrameworkIgnoreListSettingsTab.ts +2 -2
- package/front_end/panels/sources/sources-meta.ts +8 -4
- package/front_end/panels/utils/utils.ts +11 -5
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/lit/lib/async-directive.d.ts +465 -0
- package/front_end/third_party/lit/lib/async-directive.js +23 -0
- package/front_end/third_party/lit/lib/async-directive.js.map +1 -0
- package/front_end/third_party/lit/lib/decorators.d.ts +7 -1
- package/front_end/third_party/lit/lib/decorators.js +2 -2
- package/front_end/third_party/lit/lib/decorators.js.map +1 -1
- package/front_end/third_party/lit/lib/directive.js.map +1 -1
- package/front_end/third_party/lit/lib/directives.d.ts +27 -8
- package/front_end/third_party/lit/lib/directives.js +8 -8
- package/front_end/third_party/lit/lib/directives.js.map +1 -1
- package/front_end/third_party/lit/lib/lit.d.ts +15 -5
- package/front_end/third_party/lit/lib/lit.js +4 -4
- package/front_end/third_party/lit/lib/lit.js.map +1 -1
- package/front_end/third_party/lit/lib/static-html.js +2 -2
- package/front_end/third_party/lit/lib/static-html.js.map +1 -1
- package/front_end/third_party/lit/lit.ts +2 -1
- package/front_end/third_party/lit/rollup.config.mjs +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/deno.json +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/package.json +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/decode/decode.ts +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.js.map +1 -1
- package/front_end/third_party/source-map-scopes-codec/package/src/encode/encoder.ts +2 -2
- package/front_end/ui/components/markdown_view/MarkdownLinksMap.ts +5 -0
- package/front_end/ui/legacy/SuggestBox.ts +4 -0
- package/front_end/ui/legacy/TextPrompt.ts +1 -1
- package/front_end/ui/legacy/components/utils/ImagePreview.ts +27 -23
- package/front_end/ui/lit/lit.ts +1 -0
- package/front_end/ui/visual_logging/Debugging.ts +1 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +19 -0
- package/inspector_overlay/highlight_grid_common.ts +11 -8
- package/package.json +1 -1
- package/front_end/models/issues_manager/ContrastCheckTrigger.ts +0 -78
- package/front_end/models/issues_manager/LowTextContrastIssue.ts +0 -63
- package/front_end/panels/issues/AffectedElementsWithLowContrastView.ts +0 -91
- /package/front_end/{panels → models}/lighthouse/LighthouseReporterTypes.ts +0 -0
|
@@ -399,11 +399,6 @@ export class MainImpl {
|
|
|
399
399
|
Root.ExperimentNames.ExperimentName.FONT_EDITOR, 'New font editor in the Styles tab',
|
|
400
400
|
'https://developer.chrome.com/blog/new-in-devtools-89/#font');
|
|
401
401
|
|
|
402
|
-
// Contrast issues reported via the Issues panel.
|
|
403
|
-
Root.Runtime.experiments.register(
|
|
404
|
-
Root.ExperimentNames.ExperimentName.CONTRAST_ISSUES, 'Automatic contrast issue reporting via the Issues panel',
|
|
405
|
-
'https://developer.chrome.com/blog/new-in-devtools-90/#low-contrast');
|
|
406
|
-
|
|
407
402
|
// New cookie features.
|
|
408
403
|
Root.Runtime.experiments.register(
|
|
409
404
|
Root.ExperimentNames.ExperimentName.EXPERIMENTAL_COOKIE_FEATURES, 'Experimental cookie features');
|
|
@@ -506,7 +501,6 @@ export class MainImpl {
|
|
|
506
501
|
showThirdPartyIssuesSetting: IssuesManager.Issue.getShowThirdPartyIssuesSetting(),
|
|
507
502
|
hideIssueSetting: IssuesManager.IssuesManager.getHideIssueByCodeSetting(),
|
|
508
503
|
});
|
|
509
|
-
IssuesManager.ContrastCheckTrigger.ContrastCheckTrigger.instance();
|
|
510
504
|
|
|
511
505
|
UI.DockController.DockController.instance({forceNew: true, canDock});
|
|
512
506
|
SDK.DOMDebuggerModel.DOMDebuggerManager.instance({forceNew: true});
|
|
@@ -135,11 +135,11 @@ const UIStrings = {
|
|
|
135
135
|
/**
|
|
136
136
|
* @description Title of a setting under the Appearance category in Settings
|
|
137
137
|
*/
|
|
138
|
-
enableCtrlShortcutToSwitchPanels: '
|
|
138
|
+
enableCtrlShortcutToSwitchPanels: 'Use Ctrl + 1-9 to switch panels',
|
|
139
139
|
/**
|
|
140
140
|
* @description (Mac only) Title of a setting under the Appearance category in Settings
|
|
141
141
|
*/
|
|
142
|
-
enableShortcutToSwitchPanels: '
|
|
142
|
+
enableShortcutToSwitchPanels: 'Use ⌘ + 1-9 to switch panels',
|
|
143
143
|
/**
|
|
144
144
|
* @description A drop-down menu option to dock to right
|
|
145
145
|
*/
|
|
@@ -83,7 +83,7 @@ inspectorBackend.registerEnum("Audits.SharedDictionaryError", {UseErrorCrossOrig
|
|
|
83
83
|
inspectorBackend.registerEnum("Audits.SRIMessageSignatureError", {MissingSignatureHeader: "MissingSignatureHeader", MissingSignatureInputHeader: "MissingSignatureInputHeader", InvalidSignatureHeader: "InvalidSignatureHeader", InvalidSignatureInputHeader: "InvalidSignatureInputHeader", SignatureHeaderValueIsNotByteSequence: "SignatureHeaderValueIsNotByteSequence", SignatureHeaderValueIsParameterized: "SignatureHeaderValueIsParameterized", SignatureHeaderValueIsIncorrectLength: "SignatureHeaderValueIsIncorrectLength", SignatureInputHeaderMissingLabel: "SignatureInputHeaderMissingLabel", SignatureInputHeaderValueNotInnerList: "SignatureInputHeaderValueNotInnerList", SignatureInputHeaderValueMissingComponents: "SignatureInputHeaderValueMissingComponents", SignatureInputHeaderInvalidComponentType: "SignatureInputHeaderInvalidComponentType", SignatureInputHeaderInvalidComponentName: "SignatureInputHeaderInvalidComponentName", SignatureInputHeaderInvalidHeaderComponentParameter: "SignatureInputHeaderInvalidHeaderComponentParameter", SignatureInputHeaderInvalidDerivedComponentParameter: "SignatureInputHeaderInvalidDerivedComponentParameter", SignatureInputHeaderKeyIdLength: "SignatureInputHeaderKeyIdLength", SignatureInputHeaderInvalidParameter: "SignatureInputHeaderInvalidParameter", SignatureInputHeaderMissingRequiredParameters: "SignatureInputHeaderMissingRequiredParameters", ValidationFailedSignatureExpired: "ValidationFailedSignatureExpired", ValidationFailedInvalidLength: "ValidationFailedInvalidLength", ValidationFailedSignatureMismatch: "ValidationFailedSignatureMismatch", ValidationFailedIntegrityMismatch: "ValidationFailedIntegrityMismatch"});
|
|
84
84
|
inspectorBackend.registerEnum("Audits.UnencodedDigestError", {MalformedDictionary: "MalformedDictionary", UnknownAlgorithm: "UnknownAlgorithm", IncorrectDigestType: "IncorrectDigestType", IncorrectDigestLength: "IncorrectDigestLength"});
|
|
85
85
|
inspectorBackend.registerEnum("Audits.ConnectionAllowlistError", {InvalidHeader: "InvalidHeader", MoreThanOneList: "MoreThanOneList", ItemNotInnerList: "ItemNotInnerList", InvalidAllowlistItemType: "InvalidAllowlistItemType", ReportingEndpointNotToken: "ReportingEndpointNotToken", InvalidUrlPattern: "InvalidUrlPattern"});
|
|
86
|
-
inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {FormLabelForNameError: "FormLabelForNameError", FormDuplicateIdForInputError: "FormDuplicateIdForInputError", FormInputWithNoLabelError: "FormInputWithNoLabelError", FormAutocompleteAttributeEmptyError: "FormAutocompleteAttributeEmptyError", FormEmptyIdAndNameAttributesForInputError: "FormEmptyIdAndNameAttributesForInputError", FormAriaLabelledByToNonExistingIdError: "FormAriaLabelledByToNonExistingIdError", FormInputAssignedAutocompleteValueToIdOrNameAttributeError: "FormInputAssignedAutocompleteValueToIdOrNameAttributeError", FormLabelHasNeitherForNorNestedInputError: "FormLabelHasNeitherForNorNestedInputError", FormLabelForMatchesNonExistingIdError: "FormLabelForMatchesNonExistingIdError", FormInputHasWrongButWellIntendedAutocompleteValueError: "FormInputHasWrongButWellIntendedAutocompleteValueError", ResponseWasBlockedByORB: "ResponseWasBlockedByORB", NavigationEntryMarkedSkippable: "NavigationEntryMarkedSkippable", AutofillAndManualTextPolicyControlledFeaturesInfo: "AutofillAndManualTextPolicyControlledFeaturesInfo", AutofillPolicyControlledFeatureInfo: "AutofillPolicyControlledFeatureInfo", ManualTextPolicyControlledFeatureInfo: "ManualTextPolicyControlledFeatureInfo"});
|
|
86
|
+
inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {FormLabelForNameError: "FormLabelForNameError", FormDuplicateIdForInputError: "FormDuplicateIdForInputError", FormInputWithNoLabelError: "FormInputWithNoLabelError", FormAutocompleteAttributeEmptyError: "FormAutocompleteAttributeEmptyError", FormEmptyIdAndNameAttributesForInputError: "FormEmptyIdAndNameAttributesForInputError", FormAriaLabelledByToNonExistingIdError: "FormAriaLabelledByToNonExistingIdError", FormInputAssignedAutocompleteValueToIdOrNameAttributeError: "FormInputAssignedAutocompleteValueToIdOrNameAttributeError", FormLabelHasNeitherForNorNestedInputError: "FormLabelHasNeitherForNorNestedInputError", FormLabelForMatchesNonExistingIdError: "FormLabelForMatchesNonExistingIdError", FormInputHasWrongButWellIntendedAutocompleteValueError: "FormInputHasWrongButWellIntendedAutocompleteValueError", ResponseWasBlockedByORB: "ResponseWasBlockedByORB", NavigationEntryMarkedSkippable: "NavigationEntryMarkedSkippable", AutofillAndManualTextPolicyControlledFeaturesInfo: "AutofillAndManualTextPolicyControlledFeaturesInfo", AutofillPolicyControlledFeatureInfo: "AutofillPolicyControlledFeatureInfo", ManualTextPolicyControlledFeatureInfo: "ManualTextPolicyControlledFeatureInfo", FormModelContextParameterMissingTitleAndDescription: "FormModelContextParameterMissingTitleAndDescription"});
|
|
87
87
|
inspectorBackend.registerEnum("Audits.ClientHintIssueReason", {MetaTagAllowListInvalidOrigin: "MetaTagAllowListInvalidOrigin", MetaTagModifiedHTML: "MetaTagModifiedHTML"});
|
|
88
88
|
inspectorBackend.registerEnum("Audits.FederatedAuthRequestIssueReason", {ShouldEmbargo: "ShouldEmbargo", TooManyRequests: "TooManyRequests", WellKnownHttpNotFound: "WellKnownHttpNotFound", WellKnownNoResponse: "WellKnownNoResponse", WellKnownInvalidResponse: "WellKnownInvalidResponse", WellKnownListEmpty: "WellKnownListEmpty", WellKnownInvalidContentType: "WellKnownInvalidContentType", ConfigNotInWellKnown: "ConfigNotInWellKnown", WellKnownTooBig: "WellKnownTooBig", ConfigHttpNotFound: "ConfigHttpNotFound", ConfigNoResponse: "ConfigNoResponse", ConfigInvalidResponse: "ConfigInvalidResponse", ConfigInvalidContentType: "ConfigInvalidContentType", IdpNotPotentiallyTrustworthy: "IdpNotPotentiallyTrustworthy", DisabledInSettings: "DisabledInSettings", DisabledInFlags: "DisabledInFlags", ErrorFetchingSignin: "ErrorFetchingSignin", InvalidSigninResponse: "InvalidSigninResponse", AccountsHttpNotFound: "AccountsHttpNotFound", AccountsNoResponse: "AccountsNoResponse", AccountsInvalidResponse: "AccountsInvalidResponse", AccountsListEmpty: "AccountsListEmpty", AccountsInvalidContentType: "AccountsInvalidContentType", IdTokenHttpNotFound: "IdTokenHttpNotFound", IdTokenNoResponse: "IdTokenNoResponse", IdTokenInvalidResponse: "IdTokenInvalidResponse", IdTokenIdpErrorResponse: "IdTokenIdpErrorResponse", IdTokenCrossSiteIdpErrorResponse: "IdTokenCrossSiteIdpErrorResponse", IdTokenInvalidRequest: "IdTokenInvalidRequest", IdTokenInvalidContentType: "IdTokenInvalidContentType", ErrorIdToken: "ErrorIdToken", Canceled: "Canceled", RpPageNotVisible: "RpPageNotVisible", SilentMediationFailure: "SilentMediationFailure", NotSignedInWithIdp: "NotSignedInWithIdp", MissingTransientUserActivation: "MissingTransientUserActivation", ReplacedByActiveMode: "ReplacedByActiveMode", RelyingPartyOriginIsOpaque: "RelyingPartyOriginIsOpaque", TypeNotMatching: "TypeNotMatching", UiDismissedNoEmbargo: "UiDismissedNoEmbargo", CorsError: "CorsError", SuppressedBySegmentationPlatform: "SuppressedBySegmentationPlatform"});
|
|
89
89
|
inspectorBackend.registerEnum("Audits.FederatedAuthUserInfoRequestIssueReason", {NotSameOrigin: "NotSameOrigin", NotIframe: "NotIframe", NotPotentiallyTrustworthy: "NotPotentiallyTrustworthy", NoAPIPermission: "NoApiPermission", NotSignedInWithIdp: "NotSignedInWithIdp", NoAccountSharingPermission: "NoAccountSharingPermission", InvalidConfigOrWellKnown: "InvalidConfigOrWellKnown", InvalidAccountsResponse: "InvalidAccountsResponse", NoReturningUserFromFetchedAccounts: "NoReturningUserFromFetchedAccounts"});
|
|
@@ -233,7 +233,7 @@ inspectorBackend.registerType("Browser.Histogram", [{"name": "name", "type": "st
|
|
|
233
233
|
|
|
234
234
|
// CSS.
|
|
235
235
|
inspectorBackend.registerEnum("CSS.StyleSheetOrigin", {Injected: "injected", UserAgent: "user-agent", Inspector: "inspector", Regular: "regular"});
|
|
236
|
-
inspectorBackend.registerEnum("CSS.CSSRuleType", {MediaRule: "MediaRule", SupportsRule: "SupportsRule", ContainerRule: "ContainerRule", LayerRule: "LayerRule", ScopeRule: "ScopeRule", StyleRule: "StyleRule", StartingStyleRule: "StartingStyleRule"});
|
|
236
|
+
inspectorBackend.registerEnum("CSS.CSSRuleType", {MediaRule: "MediaRule", SupportsRule: "SupportsRule", ContainerRule: "ContainerRule", LayerRule: "LayerRule", ScopeRule: "ScopeRule", StyleRule: "StyleRule", StartingStyleRule: "StartingStyleRule", NavigationRule: "NavigationRule"});
|
|
237
237
|
inspectorBackend.registerEnum("CSS.CSSMediaSource", {MediaRule: "mediaRule", ImportRule: "importRule", LinkedSheet: "linkedSheet", InlineSheet: "inlineSheet"});
|
|
238
238
|
inspectorBackend.registerEnum("CSS.CSSAtRuleType", {FontFace: "font-face", FontFeatureValues: "font-feature-values", FontPaletteValues: "font-palette-values"});
|
|
239
239
|
inspectorBackend.registerEnum("CSS.CSSAtRuleSubsection", {Swash: "swash", Annotation: "annotation", Ornaments: "ornaments", Stylistic: "stylistic", Styleset: "styleset", CharacterVariant: "character-variant"});
|
|
@@ -272,6 +272,7 @@ inspectorBackend.registerCommand("CSS.setKeyframeKey", [{"name": "styleSheetId",
|
|
|
272
272
|
inspectorBackend.registerCommand("CSS.setMediaText", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "range", "type": "object", "optional": false, "description": "", "typeRef": "CSS.SourceRange"}, {"name": "text", "type": "string", "optional": false, "description": "", "typeRef": null}], ["media"], "Modifies the rule selector.");
|
|
273
273
|
inspectorBackend.registerCommand("CSS.setContainerQueryText", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "range", "type": "object", "optional": false, "description": "", "typeRef": "CSS.SourceRange"}, {"name": "text", "type": "string", "optional": false, "description": "", "typeRef": null}], ["containerQuery"], "Modifies the expression of a container query.");
|
|
274
274
|
inspectorBackend.registerCommand("CSS.setSupportsText", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "range", "type": "object", "optional": false, "description": "", "typeRef": "CSS.SourceRange"}, {"name": "text", "type": "string", "optional": false, "description": "", "typeRef": null}], ["supports"], "Modifies the expression of a supports at-rule.");
|
|
275
|
+
inspectorBackend.registerCommand("CSS.setNavigationText", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "range", "type": "object", "optional": false, "description": "", "typeRef": "CSS.SourceRange"}, {"name": "text", "type": "string", "optional": false, "description": "", "typeRef": null}], ["navigation"], "Modifies the expression of a navigation at-rule.");
|
|
275
276
|
inspectorBackend.registerCommand("CSS.setScopeText", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "range", "type": "object", "optional": false, "description": "", "typeRef": "CSS.SourceRange"}, {"name": "text", "type": "string", "optional": false, "description": "", "typeRef": null}], ["scope"], "Modifies the expression of a scope at-rule.");
|
|
276
277
|
inspectorBackend.registerCommand("CSS.setRuleSelector", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "range", "type": "object", "optional": false, "description": "", "typeRef": "CSS.SourceRange"}, {"name": "selector", "type": "string", "optional": false, "description": "", "typeRef": null}], ["selectorList"], "Modifies the rule selector.");
|
|
277
278
|
inspectorBackend.registerCommand("CSS.setStyleSheetText", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "", "typeRef": "DOM.StyleSheetId"}, {"name": "text", "type": "string", "optional": false, "description": "", "typeRef": null}], ["sourceMapURL"], "Sets the new stylesheet text.");
|
|
@@ -290,7 +291,7 @@ inspectorBackend.registerType("CSS.Value", [{"name": "text", "type": "string", "
|
|
|
290
291
|
inspectorBackend.registerType("CSS.Specificity", [{"name": "a", "type": "number", "optional": false, "description": "The a component, which represents the number of ID selectors.", "typeRef": null}, {"name": "b", "type": "number", "optional": false, "description": "The b component, which represents the number of class selectors, attributes selectors, and pseudo-classes.", "typeRef": null}, {"name": "c", "type": "number", "optional": false, "description": "The c component, which represents the number of type selectors and pseudo-elements.", "typeRef": null}]);
|
|
291
292
|
inspectorBackend.registerType("CSS.SelectorList", [{"name": "selectors", "type": "array", "optional": false, "description": "Selectors in the list.", "typeRef": "CSS.Value"}, {"name": "text", "type": "string", "optional": false, "description": "Rule selector text.", "typeRef": null}]);
|
|
292
293
|
inspectorBackend.registerType("CSS.CSSStyleSheetHeader", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "The stylesheet identifier.", "typeRef": "DOM.StyleSheetId"}, {"name": "frameId", "type": "string", "optional": false, "description": "Owner frame identifier.", "typeRef": "Page.FrameId"}, {"name": "sourceURL", "type": "string", "optional": false, "description": "Stylesheet resource URL. Empty if this is a constructed stylesheet created using new CSSStyleSheet() (but non-empty if this is a constructed stylesheet imported as a CSS module script).", "typeRef": null}, {"name": "sourceMapURL", "type": "string", "optional": true, "description": "URL of source map associated with the stylesheet (if any).", "typeRef": null}, {"name": "origin", "type": "string", "optional": false, "description": "Stylesheet origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "title", "type": "string", "optional": false, "description": "Stylesheet title.", "typeRef": null}, {"name": "ownerNode", "type": "number", "optional": true, "description": "The backend id for the owner node of the stylesheet.", "typeRef": "DOM.BackendNodeId"}, {"name": "disabled", "type": "boolean", "optional": false, "description": "Denotes whether the stylesheet is disabled.", "typeRef": null}, {"name": "hasSourceURL", "type": "boolean", "optional": true, "description": "Whether the sourceURL field value comes from the sourceURL comment.", "typeRef": null}, {"name": "isInline", "type": "boolean", "optional": false, "description": "Whether this stylesheet is created for STYLE tag by parser. This flag is not set for document.written STYLE tags.", "typeRef": null}, {"name": "isMutable", "type": "boolean", "optional": false, "description": "Whether this stylesheet is mutable. Inline stylesheets become mutable after they have been modified via CSSOM API. `<link>` element's stylesheets become mutable only if DevTools modifies them. Constructed stylesheets (new CSSStyleSheet()) are mutable immediately after creation.", "typeRef": null}, {"name": "isConstructed", "type": "boolean", "optional": false, "description": "True if this stylesheet is created through new CSSStyleSheet() or imported as a CSS module script.", "typeRef": null}, {"name": "startLine", "type": "number", "optional": false, "description": "Line offset of the stylesheet within the resource (zero based).", "typeRef": null}, {"name": "startColumn", "type": "number", "optional": false, "description": "Column offset of the stylesheet within the resource (zero based).", "typeRef": null}, {"name": "length", "type": "number", "optional": false, "description": "Size of the content (in characters).", "typeRef": null}, {"name": "endLine", "type": "number", "optional": false, "description": "Line offset of the end of the stylesheet within the resource (zero based).", "typeRef": null}, {"name": "endColumn", "type": "number", "optional": false, "description": "Column offset of the end of the stylesheet within the resource (zero based).", "typeRef": null}, {"name": "loadingFailed", "type": "boolean", "optional": true, "description": "If the style sheet was loaded from a network resource, this indicates when the resource failed to load", "typeRef": null}]);
|
|
293
|
-
inspectorBackend.registerType("CSS.CSSRule", [{"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId"}, {"name": "selectorList", "type": "object", "optional": false, "description": "Rule selector data.", "typeRef": "CSS.SelectorList"}, {"name": "nestingSelectors", "type": "array", "optional": true, "description": "Array of selectors from ancestor style rules, sorted by distance from the current rule.", "typeRef": "string"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}, {"name": "originTreeScopeNodeId", "type": "number", "optional": true, "description": "The BackendNodeId of the DOM node that constitutes the origin tree scope of this rule.", "typeRef": "DOM.BackendNodeId"}, {"name": "media", "type": "array", "optional": true, "description": "Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSMedia"}, {"name": "containerQueries", "type": "array", "optional": true, "description": "Container query list array (for rules involving container queries). The array enumerates container queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSContainerQuery"}, {"name": "supports", "type": "array", "optional": true, "description": "@supports CSS at-rule array. The array enumerates @supports at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSSupports"}, {"name": "layers", "type": "array", "optional": true, "description": "Cascade layer array. Contains the layer hierarchy that this rule belongs to starting with the innermost layer and going outwards.", "typeRef": "CSS.CSSLayer"}, {"name": "scopes", "type": "array", "optional": true, "description": "@scope CSS at-rule array. The array enumerates @scope at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSScope"}, {"name": "ruleTypes", "type": "array", "optional": true, "description": "The array keeps the types of ancestor CSSRules from the innermost going outwards.", "typeRef": "CSS.CSSRuleType"}, {"name": "startingStyles", "type": "array", "optional": true, "description": "@starting-style CSS at-rule array. The array enumerates @starting-style at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSStartingStyle"}]);
|
|
294
|
+
inspectorBackend.registerType("CSS.CSSRule", [{"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId"}, {"name": "selectorList", "type": "object", "optional": false, "description": "Rule selector data.", "typeRef": "CSS.SelectorList"}, {"name": "nestingSelectors", "type": "array", "optional": true, "description": "Array of selectors from ancestor style rules, sorted by distance from the current rule.", "typeRef": "string"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}, {"name": "originTreeScopeNodeId", "type": "number", "optional": true, "description": "The BackendNodeId of the DOM node that constitutes the origin tree scope of this rule.", "typeRef": "DOM.BackendNodeId"}, {"name": "media", "type": "array", "optional": true, "description": "Media list array (for rules involving media queries). The array enumerates media queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSMedia"}, {"name": "containerQueries", "type": "array", "optional": true, "description": "Container query list array (for rules involving container queries). The array enumerates container queries starting with the innermost one, going outwards.", "typeRef": "CSS.CSSContainerQuery"}, {"name": "supports", "type": "array", "optional": true, "description": "@supports CSS at-rule array. The array enumerates @supports at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSSupports"}, {"name": "layers", "type": "array", "optional": true, "description": "Cascade layer array. Contains the layer hierarchy that this rule belongs to starting with the innermost layer and going outwards.", "typeRef": "CSS.CSSLayer"}, {"name": "scopes", "type": "array", "optional": true, "description": "@scope CSS at-rule array. The array enumerates @scope at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSScope"}, {"name": "ruleTypes", "type": "array", "optional": true, "description": "The array keeps the types of ancestor CSSRules from the innermost going outwards.", "typeRef": "CSS.CSSRuleType"}, {"name": "startingStyles", "type": "array", "optional": true, "description": "@starting-style CSS at-rule array. The array enumerates @starting-style at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSStartingStyle"}, {"name": "navigations", "type": "array", "optional": true, "description": "@navigation CSS at-rule array. The array enumerates @navigation at-rules starting with the innermost one, going outwards.", "typeRef": "CSS.CSSNavigation"}]);
|
|
294
295
|
inspectorBackend.registerType("CSS.RuleUsage", [{"name": "styleSheetId", "type": "string", "optional": false, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId"}, {"name": "startOffset", "type": "number", "optional": false, "description": "Offset of the start of the rule (including selector) from the beginning of the stylesheet.", "typeRef": null}, {"name": "endOffset", "type": "number", "optional": false, "description": "Offset of the end of the rule body from the beginning of the stylesheet.", "typeRef": null}, {"name": "used", "type": "boolean", "optional": false, "description": "Indicates whether the rule was actually used by some element in the page.", "typeRef": null}]);
|
|
295
296
|
inspectorBackend.registerType("CSS.SourceRange", [{"name": "startLine", "type": "number", "optional": false, "description": "Start line of range.", "typeRef": null}, {"name": "startColumn", "type": "number", "optional": false, "description": "Start column of range (inclusive).", "typeRef": null}, {"name": "endLine", "type": "number", "optional": false, "description": "End line of range", "typeRef": null}, {"name": "endColumn", "type": "number", "optional": false, "description": "End column of range (exclusive).", "typeRef": null}]);
|
|
296
297
|
inspectorBackend.registerType("CSS.ShorthandEntry", [{"name": "name", "type": "string", "optional": false, "description": "Shorthand name.", "typeRef": null}, {"name": "value", "type": "string", "optional": false, "description": "Shorthand value.", "typeRef": null}, {"name": "important", "type": "boolean", "optional": true, "description": "Whether the property has \\\"!important\\\" annotation (implies `false` if absent).", "typeRef": null}]);
|
|
@@ -303,6 +304,7 @@ inspectorBackend.registerType("CSS.MediaQuery", [{"name": "expressions", "type":
|
|
|
303
304
|
inspectorBackend.registerType("CSS.MediaQueryExpression", [{"name": "value", "type": "number", "optional": false, "description": "Media query expression value.", "typeRef": null}, {"name": "unit", "type": "string", "optional": false, "description": "Media query expression units.", "typeRef": null}, {"name": "feature", "type": "string", "optional": false, "description": "Media query expression feature.", "typeRef": null}, {"name": "valueRange", "type": "object", "optional": true, "description": "The associated range of the value text in the enclosing stylesheet (if available).", "typeRef": "CSS.SourceRange"}, {"name": "computedLength", "type": "number", "optional": true, "description": "Computed length of media query expression (if applicable).", "typeRef": null}]);
|
|
304
305
|
inspectorBackend.registerType("CSS.CSSContainerQuery", [{"name": "text", "type": "string", "optional": false, "description": "Container query text.", "typeRef": null}, {"name": "range", "type": "object", "optional": true, "description": "The associated rule header range in the enclosing stylesheet (if available).", "typeRef": "CSS.SourceRange"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "Identifier of the stylesheet containing this object (if exists).", "typeRef": "DOM.StyleSheetId"}, {"name": "name", "type": "string", "optional": true, "description": "Optional name for the container.", "typeRef": null}, {"name": "physicalAxes", "type": "string", "optional": true, "description": "Optional physical axes queried for the container.", "typeRef": "DOM.PhysicalAxes"}, {"name": "logicalAxes", "type": "string", "optional": true, "description": "Optional logical axes queried for the container.", "typeRef": "DOM.LogicalAxes"}, {"name": "queriesScrollState", "type": "boolean", "optional": true, "description": "true if the query contains scroll-state() queries.", "typeRef": null}, {"name": "queriesAnchored", "type": "boolean", "optional": true, "description": "true if the query contains anchored() queries.", "typeRef": null}]);
|
|
305
306
|
inspectorBackend.registerType("CSS.CSSSupports", [{"name": "text", "type": "string", "optional": false, "description": "Supports rule text.", "typeRef": null}, {"name": "active", "type": "boolean", "optional": false, "description": "Whether the supports condition is satisfied.", "typeRef": null}, {"name": "range", "type": "object", "optional": true, "description": "The associated rule header range in the enclosing stylesheet (if available).", "typeRef": "CSS.SourceRange"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "Identifier of the stylesheet containing this object (if exists).", "typeRef": "DOM.StyleSheetId"}]);
|
|
307
|
+
inspectorBackend.registerType("CSS.CSSNavigation", [{"name": "text", "type": "string", "optional": false, "description": "Navigation rule text.", "typeRef": null}, {"name": "active", "type": "boolean", "optional": true, "description": "Whether the navigation condition is satisfied.", "typeRef": null}, {"name": "range", "type": "object", "optional": true, "description": "The associated rule header range in the enclosing stylesheet (if available).", "typeRef": "CSS.SourceRange"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "Identifier of the stylesheet containing this object (if exists).", "typeRef": "DOM.StyleSheetId"}]);
|
|
306
308
|
inspectorBackend.registerType("CSS.CSSScope", [{"name": "text", "type": "string", "optional": false, "description": "Scope rule text.", "typeRef": null}, {"name": "range", "type": "object", "optional": true, "description": "The associated rule header range in the enclosing stylesheet (if available).", "typeRef": "CSS.SourceRange"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "Identifier of the stylesheet containing this object (if exists).", "typeRef": "DOM.StyleSheetId"}]);
|
|
307
309
|
inspectorBackend.registerType("CSS.CSSLayer", [{"name": "text", "type": "string", "optional": false, "description": "Layer name.", "typeRef": null}, {"name": "range", "type": "object", "optional": true, "description": "The associated rule header range in the enclosing stylesheet (if available).", "typeRef": "CSS.SourceRange"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "Identifier of the stylesheet containing this object (if exists).", "typeRef": "DOM.StyleSheetId"}]);
|
|
308
310
|
inspectorBackend.registerType("CSS.CSSStartingStyle", [{"name": "range", "type": "object", "optional": true, "description": "The associated rule header range in the enclosing stylesheet (if available).", "typeRef": "CSS.SourceRange"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "Identifier of the stylesheet containing this object (if exists).", "typeRef": "DOM.StyleSheetId"}]);
|
|
@@ -317,7 +319,7 @@ inspectorBackend.registerType("CSS.CSSPropertyRegistration", [{"name": "property
|
|
|
317
319
|
inspectorBackend.registerType("CSS.CSSAtRule", [{"name": "type", "type": "string", "optional": false, "description": "Type of at-rule.", "typeRef": null}, {"name": "subsection", "type": "string", "optional": true, "description": "Subsection of font-feature-values, if this is a subsection.", "typeRef": null}, {"name": "name", "type": "object", "optional": true, "description": "LINT_SKIP.ThenChange(//third_party/blink/renderer/core/inspector/inspector_style_sheet.cc:FontVariantAlternatesFeatureType,//third_party/blink/renderer/core/inspector/inspector_css_agent.cc:FontVariantAlternatesFeatureType) Associated name, if applicable.", "typeRef": "CSS.Value"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}]);
|
|
318
320
|
inspectorBackend.registerType("CSS.CSSPropertyRule", [{"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "propertyName", "type": "object", "optional": false, "description": "Associated property name.", "typeRef": "CSS.Value"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}]);
|
|
319
321
|
inspectorBackend.registerType("CSS.CSSFunctionParameter", [{"name": "name", "type": "string", "optional": false, "description": "The parameter name.", "typeRef": null}, {"name": "type", "type": "string", "optional": false, "description": "The parameter type.", "typeRef": null}]);
|
|
320
|
-
inspectorBackend.registerType("CSS.CSSFunctionConditionNode", [{"name": "media", "type": "object", "optional": true, "description": "Media query for this conditional block. Only one type of condition should be set.", "typeRef": "CSS.CSSMedia"}, {"name": "containerQueries", "type": "object", "optional": true, "description": "Container query for this conditional block. Only one type of condition should be set.", "typeRef": "CSS.CSSContainerQuery"}, {"name": "supports", "type": "object", "optional": true, "description": "@supports CSS at-rule condition. Only one type of condition should be set.", "typeRef": "CSS.CSSSupports"}, {"name": "children", "type": "array", "optional": false, "description": "Block body.", "typeRef": "CSS.CSSFunctionNode"}, {"name": "conditionText", "type": "string", "optional": false, "description": "The condition text.", "typeRef": null}]);
|
|
322
|
+
inspectorBackend.registerType("CSS.CSSFunctionConditionNode", [{"name": "media", "type": "object", "optional": true, "description": "Media query for this conditional block. Only one type of condition should be set.", "typeRef": "CSS.CSSMedia"}, {"name": "containerQueries", "type": "object", "optional": true, "description": "Container query for this conditional block. Only one type of condition should be set.", "typeRef": "CSS.CSSContainerQuery"}, {"name": "supports", "type": "object", "optional": true, "description": "@supports CSS at-rule condition. Only one type of condition should be set.", "typeRef": "CSS.CSSSupports"}, {"name": "navigation", "type": "object", "optional": true, "description": "@navigation condition. Only one type of condition should be set.", "typeRef": "CSS.CSSNavigation"}, {"name": "children", "type": "array", "optional": false, "description": "Block body.", "typeRef": "CSS.CSSFunctionNode"}, {"name": "conditionText", "type": "string", "optional": false, "description": "The condition text.", "typeRef": null}]);
|
|
321
323
|
inspectorBackend.registerType("CSS.CSSFunctionNode", [{"name": "condition", "type": "object", "optional": true, "description": "A conditional block. If set, style should not be set.", "typeRef": "CSS.CSSFunctionConditionNode"}, {"name": "style", "type": "object", "optional": true, "description": "Values set by this node. If set, condition should not be set.", "typeRef": "CSS.CSSStyle"}]);
|
|
322
324
|
inspectorBackend.registerType("CSS.CSSFunctionRule", [{"name": "name", "type": "object", "optional": false, "description": "Name of the function.", "typeRef": "CSS.Value"}, {"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "parameters", "type": "array", "optional": false, "description": "List of parameters.", "typeRef": "CSS.CSSFunctionParameter"}, {"name": "children", "type": "array", "optional": false, "description": "Function body.", "typeRef": "CSS.CSSFunctionNode"}]);
|
|
323
325
|
inspectorBackend.registerType("CSS.CSSKeyframeRule", [{"name": "styleSheetId", "type": "string", "optional": true, "description": "The css style sheet identifier (absent for user agent stylesheet and user-specified stylesheet rules) this rule came from.", "typeRef": "DOM.StyleSheetId"}, {"name": "origin", "type": "string", "optional": false, "description": "Parent stylesheet's origin.", "typeRef": "CSS.StyleSheetOrigin"}, {"name": "keyText", "type": "object", "optional": false, "description": "Associated key text.", "typeRef": "CSS.Value"}, {"name": "style", "type": "object", "optional": false, "description": "Associated style declaration.", "typeRef": "CSS.CSSStyle"}]);
|
|
@@ -623,6 +623,7 @@ export const generatedProperties = [
|
|
|
623
623
|
"page-margin-safety",
|
|
624
624
|
"page-orientation",
|
|
625
625
|
"paint-order",
|
|
626
|
+
"path-length",
|
|
626
627
|
"pathname",
|
|
627
628
|
"pattern",
|
|
628
629
|
"perspective",
|
|
@@ -3574,6 +3575,12 @@ export const generatedProperties = [
|
|
|
3574
3575
|
],
|
|
3575
3576
|
"name": "paint-order"
|
|
3576
3577
|
},
|
|
3578
|
+
{
|
|
3579
|
+
"keywords": [
|
|
3580
|
+
"none"
|
|
3581
|
+
],
|
|
3582
|
+
"name": "path-length"
|
|
3583
|
+
},
|
|
3577
3584
|
{
|
|
3578
3585
|
"name": "pathname"
|
|
3579
3586
|
},
|
|
@@ -6590,6 +6597,11 @@ export const generatedPropertyValues = {
|
|
|
6590
6597
|
"markers"
|
|
6591
6598
|
]
|
|
6592
6599
|
},
|
|
6600
|
+
"path-length": {
|
|
6601
|
+
"values": [
|
|
6602
|
+
"none"
|
|
6603
|
+
]
|
|
6604
|
+
},
|
|
6593
6605
|
"perspective": {
|
|
6594
6606
|
"values": [
|
|
6595
6607
|
"none"
|
|
@@ -1737,6 +1737,13 @@ export namespace ProtocolMapping {
|
|
|
1737
1737
|
paramsType: [Protocol.CSS.SetSupportsTextRequest];
|
|
1738
1738
|
returnType: Protocol.CSS.SetSupportsTextResponse;
|
|
1739
1739
|
};
|
|
1740
|
+
/**
|
|
1741
|
+
* Modifies the expression of a navigation at-rule.
|
|
1742
|
+
*/
|
|
1743
|
+
'CSS.setNavigationText': {
|
|
1744
|
+
paramsType: [Protocol.CSS.SetNavigationTextRequest];
|
|
1745
|
+
returnType: Protocol.CSS.SetNavigationTextResponse;
|
|
1746
|
+
};
|
|
1740
1747
|
/**
|
|
1741
1748
|
* Modifies the expression of a scope at-rule.
|
|
1742
1749
|
*/
|
|
@@ -886,6 +886,11 @@ declare namespace ProtocolProxyApi {
|
|
|
886
886
|
*/
|
|
887
887
|
invoke_setSupportsText(params: Protocol.CSS.SetSupportsTextRequest): Promise<Protocol.CSS.SetSupportsTextResponse>;
|
|
888
888
|
|
|
889
|
+
/**
|
|
890
|
+
* Modifies the expression of a navigation at-rule.
|
|
891
|
+
*/
|
|
892
|
+
invoke_setNavigationText(params: Protocol.CSS.SetNavigationTextRequest): Promise<Protocol.CSS.SetNavigationTextResponse>;
|
|
893
|
+
|
|
889
894
|
/**
|
|
890
895
|
* Modifies the expression of a scope at-rule.
|
|
891
896
|
*/
|
|
@@ -1221,6 +1221,7 @@ export namespace Audits {
|
|
|
1221
1221
|
AutofillAndManualTextPolicyControlledFeaturesInfo = 'AutofillAndManualTextPolicyControlledFeaturesInfo',
|
|
1222
1222
|
AutofillPolicyControlledFeatureInfo = 'AutofillPolicyControlledFeatureInfo',
|
|
1223
1223
|
ManualTextPolicyControlledFeatureInfo = 'ManualTextPolicyControlledFeatureInfo',
|
|
1224
|
+
FormModelContextParameterMissingTitleAndDescription = 'FormModelContextParameterMissingTitleAndDescription',
|
|
1224
1225
|
}
|
|
1225
1226
|
|
|
1226
1227
|
/**
|
|
@@ -3033,6 +3034,11 @@ export namespace CSS {
|
|
|
3033
3034
|
* The array enumerates @starting-style at-rules starting with the innermost one, going outwards.
|
|
3034
3035
|
*/
|
|
3035
3036
|
startingStyles?: CSSStartingStyle[];
|
|
3037
|
+
/**
|
|
3038
|
+
* @navigation CSS at-rule array.
|
|
3039
|
+
* The array enumerates @navigation at-rules starting with the innermost one, going outwards.
|
|
3040
|
+
*/
|
|
3041
|
+
navigations?: CSSNavigation[];
|
|
3036
3042
|
}
|
|
3037
3043
|
|
|
3038
3044
|
/**
|
|
@@ -3047,6 +3053,7 @@ export namespace CSS {
|
|
|
3047
3053
|
ScopeRule = 'ScopeRule',
|
|
3048
3054
|
StyleRule = 'StyleRule',
|
|
3049
3055
|
StartingStyleRule = 'StartingStyleRule',
|
|
3056
|
+
NavigationRule = 'NavigationRule',
|
|
3050
3057
|
}
|
|
3051
3058
|
|
|
3052
3059
|
/**
|
|
@@ -3342,6 +3349,29 @@ export namespace CSS {
|
|
|
3342
3349
|
styleSheetId?: DOM.StyleSheetId;
|
|
3343
3350
|
}
|
|
3344
3351
|
|
|
3352
|
+
/**
|
|
3353
|
+
* CSS Navigation at-rule descriptor.
|
|
3354
|
+
*/
|
|
3355
|
+
export interface CSSNavigation {
|
|
3356
|
+
/**
|
|
3357
|
+
* Navigation rule text.
|
|
3358
|
+
*/
|
|
3359
|
+
text: string;
|
|
3360
|
+
/**
|
|
3361
|
+
* Whether the navigation condition is satisfied.
|
|
3362
|
+
*/
|
|
3363
|
+
active?: boolean;
|
|
3364
|
+
/**
|
|
3365
|
+
* The associated rule header range in the enclosing stylesheet (if
|
|
3366
|
+
* available).
|
|
3367
|
+
*/
|
|
3368
|
+
range?: SourceRange;
|
|
3369
|
+
/**
|
|
3370
|
+
* Identifier of the stylesheet containing this object (if exists).
|
|
3371
|
+
*/
|
|
3372
|
+
styleSheetId?: DOM.StyleSheetId;
|
|
3373
|
+
}
|
|
3374
|
+
|
|
3345
3375
|
/**
|
|
3346
3376
|
* CSS Scope at-rule descriptor.
|
|
3347
3377
|
*/
|
|
@@ -3676,6 +3706,10 @@ export namespace CSS {
|
|
|
3676
3706
|
* @supports CSS at-rule condition. Only one type of condition should be set.
|
|
3677
3707
|
*/
|
|
3678
3708
|
supports?: CSSSupports;
|
|
3709
|
+
/**
|
|
3710
|
+
* @navigation condition. Only one type of condition should be set.
|
|
3711
|
+
*/
|
|
3712
|
+
navigation?: CSSNavigation;
|
|
3679
3713
|
/**
|
|
3680
3714
|
* Block body.
|
|
3681
3715
|
*/
|
|
@@ -4165,6 +4199,19 @@ export namespace CSS {
|
|
|
4165
4199
|
supports: CSSSupports;
|
|
4166
4200
|
}
|
|
4167
4201
|
|
|
4202
|
+
export interface SetNavigationTextRequest {
|
|
4203
|
+
styleSheetId: DOM.StyleSheetId;
|
|
4204
|
+
range: SourceRange;
|
|
4205
|
+
text: string;
|
|
4206
|
+
}
|
|
4207
|
+
|
|
4208
|
+
export interface SetNavigationTextResponse extends ProtocolResponseWithError {
|
|
4209
|
+
/**
|
|
4210
|
+
* The resulting CSS Navigation rule after modification.
|
|
4211
|
+
*/
|
|
4212
|
+
navigation: CSSNavigation;
|
|
4213
|
+
}
|
|
4214
|
+
|
|
4168
4215
|
export interface SetScopeTextRequest {
|
|
4169
4216
|
styleSheetId: DOM.StyleSheetId;
|
|
4170
4217
|
range: SourceRange;
|
|
@@ -113,6 +113,7 @@ export class DeviceModeModel extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
113
113
|
#emulationModel: SDK.EmulationModel.EmulationModel|null;
|
|
114
114
|
#onModelAvailable: (() => void)|null;
|
|
115
115
|
#outlineRect?: Rect;
|
|
116
|
+
#screenOrientationLocked: boolean;
|
|
116
117
|
|
|
117
118
|
private constructor() {
|
|
118
119
|
super();
|
|
@@ -172,6 +173,7 @@ export class DeviceModeModel extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
172
173
|
|
|
173
174
|
this.#emulationModel = null;
|
|
174
175
|
this.#onModelAvailable = null;
|
|
176
|
+
this.#screenOrientationLocked = false;
|
|
175
177
|
SDK.TargetManager.TargetManager.instance().observeModels(SDK.EmulationModel.EmulationModel, this);
|
|
176
178
|
}
|
|
177
179
|
|
|
@@ -442,6 +444,9 @@ export class DeviceModeModel extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
442
444
|
this.#onModelAvailable = null;
|
|
443
445
|
callback();
|
|
444
446
|
}
|
|
447
|
+
emulationModel.addEventListener(
|
|
448
|
+
SDK.EmulationModel.EmulationModelEvents.SCREEN_ORIENTATION_LOCK_CHANGED, this.onScreenOrientationLockChanged,
|
|
449
|
+
this);
|
|
445
450
|
const resourceTreeModel = emulationModel.target().model(SDK.ResourceTreeModel.ResourceTreeModel);
|
|
446
451
|
if (resourceTreeModel) {
|
|
447
452
|
resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameResized, this.onFrameChange, this);
|
|
@@ -454,7 +459,12 @@ export class DeviceModeModel extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
454
459
|
|
|
455
460
|
modelRemoved(emulationModel: SDK.EmulationModel.EmulationModel): void {
|
|
456
461
|
if (this.#emulationModel === emulationModel) {
|
|
462
|
+
emulationModel.removeEventListener(
|
|
463
|
+
SDK.EmulationModel.EmulationModelEvents.SCREEN_ORIENTATION_LOCK_CHANGED, this.onScreenOrientationLockChanged,
|
|
464
|
+
this);
|
|
457
465
|
this.#emulationModel = null;
|
|
466
|
+
this.#screenOrientationLocked = false;
|
|
467
|
+
this.dispatchEventToListeners(Events.UPDATED);
|
|
458
468
|
}
|
|
459
469
|
}
|
|
460
470
|
|
|
@@ -471,6 +481,43 @@ export class DeviceModeModel extends Common.ObjectWrapper.ObjectWrapper<EventTyp
|
|
|
471
481
|
this.showHingeIfApplicable(overlayModel);
|
|
472
482
|
}
|
|
473
483
|
|
|
484
|
+
private onScreenOrientationLockChanged(
|
|
485
|
+
event: Common.EventTarget.EventTargetEvent<SDK.EmulationModel.ScreenOrientationLockChangedEvent>): void {
|
|
486
|
+
this.#screenOrientationLocked = event.data.locked;
|
|
487
|
+
if (event.data.locked && event.data.orientation) {
|
|
488
|
+
this.applyOrientationLock(event.data.orientation);
|
|
489
|
+
}
|
|
490
|
+
this.dispatchEventToListeners(Events.UPDATED);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
private applyOrientationLock(orientation: Protocol.Emulation.ScreenOrientation): void {
|
|
494
|
+
const wantsLandscape = orientation.type === Protocol.Emulation.ScreenOrientationType.LandscapePrimary ||
|
|
495
|
+
orientation.type === Protocol.Emulation.ScreenOrientationType.LandscapeSecondary;
|
|
496
|
+
|
|
497
|
+
if (this.#type === Type.Device && this.#device && this.#mode) {
|
|
498
|
+
// For device emulation, switch to the matching orientation mode.
|
|
499
|
+
const isCurrentlyLandscape =
|
|
500
|
+
this.#mode.orientation === Horizontal || this.#mode.orientation === HorizontalSpanned;
|
|
501
|
+
if (wantsLandscape !== isCurrentlyLandscape) {
|
|
502
|
+
const rotationPartner = this.#device.getRotationPartner(this.#mode);
|
|
503
|
+
if (rotationPartner) {
|
|
504
|
+
this.emulate(this.#type, this.#device, rotationPartner);
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
} else if (this.#type === Type.Responsive) {
|
|
508
|
+
// For responsive mode, swap width/height if orientation doesn't match.
|
|
509
|
+
const appliedSize = this.appliedDeviceSize();
|
|
510
|
+
const isCurrentlyLandscape = appliedSize.width > appliedSize.height;
|
|
511
|
+
if (wantsLandscape !== isCurrentlyLandscape) {
|
|
512
|
+
this.setSizeAndScaleToFit(appliedSize.height, appliedSize.width);
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
isScreenOrientationLocked(): boolean {
|
|
518
|
+
return this.#screenOrientationLocked;
|
|
519
|
+
}
|
|
520
|
+
|
|
474
521
|
private scaleSettingChanged(): void {
|
|
475
522
|
this.calculateAndEmulate(false);
|
|
476
523
|
}
|
|
@@ -52,6 +52,7 @@ export const enum IssueCategory {
|
|
|
52
52
|
ATTRIBUTION_REPORTING = 'AttributionReporting',
|
|
53
53
|
QUIRKS_MODE = 'QuirksMode',
|
|
54
54
|
PERMISSION_ELEMENT = 'PermissionElement',
|
|
55
|
+
SELECTIVE_PERMISSIONS_INTERVENTION = 'SelectivePermissionsIntervention',
|
|
55
56
|
OTHER = 'Other',
|
|
56
57
|
}
|
|
57
58
|
|
|
@@ -17,12 +17,12 @@ import {HeavyAdIssue} from './HeavyAdIssue.js';
|
|
|
17
17
|
import {Issue, IssueCategory, IssueKind, unionIssueKind} from './Issue.js';
|
|
18
18
|
import type {EventTypes as IssuesManagerEventsTypes, IssueAddedEvent} from './IssuesManager.js';
|
|
19
19
|
import {Events as IssuesManagerEvents} from './IssuesManagerEvents.js';
|
|
20
|
-
import {LowTextContrastIssue} from './LowTextContrastIssue.js';
|
|
21
20
|
import type {MarkdownIssueDescription} from './MarkdownIssueDescription.js';
|
|
22
21
|
import {MixedContentIssue} from './MixedContentIssue.js';
|
|
23
22
|
import {PartitioningBlobURLIssue} from './PartitioningBlobURLIssue.js';
|
|
24
23
|
import {PermissionElementIssue} from './PermissionElementIssue.js';
|
|
25
24
|
import {QuirksModeIssue} from './QuirksModeIssue.js';
|
|
25
|
+
import {SelectivePermissionsInterventionIssue} from './SelectivePermissionsInterventionIssue.js';
|
|
26
26
|
import {SharedArrayBufferIssue} from './SharedArrayBufferIssue.js';
|
|
27
27
|
|
|
28
28
|
export interface IssuesProvider extends Common.EventTarget.EventTarget<IssuesManagerEventsTypes> {
|
|
@@ -64,11 +64,11 @@ export class AggregatedIssue extends Issue {
|
|
|
64
64
|
#cspIssues = new Set<ContentSecurityPolicyIssue>();
|
|
65
65
|
#deprecationIssues = new Set<DeprecationIssue>();
|
|
66
66
|
#issueKind = IssueKind.IMPROVEMENT;
|
|
67
|
-
#lowContrastIssues = new Set<LowTextContrastIssue>();
|
|
68
67
|
#cookieDeprecationMetadataIssues = new Set<CookieDeprecationMetadataIssue>();
|
|
69
68
|
#mixedContentIssues = new Set<MixedContentIssue>();
|
|
70
69
|
#partitioningBlobURLIssues = new Set<PartitioningBlobURLIssue>();
|
|
71
70
|
#permissionElementIssues = new Set<PermissionElementIssue>();
|
|
71
|
+
#selectivePermissionsInterventionIssues = new Set<SelectivePermissionsInterventionIssue>();
|
|
72
72
|
#sharedArrayBufferIssues = new Set<SharedArrayBufferIssue>();
|
|
73
73
|
#quirksModeIssues = new Set<QuirksModeIssue>();
|
|
74
74
|
#attributionReportingIssues = new Set<AttributionReportingIssue>();
|
|
@@ -142,14 +142,14 @@ export class AggregatedIssue extends Issue {
|
|
|
142
142
|
return this.#deprecationIssues;
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
getLowContrastIssues(): Iterable<LowTextContrastIssue> {
|
|
146
|
-
return this.#lowContrastIssues;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
145
|
override requests(): Iterable<Protocol.Audits.AffectedRequest> {
|
|
150
146
|
return this.#affectedRequests.values();
|
|
151
147
|
}
|
|
152
148
|
|
|
149
|
+
getSelectivePermissionsInterventionIssues(): Iterable<SelectivePermissionsInterventionIssue> {
|
|
150
|
+
return this.#selectivePermissionsInterventionIssues;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
153
|
getSharedArrayBufferIssues(): Iterable<SharedArrayBufferIssue> {
|
|
154
154
|
return this.#sharedArrayBufferIssues;
|
|
155
155
|
}
|
|
@@ -267,9 +267,6 @@ export class AggregatedIssue extends Issue {
|
|
|
267
267
|
if (issue instanceof SharedArrayBufferIssue) {
|
|
268
268
|
this.#sharedArrayBufferIssues.add(issue);
|
|
269
269
|
}
|
|
270
|
-
if (issue instanceof LowTextContrastIssue) {
|
|
271
|
-
this.#lowContrastIssues.add(issue);
|
|
272
|
-
}
|
|
273
270
|
if (issue instanceof CorsIssue) {
|
|
274
271
|
this.#corsIssues.add(issue);
|
|
275
272
|
}
|
|
@@ -291,6 +288,9 @@ export class AggregatedIssue extends Issue {
|
|
|
291
288
|
if (issue instanceof PermissionElementIssue) {
|
|
292
289
|
this.#permissionElementIssues.add(issue);
|
|
293
290
|
}
|
|
291
|
+
if (issue instanceof SelectivePermissionsInterventionIssue) {
|
|
292
|
+
this.#selectivePermissionsInterventionIssues.add(issue);
|
|
293
|
+
}
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
getKind(): IssueKind {
|
|
@@ -22,12 +22,12 @@ import {GenericIssue} from './GenericIssue.js';
|
|
|
22
22
|
import {HeavyAdIssue} from './HeavyAdIssue.js';
|
|
23
23
|
import type {Issue, IssueKind} from './Issue.js';
|
|
24
24
|
import {Events} from './IssuesManagerEvents.js';
|
|
25
|
-
import {LowTextContrastIssue} from './LowTextContrastIssue.js';
|
|
26
25
|
import {MixedContentIssue} from './MixedContentIssue.js';
|
|
27
26
|
import {PartitioningBlobURLIssue} from './PartitioningBlobURLIssue.js';
|
|
28
27
|
import {PermissionElementIssue} from './PermissionElementIssue.js';
|
|
29
28
|
import {PropertyRuleIssue} from './PropertyRuleIssue.js';
|
|
30
29
|
import {QuirksModeIssue} from './QuirksModeIssue.js';
|
|
30
|
+
import {SelectivePermissionsInterventionIssue} from './SelectivePermissionsInterventionIssue.js';
|
|
31
31
|
import {SharedArrayBufferIssue} from './SharedArrayBufferIssue.js';
|
|
32
32
|
import {SharedDictionaryIssue} from './SharedDictionaryIssue.js';
|
|
33
33
|
import {SourceFrameIssuesManager} from './SourceFrameIssuesManager.js';
|
|
@@ -81,10 +81,6 @@ const issueCodeHandlers = new Map<
|
|
|
81
81
|
Protocol.Audits.InspectorIssueCode.SharedDictionaryIssue,
|
|
82
82
|
SharedDictionaryIssue.fromInspectorIssue,
|
|
83
83
|
],
|
|
84
|
-
[
|
|
85
|
-
Protocol.Audits.InspectorIssueCode.LowTextContrastIssue,
|
|
86
|
-
LowTextContrastIssue.fromInspectorIssue,
|
|
87
|
-
],
|
|
88
84
|
[
|
|
89
85
|
Protocol.Audits.InspectorIssueCode.CorsIssue,
|
|
90
86
|
CorsIssue.fromInspectorIssue,
|
|
@@ -153,6 +149,10 @@ const issueCodeHandlers = new Map<
|
|
|
153
149
|
Protocol.Audits.InspectorIssueCode.PermissionElementIssue,
|
|
154
150
|
PermissionElementIssue.fromInspectorIssue,
|
|
155
151
|
],
|
|
152
|
+
[
|
|
153
|
+
Protocol.Audits.InspectorIssueCode.SelectivePermissionsInterventionIssue,
|
|
154
|
+
SelectivePermissionsInterventionIssue.fromInspectorIssue,
|
|
155
|
+
],
|
|
156
156
|
]);
|
|
157
157
|
|
|
158
158
|
/**
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Copyright 2026 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
|
|
5
|
+
import * as i18n from '../../core/i18n/i18n.js';
|
|
6
|
+
import type * as SDK from '../../core/sdk/sdk.js';
|
|
7
|
+
import * as Protocol from '../../generated/protocol.js';
|
|
8
|
+
|
|
9
|
+
import {Issue, IssueCategory, IssueKind} from './Issue.js';
|
|
10
|
+
import type {MarkdownIssueDescription} from './MarkdownIssueDescription.js';
|
|
11
|
+
|
|
12
|
+
const UIStrings = {
|
|
13
|
+
/**
|
|
14
|
+
* @description Title for a learn more link in Selective Permissions Intervention issue description
|
|
15
|
+
*/
|
|
16
|
+
selectivePermissionsIntervention: 'Selective Permissions Intervention',
|
|
17
|
+
} as const;
|
|
18
|
+
const str_ = i18n.i18n.registerUIStrings('models/issues_manager/SelectivePermissionsInterventionIssue.ts', UIStrings);
|
|
19
|
+
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
20
|
+
|
|
21
|
+
export class SelectivePermissionsInterventionIssue extends
|
|
22
|
+
Issue<Protocol.Audits.SelectivePermissionsInterventionIssueDetails> {
|
|
23
|
+
constructor(
|
|
24
|
+
issueDetails: Protocol.Audits.SelectivePermissionsInterventionIssueDetails,
|
|
25
|
+
issuesModel: SDK.IssuesModel.IssuesModel|null) {
|
|
26
|
+
super(Protocol.Audits.InspectorIssueCode.SelectivePermissionsInterventionIssue, issueDetails, issuesModel);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
primaryKey(): string {
|
|
30
|
+
return `${Protocol.Audits.InspectorIssueCode.SelectivePermissionsInterventionIssue}-${
|
|
31
|
+
JSON.stringify(this.details())}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
getDescription(): MarkdownIssueDescription {
|
|
35
|
+
return {
|
|
36
|
+
file: 'selectivePermissionsIntervention.md',
|
|
37
|
+
links: [
|
|
38
|
+
{
|
|
39
|
+
link: 'https://crbug.com/435223477',
|
|
40
|
+
linkTitle: i18nString(UIStrings.selectivePermissionsIntervention),
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
getCategory(): IssueCategory {
|
|
47
|
+
return IssueCategory.SELECTIVE_PERMISSIONS_INTERVENTION;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
getKind(): IssueKind {
|
|
51
|
+
return IssueKind.PAGE_ERROR;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static fromInspectorIssue(
|
|
55
|
+
issuesModel: SDK.IssuesModel.IssuesModel|null,
|
|
56
|
+
inspectorIssue: Protocol.Audits.InspectorIssue): SelectivePermissionsInterventionIssue[] {
|
|
57
|
+
const selectivePermissionsInterventionIssueDetails =
|
|
58
|
+
inspectorIssue.details.selectivePermissionsInterventionIssueDetails;
|
|
59
|
+
if (!selectivePermissionsInterventionIssueDetails) {
|
|
60
|
+
console.warn('Selective Permissions Intervention issue without details received.');
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
return [new SelectivePermissionsInterventionIssue(selectivePermissionsInterventionIssueDetails, issuesModel)];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Selective Permissions Intervention
|
|
2
|
+
|
|
3
|
+
The Selective Permissions Intervention blocks calls to privacy-sensitive APIs when they are called from ad scripts in order to align the permission grant with the user's intent. The particular API that was blocked, the call-stack that triggered the intervention, and why the script that called the API is considered ad-related is shown below.
|
|
4
|
+
|
|
5
|
+
Note that Chrome considers any script with a URL that matches a rule in the [filterlist](ChromeFilterlistRepository) as ad script, and the matching rule is shown in the Ad Ancestry section. In addition, any script loaded while an ad script is in the JavaScript stack will also be considered an ad script by Chrome and is also shown in Ad Ancestry.
|
|
6
|
+
|
|
7
|
+
If you believe this intervention was in error (e.g., this call would occur even when loading the page with an ad blocker enabled), then please [file a bug](SelectivePermissionsInterventionIssue).
|