webdriver: Add handle any user prompts step for all commands (#38035)

- Add `handler any user prompt` step for all commands.
- Enable webdriver tests which were blocked by `handle any user prompt`
step.

---------

Signed-off-by: batu_hoang <hoang.binh.trong@huawei.com>
This commit is contained in:
batu_hoang 2025-07-17 17:47:47 +08:00 committed by GitHub
parent 18d1a62add
commit 345733a5c5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
66 changed files with 859 additions and 472 deletions

View file

@ -934,7 +934,11 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
}; };
let msg = EmbedderMsg::ShowSimpleDialog(self.webview_id(), dialog); let msg = EmbedderMsg::ShowSimpleDialog(self.webview_id(), dialog);
self.send_to_embedder(msg); self.send_to_embedder(msg);
let AlertResponse::Ok = receiver.recv().unwrap(); receiver.recv().unwrap_or_else(|_| {
// If the receiver is closed, we assume the dialog was cancelled.
debug!("Alert dialog was cancelled or failed to show.");
AlertResponse::Ok
});
} }
// https://html.spec.whatwg.org/multipage/#dom-confirm // https://html.spec.whatwg.org/multipage/#dom-confirm
@ -947,7 +951,14 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
}; };
let msg = EmbedderMsg::ShowSimpleDialog(self.webview_id(), dialog); let msg = EmbedderMsg::ShowSimpleDialog(self.webview_id(), dialog);
self.send_to_embedder(msg); self.send_to_embedder(msg);
receiver.recv().unwrap() == ConfirmResponse::Ok match receiver.recv() {
Ok(ConfirmResponse::Ok) => true,
Ok(ConfirmResponse::Cancel) => false,
Err(_) => {
warn!("Confirm dialog was cancelled or failed to show.");
false
},
}
} }
// https://html.spec.whatwg.org/multipage/#dom-prompt // https://html.spec.whatwg.org/multipage/#dom-prompt
@ -961,9 +972,13 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
}; };
let msg = EmbedderMsg::ShowSimpleDialog(self.webview_id(), dialog); let msg = EmbedderMsg::ShowSimpleDialog(self.webview_id(), dialog);
self.send_to_embedder(msg); self.send_to_embedder(msg);
match receiver.recv().unwrap() { match receiver.recv() {
PromptResponse::Ok(input) => Some(input.into()), Ok(PromptResponse::Ok(input)) => Some(input.into()),
PromptResponse::Cancel => None, Ok(PromptResponse::Cancel) => None,
Err(_) => {
warn!("Prompt dialog was cancelled or failed to show.");
None
},
} }
} }

View file

@ -28,10 +28,48 @@ use crate::{MouseButton, MouseButtonAction};
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
pub struct WebDriverMessageId(pub usize); pub struct WebDriverMessageId(pub usize);
#[derive(Debug, Deserialize, Serialize)] #[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
pub enum WebDriverUserPrompt {
Alert,
BeforeUnload,
Confirm,
Default,
File,
Prompt,
FallbackDefault,
}
impl WebDriverUserPrompt {
pub fn new_from_str(s: &str) -> Option<Self> {
match s {
"alert" => Some(WebDriverUserPrompt::Alert),
"beforeUnload" => Some(WebDriverUserPrompt::BeforeUnload),
"confirm" => Some(WebDriverUserPrompt::Confirm),
"default" => Some(WebDriverUserPrompt::Default),
"file" => Some(WebDriverUserPrompt::File),
"prompt" => Some(WebDriverUserPrompt::Prompt),
"fallbackDefault" => Some(WebDriverUserPrompt::FallbackDefault),
_ => None,
}
}
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
pub enum WebDriverUserPromptAction { pub enum WebDriverUserPromptAction {
Accept, Accept,
Dismiss, Dismiss,
Ignore,
}
impl WebDriverUserPromptAction {
pub fn new_from_str(s: &str) -> Option<Self> {
match s {
"accept" => Some(WebDriverUserPromptAction::Accept),
"dismiss" => Some(WebDriverUserPromptAction::Dismiss),
"ignore" => Some(WebDriverUserPromptAction::Ignore),
_ => None,
}
}
} }
/// Messages to the constellation originating from the WebDriver server. /// Messages to the constellation originating from the WebDriver server.
@ -121,10 +159,11 @@ pub enum WebDriverCommandMsg {
IsWebViewOpen(WebViewId, IpcSender<bool>), IsWebViewOpen(WebViewId, IpcSender<bool>),
/// Check whether browsing context is open. /// Check whether browsing context is open.
IsBrowsingContextOpen(BrowsingContextId, IpcSender<bool>), IsBrowsingContextOpen(BrowsingContextId, IpcSender<bool>),
CurrentUserPrompt(WebViewId, IpcSender<Option<WebDriverUserPrompt>>),
HandleUserPrompt( HandleUserPrompt(
WebViewId, WebViewId,
WebDriverUserPromptAction, WebDriverUserPromptAction,
IpcSender<Result<(), ()>>, IpcSender<Result<Option<String>, ()>>,
), ),
GetAlertText(WebViewId, IpcSender<Result<String, ()>>), GetAlertText(WebViewId, IpcSender<Result<String, ()>>),
AddLoadStatusSender(WebViewId, IpcSender<WebDriverLoadStatus>), AddLoadStatusSender(WebViewId, IpcSender<WebDriverLoadStatus>),

View file

@ -66,6 +66,9 @@ use webdriver::response::{
use webdriver::server::{self, Session, SessionTeardownKind, WebDriverHandler}; use webdriver::server::{self, Session, SessionTeardownKind, WebDriverHandler};
use crate::actions::{ActionItem, InputSourceState, PointerInputState}; use crate::actions::{ActionItem, InputSourceState, PointerInputState};
use crate::user_prompt::{
UserPromptHandler, default_unhandled_prompt_behavior, deserialize_unhandled_prompt_behaviour,
};
#[derive(Default)] #[derive(Default)]
pub struct WebDriverMessageIdGenerator { pub struct WebDriverMessageIdGenerator {
@ -186,7 +189,7 @@ pub struct WebDriverSession {
strict_file_interactability: bool, strict_file_interactability: bool,
unhandled_prompt_behavior: String, user_prompt_handler: UserPromptHandler,
/// <https://w3c.github.io/webdriver/#dfn-input-state-map> /// <https://w3c.github.io/webdriver/#dfn-input-state-map>
input_state_table: RefCell<HashMap<String, InputSourceState>>, input_state_table: RefCell<HashMap<String, InputSourceState>>,
@ -214,7 +217,7 @@ impl WebDriverSession {
page_loading_strategy: "normal".to_string(), page_loading_strategy: "normal".to_string(),
strict_file_interactability: false, strict_file_interactability: false,
unhandled_prompt_behavior: "dismiss and notify".to_string(), user_prompt_handler: UserPromptHandler::new(),
input_state_table: RefCell::new(HashMap::new()), input_state_table: RefCell::new(HashMap::new()),
input_cancel_list: RefCell::new(Vec::new()), input_cancel_list: RefCell::new(Vec::new()),
@ -653,13 +656,14 @@ impl Handler {
match processed.get("unhandledPromptBehavior") { match processed.get("unhandledPromptBehavior") {
Some(unhandled_prompt_behavior) => { Some(unhandled_prompt_behavior) => {
session.unhandled_prompt_behavior = session.user_prompt_handler = deserialize_unhandled_prompt_behaviour(
unhandled_prompt_behavior.to_string() unhandled_prompt_behavior.clone(),
)?;
}, },
None => { None => {
processed.insert( processed.insert(
"unhandledPromptBehavior".to_string(), "unhandledPromptBehavior".to_string(),
json!(session.unhandled_prompt_behavior), json!(default_unhandled_prompt_behavior()),
); );
}, },
} }
@ -777,6 +781,9 @@ impl Handler {
}, },
}; };
// Step 4. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
let cmd_msg = let cmd_msg =
WebDriverCommandMsg::LoadUrl(webview_id, url, self.load_status_sender.clone()); WebDriverCommandMsg::LoadUrl(webview_id, url, self.load_status_sender.clone());
self.send_message_to_embedder(cmd_msg)?; self.send_message_to_embedder(cmd_msg)?;
@ -839,6 +846,9 @@ impl Handler {
} }
fn handle_current_url(&self) -> WebDriverResult<WebDriverResponse> { fn handle_current_url(&self) -> WebDriverResult<WebDriverResponse> {
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
self.top_level_script_command( self.top_level_script_command(
WebDriverScriptCommand::GetUrl(sender), WebDriverScriptCommand::GetUrl(sender),
@ -864,6 +874,10 @@ impl Handler {
if let VerifyBrowsingContextIsOpen::Yes = verify { if let VerifyBrowsingContextIsOpen::Yes = verify {
self.verify_top_level_browsing_context_is_open(webview_id)?; self.verify_top_level_browsing_context_is_open(webview_id)?;
} }
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
self.send_message_to_embedder(WebDriverCommandMsg::GetWindowRect(webview_id, sender))?; self.send_message_to_embedder(WebDriverCommandMsg::GetWindowRect(webview_id, sender))?;
let window_rect = wait_for_script_response(receiver)?; let window_rect = wait_for_script_response(receiver)?;
@ -893,6 +907,9 @@ impl Handler {
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(webview_id)?; self.verify_top_level_browsing_context_is_open(webview_id)?;
// Step 13. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
// We don't current allow modifying the window x/y positions, so we can just // We don't current allow modifying the window x/y positions, so we can just
// return the current window rectangle if not changing dimension. // return the current window rectangle if not changing dimension.
if params.width.is_none() && params.height.is_none() { if params.width.is_none() && params.height.is_none() {
@ -975,6 +992,9 @@ impl Handler {
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(webview_id)?; self.verify_top_level_browsing_context_is_open(webview_id)?;
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
self.send_message_to_embedder(WebDriverCommandMsg::GoBack( self.send_message_to_embedder(WebDriverCommandMsg::GoBack(
webview_id, webview_id,
self.load_status_sender.clone(), self.load_status_sender.clone(),
@ -988,6 +1008,9 @@ impl Handler {
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(webview_id)?; self.verify_top_level_browsing_context_is_open(webview_id)?;
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
self.send_message_to_embedder(WebDriverCommandMsg::GoForward( self.send_message_to_embedder(WebDriverCommandMsg::GoForward(
webview_id, webview_id,
self.load_status_sender.clone(), self.load_status_sender.clone(),
@ -1001,6 +1024,9 @@ impl Handler {
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(webview_id)?; self.verify_top_level_browsing_context_is_open(webview_id)?;
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
let cmd_msg = WebDriverCommandMsg::Refresh(webview_id, self.load_status_sender.clone()); let cmd_msg = WebDriverCommandMsg::Refresh(webview_id, self.load_status_sender.clone());
self.send_message_to_embedder(cmd_msg)?; self.send_message_to_embedder(cmd_msg)?;
@ -1014,6 +1040,9 @@ impl Handler {
} }
fn handle_title(&self) -> WebDriverResult<WebDriverResponse> { fn handle_title(&self) -> WebDriverResult<WebDriverResponse> {
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
self.top_level_script_command( self.top_level_script_command(
@ -1072,8 +1101,12 @@ impl Handler {
// Step 1. If session's current top-level browsing context is no longer open, // Step 1. If session's current top-level browsing context is no longer open,
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(webview_id)?; self.verify_top_level_browsing_context_is_open(webview_id)?;
let session = self.session_mut().unwrap();
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
// Step 3. Close session's current top-level browsing context. // Step 3. Close session's current top-level browsing context.
let session = self.session_mut().unwrap();
session.window_handles.remove(&webview_id); session.window_handles.remove(&webview_id);
let cmd_msg = WebDriverCommandMsg::CloseWebView(session.webview_id); let cmd_msg = WebDriverCommandMsg::CloseWebView(session.webview_id);
self.send_message_to_embedder(cmd_msg)?; self.send_message_to_embedder(cmd_msg)?;
@ -1103,8 +1136,14 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let session = self.session().unwrap(); let session = self.session().unwrap();
// Step 2. If session's current top-level browsing context is no longer open,
// return error with error code no such window.
self.verify_top_level_browsing_context_is_open(session.webview_id)?; self.verify_top_level_browsing_context_is_open(session.webview_id)?;
// Step 3. Handle any user prompt.
self.handle_any_user_prompts(session.webview_id)?;
let cmd_msg = WebDriverCommandMsg::NewWebView(sender, self.load_status_sender.clone()); let cmd_msg = WebDriverCommandMsg::NewWebView(sender, self.load_status_sender.clone());
// Step 5. Create a new top-level browsing context by running the window open steps. // Step 5. Create a new top-level browsing context by running the window open steps.
// This MUST be done without invoking the focusing steps. // This MUST be done without invoking the focusing steps.
@ -1171,6 +1210,10 @@ impl Handler {
// Step 1.2. Return success with data null. // Step 1.2. Return success with data null.
return Ok(WebDriverResponse::Void); return Ok(WebDriverResponse::Void);
} }
// Step 3. Handle any user prompt.
self.handle_any_user_prompts(webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetParentFrameId(sender); let cmd = WebDriverScriptCommand::GetParentFrameId(sender);
// TODO: Track Parent Browsing Context directly in the session, as expected by Spec. // TODO: Track Parent Browsing Context directly in the session, as expected by Spec.
@ -1220,6 +1263,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetBrowsingContextId(frame_id, sender); let cmd = WebDriverScriptCommand::GetBrowsingContextId(frame_id, sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
self.handle_any_user_prompts(self.session()?.webview_id)?;
match wait_for_script_response(receiver)? { match wait_for_script_response(receiver)? {
Ok(browsing_context_id) => { Ok(browsing_context_id) => {
@ -1239,6 +1283,10 @@ impl Handler {
if parameters.value.is_empty() { if parameters.value.is_empty() {
return Err(WebDriverError::new(ErrorStatus::InvalidArgument, "")); return Err(WebDriverError::new(ErrorStatus::InvalidArgument, ""));
} }
// Step 6. Handle any user prompt.
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
match parameters.using { match parameters.using {
LocatorStrategy::CSSSelector => { LocatorStrategy::CSSSelector => {
@ -1304,6 +1352,10 @@ impl Handler {
if parameters.value.is_empty() { if parameters.value.is_empty() {
return Err(WebDriverError::new(ErrorStatus::InvalidArgument, "")); return Err(WebDriverError::new(ErrorStatus::InvalidArgument, ""));
} }
// Step 6. Handle any user prompt.
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
match parameters.using { match parameters.using {
@ -1366,6 +1418,10 @@ impl Handler {
if parameters.value.is_empty() { if parameters.value.is_empty() {
return Err(WebDriverError::new(ErrorStatus::InvalidArgument, "")); return Err(WebDriverError::new(ErrorStatus::InvalidArgument, ""));
} }
// Step 6. Handle any user prompt.
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
match parameters.using { match parameters.using {
@ -1432,6 +1488,7 @@ impl Handler {
} }
fn handle_get_shadow_root(&self, element: WebElement) -> WebDriverResult<WebDriverResponse> { fn handle_get_shadow_root(&self, element: WebElement) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementShadowRoot(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementShadowRoot(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1450,6 +1507,7 @@ impl Handler {
// https://w3c.github.io/webdriver/webdriver-spec.html#get-element-rect // https://w3c.github.io/webdriver/webdriver-spec.html#get-element-rect
fn handle_element_rect(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> { fn handle_element_rect(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementRect(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementRect(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1469,6 +1527,7 @@ impl Handler {
/// <https://w3c.github.io/webdriver/#dfn-get-element-text> /// <https://w3c.github.io/webdriver/#dfn-get-element-text>
fn handle_element_text(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> { fn handle_element_text(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementText(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementText(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1482,6 +1541,7 @@ impl Handler {
///<https://w3c.github.io/webdriver/#get-active-element> ///<https://w3c.github.io/webdriver/#get-active-element>
fn handle_active_element(&self) -> WebDriverResult<WebDriverResponse> { fn handle_active_element(&self) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetActiveElement(sender); let cmd = WebDriverScriptCommand::GetActiveElement(sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1503,6 +1563,7 @@ impl Handler {
} }
fn handle_computed_role(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> { fn handle_computed_role(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetComputedRole(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetComputedRole(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1515,6 +1576,7 @@ impl Handler {
} }
fn handle_element_tag_name(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> { fn handle_element_tag_name(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementTagName(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementTagName(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1531,6 +1593,7 @@ impl Handler {
element: &WebElement, element: &WebElement,
name: &str, name: &str,
) -> WebDriverResult<WebDriverResponse> { ) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementAttribute( let cmd = WebDriverScriptCommand::GetElementAttribute(
element.to_string(), element.to_string(),
@ -1551,6 +1614,7 @@ impl Handler {
element: &WebElement, element: &WebElement,
name: &str, name: &str,
) -> WebDriverResult<WebDriverResponse> { ) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementProperty( let cmd = WebDriverScriptCommand::GetElementProperty(
@ -1573,6 +1637,7 @@ impl Handler {
element: &WebElement, element: &WebElement,
name: &str, name: &str,
) -> WebDriverResult<WebDriverResponse> { ) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = let cmd =
WebDriverScriptCommand::GetElementCSS(element.to_string(), name.to_owned(), sender); WebDriverScriptCommand::GetElementCSS(element.to_string(), name.to_owned(), sender);
@ -1586,6 +1651,7 @@ impl Handler {
} }
fn handle_get_cookies(&self) -> WebDriverResult<WebDriverResponse> { fn handle_get_cookies(&self) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookies(sender); let cmd = WebDriverScriptCommand::GetCookies(sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1601,6 +1667,7 @@ impl Handler {
} }
fn handle_get_cookie(&self, name: String) -> WebDriverResult<WebDriverResponse> { fn handle_get_cookie(&self, name: String) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookie(name, sender); let cmd = WebDriverScriptCommand::GetCookie(name, sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1622,6 +1689,7 @@ impl Handler {
&self, &self,
params: &AddCookieParameters, params: &AddCookieParameters,
) -> WebDriverResult<WebDriverResponse> { ) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cookie_builder = CookieBuilder::new(params.name.to_owned(), params.value.to_owned()) let cookie_builder = CookieBuilder::new(params.name.to_owned(), params.value.to_owned())
@ -1645,6 +1713,7 @@ impl Handler {
} }
fn handle_delete_cookie(&self, name: String) -> WebDriverResult<WebDriverResponse> { fn handle_delete_cookie(&self, name: String) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::DeleteCookie(name, sender); let cmd = WebDriverScriptCommand::DeleteCookie(name, sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1655,6 +1724,7 @@ impl Handler {
} }
fn handle_delete_cookies(&self) -> WebDriverResult<WebDriverResponse> { fn handle_delete_cookies(&self) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::DeleteCookies(sender); let cmd = WebDriverScriptCommand::DeleteCookies(sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
@ -1723,6 +1793,10 @@ impl Handler {
// Step 1. If session's current browsing context is no longer open, // Step 1. If session's current browsing context is no longer open,
// return error with error code no such window. // return error with error code no such window.
self.verify_browsing_context_is_open(browsing_context)?; self.verify_browsing_context_is_open(browsing_context)?;
// Step 2. Handle any user prompt.
self.handle_any_user_prompts(self.session()?.webview_id)?;
// Step 5. Let actions by tick be the result of trying to extract an action sequence // Step 5. Let actions by tick be the result of trying to extract an action sequence
let actions_by_tick = self.extract_an_action_sequence(parameters); let actions_by_tick = self.extract_an_action_sequence(parameters);
@ -1741,7 +1815,8 @@ impl Handler {
// return error with error code no such window. // return error with error code no such window.
self.verify_browsing_context_is_open(session.browsing_context_id)?; self.verify_browsing_context_is_open(session.browsing_context_id)?;
// TODO: Step 2. User prompts. No user prompt implemented yet. // Step 2. User prompts. No user prompt implemented yet.
self.handle_any_user_prompts(self.session()?.webview_id)?;
// Skip: Step 3. We don't support "browsing context input state map" yet. // Skip: Step 3. We don't support "browsing context input state map" yet.
@ -1774,6 +1849,8 @@ impl Handler {
&self, &self,
parameters: &JavascriptCommandParameters, parameters: &JavascriptCommandParameters,
) -> WebDriverResult<WebDriverResponse> { ) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let func_body = &parameters.script; let func_body = &parameters.script;
let args_string: Vec<_> = parameters let args_string: Vec<_> = parameters
.args .args
@ -1804,6 +1881,8 @@ impl Handler {
&self, &self,
parameters: &JavascriptCommandParameters, parameters: &JavascriptCommandParameters,
) -> WebDriverResult<WebDriverResponse> { ) -> WebDriverResult<WebDriverResponse> {
self.handle_any_user_prompts(self.session()?.webview_id)?;
let func_body = &parameters.script; let func_body = &parameters.script;
let mut args_string: Vec<_> = parameters let mut args_string: Vec<_> = parameters
.args .args
@ -1883,7 +1962,9 @@ impl Handler {
element: &WebElement, element: &WebElement,
keys: &SendKeysParameters, keys: &SendKeysParameters,
) -> WebDriverResult<WebDriverResponse> { ) -> WebDriverResult<WebDriverResponse> {
// Step 3-8 // Step 4. Handle any user prompt.
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::WillSendKeys( let cmd = WebDriverScriptCommand::WillSendKeys(
element.to_string(), element.to_string(),
@ -1914,6 +1995,14 @@ impl Handler {
/// <https://w3c.github.io/webdriver/#element-click> /// <https://w3c.github.io/webdriver/#element-click>
fn handle_element_click(&mut self, element: &WebElement) -> WebDriverResult<WebDriverResponse> { fn handle_element_click(&mut self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
// Step 1. If session's current browsing context is no longer open,
// return error with error code no such window.
let browsing_context_id = self.session()?.browsing_context_id;
self.verify_browsing_context_is_open(browsing_context_id)?;
// Step 2. Handle any user prompts.
self.handle_any_user_prompts(self.session()?.webview_id)?;
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let webview_id = self.session()?.webview_id; let webview_id = self.session()?.webview_id;
let browsing_context_id = self.session()?.browsing_context_id; let browsing_context_id = self.session()?.browsing_context_id;
@ -2035,6 +2124,9 @@ impl Handler {
// Step 1. If session's current top-level browsing context is no longer open, // Step 1. If session's current top-level browsing context is no longer open,
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?; self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?;
self.handle_any_user_prompts(self.session()?.webview_id)?;
let mut img = None; let mut img = None;
let interval = 1000; let interval = 1000;

View file

@ -2,16 +2,180 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * 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/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use embedder_traits::{WebDriverCommandMsg, WebDriverUserPromptAction}; use std::borrow::Cow;
use std::collections::{BTreeMap, HashMap};
use base::id::WebViewId;
use embedder_traits::{WebDriverCommandMsg, WebDriverUserPrompt, WebDriverUserPromptAction};
use ipc_channel::ipc; use ipc_channel::ipc;
use serde_json::{Map, Value};
use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult}; use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult};
use webdriver::response::{ValueResponse, WebDriverResponse}; use webdriver::response::{ValueResponse, WebDriverResponse};
use crate::{Handler, wait_for_script_response}; use crate::{Handler, wait_for_script_response};
const KNOWN_PROMPT_HANDLERS: [&str; 5] = [
"dismiss",
"accept",
"dismiss and notify",
"accept and notify",
"ignore",
];
const VALID_PROMPT_TYPES: [&str; 6] = [
"alert",
"beforeUnload",
"confirm",
"default",
"file",
"prompt",
];
/// <https://w3c.github.io/webdriver/#dfn-prompt-handler-configuration>
#[derive(Clone, Debug)]
pub(crate) struct PromptHandlerConfiguration {
handler: WebDriverUserPromptAction,
notify: bool,
}
pub(crate) type UserPromptHandler = HashMap<WebDriverUserPrompt, PromptHandlerConfiguration>;
/// <https://w3c.github.io/webdriver/#dfn-deserialize-as-an-unhandled-prompt-behavior>
pub(crate) fn deserialize_unhandled_prompt_behaviour(
value_param: Value,
) -> Result<UserPromptHandler, WebDriverError> {
// Step 2-5.
let (value, is_string_value) = match value_param {
Value::Object(map) => (map, false),
Value::String(..) => {
let mut map = Map::new();
map.insert("fallbackDefault".to_string(), value_param);
(map, true)
},
_ => {
return Err(WebDriverError::new(
ErrorStatus::InvalidArgument,
"Expected an object or a string for unhandled prompt behavior.",
));
},
};
// Step 6. Let user prompt handler be a new empty map.
let mut user_prompt_handler = UserPromptHandler::new();
// Step 7. For each key-value pair in value:
for (prompt_type, handler) in value {
// Step 7.1. If `is_string_value` is false and prompt type is not one of
// the valid prompt types, return error with error code invalid argument.
if !is_string_value && !VALID_PROMPT_TYPES.contains(&prompt_type.as_str()) {
return Err(WebDriverError::new(
ErrorStatus::InvalidArgument,
format!("Invalid prompt type: {}", prompt_type),
));
}
// Step 7.2. If known prompt handlers does not contain an entry with
// handler key `handler` return error with error code invalid argument.
let handle_str = match handler {
Value::String(s) => s,
_ => {
return Err(WebDriverError::new(
ErrorStatus::InvalidArgument,
format!("Expected a string for handler, got: {:?}", handler),
));
},
};
if !KNOWN_PROMPT_HANDLERS.contains(&handle_str.as_str()) {
return Err(WebDriverError::new(
ErrorStatus::InvalidArgument,
format!("Unknown prompt handler: {}", handle_str),
));
}
// Step 7.3 - 7.6.
let (handler, notify) = match handle_str.as_str() {
"accept and notify" => (
WebDriverUserPromptAction::new_from_str("accept").unwrap(),
true,
),
"dismiss and notify" => (
WebDriverUserPromptAction::new_from_str("dismiss").unwrap(),
true,
),
"ignore" => (
WebDriverUserPromptAction::new_from_str("ignore").unwrap(),
false,
),
"accept" => (
WebDriverUserPromptAction::new_from_str("accept").unwrap(),
false,
),
"dismiss" => (
WebDriverUserPromptAction::new_from_str("dismiss").unwrap(),
false,
),
_ => unreachable!(),
};
// Step 7.7 - 7.8.
user_prompt_handler.insert(
WebDriverUserPrompt::new_from_str(&prompt_type).unwrap(),
PromptHandlerConfiguration { handler, notify },
);
}
Ok(user_prompt_handler)
}
pub(crate) fn default_unhandled_prompt_behavior() -> &'static str {
"dismiss and notify"
}
/// <https://www.w3.org/TR/webdriver2/#dfn-get-the-prompt-handler>
fn get_user_prompt_handler(
user_prompt_handler: &UserPromptHandler,
prompt_type: WebDriverUserPrompt,
) -> PromptHandlerConfiguration {
// Step 2. If handlers contains type return handlers[type].
if let Some(handler) = user_prompt_handler.get(&prompt_type) {
return (*handler).clone();
}
// Step 3. If handlers contains default return handlers[default].
if let Some(handler) = user_prompt_handler.get(&WebDriverUserPrompt::Default) {
return (*handler).clone();
}
// Step 4. If prompt type is "beforeUnload" return a configuration with handler "accept" and notify false.
if prompt_type == WebDriverUserPrompt::BeforeUnload {
return PromptHandlerConfiguration {
handler: WebDriverUserPromptAction::Accept,
notify: false,
};
}
// Step 5. If handlers contains fallbackDefault return handlers[fallbackDefault].
if let Some(handler) = user_prompt_handler.get(&WebDriverUserPrompt::FallbackDefault) {
return (*handler).clone();
}
// Step 6. Return a configuration with handler "dismiss" and notify true.
PromptHandlerConfiguration {
handler: WebDriverUserPromptAction::Dismiss,
notify: true,
}
}
fn webdriver_response_single_data(
key: &'static str,
value: Value,
) -> Option<BTreeMap<Cow<'static, str>, Value>> {
Some([(Cow::Borrowed(key), value)].into_iter().collect())
}
impl Handler { impl Handler {
/// <https://w3c.github.io/webdriver/#dismiss-alert> /// <https://w3c.github.io/webdriver/#dismiss-alert>
pub(crate) fn handle_dismiss_alert(&mut self) -> WebDriverResult<WebDriverResponse> { pub(crate) fn handle_dismiss_alert(&self) -> WebDriverResult<WebDriverResponse> {
// Step 1. If session's current top-level browsing context is no longer open, // Step 1. If session's current top-level browsing context is no longer open,
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?; self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?;
@ -31,12 +195,12 @@ impl Handler {
"No user prompt is currently active.", "No user prompt is currently active.",
)), )),
// Step 4. Return success with data null. // Step 4. Return success with data null.
Ok(()) => Ok(WebDriverResponse::Void), Ok(_) => Ok(WebDriverResponse::Void),
} }
} }
/// <https://w3c.github.io/webdriver/#accept-alert> /// <https://w3c.github.io/webdriver/#accept-alert>
pub(crate) fn handle_accept_alert(&mut self) -> WebDriverResult<WebDriverResponse> { pub(crate) fn handle_accept_alert(&self) -> WebDriverResult<WebDriverResponse> {
// Step 1. If session's current top-level browsing context is no longer open, // Step 1. If session's current top-level browsing context is no longer open,
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?; self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?;
@ -56,11 +220,11 @@ impl Handler {
"No user prompt is currently active.", "No user prompt is currently active.",
)), )),
// Step 4. Return success with data null. // Step 4. Return success with data null.
Ok(()) => Ok(WebDriverResponse::Void), Ok(_) => Ok(WebDriverResponse::Void),
} }
} }
pub(crate) fn handle_get_alert_text(&mut self) -> WebDriverResult<WebDriverResponse> { pub(crate) fn handle_get_alert_text(&self) -> WebDriverResult<WebDriverResponse> {
// Step 1. If session's current top-level browsing context is no longer open, // Step 1. If session's current top-level browsing context is no longer open,
// return error with error code no such window. // return error with error code no such window.
self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?; self.verify_top_level_browsing_context_is_open(self.session()?.webview_id)?;
@ -90,4 +254,49 @@ impl Handler {
))), ))),
} }
} }
/// <https://w3c.github.io/webdriver/#dfn-handle-any-user-prompts>
pub(crate) fn handle_any_user_prompts(
&self,
webview_id: WebViewId,
) -> WebDriverResult<WebDriverResponse> {
let (sender, receiver) = ipc::channel().unwrap();
self.send_message_to_embedder(WebDriverCommandMsg::CurrentUserPrompt(webview_id, sender))?;
match wait_for_script_response(receiver)? {
// Step 1. If the current user prompt is null, return success with data null.
None => Ok(WebDriverResponse::Void),
Some(prompt_type) => {
// Step 2 - 4. Get user prompt handler for the prompt type.
let handler =
get_user_prompt_handler(&self.session()?.user_prompt_handler, prompt_type);
// Step 5. Perform the substeps based on handler's handler
let (sender, receiver) = ipc::channel().unwrap();
self.send_message_to_embedder(WebDriverCommandMsg::HandleUserPrompt(
webview_id,
handler.handler.clone(),
sender,
))?;
if handler.notify || handler.handler == WebDriverUserPromptAction::Ignore {
// Step 6. If handler's notify is true, return annotated unexpected alert open error.
let alert_text = wait_for_script_response(receiver)?
.unwrap_or_default()
.unwrap_or_default();
Err(WebDriverError::new_with_data(
ErrorStatus::UnexpectedAlertOpen,
"Handle any user prompt: Unexpected alert open.",
webdriver_response_single_data("text", Value::String(alert_text)),
None,
))
} else {
// Step 7. Return success with data null.
Ok(WebDriverResponse::Void)
}
},
}
}
} }

View file

@ -577,8 +577,17 @@ impl App {
webdriver_script_command, webdriver_script_command,
)); ));
}, },
WebDriverCommandMsg::CurrentUserPrompt(webview_id, response_sender) => {
let current_dialog =
running_state.get_current_active_dialog_webdriver_type(webview_id);
if let Err(error) = response_sender.send(current_dialog) {
warn!("Failed to send response of CurrentUserPrompt: {error}");
};
},
WebDriverCommandMsg::HandleUserPrompt(webview_id, action, response_sender) => { WebDriverCommandMsg::HandleUserPrompt(webview_id, action, response_sender) => {
let response = if running_state.webview_has_active_dialog(webview_id) { let response = if running_state.webview_has_active_dialog(webview_id) {
let alert_text = running_state.alert_text_of_newest_dialog(webview_id);
match action { match action {
WebDriverUserPromptAction::Accept => { WebDriverUserPromptAction::Accept => {
running_state.accept_active_dialogs(webview_id) running_state.accept_active_dialogs(webview_id)
@ -586,9 +595,14 @@ impl App {
WebDriverUserPromptAction::Dismiss => { WebDriverUserPromptAction::Dismiss => {
running_state.dismiss_active_dialogs(webview_id) running_state.dismiss_active_dialogs(webview_id)
}, },
WebDriverUserPromptAction::Ignore => {},
}; };
Ok(())
// Return success for AcceptAlert and DismissAlert commands.
Ok(alert_text)
} else { } else {
// Return error for AcceptAlert and DismissAlert commands
// if there is no active dialog.
Err(()) Err(())
}; };
@ -622,7 +636,8 @@ impl App {
running_state: &RunningAppState, running_state: &RunningAppState,
) { ) {
match msg { match msg {
WebDriverScriptCommand::ExecuteScript(_webview_id, response_sender) => { WebDriverScriptCommand::ExecuteScript(_webview_id, response_sender) |
WebDriverScriptCommand::ExecuteAsyncScript(_webview_id, response_sender) => {
// Give embedder a chance to interrupt the script command. // Give embedder a chance to interrupt the script command.
// Webdriver only handles 1 script command at a time, so we can // Webdriver only handles 1 script command at a time, so we can
// safely set a new interrupt sender and remove the previous one here. // safely set a new interrupt sender and remove the previous one here.

View file

@ -21,7 +21,7 @@ use servo::{
AllowOrDenyRequest, AuthenticationRequest, FilterPattern, FormControl, GamepadHapticEffectType, AllowOrDenyRequest, AuthenticationRequest, FilterPattern, FormControl, GamepadHapticEffectType,
KeyboardEvent, LoadStatus, PermissionRequest, Servo, ServoDelegate, ServoError, SimpleDialog, KeyboardEvent, LoadStatus, PermissionRequest, Servo, ServoDelegate, ServoError, SimpleDialog,
TraversalId, WebDriverCommandMsg, WebDriverJSResult, WebDriverJSValue, WebDriverLoadStatus, TraversalId, WebDriverCommandMsg, WebDriverJSResult, WebDriverJSValue, WebDriverLoadStatus,
WebView, WebViewBuilder, WebViewDelegate, WebDriverUserPrompt, WebView, WebViewBuilder, WebViewDelegate,
}; };
use url::Url; use url::Url;
@ -340,13 +340,23 @@ impl RunningAppState {
} }
pub(crate) fn webview_has_active_dialog(&self, webview_id: WebViewId) -> bool { pub(crate) fn webview_has_active_dialog(&self, webview_id: WebViewId) -> bool {
let inner = self.inner(); self.inner()
inner
.dialogs .dialogs
.get(&webview_id) .get(&webview_id)
.is_some_and(|dialogs| !dialogs.is_empty()) .is_some_and(|dialogs| !dialogs.is_empty())
} }
pub(crate) fn get_current_active_dialog_webdriver_type(
&self,
webview_id: WebViewId,
) -> Option<WebDriverUserPrompt> {
self.inner()
.dialogs
.get(&webview_id)
.and_then(|dialogs| dialogs.last())
.map(|dialog| dialog.webdriver_diaglog_type())
}
pub(crate) fn accept_active_dialogs(&self, webview_id: WebViewId) { pub(crate) fn accept_active_dialogs(&self, webview_id: WebViewId) {
if let Some(dialogs) = self.inner_mut().dialogs.get_mut(&webview_id) { if let Some(dialogs) = self.inner_mut().dialogs.get_mut(&webview_id) {
dialogs.drain(..).for_each(|dialog| { dialogs.drain(..).for_each(|dialog| {

View file

@ -14,7 +14,7 @@ use servo::servo_geometry::DeviceIndependentPixel;
use servo::{ use servo::{
AlertResponse, AuthenticationRequest, ColorPicker, ConfirmResponse, FilterPattern, AlertResponse, AuthenticationRequest, ColorPicker, ConfirmResponse, FilterPattern,
PermissionRequest, PromptResponse, RgbColor, SelectElement, SelectElementOption, PermissionRequest, PromptResponse, RgbColor, SelectElement, SelectElementOption,
SelectElementOptionOrOptgroup, SimpleDialog, SelectElementOptionOrOptgroup, SimpleDialog, WebDriverUserPrompt,
}; };
pub enum Dialog { pub enum Dialog {
@ -582,6 +582,16 @@ impl Dialog {
}, },
} }
} }
pub fn webdriver_diaglog_type(&self) -> WebDriverUserPrompt {
match self {
Dialog::File { .. } => WebDriverUserPrompt::File,
Dialog::SimpleDialog(SimpleDialog::Alert { .. }) => WebDriverUserPrompt::Alert,
Dialog::SimpleDialog(SimpleDialog::Confirm { .. }) => WebDriverUserPrompt::Confirm,
Dialog::SimpleDialog(SimpleDialog::Prompt { .. }) => WebDriverUserPrompt::Prompt,
_ => WebDriverUserPrompt::Default,
}
}
} }
fn make_dialog_label(message: &str, ui: &mut egui::Ui, input_text: Option<&mut String>) { fn make_dialog_label(message: &str, ui: &mut egui::Ui, input_text: Option<&mut String>) {

View file

@ -16,3 +16,6 @@
[test_accept_alert] [test_accept_alert]
expected: FAIL expected: FAIL
[test_unexpected_alert]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -53,3 +52,30 @@
[test_default[prompt-None\]] [test_default[prompt-None\]]
expected: FAIL expected: FAIL
[test_accept_and_notify[alert-None\]]
expected: FAIL
[test_accept_and_notify[confirm-True\]]
expected: FAIL
[test_accept_and_notify[prompt-\]]
expected: FAIL
[test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_dismiss_and_notify[confirm-False\]]
expected: FAIL
[test_dismiss_and_notify[prompt-None\]]
expected: FAIL
[test_ignore[alert\]]
expected: FAIL
[test_ignore[confirm\]]
expected: FAIL
[test_ignore[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert\]] [test_accept[capabilities0-alert\]]
expected: FAIL expected: FAIL
@ -59,15 +58,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[beforeunload-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert\]] [test_accept[capabilities0-alert\]]
expected: FAIL expected: FAIL
@ -60,14 +59,11 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]] [test_dismiss[alert\]]
expected: FAIL expected: FAIL
[test_default[beforeunload-None\]] [test_dismiss[confirm\]]
expected: FAIL expected: FAIL
[test_default[confirm-False\]] [test_dismiss[prompt\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,4 +1,5 @@
[delete.py] [delete.py]
expected: ERROR
[test_null_response_value] [test_null_response_value]
expected: FAIL expected: FAIL

View file

@ -16,3 +16,6 @@
[test_dismiss_alert] [test_dismiss_alert]
expected: FAIL expected: FAIL
[test_unexpected_alert]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -53,3 +52,48 @@
[test_default[prompt-None\]] [test_default[prompt-None\]]
expected: FAIL expected: FAIL
[test_accept[alert-None\]]
expected: FAIL
[test_accept[confirm-True\]]
expected: FAIL
[test_accept[prompt-\]]
expected: FAIL
[test_accept_and_notify[alert-None\]]
expected: FAIL
[test_accept_and_notify[confirm-True\]]
expected: FAIL
[test_accept_and_notify[prompt-\]]
expected: FAIL
[test_dismiss[alert-None\]]
expected: FAIL
[test_dismiss[confirm-False\]]
expected: FAIL
[test_dismiss[prompt-None\]]
expected: FAIL
[test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_dismiss_and_notify[confirm-False\]]
expected: FAIL
[test_dismiss_and_notify[prompt-None\]]
expected: FAIL
[test_ignore[alert\]]
expected: FAIL
[test_ignore[confirm\]]
expected: FAIL
[test_ignore[prompt\]]
expected: FAIL

View file

@ -1,4 +1,5 @@
[navigate.py] [navigate.py]
expected: TIMEOUT
[test_numbers_link] [test_numbers_link]
expected: FAIL expected: FAIL
@ -17,21 +18,9 @@
[test_link_from_toplevel_context_with_target[_parent\]] [test_link_from_toplevel_context_with_target[_parent\]]
expected: FAIL expected: FAIL
[test_link_from_nested_context_with_target[\]]
expected: FAIL
[test_link_from_nested_context_with_target[_blank\]] [test_link_from_nested_context_with_target[_blank\]]
expected: FAIL expected: FAIL
[test_link_from_nested_context_with_target[_parent\]]
expected: FAIL
[test_link_from_nested_context_with_target[_self\]]
expected: FAIL
[test_link_from_nested_context_with_target[_top\]]
expected: FAIL
[test_link_cross_origin] [test_link_cross_origin]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -60,14 +59,20 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[beforeunload-None\]] [test_default[beforeunload-None\]]
expected: FAIL expected: FAIL
[test_default[confirm-False\]] [test_accept[beforeunload-None\]]
expected: FAIL expected: FAIL
[test_default[prompt-None\]] [test_accept_and_notify[beforeunload-None\]]
expected: FAIL
[test_dismiss[beforeunload-None\]]
expected: FAIL
[test_dismiss_and_notify[beforeunload-None\]]
expected: FAIL
[test_ignore[beforeunload\]]
expected: FAIL expected: FAIL

View file

@ -1,6 +1,15 @@
[events.py] [events.py]
[test_form_control_send_text[input\]] [test_form_control_send_text[input\]]
expected: FAIL expected: ERROR
[test_form_control_send_text[textarea\]] [test_form_control_send_text[textarea\]]
expected: FAIL expected: ERROR
[test_file_upload]
expected: ERROR
[test_not_blurred[input\]]
expected: ERROR
[test_not_blurred[textarea\]]
expected: ERROR

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,22 +1,3 @@
[execute_async.py] [execute_async.py]
expected: TIMEOUT
[test_no_browsing_context] [test_no_browsing_context]
expected: FAIL expected: FAIL
[test_abort_by_user_prompt[alert\]]
expected: FAIL
[test_abort_by_user_prompt[confirm\]]
expected: FAIL
[test_abort_by_user_prompt[prompt\]]
expected: FAIL
[test_abort_by_user_prompt_twice[alert\]]
expected: FAIL
[test_abort_by_user_prompt_twice[confirm\]]
expected: FAIL
[test_abort_by_user_prompt_twice[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -60,14 +59,8 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]] [test_accept_and_notify[alert-None\]]
expected: FAIL expected: FAIL
[test_default[beforeunload-None\]] [test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -60,14 +59,8 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]] [test_accept_and_notify[alert-None\]]
expected: FAIL expected: FAIL
[test_default[beforeunload-None\]] [test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,3 +0,0 @@
[user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
expected: TIMEOUT

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -53,3 +52,48 @@
[test_default[prompt-None\]] [test_default[prompt-None\]]
expected: FAIL expected: FAIL
[test_accept[alert-None\]]
expected: FAIL
[test_accept[confirm-True\]]
expected: FAIL
[test_accept[prompt-\]]
expected: FAIL
[test_accept_and_notify[alert-None\]]
expected: FAIL
[test_accept_and_notify[confirm-True\]]
expected: FAIL
[test_accept_and_notify[prompt-\]]
expected: FAIL
[test_dismiss[alert-None\]]
expected: FAIL
[test_dismiss[confirm-False\]]
expected: FAIL
[test_dismiss[prompt-None\]]
expected: FAIL
[test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_dismiss_and_notify[confirm-False\]]
expected: FAIL
[test_dismiss_and_notify[prompt-None\]]
expected: FAIL
[test_ignore[alert\]]
expected: FAIL
[test_ignore[confirm\]]
expected: FAIL
[test_ignore[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,14 +1,4 @@
[get.py] [get.py]
disabled: https://github.com/servo/servo/issues/35734
[test_no_top_browsing_context]
expected: FAIL
[test_no_browsing_context]
expected: ERROR
[test_no_user_prompt]
expected: FAIL
[test_get_alert_text] [test_get_alert_text]
expected: FAIL expected: FAIL

View file

@ -1,2 +1,54 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734 [test_accept[alert-None\]]
expected: FAIL
[test_accept[confirm-True\]]
expected: FAIL
[test_accept[prompt-\]]
expected: FAIL
[test_accept_and_notify[alert-None\]]
expected: FAIL
[test_accept_and_notify[confirm-True\]]
expected: FAIL
[test_accept_and_notify[prompt-\]]
expected: FAIL
[test_dismiss[alert-None\]]
expected: FAIL
[test_dismiss[confirm-False\]]
expected: FAIL
[test_dismiss[prompt-None\]]
expected: FAIL
[test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_dismiss_and_notify[confirm-False\]]
expected: FAIL
[test_dismiss_and_notify[prompt-None\]]
expected: FAIL
[test_ignore[alert\]]
expected: FAIL
[test_ignore[confirm\]]
expected: FAIL
[test_ignore[prompt\]]
expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,2 +0,0 @@
[user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -45,11 +44,20 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]] [test_accept[alert-None\]]
expected: FAIL expected: FAIL
[test_default[confirm-False\]] [test_accept[confirm-True\]]
expected: FAIL expected: FAIL
[test_default[prompt-None\]] [test_accept[prompt-\]]
expected: FAIL
[test_dismiss[alert-None\]]
expected: FAIL
[test_dismiss[confirm-False\]]
expected: FAIL
[test_dismiss[prompt-None\]]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,5 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734 expected: TIMEOUT
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert\]] [test_accept[capabilities0-alert\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert\]]
expected: FAIL
[test_default[confirm\]]
expected: FAIL
[test_default[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert\]] [test_accept[capabilities0-alert\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert\]]
expected: FAIL
[test_default[confirm\]]
expected: FAIL
[test_default[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,2 +1,2 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734 expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734 expected: TIMEOUT
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -53,3 +52,48 @@
[test_default[prompt-None\]] [test_default[prompt-None\]]
expected: FAIL expected: FAIL
[test_accept[alert-None\]]
expected: FAIL
[test_accept[confirm-True\]]
expected: FAIL
[test_accept[prompt-\]]
expected: FAIL
[test_accept_and_notify[alert-None\]]
expected: FAIL
[test_accept_and_notify[confirm-True\]]
expected: FAIL
[test_accept_and_notify[prompt-\]]
expected: FAIL
[test_dismiss[alert-None\]]
expected: FAIL
[test_dismiss[confirm-False\]]
expected: FAIL
[test_dismiss[prompt-None\]]
expected: FAIL
[test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_dismiss_and_notify[confirm-False\]]
expected: FAIL
[test_dismiss_and_notify[prompt-None\]]
expected: FAIL
[test_ignore[alert\]]
expected: FAIL
[test_ignore[confirm\]]
expected: FAIL
[test_ignore[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -53,3 +52,48 @@
[test_default[prompt-None\]] [test_default[prompt-None\]]
expected: FAIL expected: FAIL
[test_accept[alert-None\]]
expected: FAIL
[test_accept[confirm-True\]]
expected: FAIL
[test_accept[prompt-\]]
expected: FAIL
[test_accept_and_notify[alert-None\]]
expected: FAIL
[test_accept_and_notify[confirm-True\]]
expected: FAIL
[test_accept_and_notify[prompt-\]]
expected: FAIL
[test_dismiss[alert-None\]]
expected: FAIL
[test_dismiss[confirm-False\]]
expected: FAIL
[test_dismiss[prompt-None\]]
expected: FAIL
[test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_dismiss_and_notify[confirm-False\]]
expected: FAIL
[test_dismiss_and_notify[prompt-None\]]
expected: FAIL
[test_ignore[alert\]]
expected: FAIL
[test_ignore[confirm\]]
expected: FAIL
[test_ignore[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert\]] [test_accept[capabilities0-alert\]]
expected: FAIL expected: FAIL
@ -60,14 +59,8 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]] [test_accept_and_notify[alert-None\]]
expected: FAIL expected: FAIL
[test_default[beforeunload-None\]] [test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL expected: FAIL

View file

@ -1,25 +0,0 @@
[unhandled_prompt_behavior.py]
expected: TIMEOUT
[test_unhandled_prompt_behavior_as_object_default[handler0-expected_capability0-True-True\]]
expected: FAIL
[test_unhandled_prompt_behavior_as_object_default[handler1-expected_capability1-True-False\]]
expected: FAIL
[test_unhandled_prompt_behavior_as_object_default[handler2-expected_capability2-False-True\]]
expected: FAIL
[test_beforeunload_prompts_always_automatically_accepted[accept\]]
expected: FAIL
[test_beforeunload_prompts_always_automatically_accepted[accept and notify\]]
expected: FAIL
[test_beforeunload_prompts_always_automatically_accepted[dismiss\]]
expected: FAIL
[test_beforeunload_prompts_always_automatically_accepted[dismiss and notify\]]
expected: FAIL
[test_beforeunload_prompts_always_automatically_accepted[ignore\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL

View file

@ -1,6 +1,6 @@
[pointer_contextmenu.py] [pointer_contextmenu.py]
[test_control_click[\\ue009-ctrlKey\]]
expected: FAIL
[test_control_click[\\ue051-ctrlKey\]] [test_control_click[\\ue051-ctrlKey\]]
expected: FAIL expected: FAIL
[test_release_control_click]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: ERROR expected: ERROR
@ -44,15 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: ERROR expected: ERROR
[test_default[alert-None\]]
expected: ERROR
[test_default[confirm-False\]]
expected: ERROR
[test_default[prompt-None\]]
expected: ERROR
[test_dismissed_beforeunload]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -53,3 +52,48 @@
[test_default[prompt-None\]] [test_default[prompt-None\]]
expected: FAIL expected: FAIL
[test_accept[alert-None\]]
expected: FAIL
[test_accept[confirm-True\]]
expected: FAIL
[test_accept[prompt-\]]
expected: FAIL
[test_accept_and_notify[alert-None\]]
expected: FAIL
[test_accept_and_notify[confirm-True\]]
expected: FAIL
[test_accept_and_notify[prompt-\]]
expected: FAIL
[test_dismiss[alert-None\]]
expected: FAIL
[test_dismiss[confirm-False\]]
expected: FAIL
[test_dismiss[prompt-None\]]
expected: FAIL
[test_dismiss_and_notify[alert-None\]]
expected: FAIL
[test_dismiss_and_notify[confirm-False\]]
expected: FAIL
[test_dismiss_and_notify[prompt-None\]]
expected: FAIL
[test_ignore[alert\]]
expected: FAIL
[test_ignore[confirm\]]
expected: FAIL
[test_ignore[prompt\]]
expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert\]] [test_accept[capabilities0-alert\]]
expected: FAIL expected: FAIL
@ -60,14 +59,38 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[beforeunload-None\]] [test_default[beforeunload-None\]]
expected: FAIL expected: FAIL
[test_default[confirm-False\]] [test_accept[alert\]]
expected: FAIL expected: FAIL
[test_default[prompt-None\]] [test_accept[beforeunload\]]
expected: FAIL
[test_accept[confirm\]]
expected: FAIL
[test_accept[prompt\]]
expected: FAIL
[test_accept_and_notify[beforeunload-None\]]
expected: FAIL
[test_dismiss[alert\]]
expected: FAIL
[test_dismiss[beforeunload\]]
expected: FAIL
[test_dismiss[confirm\]]
expected: FAIL
[test_dismiss[prompt\]]
expected: FAIL
[test_dismiss_and_notify[beforeunload-None\]]
expected: FAIL
[test_ignore[beforeunload\]]
expected: FAIL expected: FAIL

View file

@ -1,3 +1,51 @@
[send.py] [send.py]
disabled: https://github.com/servo/servo/issues/35734 [test_null_response_value]
expected: TIMEOUT expected: ERROR
[test_invalid_input[None\]]
expected: ERROR
[test_invalid_input[text1\]]
expected: ERROR
[test_invalid_input[text2\]]
expected: ERROR
[test_invalid_input[42\]]
expected: ERROR
[test_no_top_browsing_context]
expected: FAIL
[test_no_browsing_context]
expected: FAIL
[test_no_user_prompt]
expected: FAIL
[test_alert_element_not_interactable[alert\]]
expected: FAIL
[test_alert_element_not_interactable[confirm\]]
expected: FAIL
[test_chained_alert_element_not_interactable[alert\]]
expected: FAIL
[test_chained_alert_element_not_interactable[confirm\]]
expected: FAIL
[test_send_alert_text[\]]
expected: ERROR
[test_send_alert_text[Federer\]]
expected: ERROR
[test_send_alert_text[ Fed erer \]]
expected: FAIL
[test_send_alert_text[Fed\\terer\]]
expected: ERROR
[test_unexpected_alert]
expected: FAIL

View file

@ -1,2 +0,0 @@
[user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734

View file

@ -5,27 +5,9 @@
[test_restore_from_maximized] [test_restore_from_maximized]
expected: FAIL expected: FAIL
[test_x_y_floats]
expected: FAIL
[test_set_to_available_size]
expected: FAIL
[test_set_smaller_than_minimum_browser_size] [test_set_smaller_than_minimum_browser_size]
expected: FAIL expected: FAIL
[test_x_y]
expected: FAIL
[test_x_as_current]
expected: FAIL
[test_y_as_current]
expected: FAIL
[test_negative_x_y]
expected: FAIL
[test_no_change[rect12\]] [test_no_change[rect12\]]
expected: FAIL expected: FAIL
@ -43,21 +25,3 @@
[test_no_change[rect19\]] [test_no_change[rect19\]]
expected: FAIL expected: FAIL
[test_partial_input[rect2\]]
expected: FAIL
[test_partial_input[rect3\]]
expected: FAIL
[test_partial_input[rect4\]]
expected: FAIL
[test_partial_input[rect5\]]
expected: FAIL
[test_partial_input[rect6\]]
expected: FAIL
[test_partial_input[rect7\]]
expected: FAIL

View file

@ -1,2 +0,0 @@
[user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734

View file

@ -1,5 +1,5 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734 expected: TIMEOUT
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL

View file

@ -1,5 +1,4 @@
[user_prompts.py] [user_prompts.py]
disabled: https://github.com/servo/servo/issues/35734
[test_accept[capabilities0-alert-None\]] [test_accept[capabilities0-alert-None\]]
expected: FAIL expected: FAIL
@ -44,12 +43,3 @@
[test_ignore[capabilities0-prompt\]] [test_ignore[capabilities0-prompt\]]
expected: FAIL expected: FAIL
[test_default[alert-None\]]
expected: FAIL
[test_default[confirm-False\]]
expected: FAIL
[test_default[prompt-None\]]
expected: FAIL