diff --git a/README.md b/README.md index b885a5d42d..88b3268d52 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ | | Linux | macOS | Windows | | :--- | :---: | :---: | :---: | -| Chromium 139.0.7258.5 | ✅ | ✅ | ✅ | +| Chromium 140.0.7339.16 | ✅ | ✅ | ✅ | | WebKit 26.0 | ✅ | ✅ | ✅ | -| Firefox 140.0.2 | ✅ | ✅ | ✅ | +| Firefox 141.0 | ✅ | ✅ | ✅ | Playwright for .NET is the official language port of [Playwright](https://playwright.dev), the library to automate [Chromium](https://www.chromium.org/Home), [Firefox](https://www.mozilla.org/en-US/firefox/new/) and [WebKit](https://webkit.org/) with a single API. Playwright is built to enable cross-browser web automation that is **ever-green**, **capable**, **reliable** and **fast**. diff --git a/src/Common/Version.props b/src/Common/Version.props index 02cf872f03..74e406683b 100644 --- a/src/Common/Version.props +++ b/src/Common/Version.props @@ -2,7 +2,7 @@ 1.55.0 $(AssemblyVersion)-beta-4 - 1.54.1 + 1.55.0 $(AssemblyVersion) $(AssemblyVersion) true diff --git a/src/Playwright.TestingHarnessTest/package-lock.json b/src/Playwright.TestingHarnessTest/package-lock.json index f4aea272a6..f11c4637b7 100644 --- a/src/Playwright.TestingHarnessTest/package-lock.json +++ b/src/Playwright.TestingHarnessTest/package-lock.json @@ -7,19 +7,19 @@ "": { "name": "playwright.testingharnesstest", "devDependencies": { - "@playwright/test": "1.54.1", + "@playwright/test": "1.55.0", "@types/node": "^22.12.0", "fast-xml-parser": "^4.5.0" } }, "node_modules/@playwright/test": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.54.1.tgz", - "integrity": "sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz", + "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.54.1" + "playwright": "1.55.0" }, "bin": { "playwright": "cli.js" @@ -77,13 +77,13 @@ } }, "node_modules/playwright": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.1.tgz", - "integrity": "sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz", + "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.54.1" + "playwright-core": "1.55.0" }, "bin": { "playwright": "cli.js" @@ -96,9 +96,9 @@ } }, "node_modules/playwright-core": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.1.tgz", - "integrity": "sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz", + "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -124,12 +124,12 @@ }, "dependencies": { "@playwright/test": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.54.1.tgz", - "integrity": "sha512-FS8hQ12acieG2dYSksmLOF7BNxnVf2afRJdCuM1eMSxj6QTSE6G4InGF7oApGgDb65MX7AwMVlIkpru0yZA4Xw==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz", + "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==", "dev": true, "requires": { - "playwright": "1.54.1" + "playwright": "1.55.0" } }, "@types/node": { @@ -158,19 +158,19 @@ "optional": true }, "playwright": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.54.1.tgz", - "integrity": "sha512-peWpSwIBmSLi6aW2auvrUtf2DqY16YYcCMO8rTVx486jKmDTJg7UAhyrraP98GB8BoPURZP8+nxO7TSd4cPr5g==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz", + "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==", "dev": true, "requires": { "fsevents": "2.3.2", - "playwright-core": "1.54.1" + "playwright-core": "1.55.0" } }, "playwright-core": { - "version": "1.54.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.54.1.tgz", - "integrity": "sha512-Nbjs2zjj0htNhzgiy5wu+3w09YetDx5pkrpI/kZotDlDUaYk0HVA5xrBVPdow4SAUIlhgKcJeJg4GRKW6xHusA==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz", + "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==", "dev": true }, "strnum": { diff --git a/src/Playwright.TestingHarnessTest/package.json b/src/Playwright.TestingHarnessTest/package.json index 195bd6cd22..ffb6acbc1f 100644 --- a/src/Playwright.TestingHarnessTest/package.json +++ b/src/Playwright.TestingHarnessTest/package.json @@ -2,7 +2,7 @@ "name": "playwright.testingharnesstest", "private": true, "devDependencies": { - "@playwright/test": "1.54.1", + "@playwright/test": "1.55.0", "@types/node": "^22.12.0", "fast-xml-parser": "^4.5.0" } diff --git a/src/Playwright.Tests/ChromiumLauncherTests.cs b/src/Playwright.Tests/ChromiumLauncherTests.cs deleted file mode 100644 index 30c59c183c..0000000000 --- a/src/Playwright.Tests/ChromiumLauncherTests.cs +++ /dev/null @@ -1,90 +0,0 @@ -/* - * MIT License - * - * Copyright (c) Microsoft Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and / or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -namespace Microsoft.Playwright.Tests.Firefox; - -public class ChromiumLauncherTests : PlaywrightTestEx -{ - [PlaywrightTest("chromium/launcher.spec.ts", "should return background pages")] - [Skip(SkipAttribute.Targets.Webkit, SkipAttribute.Targets.Firefox)] - public async Task ShouldReturnBackgroundPages() - { - using var userDataDir = new TempDirectory(); - var extensionPath = TestUtils.GetAsset("simple-extension"); - var extensionOptions = new BrowserTypeLaunchPersistentContextOptions - { - Headless = false, - Args = new[] { - $"--disable-extensions-except={extensionPath}", - $"--load-extension={extensionPath}", - }, - }; - var context = await BrowserType.LaunchPersistentContextAsync(userDataDir.Path, extensionOptions); - var backgroundPages = context.BackgroundPages; - var backgroundPage = backgroundPages.Count > 0 - ? backgroundPages[0] - : await WaitForBackgroundPage(context); - Assert.NotNull(backgroundPage); - Assert.Contains(backgroundPage, context.BackgroundPages.ToList()); - Assert.False(context.Pages.Contains(backgroundPage)); - await context.CloseAsync(); - Assert.IsEmpty(context.Pages); - Assert.IsEmpty(context.BackgroundPages); - } - - [PlaywrightTest("chromium/launcher.spec.ts", "should return background pages when recording video")] - [Skip(SkipAttribute.Targets.Webkit, SkipAttribute.Targets.Firefox)] - public async Task ShouldReturnBackgroundPagesWhenRecordingVideo() - { - using var tempDirectory = new TempDirectory(); - using var userDataDir = new TempDirectory(); - var extensionPath = TestUtils.GetAsset("simple-extension"); - var extensionOptions = new BrowserTypeLaunchPersistentContextOptions - { - Headless = false, - Args = new[] { - $"--disable-extensions-except={extensionPath}", - $"--load-extension={extensionPath}", - }, - RecordVideoDir = tempDirectory.Path, - }; - var context = await BrowserType.LaunchPersistentContextAsync(userDataDir.Path, extensionOptions); - var backgroundPages = context.BackgroundPages; - - var backgroundPage = backgroundPages.Count > 0 - ? backgroundPages[0] - : await WaitForBackgroundPage(context); - Assert.NotNull(backgroundPage); - Assert.Contains(backgroundPage, context.BackgroundPages.ToList()); - Assert.False(context.Pages.Contains(backgroundPage)); - await context.CloseAsync(); - } - - private async Task WaitForBackgroundPage(IBrowserContext context) - { - var tsc = new TaskCompletionSource(); - context.BackgroundPage += (_, e) => tsc.TrySetResult(e); - return await tsc.Task; - } -} diff --git a/src/Playwright.Tests/InterceptionTests.cs b/src/Playwright.Tests/InterceptionTests.cs index 8bd629f16a..14cb129bf7 100644 --- a/src/Playwright.Tests/InterceptionTests.cs +++ b/src/Playwright.Tests/InterceptionTests.cs @@ -88,6 +88,13 @@ bool URLMatches(string baseURL, string url, string glob) Assert.True(URLMatches("http://playwright.dev", "http://playwright.dev/?x=y", "?x=y")); Assert.True(URLMatches("http://playwright.dev/foo/", "http://playwright.dev/foo/bar?x=y", "./bar?x=y")); + // Case insensitive matching + Assert.True(URLMatches(null, "https://playwright.dev/fooBAR", "HtTpS://pLaYwRiGhT.dEv/fooBAR")); + Assert.True(URLMatches("http://ignored", "https://playwright.dev/fooBAR", "HtTpS://pLaYwRiGhT.dEv/fooBAR")); + // Path and search query are case-sensitive + Assert.False(URLMatches(null, "https://playwright.dev/foobar", "https://playwright.dev/fooBAR")); + Assert.False(URLMatches(null, "https://playwright.dev/foobar?a=b", "https://playwright.dev/foobar?A=B")); + // This is not supported, we treat ? as a query separator. Assert.That("http://localhost:8080/Simple/path.js", Does.Not.Match(GlobToRegex("http://localhost:8080/?imple/path.js"))); Assert.False(URLMatches(null, "http://playwright.dev/", "http://playwright.?ev")); diff --git a/src/Playwright.Tests/assets/simple-extension/content-script.js b/src/Playwright.Tests/assets/simple-extension/content-script.js deleted file mode 100644 index 965f99fd3d..0000000000 --- a/src/Playwright.Tests/assets/simple-extension/content-script.js +++ /dev/null @@ -1,3 +0,0 @@ -console.log('hey from the content-script'); -self.thisIsTheContentScript = true; - diff --git a/src/Playwright.Tests/assets/simple-extension/index.js b/src/Playwright.Tests/assets/simple-extension/index.js deleted file mode 100644 index a0bb3f4eae..0000000000 --- a/src/Playwright.Tests/assets/simple-extension/index.js +++ /dev/null @@ -1,2 +0,0 @@ -// Mock script for background extension -window.MAGIC = 42; diff --git a/src/Playwright.Tests/assets/simple-extension/manifest.json b/src/Playwright.Tests/assets/simple-extension/manifest.json deleted file mode 100644 index da2cd082ed..0000000000 --- a/src/Playwright.Tests/assets/simple-extension/manifest.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "Simple extension", - "version": "0.1", - "background": { - "scripts": ["index.js"] - }, - "content_scripts": [{ - "matches": [""], - "css": [], - "js": ["content-script.js"] - }], - "permissions": ["background", "activeTab"], - "manifest_version": 2 -} diff --git a/src/Playwright/API/Generated/IBrowserType.cs b/src/Playwright/API/Generated/IBrowserType.cs index 995fe9feff..54164dfe4e 100644 --- a/src/Playwright/API/Generated/IBrowserType.cs +++ b/src/Playwright/API/Generated/IBrowserType.cs @@ -174,6 +174,12 @@ public partial interface IBrowserType /// seen at chrome://version. /// Note that browsers do not allow launching multiple instances with the same User /// Data Directory. + /// Chromium/Chrome: Due to recent Chrome policy changes, automating the default Chrome + /// user profile is not supported. Pointing userDataDir to Chrome's main "User + /// Data" directory (the profile used for your regular browsing) may result in pages + /// not loading or the browser exiting. Create and use a separate directory (for example, + /// an empty folder) as your automation profile instead. See https://developer.chrome.com/blog/remote-debugging-port + /// for details. /// /// Call options Task LaunchPersistentContextAsync(string userDataDir, BrowserTypeLaunchPersistentContextOptions? options = default); diff --git a/src/Playwright/API/Generated/IPage.cs b/src/Playwright/API/Generated/IPage.cs index e4e19664c7..ea9ae6fbc5 100644 --- a/src/Playwright/API/Generated/IPage.cs +++ b/src/Playwright/API/Generated/IPage.cs @@ -1582,7 +1582,7 @@ public partial interface IPage /// /// /// Pauses script execution. Playwright will stop executing the script and wait for - /// the user to either press 'Resume' button in the page overlay or to call playwright.resume() + /// the user to either press the 'Resume' button in the page overlay or to call playwright.resume() /// in the DevTools console. /// /// diff --git a/src/Playwright/API/Generated/Options/APIRequestNewContextOptions.cs b/src/Playwright/API/Generated/Options/APIRequestNewContextOptions.cs index c4ff393442..71068b6e15 100644 --- a/src/Playwright/API/Generated/Options/APIRequestNewContextOptions.cs +++ b/src/Playwright/API/Generated/Options/APIRequestNewContextOptions.cs @@ -91,6 +91,12 @@ public APIRequestNewContextOptions(APIRequestNewContextOptions clone) /// that the certificate is valid for. /// /// + /// Client certificate authentication is only active when at least one client certificate + /// is provided. If you want to reject all client certificates sent by the server, you + /// need to provide a client certificate with an origin that does not match any + /// of the domains you plan to visit. + /// + /// /// When using WebKit on macOS, accessing localhost will not pick up client certificates. /// You can make it work by replacing localhost with local.playwright. /// diff --git a/src/Playwright/API/Generated/Options/BrowserNewContextOptions.cs b/src/Playwright/API/Generated/Options/BrowserNewContextOptions.cs index 5a671f9297..da6d9e9fe8 100644 --- a/src/Playwright/API/Generated/Options/BrowserNewContextOptions.cs +++ b/src/Playwright/API/Generated/Options/BrowserNewContextOptions.cs @@ -131,6 +131,12 @@ public BrowserNewContextOptions(BrowserNewContextOptions clone) /// that the certificate is valid for. /// /// + /// Client certificate authentication is only active when at least one client certificate + /// is provided. If you want to reject all client certificates sent by the server, you + /// need to provide a client certificate with an origin that does not match any + /// of the domains you plan to visit. + /// + /// /// When using WebKit on macOS, accessing localhost will not pick up client certificates. /// You can make it work by replacing localhost with local.playwright. /// diff --git a/src/Playwright/API/Generated/Options/BrowserNewPageOptions.cs b/src/Playwright/API/Generated/Options/BrowserNewPageOptions.cs index be99eb6f5e..71f9550be2 100644 --- a/src/Playwright/API/Generated/Options/BrowserNewPageOptions.cs +++ b/src/Playwright/API/Generated/Options/BrowserNewPageOptions.cs @@ -131,6 +131,12 @@ public BrowserNewPageOptions(BrowserNewPageOptions clone) /// that the certificate is valid for. /// /// + /// Client certificate authentication is only active when at least one client certificate + /// is provided. If you want to reject all client certificates sent by the server, you + /// need to provide a client certificate with an origin that does not match any + /// of the domains you plan to visit. + /// + /// /// When using WebKit on macOS, accessing localhost will not pick up client certificates. /// You can make it work by replacing localhost with local.playwright. /// diff --git a/src/Playwright/API/Generated/Options/BrowserTypeLaunchPersistentContextOptions.cs b/src/Playwright/API/Generated/Options/BrowserTypeLaunchPersistentContextOptions.cs index 1b05b92571..83ff8f0828 100644 --- a/src/Playwright/API/Generated/Options/BrowserTypeLaunchPersistentContextOptions.cs +++ b/src/Playwright/API/Generated/Options/BrowserTypeLaunchPersistentContextOptions.cs @@ -181,6 +181,12 @@ public BrowserTypeLaunchPersistentContextOptions(BrowserTypeLaunchPersistentCont /// that the certificate is valid for. /// /// + /// Client certificate authentication is only active when at least one client certificate + /// is provided. If you want to reject all client certificates sent by the server, you + /// need to provide a client certificate with an origin that does not match any + /// of the domains you plan to visit. + /// + /// /// When using WebKit on macOS, accessing localhost will not pick up client certificates. /// You can make it work by replacing localhost with local.playwright. /// diff --git a/src/Playwright/Helpers/URLMatch.cs b/src/Playwright/Helpers/URLMatch.cs index 86f8c4dfe0..a2b07b6b46 100644 --- a/src/Playwright/Helpers/URLMatch.cs +++ b/src/Playwright/Helpers/URLMatch.cs @@ -90,11 +90,7 @@ internal static string ConstructURLBasedOnBaseURL(string? baseUrl, string url) { try { - if (string.IsNullOrEmpty(baseUrl)) - { - return FixupTrailingSlash(new Uri(url, UriKind.Absolute)).ToString(); - } - return FixupTrailingSlash(new Uri(new Uri(baseUrl), new Uri(url, UriKind.RelativeOrAbsolute))).ToString(); + return ResolveBaseURL(baseUrl, url).Resolved; } catch { @@ -254,16 +250,45 @@ string MapToken(string original, string replacement) return newPrefix + newSuffix; })); - var resolved = ConstructURLBasedOnBaseURL(baseURL, relativePath); + var (resolved, caseInsensitivePart) = ResolveBaseURL(baseURL, relativePath); foreach (var kvp in tokenMap) { - resolved = resolved.Replace(kvp.Key, kvp.Value); + var normalize = caseInsensitivePart?.Contains(kvp.Key) == true; + resolved = resolved.Replace(kvp.Key, normalize ? kvp.Value.ToLowerInvariant() : kvp.Value); } match = resolved; } return match; } + private static (string Resolved, string? CaseInsensitivePart) ResolveBaseURL(string? baseUrl, string url) + { + try + { + Uri uri; + if (string.IsNullOrEmpty(baseUrl)) + { + uri = FixupTrailingSlash(new Uri(url, UriKind.Absolute)); + } + else + { + uri = FixupTrailingSlash(new Uri(new Uri(baseUrl), new Uri(url, UriKind.RelativeOrAbsolute))); + } + var resolved = uri.ToString(); + // Schema and domain are case-insensitive. + var caseInsensitivePrefix = $"{uri.Scheme}://{uri.Host}"; + if (!uri.IsDefaultPort) + { + caseInsensitivePrefix += $":{uri.Port}"; + } + return (resolved, caseInsensitivePrefix); + } + catch + { + return (url, null); + } + } + public bool Equals(string? globMatch, Regex? reMatch, Func? funcMatch, string? baseURL, bool isWebSocketUrl) { return this.re?.ToString() == reMatch?.ToString() && this.re?.Options == reMatch?.Options diff --git a/src/Playwright/Transport/Protocol/Generated/Point.cs b/src/Playwright/Transport/Protocol/Generated/Point.cs index ea299e7093..2366cddfc8 100644 --- a/src/Playwright/Transport/Protocol/Generated/Point.cs +++ b/src/Playwright/Transport/Protocol/Generated/Point.cs @@ -29,8 +29,8 @@ namespace Microsoft.Playwright.Transport.Protocol; internal class Point { [JsonPropertyName("x")] - public int X { get; set; } + public float X { get; set; } [JsonPropertyName("y")] - public int Y { get; set; } + public float Y { get; set; } } diff --git a/src/Playwright/Transport/Protocol/Generated/Rect.cs b/src/Playwright/Transport/Protocol/Generated/Rect.cs index 22069d2178..9c618dee21 100644 --- a/src/Playwright/Transport/Protocol/Generated/Rect.cs +++ b/src/Playwright/Transport/Protocol/Generated/Rect.cs @@ -29,14 +29,14 @@ namespace Microsoft.Playwright.Transport.Protocol; internal class Rect { [JsonPropertyName("x")] - public int X { get; set; } + public float X { get; set; } [JsonPropertyName("y")] - public int Y { get; set; } + public float Y { get; set; } [JsonPropertyName("width")] - public int Width { get; set; } + public float Width { get; set; } [JsonPropertyName("height")] - public int Height { get; set; } + public float Height { get; set; } } diff --git a/src/Playwright/Transport/Protocol/Generated/ResourceTiming.cs b/src/Playwright/Transport/Protocol/Generated/ResourceTiming.cs index ef23b8065d..228ce39e64 100644 --- a/src/Playwright/Transport/Protocol/Generated/ResourceTiming.cs +++ b/src/Playwright/Transport/Protocol/Generated/ResourceTiming.cs @@ -29,26 +29,26 @@ namespace Microsoft.Playwright.Transport.Protocol; internal class ResourceTiming { [JsonPropertyName("startTime")] - public int StartTime { get; set; } + public float StartTime { get; set; } [JsonPropertyName("domainLookupStart")] - public int DomainLookupStart { get; set; } + public float DomainLookupStart { get; set; } [JsonPropertyName("domainLookupEnd")] - public int DomainLookupEnd { get; set; } + public float DomainLookupEnd { get; set; } [JsonPropertyName("connectStart")] - public int ConnectStart { get; set; } + public float ConnectStart { get; set; } [JsonPropertyName("secureConnectionStart")] - public int SecureConnectionStart { get; set; } + public float SecureConnectionStart { get; set; } [JsonPropertyName("connectEnd")] - public int ConnectEnd { get; set; } + public float ConnectEnd { get; set; } [JsonPropertyName("requestStart")] - public int RequestStart { get; set; } + public float RequestStart { get; set; } [JsonPropertyName("responseStart")] - public int ResponseStart { get; set; } + public float ResponseStart { get; set; } } diff --git a/src/Playwright/Transport/Protocol/Generated/SecurityDetails.cs b/src/Playwright/Transport/Protocol/Generated/SecurityDetails.cs index 67b115c1a7..c42a293f69 100644 --- a/src/Playwright/Transport/Protocol/Generated/SecurityDetails.cs +++ b/src/Playwright/Transport/Protocol/Generated/SecurityDetails.cs @@ -38,8 +38,8 @@ internal class SecurityDetails public string SubjectName { get; set; } = null!; [JsonPropertyName("validFrom")] - public int? ValidFrom { get; set; } + public float ValidFrom { get; set; } [JsonPropertyName("validTo")] - public int? ValidTo { get; set; } + public float ValidTo { get; set; } } diff --git a/src/Playwright/Transport/Protocol/Generated/SerializedValue.cs b/src/Playwright/Transport/Protocol/Generated/SerializedValue.cs index 65c9c3c1bb..a54cb1732f 100644 --- a/src/Playwright/Transport/Protocol/Generated/SerializedValue.cs +++ b/src/Playwright/Transport/Protocol/Generated/SerializedValue.cs @@ -30,7 +30,7 @@ namespace Microsoft.Playwright.Transport.Protocol; internal class SerializedValue { [JsonPropertyName("n")] - public int? N { get; set; } + public float N { get; set; } [JsonPropertyName("b")] public bool? B { get; set; }