File tree Expand file tree Collapse file tree 5 files changed +58
-3
lines changed
Expand file tree Collapse file tree 5 files changed +58
-3
lines changed Original file line number Diff line number Diff line change 6666 from playwright ._impl ._browser_context import BrowserContext
6767 from playwright ._impl ._fetch import APIResponse
6868 from playwright ._impl ._frame import Frame
69- from playwright ._impl ._page import Page
69+ from playwright ._impl ._page import Page , Worker
7070
7171
7272class FallbackOverrideParameters (TypedDict , total = False ):
@@ -184,6 +184,13 @@ def url(self) -> str:
184184 def resource_type (self ) -> str :
185185 return self ._initializer ["resourceType" ]
186186
187+ @property
188+ def service_worker (self ) -> Optional ["Worker" ]:
189+ return cast (
190+ Optional ["Worker" ],
191+ from_nullable_channel (self ._initializer .get ("serviceWorker" )),
192+ )
193+
187194 @property
188195 def method (self ) -> str :
189196 return cast (str , self ._fallback_overrides .method or self ._initializer ["method" ])
Original file line number Diff line number Diff line change @@ -113,6 +113,24 @@ def resource_type(self) -> str:
113113 """
114114 return mapping.from_maybe_impl(self._impl_obj.resource_type)
115115
116+ @property
117+ def service_worker(self) -> typing.Optional["Worker"]:
118+ """Request.service_worker
119+
120+ The Service `Worker` that is performing the request.
121+
122+ **Details**
123+
124+ This method is Chromium only. It's safe to call when using other browsers, but it will always be `null`.
125+
126+ Requests originated in a Service Worker do not have a `request.frame()` available.
127+
128+ Returns
129+ -------
130+ Union[Worker, None]
131+ """
132+ return mapping.from_impl_nullable(self._impl_obj.service_worker)
133+
116134 @property
117135 def method(self) -> str:
118136 """Request.method
Original file line number Diff line number Diff line change @@ -113,6 +113,24 @@ def resource_type(self) -> str:
113113 """
114114 return mapping.from_maybe_impl(self._impl_obj.resource_type)
115115
116+ @property
117+ def service_worker(self) -> typing.Optional["Worker"]:
118+ """Request.service_worker
119+
120+ The Service `Worker` that is performing the request.
121+
122+ **Details**
123+
124+ This method is Chromium only. It's safe to call when using other browsers, but it will always be `null`.
125+
126+ Requests originated in a Service Worker do not have a `request.frame()` available.
127+
128+ Returns
129+ -------
130+ Union[Worker, None]
131+ """
132+ return mapping.from_impl_nullable(self._impl_obj.service_worker)
133+
116134 @property
117135 def method(self) -> str:
118136 """Request.method
Original file line number Diff line number Diff line change 2121import zipfile
2222from typing import Dict
2323
24- driver_version = "1.57.0"
24+ driver_version = "1.57.0-beta-1764944708000 "
2525
2626base_wheel_bundles = [
2727 {
Original file line number Diff line number Diff line change @@ -92,7 +92,7 @@ def handle_request(route: Route) -> None:
9292 assert response .json () == {"foo" : "bar" }
9393
9494
95- def test_should_report_if_request_was_from_service_worker (
95+ def test_should_report_if_response_was_from_service_worker (
9696 page : Page , server : Server
9797) -> None :
9898 response = page .goto (server .PREFIX + "/serviceworkers/fetch/sw.html" )
@@ -102,3 +102,15 @@ def test_should_report_if_request_was_from_service_worker(
102102 with page .expect_response ("**/example.txt" ) as response_info :
103103 page .evaluate ("() => fetch('/example.txt')" )
104104 assert response_info .value .from_service_worker
105+
106+
107+ @pytest .mark .only_browser ("chromium" )
108+ def test_should_report_service_worker_request (page : Page , server : Server ) -> None :
109+ with page .context .expect_event ("serviceworker" ) as worker_info :
110+ page .goto (server .PREFIX + "/serviceworkers/fetch/sw.html" )
111+ page .evaluate ("() => window.activationPromise" )
112+ with page .context .expect_event (
113+ "request" , lambda r : r .service_worker is not None
114+ ) as request_info :
115+ page .evaluate ("() => fetch('/example.txt')" )
116+ assert request_info .value .service_worker == worker_info .value
You can’t perform that action at this time.
0 commit comments