/// <summary> /// Loads the given URI by using an asynchronous request. /// </summary> /// <param name="request">The data of the request to send.</param> /// <param name="cancel">The cancellation token to use..</param> /// <returns> /// The task which will eventually return the response. /// </returns> protected async Task <IResponse> LoadAsync(Request request, CancellationToken cancel) { var requesters = _context.GetServices <IRequester>(); var response = default(IResponse); var redirectCount = 0; AppendCookieTo(request); do { if (response != null) { redirectCount++; ExtractCookieFrom(response); request = CreateNewRequest(request, response); AppendCookieTo(request); } foreach (var requester in requesters) { if (requester.SupportsProtocol(request.Address.Scheme)) { _context.Fire(new RequestEvent(request, null)); response = await requester.RequestAsync(request, cancel).ConfigureAwait(false); _context.Fire(new RequestEvent(request, response)); break; } } }while (response != null && response.StatusCode.IsRedirected() && redirectCount < MaxRedirects); return(response); }
internal async static Task<IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken) { var parserOptions = new XmlParserOptions { }; var document = new XmlDocument(context, options.Source); var parser = new XmlDomBuilder(document); document.Setup(options); context.NavigateTo(document); context.Fire(new HtmlParseEvent(document, completed: false)); await parser.ParseAsync(default(XmlParserOptions), cancelToken).ConfigureAwait(false); context.Fire(new HtmlParseEvent(document, completed: true)); return document; }
internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken) { var parserOptions = new XmlParserOptions { }; var document = new XmlDocument(context, options.Source); var parser = new XmlDomBuilder(document); document.Setup(options); context.NavigateTo(document); context.Fire(new HtmlParseEvent(document, completed: false)); await parser.ParseAsync(default(XmlParserOptions), cancelToken).ConfigureAwait(false); context.Fire(new HtmlParseEvent(document, completed: true)); return(document); }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="target"></param> /// <param name="eventName"></param> /// <param name="data"></param> /// <returns></returns> public static Task FireAsync <T>(this IBrowsingContext target, String eventName, T data) { var ev = new InteractivityEvent <T>(eventName, data); target.Fire(ev); return(ev.Result ?? TaskEx.FromResult(false)); }
/// <summary> /// Loads the given URI by using an asynchronous request. /// </summary> /// <param name="request">The data of the request to send.</param> /// <param name="cancel">The cancellation token to use..</param> /// <returns> /// The task which will eventually return the response. /// </returns> protected async Task <IResponse> LoadAsync(Request request, CancellationToken cancel) { foreach (var requester in _requesters) { if (requester.SupportsProtocol(request.Address.Scheme)) { _context.Fire(new RequestEvent(request, null)); var response = await requester.RequestAsync(request, cancel).ConfigureAwait(false); _context.Fire(new RequestEvent(request, response)); return(response); } } return(default(IResponse)); }
internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken) { var parserOptions = new XmlParserOptions { }; var document = new SvgDocument(context, options.Source); var factory = context.Configuration.GetFactory <IElementFactory <SvgElement> >(); document.Setup(options); context.NavigateTo(document); context.Fire(new HtmlParseEvent(document, completed: false)); using (var parser = new XmlDomBuilder(document, factory.Create)) { await parser.ParseAsync(parserOptions, cancelToken).ConfigureAwait(false); } context.Fire(new HtmlParseEvent(document, completed: true)); return(document); }
internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken) { var scripting = context.Configuration.IsScripting(); var parserOptions = new HtmlParserOptions { IsScripting = scripting }; var document = new HtmlDocument(context, options.Source); var parser = new HtmlDomBuilder(document); parser.Error += (_, error) => context.Fire(error); document.Setup(options); context.NavigateTo(document); context.Fire(new HtmlParseEvent(document, completed: false)); await parser.ParseAsync(parserOptions, cancelToken).ConfigureAwait(false); context.Fire(new HtmlParseEvent(document, completed: true)); return(document); }