viewpoint_cdp/protocol/target_domain/
mod.rs1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Deserialize)]
9#[serde(rename_all = "camelCase")]
10pub struct TargetInfo {
11 pub target_id: String,
13 #[serde(rename = "type")]
15 pub target_type: String,
16 pub title: String,
18 pub url: String,
20 pub attached: bool,
22 pub browser_context_id: Option<String>,
24 pub opener_id: Option<String>,
26}
27
28#[derive(Debug, Clone, Serialize, Default)]
30#[serde(rename_all = "camelCase")]
31pub struct CreateBrowserContextParams {
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub dispose_on_detach: Option<bool>,
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub proxy_server: Option<String>,
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub proxy_bypass_list: Option<String>,
41}
42
43#[derive(Debug, Clone, Deserialize)]
45#[serde(rename_all = "camelCase")]
46pub struct CreateBrowserContextResult {
47 pub browser_context_id: String,
49}
50
51#[derive(Debug, Clone, Serialize)]
53#[serde(rename_all = "camelCase")]
54pub struct DisposeBrowserContextParams {
55 pub browser_context_id: String,
57}
58
59#[derive(Debug, Clone, Serialize)]
61#[serde(rename_all = "camelCase")]
62pub struct CreateTargetParams {
63 pub url: String,
65 #[serde(skip_serializing_if = "Option::is_none")]
67 pub width: Option<u32>,
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub height: Option<u32>,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub browser_context_id: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub background: Option<bool>,
77 #[serde(skip_serializing_if = "Option::is_none")]
79 pub new_window: Option<bool>,
80}
81
82#[derive(Debug, Clone, Deserialize)]
84#[serde(rename_all = "camelCase")]
85pub struct CreateTargetResult {
86 pub target_id: String,
88}
89
90#[derive(Debug, Clone, Serialize)]
92#[serde(rename_all = "camelCase")]
93pub struct AttachToTargetParams {
94 pub target_id: String,
96 #[serde(skip_serializing_if = "Option::is_none")]
98 pub flatten: Option<bool>,
99}
100
101#[derive(Debug, Clone, Deserialize)]
103#[serde(rename_all = "camelCase")]
104pub struct AttachToTargetResult {
105 pub session_id: String,
107}
108
109#[derive(Debug, Clone, Serialize)]
111#[serde(rename_all = "camelCase")]
112pub struct CloseTargetParams {
113 pub target_id: String,
115}
116
117#[derive(Debug, Clone, Deserialize)]
119pub struct CloseTargetResult {
120 pub success: bool,
122}
123
124#[derive(Debug, Clone, Serialize)]
126#[serde(rename_all = "camelCase")]
127pub struct DetachFromTargetParams {
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub session_id: Option<String>,
131}
132
133#[derive(Debug, Clone, Serialize, Default)]
135pub struct GetTargetsParams {
136 #[serde(skip_serializing_if = "Option::is_none")]
138 pub filter: Option<Vec<TargetFilter>>,
139}
140
141#[derive(Debug, Clone, Serialize)]
143#[serde(rename_all = "camelCase")]
144pub struct TargetFilter {
145 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
147 pub target_type: Option<String>,
148 #[serde(skip_serializing_if = "Option::is_none")]
150 pub exclude: Option<bool>,
151}
152
153#[derive(Debug, Clone, Deserialize)]
155#[serde(rename_all = "camelCase")]
156pub struct GetTargetsResult {
157 pub target_infos: Vec<TargetInfo>,
159}
160
161#[derive(Debug, Clone, Deserialize)]
163#[serde(rename_all = "camelCase")]
164pub struct GetBrowserContextsResult {
165 pub browser_context_ids: Vec<String>,
167}
168
169#[derive(Debug, Clone, Deserialize)]
171#[serde(rename_all = "camelCase")]
172pub struct TargetCreatedEvent {
173 pub target_info: TargetInfo,
175}
176
177#[derive(Debug, Clone, Deserialize)]
179#[serde(rename_all = "camelCase")]
180pub struct TargetDestroyedEvent {
181 pub target_id: String,
183}
184
185#[derive(Debug, Clone, Deserialize)]
187#[serde(rename_all = "camelCase")]
188pub struct AttachedToTargetEvent {
189 pub session_id: String,
191 pub target_info: TargetInfo,
193 pub waiting_for_debugger: bool,
195}
196
197#[derive(Debug, Clone, Deserialize)]
202#[serde(rename_all = "camelCase")]
203pub struct TargetInfoChangedEvent {
204 pub target_info: TargetInfo,
206}
207
208#[derive(Debug, Clone, Serialize)]
210#[serde(rename_all = "camelCase")]
211pub struct SetDiscoverTargetsParams {
212 pub discover: bool,
214}
215
216#[cfg(test)]
217mod tests {
218 use super::*;
219
220 #[test]
221 fn test_target_info_changed_event_deserialization() {
222 let json = r#"{
223 "targetInfo": {
224 "targetId": "ABC123",
225 "type": "page",
226 "title": "Example Page",
227 "url": "https://example.com",
228 "attached": true,
229 "browserContextId": "context-456"
230 }
231 }"#;
232
233 let event: TargetInfoChangedEvent = serde_json::from_str(json).unwrap();
234 assert_eq!(event.target_info.target_id, "ABC123");
235 assert_eq!(event.target_info.target_type, "page");
236 assert_eq!(event.target_info.title, "Example Page");
237 assert_eq!(event.target_info.url, "https://example.com");
238 assert!(event.target_info.attached);
239 assert_eq!(
240 event.target_info.browser_context_id,
241 Some("context-456".to_string())
242 );
243 }
244
245 #[test]
246 fn test_target_info_changed_event_without_context_id() {
247 let json = r#"{
248 "targetInfo": {
249 "targetId": "DEF789",
250 "type": "page",
251 "title": "Default Context Page",
252 "url": "about:blank",
253 "attached": false
254 }
255 }"#;
256
257 let event: TargetInfoChangedEvent = serde_json::from_str(json).unwrap();
258 assert_eq!(event.target_info.target_id, "DEF789");
259 assert!(!event.target_info.attached);
260 assert!(event.target_info.browser_context_id.is_none());
261 assert!(event.target_info.opener_id.is_none());
262 }
263
264 #[test]
265 fn test_target_created_event_deserialization() {
266 let json = r#"{
267 "targetInfo": {
268 "targetId": "target-123",
269 "type": "page",
270 "title": "New Tab",
271 "url": "chrome://newtab/",
272 "attached": false,
273 "openerId": "opener-456"
274 }
275 }"#;
276
277 let event: TargetCreatedEvent = serde_json::from_str(json).unwrap();
278 assert_eq!(event.target_info.target_id, "target-123");
279 assert_eq!(event.target_info.opener_id, Some("opener-456".to_string()));
280 }
281}