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,14 +17,16 @@
// under the License.
// </copyright>

using System.Threading.Tasks;
using OpenQA.Selenium.BiDi.Script;
using OpenQA.Selenium.Internal;
using System.Diagnostics.CodeAnalysis;
using System.Threading.Tasks;

namespace OpenQA.Selenium.BiDi.BrowsingContext;

public sealed class BrowsingContextScriptModule(BrowsingContext context, ScriptModule scriptModule)
{
public async Task<AddPreloadScriptResult> AddPreloadScriptAsync(string functionDeclaration, BrowsingContextAddPreloadScriptOptions? options = null)
public async Task<AddPreloadScriptResult> AddPreloadScriptAsync([StringSyntax(StringSyntaxConstants.JavaScript)] string functionDeclaration, BrowsingContextAddPreloadScriptOptions? options = null)
{
AddPreloadScriptOptions addPreloadScriptOptions = new(options)
{
Expand All @@ -43,7 +45,7 @@ public async Task<GetRealmsResult> GetRealmsAsync(GetRealmsOptions? options = nu
return await scriptModule.GetRealmsAsync(options).ConfigureAwait(false);
}

public Task<EvaluateResult> EvaluateAsync(string expression, bool awaitPromise, EvaluateOptions? options = null, ContextTargetOptions? targetOptions = null)
public Task<EvaluateResult> EvaluateAsync([StringSyntax(StringSyntaxConstants.JavaScript)] string expression, bool awaitPromise, EvaluateOptions? options = null, ContextTargetOptions? targetOptions = null)
{
var contextTarget = new ContextTarget(context);

Expand All @@ -55,14 +57,14 @@ public Task<EvaluateResult> EvaluateAsync(string expression, bool awaitPromise,
return scriptModule.EvaluateAsync(expression, awaitPromise, contextTarget, options);
}

public async Task<TResult?> EvaluateAsync<TResult>(string expression, bool awaitPromise, EvaluateOptions? options = null, ContextTargetOptions? targetOptions = null)
public async Task<TResult?> EvaluateAsync<TResult>([StringSyntax(StringSyntaxConstants.JavaScript)] string expression, bool awaitPromise, EvaluateOptions? options = null, ContextTargetOptions? targetOptions = null)
{
var result = await EvaluateAsync(expression, awaitPromise, options, targetOptions).ConfigureAwait(false);

return result.AsSuccessResult().ConvertTo<TResult>();
}

public Task<EvaluateResult> CallFunctionAsync(string functionDeclaration, bool awaitPromise, CallFunctionOptions? options = null, ContextTargetOptions? targetOptions = null)
public Task<EvaluateResult> CallFunctionAsync([StringSyntax(StringSyntaxConstants.JavaScript)] string functionDeclaration, bool awaitPromise, CallFunctionOptions? options = null, ContextTargetOptions? targetOptions = null)
{
var contextTarget = new ContextTarget(context);

Expand All @@ -74,7 +76,7 @@ public Task<EvaluateResult> CallFunctionAsync(string functionDeclaration, bool a
return scriptModule.CallFunctionAsync(functionDeclaration, awaitPromise, contextTarget, options);
}

public async Task<TResult?> CallFunctionAsync<TResult>(string functionDeclaration, bool awaitPromise, CallFunctionOptions? options = null, ContextTargetOptions? targetOptions = null)
public async Task<TResult?> CallFunctionAsync<TResult>([StringSyntax(StringSyntaxConstants.JavaScript)] string functionDeclaration, bool awaitPromise, CallFunctionOptions? options = null, ContextTargetOptions? targetOptions = null)
{
var result = await CallFunctionAsync(functionDeclaration, awaitPromise, options, targetOptions).ConfigureAwait(false);

Expand Down
4 changes: 3 additions & 1 deletion dotnet/src/webdriver/BiDi/Script/AddPreloadScriptCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,16 @@
// under the License.
// </copyright>

using OpenQA.Selenium.Internal;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;

namespace OpenQA.Selenium.BiDi.Script;

internal sealed class AddPreloadScriptCommand(AddPreloadScriptParameters @params)
: Command<AddPreloadScriptParameters, AddPreloadScriptResult>(@params, "script.addPreloadScript");

internal sealed record AddPreloadScriptParameters(string FunctionDeclaration, IEnumerable<ChannelLocalValue>? Arguments, IEnumerable<BrowsingContext.BrowsingContext>? Contexts, string? Sandbox) : Parameters;
internal sealed record AddPreloadScriptParameters([StringSyntax(StringSyntaxConstants.JavaScript)] string FunctionDeclaration, IEnumerable<ChannelLocalValue>? Arguments, IEnumerable<BrowsingContext.BrowsingContext>? Contexts, string? Sandbox) : Parameters;

public sealed class AddPreloadScriptOptions : CommandOptions
{
Expand Down
4 changes: 3 additions & 1 deletion dotnet/src/webdriver/BiDi/Script/CallFunctionCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,16 @@
// under the License.
// </copyright>

using OpenQA.Selenium.Internal;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;

namespace OpenQA.Selenium.BiDi.Script;

internal sealed class CallFunctionCommand(CallFunctionParameters @params)
: Command<CallFunctionParameters, EvaluateResult>(@params, "script.callFunction");

internal sealed record CallFunctionParameters(string FunctionDeclaration, bool AwaitPromise, Target Target, IEnumerable<LocalValue>? Arguments, ResultOwnership? ResultOwnership, SerializationOptions? SerializationOptions, LocalValue? This, bool? UserActivation) : Parameters;
internal sealed record CallFunctionParameters([StringSyntax(StringSyntaxConstants.JavaScript)] string FunctionDeclaration, bool AwaitPromise, Target Target, IEnumerable<LocalValue>? Arguments, ResultOwnership? ResultOwnership, SerializationOptions? SerializationOptions, LocalValue? This, bool? UserActivation) : Parameters;

public sealed class CallFunctionOptions : CommandOptions
{
Expand Down
4 changes: 3 additions & 1 deletion dotnet/src/webdriver/BiDi/Script/EvaluateCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,17 @@
// </copyright>

using OpenQA.Selenium.BiDi.Json.Converters.Polymorphic;
using OpenQA.Selenium.Internal;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;

namespace OpenQA.Selenium.BiDi.Script;

internal sealed class EvaluateCommand(EvaluateParameters @params)
: Command<EvaluateParameters, EvaluateResult>(@params, "script.evaluate");

internal sealed record EvaluateParameters(string Expression, Target Target, bool AwaitPromise, ResultOwnership? ResultOwnership, SerializationOptions? SerializationOptions, bool? UserActivation) : Parameters;
internal sealed record EvaluateParameters([StringSyntax(StringSyntaxConstants.JavaScript)] string Expression, Target Target, bool AwaitPromise, ResultOwnership? ResultOwnership, SerializationOptions? SerializationOptions, bool? UserActivation) : Parameters;

public sealed class EvaluateOptions : CommandOptions
{
Expand Down
11 changes: 6 additions & 5 deletions dotnet/src/webdriver/BiDi/Script/ScriptModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
Expand All @@ -29,28 +30,28 @@ public sealed class ScriptModule : Module
{
private ScriptJsonSerializerContext _jsonContext = null!;

public async Task<EvaluateResult> EvaluateAsync(string expression, bool awaitPromise, Target target, EvaluateOptions? options = null)
public async Task<EvaluateResult> EvaluateAsync([StringSyntax(StringSyntaxConstants.JavaScript)] string expression, bool awaitPromise, Target target, EvaluateOptions? options = null)
{
var @params = new EvaluateParameters(expression, target, awaitPromise, options?.ResultOwnership, options?.SerializationOptions, options?.UserActivation);

return await Broker.ExecuteCommandAsync(new EvaluateCommand(@params), options, _jsonContext.EvaluateCommand, _jsonContext.EvaluateResult).ConfigureAwait(false);
}

public async Task<TResult?> EvaluateAsync<TResult>(string expression, bool awaitPromise, Target target, EvaluateOptions? options = null)
public async Task<TResult?> EvaluateAsync<TResult>([StringSyntax(StringSyntaxConstants.JavaScript)] string expression, bool awaitPromise, Target target, EvaluateOptions? options = null)
{
var result = await EvaluateAsync(expression, awaitPromise, target, options).ConfigureAwait(false);

return result.AsSuccessResult().ConvertTo<TResult>();
}

public async Task<EvaluateResult> CallFunctionAsync(string functionDeclaration, bool awaitPromise, Target target, CallFunctionOptions? options = null)
public async Task<EvaluateResult> CallFunctionAsync([StringSyntax(StringSyntaxConstants.JavaScript)] string functionDeclaration, bool awaitPromise, Target target, CallFunctionOptions? options = null)
{
var @params = new CallFunctionParameters(functionDeclaration, awaitPromise, target, options?.Arguments, options?.ResultOwnership, options?.SerializationOptions, options?.This, options?.UserActivation);

return await Broker.ExecuteCommandAsync(new CallFunctionCommand(@params), options, _jsonContext.CallFunctionCommand, _jsonContext.EvaluateResult).ConfigureAwait(false);
}

public async Task<TResult?> CallFunctionAsync<TResult>(string functionDeclaration, bool awaitPromise, Target target, CallFunctionOptions? options = null)
public async Task<TResult?> CallFunctionAsync<TResult>([StringSyntax(StringSyntaxConstants.JavaScript)] string functionDeclaration, bool awaitPromise, Target target, CallFunctionOptions? options = null)
{
var result = await CallFunctionAsync(functionDeclaration, awaitPromise, target, options).ConfigureAwait(false);

Expand All @@ -71,7 +72,7 @@ public async Task<GetRealmsResult> GetRealmsAsync(GetRealmsOptions? options = nu
return await Broker.ExecuteCommandAsync(new GetRealmsCommand(@params), options, _jsonContext.GetRealmsCommand, _jsonContext.GetRealmsResult).ConfigureAwait(false);
}

public async Task<AddPreloadScriptResult> AddPreloadScriptAsync(string functionDeclaration, AddPreloadScriptOptions? options = null)
public async Task<AddPreloadScriptResult> AddPreloadScriptAsync([StringSyntax(StringSyntaxConstants.JavaScript)] string functionDeclaration, AddPreloadScriptOptions? options = null)
{
var @params = new AddPreloadScriptParameters(functionDeclaration, options?.Arguments, options?.Contexts, options?.Sandbox);

Expand Down