/// <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);
        }
Beispiel #2
0
 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;
 }
Beispiel #3
0
        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));
        }
Beispiel #5
0
        /// <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));
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }