Skip to content

Commit

Permalink
[wdspec] Improve "browsingContext.setViewport" tests to trigger reflows.
Browse files Browse the repository at this point in the history
Without an actual page loaded, changing the viewport will not trigger
any reflow and as such doesn't test real use-case scenarios.

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

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1865618
gecko-commit: 988211aadb0d43726c920e868dfa7dd055f7fa77
gecko-reviewers: webdriver-reviewers, Sasha
  • Loading branch information
whimboo authored and moz-wptsync-bot committed Nov 26, 2023
1 parent 79f8fd3 commit b19c370
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,15 @@

@pytest.mark.asyncio
@pytest.mark.parametrize("device_pixel_ratio", [0.5, 2])
async def test_device_pixel_ratio_only(bidi_session, new_tab, device_pixel_ratio):
async def test_device_pixel_ratio_only(bidi_session, inline, new_tab, device_pixel_ratio):
viewport = await get_viewport_dimensions(bidi_session, new_tab)

# Load a page so that reflow is triggered when changing the DPR
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
device_pixel_ratio=device_pixel_ratio)
Expand All @@ -18,11 +24,19 @@ async def test_device_pixel_ratio_only(bidi_session, new_tab, device_pixel_ratio

@pytest.mark.asyncio
@pytest.mark.parametrize("device_pixel_ratio", [0.5, 2])
async def test_device_pixel_ratio_with_viewport(bidi_session, new_tab, device_pixel_ratio):
async def test_device_pixel_ratio_with_viewport(
bidi_session, inline, new_tab, device_pixel_ratio
):
test_viewport = {"width": 250, "height": 300}

assert await get_viewport_dimensions(bidi_session, new_tab) != test_viewport

# Load a page so that reflow is triggered when changing the DPR
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=test_viewport,
Expand All @@ -33,10 +47,16 @@ async def test_device_pixel_ratio_with_viewport(bidi_session, new_tab, device_pi


@pytest.mark.asyncio
async def test_reset_device_pixel_ratio(bidi_session, new_tab):
async def test_reset_device_pixel_ratio(bidi_session, inline, new_tab):
original_dpr = await get_device_pixel_ratio(bidi_session, new_tab)
test_dpr = original_dpr + 1

# Load a page so that reflow is triggered when changing the DPR
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
device_pixel_ratio=test_dpr)
Expand Down
90 changes: 64 additions & 26 deletions webdriver/tests/bidi/browsing_context/set_viewport/viewport.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

from ... import get_viewport_dimensions


@pytest.mark.asyncio
async def test_set_viewport(bidi_session, new_tab):
test_viewport = {"width": 250, "height": 300}
Expand All @@ -17,11 +18,17 @@ async def test_set_viewport(bidi_session, new_tab):


@pytest.mark.asyncio
async def test_set_viewport_same_dimensions(bidi_session, new_tab):
test_viewport = {"width": 250, "height": 300}
async def test_undefined_viewport(bidi_session, inline, new_tab):
test_viewport = {"width": 499, "height": 599}

assert await get_viewport_dimensions(bidi_session, new_tab) != test_viewport

# Load a page so that reflow is triggered when changing the viewport
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=test_viewport)
Expand All @@ -30,19 +37,57 @@ async def test_set_viewport_same_dimensions(bidi_session, new_tab):

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=test_viewport)
viewport=UNDEFINED)

assert await get_viewport_dimensions(bidi_session, new_tab) == test_viewport


@pytest.mark.asyncio
async def test_set_viewport_reset(bidi_session, new_tab):
@pytest.mark.parametrize("width, height", [
(250, 300),
(500, 300),
(250, 600),
(500, 600)
], ids=["none", "width", "height", "both"])
async def test_modified_dimensions(bidi_session, inline, new_tab, width, height):
start_viewport = {"width": 250, "height": 300}

assert await get_viewport_dimensions(bidi_session, new_tab) != start_viewport

# Load a page so that reflow is triggered when changing the viewport
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=start_viewport)

assert await get_viewport_dimensions(bidi_session, new_tab) == start_viewport

modified_viewport = {"width": width, "height": height}
await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=modified_viewport)

assert await get_viewport_dimensions(bidi_session, new_tab) == modified_viewport


@pytest.mark.asyncio
async def test_reset_to_default(bidi_session, inline, new_tab):
original_viewport = await get_viewport_dimensions(bidi_session, new_tab)

test_viewport = {"width": 666, "height": 333}

assert await get_viewport_dimensions(bidi_session, new_tab) != test_viewport

# Load a page so that reflow is triggered when changing the viewport
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=test_viewport
Expand All @@ -58,13 +103,19 @@ async def test_set_viewport_reset(bidi_session, new_tab):


@pytest.mark.asyncio
async def test_set_viewport_affects_specific_context(bidi_session, top_context, new_tab):
async def test_specific_context(bidi_session, inline, new_tab, top_context):
original_viewport = await get_viewport_dimensions(bidi_session, top_context)

test_viewport = {"width": 333, "height": 666}

assert await get_viewport_dimensions(bidi_session, new_tab) != test_viewport

# Load a page so that reflow is triggered when changing the viewport
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=test_viewport
Expand All @@ -84,7 +135,7 @@ async def test_set_viewport_affects_specific_context(bidi_session, top_context,
"https coop"
])
@pytest.mark.asyncio
async def test_set_viewport_persists_on_navigation(bidi_session, new_tab, inline, protocol, parameters):
async def test_persists_on_navigation(bidi_session, new_tab, inline, protocol, parameters):
test_viewport = {"width": 499, "height": 599}

assert await get_viewport_dimensions(bidi_session, new_tab) != test_viewport
Expand All @@ -111,11 +162,17 @@ async def test_set_viewport_persists_on_navigation(bidi_session, new_tab, inline


@pytest.mark.asyncio
async def test_set_viewport_persists_on_reload(bidi_session, new_tab):
async def test_persists_on_reload(bidi_session, inline, new_tab):
test_viewport = {"width": 499, "height": 599}

assert await get_viewport_dimensions(bidi_session, new_tab) != test_viewport

# Load a page so that reflow is triggered when changing the viewport
url = inline("<div>foo</div>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=test_viewport)
Expand All @@ -127,22 +184,3 @@ async def test_set_viewport_persists_on_reload(bidi_session, new_tab):
)

assert await get_viewport_dimensions(bidi_session, new_tab) == test_viewport


@pytest.mark.asyncio
async def test_set_viewport_undefined(bidi_session, new_tab):
test_viewport = {"width": 499, "height": 599}

assert await get_viewport_dimensions(bidi_session, new_tab) != test_viewport

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=test_viewport)

assert await get_viewport_dimensions(bidi_session, new_tab) == test_viewport

await bidi_session.browsing_context.set_viewport(
context=new_tab["context"],
viewport=UNDEFINED)

assert await get_viewport_dimensions(bidi_session, new_tab) == test_viewport

0 comments on commit b19c370

Please sign in to comment.