mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2024-11-16 00:05:55 +01:00
ca8bc9dff4
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
969 lines
32 KiB
ObjectPascal
969 lines
32 KiB
ObjectPascal
unit uCEFClient;
|
|
|
|
{$IFDEF FPC}
|
|
{$MODE OBJFPC}{$H+}
|
|
{$ENDIF}
|
|
|
|
{$I cef.inc}
|
|
|
|
{$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF}
|
|
{$MINENUMSIZE 4}
|
|
|
|
interface
|
|
|
|
uses
|
|
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
|
|
|
|
type
|
|
TCefClientRef = class(TCefBaseRefCountedRef, ICefClient)
|
|
protected
|
|
procedure GetAudioHandler(var aHandler : ICefAudioHandler); virtual;
|
|
procedure GetCommandHandler(var aHandler : ICefCommandHandler); virtual;
|
|
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual;
|
|
procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual;
|
|
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual;
|
|
procedure GetDownloadHandler(var aHandler : ICefDownloadHandler); virtual;
|
|
procedure GetDragHandler(var aHandler : ICefDragHandler); virtual;
|
|
procedure GetFindHandler(var aHandler : ICefFindHandler); virtual;
|
|
procedure GetFocusHandler(var aHandler : ICefFocusHandler); virtual;
|
|
procedure GetFrameHandler(var aHandler : ICefFrameHandler); virtual;
|
|
procedure GetPermissionHandler(var aHandler: ICefPermissionHandler); virtual;
|
|
procedure GetJsdialogHandler(var aHandler : ICefJsdialogHandler); virtual;
|
|
procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); virtual;
|
|
procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); virtual;
|
|
procedure GetLoadHandler(var aHandler : ICefLoadHandler); virtual;
|
|
procedure GetPrintHandler(var aHandler : ICefPrintHandler); virtual;
|
|
procedure GetRenderHandler(var aHandler : ICefRenderHandler); virtual;
|
|
procedure GetRequestHandler(var aHandler : ICefRequestHandler); virtual;
|
|
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; virtual;
|
|
|
|
procedure RemoveReferences; virtual;
|
|
|
|
public
|
|
class function UnWrap(data: Pointer): ICefClient;
|
|
end;
|
|
|
|
TCefClientOwn = class(TCefBaseRefCountedOwn, ICefClient)
|
|
protected
|
|
procedure GetAudioHandler(var aHandler : ICefAudioHandler); virtual;
|
|
procedure GetCommandHandler(var aHandler : ICefCommandHandler); virtual;
|
|
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); virtual;
|
|
procedure GetDialogHandler(var aHandler : ICefDialogHandler); virtual;
|
|
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); virtual;
|
|
procedure GetDownloadHandler(var aHandler : ICefDownloadHandler); virtual;
|
|
procedure GetDragHandler(var aHandler : ICefDragHandler); virtual;
|
|
procedure GetFindHandler(var aHandler : ICefFindHandler); virtual;
|
|
procedure GetFocusHandler(var aHandler : ICefFocusHandler); virtual;
|
|
procedure GetFrameHandler(var aHandler : ICefFrameHandler); virtual;
|
|
procedure GetPermissionHandler(var aHandler: ICefPermissionHandler); virtual;
|
|
procedure GetJsdialogHandler(var aHandler : ICefJsdialogHandler); virtual;
|
|
procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); virtual;
|
|
procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); virtual;
|
|
procedure GetLoadHandler(var aHandler : ICefLoadHandler); virtual;
|
|
procedure GetPrintHandler(var aHandler : ICefPrintHandler); virtual;
|
|
procedure GetRenderHandler(var aHandler : ICefRenderHandler); virtual;
|
|
procedure GetRequestHandler(var aHandler : ICefRequestHandler); virtual;
|
|
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; virtual;
|
|
|
|
procedure RemoveReferences; virtual;
|
|
|
|
public
|
|
constructor Create; virtual;
|
|
end;
|
|
|
|
TCustomClientHandler = class(TCefClientOwn)
|
|
protected
|
|
FEvents : Pointer;
|
|
FAudioHandler : ICefAudioHandler;
|
|
FCommandHandler : ICefCommandHandler;
|
|
FLoadHandler : ICefLoadHandler;
|
|
FFocusHandler : ICefFocusHandler;
|
|
FContextMenuHandler : ICefContextMenuHandler;
|
|
FDialogHandler : ICefDialogHandler;
|
|
FKeyboardHandler : ICefKeyboardHandler;
|
|
FDisplayHandler : ICefDisplayHandler;
|
|
FDownloadHandler : ICefDownloadHandler;
|
|
FJsDialogHandler : ICefJsDialogHandler;
|
|
FLifeSpanHandler : ICefLifeSpanHandler;
|
|
FRenderHandler : ICefRenderHandler;
|
|
FRequestHandler : ICefRequestHandler;
|
|
FDragHandler : ICefDragHandler;
|
|
FFindHandler : ICefFindHandler;
|
|
FPrintHandler : ICefPrintHandler;
|
|
FFrameHandler : ICefFrameHandler;
|
|
FPermissionHandler : ICefPermissionHandler;
|
|
|
|
procedure GetAudioHandler(var aHandler : ICefAudioHandler); override;
|
|
procedure GetCommandHandler(var aHandler : ICefCommandHandler); override;
|
|
procedure GetContextMenuHandler(var aHandler : ICefContextMenuHandler); override;
|
|
procedure GetDialogHandler(var aHandler : ICefDialogHandler); override;
|
|
procedure GetDisplayHandler(var aHandler : ICefDisplayHandler); override;
|
|
procedure GetDownloadHandler(var aHandler : ICefDownloadHandler); override;
|
|
procedure GetDragHandler(var aHandler : ICefDragHandler); override;
|
|
procedure GetFindHandler(var aHandler : ICefFindHandler); override;
|
|
procedure GetFocusHandler(var aHandler : ICefFocusHandler); override;
|
|
procedure GetFrameHandler(var aHandler : ICefFrameHandler); override;
|
|
procedure GetPermissionHandler(var aHandler: ICefPermissionHandler); override;
|
|
procedure GetJsdialogHandler(var aHandler : ICefJsdialogHandler); override;
|
|
procedure GetKeyboardHandler(var aHandler : ICefKeyboardHandler); override;
|
|
procedure GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler); override;
|
|
procedure GetLoadHandler(var aHandler : ICefLoadHandler); override;
|
|
procedure GetPrintHandler(var aHandler : ICefPrintHandler); override;
|
|
procedure GetRenderHandler(var aHandler : ICefRenderHandler); override;
|
|
procedure GetRequestHandler(var aHandler : ICefRequestHandler); override;
|
|
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean; override;
|
|
|
|
procedure InitializeVars;
|
|
|
|
public
|
|
constructor Create(const events: IChromiumEvents; aDevToolsClient : boolean = False); reintroduce; virtual;
|
|
procedure BeforeDestruction; override;
|
|
procedure RemoveReferences; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
{$IFDEF DELPHI16_UP}
|
|
System.SysUtils,
|
|
{$ELSE}
|
|
SysUtils,
|
|
{$ENDIF}
|
|
uCEFMiscFunctions, uCEFLibFunctions, uCEFProcessMessage, uCEFBrowser, uCEFLoadHandler,
|
|
uCEFFocusHandler, uCEFContextMenuHandler, uCEFDialogHandler, uCEFKeyboardHandler,
|
|
uCEFDisplayHandler, uCEFDownloadHandler, uCEFJsDialogHandler,
|
|
uCEFLifeSpanHandler, uCEFRequestHandler, uCEFRenderHandler, uCEFDragHandler,
|
|
uCEFFindHandler, uCEFConstants, uCEFApplicationCore, uCEFFrame, uCEFAudioHandler,
|
|
uCEFPrintHandler, uCEFFrameHandler, uCEFCommandHandler, uCEFPermissionHandler;
|
|
|
|
|
|
// ******************************************************
|
|
// ****************** TCefClientRef *********************
|
|
// ******************************************************
|
|
|
|
class function TCefClientRef.UnWrap(data: Pointer): ICefClient;
|
|
begin
|
|
if (data <> nil) then
|
|
Result := Create(data) as ICefClient
|
|
else
|
|
Result := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetAudioHandler(var aHandler : ICefAudioHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetCommandHandler(var aHandler : ICefCommandHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetDialogHandler(var aHandler : ICefDialogHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetDisplayHandler(var aHandler : ICefDisplayHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetDownloadHandler(var aHandler : ICefDownloadHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetDragHandler(var aHandler : ICefDragHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetFindHandler(var aHandler : ICefFindHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetFocusHandler(var aHandler : ICefFocusHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetFrameHandler(var aHandler : ICefFrameHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetPermissionHandler(var aHandler: ICefPermissionHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetJsdialogHandler(var aHandler : ICefJsDialogHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetKeyboardHandler(var aHandler : ICefKeyboardHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetLoadHandler(var aHandler : ICefLoadHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetPrintHandler(var aHandler : ICefPrintHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetRenderHandler(var aHandler : ICefRenderHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientRef.GetRequestHandler(var aHandler : ICefRequestHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
function TCefClientRef.OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const message_ : ICefProcessMessage): Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
procedure TCefClientRef.RemoveReferences;
|
|
begin
|
|
//
|
|
end;
|
|
|
|
|
|
// ******************************************************
|
|
// ****************** TCefClientOwn *********************
|
|
// ******************************************************
|
|
|
|
|
|
function cef_client_own_get_audio_handler(self: PCefClient): PCefAudioHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefAudioHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetAudioHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_command_handler(self: PCefClient): PCefCommandHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefCommandHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetCommandHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_context_menu_handler(self: PCefClient): PCefContextMenuHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefContextMenuHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetContextMenuHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_dialog_handler(self: PCefClient): PCefDialogHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefDialogHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetDialogHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_display_handler(self: PCefClient): PCefDisplayHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefDisplayHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetDisplayHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_download_handler(self: PCefClient): PCefDownloadHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefDownloadHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetDownloadHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_drag_handler(self: PCefClient): PCefDragHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefDragHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetDragHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_find_handler(self: PCefClient): PCefFindHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefFindHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetFindHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_focus_handler(self: PCefClient): PCefFocusHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefFocusHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetFocusHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_frame_handler(self: PCefClient): PCefFrameHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefFrameHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetFrameHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_jsdialog_handler(self: PCefClient): PCefJsDialogHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefJsDialogHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetJsdialogHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_keyboard_handler(self: PCefClient): PCefKeyboardHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefKeyboardHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetKeyboardHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_life_span_handler(self: PCefClient): PCefLifeSpanHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefLifeSpanHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetLifeSpanHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_load_handler(self: PCefClient): PCefLoadHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefLoadHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetLoadHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_render_handler(self: PCefClient): PCefRenderHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefRenderHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetRenderHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_request_handler(self: PCefClient): PCefRequestHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefRequestHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TCefClientOwn(TempObject).GetRequestHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_print_handler(self: PCefClient): PCefPrintHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefPrintHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TempHandler := nil;
|
|
TCefClientOwn(TempObject).GetPrintHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_get_permission_handler(self: PCefClient): PCefPermissionHandler; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
TempHandler : ICefPermissionHandler;
|
|
begin
|
|
Result := nil;
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
try
|
|
TempHandler := nil;
|
|
TCefClientOwn(TempObject).GetPermissionHandler(TempHandler);
|
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
|
finally
|
|
TempHandler := nil;
|
|
end;
|
|
end;
|
|
|
|
function cef_client_own_on_process_message_received(self : PCefClient;
|
|
browser : PCefBrowser;
|
|
frame : PCefFrame;
|
|
source_process : TCefProcessId;
|
|
message_ : PCefProcessMessage): Integer; stdcall;
|
|
var
|
|
TempObject : TObject;
|
|
begin
|
|
Result := Ord(False);
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefClientOwn) then
|
|
Result := Ord(TCefClientOwn(TempObject).OnProcessMessageReceived(TCefBrowserRef.UnWrap(browser),
|
|
TCefFrameRef.UnWrap(frame),
|
|
source_process,
|
|
TCefProcessMessageRef.UnWrap(message_)));
|
|
end;
|
|
|
|
constructor TCefClientOwn.Create;
|
|
begin
|
|
inherited CreateData(SizeOf(TCefClient));
|
|
|
|
with PCefClient(FData)^ do
|
|
begin
|
|
get_audio_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_audio_handler;
|
|
get_command_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_command_handler;
|
|
get_context_menu_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_context_menu_handler;
|
|
get_dialog_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_dialog_handler;
|
|
get_display_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_display_handler;
|
|
get_download_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_download_handler;
|
|
get_drag_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_drag_handler;
|
|
get_find_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_find_handler;
|
|
get_focus_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_focus_handler;
|
|
get_frame_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_frame_handler;
|
|
get_permission_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_permission_handler;
|
|
get_jsdialog_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_jsdialog_handler;
|
|
get_keyboard_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_keyboard_handler;
|
|
get_life_span_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_life_span_handler;
|
|
get_load_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_load_handler;
|
|
get_print_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_print_handler;
|
|
get_render_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_render_handler;
|
|
get_request_handler := {$IFDEF FPC}@{$ENDIF}cef_client_own_get_request_handler;
|
|
on_process_message_received := {$IFDEF FPC}@{$ENDIF}cef_client_own_on_process_message_received;
|
|
end;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetAudioHandler(var aHandler : ICefAudioHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetCommandHandler(var aHandler : ICefCommandHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetDialogHandler(var aHandler : ICefDialogHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetDisplayHandler(var aHandler : ICefDisplayHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetDownloadHandler(var aHandler : ICefDownloadHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetDragHandler(var aHandler : ICefDragHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetFindHandler(var aHandler : ICefFindHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetFocusHandler(var aHandler : ICefFocusHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetFrameHandler(var aHandler : ICefFrameHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetPermissionHandler(var aHandler: ICefPermissionHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetJsdialogHandler(var aHandler : ICefJsDialogHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetKeyboardHandler(var aHandler : ICefKeyboardHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetLoadHandler(var aHandler : ICefLoadHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetPrintHandler(var aHandler : ICefPrintHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetRenderHandler(var aHandler : ICefRenderHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCefClientOwn.GetRequestHandler(var aHandler : ICefRequestHandler);
|
|
begin
|
|
aHandler := nil;
|
|
end;
|
|
|
|
function TCefClientOwn.OnProcessMessageReceived(const browser : ICefBrowser;
|
|
const frame : ICefFrame;
|
|
sourceProcess : TCefProcessId;
|
|
const message_ : ICefProcessMessage): Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
procedure TCefClientOwn.RemoveReferences;
|
|
begin
|
|
//
|
|
end;
|
|
|
|
|
|
// ******************************************************
|
|
// *************** TCustomClientHandler *****************
|
|
// ******************************************************
|
|
|
|
|
|
constructor TCustomClientHandler.Create(const events : IChromiumEvents; aDevToolsClient : boolean);
|
|
begin
|
|
inherited Create;
|
|
|
|
InitializeVars;
|
|
|
|
FEvents := Pointer(events);
|
|
|
|
if (events <> nil) then
|
|
begin
|
|
if aDevToolsClient then
|
|
begin
|
|
if events.MustCreateKeyboardHandler then FKeyboardHandler := TCustomKeyboardHandler.Create(events);
|
|
end
|
|
else
|
|
begin
|
|
if events.MustCreateAudioHandler then FAudioHandler := TCustomAudioHandler.Create(events);
|
|
if events.MustCreateCommandHandler then FCommandHandler := TCustomCommandHandler.Create(events);
|
|
if events.MustCreateLoadHandler then FLoadHandler := TCustomLoadHandler.Create(events);
|
|
if events.MustCreateFocusHandler then FFocusHandler := TCustomFocusHandler.Create(events);
|
|
if events.MustCreateContextMenuHandler then FContextMenuHandler := TCustomContextMenuHandler.Create(events);
|
|
if events.MustCreateDialogHandler then FDialogHandler := TCustomDialogHandler.Create(events);
|
|
if events.MustCreateKeyboardHandler then FKeyboardHandler := TCustomKeyboardHandler.Create(events);
|
|
if events.MustCreateDisplayHandler then FDisplayHandler := TCustomDisplayHandler.Create(events);
|
|
if events.MustCreateDownloadHandler then FDownloadHandler := TCustomDownloadHandler.Create(events);
|
|
if events.MustCreateJsDialogHandler then FJsDialogHandler := TCustomJsDialogHandler.Create(events);
|
|
if events.MustCreateLifeSpanHandler then FLifeSpanHandler := TCustomLifeSpanHandler.Create(events);
|
|
if events.MustCreateRenderHandler then FRenderHandler := TCustomRenderHandler.Create(events);
|
|
if events.MustCreateRequestHandler then FRequestHandler := TCustomRequestHandler.Create(events);
|
|
if events.MustCreateDragHandler then FDragHandler := TCustomDragHandler.Create(events);
|
|
if events.MustCreateFindHandler then FFindHandler := TCustomFindHandler.Create(events);
|
|
if events.MustCreatePrintHandler then FPrintHandler := TCustomPrintHandler.Create(events);
|
|
if events.MustCreateFrameHandler then FFrameHandler := TCustomFrameHandler.Create(events);
|
|
if events.MustCreatePermissionHandler then FPermissionHandler := TCustomPermissionHandler.Create(events);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.BeforeDestruction;
|
|
begin
|
|
InitializeVars;
|
|
|
|
inherited BeforeDestruction;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.RemoveReferences;
|
|
begin
|
|
FEvents := nil;
|
|
|
|
if (FAudioHandler <> nil) then FAudioHandler.RemoveReferences;
|
|
if (FCommandHandler <> nil) then FCommandHandler.RemoveReferences;
|
|
if (FLoadHandler <> nil) then FLoadHandler.RemoveReferences;
|
|
if (FFocusHandler <> nil) then FFocusHandler.RemoveReferences;
|
|
if (FContextMenuHandler <> nil) then FContextMenuHandler.RemoveReferences;
|
|
if (FDialogHandler <> nil) then FDialogHandler.RemoveReferences;
|
|
if (FKeyboardHandler <> nil) then FKeyboardHandler.RemoveReferences;
|
|
if (FDisplayHandler <> nil) then FDisplayHandler.RemoveReferences;
|
|
if (FDownloadHandler <> nil) then FDownloadHandler.RemoveReferences;
|
|
if (FJsDialogHandler <> nil) then FJsDialogHandler.RemoveReferences;
|
|
if (FLifeSpanHandler <> nil) then FLifeSpanHandler.RemoveReferences;
|
|
if (FRequestHandler <> nil) then FRequestHandler.RemoveReferences;
|
|
if (FRenderHandler <> nil) then FRenderHandler.RemoveReferences;
|
|
if (FDragHandler <> nil) then FDragHandler.RemoveReferences;
|
|
if (FFindHandler <> nil) then FFindHandler.RemoveReferences;
|
|
if (FPrintHandler <> nil) then FPrintHandler.RemoveReferences;
|
|
if (FFrameHandler <> nil) then FFrameHandler.RemoveReferences;
|
|
if (FPermissionHandler <> nil) then FPermissionHandler.RemoveReferences;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.InitializeVars;
|
|
begin
|
|
FAudioHandler := nil;
|
|
FCommandHandler := nil;
|
|
FLoadHandler := nil;
|
|
FFocusHandler := nil;
|
|
FContextMenuHandler := nil;
|
|
FDialogHandler := nil;
|
|
FKeyboardHandler := nil;
|
|
FDisplayHandler := nil;
|
|
FDownloadHandler := nil;
|
|
FJsDialogHandler := nil;
|
|
FLifeSpanHandler := nil;
|
|
FRequestHandler := nil;
|
|
FRenderHandler := nil;
|
|
FDragHandler := nil;
|
|
FFindHandler := nil;
|
|
FPrintHandler := nil;
|
|
FFrameHandler := nil;
|
|
FPermissionHandler := nil;
|
|
FEvents := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetAudioHandler(var aHandler : ICefAudioHandler);
|
|
begin
|
|
if (FAudioHandler <> nil) then
|
|
aHandler := FAudioHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetCommandHandler(var aHandler : ICefCommandHandler);
|
|
begin
|
|
if (FCommandHandler <> nil) then
|
|
aHandler := FCommandHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetContextMenuHandler(var aHandler : ICefContextMenuHandler);
|
|
begin
|
|
if (FContextMenuHandler <> nil) then
|
|
aHandler := FContextMenuHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetDialogHandler(var aHandler : ICefDialogHandler);
|
|
begin
|
|
if (FDialogHandler <> nil) then
|
|
aHandler := FDialogHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetDisplayHandler(var aHandler : ICefDisplayHandler);
|
|
begin
|
|
if (FDisplayHandler <> nil) then
|
|
aHandler := FDisplayHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetDownloadHandler(var aHandler : ICefDownloadHandler);
|
|
begin
|
|
if (FDownloadHandler <> nil) then
|
|
aHandler := FDownloadHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetDragHandler(var aHandler : ICefDragHandler);
|
|
begin
|
|
if (FDragHandler <> nil) then
|
|
aHandler := FDragHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetFindHandler(var aHandler : ICefFindHandler);
|
|
begin
|
|
if (FFindHandler <> nil) then
|
|
aHandler := FFindHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetFocusHandler(var aHandler : ICefFocusHandler);
|
|
begin
|
|
if (FFocusHandler <> nil) then
|
|
aHandler := FFocusHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetFrameHandler(var aHandler : ICefFrameHandler);
|
|
begin
|
|
if (FFrameHandler <> nil) then
|
|
aHandler := FFrameHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetPermissionHandler(var aHandler: ICefPermissionHandler);
|
|
begin
|
|
if (FPermissionHandler <> nil) then
|
|
aHandler := FPermissionHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetJsdialogHandler(var aHandler : ICefJsDialogHandler);
|
|
begin
|
|
if (FJsDialogHandler <> nil) then
|
|
aHandler := FJsDialogHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetKeyboardHandler(var aHandler : ICefKeyboardHandler);
|
|
begin
|
|
if (FKeyboardHandler <> nil) then
|
|
aHandler := FKeyboardHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetLifeSpanHandler(var aHandler : ICefLifeSpanHandler);
|
|
begin
|
|
if (FLifeSpanHandler <> nil) then
|
|
aHandler := FLifeSpanHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetLoadHandler(var aHandler : ICefLoadHandler);
|
|
begin
|
|
if (FLoadHandler <> nil) then
|
|
aHandler := FLoadHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetPrintHandler(var aHandler : ICefPrintHandler);
|
|
begin
|
|
if (FPrintHandler <> nil) then
|
|
aHandler := FPrintHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetRenderHandler(var aHandler : ICefRenderHandler);
|
|
begin
|
|
if (FRenderHandler <> nil) then
|
|
aHandler := FRenderHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
procedure TCustomClientHandler.GetRequestHandler(var aHandler : ICefRequestHandler);
|
|
begin
|
|
if (FRequestHandler <> nil) then
|
|
aHandler := FRequestHandler
|
|
else
|
|
aHandler := nil;
|
|
end;
|
|
|
|
function TCustomClientHandler.OnProcessMessageReceived(const browser : ICefBrowser;
|
|
const frame : ICefFrame;
|
|
sourceProcess : TCefProcessId;
|
|
const message_ : ICefProcessMessage): Boolean;
|
|
begin
|
|
if (FEvents <> nil) then
|
|
Result := IChromiumEvents(FEvents).doOnProcessMessageReceived(browser, frame, sourceProcess, message_)
|
|
else
|
|
Result := inherited OnProcessMessageReceived(browser, frame, sourceProcess, message_);
|
|
end;
|
|
|
|
end.
|