From 68fc9e92105f2ec6382a758394cf18f5ecbaa1c5 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Sun, 25 Oct 2026 19:55:03 -0700 Subject: [PATCH 1/2] fix(browser): list contexts in creation order from browser.contexts() Claude-Session: https://claude.ai/code/session_018p7xPf3r5VjAM7V46nzFTM --- .../main/java/com/microsoft/playwright/impl/BrowserImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java index a6c36e662..9f5f0604b 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java @@ -33,7 +33,8 @@ import static com.microsoft.playwright.impl.Utils.*; class BrowserImpl extends ChannelOwner implements Browser { - final Set contexts = new HashSet<>(); + // Insertion order, so that browser.contexts() lists the contexts in creation order like the other clients. + final Set contexts = new LinkedHashSet<>(); private final ListenerCollection listeners = new ListenerCollection<>(); boolean isConnectedOverWebSocket; private boolean isConnected = true; From b7aee381461b7e66cc61fb1276e09cc6ca631fe0 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 26 Oct 2026 12:20:30 -0700 Subject: [PATCH 2/2] test(browser): check that browser.contexts() keeps the creation order Claude-Session: https://claude.ai/code/session_018p7xPf3r5VjAM7V46nzFTM --- .../com/microsoft/playwright/TestBrowser1.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java b/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java index 1ae59b41e..bc1acd1b5 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestBrowser1.java @@ -22,6 +22,8 @@ import com.microsoft.playwright.fixtures.PlaywrightTest; import org.junit.jupiter.api.Tag; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Pattern; @@ -46,6 +48,21 @@ void shouldCreateNewPage(Browser browser) { assertEquals(0, browser.contexts().size()); } + @PlaywrightTest + void shouldListContextsInCreationOrder(Browser browser) { + List contexts = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + contexts.add(browser.newContext()); + } + assertEquals(contexts, browser.contexts()); + contexts.remove(2).close(); + assertEquals(contexts, browser.contexts()); + for (BrowserContext context : contexts) { + context.close(); + } + assertEquals(0, browser.contexts().size()); + } + @PlaywrightTest void shouldThrowUponSecondCreateNewPage(Browser browser) { Page page = browser.newPage();