Skip to content

Commit 9e23bc1

Browse files
committed
make augmentation of HasBiDi/HasDevTools lazy-loaded
Otherwise, command `new Augmenter().augment(remoteWebDriver)` fails immediately (even if I don't want to use CDP or BiDi).
1 parent b731bb4 commit 9e23bc1

File tree

2 files changed

+38
-13
lines changed

2 files changed

+38
-13
lines changed

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,18 +44,31 @@ public Class<HasBiDi> getDescribedInterface() {
4444

4545
@Override
4646
public HasBiDi getImplementation(Capabilities caps, ExecuteMethod executeMethod) {
47+
return new HasBiDi() {
48+
private volatile Optional<BiDi> biDi;
4749

48-
URI wsUri = getBiDiUrl(caps).orElseThrow(() -> new BiDiException("BiDi not supported"));
50+
@Override
51+
public Optional<BiDi> maybeGetBiDi() {
52+
if (biDi == null) {
53+
synchronized (this) {
54+
if (biDi == null) {
55+
URI wsUri = getBiDiUrl(caps).orElseThrow(() -> new BiDiException("BiDi not supported"));
4956

50-
HttpClient.Factory clientFactory = HttpClient.Factory.createDefault();
51-
ClientConfig wsConfig = ClientConfig.defaultConfig().baseUri(wsUri);
52-
HttpClient wsClient = clientFactory.createClient(wsConfig);
53-
Connection connection = new Connection(wsClient, wsUri.toString());
57+
HttpClient.Factory clientFactory = HttpClient.Factory.createDefault();
58+
ClientConfig wsConfig = ClientConfig.defaultConfig().baseUri(wsUri);
59+
HttpClient wsClient = clientFactory.createClient(wsConfig);
60+
Connection connection = new Connection(wsClient, wsUri.toString());
5461

55-
return () -> Optional.of(new BiDi(connection));
62+
biDi = Optional.of(new BiDi(connection));
63+
}
64+
}
65+
}
66+
return biDi;
67+
}
68+
};
5669
}
5770

58-
private Optional<URI> getBiDiUrl(Capabilities caps) {
71+
private static Optional<URI> getBiDiUrl(Capabilities caps) {
5972
Object biDiCapability = caps.getCapability("webSocketUrl");
6073
Optional<String> webSocketUrl = Optional.ofNullable((String) biDiCapability);
6174

java/src/org/openqa/selenium/devtools/DevToolsProvider.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,26 @@ public Class<HasDevTools> getDescribedInterface() {
4242

4343
@Override
4444
public HasDevTools getImplementation(Capabilities caps, ExecuteMethod executeMethod) {
45-
Object cdpVersion = caps.getCapability("se:cdpVersion");
46-
String version = cdpVersion instanceof String ? (String) cdpVersion : caps.getBrowserVersion();
45+
return new HasDevTools() {
46+
private volatile Optional<DevTools> devTools;
4747

48-
CdpInfo info = new CdpVersionFinder().match(version).orElseGet(NoOpCdpInfo::new);
49-
Optional<DevTools> devTools =
50-
SeleniumCdpConnection.create(caps).map(conn -> new DevTools(info::getDomains, conn));
48+
@Override
49+
public Optional<DevTools> maybeGetDevTools() {
50+
if (devTools == null) {
51+
synchronized (this) {
52+
if (devTools == null) {
53+
Object cdpVersion = caps.getCapability("se:cdpVersion");
54+
String version =
55+
cdpVersion instanceof String ? (String) cdpVersion : caps.getBrowserVersion();
5156

52-
return () -> devTools;
57+
CdpInfo info = new CdpVersionFinder().match(version).orElseGet(NoOpCdpInfo::new);
58+
this.devTools = SeleniumCdpConnection.create(caps).map(conn -> new DevTools(info::getDomains, conn));
59+
}
60+
}
61+
}
62+
return devTools;
63+
}
64+
};
5365
}
5466

5567
private String getCdpUrl(Capabilities caps) {

0 commit comments

Comments
 (0)