Skip to content

Commit

Permalink
Remove StringContext attribute
Browse files Browse the repository at this point in the history
Swap to using a union type and updating the algorithms directly.
  • Loading branch information
lukewarlow committed Apr 23, 2024
1 parent 54cf168 commit 167ba90
Showing 1 changed file with 10 additions and 45 deletions.
55 changes: 10 additions & 45 deletions spec/index.bs
Original file line number Diff line number Diff line change
Expand Up @@ -1103,18 +1103,9 @@ Issue: This algorithm should account for event handler attributes. See https://g
# Integrations # {#integrations}

<pre class="idl">
typedef [StringContext=TrustedHTML] DOMString HTMLString;
typedef [StringContext=TrustedScript] DOMString ScriptString;
typedef [StringContext=TrustedScriptURL] USVString ScriptURLString;
typedef (TrustedHTML or TrustedScript or TrustedScriptURL) TrustedType;
</pre>

## Integration with WebIDL ## {#webidl-integration}

<h3 id="StringContext" extended-attribute lt="StringContext">[StringContext]</h3>

Issue: See [https://github.com/whatwg/webidl/pull/1392](https://github.com/whatwg/webidl/pull/1392).

## Integration with HTML ## {#integration-with-html}

{{Window}} and {{Worker}} objects have a <dfn for="Window">trusted type policy factory</dfn>,
Expand Down Expand Up @@ -1237,7 +1228,7 @@ The first few steps of the [=prepare the script element=] algorithm are modified
This document modifies the {{WindowOrWorkerGlobalScope}} interface mixin:

<pre class="idl exclude">
typedef (ScriptString or Function) TrustedTimerHandler;
typedef (DOMString or Function or TrustedScript) TrustedTimerHandler;

partial interface mixin WindowOrWorkerGlobalScope {
long setTimeout(TrustedTimerHandler handler, optional long timeout = 0, any... arguments);
Expand All @@ -1249,6 +1240,15 @@ Note: This makes sure that a {{TrustedScript}} is passed to timer
functions in place of a string when Trusted Types are enforced, but
also unconditionally accepts any {{Function}} object.

To the [[HTML5#timer-initialisation-steps|timer initialization steps algorithm]],
add this step before 8.4.1:

1. Let |globalName| be `'Window'` if [=this=]'s [=relevant global object=] is a {{Window}} object; 'Worker' otherwise.
1. Let |sink| be |globalName| + ` setInterval` if <var ignore>repeat</var> is true; |globalName| + ` setTimeout` otherwise.
1. Set |handler| to the result of executing
the [$Get Trusted Type compliant string$] algorithm, with {{TrustedScript}}, [=this=]'s [=relevant global object=],
|handler|, |sink|, and `'script'` as arguments.

To the [[HTML5#timer-initialisation-steps|timer initialization steps algorithm]],
change step 8.4.3 as follows:

Expand All @@ -1271,41 +1271,6 @@ abstract operation. User agents must use the following implementation:
1. If |argument| is a {{TrustedScript}} object, return the value of its associated [=TrustedScript/data=].
1. Return ~unknown~.

### Validate the string in context ### {#html-validate-the-string-in-context}

This specification defines the <a>validate the string in context</a> algorithm in [[html#integration-with-idl]].

When <a>validate the string in context</a> is invoked, with |platformObject|, |value|, |stringContext|, and |identifier| run these steps:

1. If |platformObject|'s [=relevant global object=] has a [=Window/trusted type policy factory=]:

1. Set |sink| to the result of [=concatenating=] the list &laquo; |platformObject|'s <a spec=webidl>identifier</a>, |identifier| &raquo; with `" "` as |separator|.
<div class="example" id="validate-string-example">
For example, the following annotation and JavaScript code:
<pre highlight=idl>
typedef [StringContext=TrustedHTML] DOMString HTMLString;
[ Exposed=Window, HTMLConstructor] interface HTMLIFrameElement : HTMLElement {
attribute HTMLString srcdoc;
};
</pre>
<pre highlight=js>
document.createElement('iframe').srcdoc = foo;
document.createElement('iframe').setAttribute('SRCdoc', foo);
</pre>
causes the |sink| value to be `"HTMLIFrameElement srcdoc"`.
</div>
1. Set |value| to the result of running the [$Get Trusted Type compliant string$] algorithm, passing the following arguments:
* |value| as |input|,
* |stringContext| as |expectedType|,
* |sink| as |sink|,
* `'script'` as |sinkGroup|,
* |platformObject|'s [=relevant global object=] as |global|.

Issue: Remove hardcoding 'script' when new sink groups are specified.

1. If an exception was thrown, rethrow exception and abort further steps.
1. Return |value|.

## Integration with Service Workers ## {#sw-integration}

Note: See [https://github.com/w3c/ServiceWorker/pull/1709](https://github.com/w3c/ServiceWorker/pull/1709) which upstreams this integration.
Expand Down

0 comments on commit 167ba90

Please sign in to comment.