use tracing::{debug, instrument};
use viewpoint_cdp::protocol::browser::{GrantPermissionsParams, ResetPermissionsParams};
use super::BrowserContext;
use super::types::Permission;
use crate::error::ContextError;
impl BrowserContext {
#[instrument(level = "debug", skip(self, permissions))]
pub async fn grant_permissions(
&self,
permissions: Vec<Permission>,
) -> Result<(), ContextError> {
if self.is_closed() {
return Err(ContextError::Closed);
}
debug!(count = permissions.len(), "Granting permissions");
let cdp_permissions: Vec<_> = permissions
.into_iter()
.map(|p| p.to_cdp_permission())
.collect();
self.connection()
.send_command::<_, serde_json::Value>(
"Browser.grantPermissions",
Some(
GrantPermissionsParams::new(cdp_permissions)
.browser_context_id(self.context_id()),
),
None,
)
.await?;
Ok(())
}
#[instrument(level = "debug", skip(self, permissions, origin))]
pub async fn grant_permissions_for_origin(
&self,
permissions: Vec<Permission>,
origin: impl Into<String>,
) -> Result<(), ContextError> {
if self.is_closed() {
return Err(ContextError::Closed);
}
let origin = origin.into();
debug!(count = permissions.len(), origin = %origin, "Granting permissions for origin");
let cdp_permissions: Vec<_> = permissions
.into_iter()
.map(|p| p.to_cdp_permission())
.collect();
self.connection()
.send_command::<_, serde_json::Value>(
"Browser.grantPermissions",
Some(
GrantPermissionsParams::new(cdp_permissions)
.origin(origin)
.browser_context_id(self.context_id()),
),
None,
)
.await?;
Ok(())
}
#[instrument(level = "debug", skip(self))]
pub async fn clear_permissions(&self) -> Result<(), ContextError> {
if self.is_closed() {
return Err(ContextError::Closed);
}
self.connection()
.send_command::<_, serde_json::Value>(
"Browser.resetPermissions",
Some(ResetPermissionsParams::new().browser_context_id(self.context_id())),
None,
)
.await?;
Ok(())
}
}