1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-06-22 22:17:48 +02:00

Update to CEF 134.3.1

This commit is contained in:
Salvador Díaz Fau
2025-03-13 11:51:28 +01:00
parent 752306b7c9
commit e223d1c0a6
55 changed files with 5848 additions and 3242 deletions

View File

@ -30,7 +30,8 @@ uses
{$IFDEF MSWINDOWS}uCEFDragAndDropMgr,{$ENDIF}
{$IFDEF LINUX}uCEFLinuxTypes, uCEFLinuxFunctions,{$ENDIF}
uCEFChromiumOptions, uCEFChromiumFontOptions, uCEFPDFPrintOptions,
uCEFBrowserViewComponent, uCEFWindowInfoWrapper;
uCEFBrowserViewComponent, uCEFWindowInfoWrapper, uCEFPreferenceObserver,
uCEFSettingObserver;
type
TBrowserInfoList = class;
@ -55,6 +56,10 @@ type
FMediaObserverReg : ICefRegistration;
FDevToolsMsgObserver : ICefDevToolsMessageObserver;
FDevToolsMsgObserverReg : ICefRegistration;
FSettingObserver : ICefSettingObserver;
FSettingObserverReg : ICefRegistration;
FPreferenceInfoList : TPreferenceInfoList;
FPreferenceInfoCS : TCriticalSection;
FDefaultUrl : ustring;
FOptions : TChromiumOptions;
FFontOptions : TChromiumFontOptions;
@ -302,6 +307,12 @@ type
FOnShowPermissionPrompt : TOnShowPermissionPromptEvent;
FOnDismissPermissionPrompt : TOnDismissPermissionPromptEvent;
// ICefPreferenceObserver
FOnPreferenceChanged : TOnPreferenceChangedEvent;
// ICefSettingObserver
FOnSettingChanged : TOnSettingChangedEvent;
// Custom
FOnTextResultAvailable : TOnTextResultAvailableEvent;
FOnPdfPrintFinished : TOnPdfPrintFinishedEvent;
@ -436,11 +447,15 @@ type
procedure DestroyResourceRequestHandler;
procedure DestroyMediaObserver;
procedure DestroyDevToolsMsgObserver;
procedure DestroySettingObserver;
procedure DestroyPreferenceObserver;
procedure DestroyAllHandlersAndObservers;
procedure CreateResourceRequestHandler; virtual;
procedure CreateMediaObserver; virtual;
procedure CreateDevToolsMsgObserver; virtual;
procedure CreateSettingObserver; virtual;
procedure CreatePreferenceObserver; virtual;
procedure CreateRequestContextHandler; virtual;
procedure CreateOptionsClasses; virtual;
procedure CreateSyncObjects; virtual;
@ -665,6 +680,12 @@ type
function doOnShowPermissionPrompt(const browser: ICefBrowser; prompt_id: uint64; const requesting_origin: ustring; requested_permissions: cardinal; const callback: ICefPermissionPromptCallback): boolean;
procedure doOnDismissPermissionPrompt(const browser: ICefBrowser; prompt_id: uint64; result: TCefPermissionRequestResult);
// ICefPreferenceObserver
procedure doOnPreferenceChanged(const name_: ustring);
// ICefSettingObserver
procedure doOnSettingChanged(const requesting_url, top_level_url : ustring; content_type: TCefContentSettingTypes);
// Custom
procedure GetSettings(var aSettings : TCefBrowserSettings);
procedure doCookiesDeleted(numDeleted : integer); virtual;
@ -697,10 +718,12 @@ type
procedure doToggleAudioMuted; virtual;
procedure doEnableFocus; virtual;
function doTryCloseBrowser : boolean; virtual;
procedure doAddPreferenceObserver(const name_ : ustring); virtual;
function MustCreateAudioHandler : boolean; virtual;
function MustCreateCommandHandler : boolean; virtual;
function MustCreateDevToolsMessageObserver : boolean; virtual;
function MustCreateSettingObserver : boolean; virtual;
function MustCreateLoadHandler : boolean; virtual;
function MustCreateFocusHandler : boolean; virtual;
function MustCreateContextMenuHandler : boolean; virtual;
@ -1116,6 +1139,25 @@ type
/// </summary>
procedure ToggleAudioMuted;
/// <summary>
/// Add an observer for preference changes. |name| is the name of the
/// preference to observe. If |name| is NULL then all preferences will be
/// observed. Observing all preferences has performance consequences and is
/// not recommended outside of testing scenarios. The observer will remain
/// registered until the returned Registration object is destroyed. This
/// function must be called on the browser process UI thread.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_preference_capi.h">CEF source file: /include/capi/cef_preference_capi.h (cef_preference_manager_t)</see></para>
/// </remarks>
procedure AddPreferenceObserver(const name_: ustring);
/// <summary>
/// Remove an observer for preference changes.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_preference_capi.h">CEF source file: /include/capi/cef_preference_capi.h (cef_preference_manager_t)</see></para>
/// </remarks>
procedure RemovePreferenceObserver(const name_ : ustring);
/// <summary>
/// Used to delete cookies immediately or asynchronously. If aDeleteImmediately is false TChromiumCore.DeleteCookies triggers
/// the TChromiumCore.OnCookiesDeleted event when the cookies are deleted.
/// </summary>
@ -1217,6 +1259,15 @@ type
/// </summary>
function AddDevToolsMessageObserver(const observer: ICefDevToolsMessageObserver): ICefRegistration;
/// <summary>
/// Add an observer for content and website setting changes. The observer will
/// remain registered until the returned Registration object is destroyed.
/// This function must be called on the browser process UI thread.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_request_context_capi.h">CEF source file: /include/capi/cef_request_context_capi.h (cef_request_context_t)</see></para>
/// </remarks>
function AddSettingObserver(const observer: ICefSettingObserver): ICefRegistration;
/// <summary>
/// <para>Search for |searchText|. |forward| indicates whether to search forward or
/// backward within the page. |matchCase| indicates whether the search should
/// be case-sensitive. |findNext| indicates whether this is the first request
@ -3960,6 +4011,25 @@ type
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_permission_handler_capi.h">CEF source file: /include/capi/cef_permission_handler_capi.h (cef_permission_handler_t)</see></para>
/// </remarks>
property OnDismissPermissionPrompt : TOnDismissPermissionPromptEvent read FOnDismissPermissionPrompt write FOnDismissPermissionPrompt;
/// <summary>
/// Called when a preference has changed. The new value can be retrieved using
/// ICefRequestContext.GetPreference.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF UI thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_preference_capi.h">CEF source file: /include/capi/cef_preference_capi.h (cef_preference_observer_t)</see></para>
/// </remarks>
property OnPreferenceChanged : TOnPreferenceChangedEvent read FOnPreferenceChanged write FOnPreferenceChanged;
/// <summary>
/// Called when a content or website setting has changed. The new value can be
/// retrieved using ICefRequestContext.GetContentSetting or
/// ICefRequestContext.GetWebsiteSetting.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF UI thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_preference_capi.h">CEF source file: /include/capi/cef_preference_capi.h (cef_setting_observer_t)</see></para>
/// </remarks>
property OnSettingChanged : TOnSettingChangedEvent read FOnSettingChanged write FOnSettingChanged;
end;
TBrowserInfo = class
@ -4074,6 +4144,10 @@ begin
FMediaObserverReg := nil;
FDevToolsMsgObserver := nil;
FDevToolsMsgObserverReg := nil;
FSettingObserver := nil;
FSettingObserverReg := nil;
FPreferenceInfoList := nil;
FPreferenceInfoCS := nil;
FOptions := nil;
FFontOptions := nil;
FDefaultEncoding := '';
@ -4187,13 +4261,14 @@ begin
DestroyAllBrowsers;
if (FWindowInfo <> nil) then FreeAndNil(FWindowInfo);
if (FDevWindowInfo <> nil) then FreeAndNil(FDevWindowInfo);
if (FFontOptions <> nil) then FreeAndNil(FFontOptions);
if (FOptions <> nil) then FreeAndNil(FOptions);
if (FPDFPrintOptions <> nil) then FreeAndNil(FPDFPrintOptions);
if (FZoomStepCS <> nil) then FreeAndNil(FZoomStepCS);
if (FBrowsersCS <> nil) then FreeAndNil(FBrowsersCS);
if (FWindowInfo <> nil) then FreeAndNil(FWindowInfo);
if (FDevWindowInfo <> nil) then FreeAndNil(FDevWindowInfo);
if (FFontOptions <> nil) then FreeAndNil(FFontOptions);
if (FOptions <> nil) then FreeAndNil(FOptions);
if (FPDFPrintOptions <> nil) then FreeAndNil(FPDFPrintOptions);
if (FZoomStepCS <> nil) then FreeAndNil(FZoomStepCS);
if (FBrowsersCS <> nil) then FreeAndNil(FBrowsersCS);
if (FPreferenceInfoCS <> nil) then FreeAndNil(FPreferenceInfoCS);
except
on e : exception do
if CustomExceptionHandler('TChromiumCore.Destroy', e) then raise;
@ -4390,8 +4465,22 @@ begin
FDevToolsMsgObserver := nil;
end;
procedure TChromiumCore.DestroySettingObserver;
begin
FSettingObserverReg := nil;
FSettingObserver := nil;
end;
procedure TChromiumCore.DestroyPreferenceObserver;
begin
if (FPreferenceInfoList <> nil) then
FreeAndNil(FPreferenceInfoList);
end;
procedure TChromiumCore.DestroyAllHandlersAndObservers;
begin
DestroySettingObserver;
DestroyPreferenceObserver;
DestroyDevToolsMsgObserver;
DestroyMediaObserver;
DestroyResourceRequestHandler;
@ -4413,6 +4502,19 @@ begin
FDevToolsMsgObserver := TCustomDevToolsMessageObserver.Create(self);
end;
procedure TChromiumCore.CreateSettingObserver;
begin
if MustCreateSettingObserver and
(FSettingObserver = nil) then
FSettingObserver := TCustomSettingObserver.Create(self);
end;
procedure TChromiumCore.CreatePreferenceObserver;
begin
if (FPreferenceInfoList = nil) then
FPreferenceInfoList := TPreferenceInfoList.Create;
end;
procedure TChromiumCore.CreateResourceRequestHandler;
begin
if MustCreateResourceRequestHandler and
@ -4434,8 +4536,9 @@ procedure TChromiumCore.CreateSyncObjects;
begin
if (Owner = nil) or not(csDesigning in ComponentState) then
begin
FZoomStepCS := TCriticalSection.Create;
FBrowsersCS := TCriticalSection.Create;
FZoomStepCS := TCriticalSection.Create;
FBrowsersCS := TCriticalSection.Create;
FPreferenceInfoCS := TCriticalSection.Create;
end;
end;
@ -4510,6 +4613,8 @@ begin
CreateResourceRequestHandler;
CreateMediaObserver;
CreateDevToolsMsgObserver;
CreatePreferenceObserver;
CreateSettingObserver;
aClient := FHandler;
Result := True;
@ -4688,6 +4793,12 @@ begin
FOnShowPermissionPrompt := nil;
FOnDismissPermissionPrompt := nil;
// ICefPreferenceObserver
FOnPreferenceChanged := nil;
// ICefSettingObserver
FOnSettingChanged := nil;
// Custom
FOnTextResultAvailable := nil;
FOnPdfPrintFinished := nil;
@ -4758,6 +4869,8 @@ begin
CreateResourceRequestHandler;
CreateMediaObserver;
CreateDevToolsMsgObserver;
CreatePreferenceObserver;
CreateSettingObserver;
if (aContext = nil) then
TempOldContext := TCefRequestContextRef.Global()
@ -4811,6 +4924,8 @@ begin
CreateResourceRequestHandler;
CreateMediaObserver;
CreateDevToolsMsgObserver;
CreatePreferenceObserver;
CreateSettingObserver;
if (aContext = nil) then
TempOldContext := TCefRequestContextRef.Global()
@ -6926,6 +7041,33 @@ begin
end;
end;
procedure TChromiumCore.AddPreferenceObserver(const name_: ustring);
var
TempTask : ICefTask;
begin
if CefCurrentlyOn(TID_UI) then
doAddPreferenceObserver(name_)
else
if Initialized then
try
TempTask := TCefAddPreferenceObserverTask.Create(self, name_);
CefPostTask(TID_UI, TempTask);
finally
TempTask := nil;
end;
end;
procedure TChromiumCore.RemovePreferenceObserver(const name_ : ustring);
begin
if assigned(FPreferenceInfoCS) then
try
FPreferenceInfoCS.Acquire;
FPreferenceInfoList.RemovePreference(name_);
finally
FPreferenceInfoCS.Release;
end;
end;
function TChromiumCore.GetRequestContext : ICefRequestContext;
begin
if Initialized then
@ -7898,6 +8040,26 @@ begin
FTryingToCloseBrowser := False;
end;
procedure TChromiumCore.doAddPreferenceObserver(const name_ : ustring);
var
TempContext : ICefRequestContext;
i : integer;
begin
if assigned(FPreferenceInfoCS) and Initialized then
try
FPreferenceInfoCS.Acquire;
TempContext := Browser.Host.RequestContext;
if (TempContext <> nil) and not(FPreferenceInfoList.HasPreference(name_)) then
begin
i := FPreferenceInfoList.AddPreference(name_, self);
TempContext.AddPreferenceObserver(name, TPreferenceInfo(FPreferenceInfoList[i]).Observer);
end;
finally
FPreferenceInfoCS.Release;
end;
end;
procedure TChromiumCore.doEnableFocus;
begin
FCanFocus := True;
@ -8108,6 +8270,11 @@ begin
assigned(FOnDevToolsAgentDetached);
end;
function TChromiumCore.MustCreateSettingObserver : boolean;
begin
Result := assigned(FOnSettingChanged);
end;
function TChromiumCore.MustCreatePrintHandler : boolean;
begin
Result := assigned(FOnPrintStart) or
@ -8295,6 +8462,21 @@ begin
Result := nil;
end;
function TChromiumCore.AddSettingObserver(const observer: ICefSettingObserver): ICefRegistration;
var
TempContext : ICefRequestContext;
begin
Result := nil;
if Initialized then
begin
TempContext := Browser.Host.RequestContext;
if (TempContext <> nil) then
Result := TempContext.AddSettingObserver(observer);
end;
end;
{$IFDEF MSWINDOWS}
procedure TChromiumCore.WndProc(var aMessage: TMessage);
begin
@ -8508,6 +8690,9 @@ begin
if (FDevToolsMsgObserver <> nil) and (FDevToolsMsgObserverReg = nil) then
FDevToolsMsgObserverReg := AddDevToolsMessageObserver(FDevToolsMsgObserver);
if (FSettingObserver <> nil) and (FSettingObserverReg = nil) then
FSettingObserverReg := AddSettingObserver(FSettingObserver);
if assigned(FOnAfterCreated) then
FOnAfterCreated(Self, browser);
@ -9142,6 +9327,18 @@ begin
FOnDismissPermissionPrompt(self, browser, prompt_id, result);
end;
procedure TChromiumCore.doOnPreferenceChanged(const name_: ustring);
begin
if assigned(FOnPreferenceChanged) then
FOnPreferenceChanged(self, name_);
end;
procedure TChromiumCore.doOnSettingChanged(const requesting_url, top_level_url : ustring; content_type: TCefContentSettingTypes);
begin
if assigned(FOnSettingChanged) then
FOnSettingChanged(self, requesting_url, top_level_url, content_type);
end;
procedure TChromiumCore.doOnFullScreenModeChange(const browser : ICefBrowser;
fullscreen : Boolean);
begin