[wdspec] Update tests for "viewport" argument for "browsingContext.setViewport" to check for scrollbar sizes.

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

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1878070
gecko-commit: 99d244bc49eb8a6f1528c3331679528dadde4fe1
gecko-reviewers: webdriver-reviewers, whimboo, jdescottes
diff --git a/webdriver/tests/bidi/__init__.py b/webdriver/tests/bidi/__init__.py
index 98b670f..ad1921b 100644
--- a/webdriver/tests/bidi/__init__.py
+++ b/webdriver/tests/bidi/__init__.py
@@ -128,13 +128,21 @@
     return remote_mapping_to_dict(result["value"])
 
 
-async def get_viewport_dimensions(bidi_session, context: str):
-    expression = """
-        ({
-          height: window.innerHeight || document.documentElement.clientHeight,
-          width: window.innerWidth || document.documentElement.clientWidth,
-        });
-    """
+async def get_viewport_dimensions(bidi_session, context: str, with_scrollbar: bool = True):
+    if with_scrollbar == True:
+        expression = """
+            ({
+                height: window.innerHeight,
+                width: window.innerWidth,
+            });
+        """
+    else:
+        expression = """
+            ({
+                height: document.documentElement.clientHeight,
+                width: document.documentElement.clientWidth,
+            });
+        """
     result = await bidi_session.script.evaluate(
         expression=expression,
         target=ContextTarget(context["context"]),
diff --git a/webdriver/tests/bidi/browsing_context/set_viewport/viewport.py b/webdriver/tests/bidi/browsing_context/set_viewport/viewport.py
index 60f9e47..2e8126b 100644
--- a/webdriver/tests/bidi/browsing_context/set_viewport/viewport.py
+++ b/webdriver/tests/bidi/browsing_context/set_viewport/viewport.py
@@ -184,3 +184,65 @@
     )
 
     assert await get_viewport_dimensions(bidi_session, new_tab) == test_viewport
+
+
+@pytest.mark.asyncio
+@pytest.mark.parametrize(
+    "use_horizontal_scrollbar, use_vertical_scrollbar",
+    [
+        (True, False),
+        (False, True),
+        (True, True),
+    ],
+    ids=["horizontal", "vertical", "both"],
+)
+@pytest.mark.parametrize(
+    "doctype",
+    ["html", "html_quirks"],
+    ids=["standard", "quirks"],
+)
+async def test_with_scrollbars(
+    bidi_session,
+    inline,
+    new_tab,
+    use_horizontal_scrollbar,
+    use_vertical_scrollbar,
+    doctype,
+):
+    viewport_dimensions = await get_viewport_dimensions(bidi_session, new_tab)
+
+    width = 100
+    if use_horizontal_scrollbar:
+        width = viewport_dimensions["width"] + 100
+
+    height = 100
+    if use_vertical_scrollbar:
+        height = viewport_dimensions["height"] + 100
+
+    html = f"""<div style="width: {width}px; height: {height}px;">foo</div>"""
+    page_url = inline(html, doctype=doctype)
+
+    await bidi_session.browsing_context.navigate(
+        context=new_tab["context"], url=page_url, wait="complete"
+    )
+
+    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
+
+    viewport_without_scrollbar = await get_viewport_dimensions(
+        bidi_session, new_tab, with_scrollbar=False
+    )
+
+    # The side which has scrollbar takes up space on the other side
+    # (e.g. if we have a horizontal scroll height is going to be smaller than viewport height)
+    if use_horizontal_scrollbar:
+        assert viewport_without_scrollbar["height"] < test_viewport["height"]
+    if use_vertical_scrollbar:
+        assert viewport_without_scrollbar["width"] < test_viewport["width"]
diff --git a/webdriver/tests/support/inline.py b/webdriver/tests/support/inline.py
index ecb2a25..8364e05 100644
--- a/webdriver/tests/support/inline.py
+++ b/webdriver/tests/support/inline.py
@@ -6,6 +6,7 @@
 
 BOILERPLATES = {
     "html": "<!doctype html>\n<meta charset={charset}>\n{src}",
+    "html_quirks": "{src}",
     "xhtml": """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
@@ -22,6 +23,7 @@
 }
 MIME_TYPES = {
     "html": "text/html",
+    "html_quirks": "text/html",
     "xhtml": "application/xhtml+xml",
     "xml": "text/xml",
     "js": "text/javascript",