[wdspec] Add tests for navigation id in BiDi network event tests
Depends on D181131
Differential Revision: https://phabricator.services.mozilla.com/D183771
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1805405
gecko-commit: 4a5366c3dbf3a3ec10483c00ca12af72c2888c5f
gecko-reviewers: webdriver-reviewers, jgraham
diff --git a/webdriver/tests/bidi/network/__init__.py b/webdriver/tests/bidi/network/__init__.py
index 62dd554..19a4a69 100644
--- a/webdriver/tests/bidi/network/__init__.py
+++ b/webdriver/tests/bidi/network/__init__.py
@@ -101,6 +101,7 @@
def assert_base_parameters(
event,
context=None,
+ navigation=None,
redirect_count=None,
expected_request=None,
):
@@ -118,6 +119,9 @@
if context is not None:
assert event["context"] == context
+ if navigation is not None:
+ assert event["navigation"] == navigation
+
if redirect_count is not None:
assert event["redirectCount"] == redirect_count
@@ -129,6 +133,7 @@
def assert_before_request_sent_event(
event,
context=None,
+ navigation=None,
redirect_count=None,
expected_request=None,
):
@@ -140,6 +145,7 @@
assert_base_parameters(
event,
context=context,
+ navigation=navigation,
redirect_count=redirect_count,
expected_request=expected_request,
)
@@ -181,6 +187,7 @@
def assert_response_event(
event,
context=None,
+ navigation=None,
redirect_count=None,
expected_request=None,
expected_response=None,
@@ -194,6 +201,7 @@
assert_base_parameters(
event,
context=context,
+ navigation=navigation,
redirect_count=redirect_count,
expected_request=expected_request,
)
diff --git a/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py b/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py
index 5e7cfc6..04e70bf 100644
--- a/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py
+++ b/webdriver/tests/bidi/network/before_request_sent/before_request_sent.py
@@ -62,7 +62,7 @@
@pytest.mark.asyncio
async def test_load_page_twice(
- bidi_session, top_context, wait_for_event, url, fetch, setup_network_test
+ bidi_session, top_context, wait_for_event, url, setup_network_test
):
html_url = url(PAGE_EMPTY_HTML)
@@ -86,6 +86,45 @@
)
+@pytest.mark.asyncio
+async def test_navigation_id(
+ bidi_session, top_context, wait_for_event, url, fetch, setup_network_test
+):
+ html_url = url(PAGE_EMPTY_HTML)
+
+ network_events = await setup_network_test(events=["network.beforeRequestSent"])
+ events = network_events["network.beforeRequestSent"]
+
+ on_before_request_sent = wait_for_event("network.beforeRequestSent")
+ result = await bidi_session.browsing_context.navigate(
+ context=top_context["context"],
+ url=html_url,
+ wait="complete",
+ )
+ await on_before_request_sent
+
+ assert len(events) == 1
+ expected_request = {"method": "GET", "url": html_url}
+ assert_before_request_sent_event(
+ events[0], expected_request=expected_request, navigation=result["navigation"]
+ )
+ assert events[0]["navigation"] is not None
+
+ text_url = url(PAGE_EMPTY_TEXT)
+ on_before_request_sent = wait_for_event("network.beforeRequestSent")
+ await fetch(text_url, method="GET")
+ await on_before_request_sent
+
+ assert len(events) == 2
+ expected_request = {"method": "GET", "url": text_url}
+ assert_before_request_sent_event(
+ events[1],
+ expected_request=expected_request,
+ )
+ # Check that requests not related to a navigation have no navigation id.
+ assert events[1]["navigation"] is None
+
+
@pytest.mark.parametrize(
"method",
[
@@ -248,7 +287,7 @@
network_events = await setup_network_test(events=["network.beforeRequestSent"])
events = network_events["network.beforeRequestSent"]
- await bidi_session.browsing_context.navigate(
+ result = await bidi_session.browsing_context.navigate(
context=top_context["context"],
url=http_equiv_url,
wait="complete",
@@ -265,6 +304,7 @@
events[0],
expected_request=expected_request,
redirect_count=0,
+ navigation=result["navigation"],
)
# http-equiv redirect should not be considered as a redirect: redirect_count
# should be 0.
@@ -277,3 +317,46 @@
# Check that the http-equiv redirect request has a different requestId
assert events[0]["request"]["request"] != events[1]["request"]["request"]
+
+ # Check that the http-equiv redirect request also has a navigation id set,
+ # but different from the original request.
+ assert events[1]["navigation"] is not None
+ assert events[1]["navigation"] != events[0]["navigation"]
+
+
+@pytest.mark.asyncio
+async def test_redirect_navigation(
+ bidi_session, top_context, wait_for_event, url, setup_network_test
+):
+ html_url = url(PAGE_EMPTY_HTML)
+ redirect_url = url(
+ f"/webdriver/tests/support/http_handlers/redirect.py?location={html_url}"
+ )
+
+ network_events = await setup_network_test(events=["network.beforeRequestSent"])
+ events = network_events["network.beforeRequestSent"]
+
+ result = await bidi_session.browsing_context.navigate(
+ context=top_context["context"],
+ url=redirect_url,
+ wait="complete",
+ )
+
+ assert len(events) == 2
+ expected_request = {"method": "GET", "url": redirect_url}
+ assert_before_request_sent_event(
+ events[0],
+ expected_request=expected_request,
+ navigation=result["navigation"],
+ redirect_count=0,
+ )
+ expected_request = {"method": "GET", "url": html_url}
+ assert_before_request_sent_event(
+ events[1],
+ expected_request=expected_request,
+ navigation=result["navigation"],
+ redirect_count=1,
+ )
+
+ # Check that both requests share the same requestId
+ assert events[0]["request"]["request"] == events[1]["request"]["request"]
diff --git a/webdriver/tests/bidi/network/combined/network_events.py b/webdriver/tests/bidi/network/combined/network_events.py
index f4af23b..9eb79dd 100644
--- a/webdriver/tests/bidi/network/combined/network_events.py
+++ b/webdriver/tests/bidi/network/combined/network_events.py
@@ -12,6 +12,53 @@
@pytest.mark.asyncio
+async def test_same_navigation_id(
+ bidi_session, top_context, wait_for_event, url, setup_network_test
+):
+ network_events = await setup_network_test(
+ events=[
+ "network.beforeRequestSent",
+ "network.responseStarted",
+ "network.responseCompleted",
+ ],
+ contexts=[top_context["context"]],
+ )
+
+ html_url = url(PAGE_EMPTY_HTML)
+ on_response_completed = wait_for_event("network.responseCompleted")
+ result = await bidi_session.browsing_context.navigate(
+ context=top_context["context"],
+ url=html_url,
+ wait="complete",
+ )
+ await on_response_completed
+
+ assert len(network_events["network.beforeRequestSent"]) == 1
+ assert len(network_events["network.responseStarted"]) == 1
+ assert len(network_events["network.responseCompleted"]) == 1
+ expected_request = {"method": "GET", "url": html_url}
+ expected_response = {"url": html_url}
+ assert_before_request_sent_event(
+ network_events["network.beforeRequestSent"][0],
+ expected_request=expected_request,
+ context=top_context["context"],
+ navigation=result["navigation"],
+ )
+ assert_response_event(
+ network_events["network.responseStarted"][0],
+ expected_response=expected_response,
+ context=top_context["context"],
+ navigation=result["navigation"],
+ )
+ assert_response_event(
+ network_events["network.responseCompleted"][0],
+ expected_response=expected_response,
+ context=top_context["context"],
+ navigation=result["navigation"],
+ )
+
+
+@pytest.mark.asyncio
async def test_same_request_id(wait_for_event, url, setup_network_test, fetch):
network_events = await setup_network_test(
events=[
diff --git a/webdriver/tests/bidi/network/response_completed/response_completed.py b/webdriver/tests/bidi/network/response_completed/response_completed.py
index 09769fc..fcd5c47 100644
--- a/webdriver/tests/bidi/network/response_completed/response_completed.py
+++ b/webdriver/tests/bidi/network/response_completed/response_completed.py
@@ -97,7 +97,7 @@
events = network_events[RESPONSE_COMPLETED_EVENT]
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
- await bidi_session.browsing_context.navigate(
+ result = await bidi_session.browsing_context.navigate(
context=top_context["context"],
url=html_url,
wait="complete",
@@ -118,6 +118,7 @@
events[0],
expected_request=expected_request,
expected_response=expected_response,
+ navigation=result["navigation"],
redirect_count=0,
)
@@ -159,9 +160,7 @@
@pytest.mark.asyncio
-async def test_response_headers(
- wait_for_event, url, fetch, setup_network_test
-):
+async def test_response_headers(wait_for_event, url, fetch, setup_network_test):
headers_url = url(
"/webdriver/tests/support/http_handlers/headers.py?header=foo:bar&header=baz:biz"
)
@@ -207,7 +206,7 @@
)
@pytest.mark.asyncio
async def test_response_mime_type_file(
- url, wait_for_event, fetch, setup_network_test, page_url, mime_type
+ url, wait_for_event, fetch, setup_network_test, page_url, mime_type
):
network_events = await setup_network_test(events=[RESPONSE_COMPLETED_EVENT])
events = network_events[RESPONSE_COMPLETED_EVENT]
@@ -285,7 +284,7 @@
protocol=protocol,
parameters=parameters,
)
- await bidi_session.browsing_context.navigate(
+ first_navigate = await bidi_session.browsing_context.navigate(
context=new_tab["context"],
url=initial_url,
wait="complete",
@@ -296,7 +295,7 @@
redirect_url = url(
f"/webdriver/tests/support/http_handlers/redirect.py?location={quote(initial_url)}"
)
- await bidi_session.browsing_context.navigate(
+ second_navigate = await bidi_session.browsing_context.navigate(
context=new_tab["context"],
url=redirect_url,
wait="complete",
@@ -311,15 +310,24 @@
expected_request = {"method": "GET", "url": initial_url}
assert_response_event(
- events[0], expected_request=expected_request, redirect_count=0
+ events[0],
+ expected_request=expected_request,
+ redirect_count=0,
+ navigation=first_navigate["navigation"],
)
expected_request = {"method": "GET", "url": redirect_url}
assert_response_event(
- events[1], expected_request=expected_request, redirect_count=0
+ events[1],
+ expected_request=expected_request,
+ redirect_count=0,
+ navigation=second_navigate["navigation"],
)
expected_request = {"method": "GET", "url": initial_url}
assert_response_event(
- events[2], expected_request=expected_request, redirect_count=1
+ events[2],
+ expected_request=expected_request,
+ redirect_count=1,
+ navigation=second_navigate["navigation"],
)
# Check that the last 2 requests share the same request id
diff --git a/webdriver/tests/bidi/network/response_started/response_started.py b/webdriver/tests/bidi/network/response_started/response_started.py
index b7b918b..d3a84fd 100644
--- a/webdriver/tests/bidi/network/response_started/response_started.py
+++ b/webdriver/tests/bidi/network/response_started/response_started.py
@@ -79,7 +79,7 @@
events = network_events[RESPONSE_STARTED_EVENT]
on_response_started = wait_for_event(RESPONSE_STARTED_EVENT)
- await bidi_session.browsing_context.navigate(
+ result = await bidi_session.browsing_context.navigate(
context=top_context["context"],
url=html_url,
wait="complete",
@@ -100,6 +100,7 @@
events[0],
expected_request=expected_request,
expected_response=expected_response,
+ navigation=result["navigation"],
redirect_count=0,
)