Skip to content

Commit 8c6b30b

Browse files
authored
fix: CookiesAsync regression accepting null (#3162)
1 parent 27cc6b1 commit 8c6b30b

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

src/Playwright.Tests/BrowserContextCookiesTests.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,4 +199,37 @@ await Context.AddCookiesAsync(new[]
199199
Assert.IsTrue(cookie.Secure);
200200
Assert.AreEqual(DefaultSameSiteCookieValue, cookie.SameSite);
201201
}
202+
203+
[PlaywrightTest("browsercontext-cookies.spec.ts", "should get cookies from single urls")]
204+
public async Task ShouldGetCookiesFromSingleUrl()
205+
{
206+
await Context.AddCookiesAsync(
207+
[
208+
new Cookie
209+
{
210+
Url = "https://foo.com",
211+
Name = "doggo",
212+
Value = "woofs"
213+
},
214+
]);
215+
216+
void ValidateCookies(IReadOnlyList<BrowserContextCookiesResult> cookies)
217+
{
218+
Assert.AreEqual(1, cookies.Count);
219+
var cookie = cookies[0];
220+
Assert.AreEqual("doggo", cookie.Name);
221+
Assert.AreEqual("woofs", cookie.Value);
222+
Assert.AreEqual("foo.com", cookie.Domain);
223+
Assert.AreEqual("/", cookie.Path);
224+
Assert.AreEqual(cookie.Expires, -1);
225+
Assert.IsFalse(cookie.HttpOnly);
226+
Assert.IsTrue(cookie.Secure);
227+
Assert.AreEqual(DefaultSameSiteCookieValue, cookie.SameSite);
228+
}
229+
230+
ValidateCookies(await Context.CookiesAsync("https://foo.com"));
231+
ValidateCookies(await Context.CookiesAsync(null as string));
232+
ValidateCookies(await Context.CookiesAsync(null as string[]));
233+
ValidateCookies(await Context.CookiesAsync([]));
234+
}
202235
}

src/Playwright/Core/BrowserContext.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,14 +379,14 @@ internal void SetOptions(BrowserNewContextOptions contextOptions, string tracesD
379379
public Task<IReadOnlyList<BrowserContextCookiesResult>> CookiesAsync() => CookiesAsync(Array.Empty<string>());
380380

381381
[MethodImpl(MethodImplOptions.NoInlining)]
382-
public Task<IReadOnlyList<BrowserContextCookiesResult>> CookiesAsync(string url) => CookiesAsync(new string[] { url });
382+
public Task<IReadOnlyList<BrowserContextCookiesResult>> CookiesAsync(string url) => CookiesAsync(string.IsNullOrEmpty(url) ? null : [url]);
383383

384384
[MethodImpl(MethodImplOptions.NoInlining)]
385385
public async Task<IReadOnlyList<BrowserContextCookiesResult>> CookiesAsync(IEnumerable<string> urls) => (await SendMessageToServerAsync(
386386
"cookies",
387387
new Dictionary<string, object>
388388
{
389-
["urls"] = urls.ToArray(),
389+
["urls"] = urls ?? [],
390390
}).ConfigureAwait(false))?.GetProperty("cookies").ToObject<IReadOnlyList<BrowserContextCookiesResult>>();
391391

392392
[MethodImpl(MethodImplOptions.NoInlining)]

0 commit comments

Comments
 (0)