Yury Semikhatsky 2024-05-29 17:20:38 -07:00 committed by GitHub
parent 6e9c31f93b
commit f93da40925
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 21 additions and 12 deletions

View file

@ -27,7 +27,7 @@
}, },
{ {
"name": "webkit", "name": "webkit",
"revision": "2013", "revision": "2014",
"installByDefault": true, "installByDefault": true,
"revisionOverrides": { "revisionOverrides": {
"mac10.14": "1446", "mac10.14": "1446",

View file

@ -267,7 +267,9 @@ export class WKBrowserContext extends BrowserContext {
const cc = network.rewriteCookies(cookies).map(c => ({ const cc = network.rewriteCookies(cookies).map(c => ({
...c, ...c,
session: c.expires === -1 || c.expires === undefined, session: c.expires === -1 || c.expires === undefined,
expires: c.expires && c.expires !== -1 ? c.expires * 1000 : c.expires expires: c.expires && c.expires !== -1 ? c.expires * 1000 : c.expires,
// TODO: make WebKit on linux work without eplicit sameSite.
sameSite: c.sameSite ?? (process.platform === 'linux' ? 'Lax' : undefined)
})) as Protocol.Playwright.SetCookieParam[]; })) as Protocol.Playwright.SetCookieParam[];
await this._browser._browserSession.send('Playwright.setCookies', { cookies: cc, browserContextId: this._browserContextId }); await this._browser._browserSession.send('Playwright.setCookies', { cookies: cc, browserContextId: this._browserContextId });
} }

View file

@ -67,10 +67,12 @@ const test = baseTest.extend<BrowserTestTestFixtures, BrowserTestWorkerFixtures>
await run(false); await run(false);
}, { scope: 'worker' }], }, { scope: 'worker' }],
defaultSameSiteCookieValue: [async ({ browserName, browserMajorVersion, channel }, run) => { defaultSameSiteCookieValue: [async ({ browserName, browserMajorVersion, channel, isLinux }, run) => {
if (browserName === 'chromium') if (browserName === 'chromium')
await run('Lax'); await run('Lax');
else if (browserName === 'webkit') else if (browserName === 'webkit' && isLinux)
await run('Lax');
else if (browserName === 'webkit' && !isLinux)
await run('None'); await run('None');
else if (browserName === 'firefox' && channel === 'firefox-beta') else if (browserName === 'firefox' && channel === 'firefox-beta')
await run(browserMajorVersion >= 103 && browserMajorVersion < 110 ? 'Lax' : 'None'); await run(browserMajorVersion >= 103 && browserMajorVersion < 110 ? 'Lax' : 'None');

View file

@ -24,7 +24,7 @@ it('should work @smoke', async ({ context, page, server }) => {
await context.addCookies([{ await context.addCookies([{
url: server.EMPTY_PAGE, url: server.EMPTY_PAGE,
name: 'password', name: 'password',
value: '123456' value: '123456',
}]); }]);
expect(await page.evaluate(() => document.cookie)).toEqual('password=123456'); expect(await page.evaluate(() => document.cookie)).toEqual('password=123456');
}); });
@ -224,7 +224,7 @@ it('should have |expires| set to |-1| for session cookies', async ({ context, se
expect(cookies[0].expires).toBe(-1); expect(cookies[0].expires).toBe(-1);
}); });
it('should set cookie with reasonable defaults', async ({ context, server, browserName }) => { it('should set cookie with reasonable defaults', async ({ context, server, defaultSameSiteCookieValue }) => {
await context.addCookies([{ await context.addCookies([{
url: server.EMPTY_PAGE, url: server.EMPTY_PAGE,
name: 'defaults', name: 'defaults',
@ -239,7 +239,7 @@ it('should set cookie with reasonable defaults', async ({ context, server, brows
expires: -1, expires: -1,
httpOnly: false, httpOnly: false,
secure: false, secure: false,
sameSite: browserName === 'chromium' ? 'Lax' : 'None', sameSite: defaultSameSiteCookieValue,
}]); }]);
}); });

View file

@ -384,7 +384,7 @@ it('should support requestStorageAccess', async ({ page, server, channel, browse
server.waitForRequest('/title.html'), server.waitForRequest('/title.html'),
frame.evaluate(() => fetch('/title.html')) frame.evaluate(() => fetch('/title.html'))
]); ]);
if (!isMac && browserName === 'webkit') if (isWindows && browserName === 'webkit')
expect(serverRequest.headers.cookie).toBe('name=value'); expect(serverRequest.headers.cookie).toBe('name=value');
else else
expect(serverRequest.headers.cookie).toBeFalsy(); expect(serverRequest.headers.cookie).toBeFalsy();
@ -396,7 +396,10 @@ it('should support requestStorageAccess', async ({ page, server, channel, browse
server.waitForRequest('/title.html'), server.waitForRequest('/title.html'),
frame.evaluate(() => fetch('/title.html')) frame.evaluate(() => fetch('/title.html'))
]); ]);
expect(serverRequest.headers.cookie).toBe('name=value'); if (isLinux && browserName === 'webkit')
expect(serverRequest.headers.cookie).toBe(undefined);
else
expect(serverRequest.headers.cookie).toBe('name=value');
} }
} }
}); });

View file

@ -1202,7 +1202,7 @@ it('fetch should not throw on long set-cookie value', async ({ context, server }
expect(cookies.map(c => c.name)).toContain('bar'); expect(cookies.map(c => c.name)).toContain('bar');
}); });
it('should support set-cookie with SameSite and without Secure attribute over HTTP', async ({ page, server, browserName, isWindows }) => { it('should support set-cookie with SameSite and without Secure attribute over HTTP', async ({ page, server, browserName, isWindows, isLinux }) => {
for (const value of ['None', 'Lax', 'Strict']) { for (const value of ['None', 'Lax', 'Strict']) {
await it.step(`SameSite=${value}`, async () => { await it.step(`SameSite=${value}`, async () => {
server.setRoute('/empty.html', (req, res) => { server.setRoute('/empty.html', (req, res) => {
@ -1213,6 +1213,8 @@ it('should support set-cookie with SameSite and without Secure attribute over HT
const [cookie] = await page.context().cookies(); const [cookie] = await page.context().cookies();
if (browserName === 'chromium' && value === 'None') if (browserName === 'chromium' && value === 'None')
expect(cookie).toBeFalsy(); expect(cookie).toBeFalsy();
else if (browserName === 'webkit' && isLinux && value === 'None')
expect(cookie).toBeFalsy();
else if (browserName === 'webkit' && isWindows) else if (browserName === 'webkit' && isWindows)
expect(cookie.sameSite).toBe('None'); expect(cookie.sameSite).toBe('None');
else else

View file

@ -109,7 +109,7 @@ it('should fall back to context.route', async ({ browser, server }) => {
await context.close(); await context.close();
}); });
it('should support Set-Cookie header', async ({ contextFactory, server, browserName, defaultSameSiteCookieValue }) => { it('should support Set-Cookie header', async ({ contextFactory, defaultSameSiteCookieValue }) => {
const context = await contextFactory(); const context = await contextFactory();
const page = await context.newPage(); const page = await context.newPage();
await page.route('https://example.com/', (route, request) => { await page.route('https://example.com/', (route, request) => {
@ -152,7 +152,7 @@ it('should ignore secure Set-Cookie header for insecure requests', async ({ cont
expect(await context.cookies()).toEqual([]); expect(await context.cookies()).toEqual([]);
}); });
it('should use Set-Cookie header in future requests', async ({ contextFactory, server, browserName, defaultSameSiteCookieValue }) => { it('should use Set-Cookie header in future requests', async ({ contextFactory, server, defaultSameSiteCookieValue }) => {
const context = await contextFactory(); const context = await contextFactory();
const page = await context.newPage(); const page = await context.newPage();