CEF4Delphi/source/uCEFExtensionHandler.pas
salvadordf ca8bc9dff4 Added cef4delphi.chm help file
Added the PDS file to extract the HTML Help files using PasDoc
Added more XML documentation
Fixed some XML errors.
Removed the license copy from the pas units.
Updated the LICENSE.md file
2023-08-09 19:38:57 +02:00

573 lines
26 KiB
ObjectPascal

unit uCEFExtensionHandler;
{$IFDEF FPC}
{$MODE OBJFPC}{$H+}
{$ENDIF}
{$I cef.inc}
{$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF}
{$MINENUMSIZE 4}
interface
uses
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
type
TCefExtensionHandlerRef = class(TCefBaseRefCountedRef, ICefExtensionHandler)
protected
procedure OnExtensionLoadFailed(result: TCefErrorcode);
procedure OnExtensionLoaded(const extension: ICefExtension);
procedure OnExtensionUnloaded(const extension: ICefExtension);
function OnBeforeBackgroundBrowser(const extension: ICefExtension; const url: ustring; var client: ICefClient; var settings: TCefBrowserSettings) : boolean;
function OnBeforeBrowser(const extension: ICefExtension; const browser, active_browser: ICefBrowser; index: Integer; const url: ustring; active: boolean; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings) : boolean;
procedure GetActiveBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; var aRsltBrowser: ICefBrowser);
function CanAccessBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser): boolean;
function GetExtensionResource(const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback): boolean;
procedure RemoveReferences;
public
class function UnWrap(data: Pointer): ICefExtensionHandler;
end;
TCefExtensionHandlerOwn = class(TCefBaseRefCountedOwn, ICefExtensionHandler)
protected
procedure OnExtensionLoadFailed(result: TCefErrorcode); virtual;
procedure OnExtensionLoaded(const extension: ICefExtension); virtual;
procedure OnExtensionUnloaded(const extension: ICefExtension); virtual;
function OnBeforeBackgroundBrowser(const extension: ICefExtension; const url: ustring; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; virtual;
function OnBeforeBrowser(const extension: ICefExtension; const browser, active_browser: ICefBrowser; index: Integer; const url: ustring; active: boolean; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; virtual;
procedure GetActiveBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; var aRsltBrowser: ICefBrowser); virtual;
function CanAccessBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser): boolean; virtual;
function GetExtensionResource(const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback): boolean; virtual;
procedure RemoveReferences; virtual;
public
constructor Create; virtual;
end;
TCustomExtensionHandler = class(TCefExtensionHandlerOwn)
protected
FEvents : Pointer;
procedure OnExtensionLoadFailed(result: TCefErrorcode); override;
procedure OnExtensionLoaded(const extension: ICefExtension); override;
procedure OnExtensionUnloaded(const extension: ICefExtension); override;
function OnBeforeBackgroundBrowser(const extension: ICefExtension; const url: ustring; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; override;
function OnBeforeBrowser(const extension: ICefExtension; const browser, active_browser: ICefBrowser; index: Integer; const url: ustring; active: boolean; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings) : boolean; override;
procedure GetActiveBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; var aRsltBrowser: ICefBrowser); override;
function CanAccessBrowser(const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean; const target_browser: ICefBrowser): boolean; override;
function GetExtensionResource(const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback): boolean; override;
procedure RemoveReferences; override;
public
constructor Create(const events: IChromiumEvents); reintroduce;
destructor Destroy; override;
end;
implementation
uses
{$IFDEF DELPHI16_UP}
System.SysUtils,
{$ELSE}
SysUtils,
{$ENDIF}
uCEFMiscFunctions, uCEFLibFunctions, uCEFGetExtensionResourceCallback,
uCEFExtension, uCEFBrowser, uCEFClient;
// ***************************************************************************
// ************************ TCefExtensionHandlerRef **************************
// ***************************************************************************
procedure TCefExtensionHandlerRef.OnExtensionLoadFailed(result: TCefErrorcode);
begin
//
end;
procedure TCefExtensionHandlerRef.OnExtensionLoaded(const extension: ICefExtension);
begin
//
end;
procedure TCefExtensionHandlerRef.OnExtensionUnloaded(const extension: ICefExtension);
begin
//
end;
function TCefExtensionHandlerRef.OnBeforeBackgroundBrowser(const extension : ICefExtension;
const url : ustring;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean;
begin
Result := False;
end;
function TCefExtensionHandlerRef.OnBeforeBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
const active_browser : ICefBrowser;
index : Integer;
const url : ustring;
active : boolean;
var windowInfo : TCefWindowInfo;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean;
begin
Result := False;
end;
procedure TCefExtensionHandlerRef.GetActiveBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean;
var aRsltBrowser : ICefBrowser);
begin
aRsltBrowser := nil;
end;
function TCefExtensionHandlerRef.CanAccessBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean;
const target_browser : ICefBrowser): boolean;
begin
Result := True;
end;
function TCefExtensionHandlerRef.GetExtensionResource(const extension : ICefExtension;
const browser : ICefBrowser;
const file_ : ustring;
const callback : ICefGetExtensionResourceCallback): boolean;
begin
Result := False;
end;
procedure TCefExtensionHandlerRef.RemoveReferences;
begin
//
end;
class function TCefExtensionHandlerRef.UnWrap(data: Pointer): ICefExtensionHandler;
begin
if (data <> nil) then
Result := Create(data) as ICefExtensionHandler
else
Result := nil;
end;
// ***************************************************************************
// ************************ TCefExtensionHandlerOwn **************************
// ***************************************************************************
procedure cef_extension_handler_on_extension_load_failed(self : PCefExtensionHandler;
result : TCefErrorcode); stdcall;
var
TempObject : TObject;
begin
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
TCefExtensionHandlerOwn(TempObject).OnExtensionLoadFailed(result);
end;
procedure cef_extension_handler_on_extension_loaded(self : PCefExtensionHandler;
extension : PCefExtension); stdcall;
var
TempObject : TObject;
begin
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
TCefExtensionHandlerOwn(TempObject).OnExtensionLoaded(TCefExtensionRef.UnWrap(extension));
end;
procedure cef_extension_handler_on_extension_unloaded(self : PCefExtensionHandler;
extension : PCefExtension); stdcall;
var
TempObject : TObject;
begin
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
TCefExtensionHandlerOwn(TempObject).OnExtensionUnloaded(TCefExtensionRef.UnWrap(extension));
end;
function cef_extension_handler_on_before_background_browser( self : PCefExtensionHandler;
extension : PCefExtension;
const url : PCefString;
var client : PCefClient;
settings : PCefBrowserSettings) : Integer; stdcall;
var
TempClient : ICefClient;
TempObject : TObject;
begin
try
Result := Ord(True);
TempObject := CefGetObject(self);
TempClient := TCefClientRef.UnWrap(client);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
Result := Ord(TCefExtensionHandlerOwn(TempObject).OnBeforeBackgroundBrowser(TCefExtensionRef.UnWrap(extension),
CefString(url),
TempClient,
settings^));
if (TempClient = nil) then
client := nil
else
if not(TempClient.SameAs(client)) then
client := TempClient.Wrap;
finally
TempClient := nil;
end;
end;
function cef_extension_handler_on_before_browser( self : PCefExtensionHandler;
extension : PCefExtension;
browser : PCefBrowser;
active_browser : PCefBrowser;
index : Integer;
const url : PCefString;
active : Integer;
windowInfo : PCefWindowInfo;
var client : PCefClient;
settings : PCefBrowserSettings) : Integer; stdcall;
var
TempClient : ICefClient;
TempObject : TObject;
begin
try
Result := Ord(True);
TempObject := CefGetObject(self);
TempClient := TCefClientRef.UnWrap(client);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
Result := Ord(TCefExtensionHandlerOwn(TempObject).OnBeforeBrowser(TCefExtensionRef.UnWrap(extension),
TCefBrowserRef.UnWrap(browser),
TCefBrowserRef.UnWrap(active_browser),
index,
CefString(url),
active <> 0,
windowInfo^,
TempClient,
settings^));
if (TempClient = nil) then
client := nil
else
if not(TempClient.SameAs(client)) then
client := TempClient.Wrap;
finally
TempClient := nil;
end;
end;
function cef_extension_handler_get_active_browser(self : PCefExtensionHandler;
extension : PCefExtension;
browser : PCefBrowser;
include_incognito : Integer): PCefBrowser; stdcall;
var
TempObject : TObject;
TempBrowser : ICefBrowser;
begin
Result := nil;
TempBrowser := nil;
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
try
TCefExtensionHandlerOwn(TempObject).GetActiveBrowser(TCefExtensionRef.UnWrap(extension),
TCefBrowserRef.UnWrap(browser),
include_incognito <> 0,
TempBrowser);
if (TempBrowser <> nil) {$IFDEF DELPHI16_UP}and (TempBrowser is TCefBrowserRef){$ENDIF} then
Result := TCefBrowserRef(TempBrowser).wrap;
finally
TempBrowser := nil;
end;
end;
function cef_extension_handler_can_access_browser(self : PCefExtensionHandler;
extension : PCefExtension;
browser : PCefBrowser;
include_incognito : Integer;
target_browser : PCefBrowser): Integer; stdcall;
var
TempObject : TObject;
begin
Result := Ord(True);
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
Result := Ord(TCefExtensionHandlerOwn(TempObject).CanAccessBrowser(TCefExtensionRef.UnWrap(extension),
TCefBrowserRef.UnWrap(browser),
include_incognito <> 0,
TCefBrowserRef.UnWrap(target_browser)));
end;
function cef_extension_handler_get_extension_resource( self : PCefExtensionHandler;
extension : PCefExtension;
browser : PCefBrowser;
const file_ : PCefString;
callback : PCefGetExtensionResourceCallback): Integer; stdcall;
var
TempObject : TObject;
begin
Result := Ord(False);
TempObject := CefGetObject(self);
if (TempObject <> nil) and (TempObject is TCefExtensionHandlerOwn) then
Result := Ord(TCefExtensionHandlerOwn(TempObject).GetExtensionResource(TCefExtensionRef.UnWrap(extension),
TCefBrowserRef.UnWrap(browser),
CefString(file_),
TCefGetExtensionResourceCallbackRef.UnWrap(callback)));
end;
constructor TCefExtensionHandlerOwn.Create;
begin
inherited CreateData(SizeOf(TCefExtensionHandler));
with PCefExtensionHandler(FData)^ do
begin
on_extension_load_failed := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_extension_load_failed;
on_extension_loaded := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_extension_loaded;
on_extension_unloaded := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_extension_unloaded;
on_before_background_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_before_background_browser;
on_before_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_on_before_browser;
get_active_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_get_active_browser;
can_access_browser := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_can_access_browser;
get_extension_resource := {$IFDEF FPC}@{$ENDIF}cef_extension_handler_get_extension_resource;
end;
end;
procedure TCefExtensionHandlerOwn.OnExtensionLoadFailed(result: TCefErrorcode);
begin
//
end;
procedure TCefExtensionHandlerOwn.OnExtensionLoaded(const extension: ICefExtension);
begin
//
end;
procedure TCefExtensionHandlerOwn.OnExtensionUnloaded(const extension: ICefExtension);
begin
//
end;
function TCefExtensionHandlerOwn.OnBeforeBackgroundBrowser(const extension : ICefExtension;
const url : ustring;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean;
begin
Result := False;
end;
function TCefExtensionHandlerOwn.OnBeforeBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
const active_browser : ICefBrowser;
index : Integer;
const url : ustring;
active : boolean;
var windowInfo : TCefWindowInfo;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean;
begin
Result := False;
end;
procedure TCefExtensionHandlerOwn.GetActiveBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean;
var aRsltBrowser : ICefBrowser);
begin
//
end;
function TCefExtensionHandlerOwn.CanAccessBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean;
const target_browser : ICefBrowser): boolean;
begin
Result := True;
end;
function TCefExtensionHandlerOwn.GetExtensionResource(const extension : ICefExtension;
const browser : ICefBrowser;
const file_ : ustring;
const callback : ICefGetExtensionResourceCallback): boolean;
begin
Result := False;
end;
procedure TCefExtensionHandlerOwn.RemoveReferences;
begin
//
end;
// ***************************************************************************
// ************************ TCustomExtensionHandler **************************
// ***************************************************************************
constructor TCustomExtensionHandler.Create(const events: IChromiumEvents);
begin
inherited Create;
FEvents := Pointer(events);
end;
destructor TCustomExtensionHandler.Destroy;
begin
RemoveReferences;
inherited Destroy;
end;
procedure TCustomExtensionHandler.RemoveReferences;
begin
FEvents := nil;
end;
procedure TCustomExtensionHandler.OnExtensionLoadFailed(result: TCefErrorcode);
begin
try
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnExtensionLoadFailed(result);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.OnExtensionLoadFailed', e) then raise;
end;
end;
procedure TCustomExtensionHandler.OnExtensionLoaded(const extension: ICefExtension);
begin
try
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnExtensionLoaded(extension);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.OnExtensionLoaded', e) then raise;
end;
end;
procedure TCustomExtensionHandler.OnExtensionUnloaded(const extension: ICefExtension);
begin
try
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnExtensionUnloaded(extension);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.OnExtensionUnloaded', e) then raise;
end;
end;
function TCustomExtensionHandler.OnBeforeBackgroundBrowser(const extension : ICefExtension;
const url : ustring;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean;
begin
Result := False;
try
if (FEvents <> nil) then
Result := IChromiumEvents(FEvents).doOnExtensionBeforeBackgroundBrowser(extension,
url,
client,
settings);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.OnBeforeBackgroundBrowser', e) then raise;
end;
end;
function TCustomExtensionHandler.OnBeforeBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
const active_browser : ICefBrowser;
index : Integer;
const url : ustring;
active : boolean;
var windowInfo : TCefWindowInfo;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean;
begin
Result := False;
try
if (FEvents <> nil) then
Result := IChromiumEvents(FEvents).doOnExtensionBeforeBrowser(extension,
browser,
active_browser,
index,
url,
active,
windowInfo,
client,
settings);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.OnBeforeBrowser', e) then raise;
end;
end;
procedure TCustomExtensionHandler.GetActiveBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean;
var aRsltBrowser : ICefBrowser);
begin
try
if (FEvents <> nil) then
IChromiumEvents(FEvents).doOnExtensionGetActiveBrowser(extension,
browser,
include_incognito,
aRsltBrowser);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.GetActiveBrowser', e) then raise;
end;
end;
function TCustomExtensionHandler.CanAccessBrowser(const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean;
const target_browser : ICefBrowser): boolean;
begin
Result := True;
try
if (FEvents <> nil) then
Result := IChromiumEvents(FEvents).doOnExtensionCanAccessBrowser(extension,
browser,
include_incognito,
target_browser);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.CanAccessBrowser', e) then raise;
end;
end;
function TCustomExtensionHandler.GetExtensionResource(const extension : ICefExtension;
const browser : ICefBrowser;
const file_ : ustring;
const callback : ICefGetExtensionResourceCallback): boolean;
begin
Result := False;
try
if (FEvents <> nil) then
Result := IChromiumEvents(FEvents).doOnExtensionGetExtensionResource(extension,
browser,
file_,
callback);
except
on e : exception do
if CustomExceptionHandler('TCustomExtensionHandler.GetExtensionResource', e) then raise;
end;
end;
end.