2017-01-27 17:29:37 +01:00
|
|
|
unit uCEFCookieVisitor;
|
|
|
|
|
2018-05-12 14:50:54 +02:00
|
|
|
{$IFDEF FPC}
|
|
|
|
{$MODE OBJFPC}{$H+}
|
|
|
|
{$ENDIF}
|
|
|
|
|
2017-02-05 20:56:46 +01:00
|
|
|
{$I cef.inc}
|
|
|
|
|
2022-02-19 18:56:41 +01:00
|
|
|
{$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF}
|
|
|
|
{$MINENUMSIZE 4}
|
|
|
|
|
2017-01-27 17:29:37 +01:00
|
|
|
interface
|
|
|
|
|
|
|
|
uses
|
2017-03-16 19:09:42 +01:00
|
|
|
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
|
2017-01-27 17:29:37 +01:00
|
|
|
|
|
|
|
type
|
2017-03-16 19:09:42 +01:00
|
|
|
TCefCookieVisitorOwn = class(TCefBaseRefCountedOwn, ICefCookieVisitor)
|
2017-01-27 17:29:37 +01:00
|
|
|
protected
|
2020-05-23 15:00:44 +02:00
|
|
|
function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean; virtual;
|
2017-01-27 17:29:37 +01:00
|
|
|
|
|
|
|
public
|
|
|
|
constructor Create; virtual;
|
|
|
|
end;
|
|
|
|
|
|
|
|
TCefFastCookieVisitor = class(TCefCookieVisitorOwn)
|
|
|
|
protected
|
|
|
|
FVisitor: TCefCookieVisitorProc;
|
|
|
|
|
2020-05-23 15:00:44 +02:00
|
|
|
function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean; override;
|
2017-01-27 17:29:37 +01:00
|
|
|
|
|
|
|
public
|
|
|
|
constructor Create(const visitor: TCefCookieVisitorProc); reintroduce;
|
|
|
|
end;
|
|
|
|
|
2019-10-29 16:13:35 +01:00
|
|
|
TCefCustomCookieVisitor = class(TCefCookieVisitorOwn)
|
|
|
|
protected
|
|
|
|
FEvents : Pointer;
|
|
|
|
FID : integer;
|
|
|
|
|
2020-05-23 15:00:44 +02:00
|
|
|
function visit(const name, value, domain, path: ustring; secure, httponly, hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; count, total: Integer; same_site : TCefCookieSameSite; priority : TCefCookiePriority; out deleteCookie: Boolean): Boolean; override;
|
2019-10-29 16:13:35 +01:00
|
|
|
|
|
|
|
public
|
|
|
|
constructor Create(const aEvents : IChromiumEvents; aID : integer); reintroduce;
|
|
|
|
destructor Destroy; override;
|
|
|
|
end;
|
|
|
|
|
2017-01-27 17:29:37 +01:00
|
|
|
implementation
|
|
|
|
|
|
|
|
uses
|
2019-10-29 16:13:35 +01:00
|
|
|
{$IFDEF DELPHI16_UP}
|
|
|
|
System.SysUtils,
|
|
|
|
{$ELSE}
|
|
|
|
SysUtils,
|
|
|
|
{$ENDIF}
|
2017-01-27 17:29:37 +01:00
|
|
|
uCEFMiscFunctions, uCEFLibFunctions;
|
|
|
|
|
2020-05-23 15:00:44 +02:00
|
|
|
function cef_cookie_visitor_visit( self : PCefCookieVisitor;
|
|
|
|
const cookie : PCefCookie;
|
|
|
|
count : Integer;
|
|
|
|
total : Integer;
|
|
|
|
deleteCookie : PInteger): Integer; stdcall;
|
2017-01-27 17:29:37 +01:00
|
|
|
var
|
2018-03-29 20:02:04 +02:00
|
|
|
delete : Boolean;
|
|
|
|
exp : TDateTime;
|
|
|
|
TempObject : TObject;
|
2017-01-27 17:29:37 +01:00
|
|
|
begin
|
2018-03-29 20:02:04 +02:00
|
|
|
delete := False;
|
|
|
|
Result := Ord(True);
|
|
|
|
TempObject := CefGetObject(self);
|
|
|
|
|
2018-05-12 14:50:54 +02:00
|
|
|
if (cookie^.has_expires <> 0) then
|
2022-09-04 19:18:07 +02:00
|
|
|
exp := CefBaseTimeToDateTime(cookie^.expires)
|
2018-03-29 20:02:04 +02:00
|
|
|
else
|
2017-01-27 17:29:37 +01:00
|
|
|
exp := 0;
|
2018-03-29 20:02:04 +02:00
|
|
|
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefCookieVisitorOwn) then
|
2018-05-12 14:50:54 +02:00
|
|
|
Result := Ord(TCefCookieVisitorOwn(TempObject).visit(CefString(@cookie^.name),
|
|
|
|
CefString(@cookie^.value),
|
|
|
|
CefString(@cookie^.domain),
|
|
|
|
CefString(@cookie^.path),
|
|
|
|
Boolean(cookie^.secure),
|
|
|
|
Boolean(cookie^.httponly),
|
|
|
|
Boolean(cookie^.has_expires),
|
2022-09-04 19:18:07 +02:00
|
|
|
CefBaseTimeToDateTime(cookie^.creation),
|
|
|
|
CefBaseTimeToDateTime(cookie^.last_access),
|
2018-03-29 20:02:04 +02:00
|
|
|
exp,
|
|
|
|
count,
|
|
|
|
total,
|
2020-05-23 15:00:44 +02:00
|
|
|
cookie^.same_site,
|
|
|
|
cookie^.priority,
|
2018-03-29 20:02:04 +02:00
|
|
|
delete));
|
|
|
|
|
2017-01-27 17:29:37 +01:00
|
|
|
deleteCookie^ := Ord(delete);
|
|
|
|
end;
|
|
|
|
|
|
|
|
// TCefCookieVisitorOwn
|
|
|
|
|
|
|
|
constructor TCefCookieVisitorOwn.Create;
|
|
|
|
begin
|
|
|
|
inherited CreateData(SizeOf(TCefCookieVisitor));
|
2018-03-29 20:02:04 +02:00
|
|
|
|
2018-05-12 14:50:54 +02:00
|
|
|
PCefCookieVisitor(FData)^.visit := {$IFDEF FPC}@{$ENDIF}cef_cookie_visitor_visit;
|
2017-01-27 17:29:37 +01:00
|
|
|
end;
|
|
|
|
|
|
|
|
function TCefCookieVisitorOwn.visit(const name, value, domain, path: ustring;
|
2018-03-29 20:02:04 +02:00
|
|
|
secure, httponly, hasExpires: Boolean;
|
|
|
|
const creation, lastAccess, expires: TDateTime;
|
|
|
|
count, total: Integer;
|
2020-05-23 15:00:44 +02:00
|
|
|
same_site : TCefCookieSameSite;
|
|
|
|
priority : TCefCookiePriority;
|
2018-03-29 20:02:04 +02:00
|
|
|
out deleteCookie: Boolean): Boolean;
|
2017-01-27 17:29:37 +01:00
|
|
|
begin
|
|
|
|
Result := True;
|
|
|
|
end;
|
|
|
|
|
|
|
|
// TCefFastCookieVisitor
|
|
|
|
|
|
|
|
constructor TCefFastCookieVisitor.Create(const visitor: TCefCookieVisitorProc);
|
|
|
|
begin
|
|
|
|
inherited Create;
|
2018-03-29 20:02:04 +02:00
|
|
|
|
2017-01-27 17:29:37 +01:00
|
|
|
FVisitor := visitor;
|
|
|
|
end;
|
|
|
|
|
|
|
|
function TCefFastCookieVisitor.visit(const name, value, domain, path: ustring;
|
2018-03-29 20:02:04 +02:00
|
|
|
secure, httponly, hasExpires: Boolean;
|
|
|
|
const creation, lastAccess, expires: TDateTime;
|
|
|
|
count, total: Integer;
|
2020-05-23 15:00:44 +02:00
|
|
|
same_site : TCefCookieSameSite;
|
|
|
|
priority : TCefCookiePriority;
|
2018-03-29 20:02:04 +02:00
|
|
|
out deleteCookie: Boolean): Boolean;
|
2017-01-27 17:29:37 +01:00
|
|
|
begin
|
|
|
|
Result := FVisitor(name, value, domain, path, secure, httponly, hasExpires,
|
2020-05-23 15:00:44 +02:00
|
|
|
creation, lastAccess, expires, count, total, same_site,
|
|
|
|
priority, deleteCookie);
|
2017-01-27 17:29:37 +01:00
|
|
|
end;
|
|
|
|
|
2019-10-29 16:13:35 +01:00
|
|
|
|
|
|
|
// TCefCustomCookieVisitor
|
|
|
|
|
|
|
|
constructor TCefCustomCookieVisitor.Create(const aEvents : IChromiumEvents; aID : integer);
|
|
|
|
begin
|
|
|
|
inherited Create;
|
|
|
|
|
|
|
|
FEvents := Pointer(aEvents);
|
|
|
|
FID := aID;
|
|
|
|
end;
|
|
|
|
|
|
|
|
destructor TCefCustomCookieVisitor.Destroy;
|
|
|
|
begin
|
2019-11-08 14:32:03 +01:00
|
|
|
try
|
|
|
|
try
|
|
|
|
if (FEvents <> nil) then
|
|
|
|
IChromiumEvents(FEvents).doOnCookieVisitorDestroyed(FID);
|
|
|
|
except
|
|
|
|
on e : exception do
|
|
|
|
if CustomExceptionHandler('TCefCustomCookieVisitor.Destroy', e) then raise;
|
|
|
|
end;
|
|
|
|
finally
|
|
|
|
FEvents := nil;
|
|
|
|
inherited Destroy;
|
|
|
|
end;
|
2019-10-29 16:13:35 +01:00
|
|
|
end;
|
|
|
|
|
|
|
|
function TCefCustomCookieVisitor.visit(const name, value, domain, path: ustring;
|
|
|
|
secure, httponly, hasExpires: Boolean;
|
|
|
|
const creation, lastAccess, expires: TDateTime;
|
|
|
|
count, total: Integer;
|
2020-05-23 15:00:44 +02:00
|
|
|
same_site : TCefCookieSameSite;
|
|
|
|
priority : TCefCookiePriority;
|
2019-10-29 16:13:35 +01:00
|
|
|
out deleteCookie: Boolean): Boolean;
|
|
|
|
var
|
|
|
|
TempDelete : boolean;
|
|
|
|
begin
|
|
|
|
Result := True;
|
|
|
|
TempDelete := False;
|
|
|
|
|
|
|
|
try
|
|
|
|
try
|
|
|
|
if (FEvents <> nil) then
|
|
|
|
IChromiumEvents(FEvents).doOnCookiesVisited(name, value, domain, path, secure, httponly, hasExpires,
|
2020-05-23 15:00:44 +02:00
|
|
|
creation, lastAccess, expires, count, total, FID,
|
|
|
|
same_site, priority, TempDelete, Result);
|
2019-10-29 16:13:35 +01:00
|
|
|
except
|
|
|
|
on e : exception do
|
|
|
|
if CustomExceptionHandler('TCefCustomCookieVisitor.visit', e) then raise;
|
|
|
|
end;
|
|
|
|
finally
|
|
|
|
deleteCookie := TempDelete;
|
|
|
|
end;
|
|
|
|
end;
|
|
|
|
|
2017-01-27 17:29:37 +01:00
|
|
|
end.
|