AngleSharp by AngleSharp

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

.NET API 1,230,848 bytes

 Window

Represents a sample browsing Window implementation for automated tests, analysis and as a useful playground.
using AngleSharp.Dom.Css; using AngleSharp.Dom.Events; using AngleSharp.Dom.Html; using AngleSharp.Dom.Navigator; using AngleSharp.Extensions; using AngleSharp.Html; using AngleSharp.Services.Styling; using System; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AngleSharp.Dom { internal sealed class Window : EventTarget, IWindow, IEventTarget, IGlobalEventHandlers, IWindowEventHandlers, IWindowTimers { private readonly Document _document; private string _name; private int _outerHeight; private int _outerWidth; private int _screenX; private int _screenY; private string _status; private bool _closed; private INavigator _navigator; public IWindow Proxy => _document.Context.Current; public INavigator Navigator => _navigator ?? (_navigator = _document.Context.CreateService<INavigator>()); public IDocument Document => _document; public string Name { get { return _name; } set { _name = value; } } public int OuterHeight { get { return _outerHeight; } set { _outerHeight = value; } } public int OuterWidth { get { return _outerWidth; } set { _outerWidth = value; } } public int ScreenX { get { return _screenX; } set { _screenX = value; } } public int ScreenY { get { return _screenY; } set { _screenY = value; } } public ILocation Location => Document.Location; public string Status { get { return _status; } set { _status = value; } } public bool IsClosed => _closed; IHistory IWindow.History { get { return _document.Context.SessionHistory; } } event DomEventHandler IGlobalEventHandlers.Aborted { add { AddEventListener(EventNames.Abort, value, false); } remove { RemoveEventListener(EventNames.Abort, value, false); } } event DomEventHandler IGlobalEventHandlers.Blurred { add { AddEventListener(EventNames.Blur, value, false); } remove { RemoveEventListener(EventNames.Blur, value, false); } } event DomEventHandler IGlobalEventHandlers.Cancelled { add { AddEventListener(EventNames.Cancel, value, false); } remove { RemoveEventListener(EventNames.Cancel, value, false); } } event DomEventHandler IGlobalEventHandlers.CanPlay { add { AddEventListener(EventNames.CanPlay, value, false); } remove { RemoveEventListener(EventNames.CanPlay, value, false); } } event DomEventHandler IGlobalEventHandlers.CanPlayThrough { add { AddEventListener(EventNames.CanPlayThrough, value, false); } remove { RemoveEventListener(EventNames.CanPlayThrough, value, false); } } event DomEventHandler IGlobalEventHandlers.Changed { add { AddEventListener(EventNames.Change, value, false); } remove { RemoveEventListener(EventNames.Change, value, false); } } event DomEventHandler IGlobalEventHandlers.Clicked { add { AddEventListener(EventNames.Click, value, false); } remove { RemoveEventListener(EventNames.Click, value, false); } } event DomEventHandler IGlobalEventHandlers.CueChanged { add { AddEventListener(EventNames.CueChange, value, false); } remove { RemoveEventListener(EventNames.CueChange, value, false); } } event DomEventHandler IGlobalEventHandlers.DoubleClick { add { AddEventListener(EventNames.DblClick, value, false); } remove { RemoveEventListener(EventNames.DblClick, value, false); } } event DomEventHandler IGlobalEventHandlers.Drag { add { AddEventListener(EventNames.Drag, value, false); } remove { RemoveEventListener(EventNames.Drag, value, false); } } event DomEventHandler IGlobalEventHandlers.DragEnd { add { AddEventListener(EventNames.DragEnd, value, false); } remove { RemoveEventListener(EventNames.DragEnd, value, false); } } event DomEventHandler IGlobalEventHandlers.DragEnter { add { AddEventListener(EventNames.DragEnter, value, false); } remove { RemoveEventListener(EventNames.DragEnter, value, false); } } event DomEventHandler IGlobalEventHandlers.DragExit { add { AddEventListener(EventNames.DragExit, value, false); } remove { RemoveEventListener(EventNames.DragExit, value, false); } } event DomEventHandler IGlobalEventHandlers.DragLeave { add { AddEventListener(EventNames.DragLeave, value, false); } remove { RemoveEventListener(EventNames.DragLeave, value, false); } } event DomEventHandler IGlobalEventHandlers.DragOver { add { AddEventListener(EventNames.DragOver, value, false); } remove { RemoveEventListener(EventNames.DragOver, value, false); } } event DomEventHandler IGlobalEventHandlers.DragStart { add { AddEventListener(EventNames.DragStart, value, false); } remove { RemoveEventListener(EventNames.DragStart, value, false); } } event DomEventHandler IGlobalEventHandlers.Dropped { add { AddEventListener(EventNames.Drop, value, false); } remove { RemoveEventListener(EventNames.Drop, value, false); } } event DomEventHandler IGlobalEventHandlers.DurationChanged { add { AddEventListener(EventNames.DurationChange, value, false); } remove { RemoveEventListener(EventNames.DurationChange, value, false); } } event DomEventHandler IGlobalEventHandlers.Emptied { add { AddEventListener(EventNames.Emptied, value, false); } remove { RemoveEventListener(EventNames.Emptied, value, false); } } event DomEventHandler IGlobalEventHandlers.Ended { add { AddEventListener(EventNames.Ended, value, false); } remove { RemoveEventListener(EventNames.Ended, value, false); } } event DomEventHandler IGlobalEventHandlers.Error { add { AddEventListener(EventNames.Error, value, false); } remove { RemoveEventListener(EventNames.Error, value, false); } } event DomEventHandler IGlobalEventHandlers.Focused { add { AddEventListener(EventNames.Focus, value, false); } remove { RemoveEventListener(EventNames.Focus, value, false); } } event DomEventHandler IGlobalEventHandlers.Input { add { AddEventListener(EventNames.Input, value, false); } remove { RemoveEventListener(EventNames.Input, value, false); } } event DomEventHandler IGlobalEventHandlers.Invalid { add { AddEventListener(EventNames.Invalid, value, false); } remove { RemoveEventListener(EventNames.Invalid, value, false); } } event DomEventHandler IGlobalEventHandlers.KeyDown { add { AddEventListener(EventNames.Keydown, value, false); } remove { RemoveEventListener(EventNames.Keydown, value, false); } } event DomEventHandler IGlobalEventHandlers.KeyPress { add { AddEventListener(EventNames.Keypress, value, false); } remove { RemoveEventListener(EventNames.Keypress, value, false); } } event DomEventHandler IGlobalEventHandlers.KeyUp { add { AddEventListener(EventNames.Keyup, value, false); } remove { RemoveEventListener(EventNames.Keyup, value, false); } } event DomEventHandler IGlobalEventHandlers.Loaded { add { AddEventListener(EventNames.Load, value, false); } remove { RemoveEventListener(EventNames.Load, value, false); } } event DomEventHandler IGlobalEventHandlers.LoadedData { add { AddEventListener(EventNames.LoadedData, value, false); } remove { RemoveEventListener(EventNames.LoadedData, value, false); } } event DomEventHandler IGlobalEventHandlers.LoadedMetadata { add { AddEventListener(EventNames.LoadedMetaData, value, false); } remove { RemoveEventListener(EventNames.LoadedMetaData, value, false); } } event DomEventHandler IGlobalEventHandlers.Loading { add { AddEventListener(EventNames.LoadStart, value, false); } remove { RemoveEventListener(EventNames.LoadStart, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseDown { add { AddEventListener(EventNames.Mousedown, value, false); } remove { RemoveEventListener(EventNames.Mousedown, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseEnter { add { AddEventListener(EventNames.Mouseenter, value, false); } remove { RemoveEventListener(EventNames.Mouseenter, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseLeave { add { AddEventListener(EventNames.Mouseleave, value, false); } remove { RemoveEventListener(EventNames.Mouseleave, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseMove { add { AddEventListener(EventNames.Mousemove, value, false); } remove { RemoveEventListener(EventNames.Mousemove, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseOut { add { AddEventListener(EventNames.Mouseout, value, false); } remove { RemoveEventListener(EventNames.Mouseout, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseOver { add { AddEventListener(EventNames.Mouseover, value, false); } remove { RemoveEventListener(EventNames.Mouseover, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseUp { add { AddEventListener(EventNames.Mouseup, value, false); } remove { RemoveEventListener(EventNames.Mouseup, value, false); } } event DomEventHandler IGlobalEventHandlers.MouseWheel { add { AddEventListener(EventNames.Wheel, value, false); } remove { RemoveEventListener(EventNames.Wheel, value, false); } } event DomEventHandler IGlobalEventHandlers.Paused { add { AddEventListener(EventNames.Pause, value, false); } remove { RemoveEventListener(EventNames.Pause, value, false); } } event DomEventHandler IGlobalEventHandlers.Played { add { AddEventListener(EventNames.Play, value, false); } remove { RemoveEventListener(EventNames.Play, value, false); } } event DomEventHandler IGlobalEventHandlers.Playing { add { AddEventListener(EventNames.Playing, value, false); } remove { RemoveEventListener(EventNames.Playing, value, false); } } event DomEventHandler IGlobalEventHandlers.Progress { add { AddEventListener(EventNames.Progress, value, false); } remove { RemoveEventListener(EventNames.Progress, value, false); } } event DomEventHandler IGlobalEventHandlers.RateChanged { add { AddEventListener(EventNames.RateChange, value, false); } remove { RemoveEventListener(EventNames.RateChange, value, false); } } event DomEventHandler IGlobalEventHandlers.Resetted { add { AddEventListener(EventNames.Reset, value, false); } remove { RemoveEventListener(EventNames.Reset, value, false); } } event DomEventHandler IGlobalEventHandlers.Resized { add { AddEventListener(EventNames.Resize, value, false); } remove { RemoveEventListener(EventNames.Resize, value, false); } } event DomEventHandler IGlobalEventHandlers.Scrolled { add { AddEventListener(EventNames.Scroll, value, false); } remove { RemoveEventListener(EventNames.Scroll, value, false); } } event DomEventHandler IGlobalEventHandlers.Seeked { add { AddEventListener(EventNames.Seeked, value, false); } remove { RemoveEventListener(EventNames.Seeked, value, false); } } event DomEventHandler IGlobalEventHandlers.Seeking { add { AddEventListener(EventNames.Seeking, value, false); } remove { RemoveEventListener(EventNames.Seeking, value, false); } } event DomEventHandler IGlobalEventHandlers.Selected { add { AddEventListener(EventNames.Select, value, false); } remove { RemoveEventListener(EventNames.Select, value, false); } } event DomEventHandler IGlobalEventHandlers.Shown { add { AddEventListener(EventNames.Show, value, false); } remove { RemoveEventListener(EventNames.Show, value, false); } } event DomEventHandler IGlobalEventHandlers.Stalled { add { AddEventListener(EventNames.Stalled, value, false); } remove { RemoveEventListener(EventNames.Stalled, value, false); } } event DomEventHandler IGlobalEventHandlers.Submitted { add { AddEventListener(EventNames.Submit, value, false); } remove { RemoveEventListener(EventNames.Submit, value, false); } } event DomEventHandler IGlobalEventHandlers.Suspended { add { AddEventListener(EventNames.Suspend, value, false); } remove { RemoveEventListener(EventNames.Suspend, value, false); } } event DomEventHandler IGlobalEventHandlers.TimeUpdated { add { AddEventListener(EventNames.TimeUpdate, value, false); } remove { RemoveEventListener(EventNames.TimeUpdate, value, false); } } event DomEventHandler IGlobalEventHandlers.Toggled { add { AddEventListener(EventNames.Toggle, value, false); } remove { RemoveEventListener(EventNames.Toggle, value, false); } } event DomEventHandler IGlobalEventHandlers.VolumeChanged { add { AddEventListener(EventNames.VolumeChange, value, false); } remove { RemoveEventListener(EventNames.VolumeChange, value, false); } } event DomEventHandler IGlobalEventHandlers.Waiting { add { AddEventListener(EventNames.Waiting, value, false); } remove { RemoveEventListener(EventNames.Waiting, value, false); } } event DomEventHandler IWindowEventHandlers.Printed { add { AddEventListener(EventNames.AfterPrint, value, false); } remove { RemoveEventListener(EventNames.AfterPrint, value, false); } } event DomEventHandler IWindowEventHandlers.Printing { add { AddEventListener(EventNames.BeforePrint, value, false); } remove { RemoveEventListener(EventNames.BeforePrint, value, false); } } event DomEventHandler IWindowEventHandlers.Unloading { add { AddEventListener(EventNames.Unloading, value, false); } remove { RemoveEventListener(EventNames.Unloading, value, false); } } event DomEventHandler IWindowEventHandlers.HashChanged { add { AddEventListener(EventNames.HashChange, value, false); } remove { RemoveEventListener(EventNames.HashChange, value, false); } } event DomEventHandler IWindowEventHandlers.MessageReceived { add { AddEventListener(EventNames.Message, value, false); } remove { RemoveEventListener(EventNames.Message, value, false); } } event DomEventHandler IWindowEventHandlers.WentOffline { add { AddEventListener(EventNames.Offline, value, false); } remove { RemoveEventListener(EventNames.Offline, value, false); } } event DomEventHandler IWindowEventHandlers.WentOnline { add { AddEventListener(EventNames.Online, value, false); } remove { RemoveEventListener(EventNames.Online, value, false); } } event DomEventHandler IWindowEventHandlers.PageHidden { add { AddEventListener(EventNames.PageHide, value, false); } remove { RemoveEventListener(EventNames.PageHide, value, false); } } event DomEventHandler IWindowEventHandlers.PageShown { add { AddEventListener(EventNames.PageShow, value, false); } remove { RemoveEventListener(EventNames.PageShow, value, false); } } event DomEventHandler IWindowEventHandlers.PopState { add { AddEventListener(EventNames.PopState, value, false); } remove { RemoveEventListener(EventNames.PopState, value, false); } } event DomEventHandler IWindowEventHandlers.Storage { add { AddEventListener(EventNames.Storage, value, false); } remove { RemoveEventListener(EventNames.Storage, value, false); } } event DomEventHandler IWindowEventHandlers.Unloaded { add { AddEventListener(EventNames.Unload, value, false); } remove { RemoveEventListener(EventNames.Unload, value, false); } } public Window(Document document) { _document = document; } public IMediaQueryList MatchMedia(string mediaText) { IConfiguration options = _document.Options; StyleOptions options2 = new StyleOptions(_document.Context); IMediaList media = options.GetCssStyleEngine().ParseMedia(mediaText, options2); return new CssMediaQueryList(this, media); } public ICssStyleDeclaration GetComputedStyle(IElement element, string pseudo = null) { return this.GetStyleCollection().ComputeDeclarations(element, pseudo); } IWindow IWindow.Open(string url, string name, string features, string replace) { return new Window(new HtmlDocument(_document.NewContext(name, Sandboxes.None)) { Location = { Href = url } }) { Name = name }; } void IWindow.Close() { _closed = true; } void IWindow.Stop() { } void IWindow.Focus() { } void IWindow.Blur() { } void IWindow.Alert(string message) { } bool IWindow.Confirm(string message) { return false; } void IWindow.Print() { } int IWindowTimers.SetTimeout(Action<IWindow> handler, int timeout) { return QueueTask(DoTimeoutAsync, handler, timeout); } void IWindowTimers.ClearTimeout(int handle) { Clear(handle); } void IWindowTimers.ClearInterval(int handle) { Clear(handle); } int IWindowTimers.SetInterval(Action<IWindow> handler, int timeout) { return QueueTask(DoIntervalAsync, handler, timeout); } private async Task DoTimeoutAsync(Action<IWindow> callback, int timeout, CancellationTokenSource cts) { CancellationToken token = cts.Token; await TaskEx.Delay(timeout, token).ConfigureAwait(false); if (!token.IsCancellationRequested) _document.QueueTask(delegate { callback(this); }); } private async Task DoIntervalAsync(Action<IWindow> callback, int timeout, CancellationTokenSource cts) { CancellationToken token = cts.Token; while (!token.IsCancellationRequested) { await DoTimeoutAsync(callback, timeout, cts).ConfigureAwait(false); } } private int QueueTask(Func<Action<IWindow>, int, CancellationTokenSource, Task> taskCreator, Action<IWindow> callback, int timeout) { CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); taskCreator(callback, timeout, cancellationTokenSource); _document.AttachReference(cancellationTokenSource); return cancellationTokenSource.GetHashCode(); } private void Clear(int handle) { CancellationTokenSource cancellationTokenSource = (from m in _document.GetAttachedReferences<CancellationTokenSource>() where m.GetHashCode() == handle select m).FirstOrDefault(); if (cancellationTokenSource != null && !cancellationTokenSource.IsCancellationRequested) cancellationTokenSource.Cancel(); } } }