net_traits/
policy_container.rs1use std::sync::Arc;
6
7use content_security_policy::CspList;
8use malloc_size_of_derive::MallocSizeOf;
9use serde::{Deserialize, Serialize};
10
11use crate::ReferrerPolicy;
12
13#[derive(Clone, Debug, Default, Deserialize, MallocSizeOf, Serialize)]
24pub enum RequestPolicyContainer {
25 #[default]
26 Client,
27 PolicyContainer(#[conditional_malloc_size_of] Arc<PolicyContainer>),
28}
29
30impl RequestPolicyContainer {
31 pub fn policy_container(&self) -> Option<&PolicyContainer> {
32 match self {
33 RequestPolicyContainer::Client => None,
34 RequestPolicyContainer::PolicyContainer(policy_container) => Some(policy_container),
35 }
36 }
37}
38
39#[derive(Clone, Debug, Default, Deserialize, MallocSizeOf, Serialize)]
41pub struct PolicyContainer {
42 #[ignore_malloc_size_of = "Defined in rust-content-security-policy"]
43 pub csp_list: Option<CspList>,
45 pub embedder_policy: EmbedderPolicy,
47 pub referrer_policy: ReferrerPolicy,
49}
50
51impl PolicyContainer {
52 pub fn set_csp_list(&mut self, csp_list: Option<CspList>) {
53 self.csp_list = csp_list;
54 }
55
56 pub fn set_referrer_policy(&mut self, referrer_policy: ReferrerPolicy) {
57 self.referrer_policy = referrer_policy;
58 }
59
60 pub fn get_referrer_policy(&self) -> ReferrerPolicy {
61 if self.referrer_policy == ReferrerPolicy::EmptyString {
63 return ReferrerPolicy::default();
64 }
65
66 self.referrer_policy
67 }
68}
69
70#[derive(Clone, Debug, Default, Deserialize, MallocSizeOf, Serialize)]
72pub struct EmbedderPolicy {
73 pub value: EmbedderPolicyValue,
75}
76
77#[derive(Clone, Copy, Debug, Default, Deserialize, MallocSizeOf, Serialize)]
79pub enum EmbedderPolicyValue {
80 #[default]
82 UnsafeNone,
83 RequireCorp,
85 }