diff --git a/playwright/src/main/java/com/microsoft/playwright/Browser.java b/playwright/src/main/java/com/microsoft/playwright/Browser.java index 3e94fac9..2cfcb338 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Browser.java +++ b/playwright/src/main/java/com/microsoft/playwright/Browser.java @@ -18,6 +18,7 @@ package com.microsoft.playwright; import java.nio.file.Path; import java.util.*; +import java.util.function.Consumer; /** * - extends: [EventEmitter] @@ -44,8 +45,8 @@ public interface Browser { } - void onDisconnected(Runnable handler); - void offDisconnected(Runnable handler); + void onDisconnected(Consumer handler); + void offDisconnected(Consumer handler); class NewContextOptions { diff --git a/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java b/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java index 17d1e208..86c41d3a 100644 --- a/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java +++ b/playwright/src/main/java/com/microsoft/playwright/BrowserContext.java @@ -95,8 +95,8 @@ public interface BrowserContext { } - void onClose(Runnable handler); - void offClose(Runnable handler); + void onClose(Consumer handler); + void offClose(Consumer handler); void onPage(Consumer handler); void offPage(Consumer handler); diff --git a/playwright/src/main/java/com/microsoft/playwright/Page.java b/playwright/src/main/java/com/microsoft/playwright/Page.java index e7156227..fe862fca 100644 --- a/playwright/src/main/java/com/microsoft/playwright/Page.java +++ b/playwright/src/main/java/com/microsoft/playwright/Page.java @@ -75,20 +75,20 @@ public interface Page { } - void onClose(Runnable handler); - void offClose(Runnable handler); + void onClose(Consumer handler); + void offClose(Consumer handler); void onConsole(Consumer handler); void offConsole(Consumer handler); - void onCrash(Runnable handler); - void offCrash(Runnable handler); + void onCrash(Consumer handler); + void offCrash(Consumer handler); void onDialog(Consumer handler); void offDialog(Consumer handler); - void onDomContentLoaded(Runnable handler); - void offDomContentLoaded(Runnable handler); + void onDOMContentLoaded(Consumer handler); + void offDOMContentLoaded(Consumer handler); void onDownload(Consumer handler); void offDownload(Consumer handler); @@ -105,8 +105,8 @@ public interface Page { void onFrameNavigated(Consumer handler); void offFrameNavigated(Consumer handler); - void onLoad(Runnable handler); - void offLoad(Runnable handler); + void onLoad(Consumer handler); + void offLoad(Consumer handler); void onPageError(Consumer handler); void offPageError(Consumer handler); diff --git a/playwright/src/main/java/com/microsoft/playwright/WebSocket.java b/playwright/src/main/java/com/microsoft/playwright/WebSocket.java index 25f5155d..74df323d 100644 --- a/playwright/src/main/java/com/microsoft/playwright/WebSocket.java +++ b/playwright/src/main/java/com/microsoft/playwright/WebSocket.java @@ -30,8 +30,8 @@ public interface WebSocket { } - void onClose(Runnable handler); - void offClose(Runnable handler); + void onClose(Consumer handler); + void offClose(Consumer handler); void onFrameReceived(Consumer handler); void offFrameReceived(Consumer handler); diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java index 6d2ffca8..ab2e18eb 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserContextImpl.java @@ -60,12 +60,12 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext { } @Override - public void onClose(Runnable handler) { + public void onClose(Consumer handler) { listeners.add(EventType.CLOSE, handler); } @Override - public void offClose(Runnable handler) { + public void offClose(Consumer handler) { listeners.remove(EventType.CLOSE, handler); } @@ -416,7 +416,7 @@ class BrowserContextImpl extends ChannelOwner implements BrowserContext { if (browser != null) { browser.contexts.remove(this); } - listeners.notify(EventType.CLOSE, null); + listeners.notify(EventType.CLOSE, this); } } } 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 3db461de..0869968b 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/BrowserImpl.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import static com.microsoft.playwright.impl.Serialization.gson; import static com.microsoft.playwright.impl.Utils.convertViaJson; @@ -46,12 +47,12 @@ class BrowserImpl extends ChannelOwner implements Browser { } @Override - public void onDisconnected(Runnable handler) { + public void onDisconnected(Consumer handler) { listeners.add(EventType.DISCONNECTED, handler); } @Override - public void offDisconnected(Runnable handler) { + public void offDisconnected(Consumer handler) { listeners.remove(EventType.DISCONNECTED, handler); } @@ -136,7 +137,7 @@ class BrowserImpl extends ChannelOwner implements Browser { void handleEvent(String event, JsonObject parameters) { if ("close".equals(event)) { isConnected = false; - listeners.notify(EventType.DISCONNECTED, null); + listeners.notify(EventType.DISCONNECTED, this); } } } diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/ListenerCollection.java b/playwright/src/main/java/com/microsoft/playwright/impl/ListenerCollection.java index 49c083de..4bfc8d60 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/ListenerCollection.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/ListenerCollection.java @@ -47,32 +47,6 @@ class ListenerCollection { } } - private static class RunnableWrapper implements Listener { - final Runnable callback; - - private RunnableWrapper(Runnable callback) { - this.callback = callback; - } - - @Override - public void handle(Event event) { - callback.run(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - RunnableWrapper that = (RunnableWrapper) o; - return Objects.equals(callback, that.callback); - } - - @Override - public int hashCode() { - return Objects.hash(callback); - } - } - private static class ConsumerWrapper implements Listener { final Consumer callback; @@ -98,13 +72,6 @@ class ListenerCollection { } } - void add(EventType type, Runnable listener) { - add(type, new RunnableWrapper<>(listener)); - } - void remove(EventType type, Runnable listener) { - remove(type, new RunnableWrapper<>(listener)); - } - void add(EventType type, Consumer listener) { add(type, new ConsumerWrapper<>(listener)); } diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java index 576def2c..0277d3c3 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/PageImpl.java @@ -155,9 +155,9 @@ public class PageImpl extends ChannelOwner implements Page { } } } else if ("load".equals(event)) { - listeners.notify(EventType.LOAD, null); + listeners.notify(EventType.LOAD, this); } else if ("domcontentloaded".equals(event)) { - listeners.notify(EventType.DOMCONTENTLOADED, null); + listeners.notify(EventType.DOMCONTENTLOADED, this); } else if ("request".equals(event)) { String guid = params.getAsJsonObject("request").get("guid").getAsString(); Request request = connection.getExistingObject(guid); @@ -210,11 +210,11 @@ public class PageImpl extends ChannelOwner implements Page { SerializedError error = gson().fromJson(params.getAsJsonObject("error"), SerializedError.class); listeners.notify(EventType.PAGEERROR, new ErrorImpl(error)); } else if ("crash".equals(event)) { - listeners.notify(EventType.CRASH, null); + listeners.notify(EventType.CRASH, this); } else if ("close".equals(event)) { isClosed = true; browserContext.pages.remove(this); - listeners.notify(EventType.CLOSE, null); + listeners.notify(EventType.CLOSE, this); } } @@ -237,12 +237,12 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public void onClose(Runnable handler) { + public void onClose(Consumer handler) { listeners.add(EventType.CLOSE, handler); } @Override - public void offClose(Runnable handler) { + public void offClose(Consumer handler) { listeners.remove(EventType.CLOSE, handler); } @@ -257,12 +257,12 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public void onCrash(Runnable handler) { + public void onCrash(Consumer handler) { listeners.add(EventType.CRASH, handler); } @Override - public void offCrash(Runnable handler) { + public void offCrash(Consumer handler) { listeners.remove(EventType.CRASH, handler); } @@ -277,12 +277,12 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public void onDomContentLoaded(Runnable handler) { + public void onDOMContentLoaded(Consumer handler) { listeners.add(EventType.DOMCONTENTLOADED, handler); } @Override - public void offDomContentLoaded(Runnable handler) { + public void offDOMContentLoaded(Consumer handler) { listeners.remove(EventType.DOMCONTENTLOADED, handler); } @@ -337,12 +337,12 @@ public class PageImpl extends ChannelOwner implements Page { } @Override - public void onLoad(Runnable handler) { + public void onLoad(Consumer handler) { listeners.add(EventType.LOAD, handler); } @Override - public void offLoad(Runnable handler) { + public void offLoad(Consumer handler) { listeners.remove(EventType.LOAD, handler); } diff --git a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java index 15715a61..d2a1bf24 100644 --- a/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java +++ b/playwright/src/main/java/com/microsoft/playwright/impl/WebSocketImpl.java @@ -44,12 +44,12 @@ class WebSocketImpl extends ChannelOwner implements WebSocket { } @Override - public void onClose(Runnable handler) { + public void onClose(Consumer handler) { listeners.add(EventType.CLOSE, handler); } @Override - public void offClose(Runnable handler) { + public void offClose(Consumer handler) { listeners.remove(EventType.CLOSE, handler); } @@ -212,7 +212,7 @@ class WebSocketImpl extends ChannelOwner implements WebSocket { } case "close": { isClosed = true; - listeners.notify(EventType.CLOSE, null); + listeners.notify(EventType.CLOSE, this); break; } default: { diff --git a/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java b/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java index 5a79b02d..a5c99bf3 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestDefaultBrowserContext2.java @@ -223,7 +223,7 @@ public class TestDefaultBrowserContext2 extends TestBase { void shouldFireCloseEventForAPersistentContext() { launchPersistent(); boolean[] closed = {false}; - persistentContext.onClose(() -> closed[0] = true); + persistentContext.onClose(context -> closed[0] = true); closePersistentContext(); assertTrue(closed[0]); } diff --git a/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java b/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java index 02811bae..16e7718a 100644 --- a/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java +++ b/playwright/src/test/java/com/microsoft/playwright/TestWebSocket.java @@ -101,7 +101,7 @@ public class TestWebSocket extends TestBase { page.onWebSocket(ws -> { log.add("open<" + ws.url() + ">"); webSocket[0] = ws; - ws.onClose(() -> { + ws.onClose(ws1 -> { log.add("close"); socketClosed[0] = true; }); @@ -123,7 +123,7 @@ public class TestWebSocket extends TestBase { log.add("open"); ws.onFrameSent(frameData -> log.add("sent<" + frameData.text() + ">")); ws.onFrameReceived(frameData -> log.add("received<" + frameData.text() + ">")); - ws.onClose(() -> { log.add("close"); socketClosed[0] = true; }); + ws.onClose(ws1 -> { log.add("close"); socketClosed[0] = true; }); }); page.evaluate("port => {\n" + " const ws = new WebSocket('ws://localhost:' + port + '/ws');\n" + @@ -146,7 +146,7 @@ public class TestWebSocket extends TestBase { boolean[] socketClosed = {false}; List sent = new ArrayList<>(); page.onWebSocket(ws -> { - ws.onClose(() -> { socketClosed[0] = true; }); + ws.onClose(ws1 -> socketClosed[0] = true); ws.onFrameSent(frameData -> sent.add(frameData)); }); page.evaluate("port => {\n" + diff --git a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java index 9f132dae..5be3d003 100644 --- a/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java +++ b/tools/api-generator/src/main/java/com/microsoft/playwright/tools/ApiGenerator.java @@ -375,7 +375,7 @@ class Event extends Element { eventNames.put("Page.console", "Console"); eventNames.put("Page.crash", "Crash"); eventNames.put("Page.dialog", "Dialog"); - eventNames.put("Page.domcontentloaded", "DomContentLoaded"); + eventNames.put("Page.domcontentloaded", "DOMContentLoaded"); eventNames.put("Page.download", "Download"); eventNames.put("Page.filechooser", "FileChooser"); eventNames.put("Page.frameattached", "FrameAttached"); @@ -438,7 +438,12 @@ class Event extends Element { throw new RuntimeException("Unknown event: " + jsonPath); } String name = eventNames.get(jsonPath); - String listenerType = "void".equals(type.toJava()) ? "Runnable" : "Consumer<" + type.toJava() + ">"; + String paramType = type.toJava(); + // TODO: remove once fixed upstream + if (paramType.equals("void")) { + paramType = parent.jsonName; + } + String listenerType = "Consumer<" + paramType + ">"; output.add(offset + "void on" + name + "(" + listenerType + " handler);"); output.add(offset + "void off" + name + "(" + listenerType + " handler);"); } @@ -1050,7 +1055,7 @@ class Interface extends TypeDefinition { output.add("import java.nio.file.Path;"); } output.add("import java.util.*;"); - if (asList("Page", "BrowserContext", "WebSocket", "Worker").contains(jsonName)) { + if (asList("Page", "Browser", "BrowserContext", "WebSocket", "Worker").contains(jsonName)) { output.add("import java.util.function.Consumer;"); } if (asList("Page", "Frame", "BrowserContext", "WebSocket").contains(jsonName)) {