Skip to content

Commit 11456d2

Browse files
committed
Change Script Enforcement Mechanism to use flags
Also add SVGScriptElement to spec
1 parent 0cc17c1 commit 11456d2

File tree

1 file changed

+42
-42
lines changed

1 file changed

+42
-42
lines changed

spec/index.bs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,14 @@ spec:ECMA-262; urlPrefix: https://tc39.github.io/ecma262/
127127
type:dfn; text:current realm record; url: current-realm
128128
spec: HTML; urlPrefix: https://html.spec.whatwg.org/
129129
type: dfn; text: prepare the script element; url: prepare-the-script-element
130-
type: dfn; text: The text insertion mode; url: parsing-main-incdata
131-
type: dfn; text: reentrant invocation of the parser; url: nestedParsing
132130
type: dfn; text: get the text steps; url: get-the-text-steps
133131
type: dfn; text: set the inner text steps; url: set-the-inner-text-steps
134132
type: dfn; text: src; url: attr-script-src
133+
type: dfn; text: HTML element post-connection steps; url: html-element-post-connection-steps
135134
spec:DOM; urlPrefix: https://dom.spec.whatwg.org/
136135
type: dfn; text: get text content; url: get-text-content
137136
type: dfn; text: set text content; url: set-text-content
137+
type: dfn; text: post-connection steps; url: concept-node-post-connection-ext
138138
</pre>
139139

140140
<pre class="link-defaults">
@@ -1067,20 +1067,6 @@ Given a {{TrustedType}} type (|expectedType|), a [=realm/global object=] (|globa
10671067
1. Return a new instance of an interface with a type
10681068
name |trustedTypeName|, with its associated data value set to |dataString|.
10691069

1070-
## <dfn abstract-op>Prepare the script text</dfn> ## {#prepare-script-text}
1071-
1072-
Given an {{HTMLScriptElement}} (|script|), this algorithm performs the following steps:
1073-
1074-
1. If |script|'s [=script text=] value is not equal to its [=child text content=],
1075-
set |script|'s [=script text=] to the result of executing [$Get Trusted Type compliant string$], with the following arguments:
1076-
* {{TrustedScriptURL}} as |expectedType|,
1077-
* |script|'s {{Document}}'s [=relevant global object=] as |global|,
1078-
* |script|'s [=child text content=] attribute value,
1079-
* `HTMLScriptElement text` as |sink|,
1080-
* `'script'` as |sinkGroup|.
1081-
1082-
If the algorithm threw an error, rethrow the error.
1083-
10841070
## Get Trusted Types-compliant attribute value ## {#validate-attribute-mutation}
10851071
To <dfn abstract-op export>get Trusted Types-compliant attribute value</dfn> on {{Attr}} |attribute| with {{Element}} |element| and {{TrustedType}} or a string |newValue|, perform the following steps:
10861072

@@ -1171,12 +1157,17 @@ partial interface HTMLScriptElement {
11711157

11721158
#### Slots with trusted values #### {#slots-with-trusted-values}
11731159

1174-
This document modifies {{HTMLScriptElement}}s. Each script has:
1160+
An {{HTMLScriptElement}} and {{SVGScriptElement}} have:
1161+
1162+
: an associated boolean <dfn export for="HTMLScriptElement,SVGScriptElement">is trusted</dfn>.
1163+
:: A boolean indicating whether a script element is considered trustworthy for execution.
1164+
Initially true.
1165+
1166+
Note: This boolean is initially true so that parsed scripts are trusted.
11751167

1176-
: an associated string <dfn export for="HTMLScriptElement">script text</dfn>.
1177-
:: A string, containing the body of the script to execute that was set
1178-
through a compliant sink. Equivalent to script's
1179-
[=child text content=]. Initially an empty string.
1168+
: an associated boolean <dfn export for="HTMLScriptElement,SVGScriptElement">changed by trusted sink</dfn>.
1169+
:: A boolean indicating whether a script element has been modified by a trusted sink.
1170+
Initially false.
11801171

11811172
#### The {{HTMLScriptElement/innerText}} IDL attribute #### {#the-innerText-idl-attribute}
11821173

@@ -1185,7 +1176,7 @@ The {{HTMLScriptElement/innerText}} setter steps are:
11851176
1. Let |value| be the result of calling [$Get Trusted Type compliant string$] with
11861177
{{TrustedScript}}, [=this=]'s [=relevant global object=], the given value, `HTMLScriptElement innerText`, and
11871178
`script`.
1188-
1. Set [=this=]'s [=script text=] value to |value|.
1179+
1. Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to true.
11891180
1. Run [=set the inner text steps=] with [=this=] and |value|.
11901181

11911182
The {{HTMLScriptElement/innerText}} getter steps are:
@@ -1200,7 +1191,7 @@ empty string instead, and then do as described below:
12001191
1. Let |value| be the result of calling [$Get Trusted Type compliant string$] with
12011192
{{TrustedScript}}, [=this=]'s [=relevant global object=], the given value, `HTMLScriptElement textContent`, and
12021193
`script`.
1203-
1. Set [=this=]'s [=script text=] value to |value|.
1194+
1. Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to true.
12041195
1. Run [=set text content=] with [=this=] and |value|.
12051196

12061197
The {{HTMLScriptElement/textContent}} getter steps are:
@@ -1214,7 +1205,7 @@ Update the {{HTMLScriptElement/text}} setter steps algorithm as follows.
12141205
1. <ins>Let |value| be the result of calling [$Get Trusted Type compliant string$] with
12151206
{{TrustedScript}}, [=this=]'s [=relevant global object=], the given value, `HTMLScriptElement text`, and
12161207
`script`.</ins>
1217-
1. <ins>Set [=this=]'s [=script text=] value to the given value.</ins>
1208+
1. Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to true.
12181209
1. [=String replace all=] with the given value within [=this=].
12191210

12201211

@@ -1227,29 +1218,27 @@ The {{HTMLScriptElement/src}} setter steps are:
12271218
`script`.</ins>
12281219
1. <ins>Set [=this=]'s [=src=] content attribute to |value|.</ins>
12291220

1230-
#### Setting slot values from parser #### {#setting-slot-values-from-parser}
1221+
#### Script children changed steps #### {#script-children-changed-steps}
12311222

1232-
This document modifies the HTML parser to set the [=script text=] value when the script is created.
1223+
This document modifies the [=children changed steps=] for {{HTMLScriptElement}} as follows:
12331224

1234-
Modify the [=The text insertion mode=] algorithm as follows:
1225+
1. <ins>Set [=this=]'s [=HTMLScriptElement/is trusted=] to false.</ins>
12351226

1236-
<dl class="switch">
1237-
<dt id="scriptEndTag">An end tag whose tag name is "script"</dt>
1238-
<dd>
1239-
<p>...</p>
1227+
1. <ins>If [=this=]'s [=HTMLScriptElement/changed by trusted sink=] is true, set [=this=]'s [=HTMLScriptElement/is trusted=] to true.</ins>
12401228

1241-
<ins><p>Set <var>script</var>'s [=script text=] value to its [=child text content=].</p></ins>
1229+
1. <ins>Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to false.</ins>
12421230

1243-
<p>If the <span>active speculative HTML parser</span> is null, then <span>prepare the script
1244-
element</span> <var>script</var>. This might cause some script to execute, which might cause
1245-
<span data-x="dom-document-write">new characters to be inserted into the tokenizer</span>, and
1246-
might cause the tokenizer to output more tokens, resulting in a [=reentrant invocation of the parser=].</p>
1231+
1. Run the {{HTMLScriptElement|script}} [=HTML element post-connection steps=], given [=this=].
12471232

1248-
<p>...</p>
1249-
</dd>
1250-
</dl>
1233+
Issue: This relies on the children changed steps never being called by the parser.
12511234

1252-
Issue: The above algorithm doesn't account for the case when the script element's content is changed mid-parse. Implementors should ensure they protect against this case. See [https://github.com/w3c/trusted-types/issues/507](https://github.com/w3c/trusted-types/issues/507).
1235+
This document modifies the [=children changed steps=] for {{SVGScriptElement}} as follows:
1236+
1237+
1. Set [=this=]'s [=SVGScriptElement/is trusted=] to false.
1238+
1239+
1. Run the {{SVGScriptElement|script}} [=post-connection steps=], given [=this=].
1240+
1241+
Issue: This relies on the children changed steps never being called by the parser.
12531242

12541243
#### Slot value verification #### {#slot-value-verification}
12551244

@@ -1270,11 +1259,22 @@ The first few steps of the [=prepare the script element=] algorithm are modified
12701259
<p class=note>This is done so that if a parser-inserted <code id=script-processing-model:the-script-element-28><a href=https://html.spec.whatwg.org/#the-script-element>script</a></code> element fails to
12711260
run when the parser tries to run it, but it is later executed after a script dynamically
12721261
updates it, it will execute in an async fashion even if the <code id=script-processing-model:attr-script-async-5><a href=https://html.spec.whatwg.org/#attr-script-async>async</a></code> attribute isn't set.</p>
1273-
<li><ins><p>Execute the [$Prepare the script text$] algorithm on <var>el</var>. If that algorithm threw an error, then return.</p></ins></li>
1274-
<li><p>Let <var ignore="">source text</var> be <var>el</var>'s <del><a id=script-processing-model:child-text-content href=https://dom.spec.whatwg.org/#concept-child-text-content data-x-internal=child-text-content>child text content</a>.</del> <ins>[=script text=] value.</ins>
1262+
1263+
<li><p>Let <var>source text</var> be <var>el</var>'s <a id=script-processing-model:child-text-content href=https://dom.spec.whatwg.org/#concept-child-text-content data-x-internal=child-text-content>child text content</a>.
1264+
1265+
<li><ins>
1266+
<p>If <var>el</var>'s [=HTMLScriptElement/is trusted=] is false:
1267+
<ol>
1268+
<li><p>Set <var>source text</var> to the result of executing [$Get Trusted Type compliant string$], with
1269+
{{TrustedScript}}, <var>el</var>'s [=relevant global object=], <var>source text</var>, `'HTMLScriptElement text'`,
1270+
and `'script'`.
1271+
<p>If that algorithm threw an error, then return.
1272+
</ol></ins>
12751273
<li>...
12761274
</ol>
12771275

1276+
Issue: There's no proper definition for the processing of SVG script elements. However, you should apply a similar change to the processing of {{SVGScriptElement}}s.
1277+
12781278
## Integration with DOM ## {#integration-with-dom}
12791279

12801280
Note: See [https://github.com/whatwg/dom/pull/1268](https://github.com/whatwg/dom/pull/1268) which upstreams this integration.

0 commit comments

Comments
 (0)