Skip to content

Commit 3a6af99

Browse files
committed
CefTime.GetDoubleT returns invalid .Net date
Issue #2283
1 parent 6bb467c commit 3a6af99

File tree

4 files changed

+75
-15
lines changed

4 files changed

+75
-15
lines changed

CefSharp.BrowserSubprocess.Core/TypeUtils.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,13 @@ namespace CefSharp
254254

255255
DateTime TypeUtils::ConvertCefTimeToDateTime(CefTime time)
256256
{
257-
return DateTimeUtils::FromCefTime(time.GetDoubleT());
257+
return DateTimeUtils::FromCefTime(time.year,
258+
time.month,
259+
time.day_of_month,
260+
time.hour,
261+
time.minute,
262+
time.second,
263+
time.millisecond);
258264
}
259265

260266
CefTime TypeUtils::ConvertDateTimeToCefTime(DateTime dateTime)

CefSharp.Core/Internals/CookieVisitor.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,34 @@ namespace CefSharp
2323

2424
if (cefCookie.has_expires)
2525
{
26-
cookie->Expires = DateTimeUtils::FromCefTime(CefTime(cefCookie.expires).GetDoubleT());
26+
auto expires = cefCookie.expires;
27+
cookie->Expires = DateTimeUtils::FromCefTime(expires.year,
28+
expires.month,
29+
expires.day_of_month,
30+
expires.hour,
31+
expires.minute,
32+
expires.second,
33+
expires.millisecond);
2734
}
2835

29-
cookie->Creation = DateTimeUtils::FromCefTime(CefTime(cefCookie.creation).GetDoubleT());
30-
cookie->LastAccess = DateTimeUtils::FromCefTime(CefTime(cefCookie.last_access).GetDoubleT());
36+
37+
auto creation = cefCookie.creation;
38+
cookie->Creation = DateTimeUtils::FromCefTime(creation.year,
39+
creation.month,
40+
creation.day_of_month,
41+
creation.hour,
42+
creation.minute,
43+
creation.second,
44+
creation.millisecond);
45+
46+
auto lastAccess = cefCookie.last_access;
47+
cookie->LastAccess = DateTimeUtils::FromCefTime(lastAccess.year,
48+
lastAccess.month,
49+
lastAccess.day_of_month,
50+
lastAccess.hour,
51+
lastAccess.minute,
52+
lastAccess.second,
53+
lastAccess.millisecond);
3154
}
3255

3356
return _visitor->Visit(cookie, count, total, deleteCookie);

CefSharp.Core/ResourceHandlerWrapper.cpp

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,33 @@ namespace CefSharp
7979

8080
if (cefCookie.has_expires)
8181
{
82-
cookie->Expires = DateTimeUtils::FromCefTime(CefTime(cefCookie.expires).GetDoubleT());
82+
auto expires = cefCookie.expires;
83+
cookie->Expires = DateTimeUtils::FromCefTime(expires.year,
84+
expires.month,
85+
expires.day_of_month,
86+
expires.hour,
87+
expires.minute,
88+
expires.second,
89+
expires.millisecond);
8390
}
84-
85-
cookie->Creation = DateTimeUtils::FromCefTime(CefTime(cefCookie.creation).GetDoubleT());
86-
cookie->LastAccess = DateTimeUtils::FromCefTime(CefTime(cefCookie.last_access).GetDoubleT());
91+
92+
auto creation = cefCookie.creation;
93+
cookie->Creation = DateTimeUtils::FromCefTime(creation.year,
94+
creation.month,
95+
creation.day_of_month,
96+
creation.hour,
97+
creation.minute,
98+
creation.second,
99+
creation.millisecond);
100+
101+
auto lastAccess = cefCookie.last_access;
102+
cookie->LastAccess = DateTimeUtils::FromCefTime(lastAccess.year,
103+
lastAccess.month,
104+
lastAccess.day_of_month,
105+
lastAccess.hour,
106+
lastAccess.minute,
107+
lastAccess.second,
108+
lastAccess.millisecond);
87109
}
88110

89111
return cookie;

CefSharp/Internals/DateTimeUtils.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,26 @@ public static class DateTimeUtils
1212
private static DateTime FirstOfTheFirstNineteenSeventy = new DateTime(1970, 1, 1, 0, 0, 0);
1313

1414
/// <summary>
15-
/// Takes the epoch and creates a <see cref="DateTime"/>
15+
/// Converts a cef
1616
/// </summary>
17-
/// <param name="epoch">cef datetime represented as difference between 01/01/1970</param>
18-
/// <returns></returns>
19-
public static DateTime FromCefTime(double epoch)
17+
/// <param name="year">year</param>
18+
/// <param name="month">month</param>
19+
/// <param name="day">day</param>
20+
/// <param name="hour">hour</param>
21+
/// <param name="minute">minute</param>
22+
/// <param name="second">second</param>
23+
/// <param name="millisecond">millisecond</param>
24+
/// <returns>DateTime</returns>
25+
public static DateTime FromCefTime(int year, int month, int day, int hour, int minute, int second, int millisecond)
2026
{
21-
if (epoch > 0)
27+
try
2228
{
23-
return FirstOfTheFirstNineteenSeventy.AddSeconds(epoch).ToLocalTime();
29+
return new DateTime(year, month, day, hour, minute, second, millisecond);
30+
}
31+
catch(Exception)
32+
{
33+
return DateTime.MinValue;
2434
}
25-
return DateTime.MinValue;
2635
}
2736

2837
/// <summary>

0 commit comments

Comments
 (0)