How do I clear the cache and cookies for an embedded Chromium browser?
DCEF1:
To delete cookies in DCEF1 wrapper there's the DeleteCookies
function in ICefCookieManager
manager interface. However, I've tried the following code to delete all cookies, but it always failed to me:
procedure TForm1.Button1Click(Sender: TObject);
var
CookieManager: ICefCookieManager;
begin
CookieManager := TCefCookieManagerRef.GetGlobalManager;
if not CookieManager.DeleteCookies('', '') then
ShowMessage('DeleteCookies failed!');
end;
Fortunately, there is another option to delete cookies using this cookie manager. Visit all of them and in the visitor function assign True to the deleteCookie
output parameter. Be careful with getting cookie manager, it's created the first time you navigate somewhere (the GetGlobalManager
class function is unsafe, it's not properly handled for unexpected result), so be sure you'll use this code after navigation:
procedure TForm1.Button1Click(Sender: TObject);
var
CookieManager: ICefCookieManager;
begin
CookieManager := TCefCookieManagerRef.GetGlobalManager;
CookieManager.VisitAllCookiesProc(
function(const name, value, domain, path: ustring; secure, httponly,
hasExpires: Boolean; const creation, lastAccess, expires: TDateTime;
count, total: Integer; out deleteCookie: Boolean): Boolean
begin
deleteCookie := True;
ShowMessage('A cookie from domain ' + domain + ' will be unmercifully ' +
'deleted!');
end
);
end;
DCEF3:
In DCEF3 wrapper you can use the following. Credit goes to Eric Santos:
type
CefTask = class(TCefTaskOwn)
procedure Execute; override;
end;
procedure CefTask.Execute;
var
CookieManager: ICefCookieManager;
begin
CookieManager := TCefCookieManagerRef.Global;
CookieManager.DeleteCookies('', '');
end;
procedure ClearCookies;
var
Task: CefTask;
begin
Task := CefTask.Create;
CefPostTask(TID_IO, Task);
end;