Exemplo n.º 1
0
        /// <summary>
        /// Loads the document in the provided context from the given response.
        /// </summary>
        /// <param name="context">The browsing context.</param>
        /// <param name="response">The response to consider.</param>
        /// <param name="contentType">The content type of the response.</param>
        /// <param name="source">The source to use.</param>
        /// <param name="cancelToken">Token for cancellation.</param>
        /// <returns>The task that builds the document.</returns>
        internal async static Task <HtmlDocument> LoadAsync(IBrowsingContext context, IResponse response, MimeType contentType, TextSource source, CancellationToken cancelToken)
        {
            var document = new HtmlDocument(context, source);
            var evt      = new HtmlParseStartEvent(document);
            var config   = context.Configuration;
            var events   = config.Events;
            var parser   = new HtmlDomBuilder(document);

            document.ContentType = contentType.Content;
            document.Referrer    = response.Headers.GetOrDefault(HeaderNames.Referer, String.Empty);
            document.DocumentUri = response.Address.Href;
            document.Cookie      = response.Headers.GetOrDefault(HeaderNames.SetCookie, String.Empty);
            document.ReadyState  = DocumentReadyState.Loading;
            context.NavigateTo(document);

            if (events != null)
            {
                events.Publish(evt);
            }

            var options = new HtmlParserOptions {
                IsScripting = config.IsScripting()
            };
            await parser.ParseAsync(options, cancelToken).ConfigureAwait(false);

            evt.FireEnd();
            return(document);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Parses the stream asynchronously with option to cancel.
        /// </summary>
        public async Task <IHtmlDocument> ParseAsync(Stream source, CancellationToken cancel)
        {
            var document = CreateDocument(source);
            var parser   = new HtmlDomBuilder(document);

            return(await parser.ParseAsync(_options, cancel).ConfigureAwait(false));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Loads the document in the provided context from the given response.
        /// </summary>
        /// <param name="context">The browsing context.</param>
        /// <param name="options">The creation options to consider.</param>
        /// <param name="cancelToken">Token for cancellation.</param>
        /// <returns>The task that builds the document.</returns>
        internal async static Task <IDocument> LoadAsync(IBrowsingContext context, CreateDocumentOptions options, CancellationToken cancelToken)
        {
            var document      = new HtmlDocument(context, options.Source);
            var evt           = new HtmlParseStartEvent(document);
            var config        = context.Configuration;
            var events        = config.Events;
            var parser        = new HtmlDomBuilder(document);
            var parserOptions = new HtmlParserOptions
            {
                IsScripting = config.IsScripting()
            };

            document.Setup(options);
            context.NavigateTo(document);

            if (events != null)
            {
                events.Publish(evt);
            }

            await parser.ParseAsync(parserOptions, cancelToken).ConfigureAwait(false);

            evt.FireEnd();
            return(document);
        }
Exemplo n.º 4
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);

            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);
        }