Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
// under the License.
// </copyright>

using OpenQA.Selenium.BiDi.Communication.Json.Internal;
using OpenQA.Selenium.BiDi.Modules.Browser;
using System;
using System.Collections.Generic;
Expand All @@ -30,7 +31,7 @@ internal class GetClientWindowsResultConverter : JsonConverter<GetClientWindowsR
public override GetClientWindowsResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using var doc = JsonDocument.ParseValue(ref reader);
var clientWindows = doc.RootElement.GetProperty("clientWindows").Deserialize<IReadOnlyList<ClientWindowInfo>>(options);
var clientWindows = doc.RootElement.GetProperty("clientWindows").Deserialize(options.GetTypeInfo<IReadOnlyList<ClientWindowInfo>>());

return new GetClientWindowsResult(clientWindows!);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@
// under the License.
// </copyright>

using OpenQA.Selenium.BiDi.Communication.Json.Internal;
using OpenQA.Selenium.BiDi.Modules.Storage;
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;

namespace OpenQA.Selenium.BiDi.Communication.Json.Converters.Enumerable;

Expand All @@ -30,8 +32,8 @@ internal class GetCookiesResultConverter : JsonConverter<GetCookiesResult>
public override GetCookiesResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using var doc = JsonDocument.ParseValue(ref reader);
var cookies = doc.RootElement.GetProperty("cookies").Deserialize<IReadOnlyList<Modules.Network.Cookie>>(options);
var partitionKey = doc.RootElement.GetProperty("partitionKey").Deserialize<PartitionKey>(options);
var cookies = doc.RootElement.GetProperty("cookies").Deserialize(options.GetTypeInfo<IReadOnlyList<Modules.Network.Cookie>>());
var partitionKey = doc.RootElement.GetProperty("partitionKey").Deserialize((JsonTypeInfo<PartitionKey>)options.GetTypeInfo(typeof(PartitionKey)));

return new GetCookiesResult(cookies!, partitionKey!);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
// under the License.
// </copyright>

using OpenQA.Selenium.BiDi.Communication.Json.Internal;
using OpenQA.Selenium.BiDi.Modules.Script;
using System;
using System.Collections.Generic;
Expand All @@ -30,7 +31,7 @@ internal class GetRealmsResultConverter : JsonConverter<GetRealmsResult>
public override GetRealmsResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using var doc = JsonDocument.ParseValue(ref reader);
var realms = doc.RootElement.GetProperty("realms").Deserialize<IReadOnlyList<RealmInfo>>(options);
var realms = doc.RootElement.GetProperty("realms").Deserialize(options.GetTypeInfo<IReadOnlyList<RealmInfo>>());

return new GetRealmsResult(realms!);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
// under the License.
// </copyright>

using OpenQA.Selenium.BiDi.Communication.Json.Internal;
using OpenQA.Selenium.BiDi.Modules.Browser;
using System;
using System.Collections.Generic;
Expand All @@ -30,7 +31,7 @@ internal class GetUserContextsResultConverter : JsonConverter<GetUserContextsRes
public override GetUserContextsResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using var doc = JsonDocument.ParseValue(ref reader);
var userContexts = doc.RootElement.GetProperty("userContexts").Deserialize<IReadOnlyList<UserContextInfo>>(options);
var userContexts = doc.RootElement.GetProperty("userContexts").Deserialize(options.GetTypeInfo<IReadOnlyList<UserContextInfo>>());

return new GetUserContextsResult(userContexts!);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,10 @@
// under the License.
// </copyright>

using OpenQA.Selenium.BiDi.Communication.Json.Internal;
using OpenQA.Selenium.BiDi.Modules.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json;
using System.Text.Json.Serialization;
Expand All @@ -43,31 +45,31 @@ public override void Write(Utf8JsonWriter writer, SourceActions value, JsonSeria
case KeyActions keys:
writer.WriteString("type", "key");
writer.WritePropertyName("actions");
JsonSerializer.Serialize(writer, keys.Actions.Select(a => a as IKeySourceAction), options);
JsonSerializer.Serialize(writer, keys.Actions.Select(a => a as IKeySourceAction), options.GetTypeInfo<IEnumerable<IKeySourceAction?>>());

break;
case PointerActions pointers:
writer.WriteString("type", "pointer");
if (pointers.Options is not null)
{
writer.WritePropertyName("parameters");
JsonSerializer.Serialize(writer, pointers.Options, options);
JsonSerializer.Serialize(writer, pointers.Options, options.GetTypeInfo(typeof(PointerParameters)));
}

writer.WritePropertyName("actions");
JsonSerializer.Serialize(writer, pointers.Actions.Select(a => a as IPointerSourceAction), options);
JsonSerializer.Serialize(writer, pointers.Actions.Select(a => a as IPointerSourceAction), options.GetTypeInfo<IEnumerable<IPointerSourceAction?>>());

break;
case WheelActions wheels:
writer.WriteString("type", "wheel");
writer.WritePropertyName("actions");
JsonSerializer.Serialize(writer, wheels.Actions.Select(a => a as IWheelSourceAction), options);
JsonSerializer.Serialize(writer, wheels.Actions.Select(a => a as IWheelSourceAction), options.GetTypeInfo<IEnumerable<IWheelSourceAction?>>());

break;
case NoneActions none:
writer.WriteString("type", "none");
writer.WritePropertyName("actions");
JsonSerializer.Serialize(writer, none.Actions.Select(a => a as INoneSourceAction), options);
JsonSerializer.Serialize(writer, none.Actions.Select(a => a as INoneSourceAction), options.GetTypeInfo<IEnumerable<INoneSourceAction?>>());

break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
// under the License.
// </copyright>

using OpenQA.Selenium.BiDi.Communication.Json.Internal;
using OpenQA.Selenium.BiDi.Modules.BrowsingContext;
using OpenQA.Selenium.BiDi.Modules.Script;
using System;
Expand All @@ -31,7 +32,7 @@ internal class LocateNodesResultConverter : JsonConverter<LocateNodesResult>
public override LocateNodesResult Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
using var doc = JsonDocument.ParseValue(ref reader);
var nodes = doc.RootElement.GetProperty("nodes").Deserialize<IReadOnlyList<NodeRemoteValue>>(options);
var nodes = doc.RootElement.GetProperty("nodes").Deserialize(options.GetTypeInfo<IReadOnlyList<NodeRemoteValue>>());

return new LocateNodesResult(nodes!);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@

using OpenQA.Selenium.BiDi.Modules.Input;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace OpenQA.Selenium.BiDi.Communication.Json.Converters;

[UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "Json serializer options should have AOT-safe type resolution")]
[UnconditionalSuppressMessage("AOT", "IL3050", Justification = "Json serializer options should have AOT-safe type resolution")]
internal class InputOriginConverter : JsonConverter<Origin>
{
public override Origin Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ internal class EvaluateResultConverter : JsonConverter<EvaluateResult>
{
return reader.GetDiscriminator("type") switch
{
"success" => JsonSerializer.Deserialize<EvaluateResultSuccess>(ref reader, options),
"exception" => JsonSerializer.Deserialize<EvaluateResultException>(ref reader, options),
"success" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<EvaluateResultSuccess>()),
"exception" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<EvaluateResultException>()),
_ => null,
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ internal class LogEntryConverter : JsonConverter<Modules.Log.LogEntry>
{
return reader.GetDiscriminator("type") switch
{
"console" => JsonSerializer.Deserialize<ConsoleLogEntry>(ref reader, options),
"javascript" => JsonSerializer.Deserialize<JavascriptLogEntry>(ref reader, options),
"console" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ConsoleLogEntry>()),
"javascript" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<JavascriptLogEntry>()),
_ => null,
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@ internal class RealmInfoConverter : JsonConverter<RealmInfo>
{
return reader.GetDiscriminator("type") switch
{
"window" => JsonSerializer.Deserialize<WindowRealmInfo>(ref reader, options),
"dedicated-worker" => JsonSerializer.Deserialize<DedicatedWorkerRealmInfo>(ref reader, options),
"shared-worker" => JsonSerializer.Deserialize<SharedWorkerRealmInfo>(ref reader, options),
"service-worker" => JsonSerializer.Deserialize<ServiceWorkerRealmInfo>(ref reader, options),
"worker" => JsonSerializer.Deserialize<WorkerRealmInfo>(ref reader, options),
"paint-worklet" => JsonSerializer.Deserialize<PaintWorkletRealmInfo>(ref reader, options),
"audio-worklet" => JsonSerializer.Deserialize<AudioWorkletRealmInfo>(ref reader, options),
"worklet" => JsonSerializer.Deserialize<WorkletRealmInfo>(ref reader, options),
"window" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WindowRealmInfo>()),
"dedicated-worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<DedicatedWorkerRealmInfo>()),
"shared-worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<SharedWorkerRealmInfo>()),
"service-worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ServiceWorkerRealmInfo>()),
"worker" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WorkerRealmInfo>()),
"paint-worklet" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<PaintWorkletRealmInfo>()),
"audio-worklet" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<AudioWorkletRealmInfo>()),
"worklet" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WorkletRealmInfo>()),
_ => null,
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,32 +37,32 @@ internal class RemoteValueConverter : JsonConverter<RemoteValue>

return reader.GetDiscriminator("type") switch
{
"number" => JsonSerializer.Deserialize<NumberRemoteValue>(ref reader, options),
"boolean" => JsonSerializer.Deserialize<BooleanRemoteValue>(ref reader, options),
"bigint" => JsonSerializer.Deserialize<BigIntRemoteValue>(ref reader, options),
"string" => JsonSerializer.Deserialize<StringRemoteValue>(ref reader, options),
"null" => JsonSerializer.Deserialize<NullRemoteValue>(ref reader, options),
"undefined" => JsonSerializer.Deserialize<UndefinedRemoteValue>(ref reader, options),
"symbol" => JsonSerializer.Deserialize<SymbolRemoteValue>(ref reader, options),
"array" => JsonSerializer.Deserialize<ArrayRemoteValue>(ref reader, options),
"object" => JsonSerializer.Deserialize<ObjectRemoteValue>(ref reader, options),
"function" => JsonSerializer.Deserialize<FunctionRemoteValue>(ref reader, options),
"regexp" => JsonSerializer.Deserialize<RegExpRemoteValue>(ref reader, options),
"date" => JsonSerializer.Deserialize<DateRemoteValue>(ref reader, options),
"map" => JsonSerializer.Deserialize<MapRemoteValue>(ref reader, options),
"set" => JsonSerializer.Deserialize<SetRemoteValue>(ref reader, options),
"weakmap" => JsonSerializer.Deserialize<WeakMapRemoteValue>(ref reader, options),
"weakset" => JsonSerializer.Deserialize<WeakSetRemoteValue>(ref reader, options),
"generator" => JsonSerializer.Deserialize<GeneratorRemoteValue>(ref reader, options),
"error" => JsonSerializer.Deserialize<ErrorRemoteValue>(ref reader, options),
"proxy" => JsonSerializer.Deserialize<ProxyRemoteValue>(ref reader, options),
"promise" => JsonSerializer.Deserialize<PromiseRemoteValue>(ref reader, options),
"typedarray" => JsonSerializer.Deserialize<TypedArrayRemoteValue>(ref reader, options),
"arraybuffer" => JsonSerializer.Deserialize<ArrayBufferRemoteValue>(ref reader, options),
"nodelist" => JsonSerializer.Deserialize<NodeListRemoteValue>(ref reader, options),
"htmlcollection" => JsonSerializer.Deserialize<HtmlCollectionRemoteValue>(ref reader, options),
"node" => JsonSerializer.Deserialize<NodeRemoteValue>(ref reader, options),
"window" => JsonSerializer.Deserialize<WindowProxyRemoteValue>(ref reader, options),
"number" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<NumberRemoteValue>()),
"boolean" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<BooleanRemoteValue>()),
"bigint" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<BigIntRemoteValue>()),
"string" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<StringRemoteValue>()),
"null" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<NullRemoteValue>()),
"undefined" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<UndefinedRemoteValue>()),
"symbol" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<SymbolRemoteValue>()),
"array" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ArrayRemoteValue>()),
"object" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ObjectRemoteValue>()),
"function" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<FunctionRemoteValue>()),
"regexp" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<RegExpRemoteValue>()),
"date" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<DateRemoteValue>()),
"map" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<MapRemoteValue>()),
"set" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<SetRemoteValue>()),
"weakmap" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WeakMapRemoteValue>()),
"weakset" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WeakSetRemoteValue>()),
"generator" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<GeneratorRemoteValue>()),
"error" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ErrorRemoteValue>()),
"proxy" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ProxyRemoteValue>()),
"promise" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<PromiseRemoteValue>()),
"typedarray" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<TypedArrayRemoteValue>()),
"arraybuffer" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<ArrayBufferRemoteValue>()),
"nodelist" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<NodeListRemoteValue>()),
"htmlcollection" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<HtmlCollectionRemoteValue>()),
"node" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<NodeRemoteValue>()),
"window" => JsonSerializer.Deserialize(ref reader, options.GetTypeInfo<WindowProxyRemoteValue>()),
_ => null,
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
// </copyright>

using System.Text.Json;
using System.Text.Json.Serialization.Metadata;

namespace OpenQA.Selenium.BiDi.Communication.Json.Internal;

Expand Down Expand Up @@ -51,4 +52,9 @@ public static string GetDiscriminator(this ref Utf8JsonReader reader, string nam

return discriminator ?? throw new JsonException($"Couldn't determine '{name}' discriminator.");
}

public static JsonTypeInfo<T> GetTypeInfo<T>(this JsonSerializerOptions options)
{
return (JsonTypeInfo<T>)options.GetTypeInfo(typeof(T));
}
}