blob: 632e7ffa26c626e79a054df056913f73ba50c9b6 [file] [log] [blame]
import pytest
from webdriver.bidi.modules.network import NetworkStringValue
from webdriver.bidi.modules.storage import (
BrowsingContextPartitionDescriptor,
StorageKeyPartitionDescriptor,
)
from .. import create_cookie, get_default_partition_key
from ... import recursive_compare
pytestmark = pytest.mark.asyncio
async def test_default_partition(
bidi_session,
top_context,
new_tab,
test_page,
test_page_cross_origin,
domain_value,
add_cookie,
):
await bidi_session.browsing_context.navigate(
context=top_context["context"], url=test_page_cross_origin, wait="complete"
)
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=test_page, wait="complete"
)
cookie1_name = "foo"
cookie1_value = "bar"
await add_cookie(new_tab["context"], cookie1_name, cookie1_value)
cookie2_name = "foo_2"
cookie2_value = "bar_2"
await add_cookie(top_context["context"], cookie2_name, cookie2_value)
cookies = await bidi_session.storage.get_cookies()
assert cookies["partitionKey"] == {
**(await get_default_partition_key(bidi_session)),
}
assert len(cookies["cookies"]) == 2
# Provide consistent cookies order.
(cookie_1, cookie_2) = sorted(cookies["cookies"], key=lambda c: c["domain"])
recursive_compare(
{
"domain": domain_value(),
"httpOnly": False,
"name": cookie1_name,
"path": "/webdriver/tests/support",
"sameSite": "none",
"secure": False,
"size": 6,
"value": {"type": "string", "value": cookie1_value},
},
cookie_2,
)
recursive_compare(
{
"domain": domain_value("alt"),
"httpOnly": False,
"name": cookie2_name,
"path": "/webdriver/tests/support",
"sameSite": "none",
"secure": False,
"size": 10,
"value": {"type": "string", "value": cookie2_value},
},
cookie_1,
)
async def test_partition_context(
bidi_session,
new_tab,
test_page,
domain_value,
add_cookie,
create_user_context,
test_page_cross_origin,
):
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=test_page, wait="complete"
)
user_context = await create_user_context()
# Create a new browsing context in another user context.
new_context = await bidi_session.browsing_context.create(
user_context=user_context, type_hint="tab"
)
await bidi_session.browsing_context.navigate(
context=new_context["context"], url=test_page_cross_origin, wait="complete"
)
cookie_name = "foo"
cookie_value = "bar"
await add_cookie(new_tab["context"], cookie_name, cookie_value)
# Check that added cookies are present on the right context.
cookies = await bidi_session.storage.get_cookies(
partition=BrowsingContextPartitionDescriptor(new_tab["context"])
)
assert cookies["partitionKey"] == {
**(await get_default_partition_key(bidi_session, new_tab["context"])),
"userContext": "default"
}
assert len(cookies["cookies"]) == 1
recursive_compare(
{
"domain": domain_value(),
"httpOnly": False,
"name": cookie_name,
"path": "/webdriver/tests/support",
"sameSite": "none",
"secure": False,
"size": 6,
"value": {"type": "string", "value": cookie_value},
},
cookies["cookies"][0],
)
# Check that added cookies are not present on the context in the other user context.
cookies = await bidi_session.storage.get_cookies(
partition=BrowsingContextPartitionDescriptor(new_context["context"])
)
assert cookies["partitionKey"] == {
**(await get_default_partition_key(bidi_session, new_context["context"])),
"userContext": user_context
}
assert len(cookies["cookies"]) == 0
async def test_partition_context_with_different_domain(
bidi_session, set_cookie, new_tab, test_page, domain_value
):
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=test_page, wait="complete"
)
# Set cookie on a different domain.
cookie_domain = domain_value(domain="alt")
cookie_name = "foo"
cookie_value = "bar"
partition = BrowsingContextPartitionDescriptor(new_tab["context"])
await set_cookie(
cookie=create_cookie(
domain=cookie_domain,
name=cookie_name,
value=NetworkStringValue(cookie_value),
),
partition=partition,
)
result = await bidi_session.storage.get_cookies(
partition=BrowsingContextPartitionDescriptor(new_tab["context"])
)
assert result["cookies"] == [
{
"domain": cookie_domain,
"httpOnly": False,
"name": cookie_name,
"path": "/",
"sameSite": "none",
"secure": True,
"size": 6,
"value": {"type": "string", "value": cookie_value},
}
]
@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"])
async def test_partition_context_iframe(
bidi_session, new_tab, inline, domain_value, domain, set_cookie
):
iframe_url = inline("<div id='in-iframe'>foo</div>", domain=domain)
page_url = inline(f"<iframe src='{iframe_url}'></iframe>")
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=page_url, wait="complete"
)
contexts = await bidi_session.browsing_context.get_tree(root=new_tab["context"])
iframe_context = contexts[0]["children"][0]
cookie_name = "foo"
cookie_value = "bar"
await set_cookie(
cookie=create_cookie(
domain=domain_value(domain),
name=cookie_name,
value=NetworkStringValue(cookie_value),
),
partition=BrowsingContextPartitionDescriptor(iframe_context["context"]),
)
# Check that added cookies are present on the right context
cookies = await bidi_session.storage.get_cookies(
partition=BrowsingContextPartitionDescriptor(iframe_context["context"])
)
recursive_compare(
{
"cookies": [
{
"domain": domain_value(domain=domain),
"httpOnly": False,
"name": cookie_name,
"path": "/",
"sameSite": "none",
"secure": True,
"size": 6,
"value": {"type": "string", "value": cookie_value},
}
],
"partitionKey": {"userContext": "default"},
},
cookies,
)
@pytest.mark.parametrize(
"protocol",
[
"http",
"https",
],
)
async def test_partition_source_origin(
bidi_session,
new_tab,
top_context,
inline,
test_page_cross_origin,
domain_value,
origin,
set_cookie,
protocol,
):
url = inline("<div>bar</div>", protocol=protocol)
await bidi_session.browsing_context.navigate(
context=new_tab["context"], url=url, wait="complete"
)
source_origin_1 = origin(protocol)
cookie_name = "foo"
cookie_value = "bar"
await set_cookie(
cookie=create_cookie(
domain=domain_value(),
name=cookie_name,
value=NetworkStringValue(cookie_value),
),
partition=StorageKeyPartitionDescriptor(source_origin=source_origin_1),
)
await bidi_session.browsing_context.navigate(
context=top_context["context"], url=test_page_cross_origin, wait="complete"
)
source_origin_2 = origin(domain="alt")
# Check that added cookies are present on the right origin
cookies = await bidi_session.storage.get_cookies(
partition=StorageKeyPartitionDescriptor(source_origin=source_origin_1)
)
recursive_compare(
{
"cookies": [
{
"domain": domain_value(),
"httpOnly": False,
"name": cookie_name,
"path": "/",
"sameSite": "none",
"secure": True,
"size": 6,
"value": {"type": "string", "value": cookie_value},
}
],
"partitionKey": {"sourceOrigin": source_origin_1},
},
cookies,
)
# Check that added cookies are present on the other origin.
cookies = await bidi_session.storage.get_cookies(
partition=StorageKeyPartitionDescriptor(source_origin=source_origin_2)
)
recursive_compare(
{
"cookies": [],
"partitionKey": {"sourceOrigin": source_origin_2},
},
cookies,
)
async def test_partition_default_user_context(
bidi_session,
test_page,
domain_value,
add_cookie,
):
new_context = await bidi_session.browsing_context.create(type_hint="tab")
await bidi_session.browsing_context.navigate(
context=new_context["context"], url=test_page, wait="complete"
)
cookie_name = "foo"
cookie_value = "bar"
await add_cookie(new_context["context"], cookie_name, cookie_value)
# Check that added cookies are present on the right user context.
result = await bidi_session.storage.get_cookies(
partition=StorageKeyPartitionDescriptor(user_context="default")
)
expected_cookies = [
{
"domain": domain_value(),
"httpOnly": False,
"name": cookie_name,
"path": "/webdriver/tests/support",
"sameSite": "none",
"secure": False,
"size": 6,
"value": {"type": "string", "value": cookie_value},
}
]
recursive_compare(
{
"cookies": expected_cookies,
"partitionKey": {"userContext": "default"},
},
result,
)
async def test_partition_user_context(
bidi_session,
test_page,
domain_value,
create_user_context,
test_page_cross_origin,
add_cookie,
):
user_context_1 = await create_user_context()
new_context_1 = await bidi_session.browsing_context.create(
user_context=user_context_1, type_hint="tab"
)
await bidi_session.browsing_context.navigate(
context=new_context_1["context"], url=test_page, wait="complete"
)
user_context_2 = await create_user_context()
new_context_2 = await bidi_session.browsing_context.create(
user_context=user_context_2, type_hint="tab"
)
await bidi_session.browsing_context.navigate(
context=new_context_2["context"], url=test_page_cross_origin, wait="complete"
)
cookie_name = "foo_1"
cookie_value = "bar_1"
await add_cookie(new_context_1["context"], cookie_name, cookie_value)
# Check that added cookies are present on the right user context.
result = await bidi_session.storage.get_cookies(
partition=StorageKeyPartitionDescriptor(user_context=user_context_1)
)
expected_cookies = [
{
"domain": domain_value(),
"httpOnly": False,
"name": cookie_name,
"path": "/webdriver/tests/support",
"sameSite": "none",
"secure": False,
"size": 10,
"value": {"type": "string", "value": cookie_value},
}
]
recursive_compare(
{
"cookies": expected_cookies,
"partitionKey": {"userContext": user_context_1},
},
result,
)
# Check that added cookies are not present on the other user context.
result = await bidi_session.storage.get_cookies(
partition=StorageKeyPartitionDescriptor(user_context=user_context_2)
)
recursive_compare(
{
"cookies": [],
"partitionKey": {"userContext": user_context_2},
},
result,
)