// <copyright file="DevToolsNetworkTest.cs" company="Selenium Committers">
// Licensed to the Software Freedom Conservancy (SFC) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The SFC licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
// </copyright>

using NUnit.Framework;
using OpenQA.Selenium.Environment;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace OpenQA.Selenium.DevTools;

using CurrentCdpVersion = V138;

[TestFixture]
public class DevToolsNetworkTest : DevToolsTestFixture
{
    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    public void GetSetDeleteAndClearAllCookies()
    {
        //var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        //await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());

        //var allCookieResponse = await domains.Network.GetAllCookies();
        //ReadOnlyCollection<Cookie> seleniumCookies = allCookieResponse.Cookies.ToSeleniumCookies();
        //Assert.That(seleniumCookies.Count == 0);

        //Cookie cookie = new ReturnedCookie("name", "value", EnvironmentManager.Instance.UrlBuilder.HostName, "/devtools/test", null, false, true);
        //var setCookieResponse = await domains.Network.SetCookie(cookie.ToDevToolsSetCookieCommandSettings());

        //Assert.That(setCookieResponse.Success);

        //allCookieResponse = await domains.Network.GetAllCookies();
        //seleniumCookies = allCookieResponse.Cookies.ToSeleniumCookies();
        //Assert.That(seleniumCookies.Count == 1);

        //var cookieResponse = await domains.Network.GetCookies(new CurrentCdpVersion.Network.GetCookiesCommandSettings());
        //seleniumCookies = cookieResponse.Cookies.ToSeleniumCookies();
        //Assert.That(seleniumCookies.Count == 0);

        //await domains.Network.DeleteCookies(new CurrentCdpVersion.Network.DeleteCookiesCommandSettings()
        //{
        //    Name = "name",
        //    Domain = EnvironmentManager.Instance.UrlBuilder.HostName,
        //    Path = "/devtools/test"
        //});

        //await domains.Network.ClearBrowserCookies();

        //allCookieResponse = await domains.Network.GetAllCookies();
        //seleniumCookies = allCookieResponse.Cookies.ToSeleniumCookies();
        //Assert.That(seleniumCookies.Count == 0);

        //setCookieResponse = await domains.Network.SetCookie(cookie.ToDevToolsSetCookieCommandSettings());
        //Assert.That(setCookieResponse.Success);

        //allCookieResponse = await domains.Network.GetAllCookies();
        //seleniumCookies = allCookieResponse.Cookies.ToSeleniumCookies();
        //Assert.That(seleniumCookies.Count == 1);
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task SendRequestWithUrlFiltersAndExtraHeadersAndVerifyRequests()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());
        await domains.Network.SetBlockedURLs(new CurrentCdpVersion.Network.SetBlockedURLsCommandSettings()
        {
            Urls = new string[] { "*://*/*.gif" }
        });

        var additionalHeaders = new CurrentCdpVersion.Network.Headers();
        additionalHeaders.Add("headerName", "headerValue");
        await domains.Network.SetExtraHTTPHeaders(new CurrentCdpVersion.Network.SetExtraHTTPHeadersCommandSettings()
        {
            Headers = additionalHeaders
        });

        ManualResetEventSlim loadingFailedSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.LoadingFailedEventArgs> loadingFailedHandler = (sender, e) =>
        {
            if (e.Type == CurrentCdpVersion.Network.ResourceType.Image)
            {
                Assert.That(e.BlockedReason == CurrentCdpVersion.Network.BlockedReason.Inspector);
            }

            loadingFailedSync.Set();
        };
        domains.Network.LoadingFailed += loadingFailedHandler;

        ManualResetEventSlim requestSentSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.RequestWillBeSentEventArgs> requestWillBeSentHandler = (sender, e) =>
        {
            if (e.Type != CurrentCdpVersion.Network.ResourceType.Image)
            {
                Assert.That(e.Request.Headers.ContainsKey("headerName"));
                Assert.That(e.Request.Headers["headerName"] == "headerValue");
                requestSentSync.Set();
            }
        };
        domains.Network.RequestWillBeSent += requestWillBeSentHandler;

        ManualResetEventSlim dataSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.DataReceivedEventArgs> dataReceivedHandler = (sender, e) =>
        {
            Assert.That(e.RequestId, Is.Not.Null);
            dataSync.Set();
        };
        domains.Network.DataReceived += dataReceivedHandler;

        driver.Url = linkedImage;
        Assert.That(loadingFailedSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
        Assert.That(requestSentSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
        Assert.That(dataSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task EmulateNetworkConditionOffline()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings()
        {
            MaxTotalBufferSize = 100000000
        });

        await domains.Network.EmulateNetworkConditions(new CurrentCdpVersion.Network.EmulateNetworkConditionsCommandSettings()
        {
            Offline = true,
            Latency = 100,
            DownloadThroughput = 1000,
            UploadThroughput = 2000,
            ConnectionType = CurrentCdpVersion.Network.ConnectionType.Cellular3g
        });

        ManualResetEventSlim loadingFailedSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.LoadingFailedEventArgs> loadingFailedHandler = (sender, e) =>
        {
            Assert.That(e.ErrorText, Is.EqualTo("net::ERR_INTERNET_DISCONNECTED"));
            loadingFailedSync.Set();
        };
        domains.Network.LoadingFailed += loadingFailedHandler;

        try
        {
            driver.Url = simpleTestPage;
        }
        catch (WebDriverException e)
        {
            Assert.That(e.Message.Contains("net::ERR_INTERNET_DISCONNECTED"));
        }

        Assert.That(loadingFailedSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
    }

    [Test]
    [Ignore("The request ID is not getting added to cache")]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task VerifyRequestReceivedFromCacheAndResponseBody()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        string[] requestIdFromCache = new string[1];

        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings()
        {
            MaxResourceBufferSize = 100000000
        });

        ManualResetEventSlim servedFromCacheSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.RequestServedFromCacheEventArgs> requestServedFromCacheHandler = (sender, e) =>
        {
            Assert.That(e.RequestId, Is.Not.Null);
            requestIdFromCache[0] = e.RequestId;
            servedFromCacheSync.Set();
        };
        domains.Network.RequestServedFromCache += requestServedFromCacheHandler;

        ManualResetEventSlim loadingFinishedSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.LoadingFinishedEventArgs> loadingFinishedHandler = (sender, e) =>
        {
            Assert.That(e.RequestId, Is.Not.Null);
            loadingFinishedSync.Set();
        };
        domains.Network.LoadingFinished += loadingFinishedHandler;

        driver.Url = simpleTestPage;
        driver.Url = simpleTestPage;
        Assert.That(loadingFinishedSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
        Assert.That(servedFromCacheSync.Wait(TimeSpan.FromSeconds(5)), Is.True);

        var responseBody = await domains.Network.GetResponseBody(new CurrentCdpVersion.Network.GetResponseBodyCommandSettings()
        {
            RequestId = requestIdFromCache[0]
        });

        Assert.That(responseBody.Body, Is.Not.Null);
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task VerifySearchInResponseBody()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        string[] requestIds = new string[1];

        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings()
        {
            MaxResourceBufferSize = 100000000
        });

        ManualResetEventSlim responseSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.ResponseReceivedEventArgs> responseReceivedHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
            requestIds[0] = e.RequestId;
            responseSync.Set();
        };
        domains.Network.ResponseReceived += responseReceivedHandler;

        driver.Url = simpleTestPage;
        Assert.That(responseSync.Wait(TimeSpan.FromSeconds(5)), Is.True);

        var searchResponse = await domains.Network.SearchInResponseBody(new CurrentCdpVersion.Network.SearchInResponseBodyCommandSettings()
        {
            RequestId = requestIds[0],
            Query = ".*",
            IsRegex = true
        });

        Assert.That(searchResponse.Result.Length > 0);
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task VerifyCacheDisabledAndClearCache()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings()
        {
            MaxPostDataSize = 100000000
        });

        ManualResetEventSlim responseSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.ResponseReceivedEventArgs> responseReceivedHandler = (sender, e) =>
        {
            Assert.That(e.Response.FromDiskCache, Is.False);
            responseSync.Set();
        };
        domains.Network.ResponseReceived += responseReceivedHandler;

        driver.Url = simpleTestPage;
        Assert.That(responseSync.Wait(TimeSpan.FromSeconds(5)), Is.True);

        await domains.Network.SetCacheDisabled(new CurrentCdpVersion.Network.SetCacheDisabledCommandSettings()
        {
            CacheDisabled = true
        });

        driver.Url = simpleTestPage;
        await domains.Network.ClearBrowserCache();
    }

    [Test]
    [Ignore("Unable to open secure url")]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task VerifyCertificatesAndOverrideUserAgent()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());

        await domains.Network.SetUserAgentOverride(new CurrentCdpVersion.Network.SetUserAgentOverrideCommandSettings()
        {
            UserAgent = "userAgent"
        });

        ManualResetEventSlim requestSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.RequestWillBeSentEventArgs> requestWillBeSentHandler = (sender, e) =>
        {
            Assert.That(e.Request.Headers["User-Agent"], Is.EqualTo("userAgent"));
            requestSync.Set();
        };
        domains.Network.RequestWillBeSent += requestWillBeSentHandler;

        string origin = EnvironmentManager.Instance.UrlBuilder.WhereIsSecure("simpleTest.html");
        driver.Url = origin;
        Assert.That(requestSync.Wait(TimeSpan.FromSeconds(5)), Is.True);

        var result = await domains.Network.GetCertificate(new CurrentCdpVersion.Network.GetCertificateCommandSettings()
        {
            Origin = origin
        });

        Assert.That(result.TableNames.Length, Is.GreaterThan(0));
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task VerifyResponseReceivedEventAndNetworkDisable()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());
        ManualResetEventSlim responseSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.ResponseReceivedEventArgs> responseReceivedHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
            responseSync.Set();
        };
        domains.Network.ResponseReceived += responseReceivedHandler;

        driver.Url = simpleTestPage;
        Assert.That(responseSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
        await domains.Network.Disable();
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task VerifyWebSocketOperations()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());

        EventHandler<CurrentCdpVersion.Network.WebSocketCreatedEventArgs> webSocketCreatedHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
        };
        domains.Network.WebSocketCreated += webSocketCreatedHandler;

        EventHandler<CurrentCdpVersion.Network.WebSocketFrameReceivedEventArgs> webSocketFrameReceivedHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
        };
        domains.Network.WebSocketFrameReceived += webSocketFrameReceivedHandler;

        EventHandler<CurrentCdpVersion.Network.WebSocketFrameErrorEventArgs> webSocketFrameErrorHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
        };
        domains.Network.WebSocketFrameError += webSocketFrameErrorHandler;

        EventHandler<CurrentCdpVersion.Network.WebSocketFrameSentEventArgs> webSocketFrameSentHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
        };
        domains.Network.WebSocketFrameSent += webSocketFrameSentHandler;

        EventHandler<CurrentCdpVersion.Network.WebSocketClosedEventArgs> webSocketClosedHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
        };
        domains.Network.WebSocketClosed += webSocketClosedHandler;

        driver.Url = simpleTestPage;
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task VerifyRequestPostData()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());

        string[] requestIds = new string[1];

        ManualResetEventSlim requestSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.RequestWillBeSentEventArgs> requestWillBeSentHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
            if (string.Compare(e.Request.Method, "post", StringComparison.OrdinalIgnoreCase) == 0)
            {
                requestIds[0] = e.RequestId;
                requestSync.Set();
            }
        };

        domains.Network.RequestWillBeSent += requestWillBeSentHandler;

        driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("postForm.html");
        driver.FindElement(By.XPath("//form/input")).Click();
        bool requestEventFired = requestSync.Wait(TimeSpan.FromSeconds(5));
        Assert.That(requestEventFired, Is.True);

        var response = await domains.Network.GetRequestPostData(new CurrentCdpVersion.Network.GetRequestPostDataCommandSettings()
        {
            RequestId = requestIds[0]
        });

        Assert.That(response.PostData, Is.Not.Null);
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task ByPassServiceWorker()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());
        await domains.Network.SetBypassServiceWorker(new CurrentCdpVersion.Network.SetBypassServiceWorkerCommandSettings()
        {
            Bypass = true
        });
    }

    [Test]
    [Ignore("Unable to open secure url")]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    public async Task VerifySignedExchangeReceived()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());

        ManualResetEventSlim requestSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.SignedExchangeReceivedEventArgs> signedExchangeReceivedHandler = (sender, e) =>
        {
            Assert.That(e, Is.Not.Null);
            requestSync.Set();
        };
        domains.Network.SignedExchangeReceived += signedExchangeReceivedHandler;

        driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIsSecure("simpleTest.html");
        Assert.That(requestSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
    }

    [Test]
    [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Firefox, "Firefox does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Safari, "Safari does not support Chrome DevTools Protocol")]
    [IgnoreBrowser(Selenium.Browser.Edge, "We run it in Chrome and Edge releases are usually late.")]
    public async Task InterceptRequestAndContinue()
    {
        var domains = session.GetVersionSpecificDomains<CurrentCdpVersion.DevToolsSessionDomains>();
        await domains.Network.Enable(new CurrentCdpVersion.Network.EnableCommandSettings());

        ManualResetEventSlim requestSync = new ManualResetEventSlim(false);
        EventHandler<CurrentCdpVersion.Network.RequestInterceptedEventArgs> requestInterceptedHandler = (async (sender, e) =>
        {
            await domains.Network.ContinueInterceptedRequest(new CurrentCdpVersion.Network.ContinueInterceptedRequestCommandSettings()
            {
                InterceptionId = e.InterceptionId
            });
            requestSync.Set();
        });
        domains.Network.RequestIntercepted += requestInterceptedHandler;

        var pattern = new CurrentCdpVersion.Network.RequestPattern()
        {
            UrlPattern = "*.css",
            InterceptionStage = CurrentCdpVersion.Network.InterceptionStage.HeadersReceived
        };

        await domains.Network.SetRequestInterception(new CurrentCdpVersion.Network.SetRequestInterceptionCommandSettings()
        {
            Patterns = new CurrentCdpVersion.Network.RequestPattern[] { pattern }
        });

        driver.Url = EnvironmentManager.Instance.UrlBuilder.WhereIs("js/skins/lightgray/content.min.css");
        Assert.That(requestSync.Wait(TimeSpan.FromSeconds(5)), Is.True);
    }
}
