diff --git a/dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs b/dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs index a5805a9a6f33b..50d2f2c2ac58f 100644 --- a/dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs +++ b/dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs @@ -21,28 +21,26 @@ namespace OpenQA.Selenium.BiDi.Network; -[JsonPolymorphic(TypeDiscriminatorPropertyName = "action")] -[JsonDerivedType(typeof(ContinueWithAuthCredentials), "provideCredentials")] -[JsonDerivedType(typeof(ContinueWithAuthDefaultCredentials), "default")] -[JsonDerivedType(typeof(ContinueWithAuthCancelCredentials), "cancel")] -internal abstract record ContinueWithAuthParameters(Request Request) : Parameters; - -internal sealed record ContinueWithAuthCredentials(Request Request, AuthCredentials Credentials) : ContinueWithAuthParameters(Request); +public abstract record ContinueWithAuth; -internal abstract record ContinueWithAuthNoCredentials(Request Request) : ContinueWithAuthParameters(Request); +public sealed record ContinueWithAuthCredentials(AuthCredentials Credentials) : ContinueWithAuth; -internal sealed record ContinueWithAuthDefaultCredentials(Request Request) : ContinueWithAuthNoCredentials(Request); +public sealed record ContinueWithAuthDefault : ContinueWithAuth; -internal sealed record ContinueWithAuthCancelCredentials(Request Request) : ContinueWithAuthNoCredentials(Request); +public sealed record ContinueWithAuthCancel : ContinueWithAuth; -public abstract record ContinueWithAuthOptions : CommandOptions; +[JsonPolymorphic(TypeDiscriminatorPropertyName = "action")] +[JsonDerivedType(typeof(ContinueWithAuthCredentialsParameters), "provideCredentials")] +[JsonDerivedType(typeof(ContinueWithAuthDefaultParameters), "default")] +[JsonDerivedType(typeof(ContinueWithAuthCancelParameters), "cancel")] +internal abstract record ContinueWithAuthParameters(Request Request) : Parameters; -public sealed record ContinueWithAuthCredentialsOptions : ContinueWithAuthOptions; +internal sealed record ContinueWithAuthCredentialsParameters(Request Request, AuthCredentials Credentials) : ContinueWithAuthParameters(Request); -public abstract record ContinueWithAuthNoCredentialsOptions : ContinueWithAuthOptions; +internal sealed record ContinueWithAuthDefaultParameters(Request Request) : ContinueWithAuthParameters(Request); -public sealed record ContinueWithAuthDefaultCredentialsOptions : ContinueWithAuthNoCredentialsOptions; +internal sealed record ContinueWithAuthCancelParameters(Request Request) : ContinueWithAuthParameters(Request); -public sealed record ContinueWithAuthCancelCredentialsOptions : ContinueWithAuthNoCredentialsOptions; +public sealed record ContinueWithAuthOptions : CommandOptions; public sealed record ContinueWithAuthResult : EmptyResult; diff --git a/dotnet/src/webdriver/BiDi/Network/INetworkModule.cs b/dotnet/src/webdriver/BiDi/Network/INetworkModule.cs index ec8b45fb947ee..4d23a57e3197a 100644 --- a/dotnet/src/webdriver/BiDi/Network/INetworkModule.cs +++ b/dotnet/src/webdriver/BiDi/Network/INetworkModule.cs @@ -25,9 +25,7 @@ public interface INetworkModule Task AddInterceptAsync(IEnumerable phases, AddInterceptOptions? options = null, CancellationToken cancellationToken = default); Task ContinueRequestAsync(Request request, ContinueRequestOptions? options = null, CancellationToken cancellationToken = default); Task ContinueResponseAsync(Request request, ContinueResponseOptions? options = null, CancellationToken cancellationToken = default); - Task ContinueWithAuthAsync(Request request, AuthCredentials credentials, ContinueWithAuthCredentialsOptions? options = null, CancellationToken cancellationToken = default); - Task ContinueWithAuthAsync(Request request, ContinueWithAuthDefaultCredentialsOptions? options = null, CancellationToken cancellationToken = default); - Task ContinueWithAuthAsync(Request request, ContinueWithAuthCancelCredentialsOptions? options = null, CancellationToken cancellationToken = default); + Task ContinueWithAuthAsync(Request request, ContinueWithAuth auth, ContinueWithAuthOptions? options = null, CancellationToken cancellationToken = default); Task FailRequestAsync(Request request, FailRequestOptions? options = null, CancellationToken cancellationToken = default); Task GetDataAsync(DataType dataType, Request request, GetDataOptions? options = null, CancellationToken cancellationToken = default); Task OnAuthRequiredAsync(Func handler, SubscriptionOptions? options = null, CancellationToken cancellationToken = default); diff --git a/dotnet/src/webdriver/BiDi/Network/NetworkModule.cs b/dotnet/src/webdriver/BiDi/Network/NetworkModule.cs index b74bfb3510736..536c8df8dafec 100644 --- a/dotnet/src/webdriver/BiDi/Network/NetworkModule.cs +++ b/dotnet/src/webdriver/BiDi/Network/NetworkModule.cs @@ -165,19 +165,17 @@ public async Task ProvideResponseAsync(Request request, P return await ExecuteAsync(ProvideResponseCommand, @params, options, cancellationToken).ConfigureAwait(false); } - public async Task ContinueWithAuthAsync(Request request, AuthCredentials credentials, ContinueWithAuthCredentialsOptions? options = null, CancellationToken cancellationToken = default) + public async Task ContinueWithAuthAsync(Request request, ContinueWithAuth auth, ContinueWithAuthOptions? options = null, CancellationToken cancellationToken = default) { - return await ExecuteAsync(ContinueWithAuthCommand, new ContinueWithAuthCredentials(request, credentials), options, cancellationToken).ConfigureAwait(false); - } - - public async Task ContinueWithAuthAsync(Request request, ContinueWithAuthDefaultCredentialsOptions? options = null, CancellationToken cancellationToken = default) - { - return await ExecuteAsync(ContinueWithAuthCommand, new ContinueWithAuthDefaultCredentials(request), options, cancellationToken).ConfigureAwait(false); - } - - public async Task ContinueWithAuthAsync(Request request, ContinueWithAuthCancelCredentialsOptions? options = null, CancellationToken cancellationToken = default) - { - return await ExecuteAsync(ContinueWithAuthCommand, new ContinueWithAuthCancelCredentials(request), options, cancellationToken).ConfigureAwait(false); + ContinueWithAuthParameters @params = auth switch + { + ContinueWithAuthCredentials c => new ContinueWithAuthCredentialsParameters(request, c.Credentials), + ContinueWithAuthDefault => new ContinueWithAuthDefaultParameters(request), + ContinueWithAuthCancel => new ContinueWithAuthCancelParameters(request), + _ => throw new ArgumentException($"Unknown action type: {auth.GetType()}", nameof(auth)) + }; + + return await ExecuteAsync(ContinueWithAuthCommand, @params, options, cancellationToken).ConfigureAwait(false); } public async Task OnBeforeRequestSentAsync(Func handler, SubscriptionOptions? options = null, CancellationToken cancellationToken = default) diff --git a/dotnet/test/webdriver/BiDi/Network/NetworkTests.cs b/dotnet/test/webdriver/BiDi/Network/NetworkTests.cs index f5185224fef8d..487574a53c115 100644 --- a/dotnet/test/webdriver/BiDi/Network/NetworkTests.cs +++ b/dotnet/test/webdriver/BiDi/Network/NetworkTests.cs @@ -198,7 +198,7 @@ await bidi.Network.OnAuthRequiredAsync(async e => { if (e.IsBlocked && e.Intercepts?.Contains(result.Intercept) == true) { - await bidi.Network.ContinueWithAuthAsync(e.Request.Request, new AuthCredentials("test", "test")); + await bidi.Network.ContinueWithAuthAsync(e.Request.Request, new ContinueWithAuthCredentials(new AuthCredentials("test", "test"))); } }); @@ -217,7 +217,7 @@ await bidi.Network.OnAuthRequiredAsync(async e => { if (e.IsBlocked && e.Intercepts?.Contains(result.Intercept) == true) { - await bidi.Network.ContinueWithAuthAsync(e.Request.Request, new ContinueWithAuthDefaultCredentialsOptions()); + await bidi.Network.ContinueWithAuthAsync(e.Request.Request, new ContinueWithAuthDefault()); } }); @@ -236,7 +236,7 @@ await bidi.Network.OnAuthRequiredAsync(async e => { if (e.IsBlocked && e.Intercepts?.Contains(result.Intercept) == true) { - await bidi.Network.ContinueWithAuthAsync(e.Request.Request, new ContinueWithAuthCancelCredentialsOptions()); + await bidi.Network.ContinueWithAuthAsync(e.Request.Request, new ContinueWithAuthCancel()); } });