From 745990bc4dcfbc50814b36237aeb2e3b1f1b87bd Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Sun, 26 Jan 2025 17:44:15 +0300 Subject: [PATCH 1/7] Bidi serializer context --- .../webdriver/BiDi/Communication/Broker.cs | 15 +-- .../Json/BiDiSerializerContext.cs | 98 +++++++++++++++++++ .../Communication/Transport/ITransport.cs | 6 +- .../Transport/WebSocketTransport.cs | 9 +- 4 files changed, 115 insertions(+), 13 deletions(-) create mode 100644 dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs diff --git a/dotnet/src/webdriver/BiDi/Communication/Broker.cs b/dotnet/src/webdriver/BiDi/Communication/Broker.cs index b2dc03942d7ee..587a0d86cbc6c 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Broker.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Broker.cs @@ -17,6 +17,7 @@ // under the License. // +using OpenQA.Selenium.BiDi.Communication.Json; using OpenQA.Selenium.BiDi.Communication.Json.Converters; using OpenQA.Selenium.BiDi.Communication.Transport; using OpenQA.Selenium.Internal.Logging; @@ -53,14 +54,14 @@ public class Broker : IAsyncDisposable private Task? _eventEmitterTask; private CancellationTokenSource? _receiveMessagesCancellationTokenSource; - private readonly JsonSerializerOptions _jsonSerializerOptions; + private readonly BiDiSerializerContext _jsonSerializerContext; internal Broker(BiDi bidi, ITransport transport) { _bidi = bidi; _transport = transport; - _jsonSerializerOptions = new JsonSerializerOptions + var jsonSerializerOptions = new JsonSerializerOptions { PropertyNameCaseInsensitive = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase, @@ -99,6 +100,8 @@ internal Broker(BiDi bidi, ITransport transport) new Json.Converters.Enumerable.GetRealmsResultConverter(), } }; + + _jsonSerializerContext = new BiDiSerializerContext(jsonSerializerOptions); } public async Task ConnectAsync(CancellationToken cancellationToken) @@ -114,7 +117,7 @@ private async Task ReceiveMessagesAsync(CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { - var message = await _transport.ReceiveAsJsonAsync(_jsonSerializerOptions, cancellationToken); + var message = await _transport.ReceiveAsJsonAsync(_jsonSerializerContext, cancellationToken); switch (message) { @@ -145,7 +148,7 @@ private async Task ProcessEventsAwaiterAsync() { foreach (var handler in eventHandlers.ToArray()) // copy handlers avoiding modified collection while iterating { - var args = (EventArgs)result.Params.Deserialize(handler.EventArgsType, _jsonSerializerOptions)!; + var args = (EventArgs)result.Params.Deserialize(handler.EventArgsType, _jsonSerializerContext)!; args.BiDi = _bidi; @@ -177,7 +180,7 @@ public async Task ExecuteCommandAsync(Command command, Command { var result = await ExecuteCommandCoreAsync(command, options).ConfigureAwait(false); - return (TResult)((JsonElement)result).Deserialize(typeof(TResult), _jsonSerializerOptions)!; + return (TResult)((JsonElement)result).Deserialize(typeof(TResult), _jsonSerializerContext)!; } public async Task ExecuteCommandAsync(Command command, CommandOptions? options) @@ -199,7 +202,7 @@ private async Task ExecuteCommandCoreAsync(Command command, CommandOptio _pendingCommands[command.Id] = tcs; - await _transport.SendAsJsonAsync(command, _jsonSerializerOptions, cts.Token).ConfigureAwait(false); + await _transport.SendAsJsonAsync(command, _jsonSerializerContext, cts.Token).ConfigureAwait(false); return await tcs.Task.ConfigureAwait(false); } diff --git a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs new file mode 100644 index 0000000000000..a2f92de529d60 --- /dev/null +++ b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs @@ -0,0 +1,98 @@ +using System.Text.Json.Serialization; + +namespace OpenQA.Selenium.BiDi.Communication.Json; + +// https://github.com/dotnet/runtime/issues/72604 +[JsonSerializable(typeof(MessageSuccess))] +[JsonSerializable(typeof(MessageError))] +[JsonSerializable(typeof(MessageEvent))] + +[JsonSerializable(typeof(Modules.Script.EvaluateResult.Success))] +[JsonSerializable(typeof(Modules.Script.EvaluateResult.Exception))] + +[JsonSerializable(typeof(Modules.Script.RemoteValue.Number), TypeInfoPropertyName = "Script_RemoteValue_Number")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.String), TypeInfoPropertyName = "Script_RemoteValue_String")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Null), TypeInfoPropertyName = "Script_RemoteValue_Null")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Undefined), TypeInfoPropertyName = "Script_RemoteValue_Undefined")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Symbol))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Object), TypeInfoPropertyName = "Script_RemoteValue_Object")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Function))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.RegExp), TypeInfoPropertyName = "Script_RemoteValue_RegExp")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.RegExp.RegExpValue), TypeInfoPropertyName = "Script_RemoteValue_RegExp_RegExpValue")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Date), TypeInfoPropertyName = "Script_RemoteValue_Date")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Map), TypeInfoPropertyName = "Script_RemoteValue_Map")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Set), TypeInfoPropertyName = "Script_RemoteValue_Set")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.WeakMap))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.WeakSet))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Generator))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Error))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Proxy))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Promise))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.TypedArray))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.ArrayBuffer))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.NodeList))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.HtmlCollection))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Node))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.WindowProxy))] + +[JsonSerializable(typeof(Modules.Script.LocalValue.String), TypeInfoPropertyName = "Script_LocalValue_String")] + +[JsonSerializable(typeof(Modules.Script.Target.Realm), TypeInfoPropertyName = "Script_Target_Realm")] +[JsonSerializable(typeof(Modules.Script.Target.Context), TypeInfoPropertyName = "Script_Target_Context")] + +[JsonSerializable(typeof(Modules.Script.RealmInfo.Window))] +[JsonSerializable(typeof(Modules.Script.RealmInfo.DedicatedWorker))] +[JsonSerializable(typeof(Modules.Script.RealmInfo.SharedWorker))] +[JsonSerializable(typeof(Modules.Script.RealmInfo.ServiceWorker))] +[JsonSerializable(typeof(Modules.Script.RealmInfo.Worker))] +[JsonSerializable(typeof(Modules.Script.RealmInfo.PaintWorklet))] +[JsonSerializable(typeof(Modules.Script.RealmInfo.AudioWorklet))] +[JsonSerializable(typeof(Modules.Script.RealmInfo.Worklet))] + +[JsonSerializable(typeof(Modules.Log.Entry.Console))] +[JsonSerializable(typeof(Modules.Log.Entry.Javascript))] +// + +[JsonSerializable(typeof(Command))] +[JsonSerializable(typeof(Message))] + +[JsonSerializable(typeof(Modules.Session.StatusResult))] +[JsonSerializable(typeof(Modules.Session.NewResult))] + +[JsonSerializable(typeof(Modules.Browser.CloseCommand), TypeInfoPropertyName = "Browser_CloseCommand")] +[JsonSerializable(typeof(Modules.Browser.UserContextInfo))] +[JsonSerializable(typeof(Modules.Browser.GetUserContextsResult))] + +[JsonSerializable(typeof(Modules.BrowsingContext.CloseCommand), TypeInfoPropertyName = "BrowsingContext_CloseCommand")] +[JsonSerializable(typeof(Modules.BrowsingContext.CreateResult))] +[JsonSerializable(typeof(Modules.BrowsingContext.BrowsingContextInfo))] +[JsonSerializable(typeof(Modules.BrowsingContext.NavigateResult))] +[JsonSerializable(typeof(Modules.BrowsingContext.NavigationInfo))] +[JsonSerializable(typeof(Modules.BrowsingContext.TraverseHistoryResult))] +[JsonSerializable(typeof(Modules.BrowsingContext.LocateNodesResult))] +[JsonSerializable(typeof(Modules.BrowsingContext.CaptureScreenshotResult))] +[JsonSerializable(typeof(Modules.BrowsingContext.GetTreeResult))] +[JsonSerializable(typeof(Modules.BrowsingContext.PrintResult))] +[JsonSerializable(typeof(Modules.BrowsingContext.UserPromptOpenedEventArgs))] +[JsonSerializable(typeof(Modules.BrowsingContext.UserPromptClosedEventArgs))] + +[JsonSerializable(typeof(Modules.Network.BytesValue.String), TypeInfoPropertyName = "Network_BytesValue_String")] +[JsonSerializable(typeof(Modules.Network.UrlPattern.String), TypeInfoPropertyName = "Network_UrlPattern_String")] +[JsonSerializable(typeof(Modules.Network.ContinueWithAuthParameters.Default), TypeInfoPropertyName = "Network_ContinueWithAuthParameters_Default")] +[JsonSerializable(typeof(Modules.Network.AddInterceptResult))] +[JsonSerializable(typeof(Modules.Network.BeforeRequestSentEventArgs))] +[JsonSerializable(typeof(Modules.Network.ResponseStartedEventArgs))] +[JsonSerializable(typeof(Modules.Network.ResponseCompletedEventArgs))] +[JsonSerializable(typeof(Modules.Network.FetchErrorEventArgs))] + +[JsonSerializable(typeof(Modules.Script.Channel), TypeInfoPropertyName = "Script_Channel")] +[JsonSerializable(typeof(Modules.Script.AddPreloadScriptResult))] +[JsonSerializable(typeof(Modules.Script.EvaluateResult))] +[JsonSerializable(typeof(Modules.Script.GetRealmsResult))] + +[JsonSerializable(typeof(Modules.Log.Entry))] + +[JsonSerializable(typeof(Modules.Storage.GetCookiesResult))] +[JsonSerializable(typeof(Modules.Storage.DeleteCookiesResult))] +[JsonSerializable(typeof(Modules.Storage.SetCookieResult))] +internal partial class BiDiSerializerContext: JsonSerializerContext; diff --git a/dotnet/src/webdriver/BiDi/Communication/Transport/ITransport.cs b/dotnet/src/webdriver/BiDi/Communication/Transport/ITransport.cs index ebcb0ebea8b46..02d5cc9422645 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Transport/ITransport.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Transport/ITransport.cs @@ -17,10 +17,10 @@ // under the License. // -using System.Text.Json; using System.Threading.Tasks; using System.Threading; using System; +using System.Text.Json.Serialization; #nullable enable @@ -30,7 +30,7 @@ interface ITransport : IDisposable { Task ConnectAsync(CancellationToken cancellationToken); - Task ReceiveAsJsonAsync(JsonSerializerOptions jsonSerializerOptions, CancellationToken cancellationToken); + Task ReceiveAsJsonAsync(JsonSerializerContext jsonSerializerContext, CancellationToken cancellationToken); - Task SendAsJsonAsync(Command command, JsonSerializerOptions jsonSerializerOptions, CancellationToken cancellationToken); + Task SendAsJsonAsync(Command command, JsonSerializerContext jsonSerializerContext, CancellationToken cancellationToken); } diff --git a/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs b/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs index f5b1aeaf82a3c..643c4ebb2d96b 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs @@ -25,6 +25,7 @@ using System.Text.Json; using System.Text; using OpenQA.Selenium.Internal.Logging; +using System.Text.Json.Serialization; #nullable enable @@ -44,7 +45,7 @@ public async Task ConnectAsync(CancellationToken cancellationToken) await _webSocket.ConnectAsync(_uri, cancellationToken).ConfigureAwait(false); } - public async Task ReceiveAsJsonAsync(JsonSerializerOptions jsonSerializerOptions, CancellationToken cancellationToken) + public async Task ReceiveAsJsonAsync(JsonSerializerContext jsonSerializerContext, CancellationToken cancellationToken) { using var ms = new MemoryStream(); @@ -65,14 +66,14 @@ public async Task ReceiveAsJsonAsync(JsonSerializerOptions jsonSerializerO _logger.Trace($"BiDi RCV << {Encoding.UTF8.GetString(ms.ToArray())}"); } - var res = await JsonSerializer.DeserializeAsync(ms, typeof(T), jsonSerializerOptions, cancellationToken).ConfigureAwait(false); + var res = await JsonSerializer.DeserializeAsync(ms, typeof(T), jsonSerializerContext, cancellationToken).ConfigureAwait(false); return (T)res!; } - public async Task SendAsJsonAsync(Command command, JsonSerializerOptions jsonSerializerOptions, CancellationToken cancellationToken) + public async Task SendAsJsonAsync(Command command, JsonSerializerContext jsonSerializerContext, CancellationToken cancellationToken) { - var buffer = JsonSerializer.SerializeToUtf8Bytes(command, typeof(Command), jsonSerializerOptions); + var buffer = JsonSerializer.SerializeToUtf8Bytes(command, typeof(Command), jsonSerializerContext); await _socketSendSemaphoreSlim.WaitAsync(cancellationToken); From c78c3f6b15edfdd7f316fc54eecae7688fa192a1 Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Sun, 26 Jan 2025 17:52:03 +0300 Subject: [PATCH 2/7] Auth required event args --- .../webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs index a2f92de529d60..fb05c3c2f1172 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs @@ -84,6 +84,7 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.Network.ResponseStartedEventArgs))] [JsonSerializable(typeof(Modules.Network.ResponseCompletedEventArgs))] [JsonSerializable(typeof(Modules.Network.FetchErrorEventArgs))] +[JsonSerializable(typeof(Modules.Network.AuthRequiredEventArgs))] [JsonSerializable(typeof(Modules.Script.Channel), TypeInfoPropertyName = "Script_Channel")] [JsonSerializable(typeof(Modules.Script.AddPreloadScriptResult))] From c813505d9474e4511fd3ffac164bbd3a40d20a19 Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Sun, 26 Jan 2025 18:45:52 +0300 Subject: [PATCH 3/7] Tests --- .../Json/BiDiSerializerContext.cs | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs index fb05c3c2f1172..9f22c3c7df39a 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using System.Text.Json.Serialization; namespace OpenQA.Selenium.BiDi.Communication.Json; @@ -11,10 +12,12 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.Script.EvaluateResult.Exception))] [JsonSerializable(typeof(Modules.Script.RemoteValue.Number), TypeInfoPropertyName = "Script_RemoteValue_Number")] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Boolean), TypeInfoPropertyName = "Script_RemoteValue_Boolean")] [JsonSerializable(typeof(Modules.Script.RemoteValue.String), TypeInfoPropertyName = "Script_RemoteValue_String")] [JsonSerializable(typeof(Modules.Script.RemoteValue.Null), TypeInfoPropertyName = "Script_RemoteValue_Null")] [JsonSerializable(typeof(Modules.Script.RemoteValue.Undefined), TypeInfoPropertyName = "Script_RemoteValue_Undefined")] [JsonSerializable(typeof(Modules.Script.RemoteValue.Symbol))] +[JsonSerializable(typeof(Modules.Script.RemoteValue.Array), TypeInfoPropertyName = "Script_RemoteValue_Array")] [JsonSerializable(typeof(Modules.Script.RemoteValue.Object), TypeInfoPropertyName = "Script_RemoteValue_Object")] [JsonSerializable(typeof(Modules.Script.RemoteValue.Function))] [JsonSerializable(typeof(Modules.Script.RemoteValue.RegExp), TypeInfoPropertyName = "Script_RemoteValue_RegExp")] @@ -60,8 +63,8 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.Session.NewResult))] [JsonSerializable(typeof(Modules.Browser.CloseCommand), TypeInfoPropertyName = "Browser_CloseCommand")] -[JsonSerializable(typeof(Modules.Browser.UserContextInfo))] [JsonSerializable(typeof(Modules.Browser.GetUserContextsResult))] +[JsonSerializable(typeof(IReadOnlyList))] [JsonSerializable(typeof(Modules.BrowsingContext.CloseCommand), TypeInfoPropertyName = "BrowsingContext_CloseCommand")] [JsonSerializable(typeof(Modules.BrowsingContext.CreateResult))] @@ -75,6 +78,7 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.BrowsingContext.PrintResult))] [JsonSerializable(typeof(Modules.BrowsingContext.UserPromptOpenedEventArgs))] [JsonSerializable(typeof(Modules.BrowsingContext.UserPromptClosedEventArgs))] +[JsonSerializable(typeof(Modules.BrowsingContext.Origin), TypeInfoPropertyName = "BrowsingContext_Origin")] [JsonSerializable(typeof(Modules.Network.BytesValue.String), TypeInfoPropertyName = "Network_BytesValue_String")] [JsonSerializable(typeof(Modules.Network.UrlPattern.String), TypeInfoPropertyName = "Network_UrlPattern_String")] @@ -90,10 +94,25 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.Script.AddPreloadScriptResult))] [JsonSerializable(typeof(Modules.Script.EvaluateResult))] [JsonSerializable(typeof(Modules.Script.GetRealmsResult))] +[JsonSerializable(typeof(Modules.Script.MessageEventArgs))] +[JsonSerializable(typeof(Modules.Script.RealmDestroyedEventArgs))] +[JsonSerializable(typeof(IReadOnlyList))] [JsonSerializable(typeof(Modules.Log.Entry))] [JsonSerializable(typeof(Modules.Storage.GetCookiesResult))] [JsonSerializable(typeof(Modules.Storage.DeleteCookiesResult))] [JsonSerializable(typeof(Modules.Storage.SetCookieResult))] + +[JsonSerializable(typeof(Modules.Input.PerformActionsCommand))] +[JsonSerializable(typeof(Modules.Input.Pointer.Down), TypeInfoPropertyName = "Input_Pointer_Down")] +[JsonSerializable(typeof(Modules.Input.Pointer.Up), TypeInfoPropertyName = "Input_Pointer_Up")] +[JsonSerializable(typeof(Modules.Input.Pointer.Move), TypeInfoPropertyName = "Input_Pointer_Move")] +[JsonSerializable(typeof(Modules.Input.Key.Down), TypeInfoPropertyName = "Input_Key_Down")] +[JsonSerializable(typeof(Modules.Input.Key.Up), TypeInfoPropertyName = "Input_Key_Up")] +[JsonSerializable(typeof(IEnumerable))] +[JsonSerializable(typeof(IEnumerable))] +[JsonSerializable(typeof(IEnumerable))] +[JsonSerializable(typeof(IEnumerable))] + internal partial class BiDiSerializerContext: JsonSerializerContext; From 921e78f27f9710927cfd4143529107c7310a6b67 Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Sun, 26 Jan 2025 20:25:55 +0300 Subject: [PATCH 4/7] Add file header --- .../Json/BiDiSerializerContext.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs index 9f22c3c7df39a..e8b61f58dfd29 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs @@ -1,3 +1,22 @@ +// +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + using System.Collections.Generic; using System.Text.Json.Serialization; From c2ce5cdd44cdc2d37478ca9d42a41043c8c9b053 Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Sun, 26 Jan 2025 20:39:58 +0300 Subject: [PATCH 5/7] Rename context --- dotnet/src/webdriver/BiDi/Communication/Broker.cs | 4 ++-- ...{BiDiSerializerContext.cs => BiDiJsonSerializerContext.cs} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename dotnet/src/webdriver/BiDi/Communication/Json/{BiDiSerializerContext.cs => BiDiJsonSerializerContext.cs} (98%) diff --git a/dotnet/src/webdriver/BiDi/Communication/Broker.cs b/dotnet/src/webdriver/BiDi/Communication/Broker.cs index 587a0d86cbc6c..8a6466c9f17e4 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Broker.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Broker.cs @@ -54,7 +54,7 @@ public class Broker : IAsyncDisposable private Task? _eventEmitterTask; private CancellationTokenSource? _receiveMessagesCancellationTokenSource; - private readonly BiDiSerializerContext _jsonSerializerContext; + private readonly BiDiJsonSerializerContext _jsonSerializerContext; internal Broker(BiDi bidi, ITransport transport) { @@ -101,7 +101,7 @@ internal Broker(BiDi bidi, ITransport transport) } }; - _jsonSerializerContext = new BiDiSerializerContext(jsonSerializerOptions); + _jsonSerializerContext = new BiDiJsonSerializerContext(jsonSerializerOptions); } public async Task ConnectAsync(CancellationToken cancellationToken) diff --git a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiJsonSerializerContext.cs similarity index 98% rename from dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs rename to dotnet/src/webdriver/BiDi/Communication/Json/BiDiJsonSerializerContext.cs index e8b61f58dfd29..202abb8a0e926 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiSerializerContext.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiJsonSerializerContext.cs @@ -1,4 +1,4 @@ -// +// // Licensed to the Software Freedom Conservancy (SFC) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -134,4 +134,4 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(IEnumerable))] [JsonSerializable(typeof(IEnumerable))] -internal partial class BiDiSerializerContext: JsonSerializerContext; +internal partial class BiDiJsonSerializerContext : JsonSerializerContext; From b545c2f48bf2099520affb337d5dff3562abfd5e Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Sun, 26 Jan 2025 21:19:58 +0300 Subject: [PATCH 6/7] Fix bazel build --- dotnet/src/webdriver/BUILD.bazel | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dotnet/src/webdriver/BUILD.bazel b/dotnet/src/webdriver/BUILD.bazel index afcdd0785bae4..2b410b83df650 100644 --- a/dotnet/src/webdriver/BUILD.bazel +++ b/dotnet/src/webdriver/BUILD.bazel @@ -55,6 +55,7 @@ csharp_library( framework("nuget", "Microsoft.Bcl.AsyncInterfaces"), framework("nuget", "System.Threading.Tasks.Extensions"), framework("nuget", "System.Memory"), + framework("nuget", "System.Runtime.CompilerServices.Unsafe"), framework("nuget", "System.Text.Encodings.Web"), framework("nuget", "System.Text.Json"), ], @@ -120,6 +121,7 @@ csharp_library( framework("nuget", "Microsoft.Bcl.AsyncInterfaces"), framework("nuget", "System.Threading.Tasks.Extensions"), framework("nuget", "System.Memory"), + framework("nuget", "System.Runtime.CompilerServices.Unsafe"), framework("nuget", "System.Text.Encodings.Web"), framework("nuget", "System.Text.Json"), ], From a3e723cf91f95badb8ece03ee55323f79eddad46 Mon Sep 17 00:00:00 2001 From: Nikolay Borisenko <22616990+nvborisenko@users.noreply.github.com> Date: Tue, 28 Jan 2025 22:28:23 +0300 Subject: [PATCH 7/7] More clear region --- .../Communication/Json/BiDiJsonSerializerContext.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiJsonSerializerContext.cs b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiJsonSerializerContext.cs index 202abb8a0e926..8d55b8c89c0c6 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Json/BiDiJsonSerializerContext.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Json/BiDiJsonSerializerContext.cs @@ -22,7 +22,7 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; -// https://github.com/dotnet/runtime/issues/72604 +#region https://github.com/dotnet/runtime/issues/72604 [JsonSerializable(typeof(MessageSuccess))] [JsonSerializable(typeof(MessageError))] [JsonSerializable(typeof(MessageEvent))] @@ -57,11 +57,6 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.Script.RemoteValue.Node))] [JsonSerializable(typeof(Modules.Script.RemoteValue.WindowProxy))] -[JsonSerializable(typeof(Modules.Script.LocalValue.String), TypeInfoPropertyName = "Script_LocalValue_String")] - -[JsonSerializable(typeof(Modules.Script.Target.Realm), TypeInfoPropertyName = "Script_Target_Realm")] -[JsonSerializable(typeof(Modules.Script.Target.Context), TypeInfoPropertyName = "Script_Target_Context")] - [JsonSerializable(typeof(Modules.Script.RealmInfo.Window))] [JsonSerializable(typeof(Modules.Script.RealmInfo.DedicatedWorker))] [JsonSerializable(typeof(Modules.Script.RealmInfo.SharedWorker))] @@ -73,7 +68,7 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.Log.Entry.Console))] [JsonSerializable(typeof(Modules.Log.Entry.Javascript))] -// +#endregion [JsonSerializable(typeof(Command))] [JsonSerializable(typeof(Message))] @@ -110,6 +105,9 @@ namespace OpenQA.Selenium.BiDi.Communication.Json; [JsonSerializable(typeof(Modules.Network.AuthRequiredEventArgs))] [JsonSerializable(typeof(Modules.Script.Channel), TypeInfoPropertyName = "Script_Channel")] +[JsonSerializable(typeof(Modules.Script.LocalValue.String), TypeInfoPropertyName = "Script_LocalValue_String")] +[JsonSerializable(typeof(Modules.Script.Target.Realm), TypeInfoPropertyName = "Script_Target_Realm")] +[JsonSerializable(typeof(Modules.Script.Target.Context), TypeInfoPropertyName = "Script_Target_Context")] [JsonSerializable(typeof(Modules.Script.AddPreloadScriptResult))] [JsonSerializable(typeof(Modules.Script.EvaluateResult))] [JsonSerializable(typeof(Modules.Script.GetRealmsResult))]