aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock20
-rw-r--r--components/constellation/constellation.rs2
-rw-r--r--components/layout/flexbox/layout.rs25
-rw-r--r--components/layout/flow/inline/line.rs2
-rw-r--r--components/layout/flow/inline/mod.rs4
-rw-r--r--components/layout/flow/mod.rs5
-rw-r--r--components/layout/flow/root.rs3
-rw-r--r--components/layout/formatting_contexts.rs5
-rw-r--r--components/layout/positioned.rs339
-rw-r--r--components/layout/style_ext.rs14
-rw-r--r--components/layout/table/layout.rs47
-rw-r--r--components/layout/taffy/layout.rs72
-rw-r--r--components/layout/taffy/mod.rs5
-rw-r--r--components/script/canvas_context.rs4
-rw-r--r--components/script/dom/gpucanvascontext.rs1
-rw-r--r--components/script/dom/window.rs8
-rw-r--r--components/servo/Cargo.toml9
-rw-r--r--components/servo/tests/common/mod.rs114
-rw-r--r--components/servo/tests/servo.rs24
-rw-r--r--components/servo/tests/webview.rs49
-rw-r--r--components/webdriver_server/actions.rs7
-rw-r--r--components/webdriver_server/capabilities.rs14
-rw-r--r--components/webdriver_server/lib.rs88
-rw-r--r--python/wpt/run.py8
-rw-r--r--tests/wpt/include.ini22
-rw-r--r--tests/wpt/meta/MANIFEST.json46
-rw-r--r--tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini3
-rw-r--r--tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini2
-rw-r--r--tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini1
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini3
-rw-r--r--tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini1
-rw-r--r--tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini27
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/add_cookie/add.py.ini42
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/add_cookie/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/back/back.py.ini19
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/back/user_prompts.py.ini73
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/close_window/close.py.ini19
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/close_window/user_prompts.py.ini73
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/delete.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/delete_cookie/delete.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/delete_cookie/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/delete_session/delete.py.ini7
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini115
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_clear/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini33
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini33
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/navigate.py.ini49
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/scroll_into_view.py.ini30
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/select.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_click/user_prompts.py.ini73
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/content_editable.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/form_controls.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/scroll_into_view.py.ini27
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/element_send_keys/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/collections.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/node.py.ini33
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/user_prompts.py.ini73
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_async_script/window.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini88
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/collections.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/node.py.ini33
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/promise.py.ini27
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/user_prompts.py.ini73
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/execute_script/window.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini34
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini52
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element_from_element/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini157
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini76
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini82
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini157
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/forward/forward.py.ini34
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/forward/user_prompts.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/fullscreen_window/from_minimized_window.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/fullscreen_window/fullscreen.py.ini18
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/fullscreen_window/stress.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/fullscreen_window/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_active_element/get.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_active_element/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_alert_text/get.py.ini22
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_computed_label/get.py.ini42
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_computed_label/user_prompts.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_computed_role/user_prompts.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_current_url/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini94
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_attribute/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_css_value/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini94
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_property/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_rect/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini33
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini42
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_element_text/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_named_cookie/get.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_named_cookie/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_page_source/source.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_page_source/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_title/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_window_handle/get.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_window_handle/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_window_handles/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_window_rect/get.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/get_window_rect/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/idlharness.window.js.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/interface/interface.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_enabled/user_prompts.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/is_element_selected/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/maximize_window/from_minimized_window.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/maximize_window/maximize.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/maximize_window/stress.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/maximize_window/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/minimize_window/minimize.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/minimize_window/stress.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/minimize_window/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/navigate_to/navigate.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/navigate_to/user_prompts.py.ini73
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_session/create_alwaysMatch.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_session/create_firstMatch.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_session/response.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_session/websocket_url.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/new_window/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/invalid.py.ini91
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini24
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini273
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/key_tentative.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/none.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/perform.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini64
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse_drag.py.ini63
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini27
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pause_dblclick.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini33
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini42
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_tripleclick.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/sequence.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/user_prompts.py.ini58
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/perform_actions/wheel.py.ini39
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/permissions/set.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/print/background.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/print/orientation.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/print/printcmd.py.ini57
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/print/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/refresh/refresh.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/refresh/user_prompts.py.ini73
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/release_actions/release.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/release_actions/sequence.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/send_alert_text/send.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/set_timeouts/set.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/set_timeouts/user_prompts.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/set_window_rect/from_minimized_window.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini39
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/set_window_rect/user_prompts.py.ini2
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini21
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_number.py.ini15
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_webelement.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini12
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini9
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/screenshot.py.ini30
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini6
-rw-r--r--tests/wpt/meta/webdriver/tests/classic/take_screenshot/user_prompts.py.ini55
-rw-r--r--tests/wpt/meta/webdriver/tests/interop/beforeunload_prompt.py.ini60
-rw-r--r--tests/wpt/meta/webdriver/tests/interop/frames.py.ini3
-rw-r--r--tests/wpt/meta/webdriver/tests/interop/shared_id_node.py.ini18
-rw-r--r--tests/wpt/meta/webdriver/tests/interop/shared_id_window.py.ini15
-rw-r--r--tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini3
-rw-r--r--tests/wpt/tests/css/css-grid/abspos/abspos-in-flexbox-in-grid-crash.html12
-rw-r--r--tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-002.html29
-rw-r--r--tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-003.html29
-rw-r--r--tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-004.html29
213 files changed, 6353 insertions, 487 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 2f8ab0361fa..cecdada6176 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -844,9 +844,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.20"
+version = "1.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a"
+checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0"
dependencies = [
"jobserver",
"libc",
@@ -1768,9 +1768,9 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
[[package]]
name = "dpi"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53"
+checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
[[package]]
name = "dtoa"
@@ -4025,9 +4025,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "jiff"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a064218214dc6a10fbae5ec5fa888d80c45d611aba169222fc272072bf7aef6"
+checksum = "27e77966151130221b079bcec80f1f34a9e414fa489d99152a201c07fd2182bc"
dependencies = [
"jiff-static",
"log",
@@ -4038,9 +4038,9 @@ dependencies = [
[[package]]
name = "jiff-static"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "199b7932d97e325aff3a7030e141eafe7f2c6268e1d1b24859b753a627f45254"
+checksum = "97265751f8a9a4228476f2fc17874a9e7e70e96b893368e42619880fe143b48a"
dependencies = [
"proc-macro2",
"quote",
@@ -9195,9 +9195,9 @@ dependencies = [
[[package]]
name = "winnow"
-version = "0.7.8"
+version = "0.7.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e27d6ad3dac991091e4d35de9ba2d2d00647c5d0fc26c5496dee55984ae111b"
+checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3"
dependencies = [
"memchr",
]
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs
index ad89c435717..f3a15d7708d 100644
--- a/components/constellation/constellation.rs
+++ b/components/constellation/constellation.rs
@@ -371,6 +371,7 @@ pub struct Constellation<STF, SWF> {
mem_profiler_chan: mem::ProfilerChan,
/// A single WebRender document the constellation operates on.
+ #[cfg(feature = "webgpu")]
webrender_document: DocumentId,
/// Webrender related objects required by WebGPU threads
@@ -715,6 +716,7 @@ where
phantom: PhantomData,
webdriver: WebDriverData::new(),
document_states: HashMap::new(),
+ #[cfg(feature = "webgpu")]
webrender_document: state.webrender_document,
#[cfg(feature = "webgpu")]
webrender_wgpu,
diff --git a/components/layout/flexbox/layout.rs b/components/layout/flexbox/layout.rs
index a5540123681..e69b792e272 100644
--- a/components/layout/flexbox/layout.rs
+++ b/components/layout/flexbox/layout.rs
@@ -49,7 +49,6 @@ use crate::{
struct FlexContext<'a> {
config: FlexContainerConfig,
layout_context: &'a LayoutContext<'a>,
- positioning_context: &'a mut PositioningContext,
containing_block: &'a ContainingBlock<'a>, // For items
container_inner_size_constraint: FlexRelativeVec2<SizeConstraint>,
}
@@ -657,7 +656,6 @@ impl FlexContainer {
let mut flex_context = FlexContext {
config: self.config.clone(),
layout_context,
- positioning_context,
containing_block,
// https://drafts.csswg.org/css-flexbox/#definite-sizes
container_inner_size_constraint: self.config.flex_axis.vec2_to_flex_relative(
@@ -1775,16 +1773,7 @@ impl FlexItem<'_> {
) -> Option<FlexItemLayoutResult> {
let containing_block = flex_context.containing_block;
let independent_formatting_context = &self.box_.independent_formatting_context;
- let mut positioning_context = independent_formatting_context
- .new_positioning_context()
- .unwrap_or_else(|| {
- PositioningContext::new_for_subtree(
- flex_context
- .positioning_context
- .collects_for_nearest_positioned_ancestor(),
- )
- });
-
+ let mut positioning_context = PositioningContext::default();
let item_writing_mode = independent_formatting_context.style().writing_mode;
let item_is_horizontal = item_writing_mode.is_horizontal();
let flex_axis = flex_context.config.flex_axis;
@@ -2617,17 +2606,7 @@ impl FlexItemBox {
cross_size_stretches_to_container_size: bool,
intrinsic_sizing_mode: IntrinsicSizingMode,
) -> Au {
- let mut positioning_context = self
- .independent_formatting_context
- .new_positioning_context()
- .unwrap_or_else(|| {
- PositioningContext::new_for_subtree(
- flex_context
- .positioning_context
- .collects_for_nearest_positioned_ancestor(),
- )
- });
-
+ let mut positioning_context = PositioningContext::default();
let style = self.independent_formatting_context.style();
match &self.independent_formatting_context.contents {
IndependentFormattingContextContents::Replaced(replaced) => {
diff --git a/components/layout/flow/inline/line.rs b/components/layout/flow/inline/line.rs
index e65eaed2367..80bab1080ed 100644
--- a/components/layout/flow/inline/line.rs
+++ b/components/layout/flow/inline/line.rs
@@ -331,7 +331,7 @@ impl LineItemLayout<'_, '_> {
self.calculate_inline_box_block_start(inline_box_state, space_above_baseline);
let positioning_context_or_start_offset_in_parent =
- match inline_box.base.new_positioning_context() {
+ match PositioningContext::new_for_layout_box_base(&inline_box.base) {
Some(positioning_context) => Either::Left(positioning_context),
None => Either::Right(self.current_positioning_context_mut().len()),
};
diff --git a/components/layout/flow/inline/mod.rs b/components/layout/flow/inline/mod.rs
index 25fbaa324b1..2023f4e7174 100644
--- a/components/layout/flow/inline/mod.rs
+++ b/components/layout/flow/inline/mod.rs
@@ -2004,9 +2004,7 @@ impl IndependentFormattingContext {
bidi_level: Level,
) {
// We need to know the inline size of the atomic before deciding whether to do the line break.
- let mut child_positioning_context = self
- .new_positioning_context()
- .unwrap_or_else(|| PositioningContext::new_for_subtree(true));
+ let mut child_positioning_context = PositioningContext::default();
let IndependentFloatOrAtomicLayoutResult {
mut fragment,
baselines,
diff --git a/components/layout/flow/mod.rs b/components/layout/flow/mod.rs
index 983282dc389..772b150ae1c 100644
--- a/components/layout/flow/mod.rs
+++ b/components/layout/flow/mod.rs
@@ -689,16 +689,13 @@ fn layout_block_level_children_in_parallel(
placement_state: &mut PlacementState,
ignore_block_margins_for_stretch: LogicalSides1D<bool>,
) -> Vec<Fragment> {
- let collects_for_nearest_positioned_ancestor =
- positioning_context.collects_for_nearest_positioned_ancestor();
let mut layout_results: Vec<(Fragment, PositioningContext)> =
Vec::with_capacity(child_boxes.len());
child_boxes
.par_iter()
.map(|child_box| {
- let mut child_positioning_context =
- PositioningContext::new_for_subtree(collects_for_nearest_positioned_ancestor);
+ let mut child_positioning_context = PositioningContext::default();
let fragment = child_box.borrow().layout(
layout_context,
&mut child_positioning_context,
diff --git a/components/layout/flow/root.rs b/components/layout/flow/root.rs
index c6498eeed63..bb9ff1d337a 100644
--- a/components/layout/flow/root.rs
+++ b/components/layout/flow/root.rs
@@ -385,8 +385,7 @@ impl BoxTree {
style,
};
- let mut positioning_context =
- PositioningContext::new_for_containing_block_for_all_descendants();
+ let mut positioning_context = PositioningContext::default();
let independent_layout = self.root.layout(
layout_context,
&mut positioning_context,
diff --git a/components/layout/formatting_contexts.rs b/components/layout/formatting_contexts.rs
index 4661c44592c..4982d0dae1a 100644
--- a/components/layout/formatting_contexts.rs
+++ b/components/layout/formatting_contexts.rs
@@ -295,10 +295,7 @@ impl IndependentNonReplacedContents {
);
}
- let mut child_positioning_context = PositioningContext::new_for_subtree(
- positioning_context.collects_for_nearest_positioned_ancestor(),
- );
-
+ let mut child_positioning_context = PositioningContext::default();
let result = self.layout_without_caching(
layout_context,
&mut child_positioning_context,
diff --git a/components/layout/positioned.rs b/components/layout/positioned.rs
index 6bfe2af87ef..ff361396fa3 100644
--- a/components/layout/positioned.rs
+++ b/components/layout/positioned.rs
@@ -43,16 +43,6 @@ pub(crate) struct AbsolutelyPositionedBox {
}
#[derive(Clone, MallocSizeOf)]
-pub(crate) struct PositioningContext {
- for_nearest_positioned_ancestor: Option<Vec<HoistedAbsolutelyPositionedBox>>,
-
- // For nearest `containing block for all descendants` as defined by the CSS transforms
- // spec.
- // https://www.w3.org/TR/css-transforms-1/#containing-block-for-all-descendants
- for_nearest_containing_block_for_all_descendants: Vec<HoistedAbsolutelyPositionedBox>,
-}
-
-#[derive(Clone, MallocSizeOf)]
pub(crate) struct HoistedAbsolutelyPositionedBox {
absolutely_positioned_box: ArcRefCell<AbsolutelyPositionedBox>,
@@ -104,55 +94,26 @@ impl AbsolutelyPositionedBox {
}
}
-impl IndependentFormattingContext {
- #[inline]
- pub(crate) fn new_positioning_context(&self) -> Option<PositioningContext> {
- self.base.new_positioning_context()
- }
-}
-
-impl LayoutBoxBase {
- #[inline]
- pub(crate) fn new_positioning_context(&self) -> Option<PositioningContext> {
- PositioningContext::new_for_style(&self.style, &self.base_fragment_info.flags)
- }
+#[derive(Clone, Default, MallocSizeOf)]
+pub(crate) struct PositioningContext {
+ absolutes: Vec<HoistedAbsolutelyPositionedBox>,
}
impl PositioningContext {
- pub(crate) fn new_for_containing_block_for_all_descendants() -> Self {
- Self {
- for_nearest_positioned_ancestor: None,
- for_nearest_containing_block_for_all_descendants: Vec::new(),
- }
- }
-
- /// Create a [PositioningContext] to use for laying out a subtree. The idea is that
- /// when subtree layout is finished, the newly hoisted boxes can be processed
- /// (normally adjusting their static insets) and then appended to the parent
- /// [PositioningContext].
- pub(crate) fn new_for_subtree(collects_for_nearest_positioned_ancestor: bool) -> Self {
- Self {
- for_nearest_positioned_ancestor: if collects_for_nearest_positioned_ancestor {
- Some(Vec::new())
- } else {
- None
- },
- for_nearest_containing_block_for_all_descendants: Vec::new(),
- }
- }
-
- pub(crate) fn collects_for_nearest_positioned_ancestor(&self) -> bool {
- self.for_nearest_positioned_ancestor.is_some()
+ #[inline]
+ pub(crate) fn new_for_layout_box_base(layout_box_base: &LayoutBoxBase) -> Option<Self> {
+ Self::new_for_style_and_fragment_flags(
+ &layout_box_base.style,
+ &layout_box_base.base_fragment_info.flags,
+ )
}
- fn new_for_style(style: &ComputedValues, flags: &FragmentFlags) -> Option<Self> {
- if style.establishes_containing_block_for_all_descendants(*flags) {
- Some(Self::new_for_containing_block_for_all_descendants())
- } else if style.establishes_containing_block_for_absolute_descendants(*flags) {
- Some(Self {
- for_nearest_positioned_ancestor: Some(Vec::new()),
- for_nearest_containing_block_for_all_descendants: Vec::new(),
- })
+ fn new_for_style_and_fragment_flags(
+ style: &ComputedValues,
+ flags: &FragmentFlags,
+ ) -> Option<Self> {
+ if style.establishes_containing_block_for_absolute_descendants(*flags) {
+ Some(Self::default())
} else {
None
}
@@ -195,20 +156,9 @@ impl PositioningContext {
offset: &PhysicalVec<Au>,
index: PositioningContextLength,
) {
- if let Some(hoisted_boxes) = self.for_nearest_positioned_ancestor.as_mut() {
- hoisted_boxes
- .iter_mut()
- .skip(index.for_nearest_positioned_ancestor)
- .for_each(|hoisted_fragment| {
- hoisted_fragment
- .fragment
- .borrow_mut()
- .adjust_offsets(offset)
- })
- }
- self.for_nearest_containing_block_for_all_descendants
+ self.absolutes
.iter_mut()
- .skip(index.for_nearest_containing_block_for_all_descendants)
+ .skip(index.0)
.for_each(|hoisted_fragment| {
hoisted_fragment
.fragment
@@ -227,19 +177,23 @@ impl PositioningContext {
base: &LayoutBoxBase,
fragment_layout_fn: impl FnOnce(&mut Self) -> BoxFragment,
) -> BoxFragment {
- // Try to create a context, but if one isn't necessary, simply create the fragment
- // using the given closure and the current `PositioningContext`.
- let mut new_context = match base.new_positioning_context() {
- Some(new_context) => new_context,
- None => return fragment_layout_fn(self),
- };
+ // If a new `PositioningContext` isn't necessary, simply create the fragment using
+ // the given closure and the current `PositioningContext`.
+ let establishes_containing_block_for_absolutes = base
+ .style
+ .establishes_containing_block_for_absolute_descendants(base.base_fragment_info.flags);
+ if !establishes_containing_block_for_absolutes {
+ return fragment_layout_fn(self);
+ }
+ let mut new_context = PositioningContext::default();
let mut new_fragment = fragment_layout_fn(&mut new_context);
- new_context.layout_collected_children(layout_context, &mut new_fragment);
- // If the new context has any hoisted boxes for the nearest containing block for
- // pass them up the tree.
+ // Lay out all of the absolutely positioned children for this fragment, and, if it
+ // isn't a containing block for fixed elements, then pass those up to the parent.
+ new_context.layout_collected_children(layout_context, &mut new_fragment);
self.append(new_context);
+
if base.style.clone_position() == Position::Relative {
new_fragment.content_rect.origin += relative_adjustement(&base.style, containing_block)
.to_physical_vector(containing_block.style.writing_mode)
@@ -248,13 +202,61 @@ impl PositioningContext {
new_fragment
}
+ fn take_boxes_for_fragment(
+ &mut self,
+ new_fragment: &BoxFragment,
+ boxes_to_layout_out: &mut Vec<HoistedAbsolutelyPositionedBox>,
+ boxes_to_continue_hoisting_out: &mut Vec<HoistedAbsolutelyPositionedBox>,
+ ) {
+ debug_assert!(
+ new_fragment
+ .style
+ .establishes_containing_block_for_absolute_descendants(new_fragment.base.flags)
+ );
+
+ if new_fragment
+ .style
+ .establishes_containing_block_for_all_descendants(new_fragment.base.flags)
+ {
+ boxes_to_layout_out.append(&mut self.absolutes);
+ return;
+ }
+
+ // TODO: This could potentially use `extract_if` when that is stabilized.
+ let (mut boxes_to_layout, mut boxes_to_continue_hoisting) = self
+ .absolutes
+ .drain(..)
+ .partition(|hoisted_box| hoisted_box.position() != Position::Fixed);
+ boxes_to_layout_out.append(&mut boxes_to_layout);
+ boxes_to_continue_hoisting_out.append(&mut boxes_to_continue_hoisting);
+ }
+
// Lay out the hoisted boxes collected into this `PositioningContext` and add them
// to the given `BoxFragment`.
- pub fn layout_collected_children(
+ pub(crate) fn layout_collected_children(
&mut self,
layout_context: &LayoutContext,
new_fragment: &mut BoxFragment,
) {
+ if self.absolutes.is_empty() {
+ return;
+ }
+
+ // Sometimes we create temporary PositioningContexts just to collect hoisted absolutes and
+ // then these are processed later. In that case and if this fragment doesn't establish a
+ // containing block for absolutes at all, we just do nothing. All hoisted fragments will
+ // later be passed up to a parent PositioningContext.
+ //
+ // Handling this case here, when the PositioningContext is completely ineffectual other than
+ // as a temporary container for hoisted boxes, means that callers can execute less conditional
+ // code.
+ if !new_fragment
+ .style
+ .establishes_containing_block_for_absolute_descendants(new_fragment.base.flags)
+ {
+ return;
+ }
+
let padding_rect = PhysicalRect::new(
// Ignore the content rect’s position in its own containing block:
PhysicalPoint::origin(),
@@ -268,83 +270,58 @@ impl PositioningContext {
style: &new_fragment.style,
};
- let take_hoisted_boxes_pending_layout =
- |context: &mut Self| match context.for_nearest_positioned_ancestor.as_mut() {
- Some(fragments) => mem::take(fragments),
- None => mem::take(&mut context.for_nearest_containing_block_for_all_descendants),
- };
+ let mut fixed_position_boxes_to_hoist = Vec::new();
+ let mut boxes_to_layout = Vec::new();
+ self.take_boxes_for_fragment(
+ new_fragment,
+ &mut boxes_to_layout,
+ &mut fixed_position_boxes_to_hoist,
+ );
- // Loop because it’s possible that we discover (the static position of)
- // more absolutely-positioned boxes while doing layout for others.
- let mut hoisted_boxes = take_hoisted_boxes_pending_layout(self);
- let mut laid_out_child_fragments = Vec::new();
- while !hoisted_boxes.is_empty() {
+ // Laying out a `position: absolute` child (which only establishes a containing block for
+ // `position: absolute` descendants) can result in more `position: fixed` descendants
+ // collecting in `self.absolutes`. We need to loop here in order to keep either laying them
+ // out or putting them into `fixed_position_boxes_to_hoist`. We know there aren't any more
+ // when `self.absolutes` is empty.
+ while !boxes_to_layout.is_empty() {
HoistedAbsolutelyPositionedBox::layout_many(
layout_context,
- &mut hoisted_boxes,
- &mut laid_out_child_fragments,
- &mut self.for_nearest_containing_block_for_all_descendants,
+ std::mem::take(&mut boxes_to_layout),
+ &mut new_fragment.children,
+ &mut self.absolutes,
&containing_block,
new_fragment.padding,
);
- hoisted_boxes = take_hoisted_boxes_pending_layout(self);
- }
- new_fragment.children.extend(laid_out_child_fragments);
- }
-
- pub(crate) fn push(&mut self, box_: HoistedAbsolutelyPositionedBox) {
- if let Some(nearest) = &mut self.for_nearest_positioned_ancestor {
- let position = box_
- .absolutely_positioned_box
- .borrow()
- .context
- .style()
- .clone_position();
- match position {
- Position::Fixed => {}, // fall through
- Position::Absolute => return nearest.push(box_),
- Position::Static | Position::Relative | Position::Sticky => unreachable!(),
- }
+ self.take_boxes_for_fragment(
+ new_fragment,
+ &mut boxes_to_layout,
+ &mut fixed_position_boxes_to_hoist,
+ );
}
- self.for_nearest_containing_block_for_all_descendants
- .push(box_)
+
+ // We replace here instead of simply preserving these in `take_boxes_for_fragment`
+ // so that we don't have to continually re-iterate over them when laying out in the
+ // loop above.
+ self.absolutes = fixed_position_boxes_to_hoist;
}
- pub(crate) fn is_empty(&self) -> bool {
- self.for_nearest_containing_block_for_all_descendants
- .is_empty() &&
- self.for_nearest_positioned_ancestor
- .as_ref()
- .is_none_or(|vector| vector.is_empty())
+ pub(crate) fn push(&mut self, hoisted_box: HoistedAbsolutelyPositionedBox) {
+ debug_assert!(matches!(
+ hoisted_box.position(),
+ Position::Absolute | Position::Fixed
+ ));
+ self.absolutes.push(hoisted_box);
}
- pub(crate) fn append(&mut self, other: Self) {
- if other.is_empty() {
+ pub(crate) fn append(&mut self, mut other: Self) {
+ if other.absolutes.is_empty() {
return;
}
-
- vec_append_owned(
- &mut self.for_nearest_containing_block_for_all_descendants,
- other.for_nearest_containing_block_for_all_descendants,
- );
-
- match (
- self.for_nearest_positioned_ancestor.as_mut(),
- other.for_nearest_positioned_ancestor,
- ) {
- (Some(us), Some(them)) => vec_append_owned(us, them),
- (None, Some(them)) => {
- // This is the case where we have laid out the absolute children in a containing
- // block for absolutes and we then are passing up the fixed-position descendants
- // to the containing block for all descendants.
- vec_append_owned(
- &mut self.for_nearest_containing_block_for_all_descendants,
- them,
- );
- },
- (None, None) => {},
- _ => unreachable!(),
+ if self.absolutes.is_empty() {
+ self.absolutes = other.absolutes;
+ } else {
+ self.absolutes.append(&mut other.absolutes)
}
}
@@ -354,19 +331,16 @@ impl PositioningContext {
initial_containing_block: &DefiniteContainingBlock,
fragments: &mut Vec<Fragment>,
) {
- debug_assert!(self.for_nearest_positioned_ancestor.is_none());
-
- // Loop because it’s possible that we discover (the static position of)
- // more absolutely-positioned boxes while doing layout for others.
- while !self
- .for_nearest_containing_block_for_all_descendants
- .is_empty()
- {
+ // Laying out a `position: absolute` child (which only establishes a containing block for
+ // `position: absolute` descendants) can result in more `position: fixed` descendants
+ // collecting in `self.absolutes`. We need to loop here in order to keep laying them out. We
+ // know there aren't any more when `self.absolutes` is empty.
+ while !self.absolutes.is_empty() {
HoistedAbsolutelyPositionedBox::layout_many(
layout_context,
- &mut mem::take(&mut self.for_nearest_containing_block_for_all_descendants),
+ mem::take(&mut self.absolutes),
fragments,
- &mut self.for_nearest_containing_block_for_all_descendants,
+ &mut self.absolutes,
initial_containing_block,
Default::default(),
)
@@ -375,58 +349,46 @@ impl PositioningContext {
/// Get the length of this [PositioningContext].
pub(crate) fn len(&self) -> PositioningContextLength {
- PositioningContextLength {
- for_nearest_positioned_ancestor: self
- .for_nearest_positioned_ancestor
- .as_ref()
- .map_or(0, |vec| vec.len()),
- for_nearest_containing_block_for_all_descendants: self
- .for_nearest_containing_block_for_all_descendants
- .len(),
- }
+ PositioningContextLength(self.absolutes.len())
}
/// Truncate this [PositioningContext] to the given [PositioningContextLength]. This
/// is useful for "unhoisting" boxes in this context and returning it to the state at
/// the time that [`PositioningContext::len()`] was called.
pub(crate) fn truncate(&mut self, length: &PositioningContextLength) {
- if let Some(vec) = self.for_nearest_positioned_ancestor.as_mut() {
- vec.truncate(length.for_nearest_positioned_ancestor);
- }
- self.for_nearest_containing_block_for_all_descendants
- .truncate(length.for_nearest_containing_block_for_all_descendants);
+ self.absolutes.truncate(length.0)
}
}
/// A data structure which stores the size of a positioning context.
#[derive(Clone, Copy, Debug, PartialEq)]
-pub(crate) struct PositioningContextLength {
- /// The number of boxes that will be hoisted the the nearest positioned ancestor for
- /// layout.
- for_nearest_positioned_ancestor: usize,
- /// The number of boxes that will be hoisted the the nearest ancestor which
- /// establishes a containing block for all descendants for layout.
- for_nearest_containing_block_for_all_descendants: usize,
-}
+pub(crate) struct PositioningContextLength(usize);
impl Zero for PositioningContextLength {
fn zero() -> Self {
- PositioningContextLength {
- for_nearest_positioned_ancestor: 0,
- for_nearest_containing_block_for_all_descendants: 0,
- }
+ Self(0)
}
fn is_zero(&self) -> bool {
- self.for_nearest_positioned_ancestor == 0 &&
- self.for_nearest_containing_block_for_all_descendants == 0
+ self.0.is_zero()
}
}
impl HoistedAbsolutelyPositionedBox {
+ fn position(&self) -> Position {
+ let position = self
+ .absolutely_positioned_box
+ .borrow()
+ .context
+ .style()
+ .clone_position();
+ assert!(position == Position::Fixed || position == Position::Absolute);
+ position
+ }
+
pub(crate) fn layout_many(
layout_context: &LayoutContext,
- boxes: &mut [Self],
+ mut boxes: Vec<Self>,
fragments: &mut Vec<Fragment>,
for_nearest_containing_block_for_all_descendants: &mut Vec<HoistedAbsolutelyPositionedBox>,
containing_block: &DefiniteContainingBlock,
@@ -473,7 +435,7 @@ impl HoistedAbsolutelyPositionedBox {
pub(crate) fn layout(
&mut self,
layout_context: &LayoutContext,
- for_nearest_containing_block_for_all_descendants: &mut Vec<HoistedAbsolutelyPositionedBox>,
+ hoisted_absolutes_from_children: &mut Vec<HoistedAbsolutelyPositionedBox>,
containing_block: &DefiniteContainingBlock,
containing_block_padding: PhysicalSides<Au>,
) -> Fragment {
@@ -596,7 +558,7 @@ impl HoistedAbsolutelyPositionedBox {
.sizes
}));
- let mut positioning_context = context.new_positioning_context().unwrap();
+ let mut positioning_context = PositioningContext::default();
let mut new_fragment = {
let content_size: LogicalVec2<Au>;
let fragments;
@@ -709,6 +671,10 @@ impl HoistedAbsolutelyPositionedBox {
)
.with_specific_layout_info(specific_layout_info)
};
+
+ // This is an absolutely positioned element, which means it also establishes a
+ // containing block for absolutes. We lay out any absolutely positioned children
+ // here and pass the rest to `hoisted_absolutes_from_children.`
positioning_context.layout_collected_children(layout_context, &mut new_fragment);
// Any hoisted boxes that remain in this positioning context are going to be hoisted
@@ -721,8 +687,7 @@ impl HoistedAbsolutelyPositionedBox {
PositioningContextLength::zero(),
);
- for_nearest_containing_block_for_all_descendants
- .extend(positioning_context.for_nearest_containing_block_for_all_descendants);
+ hoisted_absolutes_from_children.extend(positioning_context.absolutes);
let fragment = Fragment::Box(ArcRefCell::new(new_fragment));
context.base.set_fragment(fragment.clone());
@@ -1024,14 +989,6 @@ impl AbsoluteAxisSolver<'_> {
}
}
-fn vec_append_owned<T>(a: &mut Vec<T>, mut b: Vec<T>) {
- if a.is_empty() {
- *a = b
- } else {
- a.append(&mut b)
- }
-}
-
/// <https://drafts.csswg.org/css2/visuren.html#relative-positioning>
pub(crate) fn relative_adjustement(
style: &ComputedValues,
diff --git a/components/layout/style_ext.rs b/components/layout/style_ext.rs
index 023db6b07f1..68a4481a2be 100644
--- a/components/layout/style_ext.rs
+++ b/components/layout/style_ext.rs
@@ -712,15 +712,19 @@ impl ComputedValuesExt for ComputedValues {
// From <https://www.w3.org/TR/css-transforms-1/#transform-rendering>
// > For elements whose layout is governed by the CSS box model, any value other than
// > `none` for the `transform` property results in the creation of a stacking context.
+ //
+ // From <https://www.w3.org/TR/css-transforms-2/#individual-transforms>
+ // > all other values […] create a stacking context and containing block for all
+ // > descendants, per usual for transforms.
+ //
+ // From <https://www.w3.org/TR/css-transforms-2/#perspective-property>
+ // > any value other than none establishes a stacking context.
+ //
// From <https://www.w3.org/TR/css-transforms-2/#transform-style-property>
// > A computed value of `preserve-3d` for `transform-style` on a transformable element
// > establishes both a stacking context and a containing block for all descendants.
- // From <https://www.w3.org/TR/css-transforms-2/#perspective-property>
- // > any value other than none establishes a stacking context.
- // TODO: handle individual transform properties (`translate`, `scale` and `rotate`).
- // <https://www.w3.org/TR/css-transforms-2/#individual-transforms>
if self.is_transformable(fragment_flags) &&
- (!self.get_box().transform.0.is_empty() ||
+ (self.has_transform_or_perspective_style() ||
self.get_box().transform_style == ComputedTransformStyle::Preserve3d ||
will_change_bits
.intersects(WillChangeBits::TRANSFORM | WillChangeBits::PERSPECTIVE))
diff --git a/components/layout/table/layout.rs b/components/layout/table/layout.rs
index 0cbe3e9ca76..2efe339837e 100644
--- a/components/layout/table/layout.rs
+++ b/components/layout/table/layout.rs
@@ -1068,7 +1068,6 @@ impl<'a> TableLayout<'a> {
&mut self,
layout_context: &LayoutContext,
containing_block_for_table: &ContainingBlock,
- parent_positioning_context: &mut PositioningContext,
) {
self.cells_laid_out = self
.table
@@ -1076,30 +1075,6 @@ impl<'a> TableLayout<'a> {
.par_iter()
.enumerate()
.map(|(row_index, row_slots)| {
- // When building the PositioningContext for this cell, we want it to have the same
- // configuration for whatever PositioningContext the contents are ultimately added to.
- let collect_for_nearest_positioned_ancestor = parent_positioning_context
- .collects_for_nearest_positioned_ancestor() ||
- self.table.rows.get(row_index).is_some_and(|row| {
- let row = row.borrow();
- let row_group_collects_for_nearest_positioned_ancestor =
- row.group_index.is_some_and(|group_index| {
- self.table.row_groups[group_index]
- .borrow()
- .base
- .style
- .establishes_containing_block_for_absolute_descendants(
- FragmentFlags::empty(),
- )
- });
- row_group_collects_for_nearest_positioned_ancestor ||
- row.base
- .style
- .establishes_containing_block_for_absolute_descendants(
- FragmentFlags::empty(),
- )
- });
-
row_slots
.par_iter()
.enumerate()
@@ -1141,10 +1116,7 @@ impl<'a> TableLayout<'a> {
style: &cell.base.style,
};
- let mut positioning_context = PositioningContext::new_for_subtree(
- collect_for_nearest_positioned_ancestor,
- );
-
+ let mut positioning_context = PositioningContext::default();
let layout = cell.contents.layout(
layout_context,
&mut positioning_context,
@@ -1503,7 +1475,6 @@ impl<'a> TableLayout<'a> {
layout_context: &LayoutContext,
parent_positioning_context: &mut PositioningContext,
) -> BoxFragment {
- let mut positioning_context = caption.context.new_positioning_context();
let containing_block = &ContainingBlock {
size: ContainingBlockSize {
inline: self.table_width + self.pbm.padding_border_sums.inline,
@@ -1517,6 +1488,8 @@ impl<'a> TableLayout<'a> {
// stretch block size. https://drafts.csswg.org/css-sizing-4/#stretch-fit-sizing
let ignore_block_margins_for_stretch = LogicalSides1D::new(false, false);
+ let mut positioning_context =
+ PositioningContext::new_for_layout_box_base(&caption.context.base);
let mut box_fragment = caption.context.layout_in_flow_block_level(
layout_context,
positioning_context
@@ -1769,11 +1742,7 @@ impl<'a> TableLayout<'a> {
) -> BoxFragment {
self.distributed_column_widths =
Self::distribute_width_to_columns(self.assignable_width, &self.columns);
- self.layout_cells_in_row(
- layout_context,
- containing_block_for_children,
- positioning_context,
- );
+ self.layout_cells_in_row(layout_context, containing_block_for_children);
let table_writing_mode = containing_block_for_children.style.writing_mode;
let first_layout_row_heights = self.do_first_row_layout(table_writing_mode);
self.compute_table_height_and_final_row_heights(
@@ -2325,7 +2294,7 @@ impl<'a> RowFragmentLayout<'a> {
Self {
row: table_row,
rect,
- positioning_context: table_row.base.new_positioning_context(),
+ positioning_context: PositioningContext::new_for_layout_box_base(&table_row.base),
containing_block,
fragments: Vec::new(),
}
@@ -2379,11 +2348,11 @@ impl<'a> RowFragmentLayout<'a> {
if let Some(mut row_positioning_context) = self.positioning_context.take() {
row_positioning_context.layout_collected_children(layout_context, &mut row_fragment);
- let positioning_context = row_group_fragment_layout
+ let parent_positioning_context = row_group_fragment_layout
.as_mut()
.and_then(|layout| layout.positioning_context.as_mut())
.unwrap_or(table_positioning_context);
- positioning_context.append(row_positioning_context);
+ parent_positioning_context.append(row_positioning_context);
}
let fragment = Fragment::Box(ArcRefCell::new(row_fragment));
@@ -2410,7 +2379,7 @@ impl RowGroupFragmentLayout {
let row_group = row_group.borrow();
(
dimensions.get_row_group_rect(&row_group),
- row_group.base.new_positioning_context(),
+ PositioningContext::new_for_layout_box_base(&row_group.base),
)
};
Self {
diff --git a/components/layout/taffy/layout.rs b/components/layout/taffy/layout.rs
index 3777c902053..a5838c1bd65 100644
--- a/components/layout/taffy/layout.rs
+++ b/components/layout/taffy/layout.rs
@@ -29,7 +29,7 @@ use crate::geom::{
use crate::layout_box_base::CacheableLayoutResult;
use crate::positioned::{AbsolutelyPositionedBox, PositioningContext, PositioningContextLength};
use crate::sizing::{ComputeInlineContentSizes, ContentSizes, InlineContentSizesResult};
-use crate::style_ext::{ComputedValuesExt, LayoutStyle};
+use crate::style_ext::LayoutStyle;
use crate::{ConstraintSpace, ContainingBlock, ContainingBlockSize};
const DUMMY_NODE_ID: taffy::NodeId = taffy::NodeId::new(u64::MAX);
@@ -250,29 +250,15 @@ impl taffy::LayoutPartialTree for TaffyContainerContext<'_> {
},
style,
};
- let layout = {
- let mut child_positioning_context = independent_context
- .new_positioning_context()
- .unwrap_or_else(|| {
- PositioningContext::new_for_subtree(
- self.positioning_context
- .collects_for_nearest_positioned_ancestor(),
- )
- });
-
- let layout = non_replaced.layout_without_caching(
- self.layout_context,
- &mut child_positioning_context,
- &content_box_size_override,
- containing_block,
- false, /* depends_on_block_constraints */
- );
- // Store layout data on child for later access
- child.positioning_context = child_positioning_context;
-
- layout
- };
+ child.positioning_context = PositioningContext::default();
+ let layout = non_replaced.layout_without_caching(
+ self.layout_context,
+ &mut child.positioning_context,
+ &content_box_size_override,
+ containing_block,
+ false, /* depends_on_block_constraints */
+ );
child.child_fragments = layout.fragments;
self.child_specific_layout_infos[usize::from(node_id)] =
@@ -373,8 +359,7 @@ impl ComputeInlineContentSizes for TaffyContainer {
let mut grid_context = TaffyContainerContext {
layout_context,
- positioning_context:
- &mut PositioningContext::new_for_containing_block_for_all_descendants(),
+ positioning_context: &mut PositioningContext::default(),
content_box_size_override: containing_block,
style,
source_child_nodes: &self.children,
@@ -540,17 +525,6 @@ impl TaffyContainer {
let child_specific_layout_info: Option<SpecificLayoutInfo> =
std::mem::take(&mut container_ctx.child_specific_layout_infos[child_id]);
- let establishes_containing_block_for_absolute_descendants =
- if let TaffyItemBoxInner::InFlowBox(independent_box) = &child.taffy_level_box {
- child
- .style
- .establishes_containing_block_for_absolute_descendants(
- independent_box.base_fragment_info().flags,
- )
- } else {
- false
- };
-
let fragment = match &mut child.taffy_level_box {
TaffyItemBoxInner::InFlowBox(independent_box) => {
let mut fragment_info = independent_box.base_fragment_info();
@@ -573,29 +547,21 @@ impl TaffyContainer {
})
.with_specific_layout_info(child_specific_layout_info);
- if establishes_containing_block_for_absolute_descendants {
- child.positioning_context.layout_collected_children(
- container_ctx.layout_context,
- &mut box_fragment,
- );
- }
-
- let fragment = Fragment::Box(ArcRefCell::new(box_fragment));
-
+ child.positioning_context.layout_collected_children(
+ container_ctx.layout_context,
+ &mut box_fragment,
+ );
child
.positioning_context
- .adjust_static_position_of_hoisted_fragments(
- &fragment,
+ .adjust_static_position_of_hoisted_fragments_with_offset(
+ &box_fragment.content_rect.origin.to_vector(),
PositioningContextLength::zero(),
);
- let child_positioning_context = std::mem::replace(
- &mut child.positioning_context,
- PositioningContext::new_for_containing_block_for_all_descendants(),
- );
container_ctx
.positioning_context
- .append(child_positioning_context);
- fragment
+ .append(std::mem::take(&mut child.positioning_context));
+
+ Fragment::Box(ArcRefCell::new(box_fragment))
},
TaffyItemBoxInner::OutOfFlowAbsolutelyPositionedBox(abs_pos_box) => {
fn resolve_alignment(value: AlignFlags, auto: AlignFlags) -> AlignFlags {
diff --git a/components/layout/taffy/mod.rs b/components/layout/taffy/mod.rs
index 55a678cd89a..b1ff753ea78 100644
--- a/components/layout/taffy/mod.rs
+++ b/components/layout/taffy/mod.rs
@@ -110,7 +110,7 @@ impl TaffyItemBox {
Self {
taffy_layout: Default::default(),
child_fragments: Vec::new(),
- positioning_context: PositioningContext::new_for_containing_block_for_all_descendants(),
+ positioning_context: PositioningContext::default(),
style,
taffy_level_box: inner,
}
@@ -118,8 +118,7 @@ impl TaffyItemBox {
pub(crate) fn invalidate_cached_fragment(&mut self) {
self.taffy_layout = Default::default();
- self.positioning_context =
- PositioningContext::new_for_containing_block_for_all_descendants();
+ self.positioning_context = PositioningContext::default();
match self.taffy_level_box {
TaffyItemBoxInner::InFlowBox(ref independent_formatting_context) => {
independent_formatting_context
diff --git a/components/script/canvas_context.rs b/components/script/canvas_context.rs
index 0a7545e9594..7dfdf48e3f5 100644
--- a/components/script/canvas_context.rs
+++ b/components/script/canvas_context.rs
@@ -14,8 +14,10 @@ use crate::dom::bindings::codegen::UnionTypes::HTMLCanvasElementOrOffscreenCanva
use crate::dom::bindings::inheritance::Castable;
use crate::dom::htmlcanvaselement::HTMLCanvasElement;
use crate::dom::node::{Node, NodeDamage};
+#[cfg(feature = "webgpu")]
+use crate::dom::types::GPUCanvasContext;
use crate::dom::types::{
- CanvasRenderingContext2D, GPUCanvasContext, OffscreenCanvas, OffscreenCanvasRenderingContext2D,
+ CanvasRenderingContext2D, OffscreenCanvas, OffscreenCanvasRenderingContext2D,
WebGL2RenderingContext, WebGLRenderingContext,
};
diff --git a/components/script/dom/gpucanvascontext.rs b/components/script/dom/gpucanvascontext.rs
index 2bdabf3e0ab..f47e1dfddd1 100644
--- a/components/script/dom/gpucanvascontext.rs
+++ b/components/script/dom/gpucanvascontext.rs
@@ -3,6 +3,7 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use dom_struct::dom_struct;
+use webrender_api::ImageKey;
use crate::dom::bindings::codegen::Bindings::GPUCanvasContextBinding::GPUCanvasContextMethods;
use crate::dom::bindings::codegen::UnionTypes;
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index a685bbb25f2..90782e217b7 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -1246,7 +1246,7 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
let rv = jsval_to_webdriver(cx, &self.globalscope, val, realm, can_gc);
let opt_chan = self.webdriver_script_chan.borrow_mut().take();
if let Some(chan) = opt_chan {
- chan.send(rv).unwrap();
+ let _ = chan.send(rv);
}
}
@@ -1255,9 +1255,9 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
let opt_chan = self.webdriver_script_chan.borrow_mut().take();
if let Some(chan) = opt_chan {
if let Ok(rv) = rv {
- chan.send(Err(WebDriverJSError::JSException(rv))).unwrap();
+ let _ = chan.send(Err(WebDriverJSError::JSException(rv)));
} else {
- chan.send(rv).unwrap();
+ let _ = chan.send(rv);
}
}
}
@@ -1265,7 +1265,7 @@ impl WindowMethods<crate::DomTypeHolder> for Window {
fn WebdriverTimeout(&self) {
let opt_chan = self.webdriver_script_chan.borrow_mut().take();
if let Some(chan) = opt_chan {
- chan.send(Err(WebDriverJSError::Timeout)).unwrap();
+ let _ = chan.send(Err(WebDriverJSError::Timeout));
}
}
diff --git a/components/servo/Cargo.toml b/components/servo/Cargo.toml
index b49f60e742a..fa64638fa4c 100644
--- a/components/servo/Cargo.toml
+++ b/components/servo/Cargo.toml
@@ -141,3 +141,12 @@ libservo = { path = ".", features = ["tracing"] }
rustls = { version = "0.23", default-features = false, features = ["aws-lc-rs"] }
tracing = { workspace = true }
winit = "0.30.8"
+
+
+[[test]]
+name = "webview"
+harness = false
+
+[[test]]
+name = "servo"
+harness = false
diff --git a/components/servo/tests/common/mod.rs b/components/servo/tests/common/mod.rs
index 8c00826a0d8..de71361e9be 100644
--- a/components/servo/tests/common/mod.rs
+++ b/components/servo/tests/common/mod.rs
@@ -3,18 +3,52 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::rc::Rc;
+use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
-use std::sync::{Arc, OnceLock};
use std::time::Duration;
use anyhow::Error;
use compositing_traits::rendering_context::{RenderingContext, SoftwareRenderingContext};
-use crossbeam_channel::{Receiver, Sender, unbounded};
use dpi::PhysicalSize;
use embedder_traits::EventLoopWaker;
-use parking_lot::Mutex;
use servo::{Servo, ServoBuilder};
+macro_rules! run_api_tests {
+ ($($test_function:ident), +) => {
+ let mut failed = false;
+
+ // Be sure that `servo_test` is dropped before exiting early.
+ {
+ let servo_test = ServoTest::new();
+ $(
+ common::run_test($test_function, stringify!($test_function), &servo_test, &mut failed);
+ )+
+ }
+
+ if failed {
+ std::process::exit(1);
+ }
+ }
+}
+
+pub(crate) use run_api_tests;
+
+pub(crate) fn run_test(
+ test_function: fn(&ServoTest) -> Result<(), Error>,
+ test_name: &str,
+ servo_test: &ServoTest,
+ failed: &mut bool,
+) {
+ match test_function(servo_test) {
+ Ok(_) => println!(" ✅ {test_name}"),
+ Err(error) => {
+ *failed = true;
+ println!(" ❌ {test_name}");
+ println!("{}", format!("\n{error:?}").replace("\n", "\n "));
+ },
+ }
+}
+
pub struct ServoTest {
servo: Servo,
}
@@ -30,7 +64,7 @@ impl Drop for ServoTest {
}
impl ServoTest {
- fn new() -> Self {
+ pub(crate) fn new() -> Self {
let rendering_context = Rc::new(
SoftwareRenderingContext::new(PhysicalSize {
width: 500,
@@ -63,58 +97,28 @@ impl ServoTest {
&self.servo
}
- /// Run a Servo test. All tests are run in a `ServoTestThread` and serially. Currently
- /// Servo does not support launching concurrent instances, in order to ensure
- /// isolation and allow for more than a single test per instance.
- pub fn run(
- test_function: impl FnOnce(&ServoTest) -> Result<(), anyhow::Error> + Send + Sync + 'static,
- ) {
- static SERVO_TEST_THREAD: Mutex<OnceLock<ServoTestThread>> = Mutex::new(OnceLock::new());
- let test_thread = SERVO_TEST_THREAD.lock();
- test_thread
- .get_or_init(ServoTestThread::new)
- .run_test(Box::new(test_function));
- }
-}
-
-type TestFunction =
- Box<dyn FnOnce(&ServoTest) -> Result<(), anyhow::Error> + Send + Sync + 'static>;
-
-struct ServoTestThread {
- test_function_sender: Sender<TestFunction>,
- result_receiver: Receiver<Result<(), Error>>,
-}
-
-impl ServoTestThread {
- fn new() -> Self {
- let (result_sender, result_receiver) = unbounded();
- let (test_function_sender, test_function_receiver) = unbounded();
-
- // Defined here rather than at the end of this method in order to take advantage
- // of Rust type inference.
- let thread = Self {
- test_function_sender,
- result_receiver,
- };
-
- let _ = std::thread::spawn(move || {
- let servo_test = ServoTest::new();
- while let Ok(incoming_test_function) = test_function_receiver.recv() {
- let _ = result_sender.send(incoming_test_function(&servo_test));
+ /// Spin the Servo event loop until one of:
+ /// - The given callback returns `Ok(false)`.
+ /// - The given callback returns an `Error`, in which case the `Error` will be returned.
+ /// - Servo has indicated that shut down is complete and we cannot spin the event loop
+ /// any longer.
+ // The dead code exception here is because not all test suites that use `common` also
+ // use `spin()`.
+ #[allow(dead_code)]
+ pub fn spin(&self, callback: impl Fn() -> Result<bool, Error> + 'static) -> Result<(), Error> {
+ let mut keep_going = true;
+ while keep_going {
+ std::thread::sleep(Duration::from_millis(1));
+ if !self.servo.spin_event_loop() {
+ return Ok(());
+ }
+ let result = callback();
+ match result {
+ Ok(result) => keep_going = result,
+ Err(error) => return Err(error),
}
- });
-
- thread
- }
-
- fn run_test(&self, test_function: TestFunction) {
- let _ = self.test_function_sender.send(Box::new(test_function));
- let result = self
- .result_receiver
- .recv()
- .expect("Servo test thread should always return a result.");
- if let Err(result) = result {
- unreachable!("{result}");
}
+
+ Ok(())
}
}
diff --git a/components/servo/tests/servo.rs b/components/servo/tests/servo.rs
index 2f71e909bee..6333b0af50a 100644
--- a/components/servo/tests/servo.rs
+++ b/components/servo/tests/servo.rs
@@ -4,7 +4,7 @@
//! Servo API unit tests.
//!
-//! Since all Servo tests must rust serially on the same thread, it is important
+//! Since all Servo tests must run serially on the same thread, it is important
//! that tests never panic. In order to ensure this, use `anyhow::ensure!` instead
//! of `assert!` for test assertions. `ensure!` will produce a `Result::Err` in
//! place of panicking.
@@ -12,21 +12,15 @@
mod common;
use anyhow::ensure;
-use common::*;
-use servo::WebViewBuilder;
+use common::{ServoTest, run_api_tests};
-#[test]
-fn test_simple_servo_is_not_animating_by_default() {
- ServoTest::run(|servo_test| {
- ensure!(!servo_test.servo().animating());
- Ok(())
- });
+fn test_simple_servo_is_not_animating_by_default(
+ servo_test: &ServoTest,
+) -> Result<(), anyhow::Error> {
+ ensure!(!servo_test.servo().animating());
+ Ok(())
}
-#[test]
-fn test_simple_servo_construct_webview() {
- ServoTest::run(|servo_test| {
- WebViewBuilder::new(servo_test.servo()).build();
- Ok(())
- });
+fn main() {
+ run_api_tests!(test_simple_servo_is_not_animating_by_default);
}
diff --git a/components/servo/tests/webview.rs b/components/servo/tests/webview.rs
new file mode 100644
index 00000000000..4ed06e412da
--- /dev/null
+++ b/components/servo/tests/webview.rs
@@ -0,0 +1,49 @@
+/* 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/. */
+
+//! WebView API unit tests.
+//!
+//! Since all Servo tests must run serially on the same thread, it is important
+//! that tests never panic. In order to ensure this, use `anyhow::ensure!` instead
+//! of `assert!` for test assertions. `ensure!` will produce a `Result::Err` in
+//! place of panicking.
+
+mod common;
+
+use std::cell::Cell;
+use std::rc::Rc;
+
+use anyhow::ensure;
+use common::{ServoTest, run_api_tests};
+use servo::{WebViewBuilder, WebViewDelegate};
+
+#[derive(Default)]
+struct WebViewDelegateImpl {
+ url_changed: Cell<bool>,
+}
+
+impl WebViewDelegate for WebViewDelegateImpl {
+ fn notify_url_changed(&self, _webview: servo::WebView, _url: url::Url) {
+ self.url_changed.set(true);
+ }
+}
+
+fn test_create_webview(servo_test: &ServoTest) -> Result<(), anyhow::Error> {
+ let delegate = Rc::new(WebViewDelegateImpl::default());
+ let webview = WebViewBuilder::new(servo_test.servo())
+ .delegate(delegate.clone())
+ .build();
+
+ servo_test.spin(move || Ok(!delegate.url_changed.get()))?;
+
+ let url = webview.url();
+ ensure!(url.is_some());
+ ensure!(url.unwrap().to_string() == "about:blank");
+
+ Ok(())
+}
+
+fn main() {
+ run_api_tests!(test_create_webview);
+}
diff --git a/components/webdriver_server/actions.rs b/components/webdriver_server/actions.rs
index f69a09a2577..fbede5b5887 100644
--- a/components/webdriver_server/actions.rs
+++ b/components/webdriver_server/actions.rs
@@ -76,7 +76,7 @@ fn compute_tick_duration(tick_actions: &ActionSequence) -> u64 {
}
},
ActionsType::Key { actions: _ } => (),
- ActionsType::Wheel { .. } => todo!("Not implemented."),
+ ActionsType::Wheel { .. } => log::error!("not implemented"),
}
duration
}
@@ -176,7 +176,10 @@ impl Handler {
}
}
},
- ActionsType::Wheel { .. } => todo!("Not implemented."),
+ ActionsType::Wheel { .. } => {
+ log::error!("not yet implemented");
+ return Err(ErrorStatus::UnsupportedOperation);
+ },
}
Ok(())
diff --git a/components/webdriver_server/capabilities.rs b/components/webdriver_server/capabilities.rs
index 477a3bfd34c..32596f5275a 100644
--- a/components/webdriver_server/capabilities.rs
+++ b/components/webdriver_server/capabilities.rs
@@ -4,7 +4,7 @@
use serde_json::{Map, Value};
use webdriver::capabilities::{BrowserCapabilities, Capabilities};
-use webdriver::error::{WebDriverError, WebDriverResult};
+use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult};
pub struct ServoCapabilities {
pub browser_name: String,
@@ -79,42 +79,42 @@ impl BrowserCapabilities for ServoCapabilities {
&mut self,
_: &serde_json::Map<std::string::String, Value>,
) -> Result<bool, WebDriverError> {
- todo!()
+ Err(WebDriverError::new(ErrorStatus::UnsupportedOperation, ""))
}
fn webauthn_virtual_authenticators(
&mut self,
_: &serde_json::Map<std::string::String, Value>,
) -> Result<bool, WebDriverError> {
- todo!()
+ Err(WebDriverError::new(ErrorStatus::UnsupportedOperation, ""))
}
fn webauthn_extension_uvm(
&mut self,
_: &serde_json::Map<std::string::String, Value>,
) -> Result<bool, WebDriverError> {
- todo!()
+ Err(WebDriverError::new(ErrorStatus::UnsupportedOperation, ""))
}
fn webauthn_extension_prf(
&mut self,
_: &serde_json::Map<std::string::String, Value>,
) -> Result<bool, WebDriverError> {
- todo!()
+ Err(WebDriverError::new(ErrorStatus::UnsupportedOperation, ""))
}
fn webauthn_extension_large_blob(
&mut self,
_: &serde_json::Map<std::string::String, Value>,
) -> Result<bool, WebDriverError> {
- todo!()
+ Err(WebDriverError::new(ErrorStatus::UnsupportedOperation, ""))
}
fn webauthn_extension_cred_blob(
&mut self,
_: &serde_json::Map<std::string::String, Value>,
) -> Result<bool, WebDriverError> {
- todo!()
+ Err(WebDriverError::new(ErrorStatus::UnsupportedOperation, ""))
}
}
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs
index ce83a8f3cc1..d003ebf8adb 100644
--- a/components/webdriver_server/lib.rs
+++ b/components/webdriver_server/lib.rs
@@ -29,7 +29,7 @@ use embedder_traits::{
use euclid::{Rect, Size2D};
use http::method::Method;
use image::{DynamicImage, ImageFormat, RgbaImage};
-use ipc_channel::ipc::{self, IpcSender};
+use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
use keyboard_types::webdriver::send_keys;
use log::{debug, info};
@@ -678,7 +678,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
self.top_level_script_command(WebDriverScriptCommand::GetUrl(sender))?;
- let url = receiver.recv().unwrap();
+ let url = wait_for_script_response(receiver)?;
Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(url.as_str())?,
@@ -694,7 +694,7 @@ impl Handler {
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
- let window_size = receiver.recv().unwrap();
+ let window_size = wait_for_script_response(receiver)?;
let window_size_response = WindowRectResponse {
x: 0,
y: 0,
@@ -738,7 +738,7 @@ impl Handler {
.unwrap();
});
- let window_size = receiver.recv().unwrap();
+ let window_size = wait_for_script_response(receiver)?;
let window_size_response = WindowRectResponse {
x: 0,
y: 0,
@@ -756,7 +756,7 @@ impl Handler {
sender,
))?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(is_enabled) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(is_enabled)?,
))),
@@ -772,7 +772,7 @@ impl Handler {
sender,
))?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(is_selected) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(is_selected)?,
))),
@@ -812,7 +812,7 @@ impl Handler {
self.top_level_script_command(WebDriverScriptCommand::GetTitle(sender))?;
- let value = receiver.recv().unwrap();
+ let value = wait_for_script_response(receiver)?;
Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?,
)))
@@ -874,7 +874,7 @@ impl Handler {
},
}
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => {
let value_resp = serde_json::to_value(
value.map(|x| serde_json::to_value(WebElement(x)).unwrap()),
@@ -1005,7 +1005,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::GetBrowsingContextId(frame_id, sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(browsing_context_id) => {
self.session_mut()?.browsing_context_id = browsing_context_id;
Ok(WebDriverResponse::Void)
@@ -1047,7 +1047,7 @@ impl Handler {
},
}
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => {
let resp_value: Vec<Value> = value
.into_iter()
@@ -1103,7 +1103,7 @@ impl Handler {
},
}
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => {
let value_resp = serde_json::to_value(
value.map(|x| serde_json::to_value(WebElement(x)).unwrap()),
@@ -1156,7 +1156,7 @@ impl Handler {
},
}
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => {
let resp_value: Vec<Value> = value
.into_iter()
@@ -1175,7 +1175,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementRect(element.to_string(), sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(rect) => {
let response = ElementRectResponse {
x: rect.origin.x,
@@ -1193,7 +1193,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementText(element.to_string(), sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?,
))),
@@ -1205,9 +1205,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetActiveElement(sender);
self.browsing_context_script_command(cmd)?;
- let value = receiver
- .recv()
- .unwrap()
+ let value = wait_for_script_response(receiver)?
.map(|x| serde_json::to_value(WebElement(x)).unwrap());
Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?,
@@ -1218,7 +1216,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetComputedRole(element.to_string(), sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?,
))),
@@ -1230,7 +1228,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementTagName(element.to_string(), sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?,
))),
@@ -1250,7 +1248,7 @@ impl Handler {
sender,
);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?,
))),
@@ -1272,7 +1270,7 @@ impl Handler {
);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(SendableWebDriverJSValue(value))?,
))),
@@ -1289,7 +1287,7 @@ impl Handler {
let cmd =
WebDriverScriptCommand::GetElementCSS(element.to_string(), name.to_owned(), sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?,
))),
@@ -1301,7 +1299,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookies(sender);
self.browsing_context_script_command(cmd)?;
- let cookies = receiver.recv().unwrap();
+ let cookies = wait_for_script_response(receiver)?;
let response = cookies
.into_iter()
.map(|cookie| cookie_msg_to_cookie(cookie.into_inner()))
@@ -1313,12 +1311,14 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookie(name, sender);
self.browsing_context_script_command(cmd)?;
- let cookies = receiver.recv().unwrap();
- let response = cookies
+ let cookies = wait_for_script_response(receiver)?;
+ let Some(response) = cookies
.into_iter()
.map(|cookie| cookie_msg_to_cookie(cookie.into_inner()))
.next()
- .unwrap();
+ else {
+ return Err(WebDriverError::new(ErrorStatus::NoSuchCookie, ""));
+ };
Ok(WebDriverResponse::Cookie(CookieResponse(response)))
}
@@ -1342,7 +1342,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::AddCookie(cookie_builder.build(), sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void),
Err(response) => match response {
WebDriverCookieError::InvalidDomain => Err(WebDriverError::new(
@@ -1361,7 +1361,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::DeleteCookie(name, sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void),
Err(error) => Err(WebDriverError::new(error, "")),
}
@@ -1371,7 +1371,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::DeleteCookies(sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void),
Err(error) => Err(WebDriverError::new(error, "")),
}
@@ -1426,7 +1426,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::GetPageSource(sender);
self.browsing_context_script_command(cmd)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(source) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(source)?,
))),
@@ -1487,9 +1487,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let command = WebDriverScriptCommand::ExecuteScript(script, sender);
self.browsing_context_script_command(command)?;
- let result = receiver
- .recv()
- .unwrap_or(Err(WebDriverJSError::BrowsingContextNotFound));
+ let result = wait_for_script_response(receiver)?;
self.postprocess_js_result(result)
}
@@ -1533,9 +1531,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let command = WebDriverScriptCommand::ExecuteAsyncScript(script, sender);
self.browsing_context_script_command(command)?;
- let result = receiver
- .recv()
- .unwrap_or(Err(WebDriverJSError::BrowsingContextNotFound));
+ let result = wait_for_script_response(receiver)?;
self.postprocess_js_result(result)
}
@@ -1589,10 +1585,7 @@ impl Handler {
.unwrap();
// TODO: distinguish the not found and not focusable cases
- receiver
- .recv()
- .unwrap()
- .map_err(|error| WebDriverError::new(error, ""))?;
+ wait_for_script_response(receiver)?.map_err(|error| WebDriverError::new(error, ""))?;
let input_events = send_keys(&keys.text);
@@ -1615,7 +1608,7 @@ impl Handler {
let command = WebDriverScriptCommand::ElementClick(element.to_string(), sender);
self.browsing_context_script_command(command)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(element_id) => match element_id {
Some(element_id) => {
let id = Uuid::new_v4().to_string();
@@ -1688,7 +1681,7 @@ impl Handler {
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
- if let Some(x) = receiver.recv().unwrap() {
+ if let Some(x) = wait_for_script_response(receiver)? {
img = Some(x);
break;
};
@@ -1739,7 +1732,7 @@ impl Handler {
let command = WebDriverScriptCommand::GetBoundingClientRect(element.to_string(), sender);
self.browsing_context_script_command(command)?;
- match receiver.recv().unwrap() {
+ match wait_for_script_response(receiver)? {
Ok(rect) => {
let encoded = self.take_screenshot(Some(Rect::from_untyped(&rect)))?;
@@ -1944,3 +1937,12 @@ fn webdriver_value_to_js_argument(v: &Value) -> String {
},
}
}
+
+fn wait_for_script_response<T>(receiver: IpcReceiver<T>) -> Result<T, WebDriverError>
+where
+ T: for<'de> Deserialize<'de> + Serialize,
+{
+ receiver
+ .recv()
+ .map_err(|_| WebDriverError::new(ErrorStatus::NoSuchWindow, ""))
+}
diff --git a/python/wpt/run.py b/python/wpt/run.py
index 97639ff34b6..b40287cbd96 100644
--- a/python/wpt/run.py
+++ b/python/wpt/run.py
@@ -51,6 +51,11 @@ def run_tests(default_binary_path: str, **kwargs):
os.environ["RUST_BACKTRACE"] = "1"
os.environ["HOST_FILE"] = os.path.join(SERVO_ROOT, "tests", "wpt", "hosts")
+ # The pytest framework used in the webdriver conformance tests dumps the
+ # environment variables when unexpected results occur, and this variable
+ # makes CI logs unreadable.
+ github_context = os.environ.pop("GITHUB_CONTEXT", None)
+
set_if_none(kwargs, "product", "servo")
set_if_none(kwargs, "config", os.path.join(WPT_PATH, "config.ini"))
set_if_none(kwargs, "include_manifest", os.path.join(WPT_PATH, "include.ini"))
@@ -142,6 +147,9 @@ def run_tests(default_binary_path: str, **kwargs):
kwargs["pause_after_test"] = False
wptrunner.run_tests(**kwargs)
+ if github_context:
+ os.environ["GITHUB_CONTEXT"] = github_context
+
# Use the second run to mark tests from the first run as flaky, but
# discard the results otherwise.
# TODO: It might be a good idea to send the new results to the
diff --git a/tests/wpt/include.ini b/tests/wpt/include.ini
index fdbd71b9ee6..ba81ab64b83 100644
--- a/tests/wpt/include.ini
+++ b/tests/wpt/include.ini
@@ -278,10 +278,26 @@ skip: true
skip: false
[WebCryptoAPI]
skip: false
+[webdriver]
+ skip: false
+ [tests]
+ skip: false
+ [bidi]
+ skip: true
+ [classic]
+ skip: true
+ [interop]
+ skip: true
[webgl]
skip: false
[webidl]
skip: false
+[webmessaging]
+ skip: false
+[websockets]
+ skip: false
+[webstorage]
+ skip: false
[webvr]
skip: false
[webvtt]
@@ -292,12 +308,6 @@ skip: true
skip: false
[dom-overlay]
skip: true
-[webmessaging]
- skip: false
-[websockets]
- skip: false
-[webstorage]
- skip: false
[workers]
skip: false
[modules]
diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json
index 5385c0403b4..c74943bb031 100644
--- a/tests/wpt/meta/MANIFEST.json
+++ b/tests/wpt/meta/MANIFEST.json
@@ -2794,6 +2794,13 @@
},
"css-grid": {
"abspos": {
+ "abspos-in-flexbox-in-grid-crash.html": [
+ "a2f71fb78e7f6fd82ea539e3af6c76d36f21e134",
+ [
+ null,
+ {}
+ ]
+ ],
"positioned-grid-items-crash.html": [
"228a6264df77fe82587a4116f231ff09537c8372",
[
@@ -278370,6 +278377,45 @@
{}
]
],
+ "stacking-context-002.html": [
+ "ff1d06dcc11ff445abc8ecaebe305836aa6ab14f",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "stacking-context-003.html": [
+ "6852722ed79183119f2a3fb142077b9e7c638e91",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "stacking-context-004.html": [
+ "6d7ec896736db0dc813a6e80ac4c75b7066e12e0",
+ [
+ null,
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"translate-fill-box.html": [
"8892d63327964cf1e9c16a3febaecf5af4d1cceb",
[
diff --git a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini
index 02a8e91ea04..d5f4fa2f799 100644
--- a/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini
+++ b/tests/wpt/meta/html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/iframe-nosrc.html.ini
@@ -2,8 +2,5 @@
[window.open]
expected: FAIL
- [link click]
- expected: FAIL
-
[form submission]
expected: FAIL
diff --git a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini
index 7e036a1c4e4..5d2657041d1 100644
--- a/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini
+++ b/tests/wpt/meta/html/canvas/element/manual/imagebitmap/createImageBitmap-transfer.html.ini
@@ -1,5 +1,5 @@
[createImageBitmap-transfer.html]
- expected: TIMEOUT
+ expected: ERROR
[Transfer ImageBitmap created from a vector HTMLImageElement]
expected: FAIL
diff --git a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini b/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini
index 8b8af2b9c2e..2ef0896e3b3 100644
--- a/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini
+++ b/tests/wpt/meta/html/infrastructure/urls/base-url/document-base-url-window-initiator-is-not-opener.https.window.js.ini
@@ -1,3 +1,4 @@
[document-base-url-window-initiator-is-not-opener.https.window.html]
+ expected: TIMEOUT
[window.open() gets base url from initiator not opener.]
expected: [FAIL, PASS, TIMEOUT]
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
index 62a6e7fc812..bbc1f35d8d9 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-1.html.ini
@@ -1,4 +1,3 @@
[iframe_sandbox_popups_nonescaping-1.html]
- expected: CRASH
[Check that popups from a sandboxed iframe do not escape the sandbox]
- expected: NOTRUN
+ expected: FAIL
diff --git a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
index d5fd800f09d..ccdaf8d61b2 100644
--- a/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
+++ b/tests/wpt/meta/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_nonescaping-3.html.ini
@@ -1,4 +1,3 @@
[iframe_sandbox_popups_nonescaping-3.html]
- expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
diff --git a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini
index 0bb708b5b98..fb5e4d1adbe 100644
--- a/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini
+++ b/tests/wpt/meta/navigation-timing/test-navigation-type-reload.html.ini
@@ -22,9 +22,3 @@
[Reload domComplete > Original domComplete]
expected: FAIL
-
- [Reload loadEventEnd > Original loadEventEnd]
- expected: FAIL
-
- [Reload loadEventStart > Original loadEventStart]
- expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini b/tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini
new file mode 100644
index 00000000000..00caf69c8d5
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/accept_alert/accept.py.ini
@@ -0,0 +1,27 @@
+[accept.py]
+ [test_null_response_value]
+ expected: FAIL
+
+ [test_no_top_level_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_user_prompt]
+ expected: FAIL
+
+ [test_accept_alert]
+ expected: FAIL
+
+ [test_accept_confirm]
+ expected: FAIL
+
+ [test_accept_prompt]
+ expected: FAIL
+
+ [test_unexpected_alert]
+ expected: FAIL
+
+ [test_accept_in_popup_window]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/add_cookie/add.py.ini b/tests/wpt/meta/webdriver/tests/classic/add_cookie/add.py.ini
new file mode 100644
index 00000000000..37610cfc8ee
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/add_cookie/add.py.ini
@@ -0,0 +1,42 @@
+[add.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[about\]]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[blob\]]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[data\]]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[file\]]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[ftp\]]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[javascript\]]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[websocket\]]
+ expected: FAIL
+
+ [test_cookie_unsupported_scheme[secure websocket\]]
+ expected: FAIL
+
+ [test_add_non_session_cookie]
+ expected: FAIL
+
+ [test_add_cookie_with_valid_samesite_flag[None\]]
+ expected: FAIL
+
+ [test_add_cookie_with_valid_samesite_flag[Lax\]]
+ expected: FAIL
+
+ [test_add_cookie_with_valid_samesite_flag[Strict\]]
+ expected: FAIL
+
+ [test_add_cookie_with_invalid_samesite_flag]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/add_cookie/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/add_cookie/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/add_cookie/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/back/back.py.ini b/tests/wpt/meta/webdriver/tests/classic/back/back.py.ini
new file mode 100644
index 00000000000..10d35cc69e3
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/back/back.py.ini
@@ -0,0 +1,19 @@
+[back.py]
+ disabled: consistent panic
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_seen_nodes[http\]]
+ expected: FAIL
+
+ [test_seen_nodes[https\]]
+ expected: FAIL
+
+ [test_seen_nodes[https coop\]]
+ expected: FAIL
+
+ [test_history_pushstate]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/back/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/back/user_prompts.py.ini
new file mode 100644
index 00000000000..fcf10a0526c
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/back/user_prompts.py.ini
@@ -0,0 +1,73 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/close_window/close.py.ini b/tests/wpt/meta/webdriver/tests/classic/close_window/close.py.ini
new file mode 100644
index 00000000000..b1f13cee75e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/close_window/close.py.ini
@@ -0,0 +1,19 @@
+[close.py]
+ disabled: panic in test_close_browsing_context_with_accepted_beforeunload_prompt
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_close_browsing_context_with_accepted_beforeunload_prompt[tab\]]
+ expected: FAIL
+
+ [test_close_browsing_context_with_accepted_beforeunload_prompt[window\]]
+ expected: ERROR
+
+ [test_close_last_browsing_context]
+ expected: ERROR
+
+ [test_element_usage_after_closing_browsing_context]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/close_window/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/close_window/user_prompts.py.ini
new file mode 100644
index 00000000000..fcf10a0526c
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/close_window/user_prompts.py.ini
@@ -0,0 +1,73 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/delete.py.ini b/tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/delete.py.ini
new file mode 100644
index 00000000000..1a53a7bbaf5
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/delete.py.ini
@@ -0,0 +1,3 @@
+[delete.py]
+ [test_no_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/delete_all_cookies/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/delete_cookie/delete.py.ini b/tests/wpt/meta/webdriver/tests/classic/delete_cookie/delete.py.ini
new file mode 100644
index 00000000000..1a53a7bbaf5
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/delete_cookie/delete.py.ini
@@ -0,0 +1,3 @@
+[delete.py]
+ [test_no_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/delete_cookie/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/delete_cookie/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/delete_cookie/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/delete_session/delete.py.ini b/tests/wpt/meta/webdriver/tests/classic/delete_session/delete.py.ini
new file mode 100644
index 00000000000..ee03ab08fe3
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/delete_session/delete.py.ini
@@ -0,0 +1,7 @@
+[delete.py]
+ expected: ERROR
+ [test_null_response_value]
+ expected: FAIL
+
+ [test_accepted_beforeunload_prompt]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini b/tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini
new file mode 100644
index 00000000000..cd2546ede8b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/dismiss_alert/dismiss.py.ini
@@ -0,0 +1,24 @@
+[dismiss.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_user_prompt]
+ expected: FAIL
+
+ [test_dismiss_alert]
+ expected: FAIL
+
+ [test_dismiss_confirm]
+ expected: FAIL
+
+ [test_dismiss_prompt]
+ expected: FAIL
+
+ [test_unexpected_alert]
+ expected: FAIL
+
+ [test_dismiss_in_popup_window]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini
new file mode 100644
index 00000000000..541ffc25ca6
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_clear/clear.py.ini
@@ -0,0 +1,2 @@
+[clear.py]
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini
new file mode 100644
index 00000000000..f6367167d66
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_clear/disabled.py.ini
@@ -0,0 +1,115 @@
+[disabled.py]
+ expected: TIMEOUT
+ [test_button[button\]]
+ expected: FAIL
+
+ [test_button[reset\]]
+ expected: FAIL
+
+ [test_button[submit\]]
+ expected: FAIL
+
+ [test_input[button\]]
+ expected: FAIL
+
+ [test_input[checkbox\]]
+ expected: FAIL
+
+ [test_input[color\]]
+ expected: FAIL
+
+ [test_input[date\]]
+ expected: FAIL
+
+ [test_input[datetime-local\]]
+ expected: FAIL
+
+ [test_input[email\]]
+ expected: FAIL
+
+ [test_input[file\]]
+ expected: FAIL
+
+ [test_input[image\]]
+ expected: FAIL
+
+ [test_input[month\]]
+ expected: FAIL
+
+ [test_input[number\]]
+ expected: FAIL
+
+ [test_input[password\]]
+ expected: FAIL
+
+ [test_input[radio\]]
+ expected: FAIL
+
+ [test_input[range\]]
+ expected: FAIL
+
+ [test_input[reset\]]
+ expected: FAIL
+
+ [test_input[search\]]
+ expected: FAIL
+
+ [test_input[submit\]]
+ expected: FAIL
+
+ [test_input[tel\]]
+ expected: FAIL
+
+ [test_input[text\]]
+ expected: FAIL
+
+ [test_input[time\]]
+ expected: FAIL
+
+ [test_input[url\]]
+ expected: FAIL
+
+ [test_input[week\]]
+ expected: FAIL
+
+ [test_textarea]
+ expected: FAIL
+
+ [test_fieldset_descendant]
+ expected: FAIL
+
+ [test_fieldset_descendant_first_legend]
+ expected: FAIL
+
+ [test_fieldset_descendant_not_first_legend]
+ expected: FAIL
+
+ [test_option]
+ expected: FAIL
+
+ [test_option_optgroup]
+ expected: FAIL
+
+ [test_option_select]
+ expected: FAIL
+
+ [test_optgroup_select]
+ expected: FAIL
+
+ [test_select]
+ expected: FAIL
+
+ [test_xhtml[button\]]
+ expected: FAIL
+
+ [test_xhtml[input\]]
+ expected: FAIL
+
+ [test_xhtml[select\]]
+ expected: FAIL
+
+ [test_xhtml[textarea\]]
+ expected: FAIL
+
+ [test_xml]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_clear/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_clear/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_clear/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini
new file mode 100644
index 00000000000..d99f3672ef6
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/bubbling.py.ini
@@ -0,0 +1,6 @@
+[bubbling.py]
+ [test_click_event_bubbles_to_parents]
+ expected: FAIL
+
+ [test_spin_event_loop]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini
new file mode 100644
index 00000000000..3e3bfa2708e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/center_point.py.ini
@@ -0,0 +1,33 @@
+[center_point.py]
+ [test_entirely_in_view]
+ expected: FAIL
+
+ [test_css_pixel_rounding[1\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[2\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[3\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[4\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[5\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[6\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[7\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[8\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[9\]]
+ expected: FAIL
+
+ [test_css_pixel_rounding[10\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
new file mode 100644
index 00000000000..ad0f9714ad1
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/click.py.ini
@@ -0,0 +1,21 @@
+[click.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini
new file mode 100644
index 00000000000..8f57d96cef8
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/events.py.ini
@@ -0,0 +1,3 @@
+[events.py]
+ [test_event_mousemove]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini
new file mode 100644
index 00000000000..982ea5ca753
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/interactability.py.ini
@@ -0,0 +1,33 @@
+[interactability.py]
+ [test_display_none]
+ expected: FAIL
+
+ [test_visibility_hidden]
+ expected: FAIL
+
+ [test_hidden]
+ expected: FAIL
+
+ [test_element_not_interactable_css_transform[translate(-100px, -100px)\]]
+ expected: FAIL
+
+ [test_element_not_interactable_css_transform[rotate(50deg)\]]
+ expected: FAIL
+
+ [test_element_not_interactable_out_of_view]
+ expected: FAIL
+
+ [test_zero_sized_element[div\]]
+ expected: FAIL
+
+ [test_zero_sized_element[span\]]
+ expected: FAIL
+
+ [test_element_intercepted]
+ expected: FAIL
+
+ [test_element_intercepted_no_pointer_events]
+ expected: FAIL
+
+ [test_element_not_visible_overflow_hidden]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/navigate.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/navigate.py.ini
new file mode 100644
index 00000000000..4811bba2d43
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/navigate.py.ini
@@ -0,0 +1,49 @@
+[navigate.py]
+ expected: TIMEOUT
+ [test_numbers_link]
+ expected: FAIL
+
+ [test_multi_line_link]
+ expected: FAIL
+
+ [test_navigation_retains_input_state]
+ expected: FAIL
+
+ [test_link_hash]
+ expected: FAIL
+
+ [test_link_from_toplevel_context_with_target[\]]
+ expected: FAIL
+
+ [test_link_from_toplevel_context_with_target[_blank\]]
+ expected: FAIL
+
+ [test_link_from_toplevel_context_with_target[_parent\]]
+ expected: FAIL
+
+ [test_link_from_toplevel_context_with_target[_self\]]
+ expected: FAIL
+
+ [test_link_from_toplevel_context_with_target[_top\]]
+ expected: FAIL
+
+ [test_link_from_nested_context_with_target[\]]
+ expected: FAIL
+
+ [test_link_from_nested_context_with_target[_blank\]]
+ 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]
+ expected: FAIL
+
+ [test_link_closes_window]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/scroll_into_view.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/scroll_into_view.py.ini
new file mode 100644
index 00000000000..87c9c813881
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/scroll_into_view.py.ini
@@ -0,0 +1,30 @@
+[scroll_into_view.py]
+ [test_scroll_into_view]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[9\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[8\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[7\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[6\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[5\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[4\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[3\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[2\]]
+ expected: ERROR
+
+ [test_partially_visible_does_not_scroll[1\]]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/select.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/select.py.ini
new file mode 100644
index 00000000000..2bf7e5abac4
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/select.py.ini
@@ -0,0 +1,15 @@
+[select.py]
+ [test_click_option]
+ expected: FAIL
+
+ [test_click_preselected_option]
+ expected: FAIL
+
+ [test_click_deselects_others]
+ expected: FAIL
+
+ [test_click_selected_option]
+ expected: FAIL
+
+ [test_out_of_view_dropdown]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini
new file mode 100644
index 00000000000..92d8bfe9a3d
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/shadow_dom.py.ini
@@ -0,0 +1,15 @@
+[shadow_dom.py]
+ [test_shadow_element_click[host_element\]]
+ expected: FAIL
+
+ [test_shadow_element_click[checkbox_element\]]
+ expected: FAIL
+
+ [test_nested_shadow_element_click[outer_element\]]
+ expected: FAIL
+
+ [test_nested_shadow_element_click[inner_element\]]
+ expected: FAIL
+
+ [test_nested_shadow_element_click[checkbox\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_click/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_click/user_prompts.py.ini
new file mode 100644
index 00000000000..a050673119e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_click/user_prompts.py.ini
@@ -0,0 +1,73 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/content_editable.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/content_editable.py.ini
new file mode 100644
index 00000000000..3cf383a34ff
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/content_editable.py.ini
@@ -0,0 +1,9 @@
+[content_editable.py]
+ [test_sets_insertion_point_to_end]
+ expected: FAIL
+
+ [test_sets_insertion_point_to_after_last_text_node]
+ expected: FAIL
+
+ [test_no_move_caret_if_focused]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini
new file mode 100644
index 00000000000..26b3aaa641b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/events.py.ini
@@ -0,0 +1,9 @@
+[events.py]
+ [test_file_upload]
+ expected: FAIL
+
+ [test_form_control_send_text[input\]]
+ expected: FAIL
+
+ [test_form_control_send_text[textarea\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini
new file mode 100644
index 00000000000..4fd4b29e87f
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/file_upload.py.ini
@@ -0,0 +1,55 @@
+[file_upload.py]
+ expected: TIMEOUT
+ [test_empty_text]
+ expected: FAIL
+
+ [test_multiple_files]
+ expected: FAIL
+
+ [test_multiple_files_last_path_not_found]
+ expected: FAIL
+
+ [test_multiple_files_without_multiple_attribute]
+ expected: FAIL
+
+ [test_multiple_files_send_twice]
+ expected: FAIL
+
+ [test_multiple_files_reset_with_element_clear]
+ expected: FAIL
+
+ [test_single_file]
+ expected: FAIL
+
+ [test_single_file_replaces_without_multiple_attribute]
+ expected: FAIL
+
+ [test_single_file_appends_with_multiple_attribute]
+ expected: FAIL
+
+ [test_transparent]
+ expected: FAIL
+
+ [test_obscured]
+ expected: FAIL
+
+ [test_outside_viewport]
+ expected: FAIL
+
+ [test_hidden]
+ expected: FAIL
+
+ [test_display_none]
+ expected: FAIL
+
+ [test_not_focused]
+ expected: FAIL
+
+ [test_focused]
+ expected: ERROR
+
+ [test_strict_hidden]
+ expected: ERROR
+
+ [test_strict_display_none]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/form_controls.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/form_controls.py.ini
new file mode 100644
index 00000000000..5d4a3bd4de5
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/form_controls.py.ini
@@ -0,0 +1,6 @@
+[form_controls.py]
+ [test_input_append]
+ expected: FAIL
+
+ [test_textarea_append]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini
new file mode 100644
index 00000000000..9510b686ea1
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/interactability.py.ini
@@ -0,0 +1,24 @@
+[interactability.py]
+ [test_document_element_is_interactable]
+ expected: FAIL
+
+ [test_iframe_is_interactable]
+ expected: FAIL
+
+ [test_readonly_element]
+ expected: FAIL
+
+ [test_not_a_focusable_element]
+ expected: FAIL
+
+ [test_display_none]
+ expected: FAIL
+
+ [test_visibility_hidden]
+ expected: FAIL
+
+ [test_hidden]
+ expected: FAIL
+
+ [test_disabled]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/scroll_into_view.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/scroll_into_view.py.ini
new file mode 100644
index 00000000000..3e260cade03
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/scroll_into_view.py.ini
@@ -0,0 +1,27 @@
+[scroll_into_view.py]
+ [test_element_outside_of_not_scrollable_viewport]
+ expected: FAIL
+
+ [test_element_outside_of_scrollable_viewport]
+ expected: FAIL
+
+ [test_contenteditable_element_outside_of_scrollable_viewport]
+ expected: FAIL
+
+ [test_element_already_in_viewport[{block: 'start'}\]]
+ expected: FAIL
+
+ [test_element_already_in_viewport[{block: 'center'}\]]
+ expected: FAIL
+
+ [test_element_already_in_viewport[{block: 'end'}\]]
+ expected: FAIL
+
+ [test_element_already_in_viewport[{block: 'nearest'}\]]
+ expected: FAIL
+
+ [test_element_just_outside_viewport[Just above viewport\]]
+ expected: FAIL
+
+ [test_element_just_outside_viewport[Just below viewport\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
new file mode 100644
index 00000000000..b2b09490191
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/send_keys.py.ini
@@ -0,0 +1,21 @@
+[send_keys.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/element_send_keys/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/element_send_keys/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini
new file mode 100644
index 00000000000..6bcbe1197f6
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/arguments.py.ini
@@ -0,0 +1,2 @@
+[arguments.py]
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/collections.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/collections.py.ini
new file mode 100644
index 00000000000..5d0711fe4ad
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/collections.py.ini
@@ -0,0 +1,12 @@
+[collections.py]
+ [test_array_in_array]
+ expected: FAIL
+
+ [test_dom_token_list]
+ expected: FAIL
+
+ [test_file_list]
+ expected: FAIL
+
+ [test_html_all_collection]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini
new file mode 100644
index 00000000000..6885d2e743e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/execute_async.py.ini
@@ -0,0 +1,21 @@
+[execute_async.py]
+ [test_no_browsing_context]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/node.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/node.py.ini
new file mode 100644
index 00000000000..99dbcbef513
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/node.py.ini
@@ -0,0 +1,33 @@
+[node.py]
+ [test_detached_shadow_root[top_context\]]
+ expected: FAIL
+
+ [test_detached_shadow_root[child_context\]]
+ expected: FAIL
+
+ [test_stale_element[top_context\]]
+ expected: FAIL
+
+ [test_stale_element[child_context\]]
+ expected: FAIL
+
+ [test_element_reference[shadow-root\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[attribute\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[text\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[processing_instruction\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[comment\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[document\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[doctype\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/user_prompts.py.ini
new file mode 100644
index 00000000000..a050673119e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/user_prompts.py.ini
@@ -0,0 +1,73 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_async_script/window.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/window.py.ini
new file mode 100644
index 00000000000..5cd736463b1
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_async_script/window.py.ini
@@ -0,0 +1,6 @@
+[window.py]
+ [test_web_reference[window\]]
+ expected: FAIL
+
+ [test_window_open]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini
new file mode 100644
index 00000000000..8818990c5ef
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/arguments.py.ini
@@ -0,0 +1,88 @@
+[arguments.py]
+ expected: TIMEOUT
+ [test_no_such_element_with_unknown_id]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_unknown_id]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_shadow_root_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_detached_shadow_root_reference[top_context\]]
+ expected: FAIL
+
+ [test_detached_shadow_root_reference[child_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[None-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[None-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[False-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[False-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[42-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[42-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value3-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value3-window\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value4-frame\]]
+ expected: FAIL
+
+ [test_invalid_argument_for_window_with_invalid_type[value4-window\]]
+ expected: FAIL
+
+ [test_no_such_window_for_window_with_invalid_value]
+ expected: FAIL
+
+ [test_element_reference[frame\]]
+ expected: FAIL
+
+ [test_element_reference[node\]]
+ expected: FAIL
+
+ [test_element_reference[shadow-root\]]
+ expected: FAIL
+
+ [test_element_reference[window\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/collections.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/collections.py.ini
new file mode 100644
index 00000000000..68e5ec4b830
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/collections.py.ini
@@ -0,0 +1,12 @@
+[collections.py]
+ [test_dom_token_list]
+ expected: FAIL
+
+ [test_file_list]
+ expected: FAIL
+
+ [test_html_all_collection]
+ expected: FAIL
+
+ [test_array_in_array]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini
new file mode 100644
index 00000000000..8a1571d1d7b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/execute.py.ini
@@ -0,0 +1,24 @@
+[execute.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_opening_new_window_keeps_current_window_handle]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/node.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/node.py.ini
new file mode 100644
index 00000000000..dd95e12798a
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/node.py.ini
@@ -0,0 +1,33 @@
+[node.py]
+ [test_detached_shadow_root[top_context\]]
+ expected: FAIL
+
+ [test_detached_shadow_root[child_context\]]
+ expected: FAIL
+
+ [test_stale_element[top_context\]]
+ expected: FAIL
+
+ [test_stale_element[child_context\]]
+ expected: FAIL
+
+ [test_web_reference[shadow-root\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[attribute\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[text\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[processing_instruction\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[comment\]]
+ expected: FAIL
+
+ [test_not_supported_nodes[document\]]
+ expected: ERROR
+
+ [test_not_supported_nodes[doctype\]]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/promise.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/promise.py.ini
new file mode 100644
index 00000000000..d5d950aa7ac
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/promise.py.ini
@@ -0,0 +1,27 @@
+[promise.py]
+ [test_promise_resolve]
+ expected: FAIL
+
+ [test_promise_resolve_delayed]
+ expected: FAIL
+
+ [test_promise_all_resolve]
+ expected: FAIL
+
+ [test_await_promise_resolve]
+ expected: FAIL
+
+ [test_promise_resolve_timeout]
+ expected: FAIL
+
+ [test_promise_reject]
+ expected: FAIL
+
+ [test_promise_reject_delayed]
+ expected: FAIL
+
+ [test_promise_all_reject]
+ expected: FAIL
+
+ [test_promise_reject_timeout]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/user_prompts.py.ini
new file mode 100644
index 00000000000..a050673119e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/user_prompts.py.ini
@@ -0,0 +1,73 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/execute_script/window.py.ini b/tests/wpt/meta/webdriver/tests/classic/execute_script/window.py.ini
new file mode 100644
index 00000000000..9de464ed4f0
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/execute_script/window.py.ini
@@ -0,0 +1,15 @@
+[window.py]
+ [test_web_reference[window\]]
+ expected: FAIL
+
+ [test_web_reference_in_array[window\]]
+ expected: FAIL
+
+ [test_web_reference_in_object[window\]]
+ expected: FAIL
+
+ [test_window_open]
+ expected: FAIL
+
+ [test_same_id_after_cross_origin_navigation]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini
new file mode 100644
index 00000000000..7564f644b10
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element/find.py.ini
@@ -0,0 +1,34 @@
+[find.py]
+ expected: TIMEOUT
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_no_such_element_with_unknown_selector[not-existent\]]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[existent-other-frame\]]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[existent-inside-shadow-root\]]
+ expected: FAIL
+
+ [test_find_element[xpath-//a\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[css selector-#linkText\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[link text-full link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[partial link text-link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[tag name-a\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[xpath-//*[name()='a'\]\]]
+ expected: FAIL
+
+ [test_htmldocument[xpath-/html\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini
new file mode 100644
index 00000000000..64a0652b75b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/find.py.ini
@@ -0,0 +1,52 @@
+[find.py]
+ expected: TIMEOUT
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[not-existent\]]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[existent-other-frame\]]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[existent-inside-shadow-root\]]
+ expected: FAIL
+
+ [test_no_such_element_with_startnode_from_other_window_handle]
+ expected: FAIL
+
+ [test_no_such_element_with_startnode_from_other_frame]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_find_element[xpath-//a\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[css selector-#linkText\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[link text-full link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[partial link text-link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[tag name-a\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[xpath-//*[name()='a'\]\]]
+ expected: FAIL
+
+ [test_parent_htmldocument]
+ expected: FAIL
+
+ [test_parent_of_document_node_errors]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element_from_element/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini
new file mode 100644
index 00000000000..dba98c7726b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/find.py.ini
@@ -0,0 +1,157 @@
+[find.py]
+ expected: TIMEOUT
+ [test_null_parameter_value]
+ expected: FAIL
+
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_no_such_shadow_root_with_element]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_unknown_shadow_root]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_shadow_root_from_other_window_handle]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_shadow_root_from_other_frame]
+ expected: FAIL
+
+ [test_detached_shadow_root[top_context\]]
+ expected: FAIL
+
+ [test_detached_shadow_root[child_context\]]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[not-existent\]]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[existent-other-frame\]]
+ expected: FAIL
+
+ [test_no_such_element_with_unknown_selector[existent-outside-shadow-root\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[True\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[None\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[1\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[shadow_root_id3\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[shadow_root_id4\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[a\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[True\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[None\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[1\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[using4\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[using5\]]
+ expected: FAIL
+
+ [test_invalid_selector_argument[None\]]
+ expected: FAIL
+
+ [test_invalid_selector_argument[value1\]]
+ expected: FAIL
+
+ [test_invalid_selector_argument[value2\]]
+ expected: FAIL
+
+ [test_found_element_equivalence]
+ expected: FAIL
+
+ [test_find_element[open-css selector-#linkText\]]
+ expected: FAIL
+
+ [test_find_element[open-link text-full link text\]]
+ expected: FAIL
+
+ [test_find_element[open-partial link text-link text\]]
+ expected: FAIL
+
+ [test_find_element[open-tag name-a\]]
+ expected: FAIL
+
+ [test_find_element[open-xpath-//a\]]
+ expected: FAIL
+
+ [test_find_element[closed-css selector-#linkText\]]
+ expected: FAIL
+
+ [test_find_element[closed-link text-full link text\]]
+ expected: FAIL
+
+ [test_find_element[closed-partial link text-link text\]]
+ expected: FAIL
+
+ [test_find_element[closed-tag name-a\]]
+ expected: FAIL
+
+ [test_find_element[closed-xpath-//a\]]
+ expected: FAIL
+
+ [test_find_element_link_text[<a href=#>link text</a>-link text\]]
+ expected: FAIL
+
+ [test_find_element_link_text[<a href=#>&nbsp;link text&nbsp;</a>-link text\]]
+ expected: FAIL
+
+ [test_find_element_link_text[<a href=#>link<br>text</a>-link\\ntext\]]
+ expected: FAIL
+
+ [test_find_element_link_text[<a href=#>link&amp;text</a>-link&text\]]
+ expected: FAIL
+
+ [test_find_element_link_text[<a href=#>LINK TEXT</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_element_link_text[<a href=# style='text-transform: uppercase'>link text</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_element_partial_link_text[<a href=#>partial link text</a>-link\]]
+ expected: FAIL
+
+ [test_find_element_partial_link_text[<a href=#>&nbsp;partial link text&nbsp;</a>-link\]]
+ expected: FAIL
+
+ [test_find_element_partial_link_text[<a href=#>partial link text</a>-k t\]]
+ expected: FAIL
+
+ [test_find_element_partial_link_text[<a href=#>partial link<br>text</a>-k\\nt\]]
+ expected: FAIL
+
+ [test_find_element_partial_link_text[<a href=#>partial link&amp;text</a>-k&t\]]
+ expected: FAIL
+
+ [test_find_element_partial_link_text[<a href=#>PARTIAL LINK TEXT</a>-LINK\]]
+ expected: FAIL
+
+ [test_find_element_partial_link_text[<a href=# style='text-transform: uppercase'>partial link text</a>-LINK\]]
+ expected: FAIL
+
+ [test_find_element_in_nested_shadow_root[open\]]
+ expected: FAIL
+
+ [test_find_element_in_nested_shadow_root[closed\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_element_from_shadow_root/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini
new file mode 100644
index 00000000000..44f232824bb
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements/find.py.ini
@@ -0,0 +1,76 @@
+[find.py]
+ expected: TIMEOUT
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_find_elements[css selector-#linkText\]]
+ expected: FAIL
+
+ [test_find_elements[link text-full link text\]]
+ expected: FAIL
+
+ [test_find_elements[partial link text-link text\]]
+ expected: FAIL
+
+ [test_find_elements[tag name-a\]]
+ expected: FAIL
+
+ [test_find_elements[xpath-//a\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link text</a>-link text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>&nbsp;link text&nbsp;</a>-link text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link<br>text</a>-link\\ntext\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link&amp;text</a>-link&text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>LINK TEXT</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=# style='text-transform: uppercase'>link text</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link text</a>-link\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>&nbsp;partial link text&nbsp;</a>-link\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link text</a>-k t\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link<br>text</a>-k\\nt\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link&amp;text</a>-k&t\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>PARTIAL LINK TEXT</a>-LINK\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=# style='text-transform: uppercase'>partial link text</a>-LINK\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[css selector-#linkText\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[link text-full link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[partial link text-link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[tag name-a\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[xpath-//*[name()='a'\]\]]
+ expected: FAIL
+
+ [test_htmldocument[xpath-/html\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini
new file mode 100644
index 00000000000..69ec1b4bbcc
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/find.py.ini
@@ -0,0 +1,82 @@
+[find.py]
+ expected: TIMEOUT
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_with_startnode_from_other_window_handle]
+ expected: FAIL
+
+ [test_no_such_element_with_startnode_from_other_frame]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_find_elements[xpath-//a\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link text</a>-link text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>&nbsp;link text&nbsp;</a>-link text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link<br>text</a>-link\\ntext\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link&amp;text</a>-link&text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>LINK TEXT</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=# style='text-transform: uppercase'>link text</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link text</a>-link\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>&nbsp;partial link text&nbsp;</a>-link\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link text</a>-k t\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link<br>text</a>-k\\nt\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link&amp;text</a>-k&t\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>PARTIAL LINK TEXT</a>-LINK\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=# style='text-transform: uppercase'>partial link text</a>-LINK\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[css selector-#linkText\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[link text-full link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[partial link text-link text\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[tag name-a\]]
+ expected: FAIL
+
+ [test_xhtml_namespace[xpath-//*[name()='a'\]\]]
+ expected: FAIL
+
+ [test_parent_htmldocument]
+ expected: FAIL
+
+ [test_parent_of_document_node_errors]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_element/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini
new file mode 100644
index 00000000000..5328af1b701
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/find.py.ini
@@ -0,0 +1,157 @@
+[find.py]
+ expected: TIMEOUT
+ [test_null_parameter_value]
+ expected: FAIL
+
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_no_such_shadow_root_with_element]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_unknown_shadow_root]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_shadow_root_from_other_window_handle]
+ expected: FAIL
+
+ [test_no_such_shadow_root_with_shadow_root_from_other_frame]
+ expected: FAIL
+
+ [test_detached_shadow_root[top_context\]]
+ expected: FAIL
+
+ [test_detached_shadow_root[child_context\]]
+ expected: FAIL
+
+ [test_no_elements_with_unknown_selector[not-existent\]]
+ expected: FAIL
+
+ [test_no_elements_with_unknown_selector[existent-other-frame\]]
+ expected: FAIL
+
+ [test_no_elements_with_unknown_selector[existent-outside-shadow-root\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[True\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[None\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[1\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[shadow_root_id3\]]
+ expected: FAIL
+
+ [test_invalid_shadow_root_id_argument[shadow_root_id4\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[a\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[True\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[None\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[1\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[using4\]]
+ expected: FAIL
+
+ [test_invalid_using_argument[using5\]]
+ expected: FAIL
+
+ [test_invalid_selector_argument[None\]]
+ expected: FAIL
+
+ [test_invalid_selector_argument[value1\]]
+ expected: FAIL
+
+ [test_invalid_selector_argument[value2\]]
+ expected: FAIL
+
+ [test_find_elements_equivalence]
+ expected: FAIL
+
+ [test_find_elements[open-css selector-#linkText\]]
+ expected: FAIL
+
+ [test_find_elements[open-link text-full link text\]]
+ expected: FAIL
+
+ [test_find_elements[open-partial link text-link text\]]
+ expected: FAIL
+
+ [test_find_elements[open-tag name-a\]]
+ expected: FAIL
+
+ [test_find_elements[open-xpath-//a\]]
+ expected: FAIL
+
+ [test_find_elements[closed-css selector-#linkText\]]
+ expected: FAIL
+
+ [test_find_elements[closed-link text-full link text\]]
+ expected: FAIL
+
+ [test_find_elements[closed-partial link text-link text\]]
+ expected: FAIL
+
+ [test_find_elements[closed-tag name-a\]]
+ expected: FAIL
+
+ [test_find_elements[closed-xpath-//a\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link text</a>-link text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>&nbsp;link text&nbsp;</a>-link text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link<br>text</a>-link\\ntext\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>link&amp;text</a>-link&text\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=#>LINK TEXT</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_elements_link_text[<a href=# style='text-transform: uppercase'>link text</a>-LINK TEXT\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link text</a>-link\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>&nbsp;partial link text&nbsp;</a>-link\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link text</a>-k t\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link<br>text</a>-k\\nt\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>partial link&amp;text</a>-k&t\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=#>PARTIAL LINK TEXT</a>-LINK\]]
+ expected: FAIL
+
+ [test_find_elements_partial_link_text[<a href=# style='text-transform: uppercase'>partial link text</a>-LINK\]]
+ expected: FAIL
+
+ [test_find_elements_in_nested_shadow_root[open\]]
+ expected: FAIL
+
+ [test_find_elements_in_nested_shadow_root[closed\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/find_elements_from_shadow_root/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/forward/forward.py.ini b/tests/wpt/meta/webdriver/tests/classic/forward/forward.py.ini
new file mode 100644
index 00000000000..12538247f27
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/forward/forward.py.ini
@@ -0,0 +1,34 @@
+[forward.py]
+ disabled: consistent panic
+ [test_no_top_browsing_context]
+ expected: ERROR
+
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_basic]
+ expected: ERROR
+
+ [test_no_browsing_history]
+ expected: ERROR
+
+ [test_seen_nodes[http\]]
+ expected: ERROR
+
+ [test_seen_nodes[https\]]
+ expected: ERROR
+
+ [test_seen_nodes[https coop\]]
+ expected: ERROR
+
+ [test_history_pushstate]
+ expected: ERROR
+
+ [test_data_urls]
+ expected: ERROR
+
+ [test_fragments]
+ expected: ERROR
+
+ [test_removed_iframe]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/forward/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/forward/user_prompts.py.ini
new file mode 100644
index 00000000000..326fdd875ad
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/forward/user_prompts.py.ini
@@ -0,0 +1,3 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/from_minimized_window.py.ini b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/from_minimized_window.py.ini
new file mode 100644
index 00000000000..99b10143b3e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/from_minimized_window.py.ini
@@ -0,0 +1,3 @@
+[from_minimized_window.py]
+ [test_fullscreen_from_minimized_window]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/fullscreen.py.ini b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/fullscreen.py.ini
new file mode 100644
index 00000000000..d03f4481fba
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/fullscreen.py.ini
@@ -0,0 +1,18 @@
+[fullscreen.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_response_payload]
+ expected: FAIL
+
+ [test_fullscreen_from_normal_window]
+ expected: FAIL
+
+ [test_fullscreen_from_maximized_window]
+ expected: FAIL
+
+ [test_fullscreen_twice_is_idempotent]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/stress.py.ini b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/stress.py.ini
new file mode 100644
index 00000000000..a6c136ac885
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/stress.py.ini
@@ -0,0 +1,15 @@
+[stress.py]
+ [test_stress[0\]]
+ expected: FAIL
+
+ [test_stress[1\]]
+ expected: FAIL
+
+ [test_stress[2\]]
+ expected: FAIL
+
+ [test_stress[3\]]
+ expected: FAIL
+
+ [test_stress[4\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/fullscreen_window/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_active_element/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_active_element/get.py.ini
new file mode 100644
index 00000000000..2d7e863ee5b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_active_element/get.py.ini
@@ -0,0 +1,6 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_active_element/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_active_element/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_active_element/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_alert_text/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_alert_text/get.py.ini
new file mode 100644
index 00000000000..fa50e27c0d1
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_alert_text/get.py.ini
@@ -0,0 +1,22 @@
+[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]
+ expected: FAIL
+
+ [test_get_confirm_text]
+ expected: FAIL
+
+ [test_get_prompt_text]
+ expected: FAIL
+
+ [test_unexpected_alert]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_computed_label/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_computed_label/get.py.ini
new file mode 100644
index 00000000000..6f7cda2f119
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_computed_label/get.py.ini
@@ -0,0 +1,42 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_invalid_value]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_get_computed_label[<button>ok</button>-button-ok\]]
+ expected: FAIL
+
+ [test_get_computed_label[<button aria-labelledby="one two"></button><div id=one>ok</div><div id=two>go</div>-button-ok go\]]
+ expected: FAIL
+
+ [test_get_computed_label[<button aria-label=foo>bar</button>-button-foo\]]
+ expected: FAIL
+
+ [test_get_computed_label[<label><input> foo</label>-input-foo\]]
+ expected: FAIL
+
+ [test_get_computed_label[<label for=b>foo<label><input id=b>-input-foo\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_computed_label/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_computed_label/user_prompts.py.ini
new file mode 100644
index 00000000000..913351aaa55
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_computed_label/user_prompts.py.ini
@@ -0,0 +1,2 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734 \ No newline at end of file
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
new file mode 100644
index 00000000000..abd4a7750b7
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/get.py.ini
@@ -0,0 +1,24 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_computed_roles[<article>foo</article>-article-article\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_computed_role/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/user_prompts.py.ini
new file mode 100644
index 00000000000..b168410dab1
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_computed_role/user_prompts.py.ini
@@ -0,0 +1,2 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_current_url/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_current_url/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_current_url/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
new file mode 100644
index 00000000000..69b4a4c7d0b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/get.py.ini
@@ -0,0 +1,94 @@
+[get.py]
+ expected: TIMEOUT
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_normal]
+ expected: FAIL
+
+ [test_boolean_attribute[audio-attrs0\]]
+ expected: FAIL
+
+ [test_boolean_attribute[button-attrs1\]]
+ expected: FAIL
+
+ [test_boolean_attribute[details-attrs2\]]
+ expected: FAIL
+
+ [test_boolean_attribute[dialog-attrs3\]]
+ expected: FAIL
+
+ [test_boolean_attribute[fieldset-attrs4\]]
+ expected: FAIL
+
+ [test_boolean_attribute[form-attrs5\]]
+ expected: FAIL
+
+ [test_boolean_attribute[iframe-attrs6\]]
+ expected: FAIL
+
+ [test_boolean_attribute[img-attrs7\]]
+ expected: FAIL
+
+ [test_boolean_attribute[input-attrs8\]]
+ expected: FAIL
+
+ [test_boolean_attribute[menuitem-attrs9\]]
+ expected: FAIL
+
+ [test_boolean_attribute[ol-attrs10\]]
+ expected: FAIL
+
+ [test_boolean_attribute[optgroup-attrs11\]]
+ expected: FAIL
+
+ [test_boolean_attribute[option-attrs12\]]
+ expected: FAIL
+
+ [test_boolean_attribute[script-attrs13\]]
+ expected: FAIL
+
+ [test_boolean_attribute[select-attrs14\]]
+ expected: FAIL
+
+ [test_boolean_attribute[textarea-attrs15\]]
+ expected: FAIL
+
+ [test_boolean_attribute[track-attrs16\]]
+ expected: FAIL
+
+ [test_boolean_attribute[video-attrs17\]]
+ expected: FAIL
+
+ [test_global_boolean_attributes]
+ expected: FAIL
+
+ [test_anchor_href[relative\]]
+ expected: FAIL
+
+ [test_anchor_href[absolute\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_attribute/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
new file mode 100644
index 00000000000..bcd25112776
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/get.py.ini
@@ -0,0 +1,21 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_css_value/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
new file mode 100644
index 00000000000..646e2846e18
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_property/get.py.ini
@@ -0,0 +1,94 @@
+[get.py]
+ expected: TIMEOUT
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_property_non_existent]
+ expected: FAIL
+
+ [test_content_attribute]
+ expected: FAIL
+
+ [test_idl_attribute]
+ expected: FAIL
+
+ [test_primitives["foobar"-foobar\]]
+ expected: FAIL
+
+ [test_primitives[42-42\]]
+ expected: FAIL
+
+ [test_primitives[js_primitive2-py_primitive2\]]
+ expected: FAIL
+
+ [test_primitives[js_primitive3-py_primitive3\]]
+ expected: FAIL
+
+ [test_primitives[null-None\]]
+ expected: FAIL
+
+ [test_primitives[undefined-None\]]
+ expected: FAIL
+
+ [test_collection_dom_token_list]
+ expected: FAIL
+
+ [test_primitives_set_by_execute_script["foobar"-foobar\]]
+ expected: FAIL
+
+ [test_primitives_set_by_execute_script[42-42\]]
+ expected: FAIL
+
+ [test_primitives_set_by_execute_script[js_primitive2-py_primitive2\]]
+ expected: FAIL
+
+ [test_primitives_set_by_execute_script[js_primitive3-py_primitive3\]]
+ expected: FAIL
+
+ [test_primitives_set_by_execute_script[null-None\]]
+ expected: FAIL
+
+ [test_primitives_set_by_execute_script[undefined-None\]]
+ expected: FAIL
+
+ [test_web_reference[frame-WebFrame\]]
+ expected: FAIL
+
+ [test_web_reference[shadowRoot-ShadowRoot\]]
+ expected: FAIL
+
+ [test_web_reference[window-WebWindow\]]
+ expected: FAIL
+
+ [test_mutated_element]
+ expected: FAIL
+
+ [test_anchor_href[relative\]]
+ expected: FAIL
+
+ [test_anchor_href[absolute\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_property/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_property/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_property/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
new file mode 100644
index 00000000000..065e9fbc4ce
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/get.py.ini
@@ -0,0 +1,24 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_basic]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_rect/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_rect/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini
new file mode 100644
index 00000000000..1b3957f08c8
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/get.py.ini
@@ -0,0 +1,33 @@
+[get.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_invalid_value]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_get_shadow_root]
+ expected: FAIL
+
+ [test_no_shadow_root]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_shadow_root/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
new file mode 100644
index 00000000000..b810c389100
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/get.py.ini
@@ -0,0 +1,24 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_get_element_tag_name]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_tag_name/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
new file mode 100644
index 00000000000..5f04f967054
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_text/get.py.ini
@@ -0,0 +1,42 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_transform_capitalize[space\]]
+ expected: FAIL
+
+ [test_transform_capitalize[dash\]]
+ expected: FAIL
+
+ [test_transform_capitalize[underscore\]]
+ expected: FAIL
+
+ [test_shadow_root_slot[custom outside\]]
+ expected: FAIL
+
+ [test_shadow_root_slot[default visible\]]
+ expected: FAIL
+
+ [test_shadow_root_slot[default outside\]]
+ expected: FAIL
+
+ [test_shadow_root_slot[default hidden\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_element_text/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_element_text/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_element_text/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_named_cookie/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_named_cookie/get.py.ini
new file mode 100644
index 00000000000..93b889d3a59
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_named_cookie/get.py.ini
@@ -0,0 +1,12 @@
+[get.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_get_named_session_cookie]
+ expected: FAIL
+
+ [test_get_named_cookie]
+ expected: FAIL
+
+ [test_duplicated_cookie]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_named_cookie/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_named_cookie/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_named_cookie/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_page_source/source.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_page_source/source.py.ini
new file mode 100644
index 00000000000..f1326acbc2f
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_page_source/source.py.ini
@@ -0,0 +1,3 @@
+[source.py]
+ [test_no_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_page_source/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_page_source/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_page_source/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_title/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_title/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_title/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_window_handle/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_window_handle/get.py.ini
new file mode 100644
index 00000000000..0fb70be2b4d
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_window_handle/get.py.ini
@@ -0,0 +1,3 @@
+[get.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_window_handle/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_window_handle/user_prompts.py.ini
new file mode 100644
index 00000000000..0bc849b2704
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_window_handle/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert\]]
+ expected: FAIL
+
+ [test_default[confirm\]]
+ expected: FAIL
+
+ [test_default[prompt\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_window_handles/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_window_handles/user_prompts.py.ini
new file mode 100644
index 00000000000..0bc849b2704
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_window_handles/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert\]]
+ expected: FAIL
+
+ [test_default[confirm\]]
+ expected: FAIL
+
+ [test_default[prompt\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_window_rect/get.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_window_rect/get.py.ini
new file mode 100644
index 00000000000..3394ac22306
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_window_rect/get.py.ini
@@ -0,0 +1,6 @@
+[get.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_payload]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/get_window_rect/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/get_window_rect/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/get_window_rect/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/idlharness.window.js.ini b/tests/wpt/meta/webdriver/tests/classic/idlharness.window.js.ini
new file mode 100644
index 00000000000..ee8e266e35f
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/idlharness.window.js.ini
@@ -0,0 +1,6 @@
+[idlharness.window.html]
+ [Navigator interface: attribute webdriver]
+ expected: FAIL
+
+ [Navigator interface: navigator must inherit property "webdriver" with the proper type]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/interface/interface.py.ini b/tests/wpt/meta/webdriver/tests/classic/interface/interface.py.ini
new file mode 100644
index 00000000000..9efc2c79243
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/interface/interface.py.ini
@@ -0,0 +1,3 @@
+[interface.py]
+ [test_navigator_webdriver_active]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
new file mode 100644
index 00000000000..1f97f812861
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/enabled.py.ini
@@ -0,0 +1,2 @@
+[enabled.py]
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/user_prompts.py.ini
new file mode 100644
index 00000000000..913351aaa55
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_enabled/user_prompts.py.ini
@@ -0,0 +1,2 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734 \ No newline at end of file
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
new file mode 100644
index 00000000000..f75724979c5
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/selected.py.ini
@@ -0,0 +1,21 @@
+[selected.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/is_element_selected/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/is_element_selected/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/maximize_window/from_minimized_window.py.ini b/tests/wpt/meta/webdriver/tests/classic/maximize_window/from_minimized_window.py.ini
new file mode 100644
index 00000000000..5d3e1ccc1b2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/maximize_window/from_minimized_window.py.ini
@@ -0,0 +1,3 @@
+[from_minimized_window.py]
+ [test_restore_from_minimized]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/maximize_window/maximize.py.ini b/tests/wpt/meta/webdriver/tests/classic/maximize_window/maximize.py.ini
new file mode 100644
index 00000000000..83d5c2fcf84
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/maximize_window/maximize.py.ini
@@ -0,0 +1,21 @@
+[maximize.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_response_payload]
+ expected: FAIL
+
+ [test_fully_exit_fullscreen]
+ expected: FAIL
+
+ [test_maximize_from_normal_window]
+ expected: FAIL
+
+ [test_maximize_with_window_already_at_maximum_size]
+ expected: FAIL
+
+ [test_maximize_twice_is_idempotent]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/maximize_window/stress.py.ini b/tests/wpt/meta/webdriver/tests/classic/maximize_window/stress.py.ini
new file mode 100644
index 00000000000..a6c136ac885
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/maximize_window/stress.py.ini
@@ -0,0 +1,15 @@
+[stress.py]
+ [test_stress[0\]]
+ expected: FAIL
+
+ [test_stress[1\]]
+ expected: FAIL
+
+ [test_stress[2\]]
+ expected: FAIL
+
+ [test_stress[3\]]
+ expected: FAIL
+
+ [test_stress[4\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/maximize_window/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/maximize_window/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/maximize_window/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/minimize_window/minimize.py.ini b/tests/wpt/meta/webdriver/tests/classic/minimize_window/minimize.py.ini
new file mode 100644
index 00000000000..75af78405d0
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/minimize_window/minimize.py.ini
@@ -0,0 +1,21 @@
+[minimize.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_response_payload]
+ expected: FAIL
+
+ [test_restore_from_fullscreen]
+ expected: FAIL
+
+ [test_restore_from_maximized]
+ expected: FAIL
+
+ [test_minimize_from_normal_window]
+ expected: FAIL
+
+ [test_minimize_twice_is_idempotent]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/minimize_window/stress.py.ini b/tests/wpt/meta/webdriver/tests/classic/minimize_window/stress.py.ini
new file mode 100644
index 00000000000..a6c136ac885
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/minimize_window/stress.py.ini
@@ -0,0 +1,15 @@
+[stress.py]
+ [test_stress[0\]]
+ expected: FAIL
+
+ [test_stress[1\]]
+ expected: FAIL
+
+ [test_stress[2\]]
+ expected: FAIL
+
+ [test_stress[3\]]
+ expected: FAIL
+
+ [test_stress[4\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/minimize_window/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/minimize_window/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/minimize_window/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/navigate_to/navigate.py.ini b/tests/wpt/meta/webdriver/tests/classic/navigate_to/navigate.py.ini
new file mode 100644
index 00000000000..2464f4b2b4d
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/navigate_to/navigate.py.ini
@@ -0,0 +1,12 @@
+[navigate.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_seen_nodes[http\]]
+ expected: FAIL
+
+ [test_seen_nodes[https\]]
+ expected: FAIL
+
+ [test_seen_nodes[https coop\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/navigate_to/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/navigate_to/user_prompts.py.ini
new file mode 100644
index 00000000000..fcf10a0526c
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/navigate_to/user_prompts.py.ini
@@ -0,0 +1,73 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_session/create_alwaysMatch.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_session/create_alwaysMatch.py.ini
new file mode 100644
index 00000000000..c837e638bb0
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_session/create_alwaysMatch.py.ini
@@ -0,0 +1,21 @@
+[create_alwaysMatch.py]
+ [test_valid[timeouts-value12\]]
+ expected: FAIL
+
+ [test_valid[strictFileInteractability-True\]]
+ expected: FAIL
+
+ [test_valid[test:extension-False\]]
+ expected: FAIL
+
+ [test_valid[test:extension-abc\]]
+ expected: FAIL
+
+ [test_valid[test:extension-123\]]
+ expected: FAIL
+
+ [test_valid[test:extension-value22\]]
+ expected: FAIL
+
+ [test_valid[test:extension-value23\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_session/create_firstMatch.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_session/create_firstMatch.py.ini
new file mode 100644
index 00000000000..3752bebca7b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_session/create_firstMatch.py.ini
@@ -0,0 +1,21 @@
+[create_firstMatch.py]
+ [test_valid[timeouts-value12\]]
+ expected: FAIL
+
+ [test_valid[strictFileInteractability-True\]]
+ expected: FAIL
+
+ [test_valid[test:extension-False\]]
+ expected: FAIL
+
+ [test_valid[test:extension-abc\]]
+ expected: FAIL
+
+ [test_valid[test:extension-123\]]
+ expected: FAIL
+
+ [test_valid[test:extension-value22\]]
+ expected: FAIL
+
+ [test_valid[test:extension-value23\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_session/response.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_session/response.py.ini
new file mode 100644
index 00000000000..b5c5cede365
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_session/response.py.ini
@@ -0,0 +1,3 @@
+[response.py]
+ [test_capability_user_agent]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini
new file mode 100644
index 00000000000..ff2e1c72126
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_session/unhandled_prompt_behavior.py.ini
@@ -0,0 +1,24 @@
+[unhandled_prompt_behavior.py]
+ [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
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_session/websocket_url.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_session/websocket_url.py.ini
new file mode 100644
index 00000000000..76e42fd0ed0
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_session/websocket_url.py.ini
@@ -0,0 +1,3 @@
+[websocket_url.py]
+ [test_bidi_upgrade]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini
new file mode 100644
index 00000000000..7288018eebf
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_window/new.py.ini
@@ -0,0 +1,6 @@
+[new.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini
new file mode 100644
index 00000000000..77be6174789
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_window/new_tab.py.ini
@@ -0,0 +1,15 @@
+[new_tab.py]
+ [test_keeps_current_window_handle]
+ expected: ERROR
+
+ [test_opens_about_blank_in_new_tab]
+ expected: ERROR
+
+ [test_initial_selection_for_contenteditable]
+ expected: ERROR
+
+ [test_sets_no_window_name]
+ expected: ERROR
+
+ [test_sets_no_opener]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini
new file mode 100644
index 00000000000..5ea6fe581f7
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_window/new_window.py.ini
@@ -0,0 +1,12 @@
+[new_window.py]
+ [test_payload]
+ expected: FAIL
+
+ [test_keeps_current_window_handle]
+ expected: FAIL
+
+ [test_opens_about_blank_in_new_window]
+ expected: FAIL
+
+ [test_initial_selection_for_contenteditable]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/new_window/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/new_window/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/new_window/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/invalid.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/invalid.py.ini
new file mode 100644
index 00000000000..39649c5204a
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/invalid.py.ini
@@ -0,0 +1,91 @@
+[invalid.py]
+ expected: TIMEOUT
+ [test_input_source_action_sequence_actions_pause_duration_invalid_value[9007199254740992-none\]]
+ expected: FAIL
+
+ [test_input_source_action_sequence_actions_pause_duration_invalid_value[9007199254740992-key\]]
+ expected: FAIL
+
+ [test_input_source_action_sequence_actions_pause_duration_invalid_value[9007199254740992-pointer\]]
+ expected: FAIL
+
+ [test_input_source_action_sequence_actions_pause_duration_invalid_value[9007199254740992-wheel\]]
+ expected: FAIL
+
+ [test_pointer_action_up_down_button_invalid_value[9007199254740992-pointerDown\]]
+ expected: FAIL
+
+ [test_pointer_action_up_down_button_invalid_value[9007199254740992-pointerUp\]]
+ expected: FAIL
+
+ [test_pointer_action_common_properties_dimensions_invalid_value[9007199254740992-width-pointerDown\]]
+ expected: FAIL
+
+ [test_pointer_action_common_properties_dimensions_invalid_value[9007199254740992-width-pointerMove\]]
+ expected: FAIL
+
+ [test_pointer_action_common_properties_dimensions_invalid_value[9007199254740992-width-pointerUp\]]
+ expected: FAIL
+
+ [test_pointer_action_common_properties_dimensions_invalid_value[9007199254740992-height-pointerDown\]]
+ expected: FAIL
+
+ [test_pointer_action_common_properties_dimensions_invalid_value[9007199254740992-height-pointerMove\]]
+ expected: FAIL
+
+ [test_pointer_action_common_properties_dimensions_invalid_value[9007199254740992-height-pointerUp\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_coordinate_invalid_type[None-x\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_coordinate_invalid_type[None-y\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_coordinate_invalid_value[-9007199254740992-x\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_coordinate_invalid_value[-9007199254740992-y\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_coordinate_invalid_value[9007199254740992-x\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_coordinate_invalid_value[9007199254740992-y\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_delta_invalid_type[None-x\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_delta_invalid_type[None-y\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_delta_invalid_value[-9007199254740992-x\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_delta_invalid_value[-9007199254740992-y\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_delta_invalid_value[9007199254740992-x\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_delta_invalid_value[9007199254740992-y\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_origin_pointer_not_supported]
+ expected: FAIL
+
+ [test_wheel_action_scroll_origin_element_invalid_value]
+ expected: FAIL
+
+ [test_wheel_action_scroll_missing_property[x\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_missing_property[y\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_missing_property[deltaX\]]
+ expected: FAIL
+
+ [test_wheel_action_scroll_missing_property[deltaY\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
new file mode 100644
index 00000000000..0a9efbca289
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key.py.ini
@@ -0,0 +1,24 @@
+[key.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_key_down_closes_browsing_context]
+ expected: FAIL
+
+ [test_backspace_erases_keys]
+ expected: FAIL
+
+ [test_element_in_shadow_tree[outer-open\]]
+ expected: FAIL
+
+ [test_element_in_shadow_tree[outer-closed\]]
+ expected: FAIL
+
+ [test_element_in_shadow_tree[inner-open\]]
+ expected: FAIL
+
+ [test_element_in_shadow_tree[inner-closed\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini
new file mode 100644
index 00000000000..6dabfbb793f
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_events.py.ini
@@ -0,0 +1,273 @@
+[key_events.py]
+ [test_modifier_key_sends_correct_events[\\ue00a-ALT\]]
+ expected: FAIL
+
+ [test_modifier_key_sends_correct_events[\\ue009-CONTROL\]]
+ expected: FAIL
+
+ [test_modifier_key_sends_correct_events[\\ue03d-META\]]
+ expected: FAIL
+
+ [test_modifier_key_sends_correct_events[\\ue008-SHIFT\]]
+ expected: FAIL
+
+ [test_modifier_key_sends_correct_events[\\ue052-R_ALT\]]
+ expected: FAIL
+
+ [test_modifier_key_sends_correct_events[\\ue051-R_CONTROL\]]
+ expected: FAIL
+
+ [test_modifier_key_sends_correct_events[\\ue053-R_META\]]
+ expected: FAIL
+
+ [test_modifier_key_sends_correct_events[\\ue050-R_SHIFT\]]
+ expected: FAIL
+
+ [test_non_printable_key_sends_events[\\ue00c-ESCAPE\]]
+ expected: FAIL
+
+ [test_non_printable_key_sends_events[\\ue014-RIGHT\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[a-KeyA0\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[a-KeyA1\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events["-Quote\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[,-Comma\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[\\xe0-\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[\\u0416-\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[@-Digit2\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[\\u2603-\]]
+ expected: FAIL
+
+ [test_printable_key_sends_correct_events[\\uf6c2-\]]
+ expected: FAIL
+
+ [test_sequence_of_keydown_printable_keys_sends_events]
+ expected: FAIL
+
+ [test_sequence_of_keydown_printable_characters_sends_events]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[ADD-expected0\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[ALT-expected1\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[BACKSPACE-expected2\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[CANCEL-expected3\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[CLEAR-expected4\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[CONTROL-expected5\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[DECIMAL-expected6\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[DELETE-expected7\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[DIVIDE-expected8\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[DOWN-expected9\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[END-expected10\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[ENTER-expected11\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[EQUALS-expected12\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[ESCAPE-expected13\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F1-expected14\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F10-expected15\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F11-expected16\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F12-expected17\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F2-expected18\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F3-expected19\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F4-expected20\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F5-expected21\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F6-expected22\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F7-expected23\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F8-expected24\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[F9-expected25\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[HELP-expected26\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[HOME-expected27\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[INSERT-expected28\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[LEFT-expected29\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[META-expected30\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[MULTIPLY-expected31\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NULL-expected32\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD0-expected33\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD1-expected34\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD2-expected35\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD3-expected36\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD4-expected37\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD5-expected38\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD6-expected39\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD7-expected40\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD8-expected41\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[NUMPAD9-expected42\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[PAGE_DOWN-expected43\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[PAGE_UP-expected44\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[PAUSE-expected45\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[RETURN-expected46\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[RIGHT-expected47\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_ALT-expected48\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_ARROWDOWN-expected49\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_ARROWLEFT-expected50\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_ARROWRIGHT-expected51\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_ARROWUP-expected52\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_CONTROL-expected53\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_DELETE-expected54\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_END-expected55\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_HOME-expected56\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_INSERT-expected57\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_META-expected58\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_PAGEDOWN-expected59\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_PAGEUP-expected60\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[R_SHIFT-expected61\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[SEMICOLON-expected62\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[SEPARATOR-expected63\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[SHIFT-expected64\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[SPACE-expected65\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[SUBTRACT-expected66\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[TAB-expected67\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[UP-expected68\]]
+ expected: FAIL
+
+ [test_special_key_sends_keydown[ZENKAKUHANKAKU-expected69\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini
new file mode 100644
index 00000000000..70b4b687388
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_modifiers.py.ini
@@ -0,0 +1,12 @@
+[key_modifiers.py]
+ [test_shift_modifier_and_non_printable_keys[\\ue008\]]
+ expected: FAIL
+
+ [test_shift_modifier_and_non_printable_keys[\\ue050\]]
+ expected: FAIL
+
+ [test_shift_modifier_generates_capital_letters[\\ue008\]]
+ expected: FAIL
+
+ [test_shift_modifier_generates_capital_letters[\\ue050\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini
new file mode 100644
index 00000000000..43e9ac6cf32
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_shortcuts.py.ini
@@ -0,0 +1,3 @@
+[key_shortcuts.py]
+ [test_mod_a_mod_c_right_mod_v_pastes_text]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini
new file mode 100644
index 00000000000..9f97050ec49
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_special_keys.py.ini
@@ -0,0 +1,12 @@
+[key_special_keys.py]
+ [test_codepoint_keys_behave_correctly[\\U0001f604\]]
+ expected: FAIL
+
+ [test_codepoint_keys_behave_correctly[\\U0001f60d\]]
+ expected: FAIL
+
+ [test_codepoint_keys_behave_correctly[\\u0ba8\\u0bbf\]]
+ expected: FAIL
+
+ [test_codepoint_keys_behave_correctly[\\u1100\\u1161\\u11a8\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_tentative.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_tentative.py.ini
new file mode 100644
index 00000000000..a16bb76d7c7
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/key_tentative.py.ini
@@ -0,0 +1,6 @@
+[key_tentative.py]
+ [test_grapheme_cluster[\\u0e01\\u0e33\]]
+ expected: FAIL
+
+ [test_grapheme_cluster[\\U0001f937\\U0001f3fd\\u200d\\u2640\\ufe0f\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini
new file mode 100644
index 00000000000..38af76d3cf4
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/navigation.py.ini
@@ -0,0 +1,6 @@
+[navigation.py]
+ [test_key]
+ expected: FAIL
+
+ [test_pointer]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/none.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/none.py.ini
new file mode 100644
index 00000000000..1dad7888c51
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/none.py.ini
@@ -0,0 +1,6 @@
+[none.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/perform.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/perform.py.ini
new file mode 100644
index 00000000000..b4a8841b9ae
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/perform.py.ini
@@ -0,0 +1,9 @@
+[perform.py]
+ [test_input_source_action_sequence_actions_pause_duration_valid[wheel\]]
+ expected: FAIL
+
+ [test_input_source_action_sequence_actions_pause_duration_missing[wheel\]]
+ expected: FAIL
+
+ [test_input_source_action_sequence_pointer_parameters_not_processed[wheel\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini
new file mode 100644
index 00000000000..e0fb2381634
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_contextmenu.py.ini
@@ -0,0 +1,9 @@
+[pointer_contextmenu.py]
+ [test_control_click[\\ue009-ctrlKey\]]
+ expected: ERROR
+
+ [test_control_click[\\ue051-ctrlKey\]]
+ expected: ERROR
+
+ [test_release_control_click]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini
new file mode 100644
index 00000000000..523d8d29edb
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_dblclick.py.ini
@@ -0,0 +1,9 @@
+[pointer_dblclick.py]
+ [test_dblclick_at_coordinates[0\]]
+ expected: FAIL
+
+ [test_dblclick_at_coordinates[200\]]
+ expected: FAIL
+
+ [test_no_dblclick_when_mouse_moves]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini
new file mode 100644
index 00000000000..ebb9ef4dcc0
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_modifier_click.py.ini
@@ -0,0 +1,21 @@
+[pointer_modifier_click.py]
+ [test_modifier_click[\\ue00a-altKey\]]
+ expected: ERROR
+
+ [test_modifier_click[\\ue052-altKey\]]
+ expected: ERROR
+
+ [test_modifier_click[\\ue03d-metaKey\]]
+ expected: ERROR
+
+ [test_modifier_click[\\ue053-metaKey\]]
+ expected: ERROR
+
+ [test_modifier_click[\\ue008-shiftKey\]]
+ expected: ERROR
+
+ [test_modifier_click[\\ue050-shiftKey\]]
+ expected: ERROR
+
+ [test_many_modifiers_click]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini
new file mode 100644
index 00000000000..4a163fe2fac
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse.py.ini
@@ -0,0 +1,64 @@
+[pointer_mouse.py]
+ expected: TIMEOUT
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: ERROR
+
+ [test_pointer_down_closes_browsing_context]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_click_at_coordinates]
+ expected: FAIL
+
+ [test_context_menu_at_coordinates]
+ expected: FAIL
+
+ [test_middle_click]
+ expected: FAIL
+
+ [test_click_element_center]
+ expected: FAIL
+
+ [test_click_element_in_shadow_tree[outer-open\]]
+ expected: FAIL
+
+ [test_click_element_in_shadow_tree[outer-closed\]]
+ expected: FAIL
+
+ [test_click_element_in_shadow_tree[inner-open\]]
+ expected: FAIL
+
+ [test_click_element_in_shadow_tree[inner-closed\]]
+ expected: FAIL
+
+ [test_click_navigation]
+ expected: FAIL
+
+ [test_move_to_position_in_viewport[x\]]
+ expected: FAIL
+
+ [test_move_to_position_in_viewport[y\]]
+ expected: FAIL
+
+ [test_move_to_fractional_position]
+ expected: FAIL
+
+ [test_move_to_origin_position_within_frame[viewport\]]
+ expected: FAIL
+
+ [test_move_to_origin_position_within_frame[pointer\]]
+ expected: FAIL
+
+ [test_move_to_origin_position_within_frame[element\]]
+ expected: FAIL
+
+ [test_invalid_element_origin]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse_drag.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse_drag.py.ini
new file mode 100644
index 00000000000..8657edd79e8
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_mouse_drag.py.ini
@@ -0,0 +1,63 @@
+[pointer_mouse_drag.py]
+ [test_drag_and_drop[20-0-0\]]
+ expected: ERROR
+
+ [test_drag_and_drop[20-0-300\]]
+ expected: ERROR
+
+ [test_drag_and_drop[20-0-800\]]
+ expected: ERROR
+
+ [test_drag_and_drop[0-15-0\]]
+ expected: ERROR
+
+ [test_drag_and_drop[0-15-300\]]
+ expected: ERROR
+
+ [test_drag_and_drop[0-15-800\]]
+ expected: ERROR
+
+ [test_drag_and_drop[10-15-0\]]
+ expected: ERROR
+
+ [test_drag_and_drop[10-15-300\]]
+ expected: ERROR
+
+ [test_drag_and_drop[10-15-800\]]
+ expected: ERROR
+
+ [test_drag_and_drop[-20-0-0\]]
+ expected: ERROR
+
+ [test_drag_and_drop[-20-0-300\]]
+ expected: ERROR
+
+ [test_drag_and_drop[-20-0-800\]]
+ expected: ERROR
+
+ [test_drag_and_drop[10--15-0\]]
+ expected: ERROR
+
+ [test_drag_and_drop[10--15-300\]]
+ expected: ERROR
+
+ [test_drag_and_drop[10--15-800\]]
+ expected: ERROR
+
+ [test_drag_and_drop[-10--15-0\]]
+ expected: ERROR
+
+ [test_drag_and_drop[-10--15-300\]]
+ expected: ERROR
+
+ [test_drag_and_drop[-10--15-800\]]
+ expected: ERROR
+
+ [test_drag_and_drop_with_draggable_element[0\]]
+ expected: ERROR
+
+ [test_drag_and_drop_with_draggable_element[300\]]
+ expected: ERROR
+
+ [test_drag_and_drop_with_draggable_element[800\]]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini
new file mode 100644
index 00000000000..112a4f9ddf4
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_origin.py.ini
@@ -0,0 +1,27 @@
+[pointer_origin.py]
+ [test_viewport_inside]
+ expected: ERROR
+
+ [test_pointer_inside]
+ expected: ERROR
+
+ [test_element_center_point]
+ expected: ERROR
+
+ [test_element_center_point_with_offset]
+ expected: ERROR
+
+ [test_element_in_view_center_point_partly_visible]
+ expected: ERROR
+
+ [test_element_larger_than_viewport]
+ expected: ERROR
+
+ [test_element_outside_of_view_port]
+ expected: ERROR
+
+ [test_viewport_outside]
+ expected: ERROR
+
+ [test_pointer_outside]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pause_dblclick.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pause_dblclick.py.ini
new file mode 100644
index 00000000000..106650cb70e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pause_dblclick.py.ini
@@ -0,0 +1,6 @@
+[pointer_pause_dblclick.py]
+ [test_dblclick_with_pause_after_second_pointerdown]
+ expected: FAIL
+
+ [test_no_dblclick]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini
new file mode 100644
index 00000000000..a3d52579f7d
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_pen.py.ini
@@ -0,0 +1,33 @@
+[pointer_pen.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_pointer_down_closes_browsing_context]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_pen_pointer_in_shadow_tree[outer-open\]]
+ expected: FAIL
+
+ [test_pen_pointer_in_shadow_tree[outer-closed\]]
+ expected: FAIL
+
+ [test_pen_pointer_in_shadow_tree[inner-open\]]
+ expected: FAIL
+
+ [test_pen_pointer_in_shadow_tree[inner-closed\]]
+ expected: FAIL
+
+ [test_pen_pointer_properties]
+ expected: FAIL
+
+ [test_params_actions_origin_outside_viewport[element\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini
new file mode 100644
index 00000000000..65101d138aa
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_touch.py.ini
@@ -0,0 +1,42 @@
+[pointer_touch.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_pointer_down_closes_browsing_context]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_touch_pointer_in_shadow_tree[outer-open\]]
+ expected: FAIL
+
+ [test_touch_pointer_in_shadow_tree[outer-closed\]]
+ expected: FAIL
+
+ [test_touch_pointer_in_shadow_tree[inner-open\]]
+ expected: FAIL
+
+ [test_touch_pointer_in_shadow_tree[inner-closed\]]
+ expected: FAIL
+
+ [test_touch_pointer_properties]
+ expected: FAIL
+
+ [test_touch_pointer_properties_angle_twist]
+ expected: FAIL
+
+ [test_touch_pointer_properties_tilt_twist]
+ expected: FAIL
+
+ [test_move_to_fractional_position]
+ expected: FAIL
+
+ [test_params_actions_origin_outside_viewport[element\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_tripleclick.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_tripleclick.py.ini
new file mode 100644
index 00000000000..7e0523a6116
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/pointer_tripleclick.py.ini
@@ -0,0 +1,3 @@
+[pointer_tripleclick.py]
+ [test_tripleclick_at_coordinates]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/sequence.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/sequence.py.ini
new file mode 100644
index 00000000000..54ee376545d
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/sequence.py.ini
@@ -0,0 +1,3 @@
+[sequence.py]
+ [test_perform_no_actions_send_no_events]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/user_prompts.py.ini
new file mode 100644
index 00000000000..ca5401f5012
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/user_prompts.py.ini
@@ -0,0 +1,58 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: ERROR
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: ERROR
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: ERROR
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: ERROR
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: ERROR
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: ERROR
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: ERROR
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: ERROR
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: ERROR
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: ERROR
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: ERROR
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: ERROR
+
+ [test_ignore[capabilities0-alert\]]
+ expected: ERROR
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: ERROR
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/perform_actions/wheel.py.ini b/tests/wpt/meta/webdriver/tests/classic/perform_actions/wheel.py.ini
new file mode 100644
index 00000000000..3f6abc70f3e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/perform_actions/wheel.py.ini
@@ -0,0 +1,39 @@
+[wheel.py]
+ [test_null_response_value]
+ expected: FAIL
+
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_params_actions_origin_outside_viewport[element\]]
+ expected: FAIL
+
+ [test_params_actions_origin_outside_viewport[viewport\]]
+ expected: FAIL
+
+ [test_scroll_not_scrollable]
+ expected: FAIL
+
+ [test_scroll_scrollable_overflow]
+ expected: FAIL
+
+ [test_scroll_iframe]
+ expected: FAIL
+
+ [test_scroll_shadow_tree[outer-open\]]
+ expected: FAIL
+
+ [test_scroll_shadow_tree[outer-closed\]]
+ expected: FAIL
+
+ [test_scroll_shadow_tree[inner-open\]]
+ expected: FAIL
+
+ [test_scroll_shadow_tree[inner-closed\]]
+ expected: FAIL
+
+ [test_scroll_with_key_pressed]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/permissions/set.py.ini b/tests/wpt/meta/webdriver/tests/classic/permissions/set.py.ini
new file mode 100644
index 00000000000..a97d40f6155
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/permissions/set.py.ini
@@ -0,0 +1,9 @@
+[set.py]
+ [test_set_to_state[granted\]]
+ expected: FAIL
+
+ [test_set_to_state[denied\]]
+ expected: FAIL
+
+ [test_set_to_state[prompt\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/print/background.py.ini b/tests/wpt/meta/webdriver/tests/classic/print/background.py.ini
new file mode 100644
index 00000000000..0d71e219071
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/print/background.py.ini
@@ -0,0 +1,9 @@
+[background.py]
+ [test_background[None-iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P4DwQACfsD/Z8fLAAAAAAASUVORK5CYII=\]]
+ expected: FAIL
+
+ [test_background[True-iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2NgYGD4DwABBAEAwS2OUAAAAABJRU5ErkJggg==\]]
+ expected: FAIL
+
+ [test_background[False-iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQIW2P4DwQACfsD/Z8fLAAAAAAASUVORK5CYII=\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/print/orientation.py.ini b/tests/wpt/meta/webdriver/tests/classic/print/orientation.py.ini
new file mode 100644
index 00000000000..387ff60af8b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/print/orientation.py.ini
@@ -0,0 +1,9 @@
+[orientation.py]
+ [test_orientation[default\]]
+ expected: FAIL
+
+ [test_orientation[portrait\]]
+ expected: FAIL
+
+ [test_orientation[landscape\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/print/printcmd.py.ini b/tests/wpt/meta/webdriver/tests/classic/print/printcmd.py.ini
new file mode 100644
index 00000000000..5d21a234610
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/print/printcmd.py.ini
@@ -0,0 +1,57 @@
+[printcmd.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_html_document]
+ expected: FAIL
+
+ [test_large_html_document]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges0-expected0\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges1-expected1\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges2-expected2\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges3-expected3\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges4-expected4\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges5-expected5\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges6-expected6\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges7-expected7\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges8-expected8\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges9-expected9\]]
+ expected: FAIL
+
+ [test_page_ranges_document[ranges10-expected10\]]
+ expected: FAIL
+
+ [test_page_ranges_invalid[options9\]]
+ expected: FAIL
+
+ [test_page_ranges_invalid[options10\]]
+ expected: FAIL
+
+ [test_page_ranges_invalid[options11\]]
+ expected: FAIL
+
+ [test_page_ranges_invalid[options12\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/print/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/print/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/print/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/refresh/refresh.py.ini b/tests/wpt/meta/webdriver/tests/classic/refresh/refresh.py.ini
new file mode 100644
index 00000000000..08528d08784
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/refresh/refresh.py.ini
@@ -0,0 +1,21 @@
+[refresh.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_seen_nodes[http\]]
+ expected: FAIL
+
+ [test_seen_nodes[https\]]
+ expected: FAIL
+
+ [test_seen_nodes[https coop\]]
+ expected: FAIL
+
+ [test_history_pushstate]
+ expected: FAIL
+
+ [test_refresh_switches_to_parent_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/refresh/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/refresh/user_prompts.py.ini
new file mode 100644
index 00000000000..fcf10a0526c
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/refresh/user_prompts.py.ini
@@ -0,0 +1,73 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-beforeunload-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-beforeunload\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ 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
diff --git a/tests/wpt/meta/webdriver/tests/classic/release_actions/release.py.ini b/tests/wpt/meta/webdriver/tests/classic/release_actions/release.py.ini
new file mode 100644
index 00000000000..7c5e73584b6
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/release_actions/release.py.ini
@@ -0,0 +1,6 @@
+[release.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence.py.ini b/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence.py.ini
new file mode 100644
index 00000000000..6ba3814b563
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence.py.ini
@@ -0,0 +1,3 @@
+[sequence.py]
+ [test_release_char_sequence_sends_keyup_events_in_reverse]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini b/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini
new file mode 100644
index 00000000000..aed5f673813
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/release_actions/sequence_tentative.py.ini
@@ -0,0 +1,6 @@
+[sequence_tentative.py]
+ [test_release_mouse_sequence_resets_dblclick_state[with release actions\]]
+ expected: FAIL
+
+ [test_release_mouse_sequence_resets_dblclick_state[without release actions\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/send_alert_text/send.py.ini b/tests/wpt/meta/webdriver/tests/classic/send_alert_text/send.py.ini
new file mode 100644
index 00000000000..fc3fe5245a3
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/send_alert_text/send.py.ini
@@ -0,0 +1,3 @@
+[send.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/webdriver/tests/classic/set_timeouts/set.py.ini b/tests/wpt/meta/webdriver/tests/classic/set_timeouts/set.py.ini
new file mode 100644
index 00000000000..bfc9d7723d9
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/set_timeouts/set.py.ini
@@ -0,0 +1,2 @@
+[set.py]
+ expected: TIMEOUT
diff --git a/tests/wpt/meta/webdriver/tests/classic/set_timeouts/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/set_timeouts/user_prompts.py.ini
new file mode 100644
index 00000000000..913351aaa55
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/set_timeouts/user_prompts.py.ini
@@ -0,0 +1,2 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734 \ No newline at end of file
diff --git a/tests/wpt/meta/webdriver/tests/classic/set_window_rect/from_minimized_window.py.ini b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/from_minimized_window.py.ini
new file mode 100644
index 00000000000..5d3e1ccc1b2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/from_minimized_window.py.ini
@@ -0,0 +1,3 @@
+[from_minimized_window.py]
+ [test_restore_from_minimized]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini
new file mode 100644
index 00000000000..6b28c2efdf8
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/set.py.ini
@@ -0,0 +1,39 @@
+[set.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_restore_from_fullscreen]
+ expected: FAIL
+
+ [test_restore_from_maximized]
+ expected: FAIL
+
+ [test_x_y_floats]
+ expected: FAIL
+
+ [test_set_to_available_size]
+ expected: ERROR
+
+ [test_set_smaller_than_minimum_browser_size]
+ expected: FAIL
+
+ [test_x_y]
+ expected: FAIL
+
+ [test_x_as_current]
+ expected: FAIL
+
+ [test_y_as_current]
+ expected: FAIL
+
+ [test_negative_x_y]
+ expected: ERROR
+
+ [test_set_to_screen_size]
+ expected: ERROR
+
+ [test_set_larger_than_screen_size]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/classic/set_window_rect/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/user_prompts.py.ini
new file mode 100644
index 00000000000..913351aaa55
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/set_window_rect/user_prompts.py.ini
@@ -0,0 +1,2 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734 \ No newline at end of file
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
new file mode 100644
index 00000000000..ee73fbf4ce8
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch.py.ini
@@ -0,0 +1,21 @@
+[switch.py]
+ [test_no_top_browsing_context[None\]]
+ expected: FAIL
+
+ [test_no_top_browsing_context[0\]]
+ expected: FAIL
+
+ [test_no_browsing_context[0\]]
+ expected: FAIL
+
+ [test_no_browsing_context[id2\]]
+ expected: FAIL
+
+ [test_no_browsing_context_when_already_top_level]
+ expected: FAIL
+
+ [test_frame_id_shadow_root]
+ expected: FAIL
+
+ [test_frame_id_null]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_number.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_number.py.ini
new file mode 100644
index 00000000000..408f2eb2568
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_number.py.ini
@@ -0,0 +1,15 @@
+[switch_number.py]
+ [test_frame_id_number_index_out_of_bounds[1\]]
+ expected: FAIL
+
+ [test_frame_id_number_index_out_of_bounds[65535\]]
+ expected: FAIL
+
+ [test_frame_id_number_index[0-foo\]]
+ expected: FAIL
+
+ [test_frame_id_number_index[1-bar\]]
+ expected: FAIL
+
+ [test_frame_id_number_index_nested]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_webelement.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_webelement.py.ini
new file mode 100644
index 00000000000..9932ab9a5d5
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_frame/switch_webelement.py.ini
@@ -0,0 +1,12 @@
+[switch_webelement.py]
+ [test_frame_id_webelement_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_frame_id_webelement_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_frame_id_webelement_frame[0-foo\]]
+ expected: FAIL
+
+ [test_frame_id_webelement_frame[1-bar\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini
new file mode 100644
index 00000000000..ffd3d06f212
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_parent_frame/switch.py.ini
@@ -0,0 +1,6 @@
+[switch.py]
+ [test_switch_from_iframe]
+ expected: FAIL
+
+ [test_switch_from_top_level]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini
new file mode 100644
index 00000000000..3e6ad0c8af9
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/alerts.py.ini
@@ -0,0 +1,3 @@
+[alerts.py]
+ [test_retain_tab_modal_status]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini
new file mode 100644
index 00000000000..9b0ec38199b
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/switch_to_window/switch.py.ini
@@ -0,0 +1,12 @@
+[switch.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_finds_exising_user_prompt_after_tab_switch[alert\]]
+ expected: FAIL
+
+ [test_finds_exising_user_prompt_after_tab_switch[confirm\]]
+ expected: FAIL
+
+ [test_finds_exising_user_prompt_after_tab_switch[prompt\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini
new file mode 100644
index 00000000000..dd77eca9d72
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/iframe.py.ini
@@ -0,0 +1,9 @@
+[iframe.py]
+ [test_frame_element]
+ expected: FAIL
+
+ [test_source_origin[same_origin\]]
+ expected: FAIL
+
+ [test_source_origin[cross_origin\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/screenshot.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/screenshot.py.ini
new file mode 100644
index 00000000000..319e4bf848f
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/screenshot.py.ini
@@ -0,0 +1,30 @@
+[screenshot.py]
+ [test_no_browsing_context]
+ expected: FAIL
+
+ [test_no_such_element_with_invalid_value]
+ expected: FAIL
+
+ [test_no_such_element_with_shadow_root]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_window_handle[closed\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[open\]]
+ expected: FAIL
+
+ [test_no_such_element_from_other_frame[closed\]]
+ expected: FAIL
+
+ [test_stale_element_reference[top_context\]]
+ expected: FAIL
+
+ [test_stale_element_reference[child_context\]]
+ expected: FAIL
+
+ [test_format_and_dimensions]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini
new file mode 100644
index 00000000000..62f7ab5e4da
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/iframe.py.ini
@@ -0,0 +1,3 @@
+[iframe.py]
+ [test_always_captures_top_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
new file mode 100644
index 00000000000..f2fac7a7fa1
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/screenshot.py.ini
@@ -0,0 +1,6 @@
+[screenshot.py]
+ [test_no_top_browsing_context]
+ expected: FAIL
+
+ [test_no_browsing_context]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/classic/take_screenshot/user_prompts.py.ini b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/user_prompts.py.ini
new file mode 100644
index 00000000000..53b6399fdd2
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/classic/take_screenshot/user_prompts.py.ini
@@ -0,0 +1,55 @@
+[user_prompts.py]
+ disabled: https://github.com/servo/servo/issues/35734
+ [test_accept[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-confirm-True\]]
+ expected: FAIL
+
+ [test_accept_and_notify[capabilities0-prompt-\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-alert-None\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-confirm-False\]]
+ expected: FAIL
+
+ [test_dismiss_and_notify[capabilities0-prompt-None\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-alert\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-confirm\]]
+ expected: FAIL
+
+ [test_ignore[capabilities0-prompt\]]
+ expected: FAIL
+
+ [test_default[alert-None\]]
+ expected: FAIL
+
+ [test_default[confirm-False\]]
+ expected: FAIL
+
+ [test_default[prompt-None\]]
+ expected: FAIL
diff --git a/tests/wpt/meta/webdriver/tests/interop/beforeunload_prompt.py.ini b/tests/wpt/meta/webdriver/tests/interop/beforeunload_prompt.py.ini
new file mode 100644
index 00000000000..8d9822802f0
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/interop/beforeunload_prompt.py.ini
@@ -0,0 +1,60 @@
+[beforeunload_prompt.py]
+ [test_accept[capabilities0-False\]]
+ expected: ERROR
+
+ [test_accept[capabilities0-True\]]
+ expected: ERROR
+
+ [test_accept_and_notify[capabilities0-False\]]
+ expected: ERROR
+
+ [test_accept_and_notify[capabilities0-True\]]
+ expected: ERROR
+
+ [test_dismiss[capabilities0-False\]]
+ expected: ERROR
+
+ [test_dismiss[capabilities0-True\]]
+ expected: ERROR
+
+ [test_dismiss_and_notify[capabilities0-False\]]
+ expected: ERROR
+
+ [test_dismiss_and_notify[capabilities0-True\]]
+ expected: ERROR
+
+ [test_ignore[capabilities0-False\]]
+ expected: ERROR
+
+ [test_ignore[capabilities0-True\]]
+ expected: ERROR
+
+ [test_accept[False\]]
+ expected: ERROR
+
+ [test_accept[True\]]
+ expected: ERROR
+
+ [test_accept_and_notify[False\]]
+ expected: ERROR
+
+ [test_accept_and_notify[True\]]
+ expected: ERROR
+
+ [test_dismiss[False\]]
+ expected: ERROR
+
+ [test_dismiss[True\]]
+ expected: ERROR
+
+ [test_dismiss_and_notify[False\]]
+ expected: ERROR
+
+ [test_dismiss_and_notify[True\]]
+ expected: ERROR
+
+ [test_ignore[False\]]
+ expected: ERROR
+
+ [test_ignore[True\]]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/interop/frames.py.ini b/tests/wpt/meta/webdriver/tests/interop/frames.py.ini
new file mode 100644
index 00000000000..21819720ff1
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/interop/frames.py.ini
@@ -0,0 +1,3 @@
+[frames.py]
+ [test_classic_switch_to_parent_no_browsing_context]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/interop/shared_id_node.py.ini b/tests/wpt/meta/webdriver/tests/interop/shared_id_node.py.ini
new file mode 100644
index 00000000000..07c51098229
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/interop/shared_id_node.py.ini
@@ -0,0 +1,18 @@
+[shared_id_node.py]
+ [test_web_element_reference_created_in_classic]
+ expected: ERROR
+
+ [test_web_element_reference_created_in_bidi]
+ expected: ERROR
+
+ [test_shadow_root_reference_created_in_classic[open\]]
+ expected: ERROR
+
+ [test_shadow_root_reference_created_in_classic[closed\]]
+ expected: ERROR
+
+ [test_shadow_root_reference_created_in_bidi[open\]]
+ expected: ERROR
+
+ [test_shadow_root_reference_created_in_bidi[closed\]]
+ expected: ERROR
diff --git a/tests/wpt/meta/webdriver/tests/interop/shared_id_window.py.ini b/tests/wpt/meta/webdriver/tests/interop/shared_id_window.py.ini
new file mode 100644
index 00000000000..7dc97d71d7e
--- /dev/null
+++ b/tests/wpt/meta/webdriver/tests/interop/shared_id_window.py.ini
@@ -0,0 +1,15 @@
+[shared_id_window.py]
+ [test_top_level_context_id_equals_window_handle]
+ expected: ERROR
+
+ [test_web_window_reference_created_in_classic]
+ expected: ERROR
+
+ [test_web_frame_reference_created_in_classic]
+ expected: ERROR
+
+ [test_web_window_reference_created_in_bidi]
+ expected: ERROR
+
+ [test_web_frame_reference_created_in_bidi]
+ expected: ERROR
diff --git a/tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini b/tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini
deleted file mode 100644
index 24daae4c2e7..00000000000
--- a/tests/wpt/meta/workers/WorkerGlobalScope-close.html.ini
+++ /dev/null
@@ -1,3 +0,0 @@
-[WorkerGlobalScope-close.html]
- [Test sending a message after closing.]
- expected: FAIL
diff --git a/tests/wpt/tests/css/css-grid/abspos/abspos-in-flexbox-in-grid-crash.html b/tests/wpt/tests/css/css-grid/abspos/abspos-in-flexbox-in-grid-crash.html
new file mode 100644
index 00000000000..a2f71fb78e7
--- /dev/null
+++ b/tests/wpt/tests/css/css-grid/abspos/abspos-in-flexbox-in-grid-crash.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<link rel="help" href="https://github.com/servo/servo/issues/36696">
+
+<div style="display: flex; position: relative">
+ <div style="display:grid">
+ <div>
+ <div style="display: flex">
+ <div style="position: absolute"></div>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-002.html b/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-002.html
new file mode 100644
index 00000000000..ff1d06dcc11
--- /dev/null
+++ b/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-002.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>CSS Test: Individual transform properties create stacking context</title>
+<link rel="author" title="Oriol Brufau" href="obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#individual-transforms">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert" content="
+ Setting `rotate` to a value different than `none` establishes a stacking context.
+">
+
+<style>
+.transform {
+ width: 100px;
+ height: 100px;
+ background: red;
+ rotate: 0deg;
+}
+.child {
+ width: 100px;
+ height: 100px;
+ background: green;
+ position: relative;
+ z-index: -1;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="transform">
+ <div class="child"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-003.html b/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-003.html
new file mode 100644
index 00000000000..6852722ed79
--- /dev/null
+++ b/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-003.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>CSS Test: Individual transform properties create stacking context</title>
+<link rel="author" title="Oriol Brufau" href="obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#individual-transforms">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert" content="
+ Setting `scale` to a value different than `none` establishes a stacking context.
+">
+
+<style>
+.transform {
+ width: 100px;
+ height: 100px;
+ background: red;
+ scale: 1;
+}
+.child {
+ width: 100px;
+ height: 100px;
+ background: green;
+ position: relative;
+ z-index: -1;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="transform">
+ <div class="child"></div>
+</div>
diff --git a/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-004.html b/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-004.html
new file mode 100644
index 00000000000..6d7ec896736
--- /dev/null
+++ b/tests/wpt/tests/css/css-transforms/individual-transform/stacking-context-004.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<title>CSS Test: Individual transform properties create stacking context</title>
+<link rel="author" title="Oriol Brufau" href="obrufau@igalia.com">
+<link rel="help" href="https://www.w3.org/TR/css-transforms-2/#individual-transforms">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert" content="
+ Setting `translate` to a value different than `none` establishes a stacking context.
+">
+
+<style>
+.transform {
+ width: 100px;
+ height: 100px;
+ background: red;
+ translate: 0px;
+}
+.child {
+ width: 100px;
+ height: 100px;
+ background: green;
+ position: relative;
+ z-index: -1;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="transform">
+ <div class="child"></div>
+</div>