/// <summary>
        /// Opens a new document loaded from a virtual response that can be
        /// filled via the provided callback.
        /// </summary>
        /// <param name="context">The browsing context to use.</param>
        /// <param name="request">Callback with the response to setup.</param>
        /// <param name="cancel">The cancellation token.</param>
        /// <returns>The task that creates the document.</returns>
        public static Task <IDocument> OpenAsync(this IBrowsingContext context, Action <VirtualResponse> request, CancellationToken cancel)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            if (context == null)
            {
                context = BrowsingContext.New();
            }

            using (var response = new VirtualResponse())
            {
                request(response);
                var source = response.CreateSourceFor(context.Configuration);
                return(context.LoadDocumentAsync(response, source, cancel));
            }
        }
        /// <summary>
        /// Opens a new document loaded from a virtual response that can be
        /// filled via the provided callback.
        /// </summary>
        /// <param name="context">The browsing context to use.</param>
        /// <param name="request">Callback with the response to setup.</param>
        /// <param name="cancel">The cancellation token.</param>
        /// <returns>The task that creates the document.</returns>
        public static Task <IDocument> OpenAsync(this IBrowsingContext context, Action <VirtualResponse> request, CancellationToken cancel)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            if (context == null)
            {
                context = BrowsingContext.New();
            }

            using (var response = new VirtualResponse())
            {
                request(response);
                var contentType = response.GetContentType(MimeTypeNames.Html);
                var source      = response.CreateSourceFor(context.Configuration);
                var options     = new CreateDocumentOptions(response, source);
                return(context.OpenAsync(options, cancel));
            }
        }