AngleSharp by AngleSharp

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

 MediaRequestProcessor<TMediaInfo>

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 class MediaRequestProcessor<TMediaInfo> : ResourceRequestProcessor<TMediaInfo> where TMediaInfo : IMediaInfo { private TMediaInfo _media; 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 = base.GetService(response); if (service != null) { CancellationToken cancel = CancellationToken.None; this._media = await service.CreateAsync(response, cancel).ConfigureAwait(false); } } } }