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
126/// Permission descriptor.
127#[derive(Debug, Clone, Serialize)]
128#[serde(rename_all = "camelCase")]
129pub struct PermissionDescriptor {
130    /// Permission name.
131    pub name: String,
132    /// For "midi" permission, whether sysex is allowed.
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub sysex: Option<bool>,
135    /// For "push" permission, whether userVisibleOnly is allowed.
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub user_visible_only: Option<bool>,
138    /// For "clipboard" permission, allow without gesture.
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub allow_without_gesture: Option<bool>,
141    /// For "camera" permission, whether panTiltZoom is allowed.
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub pan_tilt_zoom: Option<bool>,
144}
145
146impl PermissionDescriptor {
147    /// Create a new permission descriptor.
148    pub fn new(name: impl Into<String>) -> Self {
149        Self {
150            name: name.into(),
151            sysex: None,
152            user_visible_only: None,
153            allow_without_gesture: None,
154            pan_tilt_zoom: None,
155        }
156    }
157}
158
159/// Parameters for Browser.grantPermissions.
160#[derive(Debug, Clone, Serialize)]
161#[serde(rename_all = "camelCase")]
162pub struct GrantPermissionsParams {
163    /// Permissions to grant.
164    pub permissions: Vec<PermissionType>,
165    /// Origin to grant permissions for.
166    #[serde(skip_serializing_if = "Option::is_none")]
167    pub origin: Option<String>,
168    /// `BrowserContext` to override permissions for.
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub browser_context_id: Option<String>,
171}
172
173impl GrantPermissionsParams {
174    /// Create new grant permissions params.
175    pub fn new(permissions: Vec<PermissionType>) -> Self {
176        Self {
177            permissions,
178            origin: None,
179            browser_context_id: None,
180        }
181    }
182
183    /// Set the origin.
184    #[must_use]
185    pub fn origin(mut self, origin: impl Into<String>) -> Self {
186        self.origin = Some(origin.into());
187        self
188    }
189
190    /// Set the browser context ID.
191    #[must_use]
192    pub fn browser_context_id(mut self, id: impl Into<String>) -> Self {
193        self.browser_context_id = Some(id.into());
194        self
195    }
196}
197
198/// Parameters for Browser.resetPermissions.
199#[derive(Debug, Clone, Serialize, Default)]
200#[serde(rename_all = "camelCase")]
201pub struct ResetPermissionsParams {
202    /// `BrowserContext` to reset permissions for.
203    #[serde(skip_serializing_if = "Option::is_none")]
204    pub browser_context_id: Option<String>,
205}
206
207impl ResetPermissionsParams {
208    /// Create new reset permissions params.
209    pub fn new() -> Self {
210        Self::default()
211    }
212
213    /// Set the browser context ID.
214    #[must_use]
215    pub fn browser_context_id(mut self, id: impl Into<String>) -> Self {
216        self.browser_context_id = Some(id.into());
217        self
218    }
219}
220
221/// Parameters for Browser.setPermission.
222#[derive(Debug, Clone, Serialize)]
223#[serde(rename_all = "camelCase")]
224pub struct SetPermissionParams {
225    /// Permission descriptor.
226    pub permission: PermissionDescriptor,
227    /// Permission setting.
228    pub setting: PermissionSetting,
229    /// Origin to set permission for.
230    #[serde(skip_serializing_if = "Option::is_none")]
231    pub origin: Option<String>,
232    /// `BrowserContext` to set permission for.
233    #[serde(skip_serializing_if = "Option::is_none")]
234    pub browser_context_id: Option<String>,
235}
236
237impl SetPermissionParams {
238    /// Create new set permission params.
239    pub fn new(permission: PermissionDescriptor, setting: PermissionSetting) -> Self {
240        Self {
241            permission,
242            setting,
243            origin: None,
244            browser_context_id: None,
245        }
246    }
247
248    /// Set the origin.
249    #[must_use]
250    pub fn origin(mut self, origin: impl Into<String>) -> Self {
251        self.origin = Some(origin.into());
252        self
253    }
254
255    /// Set the browser context ID.
256    #[must_use]
257    pub fn browser_context_id(mut self, id: impl Into<String>) -> Self {
258        self.browser_context_id = Some(id.into());
259        self
260    }
261}
262
263/// Parameters for Browser.close.
264#[derive(Debug, Clone, Serialize, Default)]
265pub struct CloseParams {}
266
267/// Parameters for Browser.getVersion.
268#[derive(Debug, Clone, Serialize, Default)]
269pub struct GetVersionParams {}
270
271/// Result for Browser.getVersion.
272#[derive(Debug, Clone, Deserialize)]
273#[serde(rename_all = "camelCase")]
274pub struct GetVersionResult {
275    /// Protocol version.
276    pub protocol_version: String,
277    /// Product name.
278    pub product: String,
279    /// Product revision.
280    pub revision: String,
281    /// User-Agent.
282    pub user_agent: String,
283    /// V8 version.
284    pub js_version: String,
285}
286
287#[cfg(test)]
288mod tests;