blob: d6ea0a28f75aaa4c8083cb289547dfd3bce6ce3e [file] [log] [blame]
import pytest
from webdriver.bidi.modules.script import ScriptEvaluateResultException
from .. import (
assert_before_request_sent_event,
assert_response_event,
)
PAGE_EMPTY_TEXT = "/webdriver/tests/bidi/network/support/empty.txt"
AUTH_REQUIRED_EVENT = "network.authRequired"
pytestmark = pytest.mark.asyncio
async def test_basic_authentication(
bidi_session,
new_tab,
wait_for_event,
url,
setup_network_test,
add_intercept,
):
network_events = await setup_network_test(
events=[
"network.beforeRequestSent",
"network.responseStarted",
"network.authRequired",
"network.responseCompleted",
]
)
before_request_sent_events = network_events["network.beforeRequestSent"]
response_started_events = network_events["network.responseStarted"]
auth_required_events = network_events["network.authRequired"]
response_completed_events = network_events["network.responseCompleted"]
auth_url = url("/webdriver/tests/support/http_handlers/authentication.py")
intercept = await add_intercept(
phases=["authRequired"],
url_patterns=[{"type": "string", "pattern": auth_url}],
)
assert isinstance(intercept, str)
on_auth_required = wait_for_event(AUTH_REQUIRED_EVENT)
await bidi_session.browsing_context.navigate(
context=new_tab["context"],
url=auth_url,
wait="none",
)
await on_auth_required
expected_request = {"method": "GET", "url": auth_url}
assert len(before_request_sent_events) == 1
assert len(response_started_events) == 1
assert len(auth_required_events) == 1
assert_before_request_sent_event(
before_request_sent_events[0],
expected_request=expected_request,
is_blocked=False,
)
assert_response_event(
response_started_events[0],
expected_request=expected_request,
is_blocked=False,
)
assert_response_event(
auth_required_events[0],
expected_request=expected_request,
is_blocked=True,
intercepts=[intercept],
)
# The request should remain blocked at the authRequired phase.
assert len(response_completed_events) == 0
async def test_no_authentication(
bidi_session,
wait_for_event,
url,
setup_network_test,
add_intercept,
fetch,
):
network_events = await setup_network_test(
events=[
"network.beforeRequestSent",
"network.responseStarted",
"network.authRequired",
"network.responseCompleted",
]
)
before_request_sent_events = network_events["network.beforeRequestSent"]
response_started_events = network_events["network.responseStarted"]
auth_required_events = network_events["network.authRequired"]
response_completed_events = network_events["network.responseCompleted"]
text_url = url(PAGE_EMPTY_TEXT)
intercept = await add_intercept(
phases=["authRequired"],
url_patterns=[{"type": "string", "pattern": text_url}],
)
assert isinstance(intercept, str)
on_network_event = wait_for_event("network.responseCompleted")
await fetch(text_url)
await on_network_event
expected_request = {"method": "GET", "url": text_url}
assert len(before_request_sent_events) == 1
assert len(response_started_events) == 1
assert len(response_completed_events) == 1
# Check that no network event was blocked because of the authRequired
# intercept since the URL does not trigger an auth prompt.
assert_before_request_sent_event(
before_request_sent_events[0],
expected_request=expected_request,
is_blocked=False,
)
assert_response_event(
response_started_events[0],
expected_request=expected_request,
is_blocked=False,
)
assert_response_event(
response_completed_events[0],
expected_request=expected_request,
is_blocked=False,
)
# No authRequired event should have been received.
assert len(auth_required_events) == 0