aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/document.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/document.rs')
-rw-r--r--components/script/dom/document.rs26
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>
}