Skip to content

Commit 83eb17e

Browse files
authored
[dotnet] [bidi] Initialize internal modules without Lazy (#15979)
1 parent dda35b2 commit 83eb17e

File tree

1 file changed

+152
-24
lines changed

1 file changed

+152
-24
lines changed

dotnet/src/webdriver/BiDi/BiDi.cs

Lines changed: 152 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,39 +27,167 @@ public class BiDi : IAsyncDisposable
2727
{
2828
private readonly Broker _broker;
2929

30-
private readonly Lazy<Session.SessionModule> _sessionModule;
31-
private readonly Lazy<BrowsingContext.BrowsingContextModule> _browsingContextModule;
32-
private readonly Lazy<Browser.BrowserModule> _browserModule;
33-
private readonly Lazy<Network.NetworkModule> _networkModule;
34-
private readonly Lazy<Input.InputModule> _inputModule;
35-
private readonly Lazy<Script.ScriptModule> _scriptModule;
36-
private readonly Lazy<Log.LogModule> _logModule;
37-
private readonly Lazy<Storage.StorageModule> _storageModule;
30+
private Session.SessionModule? _sessionModule;
31+
private BrowsingContext.BrowsingContextModule? _browsingContextModule;
32+
private Browser.BrowserModule? _browserModule;
33+
private Network.NetworkModule? _networkModule;
34+
private Input.InputModule? _inputModule;
35+
private Script.ScriptModule? _scriptModule;
36+
private Log.LogModule? _logModule;
37+
private Storage.StorageModule? _storageModule;
38+
39+
private readonly object _moduleLock = new();
3840

3941
internal BiDi(string url)
4042
{
4143
var uri = new Uri(url);
4244

4345
_broker = new Broker(this, uri);
46+
}
47+
48+
internal Session.SessionModule SessionModule
49+
{
50+
get
51+
{
52+
if (_sessionModule is null)
53+
{
54+
lock (_moduleLock)
55+
{
56+
if (_sessionModule is null)
57+
{
58+
_sessionModule = new Session.SessionModule(_broker);
59+
}
60+
}
61+
}
62+
return _sessionModule;
63+
}
64+
}
65+
66+
public BrowsingContext.BrowsingContextModule BrowsingContext
67+
{
68+
get
69+
{
70+
if (_browsingContextModule is null)
71+
{
72+
lock (_moduleLock)
73+
{
74+
if (_browsingContextModule is null)
75+
{
76+
_browsingContextModule = new BrowsingContext.BrowsingContextModule(_broker);
77+
}
78+
}
79+
}
80+
return _browsingContextModule;
81+
}
82+
}
83+
84+
public Browser.BrowserModule Browser
85+
{
86+
get
87+
{
88+
if (_browserModule is null)
89+
{
90+
lock (_moduleLock)
91+
{
92+
if (_browserModule is null)
93+
{
94+
_browserModule = new Browser.BrowserModule(_broker);
95+
}
96+
}
97+
}
98+
return _browserModule;
99+
}
100+
}
44101

45-
_sessionModule = new Lazy<Session.SessionModule>(() => new Session.SessionModule(_broker));
46-
_browsingContextModule = new Lazy<BrowsingContext.BrowsingContextModule>(() => new BrowsingContext.BrowsingContextModule(_broker));
47-
_browserModule = new Lazy<Browser.BrowserModule>(() => new Browser.BrowserModule(_broker));
48-
_networkModule = new Lazy<Network.NetworkModule>(() => new Network.NetworkModule(_broker));
49-
_inputModule = new Lazy<Input.InputModule>(() => new Input.InputModule(_broker));
50-
_scriptModule = new Lazy<Script.ScriptModule>(() => new Script.ScriptModule(_broker));
51-
_logModule = new Lazy<Log.LogModule>(() => new Log.LogModule(_broker));
52-
_storageModule = new Lazy<Storage.StorageModule>(() => new Storage.StorageModule(_broker));
102+
public Network.NetworkModule Network
103+
{
104+
get
105+
{
106+
if (_networkModule is null)
107+
{
108+
lock (_moduleLock)
109+
{
110+
if (_networkModule is null)
111+
{
112+
_networkModule = new Network.NetworkModule(_broker);
113+
}
114+
}
115+
}
116+
return _networkModule;
117+
}
53118
}
54119

55-
internal Session.SessionModule SessionModule => _sessionModule.Value;
56-
public BrowsingContext.BrowsingContextModule BrowsingContext => _browsingContextModule.Value;
57-
public Browser.BrowserModule Browser => _browserModule.Value;
58-
public Network.NetworkModule Network => _networkModule.Value;
59-
internal Input.InputModule InputModule => _inputModule.Value;
60-
public Script.ScriptModule Script => _scriptModule.Value;
61-
public Log.LogModule Log => _logModule.Value;
62-
public Storage.StorageModule Storage => _storageModule.Value;
120+
internal Input.InputModule InputModule
121+
{
122+
get
123+
{
124+
if (_inputModule is null)
125+
{
126+
lock (_moduleLock)
127+
{
128+
if (_inputModule is null)
129+
{
130+
_inputModule = new Input.InputModule(_broker);
131+
}
132+
}
133+
}
134+
return _inputModule;
135+
}
136+
}
137+
138+
public Script.ScriptModule Script
139+
{
140+
get
141+
{
142+
if (_scriptModule is null)
143+
{
144+
lock (_moduleLock)
145+
{
146+
if (_scriptModule is null)
147+
{
148+
_scriptModule = new Script.ScriptModule(_broker);
149+
}
150+
}
151+
}
152+
return _scriptModule;
153+
}
154+
}
155+
156+
public Log.LogModule Log
157+
{
158+
get
159+
{
160+
if (_logModule is null)
161+
{
162+
lock (_moduleLock)
163+
{
164+
if (_logModule is null)
165+
{
166+
_logModule = new Log.LogModule(_broker);
167+
}
168+
}
169+
}
170+
return _logModule;
171+
}
172+
}
173+
174+
public Storage.StorageModule Storage
175+
{
176+
get
177+
{
178+
if (_storageModule is null)
179+
{
180+
lock (_moduleLock)
181+
{
182+
if (_storageModule is null)
183+
{
184+
_storageModule = new Storage.StorageModule(_broker);
185+
}
186+
}
187+
}
188+
return _storageModule;
189+
}
190+
}
63191

64192
public Task<Session.StatusResult> StatusAsync()
65193
{

0 commit comments

Comments
 (0)