|
15 | 15 | import asyncio
|
16 | 16 | import json
|
17 | 17 | from asyncio.futures import Future
|
18 |
| -from typing import Dict, List |
| 18 | +from typing import Dict, List, cast |
19 | 19 |
|
20 | 20 | import pytest
|
21 | 21 |
|
22 | 22 | from playwright import Error
|
23 |
| -from playwright.async_api import Page, Request |
| 23 | +from playwright.async_api import Page, Request, Response |
24 | 24 |
|
25 | 25 |
|
26 | 26 | async def test_request_fulfill(page, server):
|
@@ -148,9 +148,32 @@ async def test_request_headers_should_work(
|
148 | 148 | assert "WebKit" in response.request.headers["user-agent"]
|
149 | 149 |
|
150 | 150 |
|
151 |
| -@pytest.mark.only_browser("firefox") |
152 | 151 | async def test_request_headers_should_get_the_same_headers_as_the_server(
|
153 |
| - page: Page, server |
| 152 | + page: Page, server, is_webkit, is_win |
| 153 | +): |
| 154 | + server_request_headers_future: Future[Dict[str, str]] = asyncio.Future() |
| 155 | + |
| 156 | + def handle(request): |
| 157 | + normalized_headers = { |
| 158 | + key.decode().lower(): value[0].decode() |
| 159 | + for key, value in request.requestHeaders.getAllRawHeaders() |
| 160 | + } |
| 161 | + server_request_headers_future.set_result(normalized_headers) |
| 162 | + request.write(b"done") |
| 163 | + request.finish() |
| 164 | + |
| 165 | + server.set_route("/empty.html", handle) |
| 166 | + response = await page.goto(server.EMPTY_PAGE) |
| 167 | + server_headers = await server_request_headers_future |
| 168 | + if is_webkit and is_win: |
| 169 | + # Curl does not show accept-encoding and accept-language |
| 170 | + server_headers.pop("accept-encoding") |
| 171 | + server_headers.pop("accept-language") |
| 172 | + assert cast(Response, response).request.headers == server_headers |
| 173 | + |
| 174 | + |
| 175 | +async def test_request_headers_should_get_the_same_headers_as_the_server_cors( |
| 176 | + page: Page, server, is_webkit, is_win |
154 | 177 | ):
|
155 | 178 | await page.goto(server.PREFIX + "/empty.html")
|
156 | 179 | server_request_headers_future: Future[Dict[str, str]] = asyncio.Future()
|
@@ -178,6 +201,10 @@ def handle_something(request):
|
178 | 201 | request: Request = await requestPromise
|
179 | 202 | assert text == "done"
|
180 | 203 | server_headers = await server_request_headers_future
|
| 204 | + if is_webkit and is_win: |
| 205 | + # Curl does not show accept-encoding and accept-language |
| 206 | + server_headers.pop("accept-encoding") |
| 207 | + server_headers.pop("accept-language") |
181 | 208 | assert request.headers == server_headers
|
182 | 209 |
|
183 | 210 |
|
|
0 commit comments