private string RequestHeadersToJsonString(WebView2HttpRequestHeaderCollection requestHeaders)
        {
            StringBuilder builder    = new StringBuilder("[");
            bool          firstWrote = false;

            foreach (var header in requestHeaders.HeaderDictionary)
            {
                if (firstWrote)
                {
                    builder.Append(", ");
                }

                firstWrote = true;
                builder.AppendFormat("{{\"name\":{0}, \"value\": {1} }}",
                                     EncodeQuote(header.Key), EncodeQuote(header.Value));
            }
            builder.Append("]");

            return(builder.ToString());
        }
        private string RequestToJsonString(WebView2WebResourceRequest request)
        {
            IStream content = request.Content;
            WebView2HttpRequestHeaderCollection headers = request.Headers;
            string method = request.Method;
            string uri    = request.Uri;

            string result = "{";

            result += "\"content\": ";
            result += (content == null ? "null" : "\"...\"");
            result += ", ";

            result += "\"headers\": " + RequestHeadersToJsonString(headers) + ", ";
            result += "\"method\": " + EncodeQuote(method) + ", ";
            result += "\"uri\": " + EncodeQuote(uri) + " ";

            result += "}";

            return(result);
        }
        private void WebView2NavigationStarting(object sender, Wrapper.NavigationStartingEventArgs e)
        {
            bool cancel          = e.Cancel;
            bool isRedirected    = e.IsRedirected;
            bool isUserInitiated = e.IsUserInitiated;
            WebView2HttpRequestHeaderCollection requestHeaders = e.HttpHeaderCollection;
            string uri = e.Uri;

            string message =
                "{ \"kind\": \"event\", \"name\": \"NavigationStarting\", \"args\": {";

            message += "\"cancel\": " + BoolToString(cancel) + ", " +
                       "\"isRedirected\": " + BoolToString(isRedirected) + ", " +
                       "\"isUserInitiated\": " + BoolToString(isUserInitiated) + ", " +
                       "\"requestHeaders\": " + RequestHeadersToJsonString(requestHeaders) + ", " +
                       "\"uri\": " + EncodeQuote(uri) + " " +
                       "}" +
                       WebViewPropertiesToJsonString(_eventSourceWebView2) +
                       "}";
            PostEventMessage(message);
        }