Skip to content

Commit 68909b2

Browse files
mikewestannevk
andauthored
Add Origin API
This standardizes the work first discussed at https://github.com/mikewest/origin-api. Changes to URL and Service Workers forthcoming to define "extract an origin" for relevant objects. See also discussion in w3ctag/design-reviews#1130, WebKit/standards-positions#538, and mozilla/standards-positions#1280. Co-authored-by: Anne van Kesteren <[email protected]>
1 parent 0efa16f commit 68909b2

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed

source

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26079,6 +26079,19 @@ document.body.appendChild(wbr);</code></pre>
2607926079
<p>An element implementing the <code>HTMLHyperlinkElementUtils</code> mixin has an associated <dfn
2608026080
data-x="concept-hyperlink-url">url</dfn> (null or a <span>URL</span>). It is initially null.
2608126081

26082+
<div algorithm>
26083+
<p>An element implementing the <code>HTMLHyperlinkElementUtils</code> mixin has the following
26084+
<span>extract an origin</span> steps:</p>
26085+
26086+
<ol>
26087+
<li><p>If <span>this</span>'s <span data-x="concept-hyperlink-url">url</span> is null, then
26088+
return null.</p></li>
26089+
26090+
<li><p>Return <span>this</span>'s <span data-x="concept-hyperlink-url">url</span>'s
26091+
<span data-x="concept-url-origin">origin</span>.</p></li>
26092+
</ol>
26093+
</div>
26094+
2608226095
<div algorithm>
2608326096
<p>An element implementing the <code>HTMLHyperlinkElementUtils</code> mixin has an associated <dfn
2608426097
data-x="concept-hyperlink-url-set">set the url</dfn> algorithm, which runs these steps:</p>
@@ -92501,6 +92514,99 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> {
9250192514

9250292515
</div>
9250392516

92517+
<h5>The <code data-x="dom-Origin-interface">Origin</code> interface</h5>
92518+
92519+
<p>The <code data-x="dom-Origin-interface">Origin</code> interface represents an
92520+
<span>origin</span>, allowing robust <span>same origin</span> and <span>same site</span>
92521+
comparisons.</p>
92522+
92523+
<pre><code class="idl">[Exposed=*]
92524+
interface <dfn interface data-x="dom-Origin-interface">Origin</dfn> {
92525+
<span data-x="dom-Origin-constructor">constructor</span>();
92526+
92527+
static <span data-x="dom-Origin-interface">Origin</span> <span data-x="dom-Origin-from">from</span>(any <var ignore>value</var>);
92528+
92529+
readonly attribute boolean <span data-x="dom-Origin-opaque">opaque</span>;
92530+
92531+
boolean <span data-x="dom-Origin-isSameOrigin">isSameOrigin</span>(<span data-x="dom-Origin-interface">Origin</span> <var ignore>other</var>);
92532+
boolean <span data-x="dom-Origin-isSameSite">isSameSite</span>(<span data-x="dom-Origin-interface">Origin</span> <var ignore>other</var>);
92533+
};</code></pre>
92534+
92535+
<p><code data-x="dom-Origin-interface">Origin</code> objects have an associated <dfn for="Origin"
92536+
data-x="concept-Origin-origin">origin</dfn>, which holds an <span>origin</span>.</p>
92537+
92538+
<p><span data-x="platform object">Platform objects</span> have an <dfn for="platform object"
92539+
export>extract an origin</dfn> operation, which returns null unless otherwise specified.</p>
92540+
92541+
<div algorithm>
92542+
<p>Objects implementing the <code data-x="dom-Origin-interface">Origin</code> interface's
92543+
<span>extract an origin</span> steps are to return <span>this</span>'s <span
92544+
data-x="concept-Origin-origin">origin</span>.</p>
92545+
</div>
92546+
92547+
<div algorithm>
92548+
<p>The <dfn constructor for="Origin"><code
92549+
data-x="dom-Origin-constructor">new Origin()</code></dfn> constructor steps are to set
92550+
<span>this</span>'s <span data-x="concept-Origin-origin">origin</span> to a unique <span
92551+
data-x="concept-origin-opaque">opaque origin</span>.</p>
92552+
</div>
92553+
92554+
<div algorithm>
92555+
<p>The static <dfn method for="Origin"><code
92556+
data-x="dom-Origin-from">from(<var>value</var>)</code></dfn> method steps are:</p>
92557+
92558+
<ol>
92559+
<li>
92560+
<p>If <var>value</var> is a <span>platform object</span>:</p>
92561+
<ol>
92562+
<li><p>Let <var>origin</var> be the result of executing <var>value</var>'s <span>extract an
92563+
origin</span> operation.</p></li>
92564+
92565+
<li><p>If <var>origin</var> is not null, then return a new <code
92566+
data-x="dom-Origin-interface">Origin</code> object whose <span
92567+
data-x="concept-Origin-origin">origin</span> is <var>origin</var>.</p></li>
92568+
</ol>
92569+
</li>
92570+
92571+
<li>
92572+
<p>If <var>value</var> is a <span>string</span>:</p>
92573+
<ol>
92574+
<li><p>Let <var>parsedURL</var> be the result of <span data-x="basic url parser">basic URL
92575+
parsing</span> <var>value</var>.</p></li>
92576+
92577+
<li><p>If <var>parsedURL</var> is not failure, then return a new <code
92578+
data-x="dom-Origin-interface">Origin</code> object whose <span
92579+
data-x="concept-Origin-origin">origin</span> is set to <var>parsedURL</var>'s <span
92580+
data-x="concept-url-origin">origin</span>.</p></li>
92581+
</ol>
92582+
</li>
92583+
92584+
<li><p>Throw a <code>TypeError</code>.</p></li>
92585+
</ol>
92586+
</div>
92587+
92588+
<div algorithm>
92589+
<p>The <dfn attribute for="Origin"><code data-x="dom-Origin-opaque">opaque</code></dfn> getter
92590+
steps are to return true if <span>this</span>'s <span data-x="concept-Origin-origin">origin</span>
92591+
is an <span data-x="concept-origin-opaque">opaque origin</span>; otherwise false.</p>
92592+
</div>
92593+
92594+
<div algorithm>
92595+
<p>The <dfn method for="Origin"><code
92596+
data-x="dom-Origin-isSameOrigin">isSameOrigin(<var>other</var>)</code></dfn> method steps are to
92597+
return true if <span>this</span>'s <span data-x="concept-Origin-origin">origin</span> is
92598+
<span>same origin</span> with <var>other</var>'s <span
92599+
data-x="concept-Origin-origin">origin</span>; otherwise false.</p>
92600+
</div>
92601+
92602+
<div algorithm>
92603+
<p>The <dfn method for="Origin"><code
92604+
data-x="dom-Origin-isSameSite">isSameSite(<var>other</var>)</code></dfn> method steps are to
92605+
return true if <span>this</span>'s <span data-x="concept-Origin-origin">origin</span> is
92606+
<span>same site</span> with <var>other</var>'s <span data-x="concept-Origin-origin">origin</span>;
92607+
otherwise false.</p>
92608+
</div>
92609+
9250492610

9250592611
<h4><span id="origin-isolation"></span>Origin-keyed agent clusters</h4>
9250692612

@@ -123140,6 +123246,24 @@ document.body.appendChild(frame)</code></pre>
123140123246
capability</span>.</p>
123141123247
</div>
123142123248

123249+
<div algorithm>
123250+
<p>An element implementing the <code>WindowOrWorkerGlobalScope</code> mixin has the following
123251+
<span>extract an origin</span> steps:</p>
123252+
123253+
<ol>
123254+
<li><p>If <span>this</span>'s <span>relevant settings object</span>'s <span
123255+
data-x="concept-settings-object-origin">origin</span> is not <span>same origin-domain</span>
123256+
with the <span>entry settings object</span>'s <span
123257+
data-x="concept-settings-object-origin">origin</span>, then return null.</p></li>
123258+
123259+
<li><p>Return <span>this</span>'s return <span>this</span>'s <span>relevant settings
123260+
object</span>'s <span data-x="concept-settings-object-origin">origin</span>.</p></li>
123261+
</ol>
123262+
123263+
<p class="note">Since these objects are potentially accessible cross-origin (e.g., through
123264+
<code>WindowProxy</code>), we need a security check here before granting access to the origin.</p>
123265+
</div>
123266+
123143123267
</div>
123144123268

123145123269

@@ -127650,6 +127774,12 @@ typedef (<span>WindowProxy</span> or <span>MessagePort</span> or <span>ServiceWo
127650127774
<span data-x="concept-url-fragment">fragment</span>).</p>
127651127775
</div>
127652127776

127777+
<div algorithm>
127778+
<p>Objects implementing the <code>MessageEvent</code> interface's <span>extract an origin</span>
127779+
steps are to return <span>this</span>'s <span>relevant settings object</span>'s
127780+
<span data-x="concept-settings-object-origin">origin</span>.</p>
127781+
</div>
127782+
127653127783
<div algorithm>
127654127784
<p>The <dfn attribute for="MessageEvent"><code
127655127785
data-x="dom-MessageEvent-lastEventId">lastEventId</code></dfn> attribute must return the value it

0 commit comments

Comments
 (0)