chrome-devtools-frontend 1.0.1029149 → 1.0.1030070
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/config/gni/devtools_grd_files.gni +1 -0
- package/front_end/core/i18n/locales/en-US.json +6 -0
- package/front_end/core/i18n/locales/en-XL.json +6 -0
- package/front_end/generated/InspectorBackendCommands.js +3 -3
- package/front_end/generated/SupportedCSSProperties.js +2 -4
- package/front_end/generated/protocol.ts +13 -8
- package/front_end/models/issues_manager/AttributionReportingIssue.ts +11 -0
- package/front_end/models/issues_manager/DeprecationIssue.ts +10 -0
- package/front_end/models/issues_manager/descriptions/arInvalidEligibleHeader.md +19 -0
- package/front_end/panels/elements/StylePropertyTreeElement.ts +3 -23
- package/front_end/panels/elements/StylesSidebarPane.ts +31 -1
- package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +2 -0
- package/front_end/panels/network/components/RequestHeadersView.ts +44 -16
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +80 -22
- package/front_end/ui/legacy/SplitWidget.ts +2 -0
- package/front_end/ui/legacy/TextPrompt.ts +1 -1
- package/package.json +1 -1
@@ -280,6 +280,7 @@ grd_files_release_sources = [
|
|
280
280
|
"front_end/models/issues_manager/descriptions/TwaHttpError.md",
|
281
281
|
"front_end/models/issues_manager/descriptions/TwaPageUnavailableOffline.md",
|
282
282
|
"front_end/models/issues_manager/descriptions/arInsecureContext.md",
|
283
|
+
"front_end/models/issues_manager/descriptions/arInvalidEligibleHeader.md",
|
283
284
|
"front_end/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md",
|
284
285
|
"front_end/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md",
|
285
286
|
"front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md",
|
@@ -1451,6 +1451,9 @@
|
|
1451
1451
|
"models/issues_manager/DeprecationIssue.ts | openWebDatabaseInsecureContext": {
|
1452
1452
|
"message": "WebSQL in non-secure contexts is deprecated and will be removed in M107. Please use Web Storage or Indexed Database."
|
1453
1453
|
},
|
1454
|
+
"models/issues_manager/DeprecationIssue.ts | persistentQuotaType": {
|
1455
|
+
"message": "StorageType.persistent is deprecated. Please use standardized navigator.storage instead."
|
1456
|
+
},
|
1454
1457
|
"models/issues_manager/DeprecationIssue.ts | pictureSourceSrc": {
|
1455
1458
|
"message": "<source src> with a <picture> parent is invalid and therefore ignored. Please use <source srcset> instead."
|
1456
1459
|
},
|
@@ -8792,6 +8795,9 @@
|
|
8792
8795
|
"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommand": {
|
8793
8796
|
"message": "Send a raw CDP command"
|
8794
8797
|
},
|
8798
|
+
"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommandExplanation": {
|
8799
|
+
"message": "Format: 'Domain.commandName' for a command without parameters, or '{\"command\":\"Domain.commandName\", \"parameters\": {...}}' as a JSON object for a command with parameters. 'cmd'/'method' and 'args'/'params'/'arguments' are also supported as alternative keys for the JSON object."
|
8800
|
+
},
|
8795
8801
|
"panels/protocol_monitor/ProtocolMonitor.ts | session": {
|
8796
8802
|
"message": "Session"
|
8797
8803
|
},
|
@@ -1451,6 +1451,9 @@
|
|
1451
1451
|
"models/issues_manager/DeprecationIssue.ts | openWebDatabaseInsecureContext": {
|
1452
1452
|
"message": "Ŵéb̂ŚQ̂Ĺ îń n̂ón̂-śêćûŕê ćôńt̂éx̂t́ŝ íŝ d́êṕr̂éĉát̂éd̂ án̂d́ ŵíl̂ĺ b̂é r̂ém̂óv̂éd̂ ín̂ Ḿ107. P̂ĺêáŝé ûśê Ẃêb́ Ŝt́ôŕâǵê ór̂ Ín̂d́êx́êd́ D̂át̂áb̂áŝé."
|
1453
1453
|
},
|
1454
|
+
"models/issues_manager/DeprecationIssue.ts | persistentQuotaType": {
|
1455
|
+
"message": "StorageType.persistent îś d̂ép̂ŕêćât́êd́. P̂ĺêáŝé ûśê śt̂án̂d́âŕd̂íẑéd̂ navigator.storage ín̂śt̂éâd́."
|
1456
|
+
},
|
1454
1457
|
"models/issues_manager/DeprecationIssue.ts | pictureSourceSrc": {
|
1455
1458
|
"message": "<source src> ŵít̂h́ â <picture> ṕâŕêńt̂ íŝ ín̂v́âĺîd́ âńd̂ t́ĥér̂éf̂ór̂é îǵn̂ór̂éd̂. Ṕl̂éâśê úŝé <source srcset> îńŝt́êád̂."
|
1456
1459
|
},
|
@@ -8792,6 +8795,9 @@
|
|
8792
8795
|
"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommand": {
|
8793
8796
|
"message": "Ŝén̂d́ â ŕâẃ CDP ĉóm̂ḿâńd̂"
|
8794
8797
|
},
|
8798
|
+
"panels/protocol_monitor/ProtocolMonitor.ts | sendRawCDPCommandExplanation": {
|
8799
|
+
"message": "F̂ór̂ḿât́: 'Domain.commandName' f̂ór̂ á ĉóm̂ḿâńd̂ ẃît́ĥóût́ p̂ár̂ám̂ét̂ér̂ś, ôŕ '{\"command\":\"Domain.commandName\", \"parameters\": {...}}' âś â J́ŜÓN̂ ób̂j́êćt̂ f́ôŕ â ćôḿm̂án̂d́ ŵít̂h́ p̂ár̂ám̂ét̂ér̂ś. 'cmd'/'method' âńd̂ 'args'/'params'/'arguments' ár̂é âĺŝó ŝúp̂ṕôŕt̂éd̂ áŝ ál̂t́êŕn̂át̂ív̂é k̂éŷś f̂ór̂ t́ĥé JSON ôb́ĵéĉt́."
|
8800
|
+
},
|
8795
8801
|
"panels/protocol_monitor/ProtocolMonitor.ts | session": {
|
8796
8802
|
"message": "Ŝéŝśîón̂"
|
8797
8803
|
},
|
@@ -63,7 +63,7 @@ inspectorBackend.registerEnum("Audits.HeavyAdReason", {NetworkTotalLimit: "Netwo
|
|
63
63
|
inspectorBackend.registerEnum("Audits.ContentSecurityPolicyViolationType", {KInlineViolation: "kInlineViolation", KEvalViolation: "kEvalViolation", KURLViolation: "kURLViolation", KTrustedTypesSinkViolation: "kTrustedTypesSinkViolation", KTrustedTypesPolicyViolation: "kTrustedTypesPolicyViolation", KWasmEvalViolation: "kWasmEvalViolation"});
|
64
64
|
inspectorBackend.registerEnum("Audits.SharedArrayBufferIssueType", {TransferIssue: "TransferIssue", CreationIssue: "CreationIssue"});
|
65
65
|
inspectorBackend.registerEnum("Audits.TwaQualityEnforcementViolationType", {KHttpError: "kHttpError", KUnavailableOffline: "kUnavailableOffline", KDigitalAssetLinks: "kDigitalAssetLinks"});
|
66
|
-
inspectorBackend.registerEnum("Audits.AttributionReportingIssueType", {PermissionPolicyDisabled: "PermissionPolicyDisabled",
|
66
|
+
inspectorBackend.registerEnum("Audits.AttributionReportingIssueType", {PermissionPolicyDisabled: "PermissionPolicyDisabled", UntrustworthyReportingOrigin: "UntrustworthyReportingOrigin", InsecureContext: "InsecureContext", InvalidHeader: "InvalidHeader", InvalidRegisterTriggerHeader: "InvalidRegisterTriggerHeader", InvalidEligibleHeader: "InvalidEligibleHeader"});
|
67
67
|
inspectorBackend.registerEnum("Audits.GenericIssueErrorType", {CrossOriginPortalPostMessageError: "CrossOriginPortalPostMessageError"});
|
68
68
|
inspectorBackend.registerEnum("Audits.DeprecationIssueType", {AuthorizationCoveredByWildcard: "AuthorizationCoveredByWildcard", CanRequestURLHTTPContainingNewline: "CanRequestURLHTTPContainingNewline", ChromeLoadTimesConnectionInfo: "ChromeLoadTimesConnectionInfo", ChromeLoadTimesFirstPaintAfterLoadTime: "ChromeLoadTimesFirstPaintAfterLoadTime", ChromeLoadTimesWasAlternateProtocolAvailable: "ChromeLoadTimesWasAlternateProtocolAvailable", CookieWithTruncatingChar: "CookieWithTruncatingChar", CrossOriginAccessBasedOnDocumentDomain: "CrossOriginAccessBasedOnDocumentDomain", CrossOriginWindowAlert: "CrossOriginWindowAlert", CrossOriginWindowConfirm: "CrossOriginWindowConfirm", CSSSelectorInternalMediaControlsOverlayCastButton: "CSSSelectorInternalMediaControlsOverlayCastButton", DeprecationExample: "DeprecationExample", DocumentDomainSettingWithoutOriginAgentClusterHeader: "DocumentDomainSettingWithoutOriginAgentClusterHeader", EventPath: "EventPath", ExpectCTHeader: "ExpectCTHeader", GeolocationInsecureOrigin: "GeolocationInsecureOrigin", GeolocationInsecureOriginDeprecatedNotRemoved: "GeolocationInsecureOriginDeprecatedNotRemoved", GetUserMediaInsecureOrigin: "GetUserMediaInsecureOrigin", HostCandidateAttributeGetter: "HostCandidateAttributeGetter", IdentityInCanMakePaymentEvent: "IdentityInCanMakePaymentEvent", InsecurePrivateNetworkSubresourceRequest: "InsecurePrivateNetworkSubresourceRequest", LegacyConstraintGoogIPv6: "LegacyConstraintGoogIPv6", LocalCSSFileExtensionRejected: "LocalCSSFileExtensionRejected", MediaSourceAbortRemove: "MediaSourceAbortRemove", MediaSourceDurationTruncatingBuffered: "MediaSourceDurationTruncatingBuffered", NavigateEventRestoreScroll: "NavigateEventRestoreScroll", NavigateEventTransitionWhile: "NavigateEventTransitionWhile", NoSysexWebMIDIWithoutPermission: "NoSysexWebMIDIWithoutPermission", NotificationInsecureOrigin: "NotificationInsecureOrigin", NotificationPermissionRequestedIframe: "NotificationPermissionRequestedIframe", ObsoleteWebRtcCipherSuite: "ObsoleteWebRtcCipherSuite", OpenWebDatabaseInsecureContext: "OpenWebDatabaseInsecureContext", OverflowVisibleOnReplacedElement: "OverflowVisibleOnReplacedElement", PersistentQuotaType: "PersistentQuotaType", PictureSourceSrc: "PictureSourceSrc", PrefixedCancelAnimationFrame: "PrefixedCancelAnimationFrame", PrefixedRequestAnimationFrame: "PrefixedRequestAnimationFrame", PrefixedStorageInfo: "PrefixedStorageInfo", PrefixedVideoDisplayingFullscreen: "PrefixedVideoDisplayingFullscreen", PrefixedVideoEnterFullscreen: "PrefixedVideoEnterFullscreen", PrefixedVideoEnterFullScreen: "PrefixedVideoEnterFullScreen", PrefixedVideoExitFullscreen: "PrefixedVideoExitFullscreen", PrefixedVideoExitFullScreen: "PrefixedVideoExitFullScreen", PrefixedVideoSupportsFullscreen: "PrefixedVideoSupportsFullscreen", RangeExpand: "RangeExpand", RequestedSubresourceWithEmbeddedCredentials: "RequestedSubresourceWithEmbeddedCredentials", RTCConstraintEnableDtlsSrtpFalse: "RTCConstraintEnableDtlsSrtpFalse", RTCConstraintEnableDtlsSrtpTrue: "RTCConstraintEnableDtlsSrtpTrue", RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics: "RTCPeerConnectionComplexPlanBSdpUsingDefaultSdpSemantics", RTCPeerConnectionSdpSemanticsPlanB: "RTCPeerConnectionSdpSemanticsPlanB", RtcpMuxPolicyNegotiate: "RtcpMuxPolicyNegotiate", SharedArrayBufferConstructedWithoutIsolation: "SharedArrayBufferConstructedWithoutIsolation", TextToSpeech_DisallowedByAutoplay: "TextToSpeech_DisallowedByAutoplay", V8SharedArrayBufferConstructedInExtensionWithoutIsolation: "V8SharedArrayBufferConstructedInExtensionWithoutIsolation", XHRJSONEncodingDetection: "XHRJSONEncodingDetection", XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload: "XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload", XRSupportsSession: "XRSupportsSession"});
|
69
69
|
inspectorBackend.registerEnum("Audits.ClientHintIssueReason", {MetaTagAllowListInvalidOrigin: "MetaTagAllowListInvalidOrigin", MetaTagModifiedHTML: "MetaTagModifiedHTML"});
|
@@ -343,9 +343,9 @@ inspectorBackend.registerCommand("IndexedDB.deleteDatabase", [{"name": "security
|
|
343
343
|
inspectorBackend.registerCommand("IndexedDB.deleteObjectStoreEntries", [{"name": "securityOrigin", "type": "string", "optional": true}, {"name": "storageKey", "type": "string", "optional": true}, {"name": "databaseName", "type": "string", "optional": false}, {"name": "objectStoreName", "type": "string", "optional": false}, {"name": "keyRange", "type": "object", "optional": false}], []);
|
344
344
|
inspectorBackend.registerCommand("IndexedDB.disable", [], []);
|
345
345
|
inspectorBackend.registerCommand("IndexedDB.enable", [], []);
|
346
|
-
inspectorBackend.registerCommand("IndexedDB.requestData", [{"name": "securityOrigin", "type": "string", "optional":
|
346
|
+
inspectorBackend.registerCommand("IndexedDB.requestData", [{"name": "securityOrigin", "type": "string", "optional": true}, {"name": "storageKey", "type": "string", "optional": true}, {"name": "databaseName", "type": "string", "optional": false}, {"name": "objectStoreName", "type": "string", "optional": false}, {"name": "indexName", "type": "string", "optional": false}, {"name": "skipCount", "type": "number", "optional": false}, {"name": "pageSize", "type": "number", "optional": false}, {"name": "keyRange", "type": "object", "optional": true}], ["objectStoreDataEntries", "hasMore"]);
|
347
347
|
inspectorBackend.registerCommand("IndexedDB.getMetadata", [{"name": "securityOrigin", "type": "string", "optional": true}, {"name": "storageKey", "type": "string", "optional": true}, {"name": "databaseName", "type": "string", "optional": false}, {"name": "objectStoreName", "type": "string", "optional": false}], ["entriesCount", "keyGeneratorValue"]);
|
348
|
-
inspectorBackend.registerCommand("IndexedDB.requestDatabase", [{"name": "securityOrigin", "type": "string", "optional":
|
348
|
+
inspectorBackend.registerCommand("IndexedDB.requestDatabase", [{"name": "securityOrigin", "type": "string", "optional": true}, {"name": "storageKey", "type": "string", "optional": true}, {"name": "databaseName", "type": "string", "optional": false}], ["databaseWithObjectStores"]);
|
349
349
|
inspectorBackend.registerCommand("IndexedDB.requestDatabaseNames", [{"name": "securityOrigin", "type": "string", "optional": false}], ["databaseNames"]);
|
350
350
|
|
351
351
|
// Input.
|
@@ -1302,8 +1302,7 @@ export const generatedProperties = [
|
|
1302
1302
|
"keywords": [
|
1303
1303
|
"visible",
|
1304
1304
|
"auto",
|
1305
|
-
"hidden"
|
1306
|
-
"hidden-matchable"
|
1305
|
+
"hidden"
|
1307
1306
|
],
|
1308
1307
|
"name": "content-visibility"
|
1309
1308
|
},
|
@@ -4082,8 +4081,7 @@ export const generatedPropertyValues = {
|
|
4082
4081
|
"values": [
|
4083
4082
|
"visible",
|
4084
4083
|
"auto",
|
4085
|
-
"hidden"
|
4086
|
-
"hidden-matchable"
|
4084
|
+
"hidden"
|
4087
4085
|
]
|
4088
4086
|
},
|
4089
4087
|
"counter-increment": {
|
@@ -963,12 +963,11 @@ export namespace Audits {
|
|
963
963
|
|
964
964
|
export const enum AttributionReportingIssueType {
|
965
965
|
PermissionPolicyDisabled = 'PermissionPolicyDisabled',
|
966
|
-
AttributionSourceUntrustworthyOrigin = 'AttributionSourceUntrustworthyOrigin',
|
967
|
-
AttributionUntrustworthyOrigin = 'AttributionUntrustworthyOrigin',
|
968
966
|
UntrustworthyReportingOrigin = 'UntrustworthyReportingOrigin',
|
969
967
|
InsecureContext = 'InsecureContext',
|
970
968
|
InvalidHeader = 'InvalidHeader',
|
971
969
|
InvalidRegisterTriggerHeader = 'InvalidRegisterTriggerHeader',
|
970
|
+
InvalidEligibleHeader = 'InvalidEligibleHeader',
|
972
971
|
}
|
973
972
|
|
974
973
|
/**
|
@@ -977,10 +976,6 @@ export namespace Audits {
|
|
977
976
|
*/
|
978
977
|
export interface AttributionReportingIssueDetails {
|
979
978
|
violationType: AttributionReportingIssueType;
|
980
|
-
/**
|
981
|
-
* TODO(apaseltiner): Remove this once it is no longer referenced by the frontend.
|
982
|
-
*/
|
983
|
-
frame?: AffectedFrame;
|
984
979
|
request?: AffectedRequest;
|
985
980
|
violatingNodeId?: DOM.BackendNodeId;
|
986
981
|
invalidParameter?: string;
|
@@ -5919,9 +5914,14 @@ export namespace IndexedDB {
|
|
5919
5914
|
|
5920
5915
|
export interface RequestDataRequest {
|
5921
5916
|
/**
|
5917
|
+
* At least and at most one of securityOrigin, storageKey must be specified.
|
5922
5918
|
* Security origin.
|
5923
5919
|
*/
|
5924
|
-
securityOrigin
|
5920
|
+
securityOrigin?: string;
|
5921
|
+
/**
|
5922
|
+
* Storage key.
|
5923
|
+
*/
|
5924
|
+
storageKey?: string;
|
5925
5925
|
/**
|
5926
5926
|
* Database name.
|
5927
5927
|
*/
|
@@ -5994,9 +5994,14 @@ export namespace IndexedDB {
|
|
5994
5994
|
|
5995
5995
|
export interface RequestDatabaseRequest {
|
5996
5996
|
/**
|
5997
|
+
* At least and at most one of securityOrigin, storageKey must be specified.
|
5997
5998
|
* Security origin.
|
5998
5999
|
*/
|
5999
|
-
securityOrigin
|
6000
|
+
securityOrigin?: string;
|
6001
|
+
/**
|
6002
|
+
* Storage key.
|
6003
|
+
*/
|
6004
|
+
storageKey?: string;
|
6000
6005
|
/**
|
6001
6006
|
* Database name.
|
6002
6007
|
*/
|
@@ -14,6 +14,7 @@ export const enum IssueCode {
|
|
14
14
|
InsecureContext = 'AttributionReportingIssue::InsecureContext',
|
15
15
|
InvalidRegisterSourceHeader = 'AttributionReportingIssue::InvalidRegisterSourceHeader',
|
16
16
|
InvalidRegisterTriggerHeader = 'AttributionReportingIssue::InvalidRegisterTriggerHeader',
|
17
|
+
InvalidEligibleHeader = 'AttributionReportingIssue::InvalidEligibleHeader',
|
17
18
|
// TODO(apaseltiner): Remove this once old issue types are removed from
|
18
19
|
// protocol.
|
19
20
|
Unknown = 'AttributionReportingIssue::Unknown',
|
@@ -31,6 +32,8 @@ function getIssueCode(details: Protocol.Audits.AttributionReportingIssueDetails)
|
|
31
32
|
return IssueCode.InvalidRegisterSourceHeader;
|
32
33
|
case Protocol.Audits.AttributionReportingIssueType.InvalidRegisterTriggerHeader:
|
33
34
|
return IssueCode.InvalidRegisterTriggerHeader;
|
35
|
+
case Protocol.Audits.AttributionReportingIssueType.InvalidEligibleHeader:
|
36
|
+
return IssueCode.InvalidEligibleHeader;
|
34
37
|
default:
|
35
38
|
return IssueCode.Unknown;
|
36
39
|
}
|
@@ -76,6 +79,14 @@ export class AttributionReportingIssue extends Issue<IssueCode> {
|
|
76
79
|
file: 'arInvalidRegisterTriggerHeader.md',
|
77
80
|
links: [],
|
78
81
|
};
|
82
|
+
case IssueCode.InvalidEligibleHeader:
|
83
|
+
return {
|
84
|
+
file: 'arInvalidEligibleHeader.md',
|
85
|
+
links: [{
|
86
|
+
link: 'https://tools.ietf.org/id/draft-ietf-httpbis-header-structure-15.html#rfc.section.4.2.2',
|
87
|
+
linkTitle: 'Structured Headers RFC',
|
88
|
+
}],
|
89
|
+
};
|
79
90
|
case IssueCode.Unknown:
|
80
91
|
return null;
|
81
92
|
}
|
@@ -186,6 +186,11 @@ const UIStrings = {
|
|
186
186
|
*/
|
187
187
|
openWebDatabaseInsecureContext:
|
188
188
|
'WebSQL in non-secure contexts is deprecated and will be removed in M107. Please use Web Storage or Indexed Database.',
|
189
|
+
/**
|
190
|
+
* @description Warning displayed to developers when persistent storage type is used to notify that storage type is deprecated.
|
191
|
+
*/
|
192
|
+
persistentQuotaType:
|
193
|
+
'`StorageType.persistent` is deprecated. Please use standardized `navigator.storage` instead.',
|
189
194
|
/**
|
190
195
|
* @description This issue indicates that a `<source>` element with a `<picture>` parent was using an `src` attribute, which is not valid and is ignored by the browser. The `srcset` attribute should be used instead.
|
191
196
|
*/
|
@@ -446,6 +451,11 @@ export class DeprecationIssue extends Issue {
|
|
446
451
|
feature = 5175124599767040;
|
447
452
|
milestone = 105;
|
448
453
|
break;
|
454
|
+
case Protocol.Audits.DeprecationIssueType.PersistentQuotaType:
|
455
|
+
messageFunction = i18nLazyString(UIStrings.persistentQuotaType);
|
456
|
+
feature = 5176235376246784;
|
457
|
+
milestone = 106;
|
458
|
+
break;
|
449
459
|
case Protocol.Audits.DeprecationIssueType.PictureSourceSrc:
|
450
460
|
messageFunction = i18nLazyString(UIStrings.pictureSourceSrc);
|
451
461
|
break;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Ensure that the `Attribution-Reporting-Eligible` header is valid
|
2
|
+
|
3
|
+
This page sent a request containing an `Attribution-Reporting-Eligible` header,
|
4
|
+
but the header value was not a valid structured dictionary, causing any source
|
5
|
+
or trigger registration in the response to be ignored.
|
6
|
+
|
7
|
+
The header should contain a structured dictionary as follows:
|
8
|
+
|
9
|
+
To allow the response to register an event source:
|
10
|
+
`Attribution-Reporting-Eligible: event-source`
|
11
|
+
|
12
|
+
To allow the response to register a trigger:
|
13
|
+
`Attribution-Reporting-Eligible: trigger`
|
14
|
+
|
15
|
+
To allow the response to register an event source or a trigger:
|
16
|
+
`Attribution-Reporting-Eligible: event-source, trigger`
|
17
|
+
|
18
|
+
To prevent the response from registering anything:
|
19
|
+
`Attribution-Reporting-Eligible: `
|
@@ -26,6 +26,8 @@ import {cssRuleValidatorsMap, type AuthoringHint} from './CSSRuleValidator.js';
|
|
26
26
|
const FlexboxEditor = ElementsComponents.StylePropertyEditor.FlexboxEditor;
|
27
27
|
const GridEditor = ElementsComponents.StylePropertyEditor.GridEditor;
|
28
28
|
|
29
|
+
export const activeHints = new WeakMap<Element, AuthoringHint>();
|
30
|
+
|
29
31
|
const UIStrings = {
|
30
32
|
/**
|
31
33
|
*@description Text in Color Swatch Popover Icon of the Elements panel
|
@@ -719,11 +721,7 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
719
721
|
const showAuthoringHint = authoringHint !== null && this.property.parsedOk;
|
720
722
|
if (showAuthoringHint) {
|
721
723
|
const hintIcon = UI.Icon.Icon.create('mediumicon-info', 'hint');
|
722
|
-
|
723
|
-
new UI.PopoverHelper.PopoverHelper(hintIcon, event => this.handleHintPopoverRequest(authoringHint, event));
|
724
|
-
hintPopover.setHasPadding(true);
|
725
|
-
hintPopover.setTimeout(0, 100);
|
726
|
-
|
724
|
+
activeHints.set(hintIcon, authoringHint);
|
727
725
|
this.listItemElement.append(hintIcon);
|
728
726
|
}
|
729
727
|
|
@@ -836,24 +834,6 @@ export class StylePropertyTreeElement extends UI.TreeOutline.TreeElement {
|
|
836
834
|
return null;
|
837
835
|
}
|
838
836
|
|
839
|
-
private handleHintPopoverRequest(authoringHint: AuthoringHint, event: Event): UI.PopoverHelper.PopoverRequest|null {
|
840
|
-
const link = event.composedPath()[0];
|
841
|
-
Platform.DCHECK(() => link instanceof Element, 'Link is not an instance of Element');
|
842
|
-
|
843
|
-
return {
|
844
|
-
box: (link as Element).boxInWindow(),
|
845
|
-
show: async(popover: UI.GlassPane.GlassPane): Promise<boolean> => {
|
846
|
-
const node = this.node();
|
847
|
-
if (!node) {
|
848
|
-
return false;
|
849
|
-
}
|
850
|
-
const popupElement = new ElementsComponents.CSSHintDetailsView.CSSHintDetailsView(authoringHint);
|
851
|
-
popover.contentElement.insertAdjacentElement('beforeend', popupElement);
|
852
|
-
return true;
|
853
|
-
},
|
854
|
-
};
|
855
|
-
}
|
856
|
-
|
857
837
|
private mouseUp(event: MouseEvent): void {
|
858
838
|
const activeTreeElement = parentMap.get(this.parentPaneInternal);
|
859
839
|
parentMap.delete(this.parentPaneInternal);
|
@@ -60,7 +60,7 @@ import {StyleEditorWidget} from './StyleEditorWidget.js';
|
|
60
60
|
import {StylePropertyHighlighter} from './StylePropertyHighlighter.js';
|
61
61
|
import stylesSidebarPaneStyles from './stylesSidebarPane.css.js';
|
62
62
|
|
63
|
-
import {type StylePropertyTreeElement} from './StylePropertyTreeElement.js';
|
63
|
+
import {activeHints, type StylePropertyTreeElement} from './StylePropertyTreeElement.js';
|
64
64
|
import {
|
65
65
|
StylePropertiesSection,
|
66
66
|
BlankStylePropertiesSection,
|
@@ -213,6 +213,7 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
213
213
|
private needsForceUpdate: boolean;
|
214
214
|
private readonly resizeThrottler: Common.Throttler.Throttler;
|
215
215
|
private readonly imagePreviewPopover: ImagePreviewPopover;
|
216
|
+
#hintPopoverHelper: UI.PopoverHelper.PopoverHelper;
|
216
217
|
activeCSSAngle: InlineEditor.CSSAngle.CSSAngle|null;
|
217
218
|
#urlToChangeTracker: Map<Platform.DevToolsPath.UrlString, ChangeTracker> = new Map();
|
218
219
|
#copyChangesButton?: UI.Toolbar.ToolbarButton;
|
@@ -282,6 +283,35 @@ export class StylesSidebarPane extends Common.ObjectWrapper.eventMixin<EventType
|
|
282
283
|
}, () => this.node());
|
283
284
|
|
284
285
|
this.activeCSSAngle = null;
|
286
|
+
|
287
|
+
this.#hintPopoverHelper = new UI.PopoverHelper.PopoverHelper(this.contentElement, event => {
|
288
|
+
const icon = event.composedPath()[0] as Element;
|
289
|
+
|
290
|
+
if (!icon) {
|
291
|
+
return null;
|
292
|
+
}
|
293
|
+
|
294
|
+
if (!icon.matches('.hint')) {
|
295
|
+
return null;
|
296
|
+
}
|
297
|
+
|
298
|
+
const hint = activeHints.get(icon);
|
299
|
+
|
300
|
+
if (!hint) {
|
301
|
+
return null;
|
302
|
+
}
|
303
|
+
|
304
|
+
return {
|
305
|
+
box: icon.boxInWindow(),
|
306
|
+
show: async(popover: UI.GlassPane.GlassPane): Promise<boolean> => {
|
307
|
+
const popupElement = new ElementsComponents.CSSHintDetailsView.CSSHintDetailsView(hint);
|
308
|
+
popover.contentElement.appendChild(popupElement);
|
309
|
+
return true;
|
310
|
+
},
|
311
|
+
};
|
312
|
+
});
|
313
|
+
this.#hintPopoverHelper.setTimeout(200);
|
314
|
+
this.#hintPopoverHelper.setHasPadding(true);
|
285
315
|
}
|
286
316
|
|
287
317
|
swatchPopoverHelper(): InlineEditor.SwatchPopoverHelper.SwatchPopoverHelper {
|
@@ -57,6 +57,7 @@ export class AttributionReportingIssueDetailsView extends AffectedResourcesView
|
|
57
57
|
switch (issueCode) {
|
58
58
|
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidRegisterSourceHeader:
|
59
59
|
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidRegisterTriggerHeader:
|
60
|
+
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidEligibleHeader:
|
60
61
|
this.appendColumnTitle(header, i18nString(UIStrings.request));
|
61
62
|
this.appendColumnTitle(header, i18nString(UIStrings.invalidHeaderValue));
|
62
63
|
break;
|
@@ -92,6 +93,7 @@ export class AttributionReportingIssueDetailsView extends AffectedResourcesView
|
|
92
93
|
switch (issueCode) {
|
93
94
|
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidRegisterSourceHeader:
|
94
95
|
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidRegisterTriggerHeader:
|
96
|
+
case IssuesManager.AttributionReportingIssue.IssueCode.InvalidEligibleHeader:
|
95
97
|
this.#appendRequestOrEmptyCell(element, details.request);
|
96
98
|
this.appendIssueDetailCell(element, details.invalidParameter || '');
|
97
99
|
break;
|
@@ -6,7 +6,6 @@ import * as Common from '../../../core/common/common.js';
|
|
6
6
|
import * as Host from '../../../core/host/host.js';
|
7
7
|
import * as i18n from '../../../core/i18n/i18n.js';
|
8
8
|
import * as Platform from '../../../core/platform/platform.js';
|
9
|
-
import {assertNotNullOrUndefined} from '../../../core/platform/platform.js';
|
10
9
|
import * as SDK from '../../../core/sdk/sdk.js';
|
11
10
|
import * as Protocol from '../../../generated/protocol.js';
|
12
11
|
import * as IssuesManager from '../../../models/issues_manager/issues_manager.js';
|
@@ -174,12 +173,16 @@ export class RequestHeadersView extends UI.Widget.VBox {
|
|
174
173
|
wasShown(): void {
|
175
174
|
this.#request.addEventListener(SDK.NetworkRequest.Events.RemoteAddressChanged, this.#refreshHeadersView, this);
|
176
175
|
this.#request.addEventListener(SDK.NetworkRequest.Events.FinishedLoading, this.#refreshHeadersView, this);
|
176
|
+
this.#request.addEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged, this.#refreshHeadersView, this);
|
177
|
+
this.#request.addEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged, this.#refreshHeadersView, this);
|
177
178
|
this.#refreshHeadersView();
|
178
179
|
}
|
179
180
|
|
180
181
|
willHide(): void {
|
181
182
|
this.#request.removeEventListener(SDK.NetworkRequest.Events.RemoteAddressChanged, this.#refreshHeadersView, this);
|
182
183
|
this.#request.removeEventListener(SDK.NetworkRequest.Events.FinishedLoading, this.#refreshHeadersView, this);
|
184
|
+
this.#request.removeEventListener(SDK.NetworkRequest.Events.RequestHeadersChanged, this.#refreshHeadersView, this);
|
185
|
+
this.#request.removeEventListener(SDK.NetworkRequest.Events.ResponseHeadersChanged, this.#refreshHeadersView, this);
|
183
186
|
}
|
184
187
|
|
185
188
|
#refreshHeadersView(): void {
|
@@ -212,7 +215,9 @@ export class RequestHeadersComponent extends HTMLElement {
|
|
212
215
|
}
|
213
216
|
|
214
217
|
#render(): void {
|
215
|
-
|
218
|
+
if (!this.#request) {
|
219
|
+
return;
|
220
|
+
}
|
216
221
|
|
217
222
|
// Disabled until https://crbug.com/1079231 is fixed.
|
218
223
|
// clang-format off
|
@@ -224,8 +229,10 @@ export class RequestHeadersComponent extends HTMLElement {
|
|
224
229
|
// clang-format on
|
225
230
|
}
|
226
231
|
|
227
|
-
#renderResponseHeaders(): LitHtml.
|
228
|
-
|
232
|
+
#renderResponseHeaders(): LitHtml.LitTemplate {
|
233
|
+
if (!this.#request) {
|
234
|
+
return LitHtml.nothing;
|
235
|
+
}
|
229
236
|
|
230
237
|
const headersWithIssues = [];
|
231
238
|
if (this.#request.wasBlocked()) {
|
@@ -299,8 +306,10 @@ export class RequestHeadersComponent extends HTMLElement {
|
|
299
306
|
// clang-format on
|
300
307
|
}
|
301
308
|
|
302
|
-
#renderRequestHeaders(): LitHtml.
|
303
|
-
|
309
|
+
#renderRequestHeaders(): LitHtml.LitTemplate {
|
310
|
+
if (!this.#request) {
|
311
|
+
return LitHtml.nothing;
|
312
|
+
}
|
304
313
|
|
305
314
|
const headers = this.#request.requestHeaders().slice();
|
306
315
|
headers.sort(function(a, b) {
|
@@ -337,8 +346,7 @@ export class RequestHeadersComponent extends HTMLElement {
|
|
337
346
|
}
|
338
347
|
|
339
348
|
#maybeRenderProvisionalHeadersWarning(): LitHtml.LitTemplate {
|
340
|
-
|
341
|
-
if (this.#request.requestHeadersText() !== undefined) {
|
349
|
+
if (!this.#request || this.#request.requestHeadersText() !== undefined) {
|
342
350
|
return LitHtml.nothing;
|
343
351
|
}
|
344
352
|
|
@@ -381,7 +389,10 @@ export class RequestHeadersComponent extends HTMLElement {
|
|
381
389
|
LitHtml.nothing
|
382
390
|
}${header.name}:
|
383
391
|
</div>
|
384
|
-
<div
|
392
|
+
<div
|
393
|
+
class="header-value ${header.headerValueIncorrect ? 'header-warning' : ''}"
|
394
|
+
@copy=${():void => Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue)}
|
395
|
+
>
|
385
396
|
${header.value?.toString() || ''}
|
386
397
|
${this.#maybeRenderHeaderValueSuffix(header)}
|
387
398
|
</div>
|
@@ -535,8 +546,10 @@ export class RequestHeadersComponent extends HTMLElement {
|
|
535
546
|
`;
|
536
547
|
}
|
537
548
|
|
538
|
-
#renderGeneralSection(): LitHtml.
|
539
|
-
|
549
|
+
#renderGeneralSection(): LitHtml.LitTemplate {
|
550
|
+
if (!this.#request) {
|
551
|
+
return LitHtml.nothing;
|
552
|
+
}
|
540
553
|
|
541
554
|
let coloredCircleClassName = 'red-circle';
|
542
555
|
if (this.#request.statusCode < 300 || this.#request.statusCode === 304) {
|
@@ -576,28 +589,43 @@ export class RequestHeadersComponent extends HTMLElement {
|
|
576
589
|
>
|
577
590
|
<div class="row">
|
578
591
|
<div class="header-name">${i18nString(UIStrings.requestUrl)}:</div>
|
579
|
-
<div
|
592
|
+
<div
|
593
|
+
class="header-value"
|
594
|
+
@copy=${():void => Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue)}
|
595
|
+
>${this.#request.url()}</div>
|
580
596
|
</div>
|
581
597
|
${this.#request.statusCode? html`
|
582
598
|
<div class="row">
|
583
599
|
<div class="header-name">${i18nString(UIStrings.requestMethod)}:</div>
|
584
|
-
<div
|
600
|
+
<div
|
601
|
+
class="header-value"
|
602
|
+
@copy=${():void => Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue)}
|
603
|
+
>${this.#request.requestMethod}</div>
|
585
604
|
</div>
|
586
605
|
<div class="row">
|
587
606
|
<div class="header-name">${i18nString(UIStrings.statusCode)}:</div>
|
588
|
-
<div
|
607
|
+
<div
|
608
|
+
class="header-value ${coloredCircleClassName} ${statusTextHasComment ? 'status-with-comment' : ''}"
|
609
|
+
@copy=${():void => Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue)}
|
610
|
+
>${statusText}</div>
|
589
611
|
</div>
|
590
612
|
` : ''}
|
591
613
|
${this.#request.remoteAddress()? html`
|
592
614
|
<div class="row">
|
593
615
|
<div class="header-name">${i18nString(UIStrings.remoteAddress)}:</div>
|
594
|
-
<div
|
616
|
+
<div
|
617
|
+
class="header-value"
|
618
|
+
@copy=${():void => Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue)}
|
619
|
+
>${this.#request.remoteAddress()}</div>
|
595
620
|
</div>
|
596
621
|
` : ''}
|
597
622
|
${this.#request.referrerPolicy()? html`
|
598
623
|
<div class="row">
|
599
624
|
<div class="header-name">${i18nString(UIStrings.referrerPolicy)}:</div>
|
600
|
-
<div
|
625
|
+
<div
|
626
|
+
class="header-value"
|
627
|
+
@copy=${():void => Host.userMetrics.actionTaken(Host.UserMetrics.Action.NetworkPanelCopyValue)}
|
628
|
+
>${this.#request.referrerPolicy()}</div>
|
601
629
|
</div>
|
602
630
|
` : ''}
|
603
631
|
</${Category.litTagName}>
|
@@ -82,6 +82,11 @@ const UIStrings = {
|
|
82
82
|
*@description A placeholder for an input in Protocol Monitor. The input accepts commands that are sent to the backend on Enter. CDP stands for Chrome DevTools Protocol.
|
83
83
|
*/
|
84
84
|
sendRawCDPCommand: 'Send a raw `CDP` command',
|
85
|
+
/**
|
86
|
+
* @description A tooltip text for the input in the Protocol Monitor panel. The tooltip describes what format is expected.
|
87
|
+
*/
|
88
|
+
sendRawCDPCommandExplanation:
|
89
|
+
'Format: `\'Domain.commandName\'` for a command without parameters, or `\'{"command":"Domain.commandName", "parameters": {...}}\'` as a JSON object for a command with parameters. `\'cmd\'`/`\'method\'` and `\'args\'`/`\'params\'`/`\'arguments\'` are also supported as alternative keys for the `JSON` object.',
|
85
90
|
};
|
86
91
|
const str_ = i18n.i18n.registerUIStrings('panels/protocol_monitor/ProtocolMonitor.ts', UIStrings);
|
87
92
|
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
@@ -120,6 +125,8 @@ export class ProtocolMonitorImpl extends UI.Widget.VBox {
|
|
120
125
|
private messages: LogMessage[] = [];
|
121
126
|
private isRecording: boolean = false;
|
122
127
|
|
128
|
+
#historyAutocompleteDataProvider = new HistoryAutocompleteDataProvider();
|
129
|
+
|
123
130
|
constructor() {
|
124
131
|
super(true);
|
125
132
|
this.started = false;
|
@@ -287,31 +294,35 @@ export class ProtocolMonitorImpl extends UI.Widget.VBox {
|
|
287
294
|
});
|
288
295
|
topToolbar.appendToolbarItem(this.textFilterUI);
|
289
296
|
|
290
|
-
const onSend = (): void => {
|
291
|
-
const value = input.value();
|
292
|
-
// If input cannot be parsed as json, we assume it's the command name
|
293
|
-
// for a command without parameters. Otherwise, we expect an object
|
294
|
-
// with "command" and "parameters" attributes.
|
295
|
-
let json = null;
|
296
|
-
try {
|
297
|
-
json = JSON.parse(value);
|
298
|
-
} catch (err) {
|
299
|
-
}
|
300
|
-
const command = json ? json.command : value;
|
301
|
-
const parameters = json ? json.parameters : null;
|
302
|
-
const test = ProtocolClient.InspectorBackend.test;
|
303
|
-
// TODO: TS thinks that properties are read-only because
|
304
|
-
// in TS test is defined as a namespace.
|
305
|
-
// @ts-ignore
|
306
|
-
test.sendRawMessage(command, parameters, () => {});
|
307
|
-
};
|
308
|
-
const input = new UI.Toolbar.ToolbarInput(i18nString(UIStrings.sendRawCDPCommand), '', 1, .2, '', undefined, false);
|
309
|
-
input.addEventListener(UI.Toolbar.ToolbarInput.Event.EnterPressed, onSend);
|
310
297
|
const bottomToolbar = new UI.Toolbar.Toolbar('protocol-monitor-bottom-toolbar', this.contentElement);
|
311
|
-
bottomToolbar.appendToolbarItem(
|
298
|
+
bottomToolbar.appendToolbarItem(this.#createCommandInput());
|
312
299
|
}
|
313
300
|
|
314
|
-
|
301
|
+
#createCommandInput(): UI.Toolbar.ToolbarInput {
|
302
|
+
const placeholder = i18nString(UIStrings.sendRawCDPCommand);
|
303
|
+
const accessiblePlaceholder = placeholder;
|
304
|
+
const growFactor = 1;
|
305
|
+
const shrinkFactor = 0.2;
|
306
|
+
const tooltip = i18nString(UIStrings.sendRawCDPCommandExplanation);
|
307
|
+
const input = new UI.Toolbar.ToolbarInput(
|
308
|
+
placeholder, accessiblePlaceholder, growFactor, shrinkFactor, tooltip,
|
309
|
+
this.#historyAutocompleteDataProvider.buildTextPromptCompletions, false);
|
310
|
+
input.addEventListener(UI.Toolbar.ToolbarInput.Event.EnterPressed, () => this.#onCommandSend(input));
|
311
|
+
return input;
|
312
|
+
}
|
313
|
+
|
314
|
+
#onCommandSend(input: UI.Toolbar.ToolbarInput): void {
|
315
|
+
const value = input.value();
|
316
|
+
const {command, parameters} = parseCommandInput(value);
|
317
|
+
const test = ProtocolClient.InspectorBackend.test;
|
318
|
+
// TODO: TS thinks that properties are read-only because
|
319
|
+
// in TS test is defined as a namespace.
|
320
|
+
// @ts-ignore
|
321
|
+
test.sendRawMessage(command, parameters, () => {});
|
322
|
+
this.#historyAutocompleteDataProvider.addEntry(value);
|
323
|
+
}
|
324
|
+
|
325
|
+
static instance(opts: {forceNew: null|boolean} = {forceNew: null}): ProtocolMonitorImpl {
|
315
326
|
const {forceNew} = opts;
|
316
327
|
if (!protocolMonitorImplInstance || forceNew) {
|
317
328
|
protocolMonitorImplInstance = new ProtocolMonitorImpl();
|
@@ -481,6 +492,39 @@ export class ProtocolMonitorImpl extends UI.Widget.VBox {
|
|
481
492
|
}
|
482
493
|
}
|
483
494
|
|
495
|
+
export class HistoryAutocompleteDataProvider {
|
496
|
+
#maxHistorySize = 200;
|
497
|
+
#commandHistory = new Set<string>();
|
498
|
+
|
499
|
+
constructor(maxHistorySize?: number) {
|
500
|
+
if (maxHistorySize !== undefined) {
|
501
|
+
this.#maxHistorySize = maxHistorySize;
|
502
|
+
}
|
503
|
+
}
|
504
|
+
|
505
|
+
buildTextPromptCompletions =
|
506
|
+
async(expression: string, prefix: string, force?: boolean): Promise<UI.SuggestBox.Suggestions> => {
|
507
|
+
if (!prefix && !force && expression) {
|
508
|
+
return [];
|
509
|
+
}
|
510
|
+
const newestToOldest = [...this.#commandHistory].reverse();
|
511
|
+
return newestToOldest.filter(cmd => cmd.startsWith(prefix)).map(text => ({
|
512
|
+
text,
|
513
|
+
}));
|
514
|
+
};
|
515
|
+
|
516
|
+
addEntry(value: string): void {
|
517
|
+
if (this.#commandHistory.has(value)) {
|
518
|
+
this.#commandHistory.delete(value);
|
519
|
+
}
|
520
|
+
this.#commandHistory.add(value);
|
521
|
+
if (this.#commandHistory.size > this.#maxHistorySize) {
|
522
|
+
const earliestEntry = this.#commandHistory.values().next().value;
|
523
|
+
this.#commandHistory.delete(earliestEntry);
|
524
|
+
}
|
525
|
+
}
|
526
|
+
}
|
527
|
+
|
484
528
|
export class InfoWidget extends UI.Widget.VBox {
|
485
529
|
private readonly tabbedPane: UI.TabbedPane.TabbedPane;
|
486
530
|
constructor() {
|
@@ -518,3 +562,17 @@ export class InfoWidget extends UI.Widget.VBox {
|
|
518
562
|
this.tabbedPane.changeTabView('response', SourceFrame.JSONView.JSONView.createViewSync(responseParsed));
|
519
563
|
}
|
520
564
|
}
|
565
|
+
|
566
|
+
export function parseCommandInput(input: string): {command: string, parameters: unknown} {
|
567
|
+
// If input cannot be parsed as json, we assume it's the command name
|
568
|
+
// for a command without parameters. Otherwise, we expect an object
|
569
|
+
// with "command"/"method"/"cmd" and "parameters"/"params"/"args"/"arguments" attributes.
|
570
|
+
let json = null;
|
571
|
+
try {
|
572
|
+
json = JSON.parse(input);
|
573
|
+
} catch (err) {
|
574
|
+
}
|
575
|
+
const command = json ? json.command || json.method || json.cmd : input;
|
576
|
+
const parameters = json ? json.parameters || json.params || json.args || json.arguments : null;
|
577
|
+
return {command, parameters};
|
578
|
+
}
|
@@ -532,6 +532,7 @@ export class SplitWidget extends Common.ObjectWrapper.eventMixin<EventTypes, typ
|
|
532
532
|
// This order of things is important.
|
533
533
|
// 1. Resize main element early and force layout.
|
534
534
|
this.contentElement.style.setProperty(animatedMarginPropertyName, marginFrom);
|
535
|
+
this.contentElement.style.setProperty('overflow', 'hidden');
|
535
536
|
if (!reverse) {
|
536
537
|
suppressUnused(this.mainElement.offsetWidth);
|
537
538
|
suppressUnused(this.sidebarElementInternal.offsetWidth);
|
@@ -579,6 +580,7 @@ export class SplitWidget extends Common.ObjectWrapper.eventMixin<EventTypes, typ
|
|
579
580
|
this.contentElement.style.removeProperty('margin-bottom');
|
580
581
|
this.contentElement.style.removeProperty('margin-left');
|
581
582
|
this.contentElement.style.removeProperty('transition');
|
583
|
+
this.contentElement.style.removeProperty('overflow');
|
582
584
|
|
583
585
|
if (this.animationFrameHandle) {
|
584
586
|
this.contentElement.window().cancelAnimationFrame(this.animationFrameHandle);
|
@@ -89,7 +89,7 @@ export class TextPrompt extends Common.ObjectWrapper.ObjectWrapper<EventTypes> i
|
|
89
89
|
}
|
90
90
|
|
91
91
|
initialize(
|
92
|
-
completions: (this: null,
|
92
|
+
completions: (this: null, expression: string, filter: string, force?: boolean|undefined) => Promise<Suggestion[]>,
|
93
93
|
stopCharacters?: string, usesSuggestionBuilder?: boolean): void {
|
94
94
|
this.loadCompletions = completions;
|
95
95
|
this.completionStopCharacters = stopCharacters || ' =:[({;,!+-*/&|^<>.';
|
package/package.json
CHANGED