diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/Stream.java b/playwright/src/main/java/com/microsoft/playwright/impl/Stream.java index eac797c2..8ee469dd 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/Stream.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/Stream.java @@ -45,6 +45,9 @@ public class Stream extends ChannelOwner { @Override public int read(byte[] b, int off, int len) { + if (len == 0) { + return 0; + } JsonObject params = new JsonObject(); params.addProperty("size", len); JsonObject json = sendMessage("read", params).getAsJsonObject(); diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDownload.java b/playwright/src/test/java/com/microsoft/playwright/TestDownload.java index bb0e123c..6588c291 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDownload.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDownload.java @@ -367,6 +367,19 @@ public class TestDownload extends TestBase { page.close(); } + @Test + void streamShouldSupportZeroSizeRead() throws IOException { + Page page = browser.newPage(new Browser.NewPageOptions().setAcceptDownloads(true)); + page.setContent("download"); + Download download = page.waitForDownload(() -> page.click("a")); + + InputStream stream = download.createReadStream(); + byte[] b = new byte[1]; + int read = stream.read(b, 0, 0); + assertEquals(0, read); + page.close(); + } + @Test void shouldDeleteDownloadsOnContextDestruction() { Page page = browser.newPage(new Browser.NewPageOptions().setAcceptDownloads(true));