fix(fetch): inherit document policy for empty request referrers

This commit is contained in:
ldm0
2026-10-03 15:53:03 +08:00
committed by Donough Liu
parent 8f7598a30f
commit e8cdc8fa1c
+33 -1
View File
@@ -74,7 +74,8 @@ pub fn referrer_value(
}
let policy = referrer_policy
.or(document_referrer_policy)
.filter(|policy| !policy.is_empty())
.or_else(|| document_referrer_policy.filter(|policy| !policy.is_empty()))
.unwrap_or(DEFAULT_REFERRER_POLICY);
let same_origin = same_origin(referrer_url, request_url);
let downgrade = is_downgrade_request(referrer_url, request_url);
@@ -310,3 +311,34 @@ mod tests {
assert_eq!(referrer_header_value(&source, &target, None, None), None);
}
}
#[cfg(test)]
mod empty_policy_tests {
use super::*;
#[test]
fn empty_request_policy_inherits_the_document_policy() {
let source = Url::parse("https://origin.test/private?token=value").unwrap();
let target = Url::parse("https://destination.test/resource").unwrap();
for request_policy in [None, Some("")] {
assert_eq!(
referrer_value(&source, &target, request_policy, Some("no-referrer")),
None
);
assert_eq!(
referrer_value(&source, &target, request_policy, Some("unsafe-url")),
Some(source.to_string())
);
}
assert_eq!(
referrer_value(&source, &target, Some("origin"), Some("no-referrer")),
Some("https://origin.test/".to_owned())
);
for document_policy in [None, Some("")] {
assert_eq!(
referrer_value(&source, &target, Some(""), document_policy),
Some("https://origin.test/".to_owned())
);
}
}
}