Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

from urllib.parse import quote
import pytest
from . import navigate_and_assert
pytestmark = pytest.mark.asyncio
def dataURL(doc, mime_type="text/html", charset="utf-8", is_base64=False):
encoding = ""
if charset:
encoding = f"charset={charset}"
elif is_base64:
encoding = "base64"
return f"data:{mime_type};{encoding},{quote(doc)}"
HTML_BAR = dataURL("<p>bar</p>")
HTML_FOO = dataURL("<p>foo</p>")
IMG_BLACK_PIXEL = dataURL(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
"image/png",
None,
True,
)
IMG_RED_PIXEL = dataURL(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEX/TQBcNTh/AAAAAXRSTlPM0jRW/QAAAApJREFUeJxjYgAAAAYAAzY3fKgAAAAASUVORK5CYII=",
"image/png",
None,
True,
)
PAGE = "/webdriver/tests/bidi/browsing_context/support/empty.html"
TEXT_BAR = dataURL("bar", "text/plain")
TEXT_FOO = dataURL("foo", "text/plain")
def wrap_content_in_url(url, content):
"""Check if content is not data url and wrap it in the url function"""
if content.startswith("data:"):
return content
return url(content)
@pytest.mark.parametrize(
"url_before, url_after",
[
(PAGE, IMG_BLACK_PIXEL),
(IMG_BLACK_PIXEL, IMG_RED_PIXEL),
(IMG_BLACK_PIXEL, HTML_FOO),
(IMG_BLACK_PIXEL, PAGE),
(PAGE, HTML_FOO),
(HTML_FOO, TEXT_FOO),
(HTML_FOO, HTML_BAR),
(HTML_FOO, PAGE),
(PAGE, TEXT_FOO),
(TEXT_FOO, TEXT_BAR),
(TEXT_FOO, IMG_BLACK_PIXEL),
(TEXT_FOO, PAGE),
],
ids=[
"document to data:image",
"data:image to data:image",
"data:image to data:html",
"data:image to document",
"document to data:html",
"data:html to data:html",
"data:html to data:text",
"data:html to document",
"document to data:text",
"data:text to data:text",
"data:text to data:image",
"data:text to document",
],
)
async def test_navigate_from_single_page(
bidi_session, new_tab, url, url_before, url_after
):
await navigate_and_assert(
bidi_session,
new_tab,
wrap_content_in_url(url, url_before),
)
await navigate_and_assert(
bidi_session,
new_tab,
wrap_content_in_url(url, url_after),
)
async def test_navigate_in_iframe(bidi_session, inline, new_tab):
frame_start_url = inline("frame")
url_before = inline(f"<iframe src='{frame_start_url}'></iframe>")
contexts = await navigate_and_assert(bidi_session, new_tab, url_before)
assert len(contexts[0]["children"]) == 1
frame = contexts[0]["children"][0]
assert frame["url"] == frame_start_url
await navigate_and_assert(bidi_session, frame, HTML_BAR)