private void OnRequest(NetworkRequestWillBeSentChromiumEvent e, string interceptionId)
        {
            if (e.Request.Url.StartsWith("data:"))
            {
                return;
            }

            var redirectChain = new List <Request>();

            if (e.RedirectResponse != null)
            {
                // If we connect late to the target, we could have missed the requestWillBeSent event.
                if (_requestIdToRequest.TryGetValue(e.RequestId, out var requestRedirected))
                {
                    HandleRequestRedirect(requestRedirected, e.RedirectResponse);
                    redirectChain = requestRedirected.Request.RedirectChain;
                }
            }

            _page.FrameManager.Frames.TryGetValue(e.FrameId ?? string.Empty, out var frame);
            bool   isNavigationRequest = e.RequestId == e.LoaderId && e.Type == Protocol.Network.ResourceType.Document;
            string documentId          = isNavigationRequest ? e.LoaderId : null;
            var    request             = new ChromiumInterceptableRequest(
                _client,
                frame,
                interceptionId,
                documentId,
                _userRequestInterceptionEnabled,
                e,
                redirectChain);

            _requestIdToRequest.TryAdd(e.RequestId, request);
            _page.FrameManager.RequestStarted(request.Request);
        }
        private void OnRequestWillBeSent(NetworkRequestWillBeSentChromiumEvent e)
        {
            // Request interception doesn't happen for data URLs with Network Service.
            if (_protocolRequestInterceptionEnabled && !e.Request.Url.StartsWith(":data:"))
            {
                string requestId = e.RequestId;
                if (_requestIdToInterceptionId.TryRemove(requestId, out string interceptionId))
                {
                    OnRequest(e, interceptionId);
                }
                else
                {
                    _requestIdToRequestWillBeSentEvent[e.RequestId] = e;
                }

                return;
            }

            OnRequest(e, null);
        }
 public ChromiumInterceptableRequest(
     ChromiumSession client,
     Frame frame,
     string interceptionId,
     string documentId,
     bool requestInterceptionEnabled,
     NetworkRequestWillBeSentChromiumEvent e,
     List <Request> redirectChain)
 {
     _client        = client;
     RequestId      = e.RequestId;
     InterceptionId = interceptionId;
     Request        = new Request(
         requestInterceptionEnabled ? this : null,
         frame,
         redirectChain,
         documentId,
         e.Request.Url,
         (e.Type ?? Protocol.Network.ResourceType.Other).ToPlaywrightResourceType(),
         new HttpMethod(e.Request.Method),
         e.Request.PostData,
         e.Request.Headers);
 }