Skip to content

Commit 4ddffa6

Browse files
committed
[java] Decode BiDi event response only once
1 parent f69abe3 commit 4ddffa6

2 files changed

Lines changed: 24 additions & 36 deletions

File tree

java/src/org/openqa/selenium/bidi/Connection.java

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ private void handle(CharSequence data) {
208208
&& (raw.get("result") != null || raw.get("error") != null)) {
209209
handleResponse(asString, raw);
210210
} else if (raw.get("method") instanceof String && raw.get("params") instanceof Map) {
211-
handleEventResponse(asString, raw);
211+
handleEventResponse(raw);
212212
} else {
213213
LOG.warning(() -> "Unhandled type:" + data);
214214
}
@@ -242,15 +242,14 @@ private void handleResponse(String rawDataString, Map<String, Object> rawDataMap
242242
}
243243
}
244244

245-
private void handleEventResponse(String rawDataString, Map<String, Object> rawDataMap) {
245+
private void handleEventResponse(Map<String, Object> rawDataMap) {
246246
LOG.log(
247247
getDebugLogLevel(),
248248
() -> "Method" + rawDataMap.get("method") + "called with" + eventCallbacks.keySet().size()
249249
+ "callbacks available");
250250
Lock lock = callbacksLock.readLock();
251251
lock.lock();
252252
try {
253-
// TODO: Also only decode once.
254253
eventCallbacks.keySet().stream()
255254
.filter(event -> {
256255
LOG.log(
@@ -259,36 +258,24 @@ private void handleEventResponse(String rawDataString, Map<String, Object> rawDa
259258
return rawDataMap.get("method").equals(event.getMethod());
260259
})
261260
.forEach(event -> {
262-
try (StringReader reader = new StringReader(rawDataString);
263-
JsonInput input = JSON.newInput(reader)) {
264-
Object value = null;
265-
input.beginObject();
266-
while (input.hasNext()) {
267-
switch (input.nextName()) {
268-
case "params":
269-
value = event.getMapper().apply(input);
270-
break;
271-
272-
default:
273-
input.skipValue();
274-
break;
275-
}
276-
}
277-
input.endObject();
278-
279-
if (value == null) {
280-
return;
281-
}
282-
283-
final Object finalValue = value;
284-
285-
for (Consumer<?> action : eventCallbacks.get(event)) {
286-
@SuppressWarnings("unchecked") Consumer<Object> obj = (Consumer<Object>) action;
287-
LOG.log(
288-
getDebugLogLevel(),
289-
String.format("Calling callback for %s using %s being passed %s", event, obj, finalValue));
290-
obj.accept(finalValue);
291-
}
261+
Map<String, Object> params = (Map<String, Object>) rawDataMap.get("params");
262+
Object value = null;
263+
if (params != null) {
264+
value = event.getMapper().apply(params);
265+
}
266+
if (value == null) {
267+
return;
268+
}
269+
270+
final Object finalValue = value;
271+
272+
for (Consumer<?> action : eventCallbacks.get(event)) {
273+
@SuppressWarnings("unchecked") Consumer<Object> obj = (Consumer<Object>) action;
274+
LOG.log(
275+
getDebugLogLevel(),
276+
String.format("Calling callback for %s using %s being passed %s", event, obj,
277+
finalValue));
278+
obj.accept(finalValue);
292279
}
293280
});
294281
} finally {

java/src/org/openqa/selenium/bidi/Event.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@
2020
import org.openqa.selenium.internal.Require;
2121
import org.openqa.selenium.json.JsonInput;
2222

23+
import java.util.Map;
2324
import java.util.function.Function;
2425

2526
public class Event<X> {
2627

2728
private final String method;
28-
private final Function<JsonInput, X> mapper;
29+
private final Function<Map<String,Object>, X> mapper;
2930

30-
public Event(String method, Function<JsonInput, X> mapper) {
31+
public Event(String method, Function<Map<String,Object>, X> mapper) {
3132
this.method = Require.nonNull("Event method", method);
3233
this.mapper = Require.nonNull("Result mapper", mapper);
3334
}
@@ -36,7 +37,7 @@ public String getMethod() {
3637
return method;
3738
}
3839

39-
public Function<JsonInput, X> getMapper() {
40+
public Function<Map<String,Object>, X> getMapper() {
4041
return mapper;
4142
}
4243

0 commit comments

Comments
 (0)