You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
132
130
type: dfn; text: get the text steps; url: get-the-text-steps
133
131
type: dfn; text: set the inner text steps; url: set-the-inner-text-steps
134
132
type: dfn; text: src; url: attr-script-src
@@ -1067,20 +1065,6 @@ Given a {{TrustedType}} type (|expectedType|), a [=realm/global object=] (|globa
1067
1065
1. Return a new instance of an interface with a type
1068
1066
name |trustedTypeName|, with its associated data value set to |dataString|.
1069
1067
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
-
1084
1068
## Get Trusted Types-compliant attribute value ## {#validate-attribute-mutation}
1085
1069
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:
#### Slots with trusted values #### {#slots-with-trusted-values}
1173
1157
1174
-
This document modifies {{HTMLScriptElement}}s. Each script has:
1158
+
An {{HTMLScriptElement}} and {{SVGScriptElement}} have:
1159
+
1160
+
: an associated boolean <dfn export for="HTMLScriptElement,SVGScriptElement">is trusted</dfn>.
1161
+
:: A boolean indicating whether a script element is considered trustworthy for execution.
1162
+
Initially true.
1163
+
1164
+
Note: This boolean is initially true so that parsed scripts are trusted.
1175
1165
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.
1166
+
: an associated boolean <dfn export for="HTMLScriptElement,SVGScriptElement">changed by trusted sink</dfn>.
1167
+
:: A boolean indicating whether a script element has been modified by a trusted sink.
1168
+
Initially false.
1180
1169
1181
1170
#### The {{HTMLScriptElement/innerText}} IDL attribute #### {#the-innerText-idl-attribute}
1182
1171
@@ -1185,7 +1174,7 @@ The {{HTMLScriptElement/innerText}} setter steps are:
1185
1174
1. Let |value| be the result of calling [$Get Trusted Type compliant string$] with
1186
1175
{{TrustedScript}}, [=this=]'s [=relevant global object=], the given value, `HTMLScriptElement innerText`, and
1187
1176
`script`.
1188
-
1. Set [=this=]'s [=script text=]value to |value|.
1177
+
1. Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to true.
1189
1178
1. Run [=set the inner text steps=] with [=this=] and |value|.
1190
1179
1191
1180
The {{HTMLScriptElement/innerText}} getter steps are:
@@ -1200,7 +1189,7 @@ empty string instead, and then do as described below:
1200
1189
1. Let |value| be the result of calling [$Get Trusted Type compliant string$] with
1201
1190
{{TrustedScript}}, [=this=]'s [=relevant global object=], the given value, `HTMLScriptElement textContent`, and
1202
1191
`script`.
1203
-
1. Set [=this=]'s [=script text=]value to |value|.
1192
+
1. Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to true.
1204
1193
1. Run [=set text content=] with [=this=] and |value|.
1205
1194
1206
1195
The {{HTMLScriptElement/textContent}} getter steps are:
@@ -1214,7 +1203,7 @@ Update the {{HTMLScriptElement/text}} setter steps algorithm as follows.
1214
1203
1. <ins>Let |value| be the result of calling [$Get Trusted Type compliant string$] with
1215
1204
{{TrustedScript}}, [=this=]'s [=relevant global object=], the given value, `HTMLScriptElement text`, and
1216
1205
`script`.</ins>
1217
-
1. <ins>Set [=this=]'s [=script text=]value to the given value.</ins>
1206
+
1. Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to true.
1218
1207
1. [=String replace all=] with the given value within [=this=].
1219
1208
1220
1209
@@ -1227,29 +1216,25 @@ The {{HTMLScriptElement/src}} setter steps are:
1227
1216
`script`.</ins>
1228
1217
1. <ins>Set [=this=]'s [=src=] content attribute to |value|.</ins>
1229
1218
1230
-
#### Setting slot values from parser #### {#setting-slot-values-from-parser}
1219
+
#### Script children changed steps #### {#script-children-changed-steps}
1231
1220
1232
-
This document modifies the HTML parser to set the [=script text=]value when the script is created.
1221
+
This document modifies the [=children changed steps=]for {{HTMLScriptElement}} as follows:
1233
1222
1234
-
Modify the [=The text insertion mode=]algorithm as follows:
1223
+
1. Set [=this=]'s [=HTMLScriptElement/is trusted=]to false.
1235
1224
1236
-
<dl class="switch">
1237
-
<dt id="scriptEndTag">An end tag whose tag name is "script"</dt>
1238
-
<dd>
1239
-
<p>...</p>
1225
+
1. If [=this=]'s [=HTMLScriptElement/changed by trusted sink=] is true, set [=this=]'s [=HTMLScriptElement/is trusted=] to true.
1240
1226
1241
-
<ins><p>Set <var>script</var>'s [=script text=] value to its [=child text content=].</p></ins>
1227
+
1. Set [=this=]'s [=HTMLScriptElement/changed by trusted sink=] to false.
1242
1228
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>
1229
+
Note: This relies on the children changed steps never being called by the parser.
1247
1230
1248
-
<p>...</p>
1249
-
</dd>
1250
-
</dl>
1231
+
Issue: Need to double check how [part of script element's spec](https://html.spec.whatwg.org/#prepare-the-script-element:~:text=When%20a%20script%20element%20el%20that%20is%20not%20parser%2Dinserted%20experiences) fits into this. These steps need to happen before prepare the script is called.
1251
1232
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).
1233
+
This document modifies the [=children changed steps=] for {{SVGScriptElement}} as follows:
1234
+
1235
+
1. Set [=this=]'s [=SVGScriptElement/is trusted=] to false.
1236
+
1237
+
Note: This relies on the children changed steps never being called by the parser.
1253
1238
1254
1239
#### Slot value verification #### {#slot-value-verification}
1255
1240
@@ -1270,11 +1255,22 @@ The first few steps of the [=prepare the script element=] algorithm are modified
1270
1255
<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
1271
1256
run when the parser tries to run it, but it is later executed after a script dynamically
1272
1257
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>
1258
+
1259
+
<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>.
1260
+
1261
+
<li><ins>
1262
+
<p>If <var>el</var>'s [=HTMLScriptElement/is trusted=] is false:
1263
+
<ol>
1264
+
<li><p>Set <var>source text</var> to the result of executing [$Get Trusted Type compliant string$], with
1265
+
{{TrustedScript}}, <var>el</var>'s [=relevant global object=], <var>source text</var>, `'HTMLScriptElement text'`,
1266
+
and `'script'`.
1267
+
<p>If that algorithm threw an error, then return.
1268
+
</ol></ins>
1275
1269
<li>...
1276
1270
</ol>
1277
1271
1272
+
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.
1273
+
1278
1274
## Integration with DOM ## {#integration-with-dom}
1279
1275
1280
1276
Note: See [https://github.com/whatwg/dom/pull/1268](https://github.com/whatwg/dom/pull/1268) which upstreams this integration.
0 commit comments