1717
1818package org .openqa .selenium .devtools ;
1919
20+ import static org .openqa .selenium .concurrent .Lazy .lazy ;
21+
2022import com .google .auto .service .AutoService ;
2123import java .net .URI ;
2224import java .util .Optional ;
2325import java .util .function .Predicate ;
2426
2527import org .openqa .selenium .Capabilities ;
28+ import org .openqa .selenium .concurrent .Lazy ;
2629import org .openqa .selenium .devtools .noop .NoOpCdpInfo ;
2730import org .openqa .selenium .remote .AugmenterProvider ;
2831import org .openqa .selenium .remote .ExecuteMethod ;
@@ -43,37 +46,32 @@ public Class<HasDevTools> getDescribedInterface() {
4346
4447 @ Override
4548 public HasDevTools getImplementation (Capabilities caps , ExecuteMethod executeMethod ) {
46- return new HasDevTools () {
47- private volatile DevTools devTools ;
48- private final Object lock = new Object ();
49+ final Lazy <DevTools > devTools = lazy (() -> establishDevToolsConnection (caps ));
4950
51+ return new HasDevTools () {
5052 @ Override
5153 public Optional <DevTools > maybeGetDevTools () {
52- return Optional . ofNullable ( devTools );
54+ return devTools . getIfInitialized ( );
5355 }
5456
5557 @ Override
5658 public DevTools getDevTools () {
57- if (devTools == null ) {
58- synchronized (lock ) {
59- if (devTools == null ) {
60- Object cdpVersion = caps .getCapability ("se:cdpVersion" );
61- String version =
62- cdpVersion instanceof String ? (String ) cdpVersion : caps .getBrowserVersion ();
63-
64- CdpInfo info = new CdpVersionFinder ().match (version ).orElseGet (NoOpCdpInfo ::new );
65- this .devTools =
66- SeleniumCdpConnection .create (caps )
67- .map (conn -> new DevTools (info ::getDomains , conn ))
68- .orElseThrow (() -> new DevToolsException ("Unable to create DevTools connection" ));
69- }
70- }
71- }
72- return devTools ;
59+ return devTools .get ();
7360 }
7461 };
7562 }
7663
64+ private DevTools establishDevToolsConnection (Capabilities caps ) {
65+ Object cdpVersion = caps .getCapability ("se:cdpVersion" );
66+ String version =
67+ cdpVersion instanceof String ? (String ) cdpVersion : caps .getBrowserVersion ();
68+
69+ CdpInfo info = new CdpVersionFinder ().match (version ).orElseGet (NoOpCdpInfo ::new );
70+ return SeleniumCdpConnection .create (caps )
71+ .map (conn -> new DevTools (info ::getDomains , conn ))
72+ .orElseThrow (() -> new DevToolsException ("Unable to create DevTools connection" ));
73+ }
74+
7775 private String getCdpUrl (Capabilities caps ) {
7876 Object cdpEnabled = caps .getCapability ("se:cdpEnabled" );
7977 if (cdpEnabled != null && !Boolean .parseBoolean (cdpEnabled .toString ())) {
0 commit comments