diff --git a/packages/playwright-core/src/server/network.ts b/packages/playwright-core/src/server/network.ts index af892d53b8..bc65e24b53 100644 --- a/packages/playwright-core/src/server/network.ts +++ b/packages/playwright-core/src/server/network.ts @@ -51,7 +51,6 @@ const kMaxCookieExpiresDateInSeconds = 253402300799; export function rewriteCookies(cookies: types.SetNetworkCookieParam[]): types.SetNetworkCookieParam[] { return cookies.map(c => { - assert(c.name, 'Cookie should have a name'); assert(c.url || (c.domain && c.path), 'Cookie should have a url or a domain/path pair'); assert(!(c.url && c.domain), 'Cookie should have either url or domain'); assert(!(c.url && c.path), 'Cookie should have either url or path'); diff --git a/tests/browsercontext-add-cookies.spec.ts b/tests/browsercontext-add-cookies.spec.ts index 4e82e1f31d..d41984acc6 100644 --- a/tests/browsercontext-add-cookies.spec.ts +++ b/tests/browsercontext-add-cookies.spec.ts @@ -421,3 +421,32 @@ it('should not block third party SameSite=None cookies', async ({ contextFactory await page.goto(httpsServer.EMPTY_PAGE); expect(await cookie).toBe('a=b'); }); + +it('should allow unnamed cookies', async ({ page, context, server, browserName, platform }) => { + server.setRoute('/cookies', (req, res) => { + res.write(req.headers.cookie ?? 'undefined-on-server'); + res.end(); + }); + await context.addCookies([{ + url: server.EMPTY_PAGE, + name: '', + value: 'unnamed-via-add-cookies', + }]); + // Round-trip behavior + const resp = await page.goto(server.PREFIX + '/cookies'); + if (browserName === 'webkit' && platform === 'darwin') { + expect.soft(await resp.text()).toBe('undefined-on-server'); + expect.soft(await page.evaluate('document.cookie')).toBe(''); + } else { + expect.soft(await resp.text()).toBe('unnamed-via-add-cookies'); + expect.soft(await page.evaluate('document.cookie')).toBe('unnamed-via-add-cookies'); + } + // Within PW behavior + await page.goto(server.EMPTY_PAGE); + await page.evaluate(() => document.cookie = '=unnamed-via-js;'); + await context.addCookies(await context.cookies()); + if (browserName === 'webkit' && platform === 'darwin') + expect.soft(await page.evaluate('document.cookie')).toBe(''); + else + expect.soft(await page.evaluate('document.cookie')).toBe('unnamed-via-js'); +});