Skip to content

Redact ancestorOrigins using iframe referrerpolicy#11560

Merged
zcorpan merged 13 commits into
mainfrom
zcorpan/redact-ancestororigins
Mar 11, 2026
Merged

Redact ancestorOrigins using iframe referrerpolicy#11560
zcorpan merged 13 commits into
mainfrom
zcorpan/redact-ancestororigins

Conversation

@zcorpan
Copy link
Copy Markdown
Member

@zcorpan zcorpan commented Aug 14, 2025

This aligns ancestorOrigins exposure with referrer policy when using the iframe referrerpolicy attribute, so an embedder can prevent revealing its own origin to embedded documents. If an <iframe> uses referrerpolicy="no-referrer" or same-origin (and the parent and child are cross-origin), the parent’s origin and any same-origin ancestors are replaced with opaque origins (until reaching an ancestor that is cross-origin). Other policies continue to expose full origins.

This approach keeps existing behavior by default (for web compat) while addressing privacy concerns with an opt-out.

The algorithm reuses the parent's existing list of ancestor origins, avoiding synchronous cross-process lookups and ensuring a stable snapshot even if ancestors mutate their referrerpolicy attributes later.

Fixes #1918. Closes #2480.

(See WHATWG Working Mode: Changes for more details.)


/browsers.html ( diff )
/browsing-the-web.html ( diff )
/document-lifecycle.html ( diff )
/document-sequences.html ( diff )
/dom.html ( diff )
/iframe-embed-object.html ( diff )
/index.html ( diff )
/infrastructure.html ( diff )
/nav-history-apis.html ( diff )

@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Aug 14, 2025

This is the same as @annevk's #2480 but applied on top of the latest main. Rebasing involved a lot of unrelated conflicts, so instead I copied over the content in a new branch.

@annevk
Copy link
Copy Markdown
Member

annevk commented Aug 14, 2025

I think using the document's referrer is the wrong model. Because we don't care about the referrer of top-level example.com (how the user got to example.com, perhaps from search.example), we care about example.com's policy (or its iframe's policy) when embedding widget.example, when determining what information widget.example should have access to.

Comment thread source Outdated
@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Aug 14, 2025

I created a doc to work out how to specify this with the new model: https://docs.google.com/document/d/1TDryRMiw7sVKBfrvnzEQk0PzGQk7_G7ShF4Uy68MvSU/edit?usp=sharing

Copy of the doc's current state

Example 1

  • example.org (no referrer policy)
    • Iframe referrerpolicy=”no-referrer”
      • Widget.example

Result: [“https://widget.example”, “null”]

Example 2

  • example.org (no referrer policy)
    • Iframe referrerpolicy=”no-referrer”
      • Widget.example and navigates to other.example

Result: ???

Algo

HTML:

  1. Let output be a new list of strings.
  2. Let currentDoc be the Location object's relevant Document.
  3. Let innerDoc be current.
  4. Let currentContainer be null.
  5. While currentDoc’'s container document is non-null:
    1. Set currentContainer to current’s node navigable’s container.
    2. Set currentDoc to current's container document.
    3. Let origin be the result of getting an origin if the referrer policy allows given currentContainer, currentDoc, and innerDoc.
    4. Append the serialization of current's origin to output.
  6. Return output.

Referrer Policy:

To get an origin if the referrer policy allows given an element or null container, a document doc, and a document innerDoc:

  1. Let elementReferrerPolicy be the empty string.
  2. If element is not null, then set elementReferrerPolicy to element’s referrerpolicy attribute’s state.
  3. Let docReferrerPolicy be doc’s referrer policy.
  4. Let referrerPolicy be elementReferrerPolicy.
  5. If referrerPolicy is the empty string, then set referrerPolicy to docReferrerPolicy.
  6. If referrerPolicy is “no-referrer”, then return “null”.
  7. If referrerPolicy is “same-origin” and doc’s origin is not same origin with innerDoc’s origin, then return “null”.
  8. If referrerPolicy is “strict-origin”, "strict-origin-when-cross-origin", “no-referrer-when-downgrade”, and innerDoc’s URL is not potentially trustworthy but doc’s URL is potentially trustworthy, then return “null”.
  9. Return the serialization of doc’s origin.

@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Sep 1, 2025

Doc updated. I've changed the algorithm to avoid exposing A's origin in the A->A->C case with the innermost iframe having referrerpolicy="no-referrer". Also added examples from w3c/webappsec-referrer-policy#77 (comment) and a polyfill to test with.

Copy of the doc's current state

Algorithm

HTML:

  1. Let output be a new list of strings.
  2. Let currentDoc be the Location object's relevant Document.
  3. Let innerDoc be currentDoc.
  4. Let currentContainer be null.
  5. Let prevOrigin and prevMasked be uninitialized.
  6. While currentDoc’s container document is non-null:
    1. Set currentContainer to currentDoc’s node navigable’s container.
    2. Set currentDoc to currentDoc's container document.
    3. Let « origin, masked » be the result of [=getting an ancestor origin if the referrer policy allows=] given currentContainer, currentDoc, and innerDoc.
    4. If prevMasked is true and origin is same origin with prevOrigin, then set masked to true.
    5. If masked is true, then append “null” to output.
    6. Otherwise, append the serialization of origin to output.
    7. Set prevOrigin to origin.
    8. Set prevMasked to masked.
  7. Return output.

Referrer Policy:

To get an ancestor origin if the referrer policy allows given an Element container, a Document doc, and a Document innerDoc:

  1. Let elementReferrerPolicy be the empty string.
  2. If container is an iframe element, then set elementReferrerPolicy to container’s referrerpolicy attribute’s state.
  3. Let docReferrerPolicy be doc’s policy container’s referrer policy.
  4. Let referrerPolicy be elementReferrerPolicy.
  5. If referrerPolicy is the empty string, then set referrerPolicy to docReferrerPolicy.
  6. Let masked be false.
  7. If referrerPolicy is “no-referrer”, then set masked to true.
  8. Otherwise, if referrerPolicy is “same-origin” and doc’s origin is not same origin with innerDoc’s origin, then set masked to true.
  9. Return « doc’s origin, masked ».

Note: Since mixed content checks prevent non-secure context documents in secure context documents, there’s no need to check secure context for “strict-origin”, "strict-origin-when-cross-origin", and “no-referrer-when-downgrade”.

Polyfill + demo

https://software.hixie.ch/utilities/js/live-dom-viewer/saved/14030

Examples

iframe referrerpolicy=”no-referrer”

  • Top-level browsing context, default referrer policy, origin: https://a.com
    • iframe referrerpolicy=”no-referrer”, origin: https://b.com

Child: ["null"]

Examples below are from w3c/webappsec-referrer-policy#77 (comment)

top -> sandboxed iframe -> 3rd party iframe (ad)

  • Top-level browsing context, default referrer policy, origin: https://a.com
    • Iframe sandbox, origin: opaque
      • Iframe, origin: https://b.com

Grandchild: ["null","https://a.com"]
Child: ["https://a.com"]

{1, a.com} default referrer policy -> loads {2, b.com} with noreferrer attribute on the iframe tag that's loading b.com -> loads {3, a.com}

  • Top-level browsing context, default referrer policy, origin: https://a.com
    • iframe referrerpolicy=”no-referrer”, origin: https://b.com
      • iframe, origin: https://a.com

Grandchild: ["https://b.com","null"]
Child: ["null"]

{1, a.com} default referrer policy -> loads {2, b.com} with noreferrer attribute on the iframe tag inside {2} -> loads {3, a.com}

  • Top-level browsing context, default referrer policy, origin: https://a.com
    • iframe, origin: https://b.com
      • Iframe referrerpolicy=”no-referrer”, origin: https://a.com

Grandchild: ["null","https://a.com"]
Child: ["https://a.com"]

{1, a.com} default referrer policy -> loads {2, a.com} with noreferrer attribute on the iframe tag inside {2} -> loads {3, c.com}

  • Top-level browsing context, default referrer policy, origin: https://a.com
    • iframe, origin: https://a.com
      • iframe referrerpolicy=”no-referrer”, origin: https://c.com

Grandchild: ["null","null"]
Child: ["https://a.com"]

{1, a.com} default referrer policy -> loads {2, b.com} with default referrer policy -> loads {3, b.com} with noreferrer attribute on the iframe tag inside {3} -> loads {4, a.com}

  • Top-level browsing context, default referrer policy, origin: https://a.com
    • iframe, origin: https://b.com
      • iframe, origin: https://b.com
        • iframe referrerpolicy=”no-referrer”, origin: https://a.com

Grandgrandchild: ["null","null","https://a.com"]
Grandchild: ["https://b.com","https://a.com"]
Child: ["https://a.com"]

@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Sep 2, 2025

After discussing with @farre we found out that reading the iframe's referrerpolicy attribute every time ancestorOrigins is read is not great. Instead, the value of the referrerpolicy attribute should be read when the document is created and stored on the document (or in its policy container).

@zcorpan zcorpan changed the title Redact ancestorOrigins using "the document's referrer" Redact ancestorOrigins using referrer policy Sep 3, 2025
@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Sep 5, 2025

reading the iframe's referrerpolicy attribute every time ancestorOrigins is read is not great.

This was not correct, the spec computes the ancestor origins list when the Location object is created, which happens when the Window object is created.

When a Location object is created, its ancestor origins list must be set to a DOMStringList object whose associated list is the list of strings that the following steps would produce:

https://html.spec.whatwg.org/#concept-location-ancestor-origins-list

Each Window object is associated with a unique instance of a Location object, allocated when the Window object is created.

https://html.spec.whatwg.org/#the-location-interface

So no need to store iframe's referrerpolicy. However, we want to minimize IPC and avoid inconsistency e.g. when an ancestor iframe's referrerpolicy attribute is mutated and a new child iframe is inserted (or is navigated). So the model we came up with now is to take the parent's ancestor origins list, mask some values as appropriate, and insert a new value.

Copy of the doc's current state

Algorithm

A Location object has an associated ancestor origin objects list. When a Location object is created, its ancestor origins list must be set to the list of origins that the following steps would produce:

  1. Let output be a new list of origins.
  2. Let innerDoc be the Location object's relevant Document.
  3. Let parentDoc be innerDoc’s container document.
  4. If parentDoc is non-null:
    1. Assert: parentDoc is fully active.
    2. Let parentLocation be parentDoc’s relevant global object’s Location object.
    3. Let ancestorOrigins be parentLocation’s ancestor origins list’s associated list.
    4. Let container be innerDoc’s node navigable’s container.
    5. Let referrerpolicyAttribute be the empty string.
    6. If container supports a referrer policy attribute (e.g., container is an iframe element), then set referrerpolicyAttribute to container’s referrer policy attribute’s state.
    7. Let docReferrerPolicy be parentDoc’s policy container’s referrer policy.
    8. Let referrerPolicy be referrerpolicyAttribute.
    9. If referrerPolicy is the empty string, then set referrerPolicy to docReferrerPolicy.
    10. Let masked be false.
    11. If referrerPolicy is “no-referrer”, then set masked to true.
    12. Otherwise, if referrerPolicy is “same-origin” and parentDoc’s origin is not same origin with innerDoc’s origin, then set masked to true.
    13. If masked is true, then append “null” to output.
    14. Otherwise, append parentDoc’s origin to output.
    15. For each ancestorOrigin in ancestorOrigins:
      1. If masked is true:
        1. If ancestorOrigin is same origin with parentDoc’s origin, then append a new opaque origin to output.
        2. Otherwise, append ancestorOrigin to output and set masked to false.
      2. Otherwise, append ancestorOrigin to output.
  5. Return output.

Note: Since mixed content checks prevent non-secure context documents in secure context documents, there’s no need to check secure context for “strict-origin”, "strict-origin-when-cross-origin", and “no-referrer-when-downgrade”.

A Location object has an associated ancestor origins list. When a Location object is created, its ancestor origins list must be set to a DOMStringList object whose associated list is the list of strings the following steps would produce:

  1. Let ancestorOrigins be this’s ancestor origin objects list.
  2. Let output be a new list of strings.
  3. For each origin in ancestorOrigins:
    1. Append the serialization of origin to output.
  4. Return output.

Polyfill + demo

https://software.hixie.ch/utilities/js/live-dom-viewer/saved/14047

Examples

iframe referrerpolicy=”no-referrer”

  • Top-level browsing context, default referrer policy, origin: https://a.com

Child: ["null"]

{1, a.com} default referrer policy -> loads {2, b.com} -> loads {3, a.com}

Grandchild: ["https://b.com","https://a.com"\]
Child: ["https://a.com"\]

Examples below are from w3c/webappsec-referrer-policy#77 (comment)

top -> sandboxed iframe -> 3rd party iframe (ad)

  • Top-level browsing context, default referrer policy, origin: https://a.com

Grandchild: ["null","https://a.com"\]
Child: ["https://a.com"\]

{1, a.com} default referrer policy -> loads {2, b.com} with noreferrer attribute on the iframe tag that's loading b.com -> loads {3, a.com}

Grandchild: ["https://b.com","null"\]
Child: ["null"]

{1, a.com} default referrer policy -> loads {2, b.com} with noreferrer attribute on the iframe tag inside {2} -> loads {3, a.com}

Grandchild: ["null","https://a.com"\]
Child: ["https://a.com"\]

{1, a.com} default referrer policy -> loads {2, a.com} with noreferrer attribute on the iframe tag inside {2} -> loads {3, c.com}

Grandchild: ["null","null"]
Child: ["https://a.com"\]

{1, a.com} default referrer policy -> loads {2, b.com} with default referrer policy -> loads {3, b.com} with noreferrer attribute on the iframe tag inside {3} -> loads {4, a.com}

Grandgrandchild: ["null","null","https://a.com"\]
Grandchild: ["https://b.com","https://a.com"\]
Child: ["https://a.com"\]

TODOs

@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Sep 8, 2025

I've updated this PR, the algorithm should be the same as in the doc.

Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
theIDinside added a commit to theIDinside/firefox that referenced this pull request Sep 10, 2025
This implements this attribute on Location and also adheres to the
changes to the spec introduced in
whatwg/html#11560

Due to the tentative nature of the spec, and details
still being hashed out, this PR is subject to minor
changes.
theIDinside added a commit to theIDinside/firefox that referenced this pull request Sep 10, 2025
This follows the current revamping of the spec found at whatwg/html#11560 and will change with it, potentially.
@zcorpan zcorpan added the agenda+ To be discussed at a triage meeting label Sep 25, 2025
@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Oct 8, 2025

I wrote a summary of what this change does in the OP. (To be used in the commit message when squashing.)

@noamr
Copy link
Copy Markdown
Collaborator

noamr commented Oct 13, 2025

cc @domfarolino

Comment thread source Outdated
Comment thread source Outdated
Comment thread source Outdated
@zcorpan zcorpan removed the agenda+ To be discussed at a triage meeting label Oct 23, 2025
@annevk
Copy link
Copy Markdown
Member

annevk commented Oct 23, 2025

Before I forget: we need to patch https://w3c.github.io/ServiceWorker/#client-ancestororigins at the same time.

@zcorpan zcorpan force-pushed the zcorpan/redact-ancestororigins branch from 3c5e61f to 0004ccb Compare October 27, 2025 21:50
@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Oct 27, 2025

@annevk as far as I can tell, the call sites for Create Window Client use a Location object's ancestor origins list, which is still defined and compatible with this PR. But we should have tests for it.

@johannhof
Copy link
Copy Markdown
Member

What is the reason for using the referrer policy instead of a new attribute / header? Are we not concerned that this would lead to situations where one of the two features is required, making it impossible for sites to opt out of the other?

theIDinside added a commit to theIDinside/firefox that referenced this pull request Nov 7, 2025
This implements this attribute on Location and also adheres to the
changes to the spec introduced in
whatwg/html#11560

Due to the tentative nature of the spec, and details
still being hashed out, this PR is subject to minor
changes.
theIDinside added a commit to theIDinside/firefox that referenced this pull request Nov 7, 2025
This follows the current revamping of the spec found at whatwg/html#11560 and will change with it, potentially.
@theIDinside
Copy link
Copy Markdown

So I've noticed a "bug" in the spec, or at least what we're expecting with one of the tests (and possibly others), while implementing this in Gecko (referenced commit in this convo).

{1, a.com} default referrer policy -> loads {2, b.com} with noreferrer attribute on the iframe tag that's loading b.com -> loads {3, a.com}

* Top-level browsing context, default referrer policy, origin: https://a.com
  
  * iframe referrerpolicy=”no-referrer”, origin: https://b.com
    
    * iframe, origin: https://a.com

Grandchild: ["https://b.com","null"]
Child: ["null"]

In this example, A1->B1->A2, where
(A1) <iframe src=B1 referrerPolicy=no-referrer>, this means that when B1 is loaded, it's policy container will contain "no referrer" as it's referrer policy. So when it loads A2 via <iframe src=A2> and it does its check, it sees that no attribute is set (the empty string) and therefore should defer to it's parentDoc, which is B1, who has been set with no-referrer. This means it should be [null, null] and [null] as results with this.

I don't know how we could even "turn the feature back on", with this approach as intended in that test, as empty string != default on, right?

@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Nov 10, 2025

What is the reason for using the referrer policy instead of a new attribute / header?

I think because it's similar enough to be used and because if a page uses referrer policy to hide itself from another document, ancestorOrigins would leak the referrer origin. A separate attribute/header might be too obscure to get the same level of adoption as referrer policy.

Are we not concerned that this would lead to situations where one of the two features is required, making it impossible for sites to opt out of the other?

When would sites want to hide only one?

KurtCattiSchmidt pushed a commit to KurtCattiSchmidt/wpt-ahem that referenced this pull request Jan 21, 2026
This implements this attribute on Location and also adheres to the
changes to the spec introduced in
whatwg/html#11560

Tentative tests are also added in this patch.

Differential Revision: https://phabricator.services.mozilla.com/D273393

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1085214
gecko-commit: 626bfdb90f3e1a0f78c6a6e832697520396e66bf
gecko-reviewers: necko-reviewers, webidl, dom-core, smaug, jesup, zcorpan
KurtCattiSchmidt pushed a commit to KurtCattiSchmidt/wpt-ahem that referenced this pull request Jan 21, 2026
This implements this attribute on Location and also adheres to the
changes to the spec introduced in
whatwg/html#11560

Tentative tests are also added in this patch.

Differential Revision: https://phabricator.services.mozilla.com/D273393

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1085214
gecko-commit: f3415e1670266a11917af7fff4ba14afde5d7ca5
gecko-reviewers: necko-reviewers, webidl, dom-core, smaug, jesup, zcorpan, devtools-reviewers, nchevobbe
Comment thread source Outdated
Comment thread source Outdated
<var>output</var>.</p></li>

<li><p>Otherwise, <span data-x="list append">append</span> <var>ancestorOrigin</var> to
<var>output</var> and set <var>masked</var> to false.</p></li>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems surprising. Can't the further ancestor be cross-origin with both parent and self? I guess the idea is that it's already an opaque origin in that case?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It can be, and it's intended to expose the further ancestor's origin in that case (see #11560 (comment) ) unless it opted to hide its origin.

This aligns `ancestorOrigins` exposure with referrer policy when using the `iframe referrerpolicy` attribute, so an embedder can prevent revealing its own origin to embedded documents. If an `<iframe>` uses `referrerpolicy="no-referrer"` or `same-origin` (and the parent and child are cross-origin), the parent’s origin and any same-origin ancestors are replaced with opaque origins (until reaching an ancestor that is cross-origin). Other policies continue to expose full origins.

This approach keeps existing behavior by default (for web compat) while addressing privacy concerns with an opt-out.

The algorithm reuses the parent's existing list of ancestor origins, avoiding synchronous cross-process lookups and ensuring a stable snapshot even if ancestors mutate their `referrerpolicy` attributes later.

Fixes #1918. Closes #2480.
@zcorpan zcorpan force-pushed the zcorpan/redact-ancestororigins branch from 6a302f4 to 2568667 Compare March 5, 2026 14:47
@zcorpan
Copy link
Copy Markdown
Member Author

zcorpan commented Mar 5, 2026

Rebased and resolved conflicts (from #12071 ).

Copy link
Copy Markdown
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks okay to me, but I'd like to see some of the slightly confusing cases better clarified.

Comment thread source Outdated
Comment thread source Outdated

<p class="note">Since <span>mixed content</span> checks prevent <span>non-secure context</span>
<span data-x="environment">environments</span> in <span>secure context</span> <span
data-x="environment">environments</span>, there's no need to check <span>secure context</span>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

secure contexts?

(There was a proposal btw to allow non-secure contexts inside secure contexts...)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is that proposal?

Comment thread source Outdated
Comment thread source
Comment thread source Outdated
Comment thread source
Copy link
Copy Markdown
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice. I think one case we could improve a little bit by using an early continue. That way the branching is less deep and less duplicated.

Comment thread source Outdated
@zcorpan zcorpan merged commit e161310 into main Mar 11, 2026
2 checks passed
@zcorpan zcorpan deleted the zcorpan/redact-ancestororigins branch March 11, 2026 14:45
zcorpan added a commit to web-platform-tests/wpt that referenced this pull request Mar 11, 2026
lando-worker Bot pushed a commit to mozilla-firefox/firefox that referenced this pull request Mar 16, 2026
…storOrigins with iframe referrerpolicy, a=testonly

Automatic update from web-platform-tests
[service-workers] Test WindowClient ancestorOrigins with iframe referrerpolicy

See whatwg/html#11560
--

wpt-commits: 60cd2c1605e452c62db05f93873cc7a148fa6093
wpt-pr: 56616
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified-and-comments-removed that referenced this pull request Mar 20, 2026
…storOrigins with iframe referrerpolicy, a=testonly

Automatic update from web-platform-tests
[service-workers] Test WindowClient ancestorOrigins with iframe referrerpolicy

See whatwg/html#11560
--

wpt-commits: 60cd2c1605e452c62db05f93873cc7a148fa6093
wpt-pr: 56616

UltraBlame original commit: a3f6b619cfa40bfea66b1b03c72b13d326f1ba27
gecko-dev-updater pushed a commit to marco-c/gecko-dev-comments-removed that referenced this pull request Mar 20, 2026
…storOrigins with iframe referrerpolicy, a=testonly

Automatic update from web-platform-tests
[service-workers] Test WindowClient ancestorOrigins with iframe referrerpolicy

See whatwg/html#11560
--

wpt-commits: 60cd2c1605e452c62db05f93873cc7a148fa6093
wpt-pr: 56616

UltraBlame original commit: a3f6b619cfa40bfea66b1b03c72b13d326f1ba27
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified that referenced this pull request Mar 20, 2026
…storOrigins with iframe referrerpolicy, a=testonly

Automatic update from web-platform-tests
[service-workers] Test WindowClient ancestorOrigins with iframe referrerpolicy

See whatwg/html#11560
--

wpt-commits: 60cd2c1605e452c62db05f93873cc7a148fa6093
wpt-pr: 56616

UltraBlame original commit: a3f6b619cfa40bfea66b1b03c72b13d326f1ba27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

redact location.ancestorOrigins according to Referrer Policy

9 participants