mirror of
https://github.com/servo/servo.git
synced 2025-09-27 23:30:08 +01:00
webdriver: Refactor webdriver session and improve window handles (#38745)
This PR contains 2 parts: 1. Refactor webdriver session. 2. Improve webdriver window handles: - Webdriver always get window handles from script thread by default. - If script thread is blocked by user prompt, embedder stores the window handle before user prompt appears, then webdriver can get window handle from embedder. Testing: Clear timeout cause by user prompt blocking script thread: https://github.com/longvatrong111/servo/actions/runs/17033900026 --------- Signed-off-by: batu_hoang <hoang.binh.trong@huawei.com> Signed-off-by: batu_hoang <longvatrong111@gmail.com> Co-authored-by: Euclid Ye <euclid.ye@huawei.com>
This commit is contained in:
parent
b18a65ed70
commit
bce9f06cf8
18 changed files with 372 additions and 369 deletions
|
@ -178,7 +178,7 @@ impl Handler {
|
|||
pub(crate) fn handle_dismiss_alert(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
// Step 1. 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(self.session()?.webview_id)?;
|
||||
self.verify_top_level_browsing_context_is_open(self.webview_id()?)?;
|
||||
|
||||
// Step 3. Dismiss the current user prompt.
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
|
@ -203,7 +203,7 @@ impl Handler {
|
|||
pub(crate) fn handle_accept_alert(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
// Step 1. 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(self.session()?.webview_id)?;
|
||||
self.verify_top_level_browsing_context_is_open(self.webview_id()?)?;
|
||||
|
||||
// Step 3. Accept the current user prompt.
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
|
@ -228,7 +228,7 @@ impl Handler {
|
|||
pub(crate) fn handle_get_alert_text(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
// Step 1. 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(self.session()?.webview_id)?;
|
||||
self.verify_top_level_browsing_context_is_open(self.webview_id()?)?;
|
||||
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
self.send_message_to_embedder(WebDriverCommandMsg::GetAlertText(
|
||||
|
@ -261,7 +261,7 @@ impl Handler {
|
|||
&self,
|
||||
text: String,
|
||||
) -> WebDriverResult<WebDriverResponse> {
|
||||
let webview_id = self.session()?.webview_id;
|
||||
let webview_id = self.webview_id()?;
|
||||
|
||||
// Step 3. If session's current top-level browsing context is no longer open,
|
||||
// return error with error code no such window.
|
||||
|
@ -321,7 +321,7 @@ impl Handler {
|
|||
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);
|
||||
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();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue