viewpoint_core/context/permissions/
mod.rs1use tracing::{debug, instrument};
6
7use viewpoint_cdp::protocol::browser::{GrantPermissionsParams, ResetPermissionsParams};
8
9use super::BrowserContext;
10use super::types::Permission;
11use crate::error::ContextError;
12
13impl BrowserContext {
14 #[instrument(level = "debug", skip(self, permissions))]
34 pub async fn grant_permissions(
35 &self,
36 permissions: Vec<Permission>,
37 ) -> Result<(), ContextError> {
38 if self.is_closed() {
39 return Err(ContextError::Closed);
40 }
41
42 debug!(count = permissions.len(), "Granting permissions");
43
44 let cdp_permissions: Vec<_> = permissions
45 .into_iter()
46 .map(|p| p.to_cdp_permission())
47 .collect();
48
49 self.connection()
50 .send_command::<_, serde_json::Value>(
51 "Browser.grantPermissions",
52 Some(
53 GrantPermissionsParams::new(cdp_permissions)
54 .browser_context_id(self.context_id()),
55 ),
56 None,
57 )
58 .await?;
59
60 Ok(())
61 }
62
63 #[instrument(level = "debug", skip(self, permissions, origin))]
69 pub async fn grant_permissions_for_origin(
70 &self,
71 permissions: Vec<Permission>,
72 origin: impl Into<String>,
73 ) -> Result<(), ContextError> {
74 if self.is_closed() {
75 return Err(ContextError::Closed);
76 }
77
78 let origin = origin.into();
79 debug!(count = permissions.len(), origin = %origin, "Granting permissions for origin");
80
81 let cdp_permissions: Vec<_> = permissions
82 .into_iter()
83 .map(|p| p.to_cdp_permission())
84 .collect();
85
86 self.connection()
87 .send_command::<_, serde_json::Value>(
88 "Browser.grantPermissions",
89 Some(
90 GrantPermissionsParams::new(cdp_permissions)
91 .origin(origin)
92 .browser_context_id(self.context_id()),
93 ),
94 None,
95 )
96 .await?;
97
98 Ok(())
99 }
100
101 #[instrument(level = "debug", skip(self))]
107 pub async fn clear_permissions(&self) -> Result<(), ContextError> {
108 if self.is_closed() {
109 return Err(ContextError::Closed);
110 }
111
112 self.connection()
113 .send_command::<_, serde_json::Value>(
114 "Browser.resetPermissions",
115 Some(ResetPermissionsParams::new().browser_context_id(self.context_id())),
116 None,
117 )
118 .await?;
119
120 Ok(())
121 }
122}