mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-06-02 21:57:37 +02:00
Fix for a rare TCustomRequestContextHandler leak in TChromiumCore
- Moved all the code from TChromiumCore.BeforeDestruction to TChromiumCore.Destruction. - Moved all the HWND fields to the Windows conditional directive section.
This commit is contained in:
parent
d31456f517
commit
29e5b987f8
@ -151,10 +151,10 @@ type
|
|||||||
FBrowserCompStub : Pointer;
|
FBrowserCompStub : Pointer;
|
||||||
FWidgetCompStub : Pointer;
|
FWidgetCompStub : Pointer;
|
||||||
FRenderCompStub : Pointer;
|
FRenderCompStub : Pointer;
|
||||||
{$ENDIF}
|
|
||||||
FBrowserCompHWND : THandle;
|
FBrowserCompHWND : THandle;
|
||||||
FWidgetCompHWND : THandle;
|
FWidgetCompHWND : THandle;
|
||||||
FRenderCompHWND : THandle;
|
FRenderCompHWND : THandle;
|
||||||
|
{$ENDIF}
|
||||||
|
|
||||||
// ICefClient
|
// ICefClient
|
||||||
FOnProcessMessageReceived : TOnProcessMessageReceived;
|
FOnProcessMessageReceived : TOnProcessMessageReceived;
|
||||||
@ -458,6 +458,7 @@ type
|
|||||||
procedure BrowserCompWndProc(var aMessage: TMessage);
|
procedure BrowserCompWndProc(var aMessage: TMessage);
|
||||||
procedure WidgetCompWndProc(var aMessage: TMessage);
|
procedure WidgetCompWndProc(var aMessage: TMessage);
|
||||||
procedure RenderCompWndProc(var aMessage: TMessage);
|
procedure RenderCompWndProc(var aMessage: TMessage);
|
||||||
|
procedure RestoreOldCompWndProc;
|
||||||
function CopyDCToBitmapStream(aSrcDC : HDC; const aSrcRect : TRect; var aStream : TStream) : boolean;
|
function CopyDCToBitmapStream(aSrcDC : HDC; const aSrcRect : TRect; var aStream : TStream) : boolean;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
@ -662,7 +663,6 @@ type
|
|||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure AfterConstruction; override;
|
procedure AfterConstruction; override;
|
||||||
procedure BeforeDestruction; override;
|
|
||||||
function CreateClientHandler(aIsOSR : boolean = True) : boolean; overload;
|
function CreateClientHandler(aIsOSR : boolean = True) : boolean; overload;
|
||||||
function CreateClientHandler(var aClient : ICefClient; aIsOSR : boolean = True) : boolean; overload;
|
function CreateClientHandler(var aClient : ICefClient; aIsOSR : boolean = True) : boolean; overload;
|
||||||
procedure CloseBrowser(aForceClose : boolean);
|
procedure CloseBrowser(aForceClose : boolean);
|
||||||
@ -1223,10 +1223,10 @@ begin
|
|||||||
FBrowserCompStub := nil;
|
FBrowserCompStub := nil;
|
||||||
FWidgetCompStub := nil;
|
FWidgetCompStub := nil;
|
||||||
FRenderCompStub := nil;
|
FRenderCompStub := nil;
|
||||||
{$ENDIF MSWINDOWS}
|
|
||||||
FBrowserCompHWND := 0;
|
FBrowserCompHWND := 0;
|
||||||
FWidgetCompHWND := 0;
|
FWidgetCompHWND := 0;
|
||||||
FRenderCompHWND := 0;
|
FRenderCompHWND := 0;
|
||||||
|
{$ENDIF MSWINDOWS}
|
||||||
|
|
||||||
FDragOperations := DRAG_OPERATION_NONE;
|
FDragOperations := DRAG_OPERATION_NONE;
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
@ -1265,6 +1265,9 @@ begin
|
|||||||
try
|
try
|
||||||
try
|
try
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
|
RestoreOldCompWndProc;
|
||||||
|
DestroyAllHandlersAndObservers;
|
||||||
|
|
||||||
if (FDragDropManager <> nil) then FreeAndNil(FDragDropManager);
|
if (FDragDropManager <> nil) then FreeAndNil(FDragDropManager);
|
||||||
|
|
||||||
if (FCompHandle <> 0) then
|
if (FCompHandle <> 0) then
|
||||||
@ -1301,26 +1304,6 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TChromiumCore.BeforeDestruction;
|
|
||||||
begin
|
|
||||||
try
|
|
||||||
{$IFDEF MSWINDOWS}
|
|
||||||
RestoreCompWndProc(FBrowserCompHWND, 0, FOldBrowserCompWndPrc);
|
|
||||||
FreeAndNilStub(FBrowserCompStub);
|
|
||||||
|
|
||||||
RestoreCompWndProc(FWidgetCompHWND, 0, FOldWidgetCompWndPrc);
|
|
||||||
FreeAndNilStub(FWidgetCompStub);
|
|
||||||
|
|
||||||
RestoreCompWndProc(FRenderCompHWND, 0, FOldRenderCompWndPrc);
|
|
||||||
FreeAndNilStub(FRenderCompStub);
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
DestroyAllHandlersAndObservers;
|
|
||||||
finally
|
|
||||||
inherited BeforeDestruction;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
{$IFNDEF FPC}
|
{$IFNDEF FPC}
|
||||||
// Windows XP and newer (older Delphi version < XE don't have them and newer
|
// Windows XP and newer (older Delphi version < XE don't have them and newer
|
||||||
@ -4909,6 +4892,18 @@ begin
|
|||||||
if CustomExceptionHandler('TChromiumCore.RenderCompWndProc', e) then raise;
|
if CustomExceptionHandler('TChromiumCore.RenderCompWndProc', e) then raise;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TChromiumCore.RestoreOldCompWndProc;
|
||||||
|
begin
|
||||||
|
RestoreCompWndProc(FBrowserCompHWND, 0, FOldBrowserCompWndPrc);
|
||||||
|
FreeAndNilStub(FBrowserCompStub);
|
||||||
|
|
||||||
|
RestoreCompWndProc(FWidgetCompHWND, 0, FOldWidgetCompWndPrc);
|
||||||
|
FreeAndNilStub(FWidgetCompStub);
|
||||||
|
|
||||||
|
RestoreCompWndProc(FRenderCompHWND, 0, FOldRenderCompWndPrc);
|
||||||
|
FreeAndNilStub(FRenderCompStub);
|
||||||
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
function TChromiumCore.RemoveBrowser(const aBrowser : ICefBrowser) : boolean;
|
function TChromiumCore.RemoveBrowser(const aBrowser : ICefBrowser) : boolean;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"UpdateLazPackages" : [
|
"UpdateLazPackages" : [
|
||||||
{
|
{
|
||||||
"ForceNotify" : true,
|
"ForceNotify" : true,
|
||||||
"InternalVersion" : 184,
|
"InternalVersion" : 185,
|
||||||
"Name" : "cef4delphi_lazarus.lpk",
|
"Name" : "cef4delphi_lazarus.lpk",
|
||||||
"Version" : "85.3.9.0"
|
"Version" : "85.3.9.0"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user