AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.10" />

 MediaRequestProcessor<TMediaInfo>

sealed class MediaRequestProcessor<TMediaInfo> : ResourceRequestProcessor<TMediaInfo> where TMediaInfo : IMediaInfo
See the following link for more infos: https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-load
using AngleSharp.Dom; using AngleSharp.Dom.Media; using AngleSharp.Services; using AngleSharp.Services.Media; using System.Threading; using System.Threading.Tasks; namespace AngleSharp.Network.RequestProcessors { internal sealed class MediaRequestProcessor<TMediaInfo> : ResourceRequestProcessor<TMediaInfo> where TMediaInfo : IMediaInfo { public TMediaInfo Media { get; set; } public MediaNetworkState NetworkState { get { IDownload download = base.Download; if (download != null) { if (download.IsRunning) return MediaNetworkState.Loading; if (base.Resource == null) return MediaNetworkState.NoSource; } return MediaNetworkState.Idle; } } private MediaRequestProcessor(IConfiguration options, IResourceLoader loader) : base(options, loader) { } internal static MediaRequestProcessor<TMediaInfo> Create(Element element) { Document owner = element.Owner; IConfiguration options = owner.Options; IResourceLoader loader = owner.Loader; if (options == null || loader == null) return null; return new MediaRequestProcessor<TMediaInfo>(options, loader); } protected override async Task ProcessResponseAsync(IResponse response) { IResourceService<TMediaInfo> service = ((ResourceRequestProcessor<TMediaInfo>)this).GetService(response); if (service != null) { CancellationToken none = CancellationToken.None; TMediaInfo val2 = this.Media = await service.CreateAsync(response, none).ConfigureAwait(false); } } } }