1use super::dom;
3use super::dom_debugger;
4use super::page;
5#[allow(unused_imports)]
6use super::types::*;
7#[allow(unused_imports)]
8use serde::{Deserialize, Serialize};
9#[allow(unused_imports)]
10use serde_json::Value as Json;
11pub type StringIndex = JsUInt;
12pub type ArrayOfStrings = Vec<StringIndex>;
13pub type Rectangle = Vec<JsFloat>;
14#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
15pub struct DomNode {
16 #[serde(default)]
17 #[serde(rename = "nodeType")]
18 pub node_type: JsUInt,
19 #[serde(default)]
20 #[serde(rename = "nodeName")]
21 pub node_name: String,
22 #[serde(default)]
23 #[serde(rename = "nodeValue")]
24 pub node_value: String,
25 #[serde(skip_serializing_if = "Option::is_none")]
26 #[serde(default)]
27 #[serde(rename = "textValue")]
28 pub text_value: Option<String>,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 #[serde(default)]
31 #[serde(rename = "inputValue")]
32 pub input_value: Option<String>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 #[serde(default)]
35 #[serde(rename = "inputChecked")]
36 pub input_checked: Option<bool>,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 #[serde(default)]
39 #[serde(rename = "optionSelected")]
40 pub option_selected: Option<bool>,
41 #[serde(rename = "backendNodeId")]
42 pub backend_node_id: dom::BackendNodeId,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 #[serde(default)]
45 #[serde(rename = "childNodeIndexes")]
46 pub child_node_indexes: Option<Vec<JsUInt>>,
47 #[serde(skip_serializing_if = "Option::is_none")]
48 #[serde(rename = "attributes")]
49 pub attributes: Option<Vec<NameValue>>,
50 #[serde(skip_serializing_if = "Option::is_none")]
51 #[serde(default)]
52 #[serde(rename = "pseudoElementIndexes")]
53 pub pseudo_element_indexes: Option<Vec<JsUInt>>,
54 #[serde(skip_serializing_if = "Option::is_none")]
55 #[serde(default)]
56 #[serde(rename = "layoutNodeIndex")]
57 pub layout_node_index: Option<JsUInt>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 #[serde(default)]
60 #[serde(rename = "documentURL")]
61 pub document_url: Option<String>,
62 #[serde(skip_serializing_if = "Option::is_none")]
63 #[serde(default)]
64 #[serde(rename = "baseURL")]
65 pub base_url: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 #[serde(default)]
68 #[serde(rename = "contentLanguage")]
69 pub content_language: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 #[serde(default)]
72 #[serde(rename = "documentEncoding")]
73 pub document_encoding: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 #[serde(default)]
76 #[serde(rename = "publicId")]
77 pub public_id: Option<String>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 #[serde(default)]
80 #[serde(rename = "systemId")]
81 pub system_id: Option<String>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 #[serde(rename = "frameId")]
84 pub frame_id: Option<page::FrameId>,
85 #[serde(skip_serializing_if = "Option::is_none")]
86 #[serde(default)]
87 #[serde(rename = "contentDocumentIndex")]
88 pub content_document_index: Option<JsUInt>,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 #[serde(rename = "pseudoType")]
91 pub pseudo_type: Option<dom::PseudoType>,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 #[serde(rename = "shadowRootType")]
94 pub shadow_root_type: Option<dom::ShadowRootType>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 #[serde(default)]
97 #[serde(rename = "isClickable")]
98 pub is_clickable: Option<bool>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 #[serde(rename = "eventListeners")]
101 pub event_listeners: Option<Vec<dom_debugger::EventListener>>,
102 #[serde(skip_serializing_if = "Option::is_none")]
103 #[serde(default)]
104 #[serde(rename = "currentSourceURL")]
105 pub current_source_url: Option<String>,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 #[serde(default)]
108 #[serde(rename = "originURL")]
109 pub origin_url: Option<String>,
110 #[serde(skip_serializing_if = "Option::is_none")]
111 #[serde(default)]
112 #[serde(rename = "scrollOffsetX")]
113 pub scroll_offset_x: Option<JsFloat>,
114 #[serde(skip_serializing_if = "Option::is_none")]
115 #[serde(default)]
116 #[serde(rename = "scrollOffsetY")]
117 pub scroll_offset_y: Option<JsFloat>,
118}
119#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
120pub struct InlineTextBox {
121 #[serde(rename = "boundingBox")]
122 pub bounding_box: dom::Rect,
123 #[serde(default)]
124 #[serde(rename = "startCharacterIndex")]
125 pub start_character_index: JsUInt,
126 #[serde(default)]
127 #[serde(rename = "numCharacters")]
128 pub num_characters: JsUInt,
129}
130#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
131pub struct LayoutTreeNode {
132 #[serde(default)]
133 #[serde(rename = "domNodeIndex")]
134 pub dom_node_index: JsUInt,
135 #[serde(rename = "boundingBox")]
136 pub bounding_box: dom::Rect,
137 #[serde(skip_serializing_if = "Option::is_none")]
138 #[serde(default)]
139 #[serde(rename = "layoutText")]
140 pub layout_text: Option<String>,
141 #[serde(skip_serializing_if = "Option::is_none")]
142 #[serde(rename = "inlineTextNodes")]
143 pub inline_text_nodes: Option<Vec<InlineTextBox>>,
144 #[serde(skip_serializing_if = "Option::is_none")]
145 #[serde(default)]
146 #[serde(rename = "styleIndex")]
147 pub style_index: Option<JsUInt>,
148 #[serde(skip_serializing_if = "Option::is_none")]
149 #[serde(default)]
150 #[serde(rename = "paintOrder")]
151 pub paint_order: Option<JsUInt>,
152 #[serde(skip_serializing_if = "Option::is_none")]
153 #[serde(default)]
154 #[serde(rename = "isStackingContext")]
155 pub is_stacking_context: Option<bool>,
156}
157#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
158pub struct ComputedStyle {
159 #[serde(rename = "properties")]
160 pub properties: Vec<NameValue>,
161}
162#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
163pub struct NameValue {
164 #[serde(default)]
165 #[serde(rename = "name")]
166 pub name: String,
167 #[serde(default)]
168 #[serde(rename = "value")]
169 pub value: String,
170}
171#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
172pub struct RareStringData {
173 #[serde(default)]
174 #[serde(rename = "index")]
175 pub index: Vec<JsUInt>,
176 #[serde(rename = "value")]
177 pub value: Vec<StringIndex>,
178}
179#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
180pub struct RareBooleanData {
181 #[serde(default)]
182 #[serde(rename = "index")]
183 pub index: Vec<JsUInt>,
184}
185#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
186pub struct RareIntegerData {
187 #[serde(default)]
188 #[serde(rename = "index")]
189 pub index: Vec<JsUInt>,
190 #[serde(default)]
191 #[serde(rename = "value")]
192 pub value: Vec<JsUInt>,
193}
194#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
195pub struct DocumentSnapshot {
196 #[serde(rename = "documentURL")]
197 pub document_url: StringIndex,
198 #[serde(rename = "title")]
199 pub title: StringIndex,
200 #[serde(rename = "baseURL")]
201 pub base_url: StringIndex,
202 #[serde(rename = "contentLanguage")]
203 pub content_language: StringIndex,
204 #[serde(rename = "encodingName")]
205 pub encoding_name: StringIndex,
206 #[serde(rename = "publicId")]
207 pub public_id: StringIndex,
208 #[serde(rename = "systemId")]
209 pub system_id: StringIndex,
210 #[serde(rename = "frameId")]
211 pub frame_id: StringIndex,
212 #[serde(rename = "nodes")]
213 pub nodes: NodeTreeSnapshot,
214 #[serde(rename = "layout")]
215 pub layout: LayoutTreeSnapshot,
216 #[serde(rename = "textBoxes")]
217 pub text_boxes: TextBoxSnapshot,
218 #[serde(skip_serializing_if = "Option::is_none")]
219 #[serde(default)]
220 #[serde(rename = "scrollOffsetX")]
221 pub scroll_offset_x: Option<JsFloat>,
222 #[serde(skip_serializing_if = "Option::is_none")]
223 #[serde(default)]
224 #[serde(rename = "scrollOffsetY")]
225 pub scroll_offset_y: Option<JsFloat>,
226 #[serde(skip_serializing_if = "Option::is_none")]
227 #[serde(default)]
228 #[serde(rename = "contentWidth")]
229 pub content_width: Option<JsFloat>,
230 #[serde(skip_serializing_if = "Option::is_none")]
231 #[serde(default)]
232 #[serde(rename = "contentHeight")]
233 pub content_height: Option<JsFloat>,
234}
235#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
236pub struct NodeTreeSnapshot {
237 #[serde(skip_serializing_if = "Option::is_none")]
238 #[serde(default)]
239 #[serde(rename = "parentIndex")]
240 pub parent_index: Option<Vec<JsUInt>>,
241 #[serde(skip_serializing_if = "Option::is_none")]
242 #[serde(default)]
243 #[serde(rename = "nodeType")]
244 pub node_type: Option<Vec<JsUInt>>,
245 #[serde(skip_serializing_if = "Option::is_none")]
246 #[serde(rename = "shadowRootType")]
247 pub shadow_root_type: Option<RareStringData>,
248 #[serde(skip_serializing_if = "Option::is_none")]
249 #[serde(rename = "nodeName")]
250 pub node_name: Option<Vec<StringIndex>>,
251 #[serde(skip_serializing_if = "Option::is_none")]
252 #[serde(rename = "nodeValue")]
253 pub node_value: Option<Vec<StringIndex>>,
254 #[serde(skip_serializing_if = "Option::is_none")]
255 #[serde(rename = "backendNodeId")]
256 pub backend_node_id: Option<Vec<dom::BackendNodeId>>,
257 #[serde(skip_serializing_if = "Option::is_none")]
258 #[serde(rename = "attributes")]
259 pub attributes: Option<Vec<ArrayOfStrings>>,
260 #[serde(skip_serializing_if = "Option::is_none")]
261 #[serde(rename = "textValue")]
262 pub text_value: Option<RareStringData>,
263 #[serde(skip_serializing_if = "Option::is_none")]
264 #[serde(rename = "inputValue")]
265 pub input_value: Option<RareStringData>,
266 #[serde(skip_serializing_if = "Option::is_none")]
267 #[serde(rename = "inputChecked")]
268 pub input_checked: Option<RareBooleanData>,
269 #[serde(skip_serializing_if = "Option::is_none")]
270 #[serde(rename = "optionSelected")]
271 pub option_selected: Option<RareBooleanData>,
272 #[serde(skip_serializing_if = "Option::is_none")]
273 #[serde(rename = "contentDocumentIndex")]
274 pub content_document_index: Option<RareIntegerData>,
275 #[serde(skip_serializing_if = "Option::is_none")]
276 #[serde(rename = "pseudoType")]
277 pub pseudo_type: Option<RareStringData>,
278 #[serde(skip_serializing_if = "Option::is_none")]
279 #[serde(rename = "pseudoIdentifier")]
280 pub pseudo_identifier: Option<RareStringData>,
281 #[serde(skip_serializing_if = "Option::is_none")]
282 #[serde(rename = "isClickable")]
283 pub is_clickable: Option<RareBooleanData>,
284 #[serde(skip_serializing_if = "Option::is_none")]
285 #[serde(rename = "currentSourceURL")]
286 pub current_source_url: Option<RareStringData>,
287 #[serde(skip_serializing_if = "Option::is_none")]
288 #[serde(rename = "originURL")]
289 pub origin_url: Option<RareStringData>,
290}
291#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
292pub struct LayoutTreeSnapshot {
293 #[serde(default)]
294 #[serde(rename = "nodeIndex")]
295 pub node_index: Vec<JsUInt>,
296 #[serde(rename = "styles")]
297 pub styles: Vec<ArrayOfStrings>,
298 #[serde(rename = "bounds")]
299 pub bounds: Vec<Rectangle>,
300 #[serde(rename = "text")]
301 pub text: Vec<StringIndex>,
302 #[serde(rename = "stackingContexts")]
303 pub stacking_contexts: RareBooleanData,
304 #[serde(skip_serializing_if = "Option::is_none")]
305 #[serde(default)]
306 #[serde(rename = "paintOrders")]
307 pub paint_orders: Option<Vec<JsUInt>>,
308 #[serde(skip_serializing_if = "Option::is_none")]
309 #[serde(rename = "offsetRects")]
310 pub offset_rects: Option<Vec<Rectangle>>,
311 #[serde(skip_serializing_if = "Option::is_none")]
312 #[serde(rename = "scrollRects")]
313 pub scroll_rects: Option<Vec<Rectangle>>,
314 #[serde(skip_serializing_if = "Option::is_none")]
315 #[serde(rename = "clientRects")]
316 pub client_rects: Option<Vec<Rectangle>>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 #[serde(rename = "blendedBackgroundColors")]
319 pub blended_background_colors: Option<Vec<StringIndex>>,
320 #[serde(skip_serializing_if = "Option::is_none")]
321 #[serde(default)]
322 #[serde(rename = "textColorOpacities")]
323 pub text_color_opacities: Option<Vec<JsFloat>>,
324}
325#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
326pub struct TextBoxSnapshot {
327 #[serde(default)]
328 #[serde(rename = "layoutIndex")]
329 pub layout_index: Vec<JsUInt>,
330 #[serde(rename = "bounds")]
331 pub bounds: Vec<Rectangle>,
332 #[serde(default)]
333 #[serde(rename = "start")]
334 pub start: Vec<JsUInt>,
335 #[serde(default)]
336 #[serde(rename = "length")]
337 pub length: Vec<JsUInt>,
338}
339#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
340#[serde(rename_all = "camelCase")]
341pub struct Disable(pub Option<serde_json::Value>);
342#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
343#[serde(rename_all = "camelCase")]
344pub struct Enable(pub Option<serde_json::Value>);
345#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
346pub struct GetSnapshot {
347 #[serde(default)]
348 #[serde(rename = "computedStyleWhitelist")]
349 pub computed_style_whitelist: Vec<String>,
350 #[serde(skip_serializing_if = "Option::is_none")]
351 #[serde(default)]
352 #[serde(rename = "includeEventListeners")]
353 pub include_event_listeners: Option<bool>,
354 #[serde(skip_serializing_if = "Option::is_none")]
355 #[serde(default)]
356 #[serde(rename = "includePaintOrder")]
357 pub include_paint_order: Option<bool>,
358 #[serde(skip_serializing_if = "Option::is_none")]
359 #[serde(default)]
360 #[serde(rename = "includeUserAgentShadowTree")]
361 pub include_user_agent_shadow_tree: Option<bool>,
362}
363#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
364pub struct CaptureSnapshot {
365 #[serde(default)]
366 #[serde(rename = "computedStyles")]
367 pub computed_styles: Vec<String>,
368 #[serde(skip_serializing_if = "Option::is_none")]
369 #[serde(default)]
370 #[serde(rename = "includePaintOrder")]
371 pub include_paint_order: Option<bool>,
372 #[serde(skip_serializing_if = "Option::is_none")]
373 #[serde(default)]
374 #[serde(rename = "includeDOMRects")]
375 pub include_dom_rects: Option<bool>,
376 #[serde(skip_serializing_if = "Option::is_none")]
377 #[serde(default)]
378 #[serde(rename = "includeBlendedBackgroundColors")]
379 pub include_blended_background_colors: Option<bool>,
380 #[serde(skip_serializing_if = "Option::is_none")]
381 #[serde(default)]
382 #[serde(rename = "includeTextColorOpacities")]
383 pub include_text_color_opacities: Option<bool>,
384}
385#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
386#[serde(rename_all = "camelCase")]
387pub struct DisableReturnObject {}
388#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
389#[serde(rename_all = "camelCase")]
390pub struct EnableReturnObject {}
391#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
392pub struct GetSnapshotReturnObject {
393 #[serde(rename = "domNodes")]
394 pub dom_nodes: Vec<DomNode>,
395 #[serde(rename = "layoutTreeNodes")]
396 pub layout_tree_nodes: Vec<LayoutTreeNode>,
397 #[serde(rename = "computedStyles")]
398 pub computed_styles: Vec<ComputedStyle>,
399}
400#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
401pub struct CaptureSnapshotReturnObject {
402 #[serde(rename = "documents")]
403 pub documents: Vec<DocumentSnapshot>,
404 #[serde(rename = "strings")]
405 pub strings: Vec<String>,
406}
407impl Method for Disable {
408 const NAME: &'static str = "DOMSnapshot.disable";
409 type ReturnObject = DisableReturnObject;
410}
411impl Method for Enable {
412 const NAME: &'static str = "DOMSnapshot.enable";
413 type ReturnObject = EnableReturnObject;
414}
415impl Method for GetSnapshot {
416 const NAME: &'static str = "DOMSnapshot.getSnapshot";
417 type ReturnObject = GetSnapshotReturnObject;
418}
419impl Method for CaptureSnapshot {
420 const NAME: &'static str = "DOMSnapshot.captureSnapshot";
421 type ReturnObject = CaptureSnapshotReturnObject;
422}
423pub mod events {
424 #[allow(unused_imports)]
425 use super::super::types::*;
426 #[allow(unused_imports)]
427 use serde::{Deserialize, Serialize};
428}