diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBase.java b/playwright/src/test/java/com/microsoft/playwright/TestBase.java index 03da057a..6504387d 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBase.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBase.java @@ -18,6 +18,8 @@ package com.microsoft.playwright; import org.junit.jupiter.api.*; +import com.microsoft.playwright.options.SameSiteAttribute; + import java.io.IOException; import static com.microsoft.playwright.Utils.getBrowserNameFromEnv; @@ -35,9 +37,11 @@ public class TestBase { static final boolean isMac = Utils.getOS() == Utils.OS.MAC; static final boolean isWindows = Utils.getOS() == Utils.OS.WINDOWS; static final boolean headful; + static final SameSiteAttribute defaultSameSiteCookieValue; static { String headfulEnv = System.getenv("HEADFUL"); headful = headfulEnv != null && !"0".equals(headfulEnv) && !"false".equals(headfulEnv); + defaultSameSiteCookieValue = initSameSiteAttribute(); } // Fields reset before each test. @@ -145,4 +149,11 @@ public class TestBase { page = null; } } + + private static SameSiteAttribute initSameSiteAttribute() { + if (isChromium()) return SameSiteAttribute.LAX; + if (isWebKit()) return SameSiteAttribute.NONE; + // for firefox version >= 103 'None' is used. + return SameSiteAttribute.NONE; + } } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java index 057202c7..506730e6 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowserContextAddCookies.java @@ -51,15 +51,21 @@ public class TestBrowserContextAddCookies extends TestBase { "}"); assertEquals("username=John Doe", documentCookie); List cookies = context.cookies(); - context.clearCookies(); - assertEquals(emptyList(), context.cookies()); - context.addCookies(asList(new Cookie(cookies.get(0).name, cookies.get(0).value) - .setDomain(cookies.get(0).domain) - .setPath(cookies.get(0).path) - .setExpires(cookies.get(0).expires) - .setSameSite(cookies.get(0).sameSite) - )); - assertJsonEquals(new Gson().toJson(cookies), context.cookies()); + assertEquals(1, cookies.size()); + assertEquals("username", cookies.get(0).name); + assertEquals("John Doe", cookies.get(0).value); + assertEquals("localhost", cookies.get(0).domain); + assertEquals("/", cookies.get(0).path); + assertFalse(cookies.get(0).httpOnly); + assertEquals(defaultSameSiteCookieValue, cookies.get(0).sameSite); + + // Browsers start to cap cookies with 400 days max expires value. + // See https://github.com/httpwg/http-extensions/pull/1732 + // Chromium patch: https://chromium.googlesource.com/chromium/src/+/aaa5d2b55478eac2ee642653dcd77a50ac3faff6 + // We want to make sure that expires date is at least 400 days in future. + int FOUR_HUNDRED_DAYS = 1000 * 60 * 60 * 24 * 400; + int FIVE_MINUTES = 1000 * 60 * 5; // relax condition a bit to make sure test is not flaky. + assertTrue(cookies.get(0).expires > ((System.currentTimeMillis() + FOUR_HUNDRED_DAYS - FIVE_MINUTES) / 1000)); } @Test