diff options
Diffstat (limited to 'components/script/dom/document.rs')
-rw-r--r-- | components/script/dom/document.rs | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 3f8c15fa1a8..9272c7f6da1 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -237,7 +237,7 @@ pub struct Document { /// The document's origin. origin: Origin, /// https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-states - referrer_policy: Option<ReferrerPolicy>, + referrer_policy: Cell<Option<ReferrerPolicy>>, } #[derive(JSTraceable, HeapSizeOf)] @@ -1697,7 +1697,7 @@ impl Document { touchpad_pressure_phase: Cell::new(TouchpadPressurePhase::BeforeClick), origin: origin, //TODO - setting this for now so no Referer header set - referrer_policy: Some(ReferrerPolicy::NoReferrer), + referrer_policy: Cell::new(Some(ReferrerPolicy::NoReferrer)), } } @@ -1827,9 +1827,13 @@ impl Document { } } - //TODO - for now, returns no-referrer for all until reading in the value + pub fn set_referrer_policy(&self, policy: Option<ReferrerPolicy>) { + self.referrer_policy.set(policy); + } + + //TODO - default still at no-referrer pub fn get_referrer_policy(&self) -> Option<ReferrerPolicy> { - return self.referrer_policy.clone(); + return self.referrer_policy.get(); } } @@ -2800,6 +2804,20 @@ fn update_with_current_time_ms(marker: &Cell<u64>) { } } +/// https://w3c.github.io/webappsec-referrer-policy/#determine-policy-for-token +pub fn determine_policy_for_token(token: &str) -> Option<ReferrerPolicy> { + let lower = token.to_lowercase(); + return match lower.as_ref() { + "never" | "no-referrer" => Some(ReferrerPolicy::NoReferrer), + "default" | "no-referrer-when-downgrade" => Some(ReferrerPolicy::NoRefWhenDowngrade), + "origin" => Some(ReferrerPolicy::OriginOnly), + "origin-when-cross-origin" => Some(ReferrerPolicy::OriginWhenCrossOrigin), + "always" | "unsafe-url" => Some(ReferrerPolicy::UnsafeUrl), + "" => Some(ReferrerPolicy::NoReferrer), + _ => None, + } +} + pub struct DocumentProgressHandler { addr: Trusted<Document> } |