blob: aaa4a9e79ed5ff8d0cfb9aff2306400412baab91 [file] [log] [blame]
# META: timeout=long
import pytest
from .. import (
assert_before_request_sent_event,
assert_response_event,
)
PAGE_EMPTY_HTML = "/webdriver/tests/bidi/network/support/empty.html"
PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
PAGE_OTHER_TEXT = "/webdriver/tests/bidi/network/support/other.txt"
@pytest.mark.asyncio
@pytest.mark.parametrize("phase", [
"beforeRequestSent",
"responseStarted",
])
async def test_remove_intercept(
bidi_session, wait_for_event, url, setup_network_test, add_intercept, subscribe_events, top_context, wait_for_future_safe, phase
):
network_events = await setup_network_test(
events=[
"network.beforeRequestSent",
"network.responseStarted",
"network.responseCompleted",
]
)
before_request_sent_events = network_events["network.beforeRequestSent"]
response_started_events = network_events["network.responseStarted"]
response_completed_events = network_events["network.responseCompleted"]
text_url = url(PAGE_EMPTY_TEXT)
intercept = await add_intercept(
phases=[phase],
url_patterns=[{"type": "string", "pattern": text_url}],
)
on_network_event = wait_for_event(f"network.{phase}")
await subscribe_events(events=["browsingContext.load"], contexts=[top_context["context"]])
browsing_context_load_events = []
async def on_browsing_context_load_event(method, data):
browsing_context_load_events.append(data)
remove_listener = bidi_session.add_event_listener("browsingContext.load", on_browsing_context_load_event)
# Request to top_context should be blocked.
# TODO(https://github.com/w3c/webdriver-bidi/issues/188): Use a timeout argument when available.
await bidi_session.browsing_context.navigate(context=top_context["context"], url=text_url, wait="complete")
await wait_for_future_safe(on_network_event)
assert len(before_request_sent_events) == 1
if phase == "beforeRequestSent":
assert len(response_started_events) == 0
assert_before_request_sent_event(
before_request_sent_events[0], is_blocked=True, intercepts=[intercept]
)
elif phase == "responseStarted":
assert len(response_started_events) == 1
assert_before_request_sent_event(
before_request_sent_events[0], is_blocked=False
)
assert_response_event(
response_started_events[0], is_blocked=True, intercepts=[intercept]
)
# Check that we did not receive response completed events.
assert len(response_completed_events) == 0
# Remove the intercept
await bidi_session.network.remove_intercept(intercept=intercept)
# The next request should not be blocked
on_response_completed = wait_for_event("network.responseCompleted")
await bidi_session.browsing_context.navigate(context=top_context["context"], url=text_url, wait="complete")
await on_response_completed
# Assert the network events have the expected interception properties
assert len(before_request_sent_events) == 2
assert_before_request_sent_event(before_request_sent_events[1], is_blocked=False)
if phase == "beforeRequestSent":
assert len(response_started_events) == 1
assert_response_event(response_started_events[0], is_blocked=False)
elif phase == "responseStarted":
assert len(response_started_events) == 2
assert_response_event(response_started_events[1], is_blocked=False)
assert len(response_completed_events) == 1
assert_response_event(response_completed_events[0], is_blocked=False)
assert len(browsing_context_load_events) == 0
remove_listener()
@pytest.mark.asyncio
async def test_return_value(bidi_session, add_intercept):
intercept = await add_intercept(
phases=["beforeRequestSent"],
url_patterns=[],
)
result = await bidi_session.network.remove_intercept(intercept=intercept)
assert result == {}