Skip to content

Commit

Permalink
Move referrer policy into policy container
Browse files Browse the repository at this point in the history
This change moves referrer policy from Document/WorkerGlobalScope into policy container. This allows us to simplify several steps (initializing for new empty documents, populating from the response headers, inheriting for local scheme documents), since they are handled centrally via the policy container mechanisms.

Companion PRs:
* whatwg/fetch#1233
* w3c/ServiceWorker#1593 (removes referrer policy from service workers as that comes for free with policy container)
* w3c/webappsec-referrer-policy#152

The change is mostly a refactoring and should have no significant behavioral changes, apart from simplifying the referrer policy inheritance mechanism. The most visible behavioral change of this is that referrer policy of a srcdoc iframe will be now copied from the parent document at creation time instead of referencing the parent document referrer policy.
  • Loading branch information
antosart authored May 31, 2021
1 parent f67b46d commit 0e2bdcf
Showing 1 changed file with 18 additions and 67 deletions.
85 changes: 18 additions & 67 deletions source
Original file line number Diff line number Diff line change
Expand Up @@ -9202,11 +9202,6 @@ partial interface <dfn id="document" data-lt="">Document</dfn> {
for="Document">policy container</dfn> (a <span>policy container</span>), initially a new policy
container, which contains policies which apply to the <code>Document</code>.</p>

<p>The <code>Document</code> has a <dfn data-x="concept-document-referrer-policy" export
for="Document">referrer policy</dfn> (a <span>referrer policy</span>), initially the empty string,
which represents the default <span>referrer policy</span> used by <span
data-x="concept-fetch">fetches</span> initiated by the <code>Document</code>.</p>

<p>The <code>Document</code> has an <dfn data-x="concept-document-embedder-policy">embedder
policy</dfn> (an <span>embedder policy</span>).</p>

Expand Down Expand Up @@ -14348,8 +14343,9 @@ interface <dfn>HTMLMetaElement</dfn> : <span>HTMLElement</span> {
</li>

<li><p>If <var>value</var> is a <span>referrer policy</span>, then set <var>element</var>'s
<span>node document</span>'s <span data-x="concept-document-referrer-policy">referrer
policy</span> to <var>policy</var>.</p></li>
<span>node document</span>'s <span data-x="concept-document-policy-container">policy
container</span>'s <span data-x="policy-container-referrer-policy">referrer policy</span> to
<var>policy</var>.</p></li>
</ol>

<p class="note">The fact that these steps are applied for each element enables <a
Expand Down Expand Up @@ -78595,10 +78591,6 @@ popup4.close();</code></pre></div>
<var>document</var>'s <span data-x="the document's referrer">referrer</span> to the <span
data-x="concept-url-serializer">serialization</span> of it.</p></li>

<li><p>If <var>creator</var> is non-null, then set <var>document</var>'s
<span data-x="concept-document-referrer-policy">referrer policy</span> to <var>creator</var>'s
<span data-x="concept-document-referrer-policy">referrer policy</span>.</p></li>

<li><p>If <var>creator</var> is non-null, then set <var>document</var>'s
<span data-x="concept-document-embedder-policy">embedder policy</span> to <var>creator</var>'s
<span data-x="concept-document-embedder-policy">embedder policy</span>.</p></li>
Expand Down Expand Up @@ -80820,23 +80812,6 @@ interface <dfn>BarProp</dfn> {
<code>Document</code></span>.</p>
</dd>

<dt>The <span data-x="concept-settings-object-referrer-policy">referrer policy</span></dt>
<dd>
<ol>
<li><p>Let <var>document</var> be <var>window</var>'s <span
data-x="concept-document-window">associated <code>Document</code></span>.</p></li>

<li><p>While <var>document</var> is <span>an <code>iframe</code>
<code data-x="attr-iframe-srcdoc">srcdoc</code> document</span> and <var>document</var>'s
<span data-x="concept-document-referrer-policy">referrer policy</span> is the empty
string, set <var>document</var> to <var>document</var>'s
<span data-x="concept-document-bc">browsing context</span>'s
<span data-x="bc-container-document">container document</span>.</p></li>

<li><p>Return <var>document</var>'s <span data-x="concept-document-referrer-policy">referrer
policy</span>.</p></li>
</ol>

<dt>The <span data-x="concept-settings-object-embedder-policy">embedder policy</span></dt>
<dd><p>Return <var>window</var>'s <span data-x="concept-document-window">associated
<code>Document</code></span>'s <span data-x="concept-document-embedder-policy">embedder
Expand Down Expand Up @@ -83504,6 +83479,10 @@ interface <dfn>BarProp</dfn> {
<ul>
<li><p>A <dfn export for="policy container" data-x="policy-container-csp-list">CSP list</dfn>,
which is a <span data-x="concept-csp-list">CSP list</span>. It is initially empty.</p></li>

<li><p>A <dfn export for="policy container" data-x="policy-container-referrer-policy">referrer
policy</dfn>, which is a <span>referrer policy</span>. It is initially the <span>default referrer
policy</span>.</p></li>
</ul>

<p class="XXX">Move other policies into the policy container.</p>
Expand All @@ -83519,6 +83498,10 @@ interface <dfn>BarProp</dfn> {
data-x="list append">append</span> a copy of <var>policy</var> into <var>clone</var>'s <span
data-x="policy-container-csp-list">CSP list</span>.</p></li>

<li><p>Set <var>clone</var>'s <span data-x="policy-container-referrer-policy">referrer
policy</span> to <var>policyContainer</var>'s <span
data-x="policy-container-referrer-policy">referrer policy</span>.</p></li>

<li><p>Return <var>clone</var>.</p></li>
</ol>

Expand Down Expand Up @@ -83560,6 +83543,11 @@ interface <dfn>BarProp</dfn> {
result of <span data-x="parse-response-csp">parsing a response's Content Security Policies</span>
given <var>response</var>.</p></li>

<li><p>Set <var>result</var>'s <span data-x="policy-container-referrer-policy">referrer
policy</span> to the result of <span data-x="parse-referrer-policy-header">parsing the
`<code>Referrer-Policy</code>` header</span> given <var>response</var>. <ref
spec="REFERRERPOLICY"></p></li>

<li><p>Return <var>result</var>.</p></li>
</ol>

Expand Down Expand Up @@ -86324,10 +86312,8 @@ interface <dfn>Location</dfn> { // but see also <a href="#the-location-interface
<p>If <span data-x="js-Type">Type</span>(<var>result</var>) is String, then set
<var>response</var> to a <span data-x="concept-response">response</span> whose <span
data-x="concept-response-header-list">header list</span> consists of
`<code>Content-Type</code>`/`<code>text/html</code>` and `<code
data-x="http-referrer-policy">Referrer-Policy</code>`/<var>settings</var>'s <span>referrer
policy</span>, and whose <span data-x="concept-response-body">body</span> is
<var>result</var>.</p>
`<code>Content-Type</code>`/`<code>text/html</code>`, and whose <span
data-x="concept-response-body">body</span> is <var>result</var>.</p>

<p class="XXX">The exact conversion between the string <var>result</var> and the bytes that
comprise a <span data-x="concept-response-body">response body</span> is not yet specified,
Expand Down Expand Up @@ -86503,11 +86489,6 @@ interface <dfn>Location</dfn> { // but see also <a href="#the-location-interface
<li><p>Set <var>document</var>'s <span>current document readiness</span> to "<code
data-x="">loading</code>".</p></li>

<li><p>Set <var>document</var>'s <span data-x="concept-document-referrer-policy">referrer
policy</span> to the result of <span data-x="parse-referrer-policy-header">parsing the
`<code>Referrer-Policy</code>` header</span> of <var>navigationParams</var>'s <span
data-x="navigation-params-response">response</span>. <ref spec="REFERRERPOLICY"></p></li>

<li><p>If <var>navigationParam</var>'s <span
data-x="navigation-params-reserved-environment">reserved environment</span> is non-null, then set
<var>document</var>'s <span data-x="concept-document-embedder-policy">embedder policy</span> to
Expand Down Expand Up @@ -88716,13 +88697,6 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
<p>A <span>policy container</span> containing policies used for security checks.</p>
</dd>

<dt>A <dfn data-x="concept-settings-object-referrer-policy" export
for="environment settings object">referrer policy</dfn></dt>

<dd><p>The default <span>referrer policy</span> for <span data-x="concept-fetch">fetches</span>
performed using this <span>environment settings object</span> as a <span
data-x="concept-request-client">request client</span>. <ref spec=REFERRERPOLICY>

<dt>An <dfn data-x="concept-settings-object-embedder-policy" export
for="environment settings object">embedder policy</dfn></dt>

Expand Down Expand Up @@ -100027,10 +100001,6 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
data-x="concept-WorkerGlobalScope-policy-container">policy container</dfn> (a <span>policy
container</span>). It is initially a new <span>policy container</span>.</p>

<p>A <code>WorkerGlobalScope</code> object has an associated <dfn export for="WorkerGlobalScope"
data-x="concept-WorkerGlobalScope-referrer-policy">referrer policy</dfn> (a <span>referrer
policy</span>). It is initially the empty string.</p>

<p>A <code>WorkerGlobalScope</code> object has an associated <dfn export for="WorkerGlobalScope"
data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</dfn> (an <span>embedder
policy</span>).</p>
Expand Down Expand Up @@ -100470,11 +100440,6 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
data-x="">Blocked</code>" when executed upon <var>worker global scope</var>, set
<var>response</var> to a <span>network error</span>. <ref spec=CSP></p></li>

<li><p>Set <var>worker global scope</var>'s <span
data-x="concept-WorkerGlobalScope-referrer-policy">referrer policy</span> to the result of
<span data-x="parse-referrer-policy-header">parsing the `<code>Referrer-Policy</code>`
header</span> of <var>response</var>.</p></li>

<li><p>If <var>response</var>'s <span data-x="concept-response-url">url</span>'s <span
data-x="concept-url-scheme">scheme</span> is a <span>local scheme</span>, then set
<var>worker global scope</var>'s <span
Expand Down Expand Up @@ -100816,12 +100781,6 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
data-x="concept-WorkerGlobalScope-policy-container">policy container</span>.</p>
</dd>

<dt>The <span data-x="concept-settings-object-referrer-policy">referrer policy</span></dt>
<dd>
<p>Return <var>worker global scope</var>'s <span
data-x="concept-WorkerGlobalScope-referrer-policy">referrer policy</span>.</p>
</dd>

<dt>The <span data-x="concept-settings-object-embedder-policy">embedder policy</span></dt>
<dd>
<p>Return <var>worker global scope</var>'s <span
Expand Down Expand Up @@ -101945,9 +101904,6 @@ interface <dfn interface>WorkletGlobalScope</dfn> {};</code></pre>
container">clone</span> of <var>outsideSettings</var>'s <span
data-x="concept-settings-object-policy-container">policy container</span>.</p></li>

<li><p>Let <var>inheritedReferrerPolicy</var> be <var>outsideSettings</var>'s <span
data-x="concept-settings-object-referrer-policy">referrer policy</span>.</p></li>

<li><p>Let <var>inheritedEmbedderPolicy</var> be <var>outsideSettings</var>'s <span
data-x="concept-settings-object-embedder-policy">embedder policy</span>.</p></li>

Expand Down Expand Up @@ -102004,11 +101960,6 @@ interface <dfn interface>WorkletGlobalScope</dfn> {};</code></pre>
<p>Return <var>inheritedPolicyContainer</var>.</p>
</dd>

<dt>The <span data-x="concept-settings-object-referrer-policy">referrer policy</span></dt>
<dd>
<p>Return <var>inheritedReferrerPolicy</var>.</p>
</dd>

<dt>The <span data-x="concept-settings-object-embedder-policy">embedder policy</span></dt>
<dd>
<p>Return <var>inheritedEmbedderPolicy</var>.</p>
Expand Down

0 comments on commit 0e2bdcf

Please sign in to comment.