Skip to content

Commit ea1fcd3

Browse files
authored
Specify browser UI-initiated navigations better
In particular, they have a null sourceDocument. We need to handle that in various places in the specification. Also incorporate the latest changes to Fetch (whatwg/fetch@41185ac) and set the "traversable for user prompts" correctly. Closes whatwg#9133.
1 parent a0d82b0 commit ea1fcd3

File tree

1 file changed

+130
-46
lines changed

1 file changed

+130
-46
lines changed

source

Lines changed: 130 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2705,6 +2705,8 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
27052705
<li><dfn data-x="concept-request-user-activation" data-x-href="https://fetch.spec.whatwg.org/#request-user-activation">user-activation</dfn></li>
27062706
<li><dfn data-x="concept-request-render-blocking" data-x-href="https://fetch.spec.whatwg.org/#request-render-blocking">render-blocking</dfn></li>
27072707
<li><dfn data-x="concept-request-initiator-type" data-x-href="https://fetch.spec.whatwg.org/#request-initiator-type">initiator type</dfn></li>
2708+
<li><dfn data-x="concept-request-service-workers-mode" data-x-href="https://fetch.spec.whatwg.org/#request-service-workers-mode">service-workers mode</dfn></li>
2709+
<li><dfn data-x="concept-request-traversable-for-user-prompts" data-x-href="https://fetch.spec.whatwg.org/#concept-request-window">traversable for user prompts</dfn></li>
27082710
<li><dfn data-x-href="https://fetch.spec.whatwg.org/#concept-request-add-range-header">add a range header</dfn></li>
27092711
</ul>
27102712
</li>
@@ -100895,36 +100897,66 @@ location.href = '#foo';</code></pre>
100895100897
<dd>a boolean</dd>
100896100898

100897100899
<dt><dfn data-x="source-snapshot-params-client">fetch client</dfn></dt>
100898-
<dd>an <span>environment settings object</span>, only to be used as a <span
100900+
<dd>an <span>environment settings object</span> or null, only to be used as a <span
100899100901
data-x="concept-request-client">request client</span></dd>
100900100902

100901100903
<dt><dfn data-x="source-snapshot-params-policy-container">source policy container</dfn></dt>
100902100904
<dd>a <span>policy container</span></dd>
100903100905
</dl>
100904100906

100905100907
<p>To <dfn data-x="snapshotting source snapshot params">snapshot source snapshot params</dfn>
100906-
given a <code>Document</code> <var>sourceDocument</var>, return a new <span>source snapshot
100907-
params</span> with</p>
100908+
given a <code>Document</code>-or-null <var>sourceDocument</var>:</p>
100908100909

100909-
<dl class="props">
100910-
<dt><span data-x="source-snapshot-params-activation">has transient activation</span></dt>
100911-
<dd>true if <var>sourceDocument</var>'s <span>relevant global object</span> has <span>transient
100912-
activation</span>; otherwise false</dd>
100910+
<ol>
100911+
<li>
100912+
<p>If <var>sourceDocument</var> is null, then return a new <span>source snapshot params</span>
100913+
with</p>
100914+
100915+
<dl class="props">
100916+
<dt><span data-x="source-snapshot-params-activation">has transient activation</span></dt>
100917+
<dd>true</dd>
100913100918

100914-
<dt><span data-x="source-snapshot-params-sandbox">sandboxing flags</span></dt>
100915-
<dd><var>sourceDocument</var>'s <span>active sandboxing flag set</span></dd>
100919+
<dt><span data-x="source-snapshot-params-sandbox">sandboxing flags</span></dt>
100920+
<dd>an empty <span>sandboxing flag set</span></dd>
100916100921

100917-
<dt><span data-x="source-snapshot-params-download">allows downloading</span></dt>
100918-
<dd>false if <var>sourceDocument</var>'s <span>active sandboxing flag set</span> has the
100919-
<span>sandboxed downloads browsing context flag</span> set; otherwise true</dd>
100922+
<dt><span data-x="source-snapshot-params-download">allows downloading</span></dt>
100923+
<dd>true</dd>
100920100924

100921-
<dt><span data-x="source-snapshot-params-client">fetch client</span></dt>
100922-
<dd><var>sourceDocument</var>'s <span>relevant settings object</span></dd>
100925+
<dt><span data-x="source-snapshot-params-client">fetch client</span></dt>
100926+
<dd>null</dd>
100923100927

100924-
<dt><span data-x="source-snapshot-params-policy-container">source policy container</span></dt>
100925-
<dd>a <span data-x="clone a policy container">clone</span> of <var>sourceDocument</var>'s <span
100926-
data-x="concept-document-policy-container">policy container</span></dd>
100927-
</dl>
100928+
<dt><span data-x="source-snapshot-params-policy-container">source policy container</span></dt>
100929+
<dd>a new <span>policy container</span></dd>
100930+
</dl>
100931+
100932+
<p class="note">This <a href="#assert-null-sourcedocument">only occurs</a> in the case of a
100933+
browser UI-initiated navigation.</p>
100934+
</li>
100935+
100936+
<li>
100937+
<p>Return a new <span>source snapshot params</span> with
100938+
100939+
<dl class="props">
100940+
<dt><span data-x="source-snapshot-params-activation">has transient activation</span></dt>
100941+
<dd>true if <var>sourceDocument</var>'s <span>relevant global object</span> has <span>transient
100942+
activation</span>; otherwise false</dd>
100943+
100944+
<dt><span data-x="source-snapshot-params-sandbox">sandboxing flags</span></dt>
100945+
<dd><var>sourceDocument</var>'s <span>active sandboxing flag set</span></dd>
100946+
100947+
<dt><span data-x="source-snapshot-params-download">allows downloading</span></dt>
100948+
<dd>false if <var>sourceDocument</var>'s <span>active sandboxing flag set</span> has the
100949+
<span>sandboxed downloads browsing context flag</span> set; otherwise true</dd>
100950+
100951+
<dt><span data-x="source-snapshot-params-client">fetch client</span></dt>
100952+
<dd><var>sourceDocument</var>'s <span>relevant settings object</span></dd>
100953+
100954+
<dt><span data-x="source-snapshot-params-policy-container">source policy container</span></dt>
100955+
<dd>a <span data-x="clone a policy container">clone</span> of <var>sourceDocument</var>'s <span
100956+
data-x="concept-document-policy-container">policy container</span></dd>
100957+
</dl>
100958+
</li>
100959+
</ol>
100928100960

100929100961
<hr>
100930100962

@@ -101127,22 +101159,22 @@ location.href = '#foo';</code></pre>
101127101159
it, search for "DONAV" -->
101128101160

101129101161
<p>To <dfn export>navigate</dfn> a <span>navigable</span> <var>navigable</var> to a
101130-
<span>URL</span> <var>url</var> using a <code>Document</code> <var
101131-
id="source-browsing-context">sourceDocument</var>, with an optional <span>POST resource</span>,
101132-
string, or null <dfn for="navigate" data-x="navigation-resource"
101162+
<span>URL</span> <var>url</var> using an optional <code>Document</code>-or-null <var
101163+
id="source-browsing-context">sourceDocument</var> (default null), with an optional <span>POST
101164+
resource</span>, string, or null <dfn for="navigate" data-x="navigation-resource"
101133101165
export><var>documentResource</var></dfn> (default null), an optional <span
101134-
data-x="concept-response">response</span>-or-null <dfn for="navigate"
101135-
data-x="navigation-response" export><var>response</var></dfn> (default null), an optional boolean
101136-
<dfn for="navigate" id="exceptions-enabled" export><var>exceptionsEnabled</var></dfn> (default
101137-
false), an optional <code>NavigationHistoryBehavior</code> <dfn for="navigate"
101138-
data-x="navigation-hh" export><var>historyHandling</var></dfn> (default "<code
101166+
data-x="concept-response">response</span>-or-null <dfn for="navigate" data-x="navigation-response"
101167+
export><var>response</var></dfn> (default null), an optional boolean <dfn for="navigate"
101168+
id="exceptions-enabled" export><var>exceptionsEnabled</var></dfn> (default false), an optional
101169+
<code>NavigationHistoryBehavior</code> <dfn for="navigate" data-x="navigation-hh"
101170+
export><var>historyHandling</var></dfn> (default "<code
101139101171
data-x="NavigationHistoryBehavior-auto">auto</code>"), an optional <span>serialized
101140101172
state</span>-or-null <dfn for="navigate" data-x="navigation-navigation-api-state"
101141101173
export><var>navigationAPIState</var></dfn> (default null), an optional <span>entry list</span> or
101142101174
null <dfn for="navigate" data-x="navigation-form-data-entry-list"
101143-
export><var>formDataEntryList</var></dfn> (default null), an optional <span>referrer
101144-
policy</span> <dfn data-x="navigation-referrer-policy"><var>referrerPolicy</var></dfn> (default
101145-
the empty string), an optional <span>user navigation involvement</span> <dfn
101175+
export><var>formDataEntryList</var></dfn> (default null), an optional <span>referrer policy</span>
101176+
<dfn data-x="navigation-referrer-policy"><var>referrerPolicy</var></dfn> (default the empty
101177+
string), an optional <span>user navigation involvement</span> <dfn
101146101178
data-x="navigation-user-involvement"><var>userInvolvement</var></dfn> (default "<code
101147101179
data-x="uni-none">none</code>"), an optional <code>Element</code> <dfn
101148101180
data-x="navigation-source-element"><var>sourceElement</var></dfn> (default null), and an
@@ -101157,22 +101189,49 @@ location.href = '#foo';</code></pre>
101157101189
<li><p>Let <var>sourceSnapshotParams</var> be the result of <span>snapshotting source snapshot
101158101190
params</span> given <var>sourceDocument</var>.</p></li>
101159101191

101160-
<li><p>Let <var>initiatorOriginSnapshot</var> be <var>sourceDocument</var>'s <span
101161-
data-x="concept-document-origin">origin</span>.</p></li>
101192+
<li><p>Let <var>initiatorOriginSnapshot</var> be a new <span
101193+
data-x="concept-origin-opaque">opaque origin</span>.</p></li>
101162101194

101163-
<li><p>Let <var>initiatorBaseURLSnapshot</var> be <var>sourceDocument</var>'s <span>document base
101164-
URL</span>.</p></li>
101195+
<li><p>Let <var>initiatorBaseURLSnapshot</var> be <code>about:blank</code>.</p></li>
101165101196

101166-
<li id="sandboxLinks">
101167-
<p>If <var>sourceDocument</var>'s <span>node navigable</span> is not <span>allowed by
101168-
sandboxing to navigate</span> <var>navigable</var> given <var>sourceSnapshotParams</var>,
101169-
then:</p>
101197+
<li>
101198+
<p>If <var>sourceDocument</var> is null:</p>
101170101199

101171101200
<ol>
101172-
<li><p>If <var>exceptionsEnabled</var> is true, then throw a
101173-
<span>"<code>SecurityError</code>"</span> <code>DOMException</code>.</p></li>
101201+
<li id="assert-null-sourcedocument"><p><span>Assert</span>: <var>userInvolvement</var> is
101202+
"<code data-x="uni-browser-ui">browser UI</code>".</p></li>
101174101203

101175-
<li><p>Return.</p></li>
101204+
<li><p>If <var>url</var>'s <span data-x="concept-url-scheme">scheme</span> is "<code
101205+
data-x="javascript protocol">javascript</code>", then set <var>initiatorOriginSnapshot</var> to
101206+
<var>navigable</var>'s <span data-x="nav-document">active document</span>'s <span
101207+
data-x="concept-document-origin">origin</span>.</p></li>
101208+
</ol>
101209+
</li>
101210+
101211+
<li>
101212+
<p>Otherwise:</p>
101213+
101214+
<ol>
101215+
<li><p><span>Assert</span>: <var>userInvolvement</var> is not "<code
101216+
data-x="uni-browser-ui">browser UI</code>".</p></li>
101217+
101218+
<li id="sandboxLinks">
101219+
<p>If <var>sourceDocument</var>'s <span>node navigable</span> is not <span>allowed by
101220+
sandboxing to navigate</span> <var>navigable</var> given <var>sourceSnapshotParams</var>:</p>
101221+
101222+
<ol>
101223+
<li><p>If <var>exceptionsEnabled</var> is true, then throw a
101224+
<span>"<code>SecurityError</code>"</span> <code>DOMException</code>.</p></li>
101225+
101226+
<li><p>Return.</p></li>
101227+
</ol>
101228+
</li>
101229+
101230+
<li><p>Set <var>initiatorOriginSnapshot</var> to <var>sourceDocument</var>'s <span
101231+
data-x="concept-document-origin">origin</span>.</p></li>
101232+
101233+
<li><p>Set <var>initiatorBaseURLSnapshot</var> to <var>sourceDocument</var>'s <span>document
101234+
base URL</span>.</p></li>
101176101235
</ol>
101177101236
</li>
101178101237

@@ -101467,14 +101526,17 @@ location.href = '#foo';</code></pre>
101467101526
responses</span> after the initial response.</p>
101468101527

101469101528
<ol>
101529+
<li><p>Let <var>sourcePolicyContainer</var> be a <span data-x="clone a policy
101530+
container">clone</span> of the <var>sourceDocument</var>'s <span
101531+
data-x="concept-document-policy-container">policy container</span>, if
101532+
<var>sourceDocument</var> is not null; otherwise null.</p></li>
101533+
101470101534
<li><p>Let <var>policyContainer</var> be the result of <span data-x="determining navigation
101471101535
params policy container">determining navigation params policy container</span> given <span
101472101536
data-x="concept-response">response</span>'s <span data-x="concept-response-url">URL</span>,
101473-
null, a <span data-x="clone a policy container">clone</span> of the
101474-
<var>sourceDocument</var>'s <span data-x="concept-document-policy-container">policy
101475-
container</span>, <var>navigable</var>'s <span data-x="nav-container-document">container
101476-
document</span>'s <span data-x="concept-document-policy-container">policy container</span>,
101477-
and null.</p></li>
101537+
null, <var>sourcePolicyContainer</var>, <var>navigable</var>'s <span
101538+
data-x="nav-container-document">container document</span>'s <span
101539+
data-x="concept-document-policy-container">policy container</span>, and null.</p></li>
101478101540

101479101541
<li><p>Let <var>finalSandboxFlags</var> be the <span data-x="set union">union</span> of
101480101542
<var>targetSnapshotParams</var>'s <span data-x="target-snapshot-params-sandbox">sandboxing
@@ -103408,11 +103470,33 @@ location.href = '#foo';</code></pre>
103408103470
<dt><span data-x="concept-request-policy-container">policy container</span></dt>
103409103471
<dd><var>sourceSnapshotParams</var>'s <span
103410103472
data-x="source-snapshot-params-policy-container">source policy container</span></dd>
103473+
103474+
<dt><span data-x="concept-request-traversable-for-user-prompts">traversable for user prompts</span></dt>
103475+
<dd><var>navigable</var>'s <span data-x="nav-top">top-level traversable</span></dd>
103411103476
</dl>
103412103477
</li>
103413103478

103414103479
<li>
103415-
<p>If <var>documentResource</var> is a <span>POST resource</span>, then:</p>
103480+
<p>If <var>request</var>'s <span data-x="concept-request-client">client</span> is null:</p>
103481+
103482+
<p class="note">This <a href="#assert-null-sourcedocument">only occurs</a> in the case of a
103483+
browser UI-initiated navigation.</p>
103484+
103485+
<ol>
103486+
<li><p>Set <var>request</var>'s <span data-x="concept-request-origin">origin</span> to a new
103487+
<span data-x="concept-origin-opaque">opaque origin</span>.</p></li>
103488+
103489+
<li><p>Set <var>request</var>'s <span
103490+
data-x="concept-request-service-workers-mode">service-workers mode</span> to "<code
103491+
data-x="">all</code>".</p></li>
103492+
103493+
<li><p>Set <var>request</var>'s <span data-x="concept-request-referrer">referrer</span> to
103494+
"<code data-x="">no-referrer</code>".</p></li>
103495+
</ol>
103496+
</li>
103497+
103498+
<li>
103499+
<p>If <var>documentResource</var> is a <span>POST resource</span>:</p>
103416103500

103417103501
<ol>
103418103502
<li><p>Set <var>request</var>'s <span data-x="concept-request-method">method</span> to `<code

0 commit comments

Comments
 (0)