mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Add timeout and strictFileInteractability capabilities to response of new session command. Allow delete session command to run without a session. Testing: Clear some unexpected results of session tests in webdriver CI and `tests/wpt/meta/webdriver/tests/classic/delete_session/delete.py.ini` --------- Signed-off-by: batu_hoang <hoang.binh.trong@huawei.com> Signed-off-by: batu_hoang <longvatrong111@gmail.com>
82 lines
2.9 KiB
Rust
82 lines
2.9 KiB
Rust
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
use serde_json::Value;
|
|
use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult};
|
|
|
|
pub(crate) struct TimeoutsConfiguration {
|
|
pub script: Option<u64>,
|
|
pub page_load: u64,
|
|
pub implicit_wait: u64,
|
|
}
|
|
|
|
impl Default for TimeoutsConfiguration {
|
|
fn default() -> Self {
|
|
TimeoutsConfiguration {
|
|
script: Some(30_000),
|
|
page_load: 300_000,
|
|
implicit_wait: 0,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <https://w3c.github.io/webdriver/#dfn-deserialize-as-timeouts-configuration>
|
|
pub(crate) fn deserialize_as_timeouts_configuration(
|
|
timeouts: &Value,
|
|
) -> WebDriverResult<TimeoutsConfiguration> {
|
|
if let Value::Object(map) = timeouts {
|
|
let mut config = TimeoutsConfiguration::default();
|
|
for (key, value) in map {
|
|
match key.as_str() {
|
|
"implicit" => {
|
|
config.implicit_wait = value.as_f64().ok_or_else(|| {
|
|
WebDriverError::new(
|
|
ErrorStatus::InvalidArgument,
|
|
"Invalid implicit timeout",
|
|
)
|
|
})? as u64;
|
|
},
|
|
"pageLoad" => {
|
|
config.page_load = value.as_f64().ok_or_else(|| {
|
|
WebDriverError::new(
|
|
ErrorStatus::InvalidArgument,
|
|
"Invalid page load timeout",
|
|
)
|
|
})? as u64;
|
|
},
|
|
"script" => {
|
|
config.script = match value {
|
|
Value::Null => None,
|
|
_ => Some(value.as_f64().ok_or_else(|| {
|
|
WebDriverError::new(
|
|
ErrorStatus::InvalidArgument,
|
|
"Invalid script timeout",
|
|
)
|
|
})? as u64),
|
|
};
|
|
},
|
|
_ => {
|
|
return Err(WebDriverError::new(
|
|
ErrorStatus::UnknownCommand,
|
|
"Unknown timeout key",
|
|
));
|
|
},
|
|
}
|
|
}
|
|
Ok(config)
|
|
} else {
|
|
Err(WebDriverError::new(
|
|
ErrorStatus::InvalidArgument,
|
|
"Expected an object for timeouts",
|
|
))
|
|
}
|
|
}
|
|
|
|
pub(crate) fn serialize_timeouts_configuration(timeouts: &TimeoutsConfiguration) -> Value {
|
|
let mut map = serde_json::Map::new();
|
|
map.insert("script".to_string(), Value::from(timeouts.script));
|
|
map.insert("pageLoad".to_string(), Value::from(timeouts.page_load));
|
|
map.insert("implicit".to_string(), Value::from(timeouts.implicit_wait));
|
|
Value::Object(map)
|
|
}
|