mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-05-13 21:46:53 +02:00
Partial fix for issue #291
- Create the CefApp handlers only when they are needed in SingleProcess mode. - Added several "RemoveReferences" procedures to disable events when the application is shutting down in the CefApp handlers.
This commit is contained in:
parent
9ac740613c
commit
e72db93dd2
@ -65,6 +65,8 @@ type
|
|||||||
procedure GetBrowserProcessHandler(var aHandler : ICefBrowserProcessHandler); virtual; abstract;
|
procedure GetBrowserProcessHandler(var aHandler : ICefBrowserProcessHandler); virtual; abstract;
|
||||||
procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler); virtual; abstract;
|
procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler); virtual; abstract;
|
||||||
|
|
||||||
|
procedure RemoveReferences; virtual; abstract;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create; virtual;
|
constructor Create; virtual;
|
||||||
end;
|
end;
|
||||||
@ -83,10 +85,11 @@ type
|
|||||||
procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler); override;
|
procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler); override;
|
||||||
|
|
||||||
procedure InitializeVars;
|
procedure InitializeVars;
|
||||||
|
procedure RemoveReferences; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
||||||
procedure BeforeDestruction; override;
|
destructor Destroy; override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
@ -104,9 +107,9 @@ uses
|
|||||||
|
|
||||||
// TCefAppOwn
|
// TCefAppOwn
|
||||||
|
|
||||||
procedure cef_app_on_before_command_line_processing(self: PCefApp;
|
procedure cef_app_on_before_command_line_processing( self : PCefApp;
|
||||||
const process_type: PCefString;
|
const process_type : PCefString;
|
||||||
command_line: PCefCommandLine); stdcall;
|
command_line : PCefCommandLine); stdcall;
|
||||||
var
|
var
|
||||||
TempObject : TObject;
|
TempObject : TObject;
|
||||||
begin
|
begin
|
||||||
@ -117,7 +120,8 @@ begin
|
|||||||
TCefCommandLineRef.UnWrap(command_line));
|
TCefCommandLineRef.UnWrap(command_line));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure cef_app_on_register_custom_schemes(self: PCefApp; registrar: PCefSchemeRegistrar); stdcall;
|
procedure cef_app_on_register_custom_schemes(self : PCefApp;
|
||||||
|
registrar : PCefSchemeRegistrar); stdcall;
|
||||||
var
|
var
|
||||||
TempWrapper : TCefSchemeRegistrarRef;
|
TempWrapper : TCefSchemeRegistrarRef;
|
||||||
TempObject : TObject;
|
TempObject : TObject;
|
||||||
@ -216,10 +220,10 @@ constructor TCustomCefApp.Create(const aCefApp : TCefApplicationCore);
|
|||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
|
|
||||||
FCefApp := aCefApp;
|
|
||||||
|
|
||||||
InitializeVars;
|
InitializeVars;
|
||||||
|
|
||||||
|
FCefApp := aCefApp;
|
||||||
|
|
||||||
if (FCefApp <> nil) then
|
if (FCefApp <> nil) then
|
||||||
begin
|
begin
|
||||||
if FCefApp.MustCreateBrowserProcessHandler then
|
if FCefApp.MustCreateBrowserProcessHandler then
|
||||||
@ -233,22 +237,35 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomCefApp.BeforeDestruction;
|
destructor TCustomCefApp.Destroy;
|
||||||
begin
|
begin
|
||||||
FCefApp := nil;
|
RemoveReferences;
|
||||||
|
|
||||||
InitializeVars;
|
inherited Destroy;
|
||||||
|
|
||||||
inherited BeforeDestruction;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomCefApp.InitializeVars;
|
procedure TCustomCefApp.InitializeVars;
|
||||||
begin
|
begin
|
||||||
|
FCefApp := nil;
|
||||||
FResourceBundleHandler := nil;
|
FResourceBundleHandler := nil;
|
||||||
FBrowserProcessHandler := nil;
|
FBrowserProcessHandler := nil;
|
||||||
FRenderProcessHandler := nil;
|
FRenderProcessHandler := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomCefApp.RemoveReferences;
|
||||||
|
begin
|
||||||
|
if (FResourceBundleHandler <> nil) then
|
||||||
|
FResourceBundleHandler.RemoveReferences;
|
||||||
|
|
||||||
|
if (FBrowserProcessHandler <> nil) then
|
||||||
|
FBrowserProcessHandler.RemoveReferences;
|
||||||
|
|
||||||
|
if (FRenderProcessHandler <> nil) then
|
||||||
|
FRenderProcessHandler.RemoveReferences;
|
||||||
|
|
||||||
|
InitializeVars;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomCefApp.OnBeforeCommandLineProcessing(const processType: ustring; const commandLine: ICefCommandLine);
|
procedure TCustomCefApp.OnBeforeCommandLineProcessing(const processType: ustring; const commandLine: ICefCommandLine);
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
|
@ -80,6 +80,7 @@ type
|
|||||||
FDestroyAppWindows : boolean;
|
FDestroyAppWindows : boolean;
|
||||||
|
|
||||||
procedure BeforeInitSubProcess; override;
|
procedure BeforeInitSubProcess; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
|
@ -803,7 +803,11 @@ begin
|
|||||||
LoadCEFlibrary then
|
LoadCEFlibrary then
|
||||||
begin
|
begin
|
||||||
TempApp := TCustomCefApp.Create(self);
|
TempApp := TCustomCefApp.Create(self);
|
||||||
Result := InitializeLibrary(TempApp);
|
|
||||||
|
if InitializeLibrary(TempApp) then
|
||||||
|
Result := True
|
||||||
|
else
|
||||||
|
TempApp.RemoveReferences;
|
||||||
end;
|
end;
|
||||||
except
|
except
|
||||||
on e : exception do
|
on e : exception do
|
||||||
@ -824,14 +828,24 @@ begin
|
|||||||
TempApp := nil;
|
TempApp := nil;
|
||||||
|
|
||||||
try
|
try
|
||||||
if CheckCEFLibrary and LoadCEFlibrary then
|
try
|
||||||
begin
|
if CheckCEFLibrary and LoadCEFlibrary then
|
||||||
if (FProcessType <> ptBrowser) then
|
begin
|
||||||
BeforeInitSubProcess;
|
if (FProcessType <> ptBrowser) then
|
||||||
|
BeforeInitSubProcess;
|
||||||
|
|
||||||
TempApp := TCustomCefApp.Create(self);
|
TempApp := TCustomCefApp.Create(self);
|
||||||
Result := (ExecuteProcess(TempApp) < 0) and InitializeLibrary(TempApp);
|
|
||||||
end;
|
if (ExecuteProcess(TempApp) < 0) and
|
||||||
|
InitializeLibrary(TempApp) then
|
||||||
|
Result := True
|
||||||
|
else
|
||||||
|
TempApp.RemoveReferences;
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on e : exception do
|
||||||
|
if CustomExceptionHandler('TCefApplicationCore.SingleExeProcessing', e) then raise;
|
||||||
|
end;
|
||||||
finally
|
finally
|
||||||
TempApp := nil;
|
TempApp := nil;
|
||||||
end;
|
end;
|
||||||
@ -1048,13 +1062,22 @@ begin
|
|||||||
TempApp := nil;
|
TempApp := nil;
|
||||||
|
|
||||||
try
|
try
|
||||||
if not(FSingleProcess) and
|
try
|
||||||
(ProcessType <> ptBrowser) and
|
if not(FSingleProcess) and
|
||||||
LoadCEFlibrary then
|
(ProcessType <> ptBrowser) and
|
||||||
begin
|
LoadCEFlibrary then
|
||||||
TempApp := TCustomCefApp.Create(self);
|
begin
|
||||||
Result := (ExecuteProcess(TempApp) >= 0);
|
TempApp := TCustomCefApp.Create(self);
|
||||||
end;
|
|
||||||
|
if (ExecuteProcess(TempApp) >= 0) then
|
||||||
|
Result := True
|
||||||
|
else
|
||||||
|
TempApp.RemoveReferences;
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on e : exception do
|
||||||
|
if CustomExceptionHandler('TCefApplicationCore.StartSubProcess', e) then raise;
|
||||||
|
end;
|
||||||
finally
|
finally
|
||||||
TempApp := nil;
|
TempApp := nil;
|
||||||
end;
|
end;
|
||||||
@ -1924,8 +1947,7 @@ end;
|
|||||||
|
|
||||||
function TCefApplicationCore.GetMustCreateResourceBundleHandler : boolean;
|
function TCefApplicationCore.GetMustCreateResourceBundleHandler : boolean;
|
||||||
begin
|
begin
|
||||||
Result := FSingleProcess or
|
Result := ((FSingleProcess or (FProcessType in [ptBrowser, ptRenderer])) and
|
||||||
((FProcessType in [ptBrowser, ptRenderer]) and
|
|
||||||
(FMustCreateResourceBundleHandler or
|
(FMustCreateResourceBundleHandler or
|
||||||
assigned(FOnGetLocalizedString) or
|
assigned(FOnGetLocalizedString) or
|
||||||
assigned(FOnGetDataResource) or
|
assigned(FOnGetDataResource) or
|
||||||
@ -1934,8 +1956,7 @@ end;
|
|||||||
|
|
||||||
function TCefApplicationCore.GetMustCreateBrowserProcessHandler : boolean;
|
function TCefApplicationCore.GetMustCreateBrowserProcessHandler : boolean;
|
||||||
begin
|
begin
|
||||||
Result := FSingleProcess or
|
Result := ((FSingleProcess or (FProcessType = ptBrowser)) and
|
||||||
((FProcessType = ptBrowser) and
|
|
||||||
(FMustCreateBrowserProcessHandler or
|
(FMustCreateBrowserProcessHandler or
|
||||||
assigned(FOnContextInitialized) or
|
assigned(FOnContextInitialized) or
|
||||||
assigned(FOnBeforeChildProcessLaunch) or
|
assigned(FOnBeforeChildProcessLaunch) or
|
||||||
@ -1944,8 +1965,7 @@ end;
|
|||||||
|
|
||||||
function TCefApplicationCore.GetMustCreateRenderProcessHandler : boolean;
|
function TCefApplicationCore.GetMustCreateRenderProcessHandler : boolean;
|
||||||
begin
|
begin
|
||||||
Result := FSingleProcess or
|
Result := ((FSingleProcess or (FProcessType = ptRenderer)) and
|
||||||
((FProcessType = ptRenderer) and
|
|
||||||
(FMustCreateRenderProcessHandler or
|
(FMustCreateRenderProcessHandler or
|
||||||
MustCreateLoadHandler or
|
MustCreateLoadHandler or
|
||||||
assigned(FOnWebKitInitialized) or
|
assigned(FOnWebKitInitialized) or
|
||||||
@ -1960,8 +1980,7 @@ end;
|
|||||||
|
|
||||||
function TCefApplicationCore.GetMustCreateLoadHandler : boolean;
|
function TCefApplicationCore.GetMustCreateLoadHandler : boolean;
|
||||||
begin
|
begin
|
||||||
Result := FSingleProcess or
|
Result := ((FSingleProcess or (FProcessType = ptRenderer)) and
|
||||||
((FProcessType = ptRenderer) and
|
|
||||||
(FMustCreateLoadHandler or
|
(FMustCreateLoadHandler or
|
||||||
assigned(FOnLoadingStateChange) or
|
assigned(FOnLoadingStateChange) or
|
||||||
assigned(FOnLoadStart) or
|
assigned(FOnLoadStart) or
|
||||||
|
@ -59,6 +59,8 @@ type
|
|||||||
procedure GetPrintHandler(var aHandler : ICefPrintHandler); virtual;
|
procedure GetPrintHandler(var aHandler : ICefPrintHandler); virtual;
|
||||||
procedure OnScheduleMessagePumpWork(const delayMs: Int64); virtual; abstract;
|
procedure OnScheduleMessagePumpWork(const delayMs: Int64); virtual; abstract;
|
||||||
|
|
||||||
|
procedure RemoveReferences; virtual; abstract;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create; virtual;
|
constructor Create; virtual;
|
||||||
end;
|
end;
|
||||||
@ -71,6 +73,8 @@ type
|
|||||||
procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); override;
|
procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine); override;
|
||||||
procedure OnScheduleMessagePumpWork(const delayMs: Int64); override;
|
procedure OnScheduleMessagePumpWork(const delayMs: Int64); override;
|
||||||
|
|
||||||
|
procedure RemoveReferences; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -92,7 +96,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefBrowserProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefBrowserProcessHandlerOwn) then
|
||||||
TCefBrowserProcessHandlerOwn(TempObject).OnContextInitialized;
|
TCefBrowserProcessHandlerOwn(TempObject).OnContextInitialized;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -103,7 +108,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefBrowserProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefBrowserProcessHandlerOwn) then
|
||||||
TCefBrowserProcessHandlerOwn(TempObject).OnBeforeChildProcessLaunch(TCefCommandLineRef.UnWrap(command_line));
|
TCefBrowserProcessHandlerOwn(TempObject).OnBeforeChildProcessLaunch(TCefCommandLineRef.UnWrap(command_line));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -115,7 +121,8 @@ begin
|
|||||||
Result := nil;
|
Result := nil;
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefBrowserProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefBrowserProcessHandlerOwn) then
|
||||||
try
|
try
|
||||||
TCefBrowserProcessHandlerOwn(TempObject).GetPrintHandler(TempHandler);
|
TCefBrowserProcessHandlerOwn(TempObject).GetPrintHandler(TempHandler);
|
||||||
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
if (TempHandler <> nil) then Result := TempHandler.Wrap;
|
||||||
@ -131,7 +138,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefBrowserProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefBrowserProcessHandlerOwn) then
|
||||||
TCefBrowserProcessHandlerOwn(TempObject).OnScheduleMessagePumpWork(delay_ms);
|
TCefBrowserProcessHandlerOwn(TempObject).OnScheduleMessagePumpWork(delay_ms);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -154,6 +162,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// TCefCustomBrowserProcessHandler
|
// TCefCustomBrowserProcessHandler
|
||||||
|
|
||||||
|
|
||||||
@ -166,12 +175,17 @@ end;
|
|||||||
|
|
||||||
destructor TCefCustomBrowserProcessHandler.Destroy;
|
destructor TCefCustomBrowserProcessHandler.Destroy;
|
||||||
begin
|
begin
|
||||||
FCefApp := nil;
|
RemoveReferences;
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCefCustomBrowserProcessHandler.OnContextInitialized;
|
procedure TCefCustomBrowserProcessHandler.RemoveReferences;
|
||||||
|
begin
|
||||||
|
FCefApp := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCefCustomBrowserProcessHandler.OnContextInitialized;
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
if (FCefApp <> nil) then FCefApp.Internal_OnContextInitialized;
|
if (FCefApp <> nil) then FCefApp.Internal_OnContextInitialized;
|
||||||
|
@ -1422,6 +1422,8 @@ type
|
|||||||
function GetLocalizedString(stringId: Integer; var stringVal: ustring): Boolean;
|
function GetLocalizedString(stringId: Integer; var stringVal: ustring): Boolean;
|
||||||
function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean;
|
function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean;
|
||||||
function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean;
|
function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean;
|
||||||
|
|
||||||
|
procedure RemoveReferences; // custom procedure to clear all references
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// TCefBrowserProcessHandler
|
// TCefBrowserProcessHandler
|
||||||
@ -1432,6 +1434,8 @@ type
|
|||||||
procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine);
|
procedure OnBeforeChildProcessLaunch(const commandLine: ICefCommandLine);
|
||||||
procedure GetPrintHandler(var aHandler : ICefPrintHandler);
|
procedure GetPrintHandler(var aHandler : ICefPrintHandler);
|
||||||
procedure OnScheduleMessagePumpWork(const delayMs: Int64);
|
procedure OnScheduleMessagePumpWork(const delayMs: Int64);
|
||||||
|
|
||||||
|
procedure RemoveReferences; // custom procedure to clear all references
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// TCefRenderProcessHandler
|
// TCefRenderProcessHandler
|
||||||
@ -1447,6 +1451,8 @@ type
|
|||||||
procedure OnUncaughtException(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context; const V8Exception: ICefV8Exception; const stackTrace: ICefV8StackTrace);
|
procedure OnUncaughtException(const browser: ICefBrowser; const frame: ICefFrame; const context: ICefv8Context; const V8Exception: ICefV8Exception; const stackTrace: ICefV8StackTrace);
|
||||||
procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode);
|
procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode);
|
||||||
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const aMessage: ICefProcessMessage): Boolean;
|
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const aMessage: ICefProcessMessage): Boolean;
|
||||||
|
|
||||||
|
procedure RemoveReferences; // custom procedure to clear all references
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// TCefApp
|
// TCefApp
|
||||||
@ -1458,6 +1464,8 @@ type
|
|||||||
procedure GetResourceBundleHandler(var aHandler : ICefResourceBundleHandler);
|
procedure GetResourceBundleHandler(var aHandler : ICefResourceBundleHandler);
|
||||||
procedure GetBrowserProcessHandler(var aHandler : ICefBrowserProcessHandler);
|
procedure GetBrowserProcessHandler(var aHandler : ICefBrowserProcessHandler);
|
||||||
procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler);
|
procedure GetRenderProcessHandler(var aHandler : ICefRenderProcessHandler);
|
||||||
|
|
||||||
|
procedure RemoveReferences; // custom procedure to clear all references
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// TCefCompletionCallback
|
// TCefCompletionCallback
|
||||||
|
@ -90,6 +90,8 @@ type
|
|||||||
procedure OnLoadEnd(const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); override;
|
procedure OnLoadEnd(const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer); override;
|
||||||
procedure OnLoadError(const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring); override;
|
procedure OnLoadError(const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring); override;
|
||||||
|
|
||||||
|
procedure RemoveReferences; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create(const aCefApp : TCefApplicationCore); reintroduce; virtual;
|
constructor Create(const aCefApp : TCefApplicationCore); reintroduce; virtual;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -273,11 +275,16 @@ end;
|
|||||||
|
|
||||||
destructor TCustomRenderLoadHandler.Destroy;
|
destructor TCustomRenderLoadHandler.Destroy;
|
||||||
begin
|
begin
|
||||||
FCefApp := nil;
|
RemoveReferences;
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCustomRenderLoadHandler.RemoveReferences;
|
||||||
|
begin
|
||||||
|
FCefApp := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCustomRenderLoadHandler.OnLoadEnd(const browser : ICefBrowser;
|
procedure TCustomRenderLoadHandler.OnLoadEnd(const browser : ICefBrowser;
|
||||||
const frame : ICefFrame;
|
const frame : ICefFrame;
|
||||||
httpStatusCode : Integer);
|
httpStatusCode : Integer);
|
||||||
|
@ -70,6 +70,8 @@ type
|
|||||||
procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode); virtual; abstract;
|
procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode); virtual; abstract;
|
||||||
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const aMessage: ICefProcessMessage): Boolean; virtual;
|
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const aMessage: ICefProcessMessage): Boolean; virtual;
|
||||||
|
|
||||||
|
procedure RemoveReferences; virtual; abstract;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create; virtual;
|
constructor Create; virtual;
|
||||||
end;
|
end;
|
||||||
@ -89,6 +91,8 @@ type
|
|||||||
procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode); override;
|
procedure OnFocusedNodeChanged(const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode); override;
|
||||||
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const aMessage : ICefProcessMessage): Boolean; override;
|
function OnProcessMessageReceived(const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const aMessage : ICefProcessMessage): Boolean; override;
|
||||||
|
|
||||||
|
procedure RemoveReferences; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -110,7 +114,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
TCefRenderProcessHandlerOwn(TempObject).OnWebKitInitialized;
|
TCefRenderProcessHandlerOwn(TempObject).OnWebKitInitialized;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -122,7 +127,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
TCefRenderProcessHandlerOwn(TempObject).OnBrowserCreated(TCefBrowserRef.UnWrap(browser),
|
TCefRenderProcessHandlerOwn(TempObject).OnBrowserCreated(TCefBrowserRef.UnWrap(browser),
|
||||||
TCefDictionaryValueRef.UnWrap(extra_info));
|
TCefDictionaryValueRef.UnWrap(extra_info));
|
||||||
end;
|
end;
|
||||||
@ -134,7 +140,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
TCefRenderProcessHandlerOwn(TempObject).OnBrowserDestroyed(TCefBrowserRef.UnWrap(browser));
|
TCefRenderProcessHandlerOwn(TempObject).OnBrowserDestroyed(TCefBrowserRef.UnWrap(browser));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -145,7 +152,8 @@ begin
|
|||||||
Result := nil;
|
Result := nil;
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
Result := CefGetData(TCefRenderProcessHandlerOwn(TempObject).GetLoadHandler);
|
Result := CefGetData(TCefRenderProcessHandlerOwn(TempObject).GetLoadHandler);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -158,7 +166,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
TCefRenderProcessHandlerOwn(TempObject).OnContextCreated(TCefBrowserRef.UnWrap(browser),
|
TCefRenderProcessHandlerOwn(TempObject).OnContextCreated(TCefBrowserRef.UnWrap(browser),
|
||||||
TCefFrameRef.UnWrap(frame),
|
TCefFrameRef.UnWrap(frame),
|
||||||
TCefv8ContextRef.UnWrap(context));
|
TCefv8ContextRef.UnWrap(context));
|
||||||
@ -173,7 +182,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
TCefRenderProcessHandlerOwn(TempObject).OnContextReleased(TCefBrowserRef.UnWrap(browser),
|
TCefRenderProcessHandlerOwn(TempObject).OnContextReleased(TCefBrowserRef.UnWrap(browser),
|
||||||
TCefFrameRef.UnWrap(frame),
|
TCefFrameRef.UnWrap(frame),
|
||||||
TCefv8ContextRef.UnWrap(context));
|
TCefv8ContextRef.UnWrap(context));
|
||||||
@ -190,7 +200,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
TCefRenderProcessHandlerOwn(TempObject).OnUncaughtException(TCefBrowserRef.UnWrap(browser),
|
TCefRenderProcessHandlerOwn(TempObject).OnUncaughtException(TCefBrowserRef.UnWrap(browser),
|
||||||
TCefFrameRef.UnWrap(frame),
|
TCefFrameRef.UnWrap(frame),
|
||||||
TCefv8ContextRef.UnWrap(context),
|
TCefv8ContextRef.UnWrap(context),
|
||||||
@ -207,7 +218,8 @@ var
|
|||||||
begin
|
begin
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
TCefRenderProcessHandlerOwn(TempObject).OnFocusedNodeChanged(TCefBrowserRef.UnWrap(browser),
|
TCefRenderProcessHandlerOwn(TempObject).OnFocusedNodeChanged(TCefBrowserRef.UnWrap(browser),
|
||||||
TCefFrameRef.UnWrap(frame),
|
TCefFrameRef.UnWrap(frame),
|
||||||
TCefDomNodeRef.UnWrap(node));
|
TCefDomNodeRef.UnWrap(node));
|
||||||
@ -224,7 +236,8 @@ begin
|
|||||||
Result := Ord(False);
|
Result := Ord(False);
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefRenderProcessHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefRenderProcessHandlerOwn) then
|
||||||
Result := Ord(TCefRenderProcessHandlerOwn(TempObject).OnProcessMessageReceived(TCefBrowserRef.UnWrap(browser),
|
Result := Ord(TCefRenderProcessHandlerOwn(TempObject).OnProcessMessageReceived(TCefBrowserRef.UnWrap(browser),
|
||||||
TCefFrameRef.UnWrap(frame),
|
TCefFrameRef.UnWrap(frame),
|
||||||
source_process,
|
source_process,
|
||||||
@ -274,22 +287,30 @@ constructor TCefCustomRenderProcessHandler.Create(const aCefApp : TCefApplicatio
|
|||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
|
|
||||||
|
RemoveReferences;
|
||||||
|
|
||||||
FCefApp := aCefApp;
|
FCefApp := aCefApp;
|
||||||
|
|
||||||
if (FCefApp <> nil) and FCefApp.MustCreateLoadHandler then
|
if (FCefApp <> nil) and FCefApp.MustCreateLoadHandler then
|
||||||
FLoadHandler := TCustomRenderLoadHandler.Create(FCefApp)
|
FLoadHandler := TCustomRenderLoadHandler.Create(FCefApp);
|
||||||
else
|
|
||||||
FLoadHandler := nil;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TCefCustomRenderProcessHandler.Destroy;
|
destructor TCefCustomRenderProcessHandler.Destroy;
|
||||||
begin
|
begin
|
||||||
FCefApp := nil;
|
RemoveReferences;
|
||||||
FLoadHandler := nil;
|
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCefCustomRenderProcessHandler.RemoveReferences;
|
||||||
|
begin
|
||||||
|
if (FLoadHandler <> nil) then
|
||||||
|
FLoadHandler.RemoveReferences;
|
||||||
|
|
||||||
|
FCefApp := nil;
|
||||||
|
FLoadHandler := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCefCustomRenderProcessHandler.OnWebKitInitialized;
|
procedure TCefCustomRenderProcessHandler.OnWebKitInitialized;
|
||||||
begin
|
begin
|
||||||
try
|
try
|
||||||
@ -378,10 +399,10 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCefCustomRenderProcessHandler.OnProcessMessageReceived(const browser : ICefBrowser;
|
function TCefCustomRenderProcessHandler.OnProcessMessageReceived(const browser : ICefBrowser;
|
||||||
const frame : ICefFrame;
|
const frame : ICefFrame;
|
||||||
sourceProcess : TCefProcessId;
|
sourceProcess : TCefProcessId;
|
||||||
const aMessage : ICefProcessMessage): Boolean;
|
const aMessage : ICefProcessMessage): Boolean;
|
||||||
begin
|
begin
|
||||||
Result := inherited OnProcessMessageReceived(browser, frame, sourceProcess, aMessage);
|
Result := inherited OnProcessMessageReceived(browser, frame, sourceProcess, aMessage);
|
||||||
|
|
||||||
|
@ -58,6 +58,8 @@ type
|
|||||||
function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; virtual; abstract;
|
function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; virtual; abstract;
|
||||||
function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; virtual; abstract;
|
function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; virtual; abstract;
|
||||||
|
|
||||||
|
procedure RemoveReferences; virtual; abstract;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create; virtual;
|
constructor Create; virtual;
|
||||||
end;
|
end;
|
||||||
@ -70,6 +72,8 @@ type
|
|||||||
function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; override;
|
function GetDataResource(resourceId: Integer; var data: Pointer; var dataSize: NativeUInt): Boolean; override;
|
||||||
function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; override;
|
function GetDataResourceForScale(resourceId: Integer; scaleFactor: TCefScaleFactor; var data: Pointer; var dataSize: NativeUInt): Boolean; override;
|
||||||
|
|
||||||
|
procedure RemoveReferences; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
constructor Create(const aCefApp : TCefApplicationCore); reintroduce;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
@ -95,7 +99,8 @@ begin
|
|||||||
Result := Ord(False);
|
Result := Ord(False);
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefResourceBundleHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefResourceBundleHandlerOwn) then
|
||||||
begin
|
begin
|
||||||
TempString := '';
|
TempString := '';
|
||||||
Result := Ord(TCefResourceBundleHandlerOwn(TempObject).GetLocalizedString(string_id, TempString));
|
Result := Ord(TCefResourceBundleHandlerOwn(TempObject).GetLocalizedString(string_id, TempString));
|
||||||
@ -118,7 +123,8 @@ begin
|
|||||||
Result := Ord(False);
|
Result := Ord(False);
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefResourceBundleHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefResourceBundleHandlerOwn) then
|
||||||
Result := Ord(TCefResourceBundleHandlerOwn(TempObject).GetDataResource(resource_id, data, data_size));
|
Result := Ord(TCefResourceBundleHandlerOwn(TempObject).GetDataResource(resource_id, data, data_size));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -133,7 +139,8 @@ begin
|
|||||||
Result := Ord(False);
|
Result := Ord(False);
|
||||||
TempObject := CefGetObject(self);
|
TempObject := CefGetObject(self);
|
||||||
|
|
||||||
if (TempObject <> nil) and (TempObject is TCefResourceBundleHandlerOwn) then
|
if (TempObject <> nil) and
|
||||||
|
(TempObject is TCefResourceBundleHandlerOwn) then
|
||||||
Result := Ord(TCefResourceBundleHandlerOwn(TempObject).GetDataResourceForScale(resource_id, scale_factor, data, data_size));
|
Result := Ord(TCefResourceBundleHandlerOwn(TempObject).GetDataResourceForScale(resource_id, scale_factor, data, data_size));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -162,11 +169,16 @@ end;
|
|||||||
|
|
||||||
destructor TCefCustomResourceBundleHandler.Destroy;
|
destructor TCefCustomResourceBundleHandler.Destroy;
|
||||||
begin
|
begin
|
||||||
FCefApp := nil;
|
RemoveReferences;
|
||||||
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCefCustomResourceBundleHandler.RemoveReferences;
|
||||||
|
begin
|
||||||
|
FCefApp := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
function TCefCustomResourceBundleHandler.GetLocalizedString( stringid : Integer;
|
function TCefCustomResourceBundleHandler.GetLocalizedString( stringid : Integer;
|
||||||
var stringVal : ustring): Boolean;
|
var stringVal : ustring): Boolean;
|
||||||
begin
|
begin
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"UpdateLazPackages" : [
|
"UpdateLazPackages" : [
|
||||||
{
|
{
|
||||||
"ForceNotify" : true,
|
"ForceNotify" : true,
|
||||||
"InternalVersion" : 197,
|
"InternalVersion" : 198,
|
||||||
"Name" : "cef4delphi_lazarus.lpk",
|
"Name" : "cef4delphi_lazarus.lpk",
|
||||||
"Version" : "86.0.21.0"
|
"Version" : "86.0.21.0"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user