1use std::collections::BTreeMap;
4
5use super::ids::TabId;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8pub struct ChromeDragOperations(u32);
9
10impl ChromeDragOperations {
11 pub const NONE: Self = Self(0);
12 pub const COPY: Self = Self(1 << 0);
13 pub const LINK: Self = Self(1 << 1);
14 pub const MOVE: Self = Self(1 << 2);
15
16 pub const fn from_bits(bits: u32) -> Self {
17 Self(bits)
18 }
19
20 pub const fn bits(self) -> u32 {
21 self.0
22 }
23}
24
25impl From<ChromeDragOperations> for cbf::data::drag::DragOperations {
26 fn from(value: ChromeDragOperations) -> Self {
27 Self::from_bits(value.bits())
28 }
29}
30
31impl From<cbf::data::drag::DragOperations> for ChromeDragOperations {
32 fn from(value: cbf::data::drag::DragOperations) -> Self {
33 Self::from_bits(value.bits())
34 }
35}
36
37#[derive(Debug, Clone, PartialEq, Eq)]
38pub struct ChromeDragUrlInfo {
39 pub url: String,
40 pub title: String,
41}
42
43impl From<ChromeDragUrlInfo> for cbf::data::drag::DragUrlInfo {
44 fn from(value: ChromeDragUrlInfo) -> Self {
45 Self {
46 url: value.url,
47 title: value.title,
48 }
49 }
50}
51
52impl From<cbf::data::drag::DragUrlInfo> for ChromeDragUrlInfo {
53 fn from(value: cbf::data::drag::DragUrlInfo) -> Self {
54 Self {
55 url: value.url,
56 title: value.title,
57 }
58 }
59}
60
61#[derive(Debug, Clone, PartialEq, Eq)]
62pub struct ChromeDragData {
63 pub text: String,
64 pub html: String,
65 pub html_base_url: String,
66 pub url_infos: Vec<ChromeDragUrlInfo>,
67 pub filenames: Vec<String>,
68 pub file_mime_types: Vec<String>,
69 pub custom_data: BTreeMap<String, String>,
70}
71
72impl From<ChromeDragData> for cbf::data::drag::DragData {
73 fn from(value: ChromeDragData) -> Self {
74 Self {
75 text: value.text,
76 html: value.html,
77 html_base_url: value.html_base_url,
78 url_infos: value.url_infos.into_iter().map(Into::into).collect(),
79 filenames: value.filenames,
80 file_mime_types: value.file_mime_types,
81 custom_data: value.custom_data,
82 }
83 }
84}
85
86impl From<cbf::data::drag::DragData> for ChromeDragData {
87 fn from(value: cbf::data::drag::DragData) -> Self {
88 Self {
89 text: value.text,
90 html: value.html,
91 html_base_url: value.html_base_url,
92 url_infos: value.url_infos.into_iter().map(Into::into).collect(),
93 filenames: value.filenames,
94 file_mime_types: value.file_mime_types,
95 custom_data: value.custom_data,
96 }
97 }
98}
99
100#[derive(Debug, Clone, PartialEq)]
101pub struct ChromeDragImage {
102 pub png_bytes: Vec<u8>,
103 pub pixel_width: u32,
104 pub pixel_height: u32,
105 pub scale: f32,
106 pub cursor_offset_x: i32,
107 pub cursor_offset_y: i32,
108}
109
110impl From<ChromeDragImage> for cbf::data::drag::DragImage {
111 fn from(value: ChromeDragImage) -> Self {
112 Self {
113 png_bytes: value.png_bytes,
114 pixel_width: value.pixel_width,
115 pixel_height: value.pixel_height,
116 scale: value.scale,
117 cursor_offset_x: value.cursor_offset_x,
118 cursor_offset_y: value.cursor_offset_y,
119 }
120 }
121}
122
123impl From<cbf::data::drag::DragImage> for ChromeDragImage {
124 fn from(value: cbf::data::drag::DragImage) -> Self {
125 Self {
126 png_bytes: value.png_bytes,
127 pixel_width: value.pixel_width,
128 pixel_height: value.pixel_height,
129 scale: value.scale,
130 cursor_offset_x: value.cursor_offset_x,
131 cursor_offset_y: value.cursor_offset_y,
132 }
133 }
134}
135
136#[derive(Debug, Clone, PartialEq)]
137pub struct ChromeDragStartRequest {
138 pub session_id: u64,
139 pub browsing_context_id: TabId,
140 pub allowed_operations: ChromeDragOperations,
141 pub source_origin: String,
142 pub data: ChromeDragData,
143 pub image: Option<ChromeDragImage>,
144}
145
146impl From<ChromeDragStartRequest> for cbf::data::drag::DragStartRequest {
147 fn from(value: ChromeDragStartRequest) -> Self {
148 Self {
149 session_id: value.session_id,
150 browsing_context_id: value.browsing_context_id.into(),
151 allowed_operations: value.allowed_operations.into(),
152 source_origin: value.source_origin,
153 data: value.data.into(),
154 image: value.image.map(Into::into),
155 }
156 }
157}
158
159#[derive(Debug, Clone, PartialEq)]
160pub struct ChromeDragUpdate {
161 pub session_id: u64,
162 pub browsing_context_id: TabId,
163 pub allowed_operations: ChromeDragOperations,
164 pub modifiers: u32,
165 pub position_in_widget_x: f32,
166 pub position_in_widget_y: f32,
167 pub position_in_screen_x: f32,
168 pub position_in_screen_y: f32,
169}
170
171impl From<ChromeDragUpdate> for cbf::data::drag::DragUpdate {
172 fn from(value: ChromeDragUpdate) -> Self {
173 Self {
174 session_id: value.session_id,
175 browsing_context_id: value.browsing_context_id.into(),
176 allowed_operations: value.allowed_operations.into(),
177 modifiers: value.modifiers,
178 position_in_widget_x: value.position_in_widget_x,
179 position_in_widget_y: value.position_in_widget_y,
180 position_in_screen_x: value.position_in_screen_x,
181 position_in_screen_y: value.position_in_screen_y,
182 }
183 }
184}
185
186impl From<cbf::data::drag::DragUpdate> for ChromeDragUpdate {
187 fn from(value: cbf::data::drag::DragUpdate) -> Self {
188 Self {
189 session_id: value.session_id,
190 browsing_context_id: value.browsing_context_id.into(),
191 allowed_operations: value.allowed_operations.into(),
192 modifiers: value.modifiers,
193 position_in_widget_x: value.position_in_widget_x,
194 position_in_widget_y: value.position_in_widget_y,
195 position_in_screen_x: value.position_in_screen_x,
196 position_in_screen_y: value.position_in_screen_y,
197 }
198 }
199}
200
201#[derive(Debug, Clone, PartialEq)]
202pub struct ChromeDragDrop {
203 pub session_id: u64,
204 pub browsing_context_id: TabId,
205 pub modifiers: u32,
206 pub position_in_widget_x: f32,
207 pub position_in_widget_y: f32,
208 pub position_in_screen_x: f32,
209 pub position_in_screen_y: f32,
210}
211
212impl From<ChromeDragDrop> for cbf::data::drag::DragDrop {
213 fn from(value: ChromeDragDrop) -> Self {
214 Self {
215 session_id: value.session_id,
216 browsing_context_id: value.browsing_context_id.into(),
217 modifiers: value.modifiers,
218 position_in_widget_x: value.position_in_widget_x,
219 position_in_widget_y: value.position_in_widget_y,
220 position_in_screen_x: value.position_in_screen_x,
221 position_in_screen_y: value.position_in_screen_y,
222 }
223 }
224}
225
226impl From<cbf::data::drag::DragDrop> for ChromeDragDrop {
227 fn from(value: cbf::data::drag::DragDrop) -> Self {
228 Self {
229 session_id: value.session_id,
230 browsing_context_id: value.browsing_context_id.into(),
231 modifiers: value.modifiers,
232 position_in_widget_x: value.position_in_widget_x,
233 position_in_widget_y: value.position_in_widget_y,
234 position_in_screen_x: value.position_in_screen_x,
235 position_in_screen_y: value.position_in_screen_y,
236 }
237 }
238}