httpapi.rs (12850B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 use http::Method; 6 use serde_json::Value; 7 8 use crate::command::{VoidWebDriverExtensionCommand, WebDriverCommand, WebDriverExtensionCommand}; 9 use crate::error::WebDriverResult; 10 use crate::Parameters; 11 12 pub fn standard_routes<U: WebDriverExtensionRoute>() -> Vec<(Method, &'static str, Route<U>)> { 13 vec![ 14 (Method::POST, "/session", Route::NewSession), 15 (Method::DELETE, "/session/{sessionId}", Route::DeleteSession), 16 (Method::POST, "/session/{sessionId}/url", Route::Get), 17 ( 18 Method::GET, 19 "/session/{sessionId}/url", 20 Route::GetCurrentUrl, 21 ), 22 (Method::POST, "/session/{sessionId}/back", Route::GoBack), 23 ( 24 Method::POST, 25 "/session/{sessionId}/forward", 26 Route::GoForward, 27 ), 28 (Method::POST, "/session/{sessionId}/refresh", Route::Refresh), 29 (Method::GET, "/session/{sessionId}/title", Route::GetTitle), 30 ( 31 Method::GET, 32 "/session/{sessionId}/source", 33 Route::GetPageSource, 34 ), 35 ( 36 Method::GET, 37 "/session/{sessionId}/window", 38 Route::GetWindowHandle, 39 ), 40 ( 41 Method::GET, 42 "/session/{sessionId}/window/handles", 43 Route::GetWindowHandles, 44 ), 45 ( 46 Method::POST, 47 "/session/{sessionId}/window/new", 48 Route::NewWindow, 49 ), 50 ( 51 Method::DELETE, 52 "/session/{sessionId}/window", 53 Route::CloseWindow, 54 ), 55 ( 56 Method::GET, 57 "/session/{sessionId}/window/size", 58 Route::GetWindowSize, 59 ), 60 ( 61 Method::POST, 62 "/session/{sessionId}/window/size", 63 Route::SetWindowSize, 64 ), 65 ( 66 Method::GET, 67 "/session/{sessionId}/window/position", 68 Route::GetWindowPosition, 69 ), 70 ( 71 Method::POST, 72 "/session/{sessionId}/window/position", 73 Route::SetWindowPosition, 74 ), 75 ( 76 Method::GET, 77 "/session/{sessionId}/window/rect", 78 Route::GetWindowRect, 79 ), 80 ( 81 Method::POST, 82 "/session/{sessionId}/window/rect", 83 Route::SetWindowRect, 84 ), 85 ( 86 Method::POST, 87 "/session/{sessionId}/window/minimize", 88 Route::MinimizeWindow, 89 ), 90 ( 91 Method::POST, 92 "/session/{sessionId}/window/maximize", 93 Route::MaximizeWindow, 94 ), 95 ( 96 Method::POST, 97 "/session/{sessionId}/window/fullscreen", 98 Route::FullscreenWindow, 99 ), 100 ( 101 Method::POST, 102 "/session/{sessionId}/window", 103 Route::SwitchToWindow, 104 ), 105 ( 106 Method::POST, 107 "/session/{sessionId}/frame", 108 Route::SwitchToFrame, 109 ), 110 ( 111 Method::POST, 112 "/session/{sessionId}/frame/parent", 113 Route::SwitchToParentFrame, 114 ), 115 ( 116 Method::POST, 117 "/session/{sessionId}/element", 118 Route::FindElement, 119 ), 120 ( 121 Method::POST, 122 "/session/{sessionId}/element/{elementId}/element", 123 Route::FindElementElement, 124 ), 125 ( 126 Method::POST, 127 "/session/{sessionId}/elements", 128 Route::FindElements, 129 ), 130 ( 131 Method::POST, 132 "/session/{sessionId}/element/{elementId}/elements", 133 Route::FindElementElements, 134 ), 135 ( 136 Method::POST, 137 "/session/{sessionId}/shadow/{shadowId}/element", 138 Route::FindShadowRootElement, 139 ), 140 ( 141 Method::POST, 142 "/session/{sessionId}/shadow/{shadowId}/elements", 143 Route::FindShadowRootElements, 144 ), 145 ( 146 Method::GET, 147 "/session/{sessionId}/element/active", 148 Route::GetActiveElement, 149 ), 150 ( 151 Method::GET, 152 "/session/{sessionId}/element/{elementId}/shadow", 153 Route::GetShadowRoot, 154 ), 155 ( 156 Method::GET, 157 "/session/{sessionId}/element/{elementId}/displayed", 158 Route::IsDisplayed, 159 ), 160 ( 161 Method::GET, 162 "/session/{sessionId}/element/{elementId}/selected", 163 Route::IsSelected, 164 ), 165 ( 166 Method::GET, 167 "/session/{sessionId}/element/{elementId}/attribute/{name}", 168 Route::GetElementAttribute, 169 ), 170 ( 171 Method::GET, 172 "/session/{sessionId}/element/{elementId}/property/{name}", 173 Route::GetElementProperty, 174 ), 175 ( 176 Method::GET, 177 "/session/{sessionId}/element/{elementId}/css/{propertyName}", 178 Route::GetCSSValue, 179 ), 180 ( 181 Method::GET, 182 "/session/{sessionId}/element/{elementId}/text", 183 Route::GetElementText, 184 ), 185 ( 186 Method::GET, 187 "/session/{sessionId}/element/{elementId}/computedlabel", 188 Route::GetComputedLabel, 189 ), 190 ( 191 Method::GET, 192 "/session/{sessionId}/element/{elementId}/computedrole", 193 Route::GetComputedRole, 194 ), 195 ( 196 Method::GET, 197 "/session/{sessionId}/element/{elementId}/name", 198 Route::GetElementTagName, 199 ), 200 ( 201 Method::GET, 202 "/session/{sessionId}/element/{elementId}/rect", 203 Route::GetElementRect, 204 ), 205 ( 206 Method::GET, 207 "/session/{sessionId}/element/{elementId}/enabled", 208 Route::IsEnabled, 209 ), 210 ( 211 Method::POST, 212 "/session/{sessionId}/execute/sync", 213 Route::ExecuteScript, 214 ), 215 ( 216 Method::POST, 217 "/session/{sessionId}/execute/async", 218 Route::ExecuteAsyncScript, 219 ), 220 ( 221 Method::GET, 222 "/session/{sessionId}/cookie", 223 Route::GetCookies, 224 ), 225 ( 226 Method::GET, 227 "/session/{sessionId}/cookie/{name}", 228 Route::GetNamedCookie, 229 ), 230 ( 231 Method::POST, 232 "/session/{sessionId}/cookie", 233 Route::AddCookie, 234 ), 235 ( 236 Method::DELETE, 237 "/session/{sessionId}/cookie", 238 Route::DeleteCookies, 239 ), 240 ( 241 Method::DELETE, 242 "/session/{sessionId}/cookie/{name}", 243 Route::DeleteCookie, 244 ), 245 ( 246 Method::GET, 247 "/session/{sessionId}/timeouts", 248 Route::GetTimeouts, 249 ), 250 ( 251 Method::POST, 252 "/session/{sessionId}/timeouts", 253 Route::SetTimeouts, 254 ), 255 ( 256 Method::POST, 257 "/session/{sessionId}/element/{elementId}/click", 258 Route::ElementClick, 259 ), 260 ( 261 Method::POST, 262 "/session/{sessionId}/element/{elementId}/clear", 263 Route::ElementClear, 264 ), 265 ( 266 Method::POST, 267 "/session/{sessionId}/element/{elementId}/value", 268 Route::ElementSendKeys, 269 ), 270 ( 271 Method::POST, 272 "/session/{sessionId}/alert/dismiss", 273 Route::DismissAlert, 274 ), 275 ( 276 Method::POST, 277 "/session/{sessionId}/alert/accept", 278 Route::AcceptAlert, 279 ), 280 ( 281 Method::GET, 282 "/session/{sessionId}/alert/text", 283 Route::GetAlertText, 284 ), 285 ( 286 Method::POST, 287 "/session/{sessionId}/alert/text", 288 Route::SendAlertText, 289 ), 290 ( 291 Method::GET, 292 "/session/{sessionId}/screenshot", 293 Route::TakeScreenshot, 294 ), 295 ( 296 Method::GET, 297 "/session/{sessionId}/element/{elementId}/screenshot", 298 Route::TakeElementScreenshot, 299 ), 300 ( 301 Method::POST, 302 "/session/{sessionId}/actions", 303 Route::PerformActions, 304 ), 305 ( 306 Method::DELETE, 307 "/session/{sessionId}/actions", 308 Route::ReleaseActions, 309 ), 310 (Method::POST, "/session/{sessionId}/permissions", Route::SetPermission), 311 (Method::POST, "/session/{sessionId}/print", Route::Print), 312 ( 313 Method::POST, 314 "/session/{sessionId}/privacy", 315 Route::GPCSetGlobalPrivacyControl, 316 ), 317 ( 318 Method::GET, 319 "/session/{sessionId}/privacy", 320 Route::GPCGetGlobalPrivacyControl, 321 ), 322 ( 323 Method::POST, 324 "/session/{sessionId}/webauthn/authenticator", 325 Route::WebAuthnAddVirtualAuthenticator, 326 ), 327 ( 328 Method::DELETE, 329 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}", 330 Route::WebAuthnRemoveVirtualAuthenticator, 331 ), 332 ( 333 Method::POST, 334 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credential", 335 Route::WebAuthnAddCredential, 336 ), 337 ( 338 Method::GET, 339 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credentials", 340 Route::WebAuthnGetCredentials, 341 ), 342 ( 343 Method::DELETE, 344 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credentials/{credentialId}", 345 Route::WebAuthnRemoveCredential, 346 ), 347 ( 348 Method::DELETE, 349 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/credentials", 350 Route::WebAuthnRemoveAllCredentials, 351 ), 352 ( 353 Method::POST, 354 "/session/{sessionId}/webauthn/authenticator/{authenticatorId}/uv", 355 Route::WebAuthnSetUserVerified, 356 ), 357 (Method::GET, "/status", Route::Status), 358 ] 359 } 360 361 #[derive(Clone, Copy, Debug)] 362 pub enum Route<U: WebDriverExtensionRoute> { 363 NewSession, 364 DeleteSession, 365 Get, 366 GetCurrentUrl, 367 GoBack, 368 GoForward, 369 Refresh, 370 GetTitle, 371 GetPageSource, 372 GetWindowHandle, 373 GetWindowHandles, 374 NewWindow, 375 CloseWindow, 376 GetWindowSize, // deprecated 377 SetWindowSize, // deprecated 378 GetWindowPosition, // deprecated 379 SetWindowPosition, // deprecated 380 GetWindowRect, 381 SetWindowRect, 382 MinimizeWindow, 383 MaximizeWindow, 384 FullscreenWindow, 385 SwitchToWindow, 386 SwitchToFrame, 387 SwitchToParentFrame, 388 FindElement, 389 FindElements, 390 FindElementElement, 391 FindElementElements, 392 FindShadowRootElement, 393 FindShadowRootElements, 394 GetActiveElement, 395 GetShadowRoot, 396 IsDisplayed, 397 IsSelected, 398 GetElementAttribute, 399 GetElementProperty, 400 GetCSSValue, 401 GetElementText, 402 GetComputedLabel, 403 GetComputedRole, 404 GetElementTagName, 405 GetElementRect, 406 IsEnabled, 407 ExecuteScript, 408 ExecuteAsyncScript, 409 GetCookies, 410 GetNamedCookie, 411 AddCookie, 412 DeleteCookies, 413 DeleteCookie, 414 GetTimeouts, 415 SetTimeouts, 416 ElementClick, 417 ElementClear, 418 ElementSendKeys, 419 PerformActions, 420 ReleaseActions, 421 DismissAlert, 422 AcceptAlert, 423 GetAlertText, 424 SendAlertText, 425 TakeScreenshot, 426 TakeElementScreenshot, 427 Print, 428 SetPermission, 429 Status, 430 Extension(U), 431 GPCGetGlobalPrivacyControl, 432 GPCSetGlobalPrivacyControl, 433 WebAuthnAddVirtualAuthenticator, 434 WebAuthnRemoveVirtualAuthenticator, 435 WebAuthnAddCredential, 436 WebAuthnGetCredentials, 437 WebAuthnRemoveCredential, 438 WebAuthnRemoveAllCredentials, 439 WebAuthnSetUserVerified, 440 } 441 442 pub trait WebDriverExtensionRoute: Clone + Send + PartialEq { 443 type Command: WebDriverExtensionCommand + 'static; 444 445 fn command( 446 &self, 447 _: &Parameters, 448 _: &Value, 449 ) -> WebDriverResult<WebDriverCommand<Self::Command>>; 450 } 451 452 #[derive(Clone, Debug, PartialEq)] 453 pub struct VoidWebDriverExtensionRoute; 454 455 impl WebDriverExtensionRoute for VoidWebDriverExtensionRoute { 456 type Command = VoidWebDriverExtensionCommand; 457 458 fn command( 459 &self, 460 _: &Parameters, 461 _: &Value, 462 ) -> WebDriverResult<WebDriverCommand<VoidWebDriverExtensionCommand>> { 463 panic!("No extensions implemented"); 464 } 465 }