diff options
author | Sebastian C <sebsebmc@gmail.com> | 2025-04-07 17:29:12 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-07 22:29:12 +0000 |
commit | 9bdc46d66b68ceac79d026118d9602a8e4c20118 (patch) | |
tree | ce7d22e830de53a21d7f78d1dfee3d2bca714b78 /components/script/dom/htmlheadelement.rs | |
parent | bfbe464eba0a3b7944f00f8a2bdedc3ff28f12ce (diff) | |
download | servo-9bdc46d66b68ceac79d026118d9602a8e4c20118.tar.gz servo-9bdc46d66b68ceac79d026118d9602a8e4c20118.zip |
fix: meta referrer updating to follow spec (#36390)
Previously the referrer policy used tree order but the spec only cares
about the most-recently-updated or most-recently-added meta referrer.
Testing: change has existing WPT tests
---------
Signed-off-by: Sebastian C <sebsebmc@gmail.com>
Diffstat (limited to 'components/script/dom/htmlheadelement.rs')
-rw-r--r-- | components/script/dom/htmlheadelement.rs | 33 |
1 files changed, 1 insertions, 32 deletions
diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs index 51b2c025982..b4845fc949c 100644 --- a/components/script/dom/htmlheadelement.rs +++ b/components/script/dom/htmlheadelement.rs @@ -10,7 +10,7 @@ use js::rust::HandleObject; use crate::dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods; use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::root::DomRoot; -use crate::dom::document::{Document, determine_policy_for_token}; +use crate::dom::document::Document; use crate::dom::element::Element; use crate::dom::htmlelement::HTMLElement; use crate::dom::htmlmetaelement::HTMLMetaElement; @@ -54,37 +54,6 @@ impl HTMLHeadElement { n } - /// <https://html.spec.whatwg.org/multipage/#meta-referrer> - pub(crate) fn set_document_referrer(&self) { - let doc = self.owner_document(); - - if doc.GetHead().as_deref() != Some(self) { - return; - } - - let node = self.upcast::<Node>(); - let candidates = node - .traverse_preorder(ShadowIncluding::No) - .filter_map(DomRoot::downcast::<Element>) - .filter(|elem| elem.is::<HTMLMetaElement>()) - .filter(|elem| elem.get_name() == Some(atom!("referrer"))) - .filter(|elem| { - elem.get_attribute(&ns!(), &local_name!("content")) - .is_some() - }); - - for meta in candidates { - if let Some(ref content) = meta.get_attribute(&ns!(), &local_name!("content")) { - let content = content.value(); - let content_val = content.trim(); - if !content_val.is_empty() { - doc.set_referrer_policy(determine_policy_for_token(content_val)); - return; - } - } - } - } - /// <https://html.spec.whatwg.org/multipage/#attr-meta-http-equiv-content-security-policy> pub(crate) fn set_content_security_policy(&self) { let doc = self.owner_document(); |