XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
namespace XFESystem.Browser;

public sealed record BrowserLimits
{
    public int MaximumHtmlCharacters { get; init; } = 1_048_576;
    public int MaximumScriptCharacters { get; init; } = 131_072;
    public int MaximumScripts { get; init; } = 32;
    public int MaximumExternalResourceCharacters { get; init; } = 8_388_608;
    public int MaximumTotalResourceCharacters { get; init; } = 33_554_432;
    public int MaximumExternalResources { get; init; } = 128;
    public int MaximumStyleCharacters { get; init; } = 2_097_152;
    public int MaximumStyleSheets { get; init; } = 32;
    public int MaximumPendingTasks { get; init; } = 1_024;
    public int MaximumEventCallbacksPerPump { get; init; } = 64;
    public int MaximumDomNodes { get; init; } = 20_000;
    public int MaximumDomDepth { get; init; } = 256;
    public int MaximumOutputCharacters { get; init; } = 65_536;
    public int MaximumStatements { get; init; } = 100_000;
    public long MaximumScriptMemoryBytes { get; init; } = 16_000_000;
    public int MaximumRecursionDepth { get; init; } = 64;
    public TimeSpan ScriptTimeout { get; init; } = TimeSpan.FromMilliseconds(500);
    public TimeSpan NetworkTimeout { get; init; } = TimeSpan.FromSeconds(15);
    public int MaximumRedirects { get; init; } = 5;

    internal void Validate()
    {
        if (MaximumHtmlCharacters is < 1 or > 8_388_608 || MaximumScriptCharacters is < 1 or > 8_388_608 ||
            MaximumScripts is < 1 or > 256 || MaximumDomNodes is < 1 or > 100_000 ||
            MaximumDomDepth is < 1 or > 512 || MaximumOutputCharacters is < 1 or > 1_048_576 ||
            MaximumStatements is < 1 or > 100_000_000 || MaximumScriptMemoryBytes is < 100_000 or > 536_870_912 ||
            MaximumRecursionDepth is < 1 or > 256 || ScriptTimeout <= TimeSpan.Zero ||
            ScriptTimeout > TimeSpan.FromSeconds(60) || NetworkTimeout <= TimeSpan.Zero ||
            NetworkTimeout > TimeSpan.FromMinutes(2) || MaximumRedirects is < 0 or > 10 ||
            MaximumExternalResourceCharacters is < 1 or > 16_777_216 || MaximumTotalResourceCharacters is < 1 or > 67_108_864 ||
            MaximumExternalResources is < 1 or > 512 || MaximumStyleCharacters is < 1 or > 8_388_608 ||
            MaximumStyleSheets is < 1 or > 128 || MaximumPendingTasks is < 1 or > 8_192 ||
            MaximumEventCallbacksPerPump is < 1 or > 1_024)
            throw new ArgumentOutOfRangeException(nameof(BrowserLimits), "Browser limits are outside the supported range.");
    }
}

public sealed class BrowserLimitException(string message) : Exception(message);