viewpoint_cdp/protocol/browser/
mod.rs

1//! Browser domain types.
2//!
3//! The Browser domain defines methods and events for browser management.
4
5use serde::{Deserialize, Serialize};
6
7/// Browser permission type.
8#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub enum PermissionType {
11    /// Accessibility events permission.
12    AccessibilityEvents,
13    /// Audio capture permission.
14    AudioCapture,
15    /// Background sync permission.
16    BackgroundSync,
17    /// Background fetch permission.
18    BackgroundFetch,
19    /// Captured surface control permission.
20    CapturedSurfaceControl,
21    /// Clipboard read permission.
22    ClipboardReadWrite,
23    /// Clipboard sanitized write permission.
24    ClipboardSanitizedWrite,
25    /// Display capture permission.
26    DisplayCapture,
27    /// Durable storage permission.
28    DurableStorage,
29    /// Flash permission.
30    Flash,
31    /// Geolocation permission.
32    Geolocation,
33    /// Idle detection permission.
34    IdleDetection,
35    /// Local fonts permission.
36    LocalFonts,
37    /// MIDI permission.
38    Midi,
39    /// MIDI sysex permission.
40    MidiSysex,
41    /// NFC permission.
42    Nfc,
43    /// Notifications permission.
44    Notifications,
45    /// Payment handler permission.
46    PaymentHandler,
47    /// Periodic background sync permission.
48    PeriodicBackgroundSync,
49    /// Protected media identifier permission.
50    ProtectedMediaIdentifier,
51    /// Sensors permission.
52    Sensors,
53    /// Speaker selection permission.
54    SpeakerSelection,
55    /// Storage access permission.
56    StorageAccess,
57    /// Top level storage access permission.
58    TopLevelStorageAccess,
59    /// Video capture permission.
60    VideoCapture,
61    /// Video capture pan tilt zoom permission.
62    VideoCaptureGenericPanTiltZoom,
63    /// Wake lock screen permission.
64    WakeLockScreen,
65    /// Wake lock system permission.
66    WakeLockSystem,
67    /// Web app installation permission.
68    WebAppInstallation,
69    /// Window management permission.
70    WindowManagement,
71}
72
73impl PermissionType {
74    /// Get the CDP string representation.
75    pub fn as_str(&self) -> &'static str {
76        match self {
77            Self::AccessibilityEvents => "accessibilityEvents",
78            Self::AudioCapture => "audioCapture",
79            Self::BackgroundSync => "backgroundSync",
80            Self::BackgroundFetch => "backgroundFetch",
81            Self::CapturedSurfaceControl => "capturedSurfaceControl",
82            Self::ClipboardReadWrite => "clipboardReadWrite",
83            Self::ClipboardSanitizedWrite => "clipboardSanitizedWrite",
84            Self::DisplayCapture => "displayCapture",
85            Self::DurableStorage => "durableStorage",
86            Self::Flash => "flash",
87            Self::Geolocation => "geolocation",
88            Self::IdleDetection => "idleDetection",
89            Self::LocalFonts => "localFonts",
90            Self::Midi => "midi",
91            Self::MidiSysex => "midiSysex",
92            Self::Nfc => "nfc",
93            Self::Notifications => "notifications",
94            Self::PaymentHandler => "paymentHandler",
95            Self::PeriodicBackgroundSync => "periodicBackgroundSync",
96            Self::ProtectedMediaIdentifier => "protectedMediaIdentifier",
97            Self::Sensors => "sensors",
98            Self::SpeakerSelection => "speakerSelection",
99            Self::StorageAccess => "storageAccess",
100            Self::TopLevelStorageAccess => "topLevelStorageAccess",
101            Self::VideoCapture => "videoCapture",
102            Self::VideoCaptureGenericPanTiltZoom => "videoCaptureGenericPanTiltZoom",
103            Self::WakeLockScreen => "wakeLockScreen",
104            Self::WakeLockSystem => "wakeLockSystem",
105            Self::WebAppInstallation => "webAppInstallation",
106            Self::WindowManagement => "windowManagement",
107        }
108    }
109}
110
111/// Permission setting.
112#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
113#[serde(rename_all = "camelCase")]
114#[derive(Default)]
115pub enum PermissionSetting {
116    /// Permission is granted.
117    #[default]
118    Granted,
119    /// Permission is denied.
120    Denied,
121    /// Permission is prompt.
122    Prompt,
123}
124
125/// Permission descriptor.
126#[derive(Debug, Clone, Serialize)]
127#[serde(rename_all = "camelCase")]
128pub struct PermissionDescriptor {
129    /// Permission name.
130    pub name: String,
131    /// For "midi" permission, whether sysex is allowed.
132    #[serde(skip_serializing_if = "Option::is_none")]
133    pub sysex: Option<bool>,
134    /// For "push" permission, whether userVisibleOnly is allowed.
135    #[serde(skip_serializing_if = "Option::is_none")]
136    pub user_visible_only: Option<bool>,
137    /// For "clipboard" permission, allow without gesture.
138    #[serde(skip_serializing_if = "Option::is_none")]
139    pub allow_without_gesture: Option<bool>,
140    /// For "camera" permission, whether panTiltZoom is allowed.
141    #[serde(skip_serializing_if = "Option::is_none")]
142    pub pan_tilt_zoom: Option<bool>,
143}
144
145impl PermissionDescriptor {
146    /// Create a new permission descriptor.
147    pub fn new(name: impl Into<String>) -> Self {
148        Self {
149            name: name.into(),
150            sysex: None,
151            user_visible_only: None,
152            allow_without_gesture: None,
153            pan_tilt_zoom: None,
154        }
155    }
156}
157
158/// Parameters for Browser.grantPermissions.
159#[derive(Debug, Clone, Serialize)]
160#[serde(rename_all = "camelCase")]
161pub struct GrantPermissionsParams {
162    /// Permissions to grant.
163    pub permissions: Vec<PermissionType>,
164    /// Origin to grant permissions for.
165    #[serde(skip_serializing_if = "Option::is_none")]
166    pub origin: Option<String>,
167    /// `BrowserContext` to override permissions for.
168    #[serde(skip_serializing_if = "Option::is_none")]
169    pub browser_context_id: Option<String>,
170}
171
172impl GrantPermissionsParams {
173    /// Create new grant permissions params.
174    pub fn new(permissions: Vec<PermissionType>) -> Self {
175        Self {
176            permissions,
177            origin: None,
178            browser_context_id: None,
179        }
180    }
181
182    /// Set the origin.
183    #[must_use]
184    pub fn origin(mut self, origin: impl Into<String>) -> Self {
185        self.origin = Some(origin.into());
186        self
187    }
188
189    /// Set the browser context ID.
190    #[must_use]
191    pub fn browser_context_id(mut self, id: impl Into<String>) -> Self {
192        self.browser_context_id = Some(id.into());
193        self
194    }
195}
196
197/// Parameters for Browser.resetPermissions.
198#[derive(Debug, Clone, Serialize, Default)]
199#[serde(rename_all = "camelCase")]
200pub struct ResetPermissionsParams {
201    /// `BrowserContext` to reset permissions for.
202    #[serde(skip_serializing_if = "Option::is_none")]
203    pub browser_context_id: Option<String>,
204}
205
206impl ResetPermissionsParams {
207    /// Create new reset permissions params.
208    pub fn new() -> Self {
209        Self::default()
210    }
211
212    /// Set the browser context ID.
213    #[must_use]
214    pub fn browser_context_id(mut self, id: impl Into<String>) -> Self {
215        self.browser_context_id = Some(id.into());
216        self
217    }
218}
219
220/// Parameters for Browser.setPermission.
221#[derive(Debug, Clone, Serialize)]
222#[serde(rename_all = "camelCase")]
223pub struct SetPermissionParams {
224    /// Permission descriptor.
225    pub permission: PermissionDescriptor,
226    /// Permission setting.
227    pub setting: PermissionSetting,
228    /// Origin to set permission for.
229    #[serde(skip_serializing_if = "Option::is_none")]
230    pub origin: Option<String>,
231    /// `BrowserContext` to set permission for.
232    #[serde(skip_serializing_if = "Option::is_none")]
233    pub browser_context_id: Option<String>,
234}
235
236impl SetPermissionParams {
237    /// Create new set permission params.
238    pub fn new(permission: PermissionDescriptor, setting: PermissionSetting) -> Self {
239        Self {
240            permission,
241            setting,
242            origin: None,
243            browser_context_id: None,
244        }
245    }
246
247    /// Set the origin.
248    #[must_use]
249    pub fn origin(mut self, origin: impl Into<String>) -> Self {
250        self.origin = Some(origin.into());
251        self
252    }
253
254    /// Set the browser context ID.
255    #[must_use]
256    pub fn browser_context_id(mut self, id: impl Into<String>) -> Self {
257        self.browser_context_id = Some(id.into());
258        self
259    }
260}
261
262/// Parameters for Browser.close.
263#[derive(Debug, Clone, Serialize, Default)]
264pub struct CloseParams {}
265
266/// Parameters for Browser.getVersion.
267#[derive(Debug, Clone, Serialize, Default)]
268pub struct GetVersionParams {}
269
270/// Result for Browser.getVersion.
271#[derive(Debug, Clone, Deserialize)]
272#[serde(rename_all = "camelCase")]
273pub struct GetVersionResult {
274    /// Protocol version.
275    pub protocol_version: String,
276    /// Product name.
277    pub product: String,
278    /// Product revision.
279    pub revision: String,
280    /// User-Agent.
281    pub user_agent: String,
282    /// V8 version.
283    pub js_version: String,
284}
285
286#[cfg(test)]
287mod tests;