Skip to content

Commit 6421ded

Browse files
authored
[dotnet] [bidi] Adjust cookie expiry type according spec (unix seconds) (#16218)
1 parent 934d13a commit 6421ded

File tree

6 files changed

+22
-49
lines changed

6 files changed

+22
-49
lines changed

dotnet/src/webdriver/BiDi/Communication/Broker.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ internal Broker(BiDi bidi, Uri url)
8484
new RealmConverter(_bidi),
8585
new RealmTypeConverter(),
8686
new DateTimeOffsetConverter(),
87-
new TimeSpanConverter(),
8887
new PrintPageRangeConverter(),
8988
new InputOriginConverter(),
9089
new WebExtensionConverter(_bidi),

dotnet/src/webdriver/BiDi/Communication/Json/Converters/DateTimeOffsetConverter.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,24 @@ internal class DateTimeOffsetConverter : JsonConverter<DateTimeOffset>
2727
{
2828
public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
2929
{
30-
return DateTimeOffset.FromUnixTimeMilliseconds(reader.GetInt64());
30+
return DateTimeOffset.FromUnixTimeMilliseconds((long)reader.GetDouble()); // still might get a double
3131
}
3232

3333
public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
3434
{
3535
writer.WriteNumberValue(value.ToUnixTimeMilliseconds());
3636
}
3737
}
38+
39+
internal class DateTimeOffsetSecondsConverter : JsonConverter<DateTimeOffset>
40+
{
41+
public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
42+
{
43+
return DateTimeOffset.FromUnixTimeSeconds((long)reader.GetDouble()); // still might get a double
44+
}
45+
46+
public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
47+
{
48+
writer.WriteNumberValue(value.ToUnixTimeSeconds());
49+
}
50+
}

dotnet/src/webdriver/BiDi/Communication/Json/Converters/TimeSpanConverter.cs

Lines changed: 0 additions & 44 deletions
This file was deleted.

dotnet/src/webdriver/BiDi/Network/Cookie.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@
1717
// under the License.
1818
// </copyright>
1919

20+
using OpenQA.Selenium.BiDi.Communication.Json.Converters;
2021
using System;
22+
using System.Text.Json.Serialization;
2123

2224
namespace OpenQA.Selenium.BiDi.Network;
2325

24-
public sealed record Cookie(string Name, BytesValue Value, string Domain, string Path, long Size, bool HttpOnly, bool Secure, SameSite SameSite, TimeSpan? Expiry);
26+
public sealed record Cookie(string Name, BytesValue Value, string Domain, string Path, long Size, bool HttpOnly, bool Secure, SameSite SameSite, [property: JsonConverter(typeof(DateTimeOffsetSecondsConverter))] DateTimeOffset? Expiry);
2527

2628
public enum SameSite
2729
{

dotnet/src/webdriver/BiDi/Storage/SetCookieCommand.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
// </copyright>
1919

2020
using OpenQA.Selenium.BiDi.Communication;
21+
using OpenQA.Selenium.BiDi.Communication.Json.Converters;
2122
using System;
23+
using System.Text.Json.Serialization;
2224

2325
namespace OpenQA.Selenium.BiDi.Storage;
2426

@@ -37,6 +39,7 @@ public sealed record PartialCookie(string Name, Network.BytesValue Value, string
3739

3840
public Network.SameSite? SameSite { get; set; }
3941

42+
[JsonConverter(typeof(DateTimeOffsetSecondsConverter))]
4043
public DateTimeOffset? Expiry { get; set; }
4144
}
4245

dotnet/test/common/BiDi/Storage/StorageTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public async Task CanAddAndGetCookie()
8181
{
8282
driver.Url = UrlBuilder.WhereIs("animals");
8383

84-
var expiry = DateTime.Now.AddDays(1);
84+
var expiry = DateTimeOffset.Now.AddDays(1);
8585

8686
await context.Storage.SetCookieAsync(new("fish", "cod", UrlBuilder.HostName)
8787
{
@@ -106,7 +106,7 @@ await context.Storage.SetCookieAsync(new("fish", "cod", UrlBuilder.HostName)
106106
Assert.That(cookie.Secure, Is.False);
107107
Assert.That(cookie.SameSite, Is.EqualTo(SameSite.Lax));
108108
Assert.That(cookie.Size, Is.EqualTo(7));
109-
// Assert.That(cookie.Expiry, Is.EqualTo(expiry)); // chrome issue
109+
Assert.That(cookie.Expiry, Is.EqualTo(expiry).Within(1).Seconds);
110110
}
111111

112112
[Test]

0 commit comments

Comments
 (0)