diff --git a/source b/source index 3ec21624416..21172f0b332 100644 --- a/source +++ b/source @@ -87746,18 +87746,75 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> { </ol> <p>To <dfn data-x="obtain-browsing-context-navigation">obtain a browsing context to use for a - navigation response</dfn>, given a <span>browsing context</span> <var>browsingContext</var>, a - <span>sandboxing flag set</span> <var>sandboxFlags</var>, an <span>opener policy</span> - <var>navigationCOOP</var>, and an <span data-x="coop-enforcement-result">opener policy enforcement - result</span> <var>coopEnforcementResult</var>:</p> + navigation response</dfn>, given <span>navigation params</span> <var>navigationParams</var>:</p> <ol> + <li><p>Let <var>browsingContext</var> be <var>navigationParams</var>'s <span + data-x="navigation-params-navigable">navigable</span>'s <span data-x="nav-bc">active browsing + context</span>.</p></li> + <li><p>If <var>browsingContext</var> is not a <span>top-level browsing context</span>, then return <var>browsingContext</var>.</p></li> + <li><p>Let <var>coopEnforcementResult</var> be <var>navigationParams</var>'s <span + data-x="navigation-params-coop-enforcement-result">COOP enforcement result</span>.</p></li> + + <li><p>Let <var>swapGroup</var> be <var>coopEnforcementResult</var>'s <span + data-x="coop-enforcement-bcg-switch">needs a browsing context group switch</span>.</p></li> + + <li><p>Let <var>sourceOrigin</var> be <var>browsingContext</var>'s + <span>active document</span>'s <span data-x="concept-document-origin">origin</span>.</p></li> + + <li><p>Let <var>destinationOrigin</var> be <var>navigationParams</var>'s <span + data-x="navigation-params-origin">origin</span>.</p></li> + <li> - <p>If <var>coopEnforcementResult</var>'s <span data-x="coop-enforcement-bcg-switch">needs a - browsing context group switch</span> is false, then:</p> + <p>If <var>sourceOrigin</var> is not <span>same site</span> with + <var>destinationOrigin</var>:</p> + + <ol> + <li> + <p>If either of <var>sourceOrigin</var> or <var>destinationOrigin</var> have a <span + data-x="concept-origin-scheme">scheme</span> that is not an <span>HTTP(S) scheme</span> and + the user agent considers it necessary for <var>sourceOrigin</var> and + <var>destinationOrigin</var> to be isolated from each other (for + <span>implementation-defined</span> reasons), optionally set <var>swapGroup</var> to true.</p> + + <p class="note">For example, if a user navigates from <code data-x="">about:settings</code> to + <code data-x="">https://example.com</code>, the user agent could force a swap.</p> + + <p class="XXX"><a href="https://github.com/whatwg/html/issues/10842">Issue #10842</a> tracks + settling on an interoperable behavior here, instead of letting this be optional.</p> + </li> + + <li> + <p>If <var>navigationParams</var>'s <span data-x="navigation-params-user-involvement"> user + involvement</span> is "<code data-x="uni-browser-ui">browser UI</code>", optionally set + <var>swapGroup</var> to true.</p> + + <p class="XXX"><a href="https://github.com/whatwg/html/issues/6356">Issue #6356</a> tracks + settling on an interoperable behavior here, instead of letting this be optional.</p> + </li> + </ol> + </li> + + <li> + <p>If <var>browsingContext</var>'s <span data-x="tlbc group">group</span>'s <span>browsing + context set</span>'s <span data-x="list size">size</span> is 1, optionally set + <var>swapGroup</var> to true.</p> + + <p class="note">Some implementations swap browsing context groups here for performance + reasons.</p> + + <p class="note">The check for other contexts that could script this one is not sufficient to + prevent differences in behavior that could affect a web page. Even if there are currently no + other contexts, the destination page could open a window, then if the user navigates back, the + previous page could expect to be able to script the opened window. Doing a swap here would break + that use case.</p> + </li> + + <li> + <p>If <var>swapGroup</var> is false, then:</p> <ol> <li><p>If <var>coopEnforcementResult</var>'s <span @@ -87781,6 +87838,9 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> { might <a href="#a-browsing-context-is-discarded">destroy it</a> at this point.</p> </li> + <li><p>Let <var>navigationCOOP</var> be <var>navigationParams</var>'s <span + data-x="navigation-params-coop">cross-origin opener policy</span>.</p></li> + <li> <p>If <var>navigationCOOP</var>'s <span data-x="coop-struct-value">value</span> is "<code data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>", then set @@ -87797,6 +87857,10 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> { not.</p> </li> + <li><p>Let <var>sandboxFlags</var> be a <span data-x="list clone">clone</span> of + <var>navigationParams</var>'s <span + data-x="navigation-params-sandboxing">final sandboxing flag set</span>.</p></li> + <li> <p>If <var>sandboxFlags</var> is not empty, then:</p> <ol> @@ -87806,8 +87870,8 @@ dictionary <dfn dictionary>DragEventInit</dfn> : <span>MouseEventInit</span> { <li><p><span>Assert</span>: <var>newBrowsingContext</var>'s <span>popup sandboxing flag set</span> <span data-x="list is empty">is empty</span>.</p></li> - <li><p>Set <var>newBrowsingContext</var>'s <span>popup sandboxing flag set</span> to a <span - data-x="list clone">clone</span> of <var>sandboxFlags</var>.</p></li> + <li><p>Set <var>newBrowsingContext</var>'s <span>popup sandboxing flag set</span> to + <var>sandboxFlags</var>.</p></li> </ol> </li> @@ -97762,6 +97826,112 @@ interface <dfn interface>NotRestoredReasons</dfn> { <hr> + <p>To <dfn>find a navigable by target name</dfn> given a string <var>name</var> and a + <span>navigable</span> <var>currentNavigable</var>:</p> + + <ol> + <li><p>Let <var>currentDocument</var> be <var>currentNavigable</var>'s <span + data-x="nav-document">active document</span>.</p></li> + + <li><p>Let <var>sourceSnapshotParams</var> be the result of <span>snapshotting source snapshot + params</span> given <var>currentDocument</var>.</p></li> + + <li> + <p>Let <var>subtreesToSearch</var> be an <span>implementation-defined</span> choice of one of + the following:</p> + + <ul> + <li><p>« <var>currentNavigable</var>'s <span data-x="nav-traversable">traversable + navigable</span>, <var>currentNavigable</var> »</p></li> + + <li><p>the <span>inclusive ancestor navigables</span> of <var>currentDocument</var></p></li> + </ul> + + <p class="XXX"><a href="https://github.com/whatwg/html/issues/10848">Issue #10848</a> tracks + settling on one of these two possibilities, to achieve interoperability.</p> + </li> + + <li> + <p><span data-x="list iterate">For each</span> <var>subtreeToSearch</var> of + <var>subtreesToSearch</var>, in reverse order:</p> + + <ol> + <li><p>Let <var>documentToSearch</var> be <var>subtreeToSearch</var>'s <span + data-x="nav-document">active document</span>.</p></li> + + <li> + <p><span data-x="list iterate">For each</span> <var>navigable</var> of the <span>inclusive + descendant navigables</span> of <var>documentToSearch</var>:</p> + + <ol> + <li> + <p>If <var>currentNavigable</var> is not <span>allowed by sandboxing to navigate</span> + <var>navigable</var> given <var>sourceSnapshotParams</var>, then optionally + <span>continue</span>.</p> + + <p class="XXX"><a href="https://github.com/whatwg/html/issues/10849">Issue #10849</a> tracks + making this check required, to achieve interoperability.</p> + </li> + + <li><p>If <var>navigable</var>'s <span data-x="nav-target">target name</span> is + <var>name</var>, then return <var>navigable</var>.</p></li> + </ol> + </li> + </ol> + </li> + + <li><p>Let <var>currentTopLevelBrowsingContext</var> be <var>currentNavigable</var>'s <span + data-x="nav-bc">active browsing context</span>'s <span data-x="bc-tlbc">top-level browsing + context</span>.</p></li> + + <li><p>Let <var>group</var> be <var>currentTopLevelBrowsingContext</var>'s <span data-x="tlbc + group">group</span>.</p></li> + + <li> + <p><span data-x="list iterate">For each</span> <var>topLevelBrowsingContext</var> of + <var>group</var>'s <span>browsing context set</span>, in an <span>implementation-defined</span> + order (the user agent should pick a consistent ordering, such as the most recently opened, most + recently focused, or more closely related):</p> + + <p class="XXX"><a href="https://github.com/whatwg/html/issues/10850">Issue #10850</a> tracks + picking a specific ordering, to achieve interoperability.</p> + + <ol> + <li><p>If <var>currentTopLevelBrowsingContext</var> is <var>topLevelBrowsingContext</var>, then + <span>continue</span>.</p></li> + + <li><p>Let <var>documentToSearch</var> be <var>topLevelBrowsingContext</var>'s <span>active + document</span>.</p></li> + + <li> + <p><span data-x="list iterate">For each</span> <var>navigable</var> of the <span>inclusive + descendant navigables</span> of <var>documentToSearch</var>:</p> + + <ol> + <li><p>If <var>currentNavigable</var>'s <span data-x="nav-bc">active browsing context</span> + is not <span>familiar with</span> <var>navigable</var>'s <span data-x="nav-bc">active + browsing context</span>, then <span>continue</span>.</p></li> + + <li> + <p>If <var>currentNavigable</var> is not <span>allowed by sandboxing to navigate</span> + <var>navigable</var> given <var>sourceSnapshotParams</var>, then optionally + <span>continue</span>.</p> + + + <p class="XXX"><a href="https://github.com/whatwg/html/issues/10849">Issue #10849</a> tracks + making this check required, to achieve interoperability.</p> + </li> + + <li><p>If <var>navigable</var>'s <span data-x="nav-target">target name</span> is + <var>name</var>, then return <var>navigable</var>.</p></li> + </ol> + </li> + </ol> + </li> + + <li><p>Return null.</p></li> + </ol> + <p id="the-rules-for-choosing-a-browsing-context-given-a-browsing-context-name"><dfn>The rules for choosing a navigable</dfn>, given a string <var>name</var>, a <span>navigable</span> <var>currentNavigable</var>, and a boolean <var>noopener</var> are as follows:</p> @@ -97786,21 +97956,11 @@ interface <dfn interface>NotRestoredReasons</dfn> { data-x="">_top</code>", set <var>chosen</var> to <var>currentNavigable</var>'s <span data-x="nav-traversable">traversable navigable</span>.</p></li> - <li> - <p>Otherwise, if <var>name</var> is not an <span>ASCII case-insensitive</span> match for "<code - data-x="">_blank</code>", there exists a <span>navigable</span> whose <span - data-x="nav-target">target name</span> is the same as <var>name</var>, - <var>currentNavigable</var>'s <span data-x="nav-bc">active browsing context</span> is - <span>familiar with</span> that <span>navigable</span>'s <span data-x="nav-bc">active browsing - context</span>, and the user agent determines that the two browsing contexts are related enough - that it is ok if they reach each other, set <var>chosen</var> to that navigable. If there are - multiple matching <span data-x="navigable">navigables</span>, the user agent should pick one in - some arbitrary consistent manner, such as the most recently opened, most recently focused, or - more closely related, and set <var>chosen</var> to it.</p> - - <p class="XXX">This will be made more precise in <a - href="https://github.com/whatwg/html/issues/313">issue #313</a>.</p> - </li> + <li><p>Otherwise, if <var>name</var> is not an <span>ASCII case-insensitive</span> match for + "<code data-x="">_blank</code>", and there exists a <span>navigable</span> that is the result of + <span data-x="find a navigable by target name">finding a navigable by target name</span> given + <var>name</var> and <var>currentNavigable</var>, set <var>chosen</var> to that + navigable.</p></li> <li> <p>Otherwise, a new <span>top-level traversable</span> is being requested, and what happens @@ -99528,6 +99688,11 @@ location.href = '#foo';</code></pre> <dt><dfn data-x="navigation-params-about-base-url">about base URL</dfn></dt> <dd>a <span>URL</span> or null used to populate the new <code>Document</code>'s <span data-x="concept-document-about-base-url">about base URL</span></dd> + + <dt><dfn data-x="navigation-params-user-involvement">user involvement</dfn></dt> + <dd>a <span>user navigation involvement</span> used when <span + data-x="obtain-browsing-context-navigation">obtaining a browsing context</span> for the new + <code>Document</code></dd> </dl> <p class="note">Once a <span>navigation params</span> struct is created, this standard does not @@ -99832,8 +99997,8 @@ location.href = '#foo';</code></pre> <li><p><span>Queue a global task</span> on the <span>navigation and traversal task source</span> given <var>navigable</var>'s <span data-x="nav-window">active window</span> to <span>navigate to a <code>javascript:</code> URL</span> given <var>navigable</var>, - <var>url</var>, <var>historyHandling</var>, <var>initiatorOriginSnapshot</var>, and - <var>cspNavigationType</var>.</p></li> + <var>url</var>, <var>historyHandling</var>, <var>initiatorOriginSnapshot</var>, + <var>userInvolvement</var>, and <var>cspNavigationType</var>.</p></li> <li><p>Return.</p></li> </ol> @@ -100058,6 +100223,9 @@ location.href = '#foo';</code></pre> <dt><span data-x="navigation-params-about-base-url">about base URL</span></dt> <dd><var>documentState</var>'s <span data-x="document-state-about-base-url">about base URL</span></dd> + + <dt><span data-x="navigation-params-user-involvement">user involvement</span></dt> + <dd><var>userInvolvement</var></dd> </dl> </li> </ol> @@ -100067,9 +100235,9 @@ location.href = '#foo';</code></pre> <p><span>Attempt to populate the history entry's document</span> for <var>historyEntry</var>, given <var>navigable</var>, "<code data-x="dom-navigationtimingtype-navigate">navigate</code>", <var>sourceSnapshotParams</var>, - <var>targetSnapshotParams</var>, <var>navigationId</var>, <var>navigationParams</var>, - <var>cspNavigationType</var>, with <i data-x="attempt-to-populate-allow-post">allowPOST</i> - set to true and <i + <var>targetSnapshotParams</var>, <var>userInvolvement</var>, <var>navigationId</var>, + <var>navigationParams</var>, <var>cspNavigationType</var>, with <i + data-x="attempt-to-populate-allow-post">allowPOST</i> set to true and <i data-x="attempt-to-populate-completion-steps">completionSteps</i> set to the following step:</p> @@ -100077,8 +100245,8 @@ location.href = '#foo';</code></pre> <li><p><span data-x="tn-append-session-history-traversal-steps">Append session history traversal steps</span> to <var>navigable</var>'s <span data-x="nav-traversable">traversable</span> to <span>finalize a cross-document - navigation</span> given <var>navigable</var>, <var>historyHandling</var>, and - <var>historyEntry</var>.</p></li> + navigation</span> given <var>navigable</var>, <var>historyHandling</var>, + <var>userInvolvement</var>, and <var>historyEntry</var>.</p></li> </ol> </li> </ol> @@ -100097,8 +100265,9 @@ location.href = '#foo';</code></pre> <h6>The usual cross-document navigation case</h6> <p>To <dfn>finalize a cross-document navigation</dfn> given a <span>navigable</span> - <var>navigable</var>, <span>history handling behavior</span> <var>historyHandling</var>, and - <span>session history entry</span> <var>historyEntry</var>:</p> + <var>navigable</var>, a <span>history handling behavior</span> <var>historyHandling</var>, a + <span>user navigation involvement</span> <var>userInvolvement</var>, and a <span>session history + entry</span> <var>historyEntry</var>:</p> <ol> <li><p><span>Assert</span>: this is running on <var>navigable</var>'s <span @@ -100190,7 +100359,7 @@ location.href = '#foo';</code></pre> </li> <li><p><span>Apply the push/replace history step</span> <var>targetStep</var> to - <var>traversable</var> given <var>historyHandling</var>.</p></li> + <var>traversable</var> given <var>historyHandling</var> and <var>userInvolvement</var>.</p></li> </ol> @@ -100202,8 +100371,9 @@ location.href = '#foo';</code></pre> <p>To <dfn>navigate to a <code>javascript:</code> URL</dfn>, given a <span>navigable</span> <var>targetNavigable</var>, a <span>URL</span> <var>url</var>, a <span>history handling - behavior</span> <var>historyHandling</var>, an <span>origin</span> <var>initiatorOrigin</var>, - and a string <var>cspNavigationType</var>:</p> + behavior</span> <var>historyHandling</var>, an <span>origin</span> <var>initiatorOrigin</var>, a + <span>user navigation involvement</span> <var>userInvolvement</var>, and a string + <var>cspNavigationType</var>:</p> <ol> <li><p><span>Assert</span>: <var>historyHandling</var> is "<code @@ -100229,7 +100399,7 @@ location.href = '#foo';</code></pre> <li><p>Let <var>newDocument</var> be the result of <span data-x="evaluate a javascript: URL">evaluating a <code>javascript:</code> URL</span> given <var>targetNavigable</var>, - <var>url</var>, and <var>initiatorOrigin</var>.</p></li> + <var>url</var>, <var>initiatorOrigin</var>, and <var>userInvolvement</var>.</p></li> <li> <p>If <var>newDocument</var> is null, then return.</p> @@ -100311,12 +100481,13 @@ location.href = '#foo';</code></pre> <li><p><span data-x="tn-append-session-history-traversal-steps">Append session history traversal steps</span> to <var>targetNavigable</var>'s <span data-x="nav-traversable">traversable</span> to <span>finalize a cross-document navigation</span> with <var>targetNavigable</var>, - <var>historyHandling</var>, and <var>historyEntry</var>.</p></li> + <var>historyHandling</var>, <var>userInvolvement</var>, and <var>historyEntry</var>.</p></li> </ol> <p>To <dfn>evaluate a <code>javascript:</code> URL</dfn> given a <span>navigable</span> - <var>targetNavigable</var>, a <span>URL</span> <var>url</var>, and an <span>origin</span> - <var>newDocumentOrigin</var>:</p> + <var>targetNavigable</var>, a <span>URL</span> <var>url</var>, an <span>origin</span> + <var>newDocumentOrigin</var>, and a <span>user navigation involvement</span> + <var>userInvolvement</var>:</p> <ol> <li><p>Let <var>urlString</var> be the result of running the <span @@ -100451,6 +100622,9 @@ location.href = '#foo';</code></pre> <dt><span data-x="navigation-params-about-base-url">about base URL</span></dt> <dd><var>targetNavigable</var>'s <span data-x="nav-document">active document</span>'s <span data-x="concept-document-about-base-url">about base URL</span></dd> + + <dt><span data-x="navigation-params-user-involvement">user involvement</span></dt> + <dd><var>userInvolvement</var></dd> </dl> </li> @@ -100592,8 +100766,8 @@ location.href = '#foo';</code></pre> <ol> <li><p><span>Finalize a same-document navigation</span> given <var>traversable</var>, - <var>navigable</var>, <var>historyEntry</var>, <var>entryToReplace</var>, and - <var>historyHandling</var>.</p></li> + <var>navigable</var>, <var>historyEntry</var>, <var>entryToReplace</var>, + <var>historyHandling</var>, and <var>userInvolvement</var>.</p></li> <li><p>Invoke <span>WebDriver BiDi fragment navigated</span> with <var>navigable</var>'s <span data-x="nav-bc">active browsing context</span> and a new <span>WebDriver BiDi navigation @@ -100608,8 +100782,8 @@ location.href = '#foo';</code></pre> <p>To <dfn>finalize a same-document navigation</dfn> given a <span>traversable navigable</span> <var>traversable</var>, a <span>navigable</span> <var>targetNavigable</var>, a <span>session history entry</span> <var>targetEntry</var>, a <span>session history entry</span>-or-null - <var>entryToReplace</var>, and a <span>history handling behavior</span> - <var>historyHandling</var>:</p> + <var>entryToReplace</var>, a <span>history handling behavior</span> <var>historyHandling</var>, + and a <span>user navigation involvement</span> <var>userInvolvement</var>:</p> <p class="note">This is used by both <span data-x="navigate-fragid">fragment navigations</span> and by the <span>URL and history update steps</span>, which are the only synchronous updates to @@ -100663,7 +100837,7 @@ location.href = '#foo';</code></pre> <li> <p><span>Apply the push/replace history step</span> <var>targetStep</var> to - <var>traversable</var> given <var>historyHandling</var>.</p> + <var>traversable</var> given <var>historyHandling</var> and <var>userInvolvement</var>.</p> <p class="note">This is done even for "<code data-x="NavigationHistoryBehavior-replace">replace</code>" navigations, as it resolves race @@ -100716,7 +100890,13 @@ location.href = '#foo';</code></pre> <dt><dfn data-x="non-fetch-scheme-params-nav-timing-type">navigation timing type</dfn></dt> <dd>a <code>NavigationTimingType</code> used for <span data-x="create the navigation timing - entry">creating the navigation timing entry</span> for the new <code>Document</code></dd> + entry">creating the navigation timing entry</span> for the new <code>Document</code> (if one is + created)</dd> + + <dt><dfn data-x="non-fetch-scheme-params-user-involvement">user involvement</dfn></dt> + <dd>a <span>user navigation involvement</span> used when <span + data-x="obtain-browsing-context-navigation">obtaining a browsing context</span> for the new + <code>Document</code> (if one is created)</dd> </dl> <p id="process-a-navigate-url-scheme">To <dfn>attempt to create a non-fetch scheme document</dfn>, @@ -100748,13 +100928,14 @@ location.href = '#foo';</code></pre> <li> <p>Handle <var>url</var> by displaying some sort of inline content, e.g., an error message - because the specified scheme is not one of the supported protocols, or an inline prompt to - allow the user to select <span data-x="dom-navigator-registerProtocolHandler">a registered + because the specified scheme is not one of the supported protocols, or an inline prompt to allow + the user to select <span data-x="dom-navigator-registerProtocolHandler">a registered handler</span> for the given scheme. Return the result of <span data-x="navigate-ua-inline">displaying the inline content</span> given <var>navigable</var>, - <var>navigationParams</var>'s <span data-x="non-fetch-scheme-params-id">id</span>, and + <var>navigationParams</var>'s <span data-x="non-fetch-scheme-params-id">id</span>, <var>navigationParams</var>'s <span data-x="non-fetch-scheme-params-nav-timing-type">navigation - timing type</span>.</p> + timing type</span>, and <var>navigationParams</var>'s <span + data-x="non-fetch-scheme-params-user-involvement">user involvement</span>.</p> <p class="note">In the case of a registered handler being used, <span>navigate</span> will be invoked with a new URL.</p> @@ -100875,7 +101056,7 @@ location.href = '#foo';</code></pre> canceled">check if unloading is canceled</dfn> for a <span>list</span> of <span data-x="navigable">navigables</span> <var>navigablesThatNeedBeforeUnload</var>, given an optional <span>traversable navigable</span> <var>traversable</var>, an optional integer - <var>targetStep</var>, and an optional <span>user navigation involvement</span>-or-null + <var>targetStep</var>, and an optional <span>user navigation involvement</span> <var>userInvolvementForNavigateEvent</var>, run these steps. They return "<code data-x="">canceled-by-beforeunload</code>", "<code data-x="">canceled-by-navigate</code>", or "<code data-x="">continue</code>".</p> @@ -100924,8 +101105,6 @@ location.href = '#foo';</code></pre> </div> <ol> - <li><p><span>Assert</span>: <var>userInvolvementForNavigateEvent</var> is not null.</p></li> - <li><p>Let <var>eventsFired</var> be false.</p></li> <li><p>Let <var>needsBeforeunload</var> be true if <var>navigablesThatNeedBeforeUnload</var> @@ -101177,7 +101356,8 @@ location.href = '#foo';</code></pre> history traversal steps</span> to <var>traversable</var>:</p> <ol> - <li><p><span>Apply the reload history step</span> to <var>traversable</var>.</p></li> + <li><p><span>Apply the reload history step</span> to <var>traversable</var> given + <var>userInvolvement</var>.</p></li> </ol> </li> </ol> @@ -101342,8 +101522,8 @@ location.href = '#foo';</code></pre> <ol> <li><p><span>Finalize a same-document navigation</span> given <var>traversable</var>, - <var>navigable</var>, <var>newEntry</var>, <var>entryToReplace</var>, and - <var>historyHandling</var>.</p></li> + <var>navigable</var>, <var>newEntry</var>, <var>entryToReplace</var>, + <var>historyHandling</var>, and "<code data-x="uni-none">none</code>".</p></li> <li><p>Invoke <span>WebDriver BiDi history updated</span> with <var>navigable</var>.</p></li> </ol> @@ -101383,10 +101563,11 @@ location.href = '#foo';</code></pre> entry</span> <var>entry</var>, given a <span>navigable</span> <var>navigable</var>, a <code>NavigationTimingType</code> <var>navTimingType</var>, a <span>source snapshot params</span> <var>sourceSnapshotParams</var>, a <span>target snapshot params</span> - <var>targetSnapshotParams</var>, an optional <span>navigation ID</span>-or-null - <var>navigationId</var> (default null), an optional <span>navigation params</span>-or-null - <var>navigationParams</var> (default null), an optional string <var>cspNavigationType</var> - (default "<code data-x="">other</code>"), an optional boolean <dfn + <var>targetSnapshotParams</var>, a <span>user navigation involvement</span> + <var>userInvolvement</var>, an optional <span>navigation ID</span>-or-null <var>navigationId</var> + (default null), an optional <span>navigation params</span>-or-null <var>navigationParams</var> + (default null), an optional string <var>cspNavigationType</var> (default "<code + data-x="">other</code>"), an optional boolean <dfn data-x="attempt-to-populate-allow-post"><var>allowPOST</var></dfn> (default false), and optional algorithm steps <dfn data-x="attempt-to-populate-completion-steps"><var>completionSteps</var></dfn> (default an empty @@ -101413,7 +101594,7 @@ location.href = '#foo';</code></pre> <li><p>If <var>documentResource</var> is a string, then set <var>navigationParams</var> to the result of <span data-x="create navigation params from a srcdoc resource">creating navigation params from a srcdoc resource</span> given <var>entry</var>, <var>navigable</var>, - <var>targetSnapshotParams</var>, <var>navigationId</var>, and + <var>targetSnapshotParams</var>, <var>userInvolvement</var>, <var>navigationId</var>, and <var>navTimingType</var>.</p></li> <li> @@ -101431,7 +101612,8 @@ location.href = '#foo';</code></pre> <p>then set <var>navigationParams</var> to the result of <span data-x="create navigation params by fetching">creating navigation params by fetching</span> given <var>entry</var>, <var>navigable</var>, <var>sourceSnapshotParams</var>, <var>targetSnapshotParams</var>, - <var>cspNavigationType</var>, <var>navigationId</var>, and <var>navTimingType</var>.</p> + <var>cspNavigationType</var>, <var>userInvolvement</var>, <var>navigationId</var>, and + <var>navTimingType</var>.</p> </li> <li> @@ -101464,6 +101646,9 @@ location.href = '#foo';</code></pre> <dt><span data-x="non-fetch-scheme-params-nav-timing-type">navigation timing type</span></dt> <dd><var>navTimingType</var></dd> + + <dt><span data-x="non-fetch-scheme-params-user-involvement">user involvement</span></dt> + <dd><var>userInvolvement</var></dd> </dl> </li> </ol> @@ -101553,8 +101738,9 @@ location.href = '#foo';</code></pre> <li><p>Set <var>entry</var>'s <span data-x="she-document-state">document state</span>'s <span data-x="document-state-document">document</span> to the result of <span data-x="navigate-ua-inline">creating a document for inline content that doesn't have a - DOM</span>, given <var>navigable</var>, null, and <var>navTimingType</var>. The inline - content should indicate to the user the sort of error that occurred.</p></li> + DOM</span>, given <var>navigable</var>, null, <var>navTimingType</var>, and + <var>userInvolvement</var>. The inline content should indicate to the user the sort of error + that occurred.</p></li> <li><p><span>Make document unsalvageable</span> given <var>entry</var>'s <span data-x="she-document-state">document state</span>'s <span @@ -101709,8 +101895,9 @@ location.href = '#foo';</code></pre> <p>To <dfn>create navigation params from a srcdoc resource</dfn> given a <span>session history entry</span> <var>entry</var>, a <span>navigable</span> <var>navigable</var>, a <span>target - snapshot params</span> <var>targetSnapshotParams</var>, a <span>navigation ID</span>-or-null - <var>navigationId</var>, and a <code>NavigationTimingType</code> <var>navTimingType</var>:</p> + snapshot params</span> <var>targetSnapshotParams</var>, a <span>user navigation involvement</span> + <var>userInvolvement</var>, a <span>navigation ID</span>-or-null <var>navigationId</var>, and a + <code>NavigationTimingType</code> <var>navTimingType</var>:</p> <ol> <li><p>Let <var>documentResource</var> be <var>entry</var>'s <span @@ -101812,6 +101999,9 @@ location.href = '#foo';</code></pre> <dt><span data-x="navigation-params-about-base-url">about base URL</span></dt> <dd><var>entry</var>'s <span data-x="she-document-state">document state</span>'s <span data-x="document-state-about-base-url">about base URL</span></dd> + + <dt><span data-x="navigation-params-user-involvement">user involvement</span></dt> + <dd><var>userInvolvement</var></dd> </dl> </li> </ol> @@ -101820,7 +102010,8 @@ location.href = '#foo';</code></pre> <span>session history entry</span> <var>entry</var>, a <span>navigable</span> <var>navigable</var>, a <span>source snapshot params</span> <var>sourceSnapshotParams</var>, a <span>target snapshot params</span> <var>targetSnapshotParams</var>, a string - <var>cspNavigationType</var>, a <span>navigation ID</span>-or-null <var>navigationId</var>, and a + <var>cspNavigationType</var>, a <span>user navigation involvement</span> + <var>userInvolvement</var>, a <span>navigation ID</span>-or-null <var>navigationId</var>, and a <code>NavigationTimingType</code> <var>navTimingType</var>, perform the following steps. They return a <span>navigation params</span>, a <span>non-fetch scheme navigation params</span>, or null.</p> @@ -102350,6 +102541,9 @@ location.href = '#foo';</code></pre> <dt><span data-x="non-fetch-scheme-params-nav-timing-type">navigation timing type</span></dt> <dd><var>navTimingType</var></dd> + + <dt><span data-x="non-fetch-scheme-params-user-involvement">user involvement</span></dt> + <dd><var>userInvolvement</var></dd> </dl> <p class="note">At this point, <var>request</var>'s <span @@ -102450,6 +102644,9 @@ location.href = '#foo';</code></pre> <dt><span data-x="navigation-params-about-base-url">about base URL</span></dt> <dd><var>entry</var>'s <span data-x="she-document-state">document state</span>'s <span data-x="document-state-about-base-url">about base URL</span></dd> + + <dt><span data-x="navigation-params-user-involvement">user involvement</span></dt> + <dd><var>userInvolvement</var></dd> </dl> </li> </ol> @@ -102514,7 +102711,11 @@ location.href = '#foo';</code></pre> <dd>If the user agent's <span>PDF viewer supported</span> is true, return the result of <span data-x="navigate-ua-inline">creating a document for inline content that doesn't have a DOM</span> given <var>navigationParams</var>'s <span - data-x="navigation-params-navigable">navigable</span>.</dd> + data-x="navigation-params-navigable">navigable</span>, <var>navigationParams</var>'s <span + data-x="navigation-params-id">id</span>, <var>navigationParams</var>'s <span + data-x="navigation-params-nav-timing-type">navigation timing type</span>, and + <var>navigationParams</var>'s <span data-x="navigation-params-user-involvement">user + involvement</span>.</dd> </dl> <p>Otherwise, proceed onward.</p> @@ -102542,8 +102743,10 @@ location.href = '#foo';</code></pre> data-x="navigate-ua-inline">creating a document for inline content that doesn't have a DOM</span> given <var>navigationParams</var>'s <span data-x="navigation-params-navigable">navigable</span>, <var>navigationParams</var>'s <span - data-x="navigation-params-id">id</span>, and <var>navigationParams</var>'s <span - data-x="navigation-params-nav-timing-type">navigation timing type</span>.</p></li> + data-x="navigation-params-id">id</span>, <var>navigationParams</var>'s <span + data-x="navigation-params-nav-timing-type">navigation timing type</span>, and + <var>navigationParams</var>'s <span data-x="navigation-params-user-involvement">user + involvement</span>.</p></li> <li><p>Otherwise, the document's <var>type</var> is such that the resource will not affect <var>navigationParams</var>'s <span data-x="navigation-params-navigable">navigable</span>, e.g., @@ -102610,18 +102813,19 @@ location.href = '#foo';</code></pre> data-x="tn-current-session-history-step">current session history step</span>.</p></li> <li><p>Return the result of <span data-x="apply the history step">applying the history - step</span> <var>step</var> to <var>traversable</var> given false, null, null, null, and - null.</p></li> + step</span> <var>step</var> to <var>traversable</var> given false, null, null, "<code + data-x="uni-none">none</code>", and null.</p></li> </ol> <p>To <dfn>apply the push/replace history step</dfn> given a non-negative integer <var>step</var> - and a <span>history handling behavior</span> <var>historyHandling</var> to a - <span>traversable navigable</span> <var>traversable</var>:</p> + to a <span>traversable navigable</span> <var>traversable</var>, given a <span>history handling + behavior</span> <var>historyHandling</var> and a <span>user navigation involvement</span> + <var>userInvolvement</var>:</p> <ol> <li><p>Return the result of <span data-x="apply the history step">applying the history - step</span> <var>step</var> to <var>traversable</var> given false, null, null, null, and - <var>historyHandling</var>.</p></li> + step</span> <var>step</var> to <var>traversable</var> given false, null, null, + <var>userInvolvement</var>, and <var>historyHandling</var>.</p></li> </ol> <p class="note"><span>Apply the push/replace history step</span> never passes <span>source @@ -102630,15 +102834,17 @@ location.href = '#foo';</code></pre> data-x="navigate">navigation</span> algorithm.</p> <p>To <dfn>apply the reload history step</dfn> to a <span>traversable navigable</span> - <var>traversable</var>:</p> + <var>traversable</var> given <span>user navigation involvement</span> + <var>userInvolvement</var>:</p> <ol> <li><p>Let <var>step</var> be <var>traversable</var>'s <span data-x="tn-current-session-history-step">current session history step</span>.</p></li> <li><p>Return the result of <span data-x="apply the history step">applying the history - step</span> <var>step</var> to <var>traversable</var> given true, null, null, null, - and "<code data-x="dom-NavigationType-reload">reload</code>".</p></li> + step</span> <var>step</var> to <var>traversable</var> given true, null, null, + <var>userInvolvement</var>, and "<code + data-x="dom-NavigationType-reload">reload</code>".</p></li> </ol> <p class="note"><span>Apply the reload history step</span> never passes <span>source snapshot @@ -102667,11 +102873,11 @@ location.href = '#foo';</code></pre> non-negative integer <var>step</var> to a <span>traversable navigable</span> <var>traversable</var>, with boolean <var>checkForCancelation</var>, <span>source snapshot params</span>-or-null <var>sourceSnapshotParams</var>, <span>navigable</span>-or-null - <var>initiatorToCheck</var>, <span>user navigation involvement</span>-or-null - <var>userInvolvementForNavigateEvents</var>, and <code>NavigationType</code>-or-null - <var>navigationType</var>, perform the following steps. They return "<code - data-x="">initiator-disallowed</code>", "<code data-x="">canceled-by-beforeunload</code>", "<code - data-x="">canceled-by-navigate</code>", or "<code data-x="">applied</code>".</p> + <var>initiatorToCheck</var>, <span>user navigation involvement</span> <var>userInvolvement</var>, + and <code>NavigationType</code>-or-null <var>navigationType</var>, perform the following steps. + They return "<code data-x="">initiator-disallowed</code>", "<code + data-x="">canceled-by-beforeunload</code>", "<code data-x="">canceled-by-navigate</code>", or + "<code data-x="">applied</code>".</p> <ol> <li><p><span>Assert</span>: This is running within <var>traversable</var>'s <span @@ -102700,8 +102906,8 @@ location.href = '#foo';</code></pre> <li><p>If <var>checkForCancelation</var> is true, and the result of <span>checking if unloading is canceled</span> given <var>navigablesCrossingDocuments</var>, <var>traversable</var>, - <var>targetStep</var>, and <var>userInvolvementForNavigateEvents</var> is not "<code - data-x="">continue</code>", then return that result.</p></li> + <var>targetStep</var>, and <var>userInvolvement</var> is not "<code data-x="">continue</code>", + then return that result.</p></li> <li><p>Let <var>changingNavigables</var> be the result of <span>get all navigables whose current session history entry will change or reload</span> given <var>traversable</var> and @@ -102850,16 +103056,12 @@ location.href = '#foo';</code></pre> <p>then:</p> <ol> - <li><p><span>Assert</span>: <var>userInvolvementForNavigateEvents</var> is not - null.</p></li> - <li><p>Let <var>navigation</var> be <var>navigable</var>'s <span data-x="nav-window">active window</span>'s <span data-x="window-navigation-api">navigation API.</span></p></li> <li><p><span>Fire a traverse <code data-x="event-navigate">navigate</code> event</span> at - <var>navigation</var> given <var>targetEntry</var> and - <var>userInvolvementForNavigateEvents</var>.</p></li> + <var>navigation</var> given <var>targetEntry</var> and <var>userInvolvement</var>.</p></li> </ol> </li> @@ -102905,8 +103107,9 @@ location.href = '#foo';</code></pre> <li><p><span>In parallel</span>, <span>attempt to populate the history entry's document</span> for <var>targetEntry</var>, given <var>navigable</var>, <var>potentiallyTargetSpecificSourceSnapshotParams</var>, <var>targetSnapshotParams</var>, - with <i data-x="attempt-to-populate-allow-post">allowPOST</i> set to <var>allowPOST</var> - and <span data-x="attempt-to-populate-completion-steps"><i>completionSteps</i></span> set to + <var>userInvolvement</var>, with <i data-x="attempt-to-populate-allow-post">allowPOST</i> set + to <var>allowPOST</var> and <span + data-x="attempt-to-populate-completion-steps"><i>completionSteps</i></span> set to <span>queue a global task</span> on the <span>navigation and traversal task source</span> given <var>navigable</var>'s <span data-x="nav-window">active window</span> to run <var>afterDocumentPopulated</var>.</p></li> @@ -104397,18 +104600,10 @@ location.href = '#foo';</code></pre> data-x="dom-DOMImplementation-createHTMLDocument">document.implementation.createHTMLDocument()</code>.</p> <ol> - <li><p>Let <var>browsingContext</var> be <var>navigationParams</var>'s <span - data-x="navigation-params-navigable">navigable</span>'s <span data-x="nav-bc">active browsing - context</span>.</p></li> - <li> - <p>Set <var>browsingContext</var> to the result of the <span + <p>Let <var>browsingContext</var> be the result of <span data-x="obtain-browsing-context-navigation">obtaining a browsing context to use for a - navigation response</span> given <var>browsingContext</var>, <var>navigationParams</var>'s - <span data-x="navigation-params-sandboxing">final sandboxing flag set</span>, - <var>navigationParams</var>'s <span data-x="navigation-params-coop">cross-origin opener - policy</span>, and <var>navigationParams</var>'s <span - data-x="navigation-params-coop-enforcement-result">COOP enforcement result</span>.</p> + navigation response</span> given <var>navigationParams</var>.</p> <p class="note">This can result in a <a href="#browsing-context-group-switches-due-to-cross-origin-opener-policy">browsing context @@ -105043,8 +105238,8 @@ new PaymentRequest(…); // Allowed to use <p>When the user agent is to create a document to display a user agent page or PDF viewer inline, provided a <span>navigable</span> <var>navigable</var>, a <span>navigation ID</span> - <var>navigationId</var>, a <code>NavigationTimingType</code> <var>navTimingType</var>, the - user agent should:</p> + <var>navigationId</var>, a <code>NavigationTimingType</code> <var>navTimingType</var>, and a + <span>user navigation involvement</span> <var>userInvolvement</var>, the user agent should:</p> <ol> <li><p>Let <var>origin</var> be a new <span data-x="concept-origin-opaque">opaque @@ -105113,6 +105308,9 @@ new PaymentRequest(…); // Allowed to use <dt><span data-x="navigation-params-about-base-url">about base URL</span></dt> <dd>null</dd> + + <dt><span data-x="navigation-params-user-involvement">user involvement</span></dt> + <dd><var>userInvolvement</var></dd> </dl> </li> @@ -145914,6 +146112,7 @@ INSERT INTERFACES HERE Kevin Benson, Kevin Cole, Kevin Gadd, + Kevin McNee, Kevin Venkiteswaran, Khushal Sagar, Kinuko Yasuda,