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;
|
||||
FWidgetCompStub : Pointer;
|
||||
FRenderCompStub : Pointer;
|
||||
{$ENDIF}
|
||||
FBrowserCompHWND : THandle;
|
||||
FWidgetCompHWND : THandle;
|
||||
FRenderCompHWND : THandle;
|
||||
{$ENDIF}
|
||||
|
||||
// ICefClient
|
||||
FOnProcessMessageReceived : TOnProcessMessageReceived;
|
||||
@ -458,6 +458,7 @@ type
|
||||
procedure BrowserCompWndProc(var aMessage: TMessage);
|
||||
procedure WidgetCompWndProc(var aMessage: TMessage);
|
||||
procedure RenderCompWndProc(var aMessage: TMessage);
|
||||
procedure RestoreOldCompWndProc;
|
||||
function CopyDCToBitmapStream(aSrcDC : HDC; const aSrcRect : TRect; var aStream : TStream) : boolean;
|
||||
{$ENDIF}
|
||||
|
||||
@ -662,7 +663,6 @@ type
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
procedure AfterConstruction; override;
|
||||
procedure BeforeDestruction; override;
|
||||
function CreateClientHandler(aIsOSR : boolean = True) : boolean; overload;
|
||||
function CreateClientHandler(var aClient : ICefClient; aIsOSR : boolean = True) : boolean; overload;
|
||||
procedure CloseBrowser(aForceClose : boolean);
|
||||
@ -1223,10 +1223,10 @@ begin
|
||||
FBrowserCompStub := nil;
|
||||
FWidgetCompStub := nil;
|
||||
FRenderCompStub := nil;
|
||||
{$ENDIF MSWINDOWS}
|
||||
FBrowserCompHWND := 0;
|
||||
FWidgetCompHWND := 0;
|
||||
FRenderCompHWND := 0;
|
||||
{$ENDIF MSWINDOWS}
|
||||
|
||||
FDragOperations := DRAG_OPERATION_NONE;
|
||||
{$IFDEF MSWINDOWS}
|
||||
@ -1265,6 +1265,9 @@ begin
|
||||
try
|
||||
try
|
||||
{$IFDEF MSWINDOWS}
|
||||
RestoreOldCompWndProc;
|
||||
DestroyAllHandlersAndObservers;
|
||||
|
||||
if (FDragDropManager <> nil) then FreeAndNil(FDragDropManager);
|
||||
|
||||
if (FCompHandle <> 0) then
|
||||
@ -1301,26 +1304,6 @@ begin
|
||||
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}
|
||||
{$IFNDEF FPC}
|
||||
// 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;
|
||||
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}
|
||||
|
||||
function TChromiumCore.RemoveBrowser(const aBrowser : ICefBrowser) : boolean;
|
||||
|
@ -2,7 +2,7 @@
|
||||
"UpdateLazPackages" : [
|
||||
{
|
||||
"ForceNotify" : true,
|
||||
"InternalVersion" : 184,
|
||||
"InternalVersion" : 185,
|
||||
"Name" : "cef4delphi_lazarus.lpk",
|
||||
"Version" : "85.3.9.0"
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user