tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit e8cc9eb24c6fdc5554c19a1e729bf96c8bef7561
parent 174ef152042b5a54bce2a98061e3215cbee73ffb
Author: Alexandra Borovova <aborovova@mozilla.com>
Date:   Thu,  4 Dec 2025 12:27:59 +0000

Bug 2000651 - [wdspec] Add tests for "emulation.setScreenSettingsOverride" command. r=whimboo

Differential Revision: https://phabricator.services.mozilla.com/D273428

Diffstat:
Atesting/web-platform/meta/webdriver/tests/bidi/emulation/set_screen_settings_override/user_contexts.py.ini | 3+++
Mtesting/web-platform/tests/webdriver/tests/bidi/emulation/set_geolocation_override/invalid.py | 9+++++++++
Mtesting/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_orientation_override/invalid.py | 27+++++++++++++++++++++++++++
Atesting/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/__init__.py | 0
Atesting/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/conftest.py | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atesting/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/contexts.py | 206+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atesting/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/invalid.py | 143+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atesting/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/screen_area.py | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atesting/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/user_contexts.py | 357+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtesting/web-platform/tests/webdriver/tests/bidi/emulation/set_timezone_override/invalid.py | 9+++++++++
Mtesting/web-platform/tests/webdriver/tests/support/fixtures_bidi.py | 18++++++++++++++++++
11 files changed, 890 insertions(+), 0 deletions(-)

diff --git a/testing/web-platform/meta/webdriver/tests/bidi/emulation/set_screen_settings_override/user_contexts.py.ini b/testing/web-platform/meta/webdriver/tests/bidi/emulation/set_screen_settings_override/user_contexts.py.ini @@ -0,0 +1,3 @@ +[user_contexts.py] + disabled: + if os == "android": bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1877953 diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_geolocation_override/invalid.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_geolocation_override/invalid.py @@ -2,6 +2,7 @@ import pytest import webdriver.bidi.error as error from webdriver.bidi.modules.emulation import CoordinatesOptions +from webdriver.bidi.undefined import UNDEFINED pytestmark = pytest.mark.asyncio @@ -91,6 +92,14 @@ async def test_params_coordinates_empty_object(bidi_session, top_context): ) +async def test_params_coordinates_missing(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_geolocation_override( + contexts=[top_context["context"]], + coordinates=UNDEFINED, + ) + + async def test_params_coordinates_latitude_missing(bidi_session, top_context): with pytest.raises(error.InvalidArgumentException): await bidi_session.emulation.set_geolocation_override( diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_orientation_override/invalid.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_orientation_override/invalid.py @@ -1,6 +1,7 @@ import pytest import webdriver.bidi.error as error +from webdriver.bidi.undefined import UNDEFINED pytestmark = pytest.mark.asyncio @@ -47,6 +48,24 @@ async def test_params_contexts_entry_invalid_value(bidi_session): }) +async def test_params_contexts_iframe(bidi_session, new_tab, get_test_page): + url = get_test_page(as_frame=True) + await bidi_session.browsing_context.navigate( + context=new_tab["context"], url=url, wait="complete" + ) + + contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"]) + frames = contexts[0]["children"] + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_orientation_override( + contexts=[frames[0]["context"]], + screen_orientation={ + "natural": "portrait", + "type": "portrait-primary" + }) + + @pytest.mark.parametrize("value", [False, "foo", 42, []]) async def test_params_screen_orientation_invalid_type(bidi_session, top_context, value): @@ -57,6 +76,14 @@ async def test_params_screen_orientation_invalid_type(bidi_session, top_context, ) +async def test_params_screen_orientation_missing(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_orientation_override( + contexts=[top_context["context"]], + screen_orientation=UNDEFINED + ) + + @pytest.mark.parametrize("value", [None, False, 42, [], {}]) async def test_params_screen_orientation_natural_invalid_type(bidi_session, top_context, value): diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/__init__.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/__init__.py diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/conftest.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/conftest.py @@ -0,0 +1,61 @@ +import pytest_asyncio + +from webdriver.bidi.modules.script import ContextTarget + +from ... import remote_mapping_to_dict + + +@pytest_asyncio.fixture +async def get_current_screen_dimensions(bidi_session): + async def get_current_screen_dimensions(context): + result = await bidi_session.script.evaluate( + expression="""({ + "width": screen.width, + "height": screen.height, + "availWidth": screen.availWidth, + "availHeight": screen.availHeight, + })""", + target=ContextTarget(context["context"]), + await_promise=False, + ) + + return remote_mapping_to_dict(result["value"]) + + return get_current_screen_dimensions + + +@pytest_asyncio.fixture +async def match_min_device_width_media_query(match_media_query): + async def match_min_device_width_media_query(context, media_query_value): + return await match_media_query(context, "min-device-width", media_query_value) + + return match_min_device_width_media_query + + +@pytest_asyncio.fixture +async def assert_screen_dimensions( + get_current_screen_dimensions, + match_min_device_width_media_query, +): + async def assert_screen_dimensions( + context, + screen_width, + screen_height, + screen_avail_width, + screen_avail_height, + ): + assert await get_current_screen_dimensions(context) == { + "width": screen_width, + "height": screen_height, + "availWidth": screen_avail_width, + "availHeight": screen_avail_height, + } + + assert ( + await match_min_device_width_media_query(context, screen_width - 1) is True + ) + assert ( + await match_min_device_width_media_query(context, screen_width + 1) is False + ) + + return assert_screen_dimensions diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/contexts.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/contexts.py @@ -0,0 +1,206 @@ +import pytest + +pytestmark = pytest.mark.asyncio + + +async def test_contexts( + bidi_session, + new_tab, + top_context, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + # Set screen dimensions override. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], screen_area=screen_area_override + ) + + # Assert screen dimensions in the new context are updated. + await assert_screen_dimensions( + new_tab, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + # Assert screen dimensions in the initial context are unchanged. + await assert_screen_dimensions( + top_context, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + + # Reset screen dimensions override. + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], screen_area=None + ) + + # Assert screen dimensions in the new context are reset to default. + await assert_screen_dimensions( + new_tab, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + + +async def test_multiple_contexts( + bidi_session, + new_tab, + top_context, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + # Set screen orientation override. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + contexts=[top_context["context"], new_tab["context"]], + screen_area=screen_area_override, + ) + + # Assert screen dimensions in both contexts are updated. + await assert_screen_dimensions( + new_tab, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + await assert_screen_dimensions( + top_context, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Reset screen dimensions override of the new tab. + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], screen_area=None + ) + + # Assert screen dimensions on the new tab are default. + await assert_screen_dimensions( + new_tab, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + # Assert screen dimensions on the initial tab are still updated. + await assert_screen_dimensions( + top_context, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Reset screen dimensions override of the initial tab. + await bidi_session.emulation.set_screen_settings_override( + contexts=[top_context["context"]], screen_area=None + ) + + # Assert screen dimensions on both tabs are default. + await assert_screen_dimensions( + new_tab, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + await assert_screen_dimensions( + top_context, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + + +@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"]) +async def test_iframe( + bidi_session, + new_tab, + assert_screen_dimensions, + get_current_screen_dimensions, + iframe, + inline, + domain, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + # Set screen orientation override. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], + screen_area=screen_area_override, + ) + + # Assert screen orientation in the required context. + await assert_screen_dimensions( + new_tab, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + page_url = inline(f"""{iframe("<div id='in-iframe'>foo</div>", domain=domain)}""") + + # Load the page with iframes. + await bidi_session.browsing_context.navigate( + context=new_tab["context"], + url=page_url, + wait="complete", + ) + + contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"]) + iframe = contexts[0]["children"][0] + + # Assert screen dimensions are emulated in the iframe context. + await assert_screen_dimensions( + iframe, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Set another screen orientation override. + screen_area_override_2 = {"width": 200, "height": 200} + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], + screen_area=screen_area_override_2, + ) + + # Assert screen dimensions are emulated in the iframe context. + await assert_screen_dimensions( + iframe, + screen_area_override_2["width"], + screen_area_override_2["height"], + screen_area_override_2["width"], + screen_area_override_2["height"], + ) + + # Reset screen dimensions override. + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], screen_area=None + ) + + # Assert screen dimensions in the iframe are default. + await assert_screen_dimensions( + iframe, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/invalid.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/invalid.py @@ -0,0 +1,143 @@ +import pytest + +import webdriver.bidi.error as error +from tests.bidi import get_invalid_cases +from webdriver.bidi.undefined import UNDEFINED + +pytestmark = pytest.mark.asyncio + +SOME_SCREEN_AREA = {"width": 100, "height": 100} + + +@pytest.mark.parametrize("value", get_invalid_cases("list")) +async def test_params_contexts_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, contexts=value + ) + + +async def test_params_contexts_empty_list(bidi_session): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, contexts=[] + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("string")) +async def test_params_contexts_entry_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, contexts=[value] + ) + + +async def test_params_contexts_entry_invalid_value(bidi_session): + with pytest.raises(error.NoSuchFrameException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, + contexts=["_invalid_"], + ) + + +async def test_params_contexts_iframe(bidi_session, new_tab, get_test_page): + url = get_test_page(as_frame=True) + await bidi_session.browsing_context.navigate( + context=new_tab["context"], url=url, wait="complete" + ) + + contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"]) + frames = contexts[0]["children"] + + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, + contexts=[frames[0]["context"]], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("dict", nullable=True)) +async def test_params_screen_area_invalid_type(bidi_session, top_context, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=value, + contexts=[top_context["context"]], + ) + + +async def test_params_screen_area_missing(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=UNDEFINED, + contexts=[top_context["context"]], + ) + + +async def test_params_screen_area_with_empty_object(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area={}, + contexts=[top_context["context"]], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("number", nullable=True)) +async def test_params_screen_area_height_invalid_type(bidi_session, top_context, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area={"width": 100, "height": value}, + contexts=[top_context["context"]], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("number", nullable=True)) +async def test_params_screen_area_width_invalid_type(bidi_session, top_context, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area={"width": value, "height": 100}, + contexts=[top_context["context"]], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("list")) +async def test_params_user_contexts_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, + user_contexts=value, + ) + + +async def test_params_user_contexts_empty_list(bidi_session): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, + user_contexts=[], + ) + + +@pytest.mark.parametrize("value", get_invalid_cases("string")) +async def test_params_user_contexts_entry_invalid_type(bidi_session, value): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, + user_contexts=[value], + ) + + +@pytest.mark.parametrize("value", ["", "somestring"]) +async def test_params_user_contexts_entry_invalid_value(bidi_session, value): + with pytest.raises(error.NoSuchUserContextException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, + user_contexts=[value], + ) + + +async def test_params_contexts_and_user_contexts(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_screen_settings_override( + screen_area=SOME_SCREEN_AREA, + contexts=[top_context["context"]], + user_contexts=["default"], + ) diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/screen_area.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/screen_area.py @@ -0,0 +1,57 @@ +import pytest + + +pytestmark = pytest.mark.asyncio + + +async def test_screen_area( + bidi_session, + new_tab, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + # Set screen area override. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], screen_area=screen_area_override + ) + + # Assert that screen area is updated. + await assert_screen_dimensions( + new_tab, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Set screen area override again. + screen_area_override_2 = {"width": 200, "height": 200} + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], screen_area=screen_area_override_2 + ) + + # Assert that screen area is updated. + await assert_screen_dimensions( + new_tab, + screen_area_override_2["width"], + screen_area_override_2["height"], + screen_area_override_2["width"], + screen_area_override_2["height"], + ) + + # Reset screen area override. + await bidi_session.emulation.set_screen_settings_override( + contexts=[new_tab["context"]], screen_area=None + ) + + # Assert screen orientation is the default. + await assert_screen_dimensions( + new_tab, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/user_contexts.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_screen_settings_override/user_contexts.py @@ -0,0 +1,357 @@ +import pytest + +pytestmark = pytest.mark.asyncio + + +async def test_user_contexts( + bidi_session, + create_user_context, + new_tab, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + user_context = await create_user_context() + context_in_user_context_1 = await bidi_session.browsing_context.create( + user_context=user_context, type_hint="tab" + ) + + # Set screen dimensions override. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + user_contexts=[user_context], screen_area=screen_area_override + ) + + # Assert screen dimensions in the new context are updated. + await assert_screen_dimensions( + context_in_user_context_1, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + # Assert screen dimensions in the initial context are unchanged. + await assert_screen_dimensions( + new_tab, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + + # Create a new context in the user context. + context_in_user_context_2 = await bidi_session.browsing_context.create( + user_context=user_context, type_hint="tab" + ) + + # Assert screen dimensions in the new context are updated. + await assert_screen_dimensions( + context_in_user_context_2, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + +async def test_set_to_default_user_context( + bidi_session, + new_tab, + create_user_context, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + user_context = await create_user_context() + context_in_user_context_1 = await bidi_session.browsing_context.create( + user_context=user_context, type_hint="tab" + ) + + # Set screen dimensions override. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + user_contexts=["default"], screen_area=screen_area_override + ) + + # Make sure that the screen dimensions changes are only applied to the + # context associated with default user context. + await assert_screen_dimensions( + new_tab, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + # Assert screen dimensions in the initial context are unchanged. + await assert_screen_dimensions( + context_in_user_context_1, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + + # Create a new context in the default context. + context_in_default_context_2 = await bidi_session.browsing_context.create( + type_hint="tab" + ) + + await assert_screen_dimensions( + context_in_default_context_2, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Reset screen dimensions override. + await bidi_session.emulation.set_screen_settings_override( + user_contexts=["default"], screen_area=None + ) + + +async def test_set_to_multiple_user_contexts( + bidi_session, + new_tab, + create_user_context, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + user_context_1 = await create_user_context() + context_in_user_context_1 = await bidi_session.browsing_context.create( + user_context=user_context_1, type_hint="tab" + ) + user_context_2 = await create_user_context() + context_in_user_context_2 = await bidi_session.browsing_context.create( + user_context=user_context_2, type_hint="tab" + ) + + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + user_contexts=[user_context_1, user_context_2], screen_area=screen_area_override + ) + + await assert_screen_dimensions( + context_in_user_context_1, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + await assert_screen_dimensions( + context_in_user_context_2, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Reset screen dimensions override for one of the user contexts. + await bidi_session.emulation.set_screen_settings_override( + user_contexts=[user_context_1], screen_area=None + ) + + # Assert the screen dimensions override was reset for the proper user + # context. + await assert_screen_dimensions( + context_in_user_context_1, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + await assert_screen_dimensions( + context_in_user_context_2, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + +async def test_set_to_user_context_and_then_to_context( + bidi_session, + create_user_context, + new_tab, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + user_context = await create_user_context() + context_in_user_context_1 = await bidi_session.browsing_context.create( + user_context=user_context, type_hint="tab" + ) + + # Apply screen settings override to the user context. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + user_contexts=[user_context], screen_area=screen_area_override + ) + + # Apply screen settings override now only to the context. + another_screen_area_override = {"width": 200, "height": 200} + await bidi_session.emulation.set_screen_settings_override( + contexts=[context_in_user_context_1["context"]], + screen_area=another_screen_area_override, + ) + await assert_screen_dimensions( + context_in_user_context_1, + another_screen_area_override["width"], + another_screen_area_override["height"], + another_screen_area_override["width"], + another_screen_area_override["height"], + ) + + await bidi_session.browsing_context.reload( + context=context_in_user_context_1["context"], wait="complete" + ) + + # Make sure that after reload the screen dimensions are still updated. + await assert_screen_dimensions( + context_in_user_context_1, + another_screen_area_override["width"], + another_screen_area_override["height"], + another_screen_area_override["width"], + another_screen_area_override["height"], + ) + + # Create a new context in the user context. + context_in_user_context_2 = await bidi_session.browsing_context.create( + user_context=user_context, type_hint="tab" + ) + # Make sure that the screen settings override for the user context is + # applied. + await assert_screen_dimensions( + context_in_user_context_2, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + await bidi_session.emulation.set_screen_settings_override( + contexts=[context_in_user_context_1["context"]], screen_area=None + ) + + # Make sure that the user context screen dimensions override is applied. + await assert_screen_dimensions( + context_in_user_context_1, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Reset override for user context. + await bidi_session.emulation.set_screen_settings_override( + user_contexts=[user_context], screen_area=None + ) + + # Make sure that the override is reset. + await assert_screen_dimensions( + context_in_user_context_2, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) + + +async def test_set_to_context_and_then_to_user_context( + bidi_session, + create_user_context, + new_tab, + assert_screen_dimensions, + get_current_screen_dimensions, +): + default_screen_dimensions = await get_current_screen_dimensions(new_tab) + + user_context = await create_user_context() + context_in_user_context_1 = await bidi_session.browsing_context.create( + user_context=user_context, type_hint="tab" + ) + + # Apply screen settings override to the context. + screen_area_override = {"width": 100, "height": 100} + await bidi_session.emulation.set_screen_settings_override( + contexts=[context_in_user_context_1["context"]], + screen_area=screen_area_override, + ) + + await assert_screen_dimensions( + context_in_user_context_1, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Apply screen settings override to the user context. + another_screen_area_override = {"width": 200, "height": 200} + await bidi_session.emulation.set_screen_settings_override( + user_contexts=[user_context], + screen_area=another_screen_area_override, + ) + + # Make sure that context has still the context screen settings override. + await assert_screen_dimensions( + context_in_user_context_1, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + await bidi_session.browsing_context.reload( + context=context_in_user_context_1["context"], wait="complete" + ) + + # Make sure that after reload the screen dimensions still has the context screen dimensions override. + await assert_screen_dimensions( + context_in_user_context_1, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + + # Create a new context in the user context. + context_in_user_context_2 = await bidi_session.browsing_context.create( + user_context=user_context, type_hint="tab" + ) + # Make sure that the screen dimensions override for the user context is applied. + await assert_screen_dimensions( + context_in_user_context_2, + another_screen_area_override["width"], + another_screen_area_override["height"], + another_screen_area_override["width"], + another_screen_area_override["height"], + ) + + # Reset override for user context. + await bidi_session.emulation.set_screen_settings_override( + user_contexts=[user_context], + screen_area=None, + ) + + # Make sure that the screen dimensions override for the first context is still set. + await assert_screen_dimensions( + context_in_user_context_1, + screen_area_override["width"], + screen_area_override["height"], + screen_area_override["width"], + screen_area_override["height"], + ) + # Make sure that the screen dimensions override for the second context is reset. + await assert_screen_dimensions( + context_in_user_context_2, + default_screen_dimensions["width"], + default_screen_dimensions["height"], + default_screen_dimensions["availWidth"], + default_screen_dimensions["availHeight"], + ) diff --git a/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_timezone_override/invalid.py b/testing/web-platform/tests/webdriver/tests/bidi/emulation/set_timezone_override/invalid.py @@ -1,6 +1,7 @@ import pytest import webdriver.bidi.error as error +from webdriver.bidi.undefined import UNDEFINED pytestmark = pytest.mark.asyncio @@ -100,6 +101,14 @@ async def test_params_timezone_invalid_type(bidi_session, top_context, value): ) +async def test_params_timezone_missing(bidi_session, top_context): + with pytest.raises(error.InvalidArgumentException): + await bidi_session.emulation.set_timezone_override( + timezone=UNDEFINED, + contexts=[top_context["context"]], + ) + + @pytest.mark.parametrize("value", [ '', # Is an empty string 'America/New_York!', # Contains an invalid character diff --git a/testing/web-platform/tests/webdriver/tests/support/fixtures_bidi.py b/testing/web-platform/tests/webdriver/tests/support/fixtures_bidi.py @@ -1179,3 +1179,21 @@ async def assert_header_present(get_fetch_headers): f"header '{header_name}' should have value '{header_value}'" return assert_header_present + + +@pytest_asyncio.fixture +async def match_media_query(bidi_session): + async def match_media_query(context, media_query_type, media_query_value): + result = await bidi_session.script.call_function( + arguments=[ + {"type": "string", "value": media_query_type}, + {"type": "number", "value": media_query_value}, + ], + function_declaration="""(type, value) => matchMedia(`(${type}: ${value}px)`).matches""", + target=ContextTarget(context["context"]), + await_promise=False, + ) + + return result["value"] + + return match_media_query