Skip to content

Commit 89b957b

Browse files
authored
feat(roll): roll Playwright 1.15.0-next-1631091227000 (microsoft#887)
1 parent 651baeb commit 89b957b

20 files changed

+551
-164
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Playwright is a Python library to automate [Chromium](https://www.chromium.org/H
44

55
| | Linux | macOS | Windows |
66
| :--- | :---: | :---: | :---: |
7-
| Chromium <!-- GEN:chromium-version -->94.0.4595.0<!-- GEN:stop --> ||||
7+
| Chromium <!-- GEN:chromium-version -->95.0.4636.0<!-- GEN:stop --> ||||
88
| WebKit <!-- GEN:webkit-version -->15.0<!-- GEN:stop --> ||||
99
| Firefox <!-- GEN:firefox-version -->91.0<!-- GEN:stop --> ||||
1010

playwright/_impl/_api_structures.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ class RequestSizes(TypedDict):
109109
requestHeadersSize: int
110110
responseBodySize: int
111111
responseHeadersSize: int
112-
responseTransferSize: int
113112

114113

115114
class ViewportSize(TypedDict):

playwright/_impl/_browser.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from playwright._impl._connection import ChannelOwner, from_channel
3131
from playwright._impl._helper import (
3232
ColorScheme,
33+
ForcedColors,
3334
ReducedMotion,
3435
async_readfile,
3536
is_safe_close_error,
@@ -97,6 +98,7 @@ async def new_context(
9798
hasTouch: bool = None,
9899
colorScheme: ColorScheme = None,
99100
reducedMotion: ReducedMotion = None,
101+
forcedColors: ForcedColors = None,
100102
acceptDownloads: bool = None,
101103
defaultBrowserType: str = None,
102104
proxy: ProxySettings = None,
@@ -138,6 +140,7 @@ async def new_page(
138140
isMobile: bool = None,
139141
hasTouch: bool = None,
140142
colorScheme: ColorScheme = None,
143+
forcedColors: ForcedColors = None,
141144
reducedMotion: ReducedMotion = None,
142145
acceptDownloads: bool = None,
143146
defaultBrowserType: str = None,

playwright/_impl/_browser_context.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,7 @@
1919
from types import SimpleNamespace
2020
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Set, Union, cast
2121

22-
from playwright._impl._api_structures import (
23-
Cookie,
24-
Geolocation,
25-
RequestSizes,
26-
StorageState,
27-
)
22+
from playwright._impl._api_structures import Cookie, Geolocation, StorageState
2823
from playwright._impl._api_types import Error
2924
from playwright._impl._artifact import Artifact
3025
from playwright._impl._cdp_session import CDPSession
@@ -134,9 +129,9 @@ def __init__(
134129
"requestFinished",
135130
lambda params: self._on_request_finished(
136131
from_channel(params["request"]),
132+
from_nullable_channel(params["response"]),
137133
params["responseEndTiming"],
138134
from_nullable_channel(params.get("page")),
139-
params["requestSizes"],
140135
),
141136
)
142137
self._closed_future: asyncio.Future = asyncio.Future()
@@ -366,16 +361,17 @@ def _on_request_failed(
366361
def _on_request_finished(
367362
self,
368363
request: Request,
364+
response: Optional[Response],
369365
response_end_timing: float,
370366
page: Optional[Page],
371-
request_sizes: RequestSizes,
372367
) -> None:
373368
if request._timing:
374369
request._timing["responseEnd"] = response_end_timing
375-
request._sizes = request_sizes
376370
self.emit(BrowserContext.Events.RequestFinished, request)
377371
if page:
378372
page.emit(Page.Events.RequestFinished, request)
373+
if response:
374+
response._finished_future.set_result(True)
379375

380376
def _on_request(self, request: Request, page: Optional[Page]) -> None:
381377
self.emit(BrowserContext.Events.Request, request)

playwright/_impl/_browser_type.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
from playwright._impl._helper import (
3636
ColorScheme,
3737
Env,
38+
ForcedColors,
3839
ReducedMotion,
3940
locals_to_params,
4041
not_installed_error,
@@ -128,6 +129,7 @@ async def launch_persistent_context(
128129
hasTouch: bool = None,
129130
colorScheme: ColorScheme = None,
130131
reducedMotion: ReducedMotion = None,
132+
forcedColors: ForcedColors = None,
131133
acceptDownloads: bool = None,
132134
tracesDir: Union[pathlib.Path, str] = None,
133135
chromiumSandbox: bool = None,

playwright/_impl/_element_handle.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,6 @@ async def set_checked(
220220
timeout: float = None,
221221
force: bool = None,
222222
noWaitAfter: bool = None,
223-
strict: bool = None,
224223
trial: bool = None,
225224
) -> None:
226225
if checked:

playwright/_impl/_helper.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
]
5656

5757
ColorScheme = Literal["dark", "light", "no-preference"]
58+
ForcedColors = Literal["active", "none"]
5859
ReducedMotion = Literal["no-preference", "reduce"]
5960
DocumentLoadState = Literal["domcontentloaded", "load", "networkidle"]
6061
KeyboardModifier = Literal["Alt", "Control", "Meta", "Shift"]

playwright/_impl/_locator.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,6 @@ async def set_checked(
445445
position: Position = None,
446446
timeout: float = None,
447447
force: bool = None,
448-
strict: bool = None,
449448
noWaitAfter: bool = None,
450449
trial: bool = None,
451450
) -> None:

playwright/_impl/_network.py

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15+
import asyncio
1516
import base64
1617
import json
1718
import mimetypes
@@ -63,14 +64,8 @@ def __init__(
6364
"responseStart": -1,
6465
"responseEnd": -1,
6566
}
66-
self._sizes: RequestSizes = {
67-
"requestBodySize": 0,
68-
"requestHeadersSize": 0,
69-
"responseBodySize": 0,
70-
"responseHeadersSize": 0,
71-
"responseTransferSize": 0,
72-
}
73-
self._headers: Dict[str, str] = parse_headers(self._initializer["headers"])
67+
self._headers: List[Header] = self._initializer["headers"]
68+
self._all_headers_future: Optional[asyncio.Future[List[Header]]] = None
7469

7570
def __repr__(self) -> str:
7671
return f"<Request url={self.url!r} method={self.method!r}>"
@@ -87,9 +82,11 @@ def resource_type(self) -> str:
8782
def method(self) -> str:
8883
return self._initializer["method"]
8984

90-
@property
91-
def sizes(self) -> RequestSizes:
92-
return self._sizes
85+
async def sizes(self) -> RequestSizes:
86+
response = await self.response()
87+
if not response:
88+
raise Error("Unable to fetch sizes for failed request")
89+
return await response._channel.send("sizes")
9390

9491
@property
9592
def post_data(self) -> Optional[str]:
@@ -120,7 +117,7 @@ def post_data_buffer(self) -> Optional[bytes]:
120117

121118
@property
122119
def headers(self) -> Dict[str, str]:
123-
return self._headers
120+
return headers_array_to_object(self._headers, True)
124121

125122
async def response(self) -> Optional["Response"]:
126123
return from_nullable_channel(await self._channel.send("response"))
@@ -148,6 +145,27 @@ def failure(self) -> Optional[str]:
148145
def timing(self) -> ResourceTiming:
149146
return self._timing
150147

148+
async def all_headers(self) -> Dict[str, str]:
149+
return headers_array_to_object(await self._get_headers_if_needed(), True)
150+
151+
async def headers_array(self) -> List[List[str]]:
152+
return list(
153+
map(
154+
lambda header: [header["name"], header["value"]],
155+
await self._get_headers_if_needed(),
156+
)
157+
)
158+
159+
async def _get_headers_if_needed(self) -> List[Header]:
160+
if not self._all_headers_future:
161+
self._all_headers_future = asyncio.Future()
162+
response = await self.response()
163+
if not response:
164+
return self._headers
165+
headers = await response._channel.send("rawRequestHeaders")
166+
self._all_headers_future.set_result(headers)
167+
return await self._all_headers_future
168+
151169

152170
class Route(ChannelOwner):
153171
def __init__(
@@ -238,7 +256,11 @@ def __init__(
238256
self._request._timing["connectEnd"] = timing["connectEnd"]
239257
self._request._timing["requestStart"] = timing["requestStart"]
240258
self._request._timing["responseStart"] = timing["responseStart"]
241-
self._request._headers = parse_headers(self._initializer["requestHeaders"])
259+
self._headers = headers_array_to_object(
260+
cast(List[Header], self._initializer["headers"]), True
261+
)
262+
self._raw_headers_future: Optional[asyncio.Future[List[Header]]] = None
263+
self._finished_future: asyncio.Future[bool] = asyncio.Future()
242264

243265
def __repr__(self) -> str:
244266
return f"<Response url={self.url!r} request={self.request}>"
@@ -263,16 +285,34 @@ def status_text(self) -> str:
263285

264286
@property
265287
def headers(self) -> Dict[str, str]:
266-
return parse_headers(self._initializer["headers"])
288+
return self._headers.copy()
289+
290+
async def all_headers(self) -> Dict[str, str]:
291+
return headers_array_to_object(await self._get_headers_if_needed(), True)
292+
293+
async def headers_array(self) -> List[List[str]]:
294+
return list(
295+
map(
296+
lambda header: [header["name"], header["value"]],
297+
await self._get_headers_if_needed(),
298+
)
299+
)
300+
301+
async def _get_headers_if_needed(self) -> List[Header]:
302+
if not self._raw_headers_future:
303+
self._raw_headers_future = asyncio.Future()
304+
headers = cast(List[Header], await self._channel.send("rawResponseHeaders"))
305+
self._raw_headers_future.set_result(headers)
306+
return await self._raw_headers_future
267307

268308
async def server_addr(self) -> Optional[RemoteAddr]:
269309
return await self._channel.send("serverAddr")
270310

271311
async def security_details(self) -> Optional[SecurityDetails]:
272312
return await self._channel.send("securityDetails")
273313

274-
async def finished(self) -> Optional[str]:
275-
return await self._channel.send("finished")
314+
async def finished(self) -> None:
315+
await self._finished_future
276316

277317
async def body(self) -> bytes:
278318
binary = await self._channel.send("body")
@@ -384,5 +424,8 @@ def serialize_headers(headers: Dict[str, str]) -> List[Header]:
384424
return [{"name": name, "value": value} for name, value in headers.items()]
385425

386426

387-
def parse_headers(headers: List[Header]) -> Dict[str, str]:
388-
return {header["name"].lower(): header["value"] for header in headers}
427+
def headers_array_to_object(headers: List[Header], lower_case: bool) -> Dict[str, str]:
428+
return {
429+
(header["name"].lower() if lower_case else header["name"]): header["value"]
430+
for header in headers
431+
}

playwright/_impl/_page.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
from playwright._impl._helper import (
4646
ColorScheme,
4747
DocumentLoadState,
48+
ForcedColors,
4849
KeyboardModifier,
4950
MouseButton,
5051
ReducedMotion,
@@ -513,6 +514,7 @@ async def emulate_media(
513514
media: Literal["print", "screen"] = None,
514515
colorScheme: ColorScheme = None,
515516
reducedMotion: ReducedMotion = None,
517+
forcedColors: ForcedColors = None,
516518
) -> None:
517519
await self._channel.send("emulateMedia", locals_to_params(locals()))
518520

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy