From ae87fe61e6ac06962cf04a9a26039171d46d050e Mon Sep 17 00:00:00 2001 From: Michael Render Date: Tue, 7 Oct 2025 20:49:06 -0400 Subject: [PATCH 1/2] [dotnet] Replace lazy caching mechanism in BiDi's constructor with simple initialization --- dotnet/src/webdriver/BiDi/BiDi.cs | 44 ++++++++++++++++--------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/dotnet/src/webdriver/BiDi/BiDi.cs b/dotnet/src/webdriver/BiDi/BiDi.cs index b80652d52bd20..5b66e8aeedcbd 100644 --- a/dotnet/src/webdriver/BiDi/BiDi.cs +++ b/dotnet/src/webdriver/BiDi/BiDi.cs @@ -17,15 +17,14 @@ // under the License. // +using OpenQA.Selenium.BiDi.Communication; +using OpenQA.Selenium.BiDi.Communication.Json; +using OpenQA.Selenium.BiDi.Communication.Json.Converters; using System; -using System.Collections.Concurrent; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; -using OpenQA.Selenium.BiDi.Communication; -using OpenQA.Selenium.BiDi.Communication.Json; -using OpenQA.Selenium.BiDi.Communication.Json.Converters; namespace OpenQA.Selenium.BiDi; @@ -35,8 +34,6 @@ public sealed class BiDi : IAsyncDisposable private readonly JsonSerializerOptions _jsonOptions; private readonly BiDiJsonSerializerContext _jsonContext; - private readonly ConcurrentDictionary _modules = []; - private BiDi(string url) { var uri = new Uri(url); @@ -68,32 +65,37 @@ private BiDi(string url) _jsonContext = new BiDiJsonSerializerContext(_jsonOptions); _broker = new Broker(this, uri, _jsonOptions); + SessionModule = Module.Create(this, _broker, _jsonOptions, _jsonContext); + BrowsingContext = Module.Create(this, _broker, _jsonOptions, _jsonContext); + Browser = Module.Create(this, _broker, _jsonOptions, _jsonContext); + Network = Module.Create(this, _broker, _jsonOptions, _jsonContext); + InputModule = Module.Create(this, _broker, _jsonOptions, _jsonContext); + Script = Module.Create(this, _broker, _jsonOptions, _jsonContext); + Log = Module.Create(this, _broker, _jsonOptions, _jsonContext); + Storage = Module.Create(this, _broker, _jsonOptions, _jsonContext); + WebExtension = Module.Create(this, _broker, _jsonOptions, _jsonContext); + Emulation = Module.Create(this, _broker, _jsonOptions, _jsonContext); } - internal Session.SessionModule SessionModule => AsModule(); - - public BrowsingContext.BrowsingContextModule BrowsingContext => AsModule(); + internal Session.SessionModule SessionModule { get; } - public Browser.BrowserModule Browser => AsModule(); + public BrowsingContext.BrowsingContextModule BrowsingContext { get; } - public Network.NetworkModule Network => AsModule(); + public Browser.BrowserModule Browser { get; } - internal Input.InputModule InputModule => AsModule(); + public Network.NetworkModule Network { get; } - public Script.ScriptModule Script => AsModule(); + internal Input.InputModule InputModule { get; } - public Log.LogModule Log => AsModule(); + public Script.ScriptModule Script { get; } - public Storage.StorageModule Storage => AsModule(); + public Log.LogModule Log { get; } - public WebExtension.WebExtensionModule WebExtension => AsModule(); + public Storage.StorageModule Storage { get; } - public Emulation.EmulationModule Emulation => AsModule(); + public WebExtension.WebExtensionModule WebExtension { get; } - public TModule AsModule() where TModule : Module, new() - { - return (TModule)_modules.GetOrAdd(typeof(TModule), _ => Module.Create(this, _broker, _jsonOptions, _jsonContext)); - } + public Emulation.EmulationModule Emulation { get; } public Task StatusAsync() { From 7865500ec8aaef0866af0c2ea2b10c000633d7ff Mon Sep 17 00:00:00 2001 From: Michael Render Date: Tue, 7 Oct 2025 21:04:40 -0400 Subject: [PATCH 2/2] Revert unnecessary changes --- dotnet/src/webdriver/BiDi/BiDi.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dotnet/src/webdriver/BiDi/BiDi.cs b/dotnet/src/webdriver/BiDi/BiDi.cs index 5b66e8aeedcbd..448e0ea85bf48 100644 --- a/dotnet/src/webdriver/BiDi/BiDi.cs +++ b/dotnet/src/webdriver/BiDi/BiDi.cs @@ -17,14 +17,14 @@ // under the License. // -using OpenQA.Selenium.BiDi.Communication; -using OpenQA.Selenium.BiDi.Communication.Json; -using OpenQA.Selenium.BiDi.Communication.Json.Converters; using System; using System.Text.Json; using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; +using OpenQA.Selenium.BiDi.Communication; +using OpenQA.Selenium.BiDi.Communication.Json; +using OpenQA.Selenium.BiDi.Communication.Json.Converters; namespace OpenQA.Selenium.BiDi;