tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }