Skip to main content

cbf_chrome/data/
policy.rs

1//! Chrome transport capability policy models and conversions.
2
3/// Allow or deny a Chrome-specific capability.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
5pub enum ChromeCapabilityPolicy {
6    #[default]
7    Allow,
8    Deny,
9}
10
11impl From<cbf::data::policy::CapabilityPolicy> for ChromeCapabilityPolicy {
12    fn from(value: cbf::data::policy::CapabilityPolicy) -> Self {
13        match value {
14            cbf::data::policy::CapabilityPolicy::Allow => Self::Allow,
15            cbf::data::policy::CapabilityPolicy::Deny => Self::Deny,
16        }
17    }
18}
19
20impl From<ChromeCapabilityPolicy> for cbf::data::policy::CapabilityPolicy {
21    fn from(value: ChromeCapabilityPolicy) -> Self {
22        match value {
23            ChromeCapabilityPolicy::Allow => Self::Allow,
24            ChromeCapabilityPolicy::Deny => Self::Deny,
25        }
26    }
27}
28
29/// IPC policy transported through the Chrome backend boundary.
30#[derive(Debug, Clone, PartialEq, Eq, Default)]
31pub enum ChromeIpcPolicy {
32    #[default]
33    Deny,
34    Allow {
35        allowed_origins: Vec<String>,
36    },
37}
38
39impl From<cbf::data::policy::IpcPolicy> for ChromeIpcPolicy {
40    fn from(value: cbf::data::policy::IpcPolicy) -> Self {
41        match value {
42            cbf::data::policy::IpcPolicy::Deny => Self::Deny,
43            cbf::data::policy::IpcPolicy::Allow { allowed_origins } => {
44                Self::Allow { allowed_origins }
45            }
46        }
47    }
48}
49
50impl From<ChromeIpcPolicy> for cbf::data::policy::IpcPolicy {
51    fn from(value: ChromeIpcPolicy) -> Self {
52        match value {
53            ChromeIpcPolicy::Deny => Self::Deny,
54            ChromeIpcPolicy::Allow { allowed_origins } => Self::Allow { allowed_origins },
55        }
56    }
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Default)]
60pub struct ChromeBrowsingContextPolicy {
61    pub ipc: ChromeIpcPolicy,
62    pub extensions: ChromeCapabilityPolicy,
63}
64
65impl From<cbf::data::policy::BrowsingContextPolicy> for ChromeBrowsingContextPolicy {
66    fn from(value: cbf::data::policy::BrowsingContextPolicy) -> Self {
67        Self {
68            ipc: value.ipc.into(),
69            extensions: value.extensions.into(),
70        }
71    }
72}
73
74impl From<ChromeBrowsingContextPolicy> for cbf::data::policy::BrowsingContextPolicy {
75    fn from(value: ChromeBrowsingContextPolicy) -> Self {
76        Self {
77            ipc: value.ipc.into(),
78            extensions: value.extensions.into(),
79        }
80    }
81}
82
83#[cfg(test)]
84mod tests {
85    use super::{ChromeBrowsingContextPolicy, ChromeCapabilityPolicy, ChromeIpcPolicy};
86
87    #[test]
88    fn browsing_context_policy_round_trip_with_generic() {
89        let policy = ChromeBrowsingContextPolicy {
90            ipc: ChromeIpcPolicy::Allow {
91                allowed_origins: vec!["app://simpleapp".to_string()],
92            },
93            extensions: ChromeCapabilityPolicy::Deny,
94        };
95
96        let generic: cbf::data::policy::BrowsingContextPolicy = policy.clone().into();
97        let round_trip = ChromeBrowsingContextPolicy::from(generic);
98
99        assert_eq!(round_trip, policy);
100    }
101}