Skip to content

Commit 3c92c04

Browse files
juliandescottesmoz-wptsync-bot
authored andcommitted
[wdspec] Add additional wdspec tests for addDataCollector
Differential Revision: https://phabricator.services.mozilla.com/D259621 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1971780 gecko-commit: 5e406ac2932726ff70d73e9531114d494d5c3b7a gecko-reviewers: webdriver-reviewers, Sasha
1 parent 15468a2 commit 3c92c04

File tree

4 files changed

+305
-0
lines changed

4 files changed

+305
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import pytest
2+
import webdriver.bidi.error as error
3+
4+
pytestmark = pytest.mark.asyncio
5+
6+
7+
async def test_return_value(bidi_session, add_data_collector):
8+
collector = await add_data_collector(
9+
collector_type="blob", data_types=["response"], max_encoded_data_size=1000
10+
)
11+
other_collector = await add_data_collector(
12+
collector_type="blob", data_types=["response"], max_encoded_data_size=1000
13+
)
14+
assert isinstance(collector, str)
15+
assert isinstance(other_collector, str)
16+
assert collector != other_collector
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import pytest
2+
import webdriver.bidi.error as error
3+
4+
from .. import PAGE_EMPTY_TEXT, RESPONSE_COMPLETED_EVENT
5+
6+
pytestmark = pytest.mark.asyncio
7+
8+
9+
async def test_multiple_contexts(
10+
bidi_session,
11+
add_data_collector,
12+
setup_network_test,
13+
wait_for_event,
14+
wait_for_future_safe,
15+
url,
16+
fetch,
17+
):
18+
context = await bidi_session.browsing_context.create(type_hint="tab")
19+
other_context = await bidi_session.browsing_context.create(type_hint="tab")
20+
await setup_network_test(
21+
events=[RESPONSE_COMPLETED_EVENT], context=context["context"]
22+
)
23+
await setup_network_test(
24+
events=[RESPONSE_COMPLETED_EVENT], context=other_context["context"]
25+
)
26+
27+
collector = await add_data_collector(contexts=[context["context"]])
28+
other_collector = await add_data_collector(contexts=[other_context["context"]])
29+
both_contexts_collector = await add_data_collector(
30+
contexts=[context["context"], other_context["context"]]
31+
)
32+
33+
# Trigger a request in `context`
34+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
35+
await fetch(url(PAGE_EMPTY_TEXT), context=context)
36+
event = await wait_for_future_safe(on_response_completed)
37+
request = event["request"]["request"]
38+
39+
# Trigger a request in `other_context`
40+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
41+
await fetch(url(PAGE_EMPTY_TEXT), context=other_context)
42+
event = await wait_for_future_safe(on_response_completed)
43+
other_request = event["request"]["request"]
44+
45+
# request data can be retrieved from collector or both_contexts_collectors
46+
await bidi_session.network.get_data(
47+
request=request, data_type="response", collector=collector
48+
)
49+
await bidi_session.network.get_data(
50+
request=request, data_type="response", collector=both_contexts_collector
51+
)
52+
with pytest.raises(error.NoSuchNetworkDataException):
53+
await bidi_session.network.get_data(
54+
request=request, data_type="response", collector=other_collector
55+
)
56+
57+
# other_request data can be retrieved from other_collector or both_contexts_collectors
58+
await bidi_session.network.get_data(
59+
request=other_request, data_type="response", collector=other_collector
60+
)
61+
await bidi_session.network.get_data(
62+
request=other_request, data_type="response", collector=both_contexts_collector
63+
)
64+
with pytest.raises(error.NoSuchNetworkDataException):
65+
await bidi_session.network.get_data(
66+
request=other_request, data_type="response", collector=collector
67+
)
68+
69+
70+
@pytest.mark.parametrize("domain", ["", "alt"], ids=["same_origin", "cross_origin"])
71+
async def test_iframe(
72+
bidi_session,
73+
add_data_collector,
74+
setup_network_test,
75+
wait_for_event,
76+
wait_for_future_safe,
77+
url,
78+
fetch,
79+
domain,
80+
inline,
81+
new_tab,
82+
):
83+
iframe_url = inline("<div id='in-iframe'>foo</div>", domain=domain)
84+
page_url = inline(f"<iframe src='{iframe_url}'></iframe>")
85+
86+
await setup_network_test(
87+
events=[RESPONSE_COMPLETED_EVENT], context=new_tab["context"], test_url=page_url
88+
)
89+
90+
collector = await add_data_collector(contexts=[new_tab["context"]])
91+
92+
# Trigger a fetch request in the iframe context.
93+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
94+
await fetch(url(PAGE_EMPTY_TEXT), context=new_tab)
95+
event = await wait_for_future_safe(on_response_completed)
96+
request = event["request"]["request"]
97+
98+
# Check that the data for the iframe request has been collected.
99+
await bidi_session.network.get_data(request=request, data_type="response")
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import pytest
2+
import webdriver.bidi.error as error
3+
4+
from .. import PAGE_EMPTY_TEXT, RESPONSE_COMPLETED_EVENT
5+
6+
pytestmark = pytest.mark.asyncio
7+
8+
9+
async def test_max_encoded_data_size(
10+
bidi_session,
11+
add_data_collector,
12+
setup_network_test,
13+
wait_for_event,
14+
wait_for_future_safe,
15+
url,
16+
fetch,
17+
):
18+
context = await bidi_session.browsing_context.create(type_hint="tab")
19+
await setup_network_test(
20+
events=[RESPONSE_COMPLETED_EVENT], context=context["context"]
21+
)
22+
23+
small_collector = await add_data_collector(max_encoded_data_size=1)
24+
big_collector = await add_data_collector(max_encoded_data_size=100000)
25+
26+
# Trigger a request in `context`
27+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
28+
await fetch(url(PAGE_EMPTY_TEXT), context=context)
29+
event = await wait_for_future_safe(on_response_completed)
30+
request = event["request"]["request"]
31+
32+
# request data can be retrieved with big_collector or with no collector
33+
# argument
34+
await bidi_session.network.get_data(
35+
request=request, data_type="response", collector=big_collector
36+
)
37+
await bidi_session.network.get_data(
38+
request=request, data_type="response"
39+
)
40+
with pytest.raises(error.NoSuchNetworkDataException):
41+
await bidi_session.network.get_data(
42+
request=request, data_type="response", collector=small_collector
43+
)
44+
45+
# Remove big_collector and check the collected data can no longer be accessed
46+
await bidi_session.network.remove_data_collector(collector=big_collector)
47+
with pytest.raises(error.NoSuchNetworkDataException):
48+
await bidi_session.network.get_data(
49+
request=request, data_type="response"
50+
)
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import pytest
2+
import webdriver.bidi.error as error
3+
4+
from .. import PAGE_EMPTY_TEXT, RESPONSE_COMPLETED_EVENT
5+
6+
pytestmark = pytest.mark.asyncio
7+
8+
9+
async def test_user_context(
10+
bidi_session,
11+
add_data_collector,
12+
create_user_context,
13+
setup_network_test,
14+
wait_for_event,
15+
wait_for_future_safe,
16+
url,
17+
fetch,
18+
):
19+
user_context = await create_user_context()
20+
context_in_user_context_1 = await bidi_session.browsing_context.create(
21+
user_context=user_context, type_hint="tab"
22+
)
23+
await setup_network_test(
24+
events=[RESPONSE_COMPLETED_EVENT], context=context_in_user_context_1["context"]
25+
)
26+
27+
# Add a collector for this user context
28+
collector = await add_data_collector(user_contexts=[user_context])
29+
30+
# Trigger a request in `context_in_user_context_1`
31+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
32+
await fetch(url(PAGE_EMPTY_TEXT), context=context_in_user_context_1)
33+
event = await wait_for_future_safe(on_response_completed)
34+
request = event["request"]["request"]
35+
36+
# Check that the request data from `context_in_user_context_1` can be retrieved
37+
await bidi_session.network.get_data(request=request, data_type="response")
38+
39+
# Create a new context in the user context.
40+
context_in_user_context_2 = await bidi_session.browsing_context.create(
41+
user_context=user_context, type_hint="tab"
42+
)
43+
await setup_network_test(
44+
events=[RESPONSE_COMPLETED_EVENT], context=context_in_user_context_2["context"]
45+
)
46+
47+
# Trigger a request in `context_in_user_context_2`
48+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
49+
await fetch(url(PAGE_EMPTY_TEXT), context=context_in_user_context_2)
50+
event = await wait_for_future_safe(on_response_completed)
51+
request = event["request"]["request"]
52+
53+
# Check that the request data from `context_in_user_context_2` can be retrieved
54+
await bidi_session.network.get_data(request=request, data_type="response")
55+
56+
# Create a new context in the default user context.
57+
context_in_default_context = await bidi_session.browsing_context.create(
58+
type_hint="tab"
59+
)
60+
await setup_network_test(
61+
events=[RESPONSE_COMPLETED_EVENT], context=context_in_default_context["context"]
62+
)
63+
64+
# Trigger a request in `context_in_default_context`
65+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
66+
await fetch(url(PAGE_EMPTY_TEXT), context=context_in_default_context)
67+
event = await wait_for_future_safe(on_response_completed)
68+
request = event["request"]["request"]
69+
70+
# Check that the request data from `context_in_default_context` can NOT be retrieved
71+
with pytest.raises(error.NoSuchNetworkDataException):
72+
await bidi_session.network.get_data(request=request, data_type="response")
73+
74+
75+
async def test_multiple_user_context(
76+
bidi_session,
77+
add_data_collector,
78+
create_user_context,
79+
setup_network_test,
80+
wait_for_event,
81+
wait_for_future_safe,
82+
url,
83+
fetch,
84+
):
85+
# Setup a user context and create a tab in it.
86+
user_context_a = await create_user_context()
87+
context_in_user_context_a = await bidi_session.browsing_context.create(
88+
user_context=user_context_a, type_hint="tab"
89+
)
90+
await setup_network_test(
91+
events=[RESPONSE_COMPLETED_EVENT], context=context_in_user_context_a["context"]
92+
)
93+
94+
# Setup another user context and create a tab in it.
95+
user_context_b = await create_user_context()
96+
context_in_user_context_b = await bidi_session.browsing_context.create(
97+
user_context=user_context_b, type_hint="tab"
98+
)
99+
await setup_network_test(
100+
events=[RESPONSE_COMPLETED_EVENT], context=context_in_user_context_b["context"]
101+
)
102+
103+
# Add a collector for both user contexts
104+
collector = await add_data_collector(user_contexts=[user_context_a, user_context_b])
105+
106+
# Trigger a request in `context_in_user_context_a`
107+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
108+
await fetch(url(PAGE_EMPTY_TEXT), context=context_in_user_context_a)
109+
event = await wait_for_future_safe(on_response_completed)
110+
request = event["request"]["request"]
111+
112+
# Check that the request data from `context_in_user_context_a` can be retrieved
113+
await bidi_session.network.get_data(request=request, data_type="response")
114+
115+
# Trigger a request in `context_in_user_context_b`
116+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
117+
await fetch(url(PAGE_EMPTY_TEXT), context=context_in_user_context_b)
118+
event = await wait_for_future_safe(on_response_completed)
119+
request = event["request"]["request"]
120+
121+
# Check that the request data from `context_in_user_context_b` can be retrieved
122+
await bidi_session.network.get_data(request=request, data_type="response")
123+
124+
# Create a new context in the default user context.
125+
context_in_default_context = await bidi_session.browsing_context.create(
126+
type_hint="tab"
127+
)
128+
await setup_network_test(
129+
events=[RESPONSE_COMPLETED_EVENT], context=context_in_default_context["context"]
130+
)
131+
132+
# Trigger a request in `context_in_default_context`
133+
on_response_completed = wait_for_event(RESPONSE_COMPLETED_EVENT)
134+
await fetch(url(PAGE_EMPTY_TEXT), context=context_in_default_context)
135+
event = await wait_for_future_safe(on_response_completed)
136+
request = event["request"]["request"]
137+
138+
# Check that the request data from `context_in_default_context` can NOT be retrieved
139+
with pytest.raises(error.NoSuchNetworkDataException):
140+
await bidi_session.network.get_data(request=request, data_type="response")

0 commit comments

Comments
 (0)