diff --git a/DEPS b/DEPS index 62ce0d2daf..768e6f481a 100644 --- a/DEPS +++ b/DEPS @@ -35,11 +35,11 @@ vars = { # Chromium build number for unit tests. It should be regularly updated to # the content of https://commondatastorage.googleapis.com/chromium-browser-snapshots/Linux_x64/LAST_CHANGE - 'chromium_linux': '942034', + 'chromium_linux': '942467', # the content of https://commondatastorage.googleapis.com/chromium-browser-snapshots/Win_x64/LAST_CHANGE - 'chromium_win': '942024', + 'chromium_win': '942465', # the content of https://commondatastorage.googleapis.com/chromium-browser-snapshots/Mac/LAST_CHANGE - 'chromium_mac': '942025', + 'chromium_mac': '942467', } # Only these hosts are allowed for dependencies in this DEPS file. diff --git a/front_end/generated/InspectorBackendCommands.js b/front_end/generated/InspectorBackendCommands.js index 27a64733e8..1c2cfdd256 100644 --- a/front_end/generated/InspectorBackendCommands.js +++ b/front_end/generated/InspectorBackendCommands.js @@ -98,6 +98,8 @@ export function registerCommands(inspectorBackend) { Labelledby: 'labelledby', Owns: 'owns' }); + inspectorBackend.registerEvent('Accessibility.loadComplete', ['root']); + inspectorBackend.registerEvent('Accessibility.nodesUpdated', ['nodes']); inspectorBackend.registerCommand('Accessibility.disable', [], []); inspectorBackend.registerCommand('Accessibility.enable', [], []); inspectorBackend.registerCommand( @@ -117,6 +119,16 @@ export function registerCommands(inspectorBackend) { {'name': 'frameId', 'type': 'string', 'optional': true} ], ['nodes']); + inspectorBackend.registerCommand( + 'Accessibility.getRootAXNode', [{'name': 'frameId', 'type': 'string', 'optional': true}], ['node']); + inspectorBackend.registerCommand( + 'Accessibility.getAXNodeAndAncestors', + [ + {'name': 'nodeId', 'type': 'number', 'optional': true}, + {'name': 'backendNodeId', 'type': 'number', 'optional': true}, + {'name': 'objectId', 'type': 'string', 'optional': true} + ], + ['nodes']); inspectorBackend.registerCommand( 'Accessibility.getChildAXNodes', [{'name': 'id', 'type': 'string', 'optional': false}, {'name': 'frameId', 'type': 'string', 'optional': true}], @@ -1994,6 +2006,7 @@ export function registerCommands(inspectorBackend) { Hid: 'hid', IdleDetection: 'idle-detection', InterestCohort: 'interest-cohort', + JoinAdInterestGroup: 'join-ad-interest-group', KeyboardMap: 'keyboard-map', Magnetometer: 'magnetometer', Microphone: 'microphone', @@ -2002,6 +2015,7 @@ export function registerCommands(inspectorBackend) { Payment: 'payment', PictureInPicture: 'picture-in-picture', PublickeyCredentialsGet: 'publickey-credentials-get', + RunAdAuction: 'run-ad-auction', ScreenWakeLock: 'screen-wake-lock', Serial: 'serial', SharedAutofill: 'shared-autofill', @@ -2453,6 +2467,10 @@ export function registerCommands(inspectorBackend) { [{'name': 'url', 'type': 'string', 'optional': false}, {'name': 'data', 'type': 'string', 'optional': false}], []); inspectorBackend.registerCommand('Page.clearCompilationCache', [], []); + inspectorBackend.registerEnum( + 'Page.SetSPCTransactionModeRequestMode', {None: 'none', Autoaccept: 'autoaccept', Autoreject: 'autoreject'}); + inspectorBackend.registerCommand( + 'Page.setSPCTransactionMode', [{'name': 'mode', 'type': 'string', 'optional': false}], []); inspectorBackend.registerCommand( 'Page.generateTestReport', [{'name': 'message', 'type': 'string', 'optional': false}, {'name': 'group', 'type': 'string', 'optional': true}], diff --git a/front_end/generated/protocol-mapping.d.ts b/front_end/generated/protocol-mapping.d.ts index 4f2ceaa6ac..78edbc195e 100644 --- a/front_end/generated/protocol-mapping.d.ts +++ b/front_end/generated/protocol-mapping.d.ts @@ -12,6 +12,15 @@ */ export namespace ProtocolMapping { export interface Events { + /** + * The loadComplete event mirrors the load complete event sent by the browser to assistive + * technology when the web page has finished loading. + */ + 'Accessibility.loadComplete': [Protocol.Accessibility.LoadCompleteEvent]; + /** + * The nodesUpdated event is sent every time a previously requested node has changed the in tree. + */ + 'Accessibility.nodesUpdated': [Protocol.Accessibility.NodesUpdatedEvent]; /** * Event for when an animation has been cancelled. */ @@ -438,7 +447,7 @@ export namespace ProtocolMapping { */ 'Security.visibleSecurityStateChanged': [Protocol.Security.VisibleSecurityStateChangedEvent]; /** - * The security state of the page changed. + * The security state of the page changed. No longer being sent. */ 'Security.securityStateChanged': [Protocol.Security.SecurityStateChangedEvent]; 'ServiceWorker.workerErrorReported': [Protocol.ServiceWorker.WorkerErrorReportedEvent]; @@ -701,6 +710,22 @@ export namespace ProtocolMapping { paramsType: [Protocol.Accessibility.GetFullAXTreeRequest?]; returnType: Protocol.Accessibility.GetFullAXTreeResponse; }; + /** + * Fetches the root node. + * Requires `enable()` to have been called previously. + */ + 'Accessibility.getRootAXNode': { + paramsType: [Protocol.Accessibility.GetRootAXNodeRequest?]; + returnType: Protocol.Accessibility.GetRootAXNodeResponse; + }; + /** + * Fetches a node and all ancestors up to and including the root. + * Requires `enable()` to have been called previously. + */ + 'Accessibility.getAXNodeAndAncestors': { + paramsType: [Protocol.Accessibility.GetAXNodeAndAncestorsRequest?]; + returnType: Protocol.Accessibility.GetAXNodeAndAncestorsResponse; + }; /** * Fetches a particular accessibility node by AXNodeId. * Requires `enable()` to have been called previously. @@ -2327,6 +2352,11 @@ export namespace ProtocolMapping { * Clears seeded compilation cache. */ 'Page.clearCompilationCache': {paramsType: []; returnType: void;}; + /** + * Sets the Secure Payment Confirmation transaction mode. + * https://w3c.github.io/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode + */ + 'Page.setSPCTransactionMode': {paramsType: [Protocol.Page.SetSPCTransactionModeRequest]; returnType: void;}; /** * Generates a report for testing. */ diff --git a/front_end/generated/protocol-proxy-api.d.ts b/front_end/generated/protocol-proxy-api.d.ts index ab204b2e54..9a6a5eceaf 100644 --- a/front_end/generated/protocol-proxy-api.d.ts +++ b/front_end/generated/protocol-proxy-api.d.ts @@ -225,6 +225,20 @@ declare namespace ProtocolProxyApi { invoke_getFullAXTree(params: Protocol.Accessibility.GetFullAXTreeRequest): Promise; + /** + * Fetches the root node. + * Requires `enable()` to have been called previously. + */ + invoke_getRootAXNode(params: Protocol.Accessibility.GetRootAXNodeRequest): + Promise; + + /** + * Fetches a node and all ancestors up to and including the root. + * Requires `enable()` to have been called previously. + */ + invoke_getAXNodeAndAncestors(params: Protocol.Accessibility.GetAXNodeAndAncestorsRequest): + Promise; + /** * Fetches a particular accessibility node by AXNodeId. * Requires `enable()` to have been called previously. @@ -242,7 +256,18 @@ declare namespace ProtocolProxyApi { invoke_queryAXTree(params: Protocol.Accessibility.QueryAXTreeRequest): Promise; } - export interface AccessibilityDispatcher {} + export interface AccessibilityDispatcher { + /** + * The loadComplete event mirrors the load complete event sent by the browser to assistive + * technology when the web page has finished loading. + */ + loadComplete(params: Protocol.Accessibility.LoadCompleteEvent): void; + + /** + * The nodesUpdated event is sent every time a previously requested node has changed the in tree. + */ + nodesUpdated(params: Protocol.Accessibility.NodesUpdatedEvent): void; + } export interface AnimationApi { /** @@ -2637,6 +2662,13 @@ declare namespace ProtocolProxyApi { */ invoke_clearCompilationCache(): Promise; + /** + * Sets the Secure Payment Confirmation transaction mode. + * https://w3c.github.io/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode + */ + invoke_setSPCTransactionMode(params: Protocol.Page.SetSPCTransactionModeRequest): + Promise; + /** * Generates a report for testing. */ @@ -2879,7 +2911,7 @@ declare namespace ProtocolProxyApi { visibleSecurityStateChanged(params: Protocol.Security.VisibleSecurityStateChangedEvent): void; /** - * The security state of the page changed. + * The security state of the page changed. No longer being sent. */ securityStateChanged(params: Protocol.Security.SecurityStateChangedEvent): void; } diff --git a/front_end/generated/protocol.d.ts b/front_end/generated/protocol.d.ts index 30647f2df4..74015ca878 100644 --- a/front_end/generated/protocol.d.ts +++ b/front_end/generated/protocol.d.ts @@ -252,6 +252,10 @@ declare namespace Protocol { * All other properties */ properties?: AXProperty[]; + /** + * ID for this node's parent. + */ + parentId?: AXNodeId; /** * IDs for each of this node's child nodes. */ @@ -260,6 +264,10 @@ declare namespace Protocol { * The backend ID for the associated DOM node, if any. */ backendDOMNodeId?: DOM.BackendNodeId; + /** + * The frame ID for the frame associated with this nodes document. + */ + frameId?: Page.FrameId; } export interface GetPartialAXTreeRequest { @@ -310,6 +318,37 @@ declare namespace Protocol { nodes: AXNode[]; } + export interface GetRootAXNodeRequest { + /** + * The frame in whose document the node resides. + * If omitted, the root frame is used. + */ + frameId?: Page.FrameId; + } + + export interface GetRootAXNodeResponse extends ProtocolResponseWithError { + node: AXNode; + } + + export interface GetAXNodeAndAncestorsRequest { + /** + * Identifier of the node to get. + */ + nodeId?: DOM.NodeId; + /** + * Identifier of the backend node to get. + */ + backendNodeId?: DOM.BackendNodeId; + /** + * JavaScript object id of the node wrapper to get. + */ + objectId?: Runtime.RemoteObjectId; + } + + export interface GetAXNodeAndAncestorsResponse extends ProtocolResponseWithError { + nodes: AXNode[]; + } + export interface GetChildAXNodesRequest { id: AXNodeId; /** @@ -353,6 +392,27 @@ declare namespace Protocol { */ nodes: AXNode[]; } + + /** + * The loadComplete event mirrors the load complete event sent by the browser to assistive + * technology when the web page has finished loading. + */ + export interface LoadCompleteEvent { + /** + * New document root node. + */ + root: AXNode; + } + + /** + * The nodesUpdated event is sent every time a previously requested node has changed the in tree. + */ + export interface NodesUpdatedEvent { + /** + * Updated node data. + */ + nodes: AXNode[]; + } } export namespace Animation { @@ -4878,8 +4938,8 @@ declare namespace Protocol { */ export interface UserAgentMetadata { brands?: UserAgentBrandVersion[]; - fullVersion?: string; fullVersionList?: UserAgentBrandVersion[]; + fullVersion?: string; platform: string; platformVersion: string; architecture: string; @@ -6988,9 +7048,10 @@ declare namespace Protocol { */ logId: string; /** - * Issuance date. + * Issuance date. Unlike TimeSinceEpoch, this contains the number of + * milliseconds since January 1, 1970, UTC, not the number of seconds. */ - timestamp: TimeSinceEpoch; + timestamp: number; /** * Hash algorithm. */ @@ -9869,6 +9930,7 @@ declare namespace Protocol { Hid = 'hid', IdleDetection = 'idle-detection', InterestCohort = 'interest-cohort', + JoinAdInterestGroup = 'join-ad-interest-group', KeyboardMap = 'keyboard-map', Magnetometer = 'magnetometer', Microphone = 'microphone', @@ -9877,6 +9939,7 @@ declare namespace Protocol { Payment = 'payment', PictureInPicture = 'picture-in-picture', PublickeyCredentialsGet = 'publickey-credentials-get', + RunAdAuction = 'run-ad-auction', ScreenWakeLock = 'screen-wake-lock', Serial = 'serial', SharedAutofill = 'shared-autofill', @@ -11263,6 +11326,16 @@ declare namespace Protocol { data: binary; } + export const enum SetSPCTransactionModeRequestMode { + None = 'none', + Autoaccept = 'autoaccept', + Autoreject = 'autoreject', + } + + export interface SetSPCTransactionModeRequest { + mode: SetSPCTransactionModeRequestMode; + } + export interface GenerateTestReportRequest { /** * Message to be displayed in the report. @@ -12086,7 +12159,7 @@ declare namespace Protocol { } /** - * The security state of the page changed. + * The security state of the page changed. No longer being sent. */ export interface SecurityStateChangedEvent { /** @@ -12098,8 +12171,8 @@ declare namespace Protocol { */ schemeIsCryptographic: boolean; /** - * List of explanations for the security state. If the overall security state is `insecure` or - * `warning`, at least one corresponding explanation should be included. + * Previously a list of explanations for the security state. Now always + * empty. */ explanations: SecurityStateExplanation[]; /** @@ -12107,7 +12180,7 @@ declare namespace Protocol { */ insecureContentStatus: InsecureContentStatus; /** - * Overrides user-visible description of the state. + * Overrides user-visible description of the state. Always omitted. */ summary?: string; } diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.json b/third_party/blink/public/devtools_protocol/browser_protocol.json index 813c2fc840..84ee8ad25f 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.json +++ b/third_party/blink/public/devtools_protocol/browser_protocol.json @@ -304,6 +304,12 @@ "$ref": "AXProperty" } }, + { + "name": "parentId", + "description": "ID for this node's parent.", + "optional": true, + "$ref": "AXNodeId" + }, { "name": "childIds", "description": "IDs for each of this node's child nodes.", @@ -318,6 +324,12 @@ "description": "The backend ID for the associated DOM node, if any.", "optional": true, "$ref": "DOM.BackendNodeId" + }, + { + "name": "frameId", + "description": "The frame ID for the frame associated with this nodes document.", + "optional": true, + "$ref": "Page.FrameId" } ] } @@ -407,6 +419,59 @@ } ] }, + { + "name": "getRootAXNode", + "description": "Fetches the root node.\nRequires `enable()` to have been called previously.", + "experimental": true, + "parameters": [ + { + "name": "frameId", + "description": "The frame in whose document the node resides.\nIf omitted, the root frame is used.", + "optional": true, + "$ref": "Page.FrameId" + } + ], + "returns": [ + { + "name": "node", + "$ref": "AXNode" + } + ] + }, + { + "name": "getAXNodeAndAncestors", + "description": "Fetches a node and all ancestors up to and including the root.\nRequires `enable()` to have been called previously.", + "experimental": true, + "parameters": [ + { + "name": "nodeId", + "description": "Identifier of the node to get.", + "optional": true, + "$ref": "DOM.NodeId" + }, + { + "name": "backendNodeId", + "description": "Identifier of the backend node to get.", + "optional": true, + "$ref": "DOM.BackendNodeId" + }, + { + "name": "objectId", + "description": "JavaScript object id of the node wrapper to get.", + "optional": true, + "$ref": "Runtime.RemoteObjectId" + } + ], + "returns": [ + { + "name": "nodes", + "type": "array", + "items": { + "$ref": "AXNode" + } + } + ] + }, { "name": "getChildAXNodes", "description": "Fetches a particular accessibility node by AXNodeId.\nRequires `enable()` to have been called previously.", @@ -480,6 +545,35 @@ } ] } + ], + "events": [ + { + "name": "loadComplete", + "description": "The loadComplete event mirrors the load complete event sent by the browser to assistive\ntechnology when the web page has finished loading.", + "experimental": true, + "parameters": [ + { + "name": "root", + "description": "New document root node.", + "$ref": "AXNode" + } + ] + }, + { + "name": "nodesUpdated", + "description": "The nodesUpdated event is sent every time a previously requested node has changed the in tree.", + "experimental": true, + "parameters": [ + { + "name": "nodes", + "description": "Updated node data.", + "type": "array", + "items": { + "$ref": "AXNode" + } + } + ] + } ] }, { @@ -7402,12 +7496,6 @@ "$ref": "UserAgentBrandVersion" } }, - { - "name": "fullVersion", - "deprecated": true, - "optional": true, - "type": "string" - }, { "name": "fullVersionList", "optional": true, @@ -7416,6 +7504,12 @@ "$ref": "UserAgentBrandVersion" } }, + { + "name": "fullVersion", + "deprecated": true, + "optional": true, + "type": "string" + }, { "name": "platform", "type": "string" @@ -10488,8 +10582,8 @@ }, { "name": "timestamp", - "description": "Issuance date.", - "$ref": "TimeSinceEpoch" + "description": "Issuance date. Unlike TimeSinceEpoch, this contains the number of\nmilliseconds since January 1, 1970, UTC, not the number of seconds.", + "type": "number" }, { "name": "hashAlgorithm", @@ -14542,6 +14636,7 @@ "hid", "idle-detection", "interest-cohort", + "join-ad-interest-group", "keyboard-map", "magnetometer", "microphone", @@ -14550,6 +14645,7 @@ "payment", "picture-in-picture", "publickey-credentials-get", + "run-ad-auction", "screen-wake-lock", "serial", "shared-autofill", @@ -16621,6 +16717,22 @@ "description": "Clears seeded compilation cache.", "experimental": true }, + { + "name": "setSPCTransactionMode", + "description": "Sets the Secure Payment Confirmation transaction mode.\nhttps://w3c.github.io/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode", + "experimental": true, + "parameters": [ + { + "name": "mode", + "type": "string", + "enum": [ + "none", + "autoaccept", + "autoreject" + ] + } + ] + }, { "name": "generateTestReport", "description": "Generates a report for testing.", @@ -17776,7 +17888,8 @@ }, { "name": "securityStateChanged", - "description": "The security state of the page changed.", + "description": "The security state of the page changed. No longer being sent.", + "deprecated": true, "parameters": [ { "name": "securityState", @@ -17791,7 +17904,8 @@ }, { "name": "explanations", - "description": "List of explanations for the security state. If the overall security state is `insecure` or\n`warning`, at least one corresponding explanation should be included.", + "description": "Previously a list of explanations for the security state. Now always\nempty.", + "deprecated": true, "type": "array", "items": { "$ref": "SecurityStateExplanation" @@ -17805,7 +17919,8 @@ }, { "name": "summary", - "description": "Overrides user-visible description of the state.", + "description": "Overrides user-visible description of the state. Always omitted.", + "deprecated": true, "optional": true, "type": "string" } diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index d03225cb1e..af319b2660 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl @@ -176,10 +176,14 @@ experimental domain Accessibility optional AXValue value # All other properties optional array of AXProperty properties + # ID for this node's parent. + optional AXNodeId parentId # IDs for each of this node's child nodes. optional array of AXNodeId childIds # The backend ID for the associated DOM node, if any. optional DOM.BackendNodeId backendDOMNodeId + # The frame ID for the frame associated with this nodes document. + optional Page.FrameId frameId # Disables the accessibility domain. command disable @@ -218,6 +222,29 @@ experimental domain Accessibility returns array of AXNode nodes + # Fetches the root node. + # Requires `enable()` to have been called previously. + experimental command getRootAXNode + parameters + # The frame in whose document the node resides. + # If omitted, the root frame is used. + optional Page.FrameId frameId + returns + AXNode node + + # Fetches a node and all ancestors up to and including the root. + # Requires `enable()` to have been called previously. + experimental command getAXNodeAndAncestors + parameters + # Identifier of the node to get. + optional DOM.NodeId nodeId + # Identifier of the backend node to get. + optional DOM.BackendNodeId backendNodeId + # JavaScript object id of the node wrapper to get. + optional Runtime.RemoteObjectId objectId + returns + array of AXNode nodes + # Fetches a particular accessibility node by AXNodeId. # Requires `enable()` to have been called previously. experimental command getChildAXNodes @@ -251,6 +278,19 @@ experimental domain Accessibility # including nodes that are ignored for accessibility. array of AXNode nodes + # The loadComplete event mirrors the load complete event sent by the browser to assistive + # technology when the web page has finished loading. + experimental event loadComplete + parameters + # New document root node. + AXNode root + + # The nodesUpdated event is sent every time a previously requested node has changed the in tree. + experimental event nodesUpdated + parameters + # Updated node data. + array of AXNode nodes + experimental domain Animation depends on Runtime depends on DOM @@ -3356,8 +3396,8 @@ domain Emulation experimental type UserAgentMetadata extends object properties optional array of UserAgentBrandVersion brands - deprecated optional string fullVersion optional array of UserAgentBrandVersion fullVersionList + deprecated optional string fullVersion string platform string platformVersion string architecture @@ -4785,8 +4825,9 @@ domain Network string logDescription # Log ID. string logId - # Issuance date. - TimeSinceEpoch timestamp + # Issuance date. Unlike TimeSinceEpoch, this contains the number of + # milliseconds since January 1, 1970, UTC, not the number of seconds. + number timestamp # Hash algorithm. string hashAlgorithm # Signature algorithm. @@ -6739,7 +6780,6 @@ domain Page ch-ua-platform ch-ua-model ch-ua-mobile - # Soon to be deprecated, using ch-ua-full-version-list instead ch-ua-full-version ch-ua-full-version-list ch-ua-platform-version @@ -6765,6 +6805,7 @@ domain Page hid idle-detection interest-cohort + join-ad-interest-group keyboard-map magnetometer microphone @@ -6773,6 +6814,7 @@ domain Page payment picture-in-picture publickey-credentials-get + run-ad-auction screen-wake-lock serial shared-autofill @@ -7647,6 +7689,15 @@ domain Page # Clears seeded compilation cache. experimental command clearCompilationCache + # Sets the Secure Payment Confirmation transaction mode. + # https://w3c.github.io/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode + experimental command setSPCTransactionMode + parameters + enum mode + none + autoaccept + autoreject + # Generates a report for testing. experimental command generateTestReport parameters @@ -8338,20 +8389,20 @@ domain Security # Security state information about the page. VisibleSecurityState visibleSecurityState - # The security state of the page changed. - event securityStateChanged + # The security state of the page changed. No longer being sent. + deprecated event securityStateChanged parameters # Security state. SecurityState securityState # True if the page was loaded over cryptographic transport such as HTTPS. deprecated boolean schemeIsCryptographic - # List of explanations for the security state. If the overall security state is `insecure` or - # `warning`, at least one corresponding explanation should be included. - array of SecurityStateExplanation explanations + # Previously a list of explanations for the security state. Now always + # empty. + deprecated array of SecurityStateExplanation explanations # Information about insecure content on the page. deprecated InsecureContentStatus insecureContentStatus - # Overrides user-visible description of the state. - optional string summary + # Overrides user-visible description of the state. Always omitted. + deprecated optional string summary experimental domain ServiceWorker depends on Target diff --git a/third_party/blink/renderer/core/css/css_properties.json5 b/third_party/blink/renderer/core/css/css_properties.json5 index 003728cde4..ad9b53ac61 100644 --- a/third_party/blink/renderer/core/css/css_properties.json5 +++ b/third_party/blink/renderer/core/css/css_properties.json5 @@ -3436,6 +3436,7 @@ { name: "pointer-events", property_methods: ["CSSValueFromComputedStyleInternal"], + computed_style_custom_functions: ["getter"], independent: true, inherited: true, field_template: "keyword", @@ -4143,9 +4144,8 @@ keywords: ["none", "underline", "overline", "line-through", "blink", "spelling-error", "grammar-error"], typedom_types: ["Keyword"], default_value: "none", - name_for_methods: "TextDecoration", - type_name: "TextDecoration", - converter: "ConvertFlags", + type_name: "TextDecorationLine", + converter: "ConvertFlags", valid_for_first_letter: true, valid_for_first_line: true, valid_for_cue: true,