1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-11-23 21:34:53 +02:00

Update to CEF 88.2.4

Fixed issue #335
This commit is contained in:
Salvador Diaz Fau
2021-02-06 17:38:44 +01:00
parent 6d5b74070b
commit 8f1b88bac9
8 changed files with 104 additions and 298 deletions

View File

@@ -66,13 +66,13 @@ uses
const
CEF_SUPPORTED_VERSION_MAJOR = 88;
CEF_SUPPORTED_VERSION_MINOR = 2;
CEF_SUPPORTED_VERSION_RELEASE = 1;
CEF_SUPPORTED_VERSION_RELEASE = 4;
CEF_SUPPORTED_VERSION_BUILD = 0;
CEF_CHROMEELF_VERSION_MAJOR = 88;
CEF_CHROMEELF_VERSION_MINOR = 0;
CEF_CHROMEELF_VERSION_RELEASE = 4324;
CEF_CHROMEELF_VERSION_BUILD = 146;
CEF_CHROMEELF_VERSION_BUILD = 150;
{$IFDEF MSWINDOWS}
LIBCEF_DLL = 'libcef.dll';

View File

@@ -190,14 +190,10 @@ begin
end;
function TChromium.GetParentFormHandle : TCefWindowHandle;
{$IFDEF MSWINDOWS}
var
TempForm : TCustomForm;
{$ENDIF}
begin
Result := inherited GetParentFormHandle;
{$IFDEF MSWINDOWS}
Result := inherited GetParentFormHandle;
TempForm := GetParentForm;
if (TempForm <> nil) and TempForm.HandleAllocated then
@@ -207,7 +203,6 @@ begin
(Application.MainForm <> nil) and
Application.MainForm.HandleAllocated then
Result := Application.MainForm.Handle;
{$ENDIF}
end;
procedure TChromium.MoveFormTo(const x, y: Integer);

View File

@@ -50,20 +50,22 @@ interface
uses
{$IFDEF DELPHI16_UP}
{$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, WinApi.ActiveX, WinApi.CommCtrl,{$ENDIF}
System.Classes, System.SyncObjs, System.Types,
{$IFDEF MSWINDOWS}WinApi.Windows, WinApi.Messages, WinApi.ActiveX, WinApi.CommCtrl,{$ENDIF}
System.Classes, System.SyncObjs, System.Types,
{$ELSE}
{$IFDEF MSWINDOWS}Windows, ActiveX, CommCtrl,{$ENDIF} Classes,
{$IFDEF FPC}
LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase,
LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase,
{$IFDEF LINUX}xlib,{$ENDIF}
{$ELSE}
Messages,
Messages,
{$ENDIF}
SyncObjs,
{$ENDIF}
uCEFTypes, uCEFInterfaces, uCEFLibFunctions, uCEFMiscFunctions, uCEFClient,
uCEFConstants, uCEFTask, uCEFDomVisitor, uCEFChromiumEvents,
{$IFDEF MSWINDOWS}uCEFDragAndDropMgr,{$ENDIF}
{$IFDEF LINUX}uCEFLinuxTypes,{$ENDIF}
uCEFChromiumOptions, uCEFChromiumFontOptions, uCEFPDFPrintOptions,
uCEFBrowserViewComponent;
@@ -143,6 +145,10 @@ type
FJavascriptEnabled : boolean;
FLoadImagesAutomatically : boolean;
{$IFDEF LINUX}
FXDisplay : PXDisplay;
{$ENDIF}
{$IFDEF MSWINDOWS}
FOldBrowserCompWndPrc : TFNWndProc;
FOldWidgetCompWndPrc : TFNWndProc;
@@ -356,6 +362,9 @@ type
function GetBrowserById(aID : integer) : ICefBrowser;
function GetBrowserCount : integer;
function GetBrowserIdByIndex(aIndex : integer) : integer;
{$IFDEF LINUX}
function GetXDisplay : PXDisplay;
{$ENDIF}
procedure SetDoNotTrack(aValue : boolean);
procedure SetSendReferrer(aValue : boolean);
@@ -436,9 +445,6 @@ type
function ExecuteSetZoomLevelTask(const aValue : double) : boolean;
function ExecuteSetZoomStepTask(aValue : byte) : boolean;
function ExecuteBrowserNavigationTask(aTask : TCefBrowserNavigation) : boolean;
function ExecuteUpdateSizeTask(aLeft, aTop, aWidth, aHeight : integer) : boolean;
function ExecuteSendCaptureLostEventTask : boolean;
function ExecuteUpdateXWindowVisibilityTask(aVisible : boolean) : boolean;
procedure UpdateHostZoomLevel(const aValue : double);
procedure UpdateHostZoomPct(const aValue : double);
@@ -643,9 +649,6 @@ type
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute); virtual;
procedure doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring); virtual;
procedure doBrowserNavigation(aTask : TCefBrowserNavigation); virtual;
procedure doUpdateSize(aLeft, aTop, aWidth, aHeight : integer); virtual;
procedure doSendCaptureLostEvent; virtual;
procedure doUpdateXWindowVisibility(aVisible : boolean); virtual;
function MustCreateAudioHandler : boolean; virtual;
function MustCreateDevToolsMessageObserver : boolean; virtual;
function MustCreateLoadHandler : boolean; virtual;
@@ -906,6 +909,9 @@ type
property QuicAllowed : boolean read FQuicAllowed write SetQuicAllowed;
property JavascriptEnabled : boolean read FJavascriptEnabled write SetJavascriptEnabled;
property LoadImagesAutomatically : boolean read FLoadImagesAutomatically write SetLoadImagesAutomatically;
{$IFDEF LINUX}
property XDisplay : PXDisplay read GetXDisplay;
{$ENDIF}
property WebRTCIPHandlingPolicy : TCefWebRTCHandlingPolicy read FWebRTCIPHandlingPolicy write SetWebRTCIPHandlingPolicy;
property WebRTCMultipleRoutes : TCefState read FWebRTCMultipleRoutes write SetWebRTCMultipleRoutes;
@@ -1161,7 +1167,7 @@ uses
{$IFDEF DELPHI16_UP}
System.SysUtils, System.Math,
{$ELSE}
SysUtils, Math, {$IFDEF FPC}{$IFDEF LINUX}xlib, x, xatom,{$ENDIF}{$ENDIF}
SysUtils, Math, {$IFDEF FPC}{$IFDEF LINUX}x, xatom, gdk2x, gtk2,{$ENDIF}{$ENDIF}
{$ENDIF}
uCEFBrowser, uCEFValue, uCEFDictionaryValue, uCEFStringMultimap, uCEFFrame,
uCEFApplicationCore, uCEFProcessMessage, uCEFRequestContext,
@@ -1220,6 +1226,9 @@ begin
FQuicAllowed := True;
FJavascriptEnabled := True;
FLoadImagesAutomatically := True;
{$IFDEF LINUX}
FXDisplay := nil;
{$ENDIF}
if (GlobalCEFApp <> nil) then
FHyperlinkAuditing := GlobalCEFApp.HyperlinkAuditing
@@ -2517,57 +2526,6 @@ begin
end;
end;
function TChromiumCore.ExecuteUpdateSizeTask(aLeft, aTop, aWidth, aHeight : integer) : boolean;
var
TempTask : ICefTask;
begin
Result := False;
try
if Initialized then
begin
TempTask := TCefUpdateSizeTask.Create(self, aLeft, aTop, aWidth, aHeight);
Result := CefPostTask(TID_UI, TempTask);
end;
finally
TempTask := nil;
end;
end;
function TChromiumCore.ExecuteSendCaptureLostEventTask : boolean;
var
TempTask : ICefTask;
begin
Result := False;
try
if Initialized then
begin
TempTask := TCefSendCaptureLostEventTask.Create(self);
Result := CefPostTask(TID_UI, TempTask);
end;
finally
TempTask := nil;
end;
end;
function TChromiumCore.ExecuteUpdateXWindowVisibilityTask(aVisible : boolean) : boolean;
var
TempTask : ICefTask;
begin
Result := False;
try
if Initialized then
begin
TempTask := TCefUpdateXWindowVisibilityTask.Create(self, aVisible);
Result := CefPostTask(TID_UI, TempTask);
end;
finally
TempTask := nil;
end;
end;
procedure TChromiumCore.GoBack;
begin
ExecuteBrowserNavigationTask(bnBack);
@@ -2765,6 +2723,32 @@ begin
end;
end;
{$IFDEF LINUX}
function TChromiumCore.GetXDisplay : PXDisplay;
{$IFDEF FPC}
var
TempParent : TCefWindowHandle;
{$ENDIF}
begin
if (FXDisplay = nil) then
begin
{$IFDEF FPC}
TempParent := ParentFormHandle;
if ValidCefWindowHandle(TempParent) and
(PGtkWidget(TempParent)^.Window <> nil) then
FXDisplay := GDK_WINDOW_XDISPLAY(PGtkWidget(TempParent)^.Window);
{$ENDIF}
// GlobalCEFApp.XDisplay can only be called in the CEF UI thread.
if (FXDisplay = nil) and (GlobalCEFApp <> nil) then
FXDisplay := GlobalCEFApp.XDisplay;
end;
Result := FXDisplay;
end;
{$ENDIF}
function TChromiumCore.GetHasValidMainFrame : boolean;
begin
Result := Initialized and (Browser.MainFrame <> nil) and Browser.MainFrame.IsValid;
@@ -4632,107 +4616,65 @@ begin
end;
end;
procedure TChromiumCore.doUpdateSize(aLeft, aTop, aWidth, aHeight : integer);
{$IFDEF LINUX}{$IFDEF FPC}
{$IFDEF LINUX}
procedure TChromiumCore.UpdateBrowserSize(aLeft, aTop, aWidth, aHeight : integer);
{$IFDEF FPC}
var
TempHandle : TCefWindowHandle;
TempChanges : TXWindowChanges;
TempXDisplay : PXDisplay;
{$ENDIF}{$ENDIF}
{$ENDIF}
begin
{$IFDEF LINUX}{$IFDEF FPC}
if (GlobalCEFApp <> nil) then
{$IFDEF FPC}
TempHandle := WindowHandle;
if ValidCefWindowHandle(TempHandle) then
begin
TempXDisplay := GlobalCEFApp.XDisplay;
TempXDisplay := XDisplay;
if (TempXDisplay <> nil) then
begin
TempHandle := WindowHandle;
TempChanges.x := aLeft;
TempChanges.y := aTop;
TempChanges.width := aWidth;
TempChanges.height := aHeight;
if ValidCefWindowHandle(TempHandle) then
begin
TempChanges.x := aLeft;
TempChanges.y := aTop;
TempChanges.width := aWidth;
TempChanges.height := aHeight;
XConfigureWindow(TempXDisplay, TempHandle, CWX or CWY or CWHeight or CWWidth, @TempChanges);
end;
XConfigureWindow(TempXDisplay, TempHandle, CWX or CWY or CWHeight or CWWidth, @TempChanges);
end;
end;
{$ENDIF}{$ENDIF}
end;
procedure TChromiumCore.doSendCaptureLostEvent;
{$IFDEF LINUX}{$IFDEF FPC}
var
TempXDisplay : PXDisplay;
{$ENDIF}{$ENDIF}
begin
{$IFDEF LINUX}{$IFDEF FPC}
if (GlobalCEFApp <> nil) then
begin
TempXDisplay := GlobalCEFApp.XDisplay;
if (TempXDisplay <> nil) then
XSetInputFocus(TempXDisplay, X.None, RevertToNone, CurrentTime);
end;
{$ENDIF}{$ENDIF}
if Initialized then
Browser.Host.SendCaptureLostEvent;
{$ENDIF}
end;
procedure TChromiumCore.doUpdateXWindowVisibility(aVisible : boolean);
{$IFDEF LINUX}{$IFDEF FPC}
procedure TChromiumCore.UpdateXWindowVisibility(aVisible : boolean);
{$IFDEF FPC}
var
TempXDisplay : PXDisplay;
TempHandle : TCefWindowHandle;
TempState : TAtom;
TempHidden : TAtom;
{$ENDIF}{$ENDIF}
{$ENDIF}
begin
{$IFDEF LINUX}{$IFDEF FPC}
if (GlobalCEFApp <> nil) then
{$IFDEF FPC}
TempHandle := WindowHandle;
if ValidCefWindowHandle(TempHandle) then
begin
TempXDisplay := GlobalCEFApp.XDisplay;
TempXDisplay := XDisplay;
if (TempXDisplay <> nil) then
begin
TempHandle := WindowHandle;
begin
TempState := XInternAtom(TempXDisplay, '_NET_WM_STATE', False);
if ValidCefWindowHandle(TempHandle) then
if aVisible then
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, nil, 0)
else
begin
TempState := XInternAtom(TempXDisplay, '_NET_WM_STATE', False);
if aVisible then
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, nil, 0)
else
begin
TempHidden := XInternAtom(TempXDisplay, '_NET_WM_STATE_HIDDEN', False);
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, @TempHidden, 1);
end;
TempHidden := XInternAtom(TempXDisplay, '_NET_WM_STATE_HIDDEN', False);
XChangeProperty(TempXDisplay, TempHandle, TempState, XA_ATOM, 32, PropModeReplace, @TempHidden, 1);
end;
end;
end;
{$ENDIF}{$ENDIF}
end;
{$IFDEF LINUX}
procedure TChromiumCore.UpdateBrowserSize(aLeft, aTop, aWidth, aHeight : integer);
begin
if CefCurrentlyOn(TID_UI) then
doUpdateSize(aLeft, aTop, aWidth, aHeight)
else
ExecuteUpdateSizeTask(aLeft, aTop, aWidth, aHeight);
end;
procedure TChromiumCore.UpdateXWindowVisibility(aVisible : boolean);
begin
if CefCurrentlyOn(TID_UI) then
doUpdateXWindowVisibility(aVisible)
else
ExecuteUpdateXWindowVisibilityTask(aVisible);
{$ENDIF}
end;
{$ENDIF}
@@ -6424,11 +6366,21 @@ begin
end;
procedure TChromiumCore.SendCaptureLostEvent;
{$IFDEF LINUX}{$IFDEF FPC}
var
TempXDisplay : PXDisplay;
{$ENDIF}{$ENDIF}
begin
if CefCurrentlyOn(TID_UI) then
doSendCaptureLostEvent
else
ExecuteSendCaptureLostEventTask;
if not(Initialized) then exit;
{$IFDEF LINUX}{$IFDEF FPC}
TempXDisplay := XDisplay;
if (TempXDisplay <> nil) then
XSetInputFocus(TempXDisplay, X.None, RevertToNone, CurrentTime);
{$ENDIF}{$ENDIF}
Browser.Host.SendCaptureLostEvent;
end;
procedure TChromiumCore.SetFocus(focus: Boolean);

View File

@@ -485,9 +485,6 @@ type
procedure doMediaRouteCreateFinished(result: TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute);
procedure doOnMediaSinkDeviceInfo(const ip_address: ustring; port: integer; const model_name: ustring);
procedure doBrowserNavigation(aTask : TCefBrowserNavigation);
procedure doUpdateSize(aLeft, aTop, aWidth, aHeight : integer);
procedure doSendCaptureLostEvent;
procedure doUpdateXWindowVisibility(aVisible : boolean);
function MustCreateAudioHandler : boolean;
function MustCreateLoadHandler : boolean;
function MustCreateFocusHandler : boolean;

View File

@@ -219,45 +219,6 @@ type
destructor Destroy; override;
end;
TCefUpdateSizeTask = class(TCefTaskOwn)
protected
FEvents : Pointer;
FLeft : integer;
FTop : integer;
FWidth : integer;
FHeight : integer;
procedure Execute; override;
public
constructor Create(const aEvents : IChromiumEvents; aLeft, aTop, aWidth, aHeight : integer); reintroduce;
destructor Destroy; override;
end;
TCefSendCaptureLostEventTask = class(TCefTaskOwn)
protected
FEvents : Pointer;
procedure Execute; override;
public
constructor Create(const aEvents : IChromiumEvents); reintroduce;
destructor Destroy; override;
end;
TCefUpdateXWindowVisibilityTask = class(TCefTaskOwn)
protected
FEvents : pointer;
FVisible : boolean;
procedure Execute; override;
public
constructor Create(const aEvents : IChromiumEvents; aVisible : boolean); reintroduce;
destructor Destroy; override;
end;
implementation
uses
@@ -720,103 +681,4 @@ begin
inherited Destroy;
end;
// TCefUpdateSizeTask
procedure TCefUpdateSizeTask.Execute;
begin
try
try
if (FEvents <> nil) then IChromiumEvents(FEvents).doUpdateSize(FLeft, FTop, FWidth, FHeight);
except
on e : exception do
if CustomExceptionHandler('TCefUpdateSizeTask.Execute', e) then raise;
end;
finally
FEvents := nil;
end;
end;
constructor TCefUpdateSizeTask.Create(const aEvents : IChromiumEvents; aLeft, aTop, aWidth, aHeight : integer);
begin
inherited Create;
FEvents := Pointer(aEvents);
FLeft := aLeft;
FTop := aTop;
FWidth := aWidth;
FHeight := aHeight;
end;
destructor TCefUpdateSizeTask.Destroy;
begin
FEvents := nil;
inherited Destroy;
end;
// TCefSendCaptureLostEventTask
procedure TCefSendCaptureLostEventTask.Execute;
begin
try
try
if (FEvents <> nil) then IChromiumEvents(FEvents).doSendCaptureLostEvent;
except
on e : exception do
if CustomExceptionHandler('TCefSendCaptureLostEventTask.Execute', e) then raise;
end;
finally
FEvents := nil;
end;
end;
constructor TCefSendCaptureLostEventTask.Create(const aEvents : IChromiumEvents);
begin
inherited Create;
FEvents := Pointer(aEvents);
end;
destructor TCefSendCaptureLostEventTask.Destroy;
begin
FEvents := nil;
inherited Destroy;
end;
// TCefUpdateXWindowVisibilityTask
procedure TCefUpdateXWindowVisibilityTask.Execute;
begin
try
try
if (FEvents <> nil) then IChromiumEvents(FEvents).doUpdateXWindowVisibility(FVisible);
except
on e : exception do
if CustomExceptionHandler('TCefUpdateXWindowVisibilityTask.Execute', e) then raise;
end;
finally
FEvents := nil;
end;
end;
constructor TCefUpdateXWindowVisibilityTask.Create(const aEvents : IChromiumEvents; aVisible : boolean);
begin
inherited Create;
FEvents := Pointer(aEvents);
FVisible := aVisible;
end;
destructor TCefUpdateXWindowVisibilityTask.Destroy;
begin
FEvents := nil;
inherited Destroy;
end;
end.