Skip to content

Commit 7a3e772

Browse files
authored
Editorial: Simplify the pre-navigation check algorithm. (#250)
See #246.
1 parent 1ec7d95 commit 7a3e772

File tree

2 files changed

+21
-29
lines changed

2 files changed

+21
-29
lines changed

dist/spec/index.html

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,7 +1214,7 @@
12141214
</style>
12151215
<meta content="Bikeshed version 0dd2bba6dfda6c3168490a3a3044dd1d0b1ef8e0" name="generator">
12161216
<link href="https://w3c.github.io/webappsec-trusted-types/dist/spec/" rel="canonical">
1217-
<meta content="6dbf0bff11eac270d02fcdc03fc44d0c36ef71cf" name="document-revision">
1217+
<meta content="1ec7d9536f02b3fd370844225a29336537106e1f" name="document-revision">
12181218
<style>/* style-md-lists */
12191219

12201220
/* This is a weird hack for me not yet following the commonmark spec
@@ -1461,7 +1461,7 @@
14611461
<div class="head">
14621462
<p data-fill-with="logo"><a class="logo" href="https://www.w3.org/"> <img alt="W3C" height="48" src="https://www.w3.org/StyleSheets/TR/2016/logos/W3C" width="72"> </a> </p>
14631463
<h1 class="p-name no-ref" id="title">Trusted Types</h1>
1464-
<h2 class="no-num no-toc no-ref heading settled" id="subtitle"><span class="content">Editor’s Draft, <time class="dt-updated" datetime="2019-12-03">3 December 2019</time></span></h2>
1464+
<h2 class="no-num no-toc no-ref heading settled" id="subtitle"><span class="content">Editor’s Draft, <time class="dt-updated" datetime="2019-12-12">12 December 2019</time></span></h2>
14651465
<div data-fill-with="spec-metadata">
14661466
<dl>
14671467
<dt>This version:
@@ -2967,23 +2967,18 @@ <h5 class="heading settled" data-level="4.5.1.1" id="require-trusted-types-for-p
29672967
<li data-md>
29682968
<p>Let <var>encodedScriptSource</var> be the result of removing the leading <code>"javascript:"</code> from <var>urlString</var>.</p>
29692969
<li data-md>
2970-
<p>Let <var>defaultPolicy</var> be the result of executing <a data-link-type="abstract-op" href="#abstract-opdef-get-default-policy" id="ref-for-abstract-opdef-get-default-policy①">Get default policy</a> algorithm on <var>request</var>’s <a data-link-type="dfn" href="https://fetch.spec.whatwg.org/#concept-request-client" id="ref-for-concept-request-client">clients</a>'s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-settings-object-global" id="ref-for-concept-settings-object-global">global object</a>'s <a data-link-type="dfn" href="#window-trusted-type-policy-factory" id="ref-for-window-trusted-type-policy-factory③">trusted type policy factory</a>.</p>
2971-
<li data-md>
2972-
<p>If <var>defaultPolicy</var> is <code>null</code>, return <code>"Blocked"</code> and abort further steps.</p>
2973-
<li data-md>
2974-
<p>Let <var>convertedScriptSource</var> be the result of executing <a data-link-type="abstract-op" href="#abstract-opdef-create-a-trusted-type" id="ref-for-abstract-opdef-create-a-trusted-type④">Create a Trusted Type</a> algorithm, with the following arguments:</p>
2970+
<p>Let <var>convertedScriptSource</var> be the result of executing <a data-link-type="abstract-op" href="#abstract-opdef-process-value-with-a-default-policy" id="ref-for-abstract-opdef-process-value-with-a-default-policy①">Process value with a default policy</a> algorithm, with the following arguments:</p>
29752971
<ul>
29762972
<li data-md>
2977-
<p><var>defaultPolicy</var> as <var>policy</var></p>
2973+
<p><code class="idl"><a data-link-type="idl" href="#trustedscript" id="ref-for-trustedscript①①">TrustedScript</a></code> as <var>expectedType</var></p>
29782974
<li data-md>
2979-
<p><var>encodedScriptSource</var> as <var>value</var></p>
2975+
<p><var>request</var>’s <a data-link-type="dfn" href="https://fetch.spec.whatwg.org/#concept-request-client" id="ref-for-concept-request-client">clients</a>'s <a data-link-type="dfn" href="https://html.spec.whatwg.org/multipage/webappapis.html#concept-settings-object-global" id="ref-for-concept-settings-object-global">global object</a> as <var>global</var></p>
29802976
<li data-md>
2981-
<p><code>"TrustedScript</code> as <var>trustedTypeName</var></p>
2977+
<p><var>encodedScriptSource</var> as <var>input</var></p>
29822978
<li data-md>
2983-
<p>« <code>"Location.href"</code> » as <var>arguments</var></p>
2979+
<p><code>"Location.href"</code> as <var>sink</var></p>
29842980
</ul>
2985-
<li data-md>
2986-
<p>If <var>convertedScriptSource</var> is not a <code class="idl"><a data-link-type="idl" href="#trustedscript" id="ref-for-trustedscript①①">TrustedScript</a></code> object, return <code>"Blocked"</code> and abort further steps.</p>
2981+
<p>If that algorithm threw an error or <var>convertedScriptSource</var> is not a <code class="idl"><a data-link-type="idl" href="#trustedscript" id="ref-for-trustedscript①②">TrustedScript</a></code> object, return "Blocked" and abort further steps.</p>
29872982
<li data-md>
29882983
<p>Set <var>urlString</var> to be the result of prepending <code>"javascript:"</code> to stringified <var>convertedScriptSource</var>.</p>
29892984
<li data-md>
@@ -3186,7 +3181,7 @@ <h4 class="heading settled" data-level="4.5.7" id="csp-eval"><span class="secno"
31863181
<li data-md>
31873182
<p><code>'script'</code> as <var>sinkType</var>,</p>
31883183
<li data-md>
3189-
<p><code class="idl"><a data-link-type="idl" href="#trustedscript" id="ref-for-trustedscript①">TrustedScript</a></code> as <var>expectedType</var>.</p>
3184+
<p><code class="idl"><a data-link-type="idl" href="#trustedscript" id="ref-for-trustedscript①">TrustedScript</a></code> as <var>expectedType</var>.</p>
31903185
</ul>
31913186
</ins>
31923187
<li data-md>
@@ -4169,7 +4164,7 @@ <h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">I
41694164
<c- b>interface</c-> <a href="#trustedtypepolicy"><code><c- g>TrustedTypePolicy</c-></code></a> {
41704165
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Unforgeable" id="ref-for-Unforgeable⑥①"><c- g>Unforgeable</c-></a>] <c- b>readonly</c-> <c- b>attribute</c-> <a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①①①"><c- b>DOMString</c-></a> <a data-readonly data-type="DOMString" href="#dom-trustedtypepolicy-name"><code><c- g>name</c-></code></a>;
41714166
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Unforgeable" id="ref-for-Unforgeable⑦①"><c- g>Unforgeable</c-></a>] <a class="n" data-link-type="idl-name" href="#trustedhtml" id="ref-for-trustedhtml⑤①"><c- n>TrustedHTML</c-></a> <a class="idl-code" data-link-type="method" href="#dom-trustedtypepolicy-createhtml" id="ref-for-dom-trustedtypepolicy-createhtml①①"><c- g>createHTML</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①②①"><c- b>DOMString</c-></a> <a href="#dom-trustedtypepolicy-createhtml-input-arguments-input"><code><c- g>input</c-></code></a>, <c- b>any</c->... <a href="#dom-trustedtypepolicy-createhtml-input-arguments-arguments"><code><c- g>arguments</c-></code></a>);
4172-
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Unforgeable" id="ref-for-Unforgeable⑧①"><c- g>Unforgeable</c-></a>] <a class="n" data-link-type="idl-name" href="#trustedscript" id="ref-for-trustedscript①"><c- n>TrustedScript</c-></a> <a class="idl-code" data-link-type="method" href="#dom-trustedtypepolicy-createscript" id="ref-for-dom-trustedtypepolicy-createscript①①"><c- g>createScript</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①③①"><c- b>DOMString</c-></a> <a href="#dom-trustedtypepolicy-createscript-input-arguments-input"><code><c- g>input</c-></code></a>, <c- b>any</c->... <a href="#dom-trustedtypepolicy-createscript-input-arguments-arguments"><code><c- g>arguments</c-></code></a>);
4167+
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Unforgeable" id="ref-for-Unforgeable⑧①"><c- g>Unforgeable</c-></a>] <a class="n" data-link-type="idl-name" href="#trustedscript" id="ref-for-trustedscript①"><c- n>TrustedScript</c-></a> <a class="idl-code" data-link-type="method" href="#dom-trustedtypepolicy-createscript" id="ref-for-dom-trustedtypepolicy-createscript①①"><c- g>createScript</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①③①"><c- b>DOMString</c-></a> <a href="#dom-trustedtypepolicy-createscript-input-arguments-input"><code><c- g>input</c-></code></a>, <c- b>any</c->... <a href="#dom-trustedtypepolicy-createscript-input-arguments-arguments"><code><c- g>arguments</c-></code></a>);
41734168
[<a class="idl-code" data-link-type="extended-attribute" href="https://heycam.github.io/webidl/#Unforgeable" id="ref-for-Unforgeable⑨①"><c- g>Unforgeable</c-></a>] <a class="n" data-link-type="idl-name" href="#trustedscripturl" id="ref-for-trustedscripturl①②"><c- n>TrustedScriptURL</c-></a> <a class="idl-code" data-link-type="method" href="#dom-trustedtypepolicy-createscripturl" id="ref-for-dom-trustedtypepolicy-createscripturl①①"><c- g>createScriptURL</c-></a>(<a class="idl-code" data-link-type="interface" href="https://heycam.github.io/webidl/#idl-DOMString" id="ref-for-idl-DOMString①④①"><c- b>DOMString</c-></a> <a href="#dom-trustedtypepolicy-createscripturl-input-arguments-input"><code><c- g>input</c-></code></a>, <c- b>any</c->... <a href="#dom-trustedtypepolicy-createscripturl-input-arguments-arguments"><code><c- g>arguments</c-></code></a>);
41744169
};
41754170

@@ -4332,8 +4327,8 @@ <h2 class="no-num no-ref heading settled" id="issues-index"><span class="content
43324327
<li><a href="#ref-for-trustedscript⑤">4.1.3.2. Setting slot values</a> <a href="#ref-for-trustedscript⑥">(2)</a> <a href="#ref-for-trustedscript⑦">(3)</a>
43334328
<li><a href="#ref-for-trustedscript⑧">4.1.5. Enforcement in timer functions</a> <a href="#ref-for-trustedscript⑨">(2)</a>
43344329
<li><a href="#ref-for-trustedscript①⓪">4.1.6. Enforcement in event handler content attributes</a>
4335-
<li><a href="#ref-for-trustedscript①①">4.5.1.1. require-trusted-types-for Pre-Navigation check</a>
4336-
<li><a href="#ref-for-trustedscript①">4.5.7. Support for eval(TrustedScript)</a>
4330+
<li><a href="#ref-for-trustedscript①①">4.5.1.1. require-trusted-types-for Pre-Navigation check</a> <a href="#ref-for-trustedscript①②">(2)</a>
4331+
<li><a href="#ref-for-trustedscript①">4.5.7. Support for eval(TrustedScript)</a>
43374332
</ul>
43384333
</aside>
43394334
<aside class="dfn-panel" data-for="trustedscripturl">
@@ -4541,15 +4536,13 @@ <h2 class="no-num no-ref heading settled" id="issues-index"><span class="content
45414536
<b><a href="#abstract-opdef-get-default-policy">#abstract-opdef-get-default-policy</a></b><b>Referenced in:</b>
45424537
<ul>
45434538
<li><a href="#ref-for-abstract-opdef-get-default-policy">3.5. Process value with a default policy</a>
4544-
<li><a href="#ref-for-abstract-opdef-get-default-policy①">4.5.1.1. require-trusted-types-for Pre-Navigation check</a>
45454539
</ul>
45464540
</aside>
45474541
<aside class="dfn-panel" data-for="abstract-opdef-create-a-trusted-type">
45484542
<b><a href="#abstract-opdef-create-a-trusted-type">#abstract-opdef-create-a-trusted-type</a></b><b>Referenced in:</b>
45494543
<ul>
45504544
<li><a href="#ref-for-abstract-opdef-create-a-trusted-type">2.3.2. TrustedTypePolicy</a> <a href="#ref-for-abstract-opdef-create-a-trusted-type①">(2)</a> <a href="#ref-for-abstract-opdef-create-a-trusted-type②">(3)</a>
45514545
<li><a href="#ref-for-abstract-opdef-create-a-trusted-type③">3.5. Process value with a default policy</a>
4552-
<li><a href="#ref-for-abstract-opdef-create-a-trusted-type④">4.5.1.1. require-trusted-types-for Pre-Navigation check</a>
45534546
</ul>
45544547
</aside>
45554548
<aside class="dfn-panel" data-for="abstract-opdef-get-trusted-type-compliant-string">
@@ -4567,6 +4560,7 @@ <h2 class="no-num no-ref heading settled" id="issues-index"><span class="content
45674560
<b><a href="#abstract-opdef-process-value-with-a-default-policy">#abstract-opdef-process-value-with-a-default-policy</a></b><b>Referenced in:</b>
45684561
<ul>
45694562
<li><a href="#ref-for-abstract-opdef-process-value-with-a-default-policy">3.4. Get Trusted Type compliant string</a>
4563+
<li><a href="#ref-for-abstract-opdef-process-value-with-a-default-policy①">4.5.1.1. require-trusted-types-for Pre-Navigation check</a>
45704564
</ul>
45714565
</aside>
45724566
<aside class="dfn-panel" data-for="typedefdef-htmlstring">
@@ -4612,7 +4606,6 @@ <h2 class="no-num no-ref heading settled" id="issues-index"><span class="content
46124606
<ul>
46134607
<li><a href="#ref-for-window-trusted-type-policy-factory">2.4.2. TrustedTypes extended attribute</a> <a href="#ref-for-window-trusted-type-policy-factory①">(2)</a>
46144608
<li><a href="#ref-for-window-trusted-type-policy-factory②">3.5. Process value with a default policy</a>
4615-
<li><a href="#ref-for-window-trusted-type-policy-factory③">4.5.1.1. require-trusted-types-for Pre-Navigation check</a>
46164609
</ul>
46174610
</aside>
46184611
<aside class="dfn-panel" data-for="dom-window-trustedtypes">

spec/index.bs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,15 +1513,14 @@ Note: This algorithm assures that the code to be executed by a navigation to a `
15131513
1. If |request|'s [=request/url=]'s [=url/scheme=] is not `"javascript"`, return `"Allowed"` and abort further steps.
15141514
1. Let |urlString| be the result of running the [=URL serializer=] on |request|'s [=request/url=].
15151515
1. Let |encodedScriptSource| be the result of removing the leading `"javascript:"` from |urlString|.
1516-
1. Let |defaultPolicy| be the result of executing [$Get default policy$] algorithm on |request|'s [=request/clients=]'s [=environment settings object/global object=]'s [=trusted type policy factory=].
1517-
1. If |defaultPolicy| is `null`, return `"Blocked"` and abort further steps.
1518-
1. Let |convertedScriptSource| be the result of executing [$Create a Trusted Type$] algorithm, with the following arguments:
1519-
1520-
* |defaultPolicy| as |policy|
1521-
* |encodedScriptSource| as |value|
1522-
* `"TrustedScript` as |trustedTypeName|
1523-
* &laquo; `"Location.href"` &raquo; as |arguments|
1524-
1. If |convertedScriptSource| is not a {{TrustedScript}} object, return `"Blocked"` and abort further steps.
1516+
1. Let |convertedScriptSource| be the result of executing [$Process value with a default policy$] algorithm, with the following arguments:
1517+
1518+
* {{TrustedScript}} as |expectedType|
1519+
* |request|'s [=request/clients=]'s [=environment settings object/global object=] as |global|
1520+
* |encodedScriptSource| as |input|
1521+
* `"Location.href"` as |sink|
1522+
1523+
If that algorithm threw an error or |convertedScriptSource| is not a {{TrustedScript}} object, return "Blocked" and abort further steps.
15251524
1. Set |urlString| to be the result of prepending `"javascript:"` to stringified |convertedScriptSource|.
15261525
1. Let |newURL| be the result of running the [=URL parser=] on |urlString|. If the parser returns a failure, return `"Blocked"` and abort further steps.
15271526
1. Set |request|'s [=request/url=] to |newURL|.

0 commit comments

Comments
 (0)