WVBrowser1GetCookiesCompleted
Posted: Fri Nov 01, 2024 4:01 pm
function TMainForm.GetSameSiteKindName(SameSiteKind: COREWEBVIEW2_COOKIE_SAME_SITE_KIND): string;
begin
case SameSiteKind of
COREWEBVIEW2_COOKIE_SAME_SITE_KIND_NONE:
Result := 'None';
COREWEBVIEW2_COOKIE_SAME_SITE_KIND_LAX:
Result := 'Lax';
COREWEBVIEW2_COOKIE_SAME_SITE_KIND_STRICT:
Result := 'Strict';
else
Result := '';
end;
end;
procedure TMainForm.WVBrowser1GetCookiesCompleted(Sender: TObject;
aErrorCode: HRESULT; const aResult: ICoreWebView2CookieList);
const
UnixEpoch = 25569.0;
SecsPerDay = 86400.0;
var
TempCookieList: TCoreWebView2CookieList;
TempCookie: TCoreWebView2Cookie;
CookieJson: TJSONObject;
i: Integer;
CookiesArray: TJSONArray;
ExpiresDateTime: TDateTime;
begin
if not Assigned(aResult) then Exit;
TempCookieList := nil;
TempCookie := nil;
CookiesArray := TJSONArray.Create;
try
TempCookieList := TCoreWebView2CookieList.Create(aResult);
for i := 0 to TempCookieList.Count - 1 do
begin
TempCookie := TCoreWebView2Cookie.Create(nil);
TempCookie.BaseIntf := TempCookieList.Items;
CookieJson := TJSONObject.Create;
try
CookieJson.AddPair('Name', TempCookie.Name);
CookieJson.AddPair('Value', TempCookie.Value);
CookieJson.AddPair('Domain', TempCookie.Domain);
CookieJson.AddPair('Path', TempCookie.Path);
if not TempCookie.IsSession then
begin
ExpiresDateTime := UnixEpoch + (TempCookie.Expires / SecsPerDay);
CookieJson.AddPair('Expires', FormatDateTime('yyyy-mm-dd"T"hh:nn:ss.zzz"Z"', ExpiresDateTime));
end
else
begin
CookieJson.AddPair('Expires', 'Session');
end;
CookieJson.AddPair('IsHttpOnly', TJSONBool.Create(TempCookie.IsHttpOnly));
CookieJson.AddPair('SameSite', GetSameSiteKindName(TempCookie.SameSite));
CookieJson.AddPair('IsSecure', TJSONBool.Create(TempCookie.IsSecure));
CookieJson.AddPair('IsSession', TJSONBool.Create(TempCookie.IsSession));
CookiesArray.AddElement(CookieJson);
except
CookieJson.Free;
raise;
end;
end;
finally
TempCookieList.Free;
TempCookie.Free;
CookiesArray.Free;
end;
end;
//WVBrowser1.GetCookies;
begin
case SameSiteKind of
COREWEBVIEW2_COOKIE_SAME_SITE_KIND_NONE:
Result := 'None';
COREWEBVIEW2_COOKIE_SAME_SITE_KIND_LAX:
Result := 'Lax';
COREWEBVIEW2_COOKIE_SAME_SITE_KIND_STRICT:
Result := 'Strict';
else
Result := '';
end;
end;
procedure TMainForm.WVBrowser1GetCookiesCompleted(Sender: TObject;
aErrorCode: HRESULT; const aResult: ICoreWebView2CookieList);
const
UnixEpoch = 25569.0;
SecsPerDay = 86400.0;
var
TempCookieList: TCoreWebView2CookieList;
TempCookie: TCoreWebView2Cookie;
CookieJson: TJSONObject;
i: Integer;
CookiesArray: TJSONArray;
ExpiresDateTime: TDateTime;
begin
if not Assigned(aResult) then Exit;
TempCookieList := nil;
TempCookie := nil;
CookiesArray := TJSONArray.Create;
try
TempCookieList := TCoreWebView2CookieList.Create(aResult);
for i := 0 to TempCookieList.Count - 1 do
begin
TempCookie := TCoreWebView2Cookie.Create(nil);
TempCookie.BaseIntf := TempCookieList.Items;
CookieJson := TJSONObject.Create;
try
CookieJson.AddPair('Name', TempCookie.Name);
CookieJson.AddPair('Value', TempCookie.Value);
CookieJson.AddPair('Domain', TempCookie.Domain);
CookieJson.AddPair('Path', TempCookie.Path);
if not TempCookie.IsSession then
begin
ExpiresDateTime := UnixEpoch + (TempCookie.Expires / SecsPerDay);
CookieJson.AddPair('Expires', FormatDateTime('yyyy-mm-dd"T"hh:nn:ss.zzz"Z"', ExpiresDateTime));
end
else
begin
CookieJson.AddPair('Expires', 'Session');
end;
CookieJson.AddPair('IsHttpOnly', TJSONBool.Create(TempCookie.IsHttpOnly));
CookieJson.AddPair('SameSite', GetSameSiteKindName(TempCookie.SameSite));
CookieJson.AddPair('IsSecure', TJSONBool.Create(TempCookie.IsSecure));
CookieJson.AddPair('IsSession', TJSONBool.Create(TempCookie.IsSession));
CookiesArray.AddElement(CookieJson);
except
CookieJson.Free;
raise;
end;
end;
finally
TempCookieList.Free;
TempCookie.Free;
CookiesArray.Free;
end;
end;
//WVBrowser1.GetCookies;