From 3291e8d5f817088e55fda8deb23ef3a4bd73f989 Mon Sep 17 00:00:00 2001 From: Alexandra Borovova Date: Fri, 5 Dec 2025 15:50:15 +0000 Subject: [PATCH] [wdspec] Add a test for "script.realmCreated" event for window.open. Differential Revision: https://phabricator.services.mozilla.com/D274415 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=2002721 gecko-commit: f1daec7ab2cd2b99f0edfd1dd4ca9fa0f15025d3 gecko-reviewers: jdescottes --- .../bidi/script/realm_created/window_open.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 webdriver/tests/bidi/script/realm_created/window_open.py diff --git a/webdriver/tests/bidi/script/realm_created/window_open.py b/webdriver/tests/bidi/script/realm_created/window_open.py new file mode 100644 index 00000000000000..b5c159f457ff1e --- /dev/null +++ b/webdriver/tests/bidi/script/realm_created/window_open.py @@ -0,0 +1,83 @@ +import pytest +from webdriver.bidi.modules.script import ContextTarget + +from tests.bidi import wait_for_bidi_events + + +pytestmark = pytest.mark.asyncio + +CONTEXT_CREATED_EVENT = "browsingContext.contextCreated" +REALM_CREATED_EVENT = "script.realmCreated" + + +@pytest.mark.parametrize("window_url", ["", "about:blank", "inline"]) +async def test_window_open( + bidi_session, subscribe_events, top_context, inline, window_url +): + await subscribe_events(events=[REALM_CREATED_EVENT]) + + events = [] + + async def on_event(method, data): + events.append(data) + + remove_listener = bidi_session.add_event_listener(REALM_CREATED_EVENT, on_event) + + if window_url == "inline": + window_url = inline("
in window
") + + await bidi_session.script.evaluate( + expression=f"window.open('{window_url}')", + await_promise=False, + target=ContextTarget(top_context["context"]), + ) + + await wait_for_bidi_events(bidi_session, events, 1, equal_check=True) + + realms = await bidi_session.script.get_realms() + window_realm = None + for realm in realms: + if realm["context"] != top_context["context"]: + window_realm = realm + + assert events[-1] == window_realm + + remove_listener() + + +@pytest.mark.parametrize("window_url", ["", "about:blank", "inline"]) +async def test_event_order( + bidi_session, subscribe_events, new_tab, inline, window_url +): + await subscribe_events(events=[CONTEXT_CREATED_EVENT, REALM_CREATED_EVENT]) + + events = [] + + async def on_event(method, data): + events.append(method) + + remove_listener_for_context_created = bidi_session.add_event_listener( + CONTEXT_CREATED_EVENT, on_event + ) + remove_listener_for_realm_created = bidi_session.add_event_listener( + REALM_CREATED_EVENT, on_event + ) + + if window_url == "inline": + window_url = inline("
in window
") + + events = [] + + await bidi_session.script.evaluate( + expression=f"window.open('{window_url}')", + await_promise=False, + target=ContextTarget(new_tab["context"]), + ) + + await wait_for_bidi_events(bidi_session, events, 2, equal_check=True) + + assert events[0] == CONTEXT_CREATED_EVENT + assert events[1] == REALM_CREATED_EVENT + + remove_listener_for_context_created() + remove_listener_for_realm_created()