2019-11-10 00:24:26 +01:00
unit uCEFChromiumCore;
{$IFDEF FPC}
{$MODE OBJFPC} {$H+}
{$ENDIF}
{$I cef.inc}
2022-02-19 18:56:41 +01:00
{$IFNDEF TARGET_64BITS} {$ALIGN ON} {$ENDIF}
{$MINENUMSIZE 4}
2019-11-10 00:24:26 +01:00
interface
uses
{$IFDEF DELPHI16_UP}
2021-02-06 17:38:44 +01:00
{$IFDEF MSWINDOWS} WinApi . Windows, WinApi . Messages, WinApi . ActiveX, WinApi . CommCtrl, {$ENDIF}
System. Classes, System. SyncObjs, System. Types,
2019-11-10 00:24:26 +01:00
{$ELSE}
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS} Windows, ActiveX, CommCtrl, {$ENDIF} Classes,
2019-11-10 00:24:26 +01:00
{$IFDEF FPC}
2021-02-06 17:38:44 +01:00
LCLProc, LCLType, LCLIntf, LResources, LMessages, InterfaceBase,
{$IFDEF LINUX} xlib, {$ENDIF}
2019-11-10 00:24:26 +01:00
{$ELSE}
2021-02-06 17:38:44 +01:00
Messages,
2019-11-10 00:24:26 +01:00
{$ENDIF}
2019-12-10 16:49:07 +01:00
SyncObjs,
2019-11-10 00:24:26 +01:00
{$ENDIF}
uCEFTypes, uCEFInterfaces, uCEFLibFunctions, uCEFMiscFunctions, uCEFClient,
uCEFConstants, uCEFTask, uCEFDomVisitor, uCEFChromiumEvents,
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS} uCEFDragAndDropMgr, {$ENDIF}
2022-06-25 16:41:34 +02:00
{$IFDEF LINUX} uCEFLinuxTypes, uCEFLinuxFunctions, {$ENDIF}
2020-05-05 18:10:33 +02:00
uCEFChromiumOptions, uCEFChromiumFontOptions, uCEFPDFPrintOptions,
uCEFBrowserViewComponent;
2019-11-10 00:24:26 +01:00
type
2020-05-07 11:46:48 +02:00
TBrowserInfoList = class ;
2023-07-19 11:59:20 +02:00
/// <summary>
/// Parent class of TChromium and TFMXChromium that puts together all browser procedures, functions, properties and events in one place.
/// It has all you need to create, modify and destroy a web browser.
/// </summary>
2019-11-10 00:24:26 +01:00
TChromiumCore = class( TComponent, IChromiumEvents)
protected
{$IFDEF MSWINDOWS}
2022-10-05 17:36:09 +02:00
FCompHandle : HWND;
2019-11-10 00:24:26 +01:00
{$ENDIF}
2022-10-05 17:36:09 +02:00
FHandler : ICefClient;
FBrowsersCS : TCriticalSection;
FBrowsers : TBrowserInfoList;
FBrowserId : integer ;
FMultiBrowserMode : boolean ;
FReqContextHandler : ICefRequestContextHandler;
FResourceRequestHandler : ICefResourceRequestHandler;
FMediaObserver : ICefMediaObserver;
FMediaObserverReg : ICefRegistration;
FDevToolsMsgObserver : ICefDevToolsMessageObserver;
FDevToolsMsgObserverReg : ICefRegistration;
FExtensionHandler : ICefExtensionHandler;
FDefaultUrl : ustring;
FOptions : TChromiumOptions;
FFontOptions : TChromiumFontOptions;
FPDFPrintOptions : TPDFPrintOptions;
FDefaultEncoding : ustring;
FProxyType : integer ;
FProxyScheme : TCefProxyScheme;
FProxyServer : ustring;
FProxyPort : integer ;
FProxyUsername : ustring;
FProxyPassword : ustring;
FProxyScriptURL : ustring;
FProxyByPassList : ustring;
FMaxConnectionsPerProxy : integer ;
FUpdatePreferences : boolean ;
FCustomHeaderName : ustring;
FCustomHeaderValue : ustring;
FAddCustomHeader : boolean ;
FDoNotTrack : boolean ;
FSendReferrer : boolean ;
FHyperlinkAuditing : boolean ;
FAllowOutdatedPlugins : boolean ;
FAlwaysAuthorizePlugins : boolean ;
FAlwaysOpenPDFExternally : boolean ;
FSpellChecking : boolean ;
FSpellCheckerDicts : ustring;
FZoomStep : byte ;
FZoomStepCS : TCriticalSection;
FPrefsFileName : string ;
FIsOSR : boolean ;
FSafeSearch : boolean ;
FOffline : boolean ;
FYouTubeRestrict : integer ;
FPrintingEnabled : boolean ;
FWindowInfo : TCefWindowInfo;
FBrowserSettings : TCefBrowserSettings;
FDevWindowInfo : TCefWindowInfo;
FDevBrowserSettings : TCefBrowserSettings;
FDragOperations : TCefDragOperations;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
2022-10-05 17:36:09 +02:00
FDragDropManager : TCEFDragAndDropMgr;
FDropTargetWnd : HWND;
2019-11-10 00:24:26 +01:00
{$ENDIF}
2020-06-22 16:17:38 +02:00
FDragAndDropInitialized : boolean ;
FWebRTCIPHandlingPolicy : TCefWebRTCHandlingPolicy;
FWebRTCMultipleRoutes : TCefState;
FWebRTCNonProxiedUDP : TCefState;
FAcceptLanguageList : ustring;
FAcceptCookies : TCefCookiePref;
FBlock3rdPartyCookies : boolean ;
2020-09-10 11:21:39 +02:00
FDefaultWindowInfoExStyle : DWORD;
2020-08-05 16:11:50 +02:00
FQuicAllowed : boolean ;
2020-08-22 14:56:24 +02:00
FJavascriptEnabled : boolean ;
FLoadImagesAutomatically : boolean ;
2023-01-25 18:06:32 +01:00
FBatterySaverModeState : TCefBatterySaverModeState;
2023-08-07 20:21:42 +02:00
FHighEfficiencyModeState : TCefHighEfficiencyModeState;
2023-03-11 17:29:30 +01:00
FCanFocus : boolean ;
FEnableFocusDelayMs : cardinal ;
2019-11-10 00:24:26 +01:00
2021-02-06 17:38:44 +01:00
{$IFDEF LINUX}
FXDisplay : PXDisplay;
{$ENDIF}
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
FOldBrowserCompWndPrc : TFNWndProc;
FOldWidgetCompWndPrc : TFNWndProc;
FOldRenderCompWndPrc : TFNWndProc;
FBrowserCompStub : Pointer ;
FWidgetCompStub : Pointer ;
FRenderCompStub : Pointer ;
FBrowserCompHWND : THandle;
FWidgetCompHWND : THandle;
FRenderCompHWND : THandle;
2020-09-20 12:07:24 +02:00
{$ENDIF}
2019-11-10 00:24:26 +01:00
// ICefClient
FOnProcessMessageReceived : TOnProcessMessageReceived;
// ICefLoadHandler
FOnLoadStart : TOnLoadStart;
FOnLoadEnd : TOnLoadEnd;
FOnLoadError : TOnLoadError;
FOnLoadingStateChange : TOnLoadingStateChange;
// ICefFocusHandler
FOnTakeFocus : TOnTakeFocus;
FOnSetFocus : TOnSetFocus;
FOnGotFocus : TOnGotFocus;
// ICefContextMenuHandler
FOnBeforeContextMenu : TOnBeforeContextMenu;
FOnRunContextMenu : TOnRunContextMenu;
FOnContextMenuCommand : TOnContextMenuCommand;
FOnContextMenuDismissed : TOnContextMenuDismissed;
2022-08-06 12:00:28 +02:00
FOnRunQuickMenu : TOnRunQuickMenuEvent;
FOnQuickMenuCommand : TOnQuickMenuCommandEvent;
FOnQuickMenuDismissed : TOnQuickMenuDismissedEvent;
2019-11-10 00:24:26 +01:00
// ICefKeyboardHandler
FOnPreKeyEvent : TOnPreKeyEvent;
FOnKeyEvent : TOnKeyEvent;
// ICefDisplayHandler
FOnAddressChange : TOnAddressChange;
FOnTitleChange : TOnTitleChange;
FOnFavIconUrlChange : TOnFavIconUrlChange;
FOnFullScreenModeChange : TOnFullScreenModeChange;
FOnTooltip : TOnTooltip;
FOnStatusMessage : TOnStatusMessage;
FOnConsoleMessage : TOnConsoleMessage;
FOnAutoResize : TOnAutoResize;
FOnLoadingProgressChange : TOnLoadingProgressChange;
2020-11-19 18:55:17 +01:00
FOnCursorChange : TOnCursorChange;
2022-08-06 12:00:28 +02:00
FOnMediaAccessChange : TOnMediaAccessChange;
2019-11-10 00:24:26 +01:00
// ICefDownloadHandler
2022-05-03 12:43:16 +02:00
FOnCanDownload : TOnCanDownloadEvent;
2019-11-10 00:24:26 +01:00
FOnBeforeDownload : TOnBeforeDownload;
FOnDownloadUpdated : TOnDownloadUpdated;
// ICefJsDialogHandler
FOnJsdialog : TOnJsdialog;
FOnBeforeUnloadDialog : TOnBeforeUnloadDialog;
FOnResetDialogState : TOnResetDialogState;
FOnDialogClosed : TOnDialogClosed;
// ICefLifeSpanHandler
FOnBeforePopup : TOnBeforePopup;
FOnAfterCreated : TOnAfterCreated;
FOnBeforeClose : TOnBeforeClose;
FOnClose : TOnClose;
// ICefRequestHandler
FOnBeforeBrowse : TOnBeforeBrowse;
FOnOpenUrlFromTab : TOnOpenUrlFromTab;
FOnGetAuthCredentials : TOnGetAuthCredentials;
FOnCertificateError : TOnCertificateError;
FOnSelectClientCertificate : TOnSelectClientCertificate;
FOnRenderViewReady : TOnRenderViewReady;
FOnRenderProcessTerminated : TOnRenderProcessTerminated;
FOnGetResourceRequestHandler_ReqHdlr : TOnGetResourceRequestHandler;
2020-06-21 21:27:55 +02:00
FOnDocumentAvailableInMainFrame : TOnDocumentAvailableInMainFrame;
2019-11-10 00:24:26 +01:00
// ICefResourceRequestHandler
FOnBeforeResourceLoad : TOnBeforeResourceLoad;
FOnGetResourceHandler : TOnGetResourceHandler;
FOnResourceRedirect : TOnResourceRedirect;
FOnResourceResponse : TOnResourceResponse;
FOnGetResourceResponseFilter : TOnGetResourceResponseFilter;
FOnResourceLoadComplete : TOnResourceLoadComplete;
FOnProtocolExecution : TOnProtocolExecution;
// ICefCookieAccessFilter
FOnCanSendCookie : TOnCanSendCookie;
FOnCanSaveCookie : TOnCanSaveCookie;
// ICefDialogHandler
FOnFileDialog : TOnFileDialog;
// ICefRenderHandler
FOnGetAccessibilityHandler : TOnGetAccessibilityHandler;
FOnGetRootScreenRect : TOnGetRootScreenRect;
FOnGetViewRect : TOnGetViewRect;
FOnGetScreenPoint : TOnGetScreenPoint;
FOnGetScreenInfo : TOnGetScreenInfo;
FOnPopupShow : TOnPopupShow;
FOnPopupSize : TOnPopupSize;
FOnPaint : TOnPaint;
FOnAcceleratedPaint : TOnAcceleratedPaint;
2022-08-06 12:00:28 +02:00
FOnGetTouchHandleSize : TOnGetTouchHandleSize;
FOnTouchHandleStateChanged : TOnTouchHandleStateChanged;
2019-11-10 00:24:26 +01:00
FOnStartDragging : TOnStartDragging;
FOnUpdateDragCursor : TOnUpdateDragCursor;
FOnScrollOffsetChanged : TOnScrollOffsetChanged;
FOnIMECompositionRangeChanged : TOnIMECompositionRangeChanged;
FOnTextSelectionChanged : TOnTextSelectionChanged;
FOnVirtualKeyboardRequested : TOnVirtualKeyboardRequested;
// ICefDragHandler
FOnDragEnter : TOnDragEnter;
FOnDraggableRegionsChanged : TOnDraggableRegionsChanged;
// ICefFindHandler
FOnFindResult : TOnFindResult;
// ICefRequestContextHandler
FOnRequestContextInitialized : TOnRequestContextInitialized;
FOnGetResourceRequestHandler_ReqCtxHdlr : TOnGetResourceRequestHandler;
2020-04-19 22:47:20 +02:00
// ICefMediaObserver
FOnSinks : TOnSinksEvent;
FOnRoutes : TOnRoutesEvent;
FOnRouteStateChanged : TOnRouteStateChangedEvent;
FOnRouteMessageReceived : TOnRouteMessageReceivedEvent;
2020-05-23 15:00:44 +02:00
// ICefAudioHandler
FOnGetAudioParameters : TOnGetAudioParametersEvent;
FOnAudioStreamStarted : TOnAudioStreamStartedEvent;
FOnAudioStreamPacket : TOnAudioStreamPacketEvent;
FOnAudioStreamStopped : TOnAudioStreamStoppedEvent;
FOnAudioStreamError : TOnAudioStreamErrorEvent;
2020-06-21 21:27:55 +02:00
// ICefDevToolsMessageObserver
FOnDevToolsMessage : TOnDevToolsMessageEvent;
2021-01-16 14:35:01 +01:00
FOnDevToolsRawMessage : TOnDevToolsRawMessageEvent;
2020-06-21 21:27:55 +02:00
FOnDevToolsMethodResult : TOnDevToolsMethodResultEvent;
2021-01-16 14:35:01 +01:00
FOnDevToolsMethodRawResult : TOnDevToolsMethodRawResultEvent;
2020-06-21 21:27:55 +02:00
FOnDevToolsEvent : TOnDevToolsEventEvent;
2021-01-16 14:35:01 +01:00
FOnDevToolsRawEvent : TOnDevToolsEventRawEvent;
2020-06-21 21:27:55 +02:00
FOnDevToolsAgentAttached : TOnDevToolsAgentAttachedEvent;
FOnDevToolsAgentDetached : TOnDevToolsAgentDetachedEvent;
2020-08-04 17:52:09 +02:00
// ICefExtensionHandler
FOnExtensionLoadFailed : TOnExtensionLoadFailedEvent;
FOnExtensionLoaded : TOnExtensionLoadedEvent;
FOnExtensionUnloaded : TOnExtensionUnloadedEvent;
FOnExtensionBeforeBackgroundBrowser : TOnBeforeBackgroundBrowserEvent;
FOnExtensionBeforeBrowser : TOnBeforeBrowserEvent;
FOnExtensionGetActiveBrowser : TOnGetActiveBrowserEvent;
FOnExtensionCanAccessBrowser : TOnCanAccessBrowserEvent;
FOnExtensionGetExtensionResource : TOnGetExtensionResourceEvent;
2021-04-18 19:36:20 +02:00
// ICefPrintHandler
FOnPrintStart : TOnPrintStartEvent;
FOnPrintSettings : TOnPrintSettingsEvent;
FOnPrintDialog : TOnPrintDialogEvent;
FOnPrintJob : TOnPrintJobEvent;
FOnPrintReset : TOnPrintResetEvent;
FOnGetPDFPaperSize : TOnGetPDFPaperSizeEvent;
2021-07-29 16:20:34 +02:00
// ICefFrameHandler
FOnFrameCreated : TOnFrameCreated;
FOnFrameAttached : TOnFrameAttached;
FOnFrameDetached : TOnFrameDetached;
FOnMainFrameChanged : TOnMainFrameChanged;
2022-05-03 12:43:16 +02:00
// ICefCommandHandler
FOnChromeCommand : TOnChromeCommandEvent;
2023-04-08 19:00:33 +02:00
FOnIsChromeAppMenuItemVisible : TOnIsChromeAppMenuItemVisibleEvent;
FOnIsChromeAppMenuItemEnabled : TOnIsChromeAppMenuItemEnabledEvent;
FOnIsChromePageActionIconVisible : TOnIsChromePageActionIconVisibleEvent;
FOnIsChromeToolbarButtonVisible : TOnIsChromeToolbarButtonVisibleEvent;
2022-05-03 12:43:16 +02:00
2022-08-06 12:00:28 +02:00
// ICefPermissionHandler
FOnRequestMediaAccessPermission : TOnRequestMediaAccessPermissionEvent;
FOnShowPermissionPrompt : TOnShowPermissionPromptEvent;
FOnDismissPermissionPrompt : TOnDismissPermissionPromptEvent;
2019-11-10 00:24:26 +01:00
// Custom
FOnTextResultAvailable : TOnTextResultAvailableEvent;
FOnPdfPrintFinished : TOnPdfPrintFinishedEvent;
FOnPrefsAvailable : TOnPrefsAvailableEvent;
2021-10-22 19:19:57 +02:00
FOnPrefsUpdated : TNotifyEvent;
2019-11-10 00:24:26 +01:00
FOnCookiesDeleted : TOnCookiesDeletedEvent;
FOnResolvedHostAvailable : TOnResolvedIPsAvailableEvent;
FOnNavigationVisitorResultAvailable : TOnNavigationVisitorResultAvailableEvent;
FOnDownloadImageFinished : TOnDownloadImageFinishedEvent;
FOnCookiesFlushed : TNotifyEvent;
FOnCertificateExceptionsCleared : TNotifyEvent;
FOnHttpAuthCredentialsCleared : TNotifyEvent;
FOnAllConnectionsClosed : TNotifyEvent;
FOnExecuteTaskOnCefThread : TOnExecuteTaskOnCefThread;
FOnCookiesVisited : TOnCookiesVisited;
FOnCookieVisitorDestroyed : TOnCookieVisitorDestroyed;
FOnCookieSet : TOnCookieSet;
2019-12-10 16:49:07 +01:00
FOnZoomPctAvailable : TOnZoomPctAvailable;
2020-04-19 22:47:20 +02:00
FOnMediaRouteCreateFinished : TOnMediaRouteCreateFinishedEvent;
2020-07-15 14:56:41 +02:00
FOnMediaSinkDeviceInfo : TOnMediaSinkDeviceInfoEvent;
2023-03-11 17:29:30 +01:00
FOnCanFocus : TNotifyEvent;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
FOnBrowserCompMsg : TOnCompMsgEvent;
FOnWidgetCompMsg : TOnCompMsgEvent;
FOnRenderCompMsg : TOnCompMsgEvent;
{$ENDIF}
function GetIsLoading : boolean ;
function GetMultithreadApp : boolean ;
function GetHasDocument : boolean ;
function GetHasView : boolean ;
function GetHasDevTools : boolean ;
function GetHasClientHandler : boolean ;
function GetHasBrowser : boolean ;
function GetCanGoBack : boolean ;
function GetCanGoForward : boolean ;
function GetDocumentURL : ustring;
function GetZoomLevel : double ;
function GetZoomPct : double ;
2019-12-10 16:49:07 +01:00
function GetZoomStep : byte ;
2019-11-10 00:24:26 +01:00
function GetIsPopUp : boolean ;
function GetWindowHandle : TCefWindowHandle;
2020-09-30 12:43:48 +02:00
function GetOpenerWindowHandle : TCefWindowHandle;
2019-11-10 00:24:26 +01:00
function GetWindowlessFrameRate : integer ;
function GetFrameIsFocused : boolean ;
function GetInitialized : boolean ;
function GetVisibleNavigationEntry : ICefNavigationEntry;
function GetHasValidMainFrame : boolean ;
function GetFrameCount : NativeUInt ;
function GetRequestContextCache : ustring;
function GetRequestContextIsGlobal : boolean ;
function GetAudioMuted : boolean ;
2020-01-28 11:36:34 +01:00
function GetParentFormHandle : TCefWindowHandle; virtual ;
2020-04-19 22:47:20 +02:00
function GetRequestContext : ICefRequestContext;
function GetMediaRouter : ICefMediaRouter;
2020-05-07 11:46:48 +02:00
function GetBrowser : ICefBrowser;
function GetBrowserId : integer ;
function GetBrowserById( aID : integer ) : ICefBrowser;
function GetBrowserCount : integer ;
function GetBrowserIdByIndex( aIndex : integer ) : integer ;
2021-02-06 17:38:44 +01:00
{$IFDEF LINUX}
function GetXDisplay : PXDisplay;
{$ENDIF}
2019-11-10 00:24:26 +01:00
procedure SetDoNotTrack( aValue : boolean ) ;
procedure SetSendReferrer( aValue : boolean ) ;
procedure SetHyperlinkAuditing( aValue : boolean ) ;
procedure SetAllowOutdatedPlugins( aValue : boolean ) ;
procedure SetAlwaysAuthorizePlugins( aValue : boolean ) ;
2022-10-05 17:36:09 +02:00
procedure SetAlwaysOpenPDFExternally( aValue : boolean ) ;
2019-11-10 00:24:26 +01:00
procedure SetSpellChecking( aValue : boolean ) ;
procedure SetSpellCheckerDicts( const aValue : ustring) ;
procedure SetWebRTCIPHandlingPolicy( aValue : TCefWebRTCHandlingPolicy) ;
procedure SetWebRTCMultipleRoutes( aValue : TCefState) ;
procedure SetWebRTCNonProxiedUDP( aValue : TCefState) ;
procedure SetProxyType( aValue : integer ) ;
procedure SetProxyScheme( aValue : TCefProxyScheme) ;
procedure SetProxyServer( const aValue : ustring) ;
procedure SetProxyPort( aValue : integer ) ;
procedure SetProxyUsername( const aValue : ustring) ;
procedure SetProxyPassword( const aValue : ustring) ;
procedure SetProxyScriptURL( const aValue : ustring) ;
procedure SetProxyByPassList( const aValue : ustring) ;
procedure SetMaxConnectionsPerProxy( const aValue : integer ) ;
procedure SetCustomHeaderName( const aValue : ustring) ;
procedure SetCustomHeaderValue( const aValue : ustring) ;
procedure SetZoomLevel( const aValue : double ) ;
procedure SetZoomPct( const aValue : double ) ;
procedure SetZoomStep( aValue : byte ) ;
procedure SetWindowlessFrameRate( aValue : integer ) ;
procedure SetAudioMuted( aValue : boolean ) ;
procedure SetSafeSearch( aValue : boolean ) ;
2020-07-02 12:49:21 +02:00
procedure SetOffline( aValue : boolean ) ;
2019-11-10 00:24:26 +01:00
procedure SetYouTubeRestrict( aValue : integer ) ;
procedure SetPrintingEnabled( aValue : boolean ) ;
2019-12-03 12:12:19 +01:00
procedure SetAcceptLanguageList( const aValue : ustring) ;
2020-03-04 09:42:32 +01:00
procedure SetAcceptCookies( const aValue : TCefCookiePref) ;
procedure SetBlock3rdPartyCookies( const aValue : boolean ) ;
2020-05-07 11:46:48 +02:00
procedure SetMultiBrowserMode( aValue : boolean ) ;
2020-08-05 16:11:50 +02:00
procedure SetQuicAllowed( aValue : boolean ) ;
2020-08-22 14:56:24 +02:00
procedure SetJavascriptEnabled( aValue : boolean ) ;
procedure SetLoadImagesAutomatically( aValue : boolean ) ;
2023-01-25 18:06:32 +01:00
procedure SetBatterySaverModeState( aValue : TCefBatterySaverModeState) ;
2023-08-07 20:21:42 +02:00
procedure SetHighEfficiencyModeState( aValue : TCefHighEfficiencyModeState) ;
2022-02-19 18:56:41 +01:00
procedure SetDefaultUrl( const aValue : ustring) ;
2019-11-10 00:24:26 +01:00
function CreateBrowserHost( aWindowInfo : PCefWindowInfo; const aURL : ustring; const aSettings : PCefBrowserSettings; const aExtraInfo : ICefDictionaryValue; const aContext : ICefRequestContext) : boolean ;
function CreateBrowserHostSync( aWindowInfo : PCefWindowInfo; const aURL : ustring; const aSettings : PCefBrowserSettings; const aExtraInfo : ICefDictionaryValue; const aContext : ICefRequestContext) : Boolean ;
2020-05-07 11:46:48 +02:00
procedure DestroyAllBrowsers;
2019-11-10 00:24:26 +01:00
procedure DestroyClientHandler;
procedure DestroyReqContextHandler;
procedure DestroyResourceRequestHandler;
2020-04-19 22:47:20 +02:00
procedure DestroyMediaObserver;
2020-06-21 21:27:55 +02:00
procedure DestroyDevToolsMsgObserver;
2020-08-04 17:52:09 +02:00
procedure DestroyExtensionHandler;
2020-07-14 15:50:23 +02:00
procedure DestroyAllHandlersAndObservers;
2020-06-21 21:27:55 +02:00
2021-09-28 16:39:21 +02:00
procedure CreateResourceRequestHandler; virtual ;
procedure CreateMediaObserver; virtual ;
procedure CreateDevToolsMsgObserver; virtual ;
procedure CreateExtensionHandler; virtual ;
procedure CreateRequestContextHandler; virtual ;
procedure CreateOptionsClasses; virtual ;
procedure CreateSyncObjects; virtual ;
procedure CreateBrowserInfoList; virtual ;
{$IFDEF MSWINDOWS}
procedure CreateWindowWithWndProc; virtual ;
{$ENDIF}
2019-11-10 00:24:26 +01:00
procedure InitializeEvents;
procedure InitializeSettings( var aSettings : TCefBrowserSettings) ;
function UpdateProxyPrefs( const aBrowser: ICefBrowser) : boolean ;
function UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; aValue : boolean ) : boolean ; overload ;
function UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; aValue : integer ) : boolean ; overload ;
function UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; const aValue : double ) : boolean ; overload ;
function UpdatePreference( const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean ; overload ;
function UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; const aValue : TStringList) : boolean ; overload ;
function UpdateStringListPref( const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean ;
2019-12-10 16:49:07 +01:00
function ExecuteUpdateZoomStepTask( aInc : boolean ) : boolean ;
function ExecuteUpdateZoomPctTask( aInc : boolean ) : boolean ;
function ExecuteReadZoomTask : boolean ;
function ExecuteSetZoomPctTask( const aValue : double ) : boolean ;
function ExecuteSetZoomLevelTask( const aValue : double ) : boolean ;
function ExecuteSetZoomStepTask( aValue : byte ) : boolean ;
2020-11-22 16:42:52 +01:00
function ExecuteBrowserNavigationTask( aTask : TCefBrowserNavigation) : boolean ;
2019-11-10 00:24:26 +01:00
2019-12-10 16:49:07 +01:00
procedure UpdateHostZoomLevel( const aValue : double ) ;
procedure UpdateHostZoomPct( const aValue : double ) ;
procedure DelayedDragging;
2019-11-10 00:24:26 +01:00
procedure InitializeWindowInfo( aParentHandle : TCefWindowHandle; aParentRect : TRect; const aWindowName : ustring) ; virtual ;
procedure DefaultInitializeDevToolsWindowInfo( aDevToolsWnd: TCefWindowHandle; const aClientRect: TRect; const aWindowName: ustring) ;
2019-12-10 16:49:07 +01:00
2020-05-07 11:46:48 +02:00
function AddBrowser( const aBrowser : ICefBrowser) : boolean ;
function RemoveBrowser( const aBrowser : ICefBrowser) : boolean ;
procedure SetBrowserIsClosing( aID : integer ) ;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
2020-01-28 11:36:34 +01:00
procedure PrefsAvailableMsg( aResultOK : boolean ) ;
2020-03-29 17:31:42 +02:00
function SendCompMessage( aMsg : cardinal ; aWParam : WPARAM = 0 ; aLParam : LPARAM = 0 ) : boolean ;
2019-12-10 16:49:07 +01:00
procedure ToMouseEvent( grfKeyState : Longint ; pt : TPoint; var aMouseEvent : TCefMouseEvent) ;
2019-11-10 00:24:26 +01:00
procedure WndProc( var aMessage: TMessage) ;
procedure CreateStub( const aMethod : TWndMethod; var aStub : Pointer ) ;
procedure FreeAndNilStub( var aStub : pointer ) ;
2019-12-10 16:49:07 +01:00
function InstallCompWndProc( aWnd: THandle; aStub: Pointer ) : TFNWndProc;
2019-11-10 00:24:26 +01:00
procedure RestoreCompWndProc( var aOldWnd: THandle; aNewWnd: THandle; var aProc: TFNWndProc) ;
2019-11-10 18:23:39 +01:00
procedure CallOldCompWndProc( aProc: TFNWndProc; aWnd: THandle; var aMessage: TMessage) ;
2019-11-10 00:24:26 +01:00
procedure BrowserCompWndProc( var aMessage: TMessage) ;
procedure WidgetCompWndProc( var aMessage: TMessage) ;
procedure RenderCompWndProc( var aMessage: TMessage) ;
2020-09-20 12:07:24 +02:00
procedure RestoreOldCompWndProc;
2021-08-19 14:20:01 +02:00
function CopyDCToBitmapStream( aSrcDC : HDC; const aSrcRect : TRect; const aStream : TStream) : boolean ;
2019-11-10 00:24:26 +01:00
{$ENDIF}
procedure DragDropManager_OnDragEnter( Sender: TObject; const aDragData : ICefDragData; grfKeyState: Longint ; pt: TPoint; var dwEffect: Longint ) ;
procedure DragDropManager_OnDragOver( Sender: TObject; grfKeyState: Longint ; pt: TPoint; var dwEffect: Longint ) ;
procedure DragDropManager_OnDragLeave( Sender: TObject) ;
procedure DragDropManager_OnDrop( Sender: TObject; grfKeyState: Longint ; pt: TPoint; var dwEffect: Longint ) ;
// ICefClient
function doOnProcessMessageReceived( const browser: ICefBrowser; const frame: ICefFrame; sourceProcess: TCefProcessId; const aMessage: ICefProcessMessage) : Boolean ; virtual ;
// ICefLoadHandler
procedure doOnLoadStart( const browser: ICefBrowser; const frame: ICefFrame; transitionType: TCefTransitionType) ; virtual ;
procedure doOnLoadEnd( const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer ) ; virtual ;
procedure doOnLoadError( const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring) ; virtual ;
procedure doOnLoadingStateChange( const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean ) ; virtual ;
// ICefFocusHandler
procedure doOnTakeFocus( const browser: ICefBrowser; next: Boolean ) ; virtual ;
function doOnSetFocus( const browser: ICefBrowser; source: TCefFocusSource) : Boolean ; virtual ;
procedure doOnGotFocus( const browser: ICefBrowser) ; virtual ;
// ICefContextMenuHandler
procedure doOnBeforeContextMenu( const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel) ; virtual ;
function doRunContextMenu( const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel; const callback: ICefRunContextMenuCallback) : Boolean ; virtual ;
function doOnContextMenuCommand( const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; commandId: Integer ; eventFlags: TCefEventFlags) : Boolean ; virtual ;
procedure doOnContextMenuDismissed( const browser: ICefBrowser; const frame: ICefFrame) ; virtual ;
2022-08-06 12:00:28 +02:00
function doRunQuickMenu( const browser: ICefBrowser; const frame: ICefFrame; location: PCefPoint; size: PCefSize; edit_state_flags: TCefQuickMenuEditStateFlags; const callback: ICefRunQuickMenuCallback) : boolean ; virtual ;
function doOnQuickMenuCommand( const browser: ICefBrowser; const frame: ICefFrame; command_id: integer ; event_flags: TCefEventFlags) : boolean ; virtual ;
procedure doOnQuickMenuDismissed( const browser: ICefBrowser; const frame: ICefFrame) ; virtual ;
2019-11-10 00:24:26 +01:00
// ICefKeyboardHandler
function doOnPreKeyEvent( const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle; out isKeyboardShortcut: Boolean ) : Boolean ; virtual ;
function doOnKeyEvent( const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: TCefEventHandle) : Boolean ; virtual ;
// ICefDisplayHandler
procedure doOnAddressChange( const browser: ICefBrowser; const frame: ICefFrame; const url: ustring) ; virtual ;
procedure doOnTitleChange( const browser: ICefBrowser; const title: ustring) ; virtual ;
procedure doOnFaviconUrlChange( const browser: ICefBrowser; const iconUrls: TStrings) ; virtual ;
procedure doOnFullScreenModeChange( const browser: ICefBrowser; fullscreen: Boolean ) ; virtual ;
function doOnTooltip( const browser: ICefBrowser; var text : ustring) : Boolean ; virtual ;
procedure doOnStatusMessage( const browser: ICefBrowser; const value: ustring) ; virtual ;
function doOnConsoleMessage( const browser: ICefBrowser; level: TCefLogSeverity; const aMessage, source: ustring; line: Integer ) : Boolean ; virtual ;
function doOnAutoResize( const browser: ICefBrowser; const new_size: PCefSize) : Boolean ; virtual ;
procedure doOnLoadingProgressChange( const browser: ICefBrowser; const progress: double ) ; virtual ;
2021-01-26 18:26:24 +01:00
procedure doOnCursorChange( const browser: ICefBrowser; cursor_: TCefCursorHandle; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo; var aResult : boolean ) ; virtual ;
2022-08-06 12:00:28 +02:00
procedure doOnMediaAccessChange( const browser: ICefBrowser; has_video_access, has_audio_access: boolean ) ; virtual ;
2019-11-10 00:24:26 +01:00
// ICefDownloadHandler
2022-05-03 12:43:16 +02:00
function doOnCanDownload( const browser: ICefBrowser; const url, request_method: ustring) : boolean ;
2019-11-10 00:24:26 +01:00
procedure doOnBeforeDownload( const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const suggestedName: ustring; const callback: ICefBeforeDownloadCallback) ; virtual ;
procedure doOnDownloadUpdated( const browser: ICefBrowser; const downloadItem: ICefDownloadItem; const callback: ICefDownloadItemCallback) ; virtual ;
// ICefJsDialogHandler
function doOnJsdialog( const browser: ICefBrowser; const originUrl: ustring; dialogType: TCefJsDialogType; const messageText, defaultPromptText: ustring; const callback: ICefJsDialogCallback; out suppressMessage: Boolean ) : Boolean ; virtual ;
function doOnBeforeUnloadDialog( const browser: ICefBrowser; const messageText: ustring; isReload: Boolean ; const callback: ICefJsDialogCallback) : Boolean ; virtual ;
procedure doOnResetDialogState( const browser: ICefBrowser) ; virtual ;
procedure doOnDialogClosed( const browser: ICefBrowser) ; virtual ;
// ICefLifeSpanHandler
function doOnBeforePopup( const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean ; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue; var noJavascriptAccess: Boolean ) : Boolean ; virtual ;
procedure doOnAfterCreated( const browser: ICefBrowser) ; virtual ;
procedure doOnBeforeClose( const browser: ICefBrowser) ; virtual ;
function doOnClose( const browser: ICefBrowser) : Boolean ; virtual ;
// ICefRequestHandler
function doOnBeforeBrowse( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean ) : Boolean ; virtual ;
function doOnOpenUrlFromTab( const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean ) : Boolean ; virtual ;
procedure doGetResourceRequestHandler_ReqHdlr( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean ; const request_initiator: ustring; var disable_default_handling: boolean ; var aResourceRequestHandler : ICefResourceRequestHandler) ; virtual ;
function doOnGetAuthCredentials( const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean ; const host: ustring; port: Integer ; const realm, scheme: ustring; const callback: ICefAuthCallback) : Boolean ; virtual ;
2021-10-22 19:19:57 +02:00
function doOnCertificateError( const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefCallback) : Boolean ; virtual ;
2019-11-10 00:24:26 +01:00
function doOnSelectClientCertificate( const browser: ICefBrowser; isProxy: boolean ; const host: ustring; port: integer ; certificatesCount: NativeUInt ; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback) : boolean ; virtual ;
procedure doOnRenderViewReady( const browser: ICefBrowser) ; virtual ;
procedure doOnRenderProcessTerminated( const browser: ICefBrowser; status: TCefTerminationStatus) ; virtual ;
2020-06-21 21:27:55 +02:00
procedure doOnDocumentAvailableInMainFrame( const browser: ICefBrowser) ; virtual ;
2019-11-10 00:24:26 +01:00
// ICefResourceRequestHandler
2021-10-22 19:19:57 +02:00
function doOnBeforeResourceLoad( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const callback: ICefCallback) : TCefReturnValue; virtual ;
2019-11-10 00:24:26 +01:00
procedure doOnGetResourceHandler( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; var aResourceHandler : ICefResourceHandler) ; virtual ;
procedure doOnResourceRedirect( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; var newUrl: ustring) ; virtual ;
function doOnResourceResponse( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse) : Boolean ; virtual ;
procedure doOnGetResourceResponseFilter( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; var aResponseFilter: ICefResponseFilter) ; virtual ;
procedure doOnResourceLoadComplete( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; status: TCefUrlRequestStatus; receivedContentLength: Int64 ) ; virtual ;
procedure doOnProtocolExecution( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; var allowOsExecution: Boolean ) ; virtual ;
// ICefCookieAccessFilter
function doCanSendCookie( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const cookie: PCefCookie) : boolean ; virtual ;
function doCanSaveCookie( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; const response: ICefResponse; const cookie: PCefCookie) : boolean ; virtual ;
// ICefDialogHandler
2022-05-26 13:08:20 +02:00
function doOnFileDialog( const browser: ICefBrowser; mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; const callback: ICefFileDialogCallback) : Boolean ; virtual ;
2019-11-10 00:24:26 +01:00
// ICefRenderHandler
procedure doOnGetAccessibilityHandler( var aAccessibilityHandler : ICefAccessibilityHandler) ; virtual ;
function doOnGetRootScreenRect( const browser: ICefBrowser; var rect: TCefRect) : Boolean ; virtual ;
procedure doOnGetViewRect( const browser: ICefBrowser; var rect: TCefRect) ; virtual ;
function doOnGetScreenPoint( const browser: ICefBrowser; viewX, viewY: Integer ; var screenX, screenY: Integer ) : Boolean ; virtual ;
function doOnGetScreenInfo( const browser: ICefBrowser; var screenInfo: TCefScreenInfo) : Boolean ; virtual ;
procedure doOnPopupShow( const browser: ICefBrowser; show: Boolean ) ; virtual ;
procedure doOnPopupSize( const browser: ICefBrowser; const rect: PCefRect) ; virtual ;
2019-11-20 10:45:46 +01:00
procedure doOnPaint( const browser: ICefBrowser; type_: TCefPaintElementType; dirtyRectsCount: NativeUInt ; const dirtyRects: PCefRectArray; const buffer: Pointer ; width, height: Integer ) ; virtual ;
procedure doOnAcceleratedPaint( const browser: ICefBrowser; type_: TCefPaintElementType; dirtyRectsCount: NativeUInt ; const dirtyRects: PCefRectArray; shared_handle: Pointer ) ; virtual ;
2022-08-06 12:00:28 +02:00
procedure doGetTouchHandleSize( const browser: ICefBrowser; orientation: TCefHorizontalAlignment; var size: TCefSize) ; virtual ;
procedure doOnTouchHandleStateChanged( const browser: ICefBrowser; const state: TCefTouchHandleState) ; virtual ;
2019-11-10 00:24:26 +01:00
function doOnStartDragging( const browser: ICefBrowser; const dragData: ICefDragData; allowedOps: TCefDragOperations; x, y: Integer ) : Boolean ; virtual ;
procedure doOnUpdateDragCursor( const browser: ICefBrowser; operation: TCefDragOperation) ; virtual ;
procedure doOnScrollOffsetChanged( const browser: ICefBrowser; x, y: Double ) ; virtual ;
procedure doOnIMECompositionRangeChanged( const browser: ICefBrowser; const selected_range: PCefRange; character_boundsCount: NativeUInt ; const character_bounds: PCefRect) ; virtual ;
procedure doOnTextSelectionChanged( const browser: ICefBrowser; const selected_text: ustring; const selected_range: PCefRange) ; virtual ;
procedure doOnVirtualKeyboardRequested( const browser: ICefBrowser; input_mode: TCefTextInpuMode) ; virtual ;
// ICefDragHandler
function doOnDragEnter( const browser: ICefBrowser; const dragData: ICefDragData; mask: TCefDragOperations) : Boolean ; virtual ;
2019-11-20 10:45:46 +01:00
procedure doOnDraggableRegionsChanged( const browser: ICefBrowser; const frame: ICefFrame; regionsCount: NativeUInt ; const regions: PCefDraggableRegionArray) ; virtual ;
2019-11-10 00:24:26 +01:00
// ICefFindHandler
procedure doOnFindResult( const browser: ICefBrowser; identifier, count: Integer ; const selectionRect: PCefRect; activeMatchOrdinal: Integer ; finalUpdate: Boolean ) ; virtual ;
// ICefRequestContextHandler
procedure doOnRequestContextInitialized( const request_context: ICefRequestContext) ; virtual ;
procedure doGetResourceRequestHandler_ReqCtxHdlr( const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean ; const request_initiator: ustring; var disable_default_handling: boolean ; var aResourceRequestHandler : ICefResourceRequestHandler) ; virtual ;
2020-04-19 22:47:20 +02:00
// ICefMediaObserver
2020-06-21 21:27:55 +02:00
procedure doOnSinks( const sinks: TCefMediaSinkArray) ; virtual ;
procedure doOnRoutes( const routes: TCefMediaRouteArray) ; virtual ;
procedure doOnRouteStateChanged( const route: ICefMediaRoute; state: TCefMediaRouteConnectionState) ; virtual ;
procedure doOnRouteMessageReceived( const route: ICefMediaRoute; const message_: ustring) ; virtual ;
2020-04-19 22:47:20 +02:00
2020-05-23 15:00:44 +02:00
// ICefAudioHandler
2020-06-21 21:27:55 +02:00
procedure doOnGetAudioParameters( const browser: ICefBrowser; var params: TCefAudioParameters; var aResult: boolean ) ; virtual ;
procedure doOnAudioStreamStarted( const browser: ICefBrowser; const params: TCefAudioParameters; channels: integer ) ; virtual ;
procedure doOnAudioStreamPacket( const browser: ICefBrowser; const data : PPSingle; frames: integer ; pts: int64 ) ; virtual ;
procedure doOnAudioStreamStopped( const browser: ICefBrowser) ; virtual ;
procedure doOnAudioStreamError( const browser: ICefBrowser; const message_: ustring) ; virtual ;
// ICefDevToolsMessageObserver
2021-01-16 14:35:01 +01:00
procedure doOnDevToolsMessage( const browser: ICefBrowser; const message_: Pointer ; message_size: NativeUInt ; var aHandled: boolean ) ; virtual ;
procedure doOnDevToolsMethodResult( const browser: ICefBrowser; message_id: integer ; success: boolean ; const result : Pointer ; result_size: NativeUInt ) ; virtual ;
procedure doOnDevToolsEvent( const browser: ICefBrowser; const method: ustring; const params: Pointer ; params_size: NativeUInt ) ; virtual ;
2020-06-21 21:27:55 +02:00
procedure doOnDevToolsAgentAttached( const browser: ICefBrowser) ; virtual ;
procedure doOnDevToolsAgentDetached( const browser: ICefBrowser) ; virtual ;
2020-05-23 15:00:44 +02:00
2020-08-04 17:52:09 +02:00
// ICefExtensionHandler
procedure doOnExtensionLoadFailed( result : TCefErrorcode) ;
procedure doOnExtensionLoaded( const extension: ICefExtension) ;
procedure doOnExtensionUnloaded( const extension: ICefExtension) ;
function doOnExtensionBeforeBackgroundBrowser( const extension: ICefExtension; const url: ustring; var client: ICefClient; var settings: TCefBrowserSettings) : boolean ;
function doOnExtensionBeforeBrowser( const extension: ICefExtension; const browser, active_browser: ICefBrowser; index : Integer ; const url: ustring; active: boolean ; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings) : boolean ;
procedure doOnExtensionGetActiveBrowser( const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean ; var aRsltBrowser: ICefBrowser) ;
function doOnExtensionCanAccessBrowser( const extension: ICefExtension; const browser: ICefBrowser; include_incognito: boolean ; const target_browser: ICefBrowser) : boolean ;
function doOnExtensionGetExtensionResource( const extension: ICefExtension; const browser: ICefBrowser; const file_: ustring; const callback: ICefGetExtensionResourceCallback) : boolean ;
2021-04-18 19:36:20 +02:00
// ICefPrintHandler
procedure doOnPrintStart( const browser: ICefBrowser) ;
procedure doOnPrintSettings( const browser: ICefBrowser; const settings: ICefPrintSettings; getDefaults: boolean ) ;
procedure doOnPrintDialog( const browser: ICefBrowser; hasSelection: boolean ; const callback: ICefPrintDialogCallback; var aResult : boolean ) ;
procedure doOnPrintJob( const browser: ICefBrowser; const documentName, PDFFilePath: ustring; const callback: ICefPrintJobCallback; var aResult : boolean ) ;
procedure doOnPrintReset( const browser: ICefBrowser) ;
procedure doOnGetPDFPaperSize( const browser: ICefBrowser; deviceUnitsPerInch: Integer ; var aResult : TCefSize) ;
2021-07-29 16:20:34 +02:00
// ICefFrameHandler
procedure doOnFrameCreated( const browser: ICefBrowser; const frame: ICefFrame) ;
2021-09-27 12:04:33 +02:00
procedure doOnFrameAttached( const browser: ICefBrowser; const frame: ICefFrame; reattached: boolean ) ;
2021-07-29 16:20:34 +02:00
procedure doOnFrameDetached( const browser: ICefBrowser; const frame: ICefFrame) ;
procedure doOnMainFrameChanged( const browser: ICefBrowser; const old_frame, new_frame: ICefFrame) ;
2022-05-03 12:43:16 +02:00
// ICefCommandHandler
function doOnChromeCommand( const browser: ICefBrowser; command_id: integer ; disposition: TCefWindowOpenDisposition) : boolean ;
2023-04-08 19:00:33 +02:00
function doOnIsChromeAppMenuItemVisible( const browser: ICefBrowser; command_id: integer ) : boolean ;
function doOnIsChromeAppMenuItemEnabled( const browser: ICefBrowser; command_id: integer ) : boolean ;
function doOnIsChromePageActionIconVisible( icon_type: TCefChromePageActionIconType) : boolean ;
function doOnIsChromeToolbarButtonVisible( button_type: TCefChromeToolbarButtonType) : boolean ;
2022-05-03 12:43:16 +02:00
2022-08-06 12:00:28 +02:00
// ICefPermissionHandler
function doOnRequestMediaAccessPermission( const browser: ICefBrowser; const frame: ICefFrame; const requesting_origin: ustring; requested_permissions: cardinal ; const callback: ICefMediaAccessCallback) : boolean ;
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) ;
2019-11-10 00:24:26 +01:00
// Custom
2021-04-21 15:09:14 +02:00
procedure GetSettings( var aSettings : TCefBrowserSettings) ;
2019-11-10 00:24:26 +01:00
procedure doCookiesDeleted( numDeleted : integer ) ; virtual ;
procedure doPdfPrintFinished( aResultOK : boolean ) ; virtual ;
procedure doTextResultAvailable( const aText : ustring) ; virtual ;
procedure doUpdatePreferences( const aBrowser: ICefBrowser) ; virtual ;
procedure doUpdateOwnPreferences; virtual ;
function doSavePreferences : boolean ; virtual ;
procedure doResolvedHostAvailable( result : TCefErrorCode; const resolvedIps: TStrings) ; virtual ;
function doNavigationVisitorResultAvailable( const entry: ICefNavigationEntry; current: Boolean ; index , total: Integer ) : boolean ; virtual ;
procedure doDownloadImageFinished( const imageUrl: ustring; httpStatusCode: Integer ; const image: ICefImage) ; virtual ;
procedure doOnCookiesStoreFlushed; virtual ;
procedure doCertificateExceptionsCleared; virtual ;
procedure doHttpAuthCredentialsCleared; virtual ;
procedure doAllConnectionsClosed; virtual ;
procedure doOnExecuteTaskOnCefThread( aTaskID : cardinal ) ; virtual ;
2020-05-23 15:00:44 +02:00
procedure doOnCookiesVisited( const name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean ; const creation, lastAccess, expires: TDateTime; count, total, aID : Integer ; same_site : TCefCookieSameSite; priority : TCefCookiePriority; var aDeleteCookie, aResult : Boolean ) ; virtual ;
2019-11-10 00:24:26 +01:00
procedure doOnCookieVisitorDestroyed( aID : integer ) ; virtual ;
procedure doOnCookieSet( aSuccess : boolean ; aID : integer ) ; virtual ;
2019-12-10 16:49:07 +01:00
procedure doUpdateZoomStep( aInc : boolean ) ; virtual ;
procedure doUpdateZoomPct( aInc : boolean ) ; virtual ;
procedure doReadZoom; virtual ;
procedure doSetZoomLevel( const aValue : double ) ; virtual ;
procedure doSetZoomPct( const aValue : double ) ; virtual ;
procedure doSetZoomStep( aValue : byte ) ; virtual ;
2020-04-19 22:47:20 +02:00
procedure doMediaRouteCreateFinished( result : TCefMediaRouterCreateResult; const error: ustring; const route: ICefMediaRoute) ; virtual ;
2020-07-15 14:56:41 +02:00
procedure doOnMediaSinkDeviceInfo( const ip_address: ustring; port: integer ; const model_name: ustring) ; virtual ;
2020-11-22 16:42:52 +01:00
procedure doBrowserNavigation( aTask : TCefBrowserNavigation) ; virtual ;
2022-08-29 22:45:28 +02:00
procedure doSetAudioMuted( aValue : boolean ) ; virtual ;
procedure doToggleAudioMuted; virtual ;
2023-03-11 17:29:30 +01:00
procedure doEnableFocus; virtual ;
2020-05-23 15:00:44 +02:00
function MustCreateAudioHandler : boolean ; virtual ;
2022-05-03 12:43:16 +02:00
function MustCreateCommandHandler : boolean ; virtual ;
2020-06-21 21:27:55 +02:00
function MustCreateDevToolsMessageObserver : boolean ; virtual ;
2019-11-10 00:24:26 +01:00
function MustCreateLoadHandler : boolean ; virtual ;
function MustCreateFocusHandler : boolean ; virtual ;
function MustCreateContextMenuHandler : boolean ; virtual ;
function MustCreateDialogHandler : boolean ; virtual ;
function MustCreateKeyboardHandler : boolean ; virtual ;
function MustCreateDisplayHandler : boolean ; virtual ;
function MustCreateDownloadHandler : boolean ; virtual ;
function MustCreateJsDialogHandler : boolean ; virtual ;
function MustCreateLifeSpanHandler : boolean ; virtual ;
function MustCreateRenderHandler : boolean ; virtual ;
function MustCreateRequestHandler : boolean ; virtual ;
function MustCreateDragHandler : boolean ; virtual ;
function MustCreateFindHandler : boolean ; virtual ;
function MustCreateResourceRequestHandler : boolean ; virtual ;
function MustCreateCookieAccessFilter : boolean ; virtual ;
2020-04-19 22:47:20 +02:00
function MustCreateMediaObserver : boolean ; virtual ;
2020-08-04 17:52:09 +02:00
function MustCreateExtensionHandler : boolean ; virtual ;
2021-04-18 19:36:20 +02:00
function MustCreatePrintHandler : boolean ; virtual ;
2021-07-29 16:20:34 +02:00
function MustCreateFrameHandler : boolean ; virtual ;
2022-08-06 12:00:28 +02:00
function MustCreatePermissionHandler : boolean ; virtual ;
2019-11-10 00:24:26 +01:00
2020-01-28 11:36:34 +01:00
property ParentFormHandle : TCefWindowHandle read GetParentFormHandle;
2019-11-10 00:24:26 +01:00
public
constructor Create( AOwner: TComponent) ; override ;
destructor Destroy; override ;
procedure AfterConstruction; override ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to create the client handler which will also create most of the browser handlers needed for the browser.
/// </summary>
2019-11-10 00:24:26 +01:00
function CreateClientHandler( aIsOSR : boolean = True ) : boolean ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to create the client handler when a browser requests a new browser in a popup window or tab in the TChromiumCore.OnBeforePopup event.
/// </summary>
2019-11-10 00:24:26 +01:00
function CreateClientHandler( var aClient : ICefClient; aIsOSR : boolean = True ) : boolean ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Request that the browser close. The JavaScript 'onbeforeunload' event will
/// be fired. If |aForceClose| is false (0) the event handler, if any, will be
/// allowed to prompt the user and the user can optionally cancel the close.
/// If |aForceClose| is true (1) the prompt will not be displayed and the
/// close will proceed. Results in a call to
/// ICefLifeSpanHandler.DoClose() if the event handler allows the close
/// or if |aForceClose| is true (1). See ICefLifeSpanHandler.DoClose()
/// documentation for additional usage information.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure CloseBrowser( aForceClose : boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls CloseBrowser for all the browsers handled by this TChromiumCore instance.
/// </summary>
2020-05-07 11:46:48 +02:00
procedure CloseAllBrowsers;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Helper for closing a browser. Call this function from the top-level window
/// close handler (if any). Internally this calls CloseBrowser(false (0)) if
/// the close has not yet been initiated. This function returns false (0)
/// while the close is pending and true (1) after the close has completed. See
/// CloseBrowser() and ICefLifeSpanHandler.DoClose() documentation for
/// additional usage information. This function must be called on the browser
/// process UI thread.
/// </summary>
2020-05-05 18:10:33 +02:00
function TryCloseBrowser : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Select the browser with the aID identifier when TChromiumCore uses the
/// multi-browser mode.
/// </summary>
2020-05-07 11:46:48 +02:00
function SelectBrowser( aID : integer ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the index in the browsers array of the browser with the aID
/// identifier when TChromiumCore uses the multi-browser mode.
/// </summary>
2020-05-12 11:30:19 +02:00
function IndexOfBrowserID( aID : integer ) : integer ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Creates a new request context in the aContext parameter that shares
/// storage with the request context of the current browser and uses an
/// optional handler.
/// </summary>
2019-11-10 00:24:26 +01:00
function ShareRequestContext( var aContext : ICefRequestContext; const aHandler : ICefRequestContextHandler = nil ) : boolean ;
{$IFDEF MSWINDOWS}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used with browsers in OSR mode to initialize drag and drop in Windows.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure InitializeDragAndDrop( const aDropTargetWnd : HWND) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used with browsers in OSR mode to shutdown drag and drop in Windows.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ShutdownDragAndDrop;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to reparent the browser to a different TCEFWindowParent.
/// </summary>
2020-04-03 17:57:52 +02:00
function SetNewBrowserParent( aNewParentHwnd : HWND) : boolean ;
2019-11-10 00:24:26 +01:00
{$ENDIF MSWINDOWS}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to create the browser after the global request context has been
/// initialized. You need to set all properties and events before calling
/// this function because it will only create the internal handlers needed
/// for those events and the property values will be used in the browser
/// initialization.
/// The browser will be fully initialized when the TChromiumCore.OnAfterCreated
/// event is triggered.
/// </summary>
2021-04-18 19:36:20 +02:00
function CreateBrowser( aParentHandle : TCefWindowHandle; aParentRect : TRect; const aWindowName : ustring = '' ; const aContext : ICefRequestContext = nil ; const aExtraInfo : ICefDictionaryValue = nil ; aForceAsPopup : boolean = False ) : boolean ; overload ; virtual ;
2020-05-05 18:10:33 +02:00
function CreateBrowser( const aURL : ustring; const aBrowserViewComp : TCEFBrowserViewComponent; const aContext : ICefRequestContext = nil ; const aExtraInfo : ICefDictionaryValue = nil ) : boolean ; overload ; virtual ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to navigate to a URL in the specified frame or the main frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure LoadURL( const aURL : ustring; const aFrameName : ustring = '' ) ; overload ;
procedure LoadURL( const aURL : ustring; const aFrame : ICefFrame) ; overload ;
procedure LoadURL( const aURL : ustring; const aFrameIdentifier : int64 ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to load a DATA URI with the HTML string contents in the specified frame or the main frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure LoadString( const aHTML : ustring; const aFrameName : ustring = '' ) ; overload ;
procedure LoadString( const aHTML : ustring; const aFrame : ICefFrame) ; overload ;
procedure LoadString( const aHTML : ustring; const aFrameIdentifier : int64 ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to load a DATA URI with the stream contents in the specified frame or the main frame.
/// The DATA URI will be configured with the mime type and charset specified in the parameters.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure LoadResource( const aStream : TCustomMemoryStream; const aMimeType, aCharset : string ; const aFrameName : ustring = '' ) ; overload ;
procedure LoadResource( const aStream : TCustomMemoryStream; const aMimeType, aCharset : string ; const aFrame : ICefFrame) ; overload ;
procedure LoadResource( const aStream : TCustomMemoryStream; const aMimeType, aCharset : string ; const aFrameIdentifier : int64 ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Load the request represented by the aRequest object.
///
/// WARNING: This function will fail with bad IPC message reason
/// INVALID_INITIATOR_ORIGIN (213) unless you first navigate to the request
/// origin using some other mechanism (LoadURL, link click, etc).
/// </summary>
2019-11-10 00:24:26 +01:00
procedure LoadRequest( const aRequest: ICefRequest) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Navigate backwards.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure GoBack;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Navigate forwards.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure GoForward;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Reload the current page.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure Reload;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Reload the current page ignoring any cached data.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ReloadIgnoreCache;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Stop loading the page.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure StopLoad;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Starts downloading a file in the specified URL.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure StartDownload( const aURL : ustring) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Starts downloading an image in the specified URL.
/// Use the TChromiumCore.OnDownloadImageFinished event to receive the image.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure DownloadImage( const imageUrl: ustring; isFavicon: Boolean ; maxImageSize: cardinal ; bypassCache: Boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowserHost.SendMouseWheelEvent to simulate a simple mouse wheel event.
/// Use TChromiumCore.SendMouseWheelEvent if you need to specify the mouse coordinates or the event flags.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SimulateMouseWheel( aDeltaX, aDeltaY : integer ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Clears all certificate exceptions that were added as part of handling
/// OnCertificateError. If you call this it is recommended that you also call
/// CloseAllConnections() or you risk not being prompted again for server
/// certificates if you reconnect quickly.
/// If aClearImmediately is false then OnCertificateExceptionsCleared is
/// triggered when the exceptions are cleared.
/// </summary>
2019-11-10 00:24:26 +01:00
function ClearCertificateExceptions( aClearImmediately : boolean = True ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Clears all HTTP authentication credentials that were added as part of
/// handling GetAuthCredentials. If |callback| is non-NULL it will be executed
/// on the UI thread after completion.
/// If aClearImmediately is false then OnHttpAuthCredentialsCleared is triggered
/// when the credeintials are cleared.
/// </summary>
2019-11-10 00:24:26 +01:00
function ClearHttpAuthCredentials( aClearImmediately : boolean = True ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Clears all active and idle connections that Chromium currently has. This
/// is only recommended if you have released all other CEF objects but don't
/// yet want to call cef_shutdown().
/// </summary>
2019-11-10 00:24:26 +01:00
function CloseAllConnections( aCloseImmediately : boolean = True ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve all the HTML content from the specified frame or the main frame.
/// Leave aFrameName empty to get the HTML source from the main frame.
/// It uses a CefStringVisitor to get the HTML content asynchronously and the
/// result will be received in the TChromiumCore.OnTextResultAvailable event.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure RetrieveHTML( const aFrameName : ustring = '' ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve all the HTML content from the specified frame or the main frame.
/// Set aFrame to nil to get the HTML source from the main frame.
/// It uses a CefStringVisitor to get the HTML content asynchronously and the
/// result will be received in the TChromiumCore.OnTextResultAvailable event.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure RetrieveHTML( const aFrame : ICefFrame) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve all the HTML content from the specified frame or the main frame.
/// Set aFrameIdentifier to zero to get the HTML source from the main frame.
/// It uses a CefStringVisitor to get the HTML content asynchronously and the
/// result will be received in the TChromiumCore.OnTextResultAvailable event.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure RetrieveHTML( const aFrameIdentifier : int64 ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve all the text content from the specified frame or the main frame.
/// Leave aFrameName empty to get the text from the main frame.
/// It uses a CefStringVisitor to get the text asynchronously and the
/// result will be received in the TChromiumCore.OnTextResultAvailable event.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure RetrieveText( const aFrameName : ustring = '' ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve all the text content from the specified frame or the main frame.
/// Set aFrame to nil to get the text from the main frame.
/// It uses a CefStringVisitor to get the text asynchronously and the
/// result will be received in the TChromiumCore.OnTextResultAvailable event.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure RetrieveText( const aFrame : ICefFrame) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve all the text content from the specified frame or the main frame.
/// Set aFrameIdentifier to zero to get the text from the main frame.
/// It uses a CefStringVisitor to get the text asynchronously and the
/// result will be received in the TChromiumCore.OnTextResultAvailable event.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure RetrieveText( const aFrameIdentifier : int64 ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve a snapshot of current navigation entries asynchronously. The
/// TChromiumCore.OnNavigationVisitorResultAvailable event will be triggered
/// for each navigation entry.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure GetNavigationEntries( currentOnly: Boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the names of all existing frames.
/// </summary>
2019-11-10 00:24:26 +01:00
function GetFrameNames( var aFrameNames : TStrings) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the identifiers of all existing frames.
/// </summary>
2019-11-10 00:24:26 +01:00
function GetFrameIdentifiers( var aFrameCount : NativeUInt ; var aFrameIdentifierArray : TCefFrameIdentifierArray) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute a string of JavaScript code in this frame. The |aScriptURL|
/// parameter is the URL where the script in question can be found, if any.
/// The renderer may request this URL to show the developer the source of the
/// error. The |aStartLine| parameter is the base line number to use for
/// error reporting.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ExecuteJavaScript( const aCode, aScriptURL : ustring; const aFrameName : ustring = '' ; aStartLine : integer = 0 ) ; overload ;
procedure ExecuteJavaScript( const aCode, aScriptURL : ustring; const aFrame : ICefFrame; aStartLine : integer = 0 ) ; overload ;
procedure ExecuteJavaScript( const aCode, aScriptURL : ustring; const aFrameIdentifier : int64 ; aStartLine : integer = 0 ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to update the browser preferences using the TChromiumCore property values asynchronously.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure UpdatePreferences;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Save the browser preferences as a text file.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SavePreferences( const aFileName : string ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls CefRequestContext.ResolveHost to resolve the domain in the URL parameter
/// to a list of IP addresses.
/// The result will be received in the TChromiumCore.OnResolvedHostAvailable event.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ResolveHost( const aURL : ustring) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used to check if the browser parameter is the same as the selected browser in TChromiumCore.
/// </summary>
2019-11-10 00:24:26 +01:00
function IsSameBrowser( const aBrowser : ICefBrowser) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calling ExecuteTaskOnCefThread function will trigger the TChromiumCore.OnExecuteTaskOnCefThread event.
/// </summary>
/// <param name="aCefThreadId">Indicates the CEF thread on which TChromiumCore.OnExecuteTaskOnCefThread will be executed.</param>
/// <param name="aTaskID">Custom ID used to identify the task that triggered the TChromiumCore.OnExecuteTaskOnCefThread event.</param>
/// <param name="aDelayMs">Optional delay in milliseconds to trigger the TChromiumCore.OnExecuteTaskOnCefThread event.</param>
2019-11-10 00:24:26 +01:00
function ExecuteTaskOnCefThread( aCefThreadId : TCefThreadId; aTaskID : cardinal ; aDelayMs : Int64 = 0 ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// This procedure calls the Emulation.setUserAgentOverride DevTools method to override the user agent string.
/// </summary>
2020-07-05 12:56:21 +02:00
procedure SetUserAgentOverride( const aUserAgent : ustring; const aAcceptLanguage : ustring = '' ; const aPlatform : ustring = '' ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// This procedure calls the Storage.clearDataForOrigin DevTools method to clear the storage data for a given origin.
/// </summary>
2020-07-28 20:04:25 +02:00
procedure ClearDataForOrigin( const aOrigin : ustring; aStorageTypes : TCefClearDataStorageTypes = cdstAll) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// This procedure calls the Network.clearBrowserCache DevTools method to clear the cache data.
/// </summary>
2020-07-02 12:49:21 +02:00
procedure ClearCache;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Enable or disable the browser's audio.
/// </summary>
2022-08-29 22:45:28 +02:00
procedure ToggleAudioMuted;
2023-08-07 20:21:42 +02:00
/// <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>
2019-11-10 00:24:26 +01:00
function DeleteCookies( const url : ustring = '' ; const cookieName : ustring = '' ; aDeleteImmediately : boolean = False ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// TChromiumCore.VisitAllCookies triggers the TChromiumCore.OnCookiesVisited event for each cookie
/// aID is an optional parameter to identify which VisitAllCookies call has triggered the
/// OnCookiesVisited event.
/// TChromiumCore.OnCookiesVisited may not be triggered if the cookie store is empty but the
/// TChromium.OnCookieVisitorDestroyed event will always be triggered to signal when the browser
/// when the visit is over.
/// </summary>
2019-11-10 00:24:26 +01:00
function VisitAllCookies( aID : integer = 0 ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// TChromiumCore.VisitURLCookies triggers the TChromiumCore.OnCookiesVisited event for each cookie
/// aID is an optional parameter to identify which VisitURLCookies call has triggered the
/// OnCookiesVisited event.
/// TChromiumCore.OnCookiesVisited may not be triggered if the cookie store is empty but the
/// TChromium.OnCookieVisitorDestroyed event will always be triggered to signal when the browser
/// when the visit is over.
/// </summary>
2019-11-10 00:24:26 +01:00
function VisitURLCookies( const url : ustring; includeHttpOnly : boolean = False ; aID : integer = 0 ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// TChromiumCore.SetCookie triggers the TChromiumCore.OnCookieSet event when the cookie has been set
/// aID is an optional parameter to identify which SetCookie call has triggered the
/// OnCookieSet event.
/// </summary>
2020-05-23 15:00:44 +02:00
function SetCookie( const url, name_, value, domain, path: ustring; secure, httponly, hasExpires: Boolean ; const creation, lastAccess, expires: TDateTime; same_site : TCefCookieSameSite; priority : TCefCookiePriority; aSetImmediately : boolean = True ; aID : integer = 0 ) : Boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Flush the backing store (if any) to disk.
/// </summary>
/// <param name="aFlushImmediately">If aFlushImmediately is false the cookies will be flushed on the CEF UI thread and the OnCookiesFlushed event will be triggered.</param>
/// <returns>Returns false (0) if cookies cannot be accessed.</returns>
2019-11-10 00:24:26 +01:00
function FlushCookieStore( aFlushImmediately : boolean = True ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Open developer tools (DevTools) in its own browser. If inspectElementAt has a valid point
/// with coordinates different than low(integer) then the element at the specified location
/// will be inspected. If the DevTools browser is already open then it will be focused.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ShowDevTools( const inspectElementAt: TPoint; aWindowInfo: PCefWindowInfo) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// close the developer tools.
/// </summary>
2020-09-30 12:43:48 +02:00
procedure CloseDevTools; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// close the developer tools.
/// </summary>
2020-09-30 12:43:48 +02:00
procedure CloseDevTools( const aDevToolsWnd : TCefWindowHandle) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a function call message over the DevTools protocol. |message_| must be
/// a UTF8-encoded JSON dictionary that contains "id" (int), "function"
/// (string) and "params" (dictionary, optional) values. See the DevTools
/// protocol documentation at https://chromedevtools.github.io/devtools-
/// protocol/ for details of supported functions and the expected "params"
/// dictionary contents. |message_| will be copied if necessary. This function
/// will return true (1) if called on the UI thread and the message was
/// successfully submitted for validation, otherwise false (0). Validation
/// will be applied asynchronously and any messages that fail due to
/// formatting errors or missing parameters may be discarded without
/// notification. Prefer ExecuteDevToolsMethod if a more structured approach
/// to message formatting is desired.
///
/// Every valid function call will result in an asynchronous function result
/// or error message that references the sent message "id". Event messages are
/// received while notifications are enabled (for example, between function
/// calls for "Page.enable" and "Page.disable"). All received messages will be
/// delivered to the observer(s) registered with AddDevToolsMessageObserver.
/// See ICefDevToolsMessageObserver.OnDevToolsMessage documentation for
/// details of received message contents.
///
/// Usage of the SendDevToolsMessage, ExecuteDevToolsMethod and
/// AddDevToolsMessageObserver functions does not require an active DevTools
/// front-end or remote-debugging session. Other active DevTools sessions will
/// continue to function independently. However, any modification of global
/// browser state by one session may not be reflected in the UI of other
/// sessions.
///
/// Communication with the DevTools front-end (when displayed) can be logged
/// for development purposes by passing the `--devtools-protocol-log-
/// file=<path>` command-line flag.
/// </summary>
2020-06-21 21:27:55 +02:00
function SendDevToolsMessage( const message_: ustring) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute a function call over the DevTools protocol. This is a more
/// structured version of SendDevToolsMessage. |message_id| is an incremental
/// number that uniquely identifies the message (pass 0 to have the next
/// number assigned automatically based on previous values). |function| is the
/// function name. |params| are the function parameters, which may be NULL.
/// See the DevTools protocol documentation (linked above) for details of
/// supported functions and the expected |params| dictionary contents. This
/// function will return the assigned message ID if called on the UI thread
/// and the message was successfully submitted for validation, otherwise 0.
/// See the SendDevToolsMessage documentation for additional usage
/// information.
/// </summary>
2020-06-21 21:27:55 +02:00
function ExecuteDevToolsMethod( message_id: integer ; const method: ustring; const params: ICefDictionaryValue) : Integer ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Add an observer for DevTools protocol messages (function results and
/// events). The observer will remain registered until the returned
/// Registration object is destroyed. See the SendDevToolsMessage
/// documentation for additional usage information.
/// </summary>
2020-06-21 21:27:55 +02:00
function AddDevToolsMessageObserver( const observer: ICefDevToolsMessageObserver) : ICefRegistration;
2023-08-07 20:21:42 +02:00
/// <summary>
/// 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
/// or a follow-up. The search will be restarted if |searchText| or
/// |matchCase| change. The search will be stopped if |searchText| is NULL.
/// OnFindResult will be triggered to report find results.
/// </summary>
2022-03-03 11:16:30 +01:00
procedure Find( const aSearchText : ustring; aForward, aMatchCase, aFindNext : Boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Cancel all searches that are currently going on.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure StopFinding( aClearSelection : Boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Print the current browser contents.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure Print;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Print the current browser contents to the PDF file specified by |path| and
/// execute |callback| on completion. The caller is responsible for deleting
/// |path| when done. For PDF printing to work on Linux you must implement the
/// ICefPrintHandler.GetPdfPaperSize function.
/// The TChromiumCore.OnPdfPrintFinished event will be triggered when the PDF
/// file is created.
/// </summary>
2022-12-16 11:29:15 +01:00
procedure PrintToPDF( const aFilePath : ustring) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute copy on the focused frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ClipboardCopy;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute paste on the focused frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ClipboardPaste;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute cut on the focused frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ClipboardCut;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute undo on the focused frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ClipboardUndo;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute redo on the focused frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ClipboardRedo;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute delete on the focused frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ClipboardDel;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Execute select all on the focused frame.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SelectAll;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Increase the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the new zoom value.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure IncZoomStep;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Decrease the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the new zoom value.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure DecZoomStep;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Increase the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the new zoom value.
/// </summary>
2019-12-10 16:49:07 +01:00
procedure IncZoomPct;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Decrease the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the new zoom value.
/// </summary>
2019-12-10 16:49:07 +01:00
procedure DecZoomPct;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Reset the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the new zoom value.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure ResetZoomStep;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Reset the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the new zoom value.
/// </summary>
2019-12-10 16:49:07 +01:00
procedure ResetZoomLevel;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Reset the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the new zoom value.
/// </summary>
2019-12-10 16:49:07 +01:00
procedure ResetZoomPct;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Read the zoom value. This procedure triggers the TChromium.OnZoomPctAvailable event with the zoom value.
/// </summary>
2019-12-10 16:49:07 +01:00
procedure ReadZoom;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Notify the browser that the widget has been resized. The browser will
/// first call ICefRenderHandler.GetViewRect to get the new size and then
/// call ICefRenderHandler.OnPaint asynchronously with the updated
/// regions. This function is only used when window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure WasResized;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Notify the browser that it has been hidden or shown. Layouting and
/// ICefRenderHandler.OnPaint notification will stop when the browser is
/// hidden. This function is only used when window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure WasHidden( hidden: Boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a notification to the browser that the screen info has changed. The
/// browser will then call ICefRenderHandler.GetScreenInfo to update the
/// screen information with the new values. This simulates moving the webview
/// window from one display to another, or changing the properties of the
/// current display. This function is only used when window rendering is
/// disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure NotifyScreenInfoChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Notify the browser that the window hosting it is about to be moved or
/// resized. This function is only used on Windows and Linux.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure NotifyMoveOrResizeStarted;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Invalidate the view. The browser will call ICefRenderHandler.OnPaint
/// asynchronously. This function is only used when window rendering is
/// disabled.
/// </summary>
2019-11-19 12:44:29 +01:00
procedure Invalidate( type_: TCefPaintElementType = PET_VIEW) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Issue a BeginFrame request to Chromium. Only valid when
/// TCefWindowInfo.external_begin_frame_enabled is set to true (1).
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendExternalBeginFrame;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a key event to the browser.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendKeyEvent( const event: PCefKeyEvent) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a mouse click event to the browser. The |x| and |y| coordinates are
/// relative to the upper-left corner of the view.
/// </summary>
2019-11-19 12:44:29 +01:00
procedure SendMouseClickEvent( const event: PCefMouseEvent; type_: TCefMouseButtonType; mouseUp: Boolean ; clickCount: Integer ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a mouse move event to the browser. The |x| and |y| coordinates are
/// relative to the upper-left corner of the view.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendMouseMoveEvent( const event: PCefMouseEvent; mouseLeave: Boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a mouse wheel event to the browser. The |x| and |y| coordinates are
/// relative to the upper-left corner of the view. The |deltaX| and |deltaY|
/// values represent the movement delta in the X and Y directions
/// respectively. In order to scroll inside select popups with window
/// rendering disabled ICefRenderHandler.GetScreenPoint should be
/// implemented properly.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendMouseWheelEvent( const event: PCefMouseEvent; deltaX, deltaY: Integer ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a touch event to the browser for a windowless browser.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendTouchEvent( const event: PCefTouchEvent) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a capture lost event to the browser.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendCaptureLostEvent;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a message to the specified |targetProcess|. Ownership of the message
/// contents will be transferred and the |ProcMessage| reference will be
/// invalidated. Message delivery is not guaranteed in all cases (for example,
/// if the browser is closing, navigating, or if the target process crashes).
/// Send an ACK message back from the target process if confirmation is
/// required.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendProcessMessage( targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage; const aFrameName : ustring = '' ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a message to the specified |targetProcess|. Ownership of the message
/// contents will be transferred and the |ProcMessage| reference will be
/// invalidated. Message delivery is not guaranteed in all cases (for example,
/// if the browser is closing, navigating, or if the target process crashes).
/// Send an ACK message back from the target process if confirmation is
/// required.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendProcessMessage( targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage; const aFrame : ICefFrame) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send a message to the specified |targetProcess|. Ownership of the message
/// contents will be transferred and the |ProcMessage| reference will be
/// invalidated. Message delivery is not guaranteed in all cases (for example,
/// if the browser is closing, navigating, or if the target process crashes).
/// Send an ACK message back from the target process if confirmation is
/// required.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SendProcessMessage( targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage; const aFrameIdentifier : int64 ) ; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Create a new URL request that will be treated as originating from this
/// frame and the associated browser. Use TCustomCefUrlrequestClient.Create instead if
/// you do not want the request to have this association, in which case it may
/// be handled differently (see documentation on that function). A request
/// created with this function may only originate from the browser process,
/// and will behave as follows:
/// - It may be intercepted by the client via CefResourceRequestHandler or
/// CefSchemeHandlerFactory.
/// - POST data may only contain a single element of type PDE_TYPE_FILE or
/// PDE_TYPE_BYTES.
///
/// The |request| object will be marked as read-only after calling this
/// function.
/// </summary>
2019-11-10 00:24:26 +01:00
function CreateUrlRequest( const request: ICefRequest; const client: ICefUrlrequestClient; const aFrameName : ustring = '' ) : ICefUrlRequest; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Create a new URL request that will be treated as originating from this
/// frame and the associated browser. Use TCustomCefUrlrequestClient.Create instead if
/// you do not want the request to have this association, in which case it may
/// be handled differently (see documentation on that function). A request
/// created with this function may only originate from the browser process,
/// and will behave as follows:
/// - It may be intercepted by the client via CefResourceRequestHandler or
/// CefSchemeHandlerFactory.
/// - POST data may only contain a single element of type PDE_TYPE_FILE or
/// PDE_TYPE_BYTES.
///
/// The |request| object will be marked as read-only after calling this
/// function.
/// </summary>
2019-11-10 00:24:26 +01:00
function CreateUrlRequest( const request: ICefRequest; const client: ICefUrlrequestClient; const aFrame : ICefFrame) : ICefUrlRequest; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Create a new URL request that will be treated as originating from this
/// frame and the associated browser. Use TCustomCefUrlrequestClient.Create instead if
/// you do not want the request to have this association, in which case it may
/// be handled differently (see documentation on that function). A request
/// created with this function may only originate from the browser process,
/// and will behave as follows:
/// - It may be intercepted by the client via CefResourceRequestHandler or
/// CefSchemeHandlerFactory.
/// - POST data may only contain a single element of type PDE_TYPE_FILE or
/// PDE_TYPE_BYTES.
///
/// The |request| object will be marked as read-only after calling this
/// function.
/// </summary>
2019-11-10 00:24:26 +01:00
function CreateUrlRequest( const request: ICefRequest; const client: ICefUrlrequestClient; const aFrameIdentifier : int64 ) : ICefUrlRequest; overload ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Set whether the browser is focused.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SetFocus( focus: Boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Set accessibility state for all frames. |accessibility_state| may be
/// default, enabled or disabled. If |accessibility_state| is STATE_DEFAULT
/// then accessibility will be disabled by default and the state may be
/// further controlled with the "force-renderer-accessibility" and "disable-
/// renderer-accessibility" command-line switches. If |accessibility_state| is
/// STATE_ENABLED then accessibility will be enabled. If |accessibility_state|
/// is STATE_DISABLED then accessibility will be completely disabled.
///
/// For windowed browsers accessibility will be enabled in Complete mode
/// (which corresponds to kAccessibilityModeComplete in Chromium). In this
/// mode all platform accessibility objects will be created and managed by
/// Chromium's internal implementation. The client needs only to detect the
/// screen reader and call this function appropriately. For example, on macOS
/// the client can handle the @"AXEnhancedUserStructure" accessibility
/// attribute to detect VoiceOver state changes and on Windows the client can
/// handle WM_GETOBJECT with OBJID_CLIENT to detect accessibility readers.
///
/// For windowless browsers accessibility will be enabled in TreeOnly mode
/// (which corresponds to kAccessibilityModeWebContentsOnly in Chromium). In
/// this mode renderer accessibility is enabled, the full tree is computed,
/// and events are passed to CefAccessibiltyHandler, but platform
/// accessibility objects are not created. The client may implement platform
/// accessibility objects using CefAccessibiltyHandler callbacks if desired.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure SetAccessibilityState( accessibilityState: TCefState) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Call this function when the user drags the mouse into the web view (before
/// calling DragTargetDragOver/DragTargetLeave/DragTargetDrop). |drag_data|
/// should not contain file contents as this type of data is not allowed to be
/// dragged into the web view. File contents can be removed using
/// ICefDragData.ResetFileContents (for example, if |drag_data| comes from
/// ICefRenderHandler.StartDragging). This function is only used when
/// window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure DragTargetDragEnter( const dragData: ICefDragData; const event: PCefMouseEvent; allowedOps: TCefDragOperations) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Call this function each time the mouse is moved across the web view during
/// a drag operation (after calling DragTargetDragEnter and before calling
/// DragTargetDragLeave/DragTargetDrop). This function is only used when
/// window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure DragTargetDragOver( const event: PCefMouseEvent; allowedOps: TCefDragOperations) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Call this function when the user drags the mouse out of the web view
/// (after calling DragTargetDragEnter). This function is only used when
/// window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure DragTargetDragLeave;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Call this function when the user completes the drag operation by dropping
/// the object onto the web view (after calling DragTargetDragEnter). The
/// object being dropped is |drag_data|, given as an argument to the previous
/// DragTargetDragEnter call. This function is only used when window rendering
/// is disabled.
/// </summary>
2019-11-19 12:44:29 +01:00
procedure DragTargetDrop( const event: PCefMouseEvent) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Call this function when the drag operation started by a
/// ICefRenderHandler.StartDragging call has ended either in a drop or by
/// being cancelled. |x| and |y| are mouse coordinates relative to the upper-
/// left corner of the view. If the web view is both the drag source and the
/// drag target then all DragTarget* functions should be called before
/// DragSource* mthods. This function is only used when window rendering is
/// disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure DragSourceEndedAt( x, y: Integer ; op: TCefDragOperation) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Call this function when the drag operation started by a
/// ICefRenderHandler.StartDragging call has completed. This function may
/// be called immediately without first calling DragSourceEndedAt to cancel a
/// drag operation. If the web view is both the drag source and the drag
/// target then all DragTarget* functions should be called before DragSource*
/// mthods. This function is only used when window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure DragSourceSystemDragEnded;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Begins a new composition or updates the existing composition. Blink has a
/// special node (a composition node) that allows the input function to change
/// text without affecting other DOM nodes. |text| is the optional text that
/// will be inserted into the composition node. |underlines| is an optional
/// set of ranges that will be underlined in the resulting text.
/// |replacement_range| is an optional range of the existing text that will be
/// replaced. |selection_range| is an optional range of the resulting text
/// that will be selected after insertion or replacement. The
/// |replacement_range| value is only used on OS X.
///
/// This function may be called multiple times as the composition changes.
/// When the client is done making changes the composition should either be
/// canceled or completed. To cancel the composition call
/// ImeCancelComposition. To complete the composition call either
/// ImeCommitText or ImeFinishComposingText. Completion is usually signaled
/// when:
///
/// 1. The client receives a WM_IME_COMPOSITION message with a GCS_RESULTSTR
/// flag (on Windows), or;
/// 2. The client receives a "commit" signal of GtkIMContext (on Linux), or;
/// 3. insertText of NSTextInput is called (on Mac).
///
/// This function is only used when window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure IMESetComposition( const text : ustring; const underlines : TCefCompositionUnderlineDynArray; const replacement_range, selection_range : PCefRange) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Completes the existing composition by optionally inserting the specified
/// |text| into the composition node. |replacement_range| is an optional range
/// of the existing text that will be replaced. |relative_cursor_pos| is where
/// the cursor will be positioned relative to the current cursor position. See
/// comments on ImeSetComposition for usage. The |replacement_range| and
/// |relative_cursor_pos| values are only used on OS X. This function is only
/// used when window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure IMECommitText( const text : ustring; const replacement_range : PCefRange; relative_cursor_pos : integer ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Completes the existing composition by applying the current composition
/// node contents. If |keep_selection| is false (0) the current selection, if
/// any, will be discarded. See comments on ImeSetComposition for usage. This
/// function is only used when window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure IMEFinishComposingText( keep_selection : boolean ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Cancels the existing composition and discards the composition node
/// contents without applying them. See comments on ImeSetComposition for
/// usage. This function is only used when window rendering is disabled.
/// </summary>
2019-11-10 00:24:26 +01:00
procedure IMECancelComposition;
2023-08-07 20:21:42 +02:00
/// <summary>
/// If a misspelled word is currently selected in an editable node calling
/// this function will replace it with the specified |word|.
/// </summary>
2020-09-30 12:43:48 +02:00
procedure ReplaceMisspelling( const aWord : ustring) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Add the specified |word| to the spelling dictionary.
/// </summary>
2020-09-30 12:43:48 +02:00
procedure AddWordToDictionary( const aWord : ustring) ;
2020-12-30 19:40:07 +01:00
{$IFDEF LINUX}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used in Linux to resize the browser contents.
/// </summary>
2020-12-30 19:40:07 +01:00
procedure UpdateBrowserSize( aLeft, aTop, aWidth, aHeight : integer ) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Used in Linux to update the browser visibility.
/// </summary>
2020-12-30 19:40:07 +01:00
procedure UpdateXWindowVisibility( aVisible : boolean ) ;
{$ENDIF}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Add an observer for MediaRouter events. The observer will remain
/// registered until the returned Registration object is destroyed.
/// </summary>
2020-04-19 22:47:20 +02:00
function AddObserver( const observer: ICefMediaObserver) : ICefRegistration;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a MediaSource object for the specified media source URN. Supported
/// URN schemes include "cast:" and "dial:", and will be already known by the
/// client application (e.g. "cast:<appId>?clientId=<clientId>").
/// </summary>
2020-04-19 22:47:20 +02:00
function GetSource( const urn: ustring) : ICefMediaSource;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Trigger an asynchronous call to ICefMediaObserver.OnSinks on all
/// registered observers.
/// </summary>
2020-04-19 22:47:20 +02:00
procedure NotifyCurrentSinks;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Trigger an asynchronous call to ICefMediaObserver.OnRoutes on all
/// registered observers.
/// </summary>
2020-04-19 22:47:20 +02:00
procedure NotifyCurrentRoutes;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Create a new route between |source| and |sink|. Source and sink must be
/// valid, compatible (as reported by ICefMediaSink.IsCompatibleWith), and
/// a route between them must not already exist. |callback| will be executed
/// on success or failure. If route creation succeeds it will also trigger an
/// asynchronous call to ICefMediaObserver.OnRoutes on all registered
/// observers.
/// This procedure is asynchronous and the result, ICefMediaRoute and the error
/// message will be available in the TChromium.OnMediaRouteCreateFinished event.
/// </summary>
2020-04-19 22:47:20 +02:00
procedure CreateRoute( const source: ICefMediaSource; const sink: ICefMediaSink) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Asynchronously retrieves device info.
/// This procedure will trigger OnMediaSinkDeviceInfo with the device info.
/// </summary>
2020-07-15 14:56:41 +02:00
procedure GetDeviceInfo( const aMediaSink: ICefMediaSink) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Load an extension.
///
/// If extension resources will be read from disk using the default load
/// implementation then |root_directory| should be the absolute path to the
/// extension resources directory and |manifest| should be NULL. If extension
/// resources will be provided by the client (e.g. via cef_request_handler_t
/// and/or cef_extension_handler_t) then |root_directory| should be a path
/// component unique to the extension (if not absolute this will be internally
/// prefixed with the PK_DIR_RESOURCES path) and |manifest| should contain the
/// contents that would otherwise be read from the "manifest.json" file on
/// disk.
///
/// The loaded extension will be accessible in all contexts sharing the same
/// storage (HasExtension returns true (1)). However, only the context on
/// which this function was called is considered the loader (DidLoadExtension
/// returns true (1)) and only the loader will receive
/// cef_request_context_handler_t callbacks for the extension.
///
/// cef_extension_handler_t::OnExtensionLoaded will be called on load success
/// or cef_extension_handler_t::OnExtensionLoadFailed will be called on load
/// failure.
///
/// If the extension specifies a background script via the "background"
/// manifest key then cef_extension_handler_t::OnBeforeBackgroundBrowser will
/// be called to create the background browser. See that function for
/// additional information about background scripts.
///
/// For visible extension views the client application should evaluate the
/// manifest to determine the correct extension URL to load and then pass that
/// URL to the cef_browser_host_t::CreateBrowser* function after the extension
/// has loaded. For example, the client can look for the "browser_action"
/// manifest key as documented at
/// https://developer.chrome.com/extensions/browserAction. Extension URLs take
/// the form "chrome-extension://<extension_id>/<path>".
///
/// Browsers that host extensions differ from normal browsers as follows:
/// - Can access chrome.* JavaScript APIs if allowed by the manifest. Visit
/// chrome://extensions-support for the list of extension APIs currently
/// supported by CEF.
/// - Main frame navigation to non-extension content is blocked.
/// - Pinch-zooming is disabled.
/// - CefBrowserHost::GetExtension returns the hosted extension.
/// - CefBrowserHost::IsBackgroundHost returns true for background hosts.
///
/// See https://developer.chrome.com/extensions for extension implementation
/// and usage documentation.
/// </summary>
2020-08-04 17:52:09 +02:00
function LoadExtension( const root_directory: ustring; const manifest: ICefDictionaryValue = nil ; const handler: ICefExtensionHandler = nil ; const requestContext : ICefRequestContext = nil ) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true (1) if this context was used to load the extension identified
/// by |extension_id|. Other contexts sharing the same storage will also have
/// access to the extension (see HasExtension). This function must be called
/// on the browser process UI thread.
/// </summary>
2020-08-04 17:52:09 +02:00
function DidLoadExtension( const extension_id: ustring) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true (1) if this context has access to the extension identified by
/// |extension_id|. This may not be the context that was used to load the
/// extension (see DidLoadExtension). This function must be called on the
/// browser process UI thread.
/// </summary>
2020-08-04 17:52:09 +02:00
function HasExtension( const extension_id: ustring) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Retrieve the list of all extensions that this context has access to (see
/// HasExtension). |extension_ids| will be populated with the list of
/// extension ID values. Returns true (1) on success. This function must be
/// called on the browser process UI thread.
/// </summary>
2020-08-04 17:52:09 +02:00
function GetExtensions( const extension_ids: TStringList) : boolean ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the extension matching |extension_id| or NULL if no matching
/// extension is accessible in this context (see HasExtension). This function
/// must be called on the browser process UI thread.
/// </summary>
2020-08-04 17:52:09 +02:00
function GetExtension( const extension_id: ustring) : ICefExtension;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the current value for |content_type| that applies for the
/// specified URLs. If both URLs are NULL the default value will be returned.
/// Returns nullptr if no value is configured. Must be called on the browser
/// process UI thread.
/// </summary>
2023-07-30 18:47:35 +02:00
function GetWebsiteSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes) : ICefValue;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Sets the current value for |content_type| for the specified URLs in the
/// default scope. If both URLs are NULL, and the context is not incognito,
/// the default value will be set. Pass nullptr for |value| to remove the
/// default value for this content type.
///
/// WARNING: Incorrect usage of this function may cause instability or
/// security issues in Chromium. Make sure that you first understand the
/// potential impact of any changes to |content_type| by reviewing the related
/// source code in Chromium. For example, if you plan to modify
/// CEF_CONTENT_SETTING_TYPE_POPUPS, first review and understand the usage of
/// ContentSettingsType::POPUPS in Chromium:
/// https://source.chromium.org/search?q=ContentSettingsType::POPUPS
/// </summary>
2023-07-30 18:47:35 +02:00
procedure SetWebsiteSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes; const value: ICefValue) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the current value for |content_type| that applies for the
/// specified URLs. If both URLs are NULL the default value will be returned.
/// Returns CEF_CONTENT_SETTING_VALUE_DEFAULT if no value is configured. Must
/// be called on the browser process UI thread.
/// </summary>
2023-07-30 18:47:35 +02:00
function GetContentSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes) : TCefContentSettingValues;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Sets the current value for |content_type| for the specified URLs in the
/// default scope. If both URLs are NULL, and the context is not incognito,
/// the default value will be set. Pass CEF_CONTENT_SETTING_VALUE_DEFAULT for
/// |value| to use the default value for this content type.
///
/// WARNING: Incorrect usage of this function may cause instability or
/// security issues in Chromium. Make sure that you first understand the
/// potential impact of any changes to |content_type| by reviewing the related
/// source code in Chromium. For example, if you plan to modify
/// CEF_CONTENT_SETTING_TYPE_POPUPS, first review and understand the usage of
/// ContentSettingsType::POPUPS in Chromium:
/// https://source.chromium.org/search?q=ContentSettingsType::POPUPS
/// </summary>
2023-07-30 18:47:35 +02:00
procedure SetContentSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes; value: TCefContentSettingValues) ;
2023-08-07 20:21:42 +02:00
/// <summary>
/// First URL loaded by the browser after its creation.
/// </summary>
2022-02-19 18:56:41 +01:00
property DefaultUrl : ustring read FDefaultUrl write SetDefaultUrl;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Properties used to fill the TCefBrowserSettings record which is used during the browser creation.
/// </summary>
2020-05-07 11:46:48 +02:00
property Options : TChromiumOptions read FOptions write FOptions;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Font properties used to fill the TCefBrowserSettings record which is used during the browser creation.
/// </summary>
2020-05-07 11:46:48 +02:00
property FontOptions : TChromiumFontOptions read FFontOptions write FFontOptions;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Properties used to fill the TCefPdfPrintSettings record which is used in the TChromiumCore.PrintToPDF call.
/// </summary>
2020-05-07 11:46:48 +02:00
property PDFPrintOptions : TPDFPrintOptions read FPDFPrintOptions write FPDFPrintOptions;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Default encoding for Web content. If empty "ISO-8859-1" will be used. Also
/// configurable using the "default-encoding" command-line switch. It's used during the browser creation.
/// </summary>
2020-05-07 11:46:48 +02:00
property DefaultEncoding : ustring read FDefaultEncoding write FDefaultEncoding;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Globally unique identifier for the seleted browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property BrowserId : integer read GetBrowserId;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a ICefBrowser instance of the selected browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property Browser : ICefBrowser read GetBrowser;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a ICefBrowser instance of the browser with the specified id.
/// </summary>
2020-05-07 11:46:48 +02:00
property BrowserById[ id : integer ] : ICefBrowser read GetBrowserById;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the number of browsers in the browser array when the multi-browser mode is enabled.
/// </summary>
2020-05-07 11:46:48 +02:00
property BrowserCount : integer read GetBrowserCount;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the identifier of the browser in the specified array position when the multi-browser mode is enabled.
/// </summary>
2020-05-07 11:46:48 +02:00
property BrowserIdByIndex[ i : integer ] : integer read GetBrowserIdByIndex;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the ICefClient instance used by the selected browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property CefClient : ICefClient read FHandler;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the ICefRequestContextHandler instance used in this browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property ReqContextHandler : ICefRequestContextHandler read FReqContextHandler;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the ICefResourceRequestHandler instance used in this browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property ResourceRequestHandler : ICefResourceRequestHandler read FResourceRequestHandler;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the TCefWindowInfo record used when the browser was created.
/// </summary>
2020-05-07 11:46:48 +02:00
property CefWindowInfo : TCefWindowInfo read FWindowInfo;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the current visible navigation entry for this browser. This
/// property can only be read on the UI thread.
/// </summary>
2020-05-07 11:46:48 +02:00
property VisibleNavigationEntry : ICefNavigationEntry read GetVisibleNavigationEntry;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a ICefRequestContext instance used by the selected browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property RequestContext : ICefRequestContext read GetRequestContext;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a ICefMediaRouter instance used by the selected browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property MediaRouter : ICefMediaRouter read GetMediaRouter;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a ICefMediaObserver instance used by the selected browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property MediaObserver : ICefMediaObserver read FMediaObserver;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the ICefRegistration instance obtained when the default MediaObserver was added.
/// </summary>
2020-06-21 21:27:55 +02:00
property MediaObserverReg : ICefRegistration read FMediaObserverReg;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a ICefDevToolsMessageObserver instance used by the selected browser.
/// </summary>
2020-06-21 21:27:55 +02:00
property DevToolsMsgObserver : ICefDevToolsMessageObserver read FDevToolsMsgObserver;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the ICefRegistration instance obtained when the default DevToolsMessageObserver was added.
/// </summary>
2020-06-21 21:27:55 +02:00
property DevToolsMsgObserverReg : ICefRegistration read FDevToolsMsgObserverReg;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns a ICefExtensionHandler instance used by the selected browser.
/// </summary>
2020-08-04 17:52:09 +02:00
property ExtensionHandler : ICefExtensionHandler read FExtensionHandler;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the value of GlobalCEFApp.MultiThreadedMessageLoop.
/// </summary>
2020-05-07 11:46:48 +02:00
property MultithreadApp : boolean read GetMultithreadApp;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowser.IsLoading and returns true if the browser is currently loading.
/// </summary>
2020-05-07 11:46:48 +02:00
property IsLoading : boolean read GetIsLoading;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowser.HasDocument and returns true if a document has been loaded in the browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property HasDocument : boolean read GetHasDocument;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowserHost.HasView and returns true if this browser is wrapped in a ICefBrowserView.
/// </summary>
2020-05-07 11:46:48 +02:00
property HasView : boolean read GetHasView;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowserHost.HasDevTools and returns true if this browser currently has an associated DevTools browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property HasDevTools : boolean read GetHasDevTools;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true if ICefClient has a valid value.
/// </summary>
2020-05-07 11:46:48 +02:00
property HasClientHandler : boolean read GetHasClientHandler;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true if this component has a valid selected browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property HasBrowser : boolean read GetHasBrowser;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowser.CanGoBack and returns true if the browser can navigate back.
/// </summary>
2020-05-07 11:46:48 +02:00
property CanGoBack : boolean read GetCanGoBack;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowser.CanGoForward and returns true if the browser can navigate forward.
/// </summary>
2020-05-07 11:46:48 +02:00
property CanGoForward : boolean read GetCanGoForward;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowser.IsPopUp and returns true if the window is a popup window.
/// </summary>
2020-05-07 11:46:48 +02:00
property IsPopUp : boolean read GetIsPopUp;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowserHost.GetWindowHandle and returns the window handle for this browser.
/// </summary>
2020-05-07 11:46:48 +02:00
property WindowHandle : TCefWindowHandle read GetWindowHandle;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefBrowserHost.GetOpenerWindowHandle and returns the window handle of the browser that opened this browser.
/// </summary>
2020-09-30 12:43:48 +02:00
property OpenerWindowHandle : TCefWindowHandle read GetOpenerWindowHandle;
2020-01-28 11:36:34 +01:00
{$IFDEF MSWINDOWS}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Handle of one to the child controls created automatically by CEF to show the web contents.
/// </summary>
2020-05-07 11:46:48 +02:00
property BrowserHandle : THandle read FBrowserCompHWND;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Handle of one to the child controls created automatically by CEF to show the web contents.
/// </summary>
2020-05-07 11:46:48 +02:00
property WidgetHandle : THandle read FWidgetCompHWND;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Handle of one to the child controls created automatically by CEF to show the web contents.
/// </summary>
2020-05-07 11:46:48 +02:00
property RenderHandle : THandle read FRenderCompHWND;
2020-01-28 11:36:34 +01:00
{$ENDIF}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true if ICefBrowser.FocusedFrame has a valid value.
/// </summary>
2020-05-07 11:46:48 +02:00
property FrameIsFocused : boolean read GetFrameIsFocused;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true when the browser is fully initialized and it's not being closed.
/// </summary>
2020-05-07 11:46:48 +02:00
property Initialized : boolean read GetInitialized;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the cache value in ICefRequestContext.CachePath.
/// </summary>
2020-05-07 11:46:48 +02:00
property RequestContextCache : ustring read GetRequestContextCache;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Calls ICefRequestContext.IsGlobal to check if the request context is the global context or it's independent.
/// </summary>
2020-05-07 11:46:48 +02:00
property RequestContextIsGlobal : boolean read GetRequestContextIsGlobal;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the URL of the main frame.
/// </summary>
2020-05-07 11:46:48 +02:00
property DocumentURL : ustring read GetDocumentURL;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the current zoom value. This property is based on the CefBrowserHost.ZoomLevel value which can only be read in the CEF UI thread.
/// </summary>
2020-05-07 11:46:48 +02:00
property ZoomLevel : double read GetZoomLevel write SetZoomLevel;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the current zoom value. This property is based on the CefBrowserHost.ZoomLevel value which can only be read in the CEF UI thread.
/// </summary>
2020-05-07 11:46:48 +02:00
property ZoomPct : double read GetZoomPct write SetZoomPct;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the current zoom value. This property is based on the CefBrowserHost.ZoomLevel value which can only be read in the CEF UI thread.
/// </summary>
2020-05-07 11:46:48 +02:00
property ZoomStep : byte read GetZoomStep write SetZoomStep;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the maximum rate in frames per second (fps) that OnPaint will be called for a browser in OSR mode.
/// </summary>
2020-05-07 11:46:48 +02:00
property WindowlessFrameRate : integer read GetWindowlessFrameRate write SetWindowlessFrameRate;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Custom HTTP header name added to all requests.
/// </summary>
2020-05-07 11:46:48 +02:00
property CustomHeaderName : ustring read FCustomHeaderName write SetCustomHeaderName;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Custom HTTP header value added to all requests.
/// </summary>
2020-05-07 11:46:48 +02:00
property CustomHeaderValue : ustring read FCustomHeaderValue write SetCustomHeaderValue;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Set to True if you want to send the DNT header.
/// </summary>
2020-05-07 11:46:48 +02:00
property DoNotTrack : boolean read FDoNotTrack write SetDoNotTrack;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Set to True if you want to send the referer header.
/// </summary>
2020-05-07 11:46:48 +02:00
property SendReferrer : boolean read FSendReferrer write SetSendReferrer;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Enable hyperlink auditing.
/// </summary>
2020-05-07 11:46:48 +02:00
property HyperlinkAuditing : boolean read FHyperlinkAuditing write SetHyperlinkAuditing;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Allow using outdated plugins.
/// </summary>
2020-05-07 11:46:48 +02:00
property AllowOutdatedPlugins : boolean read FAllowOutdatedPlugins write SetAllowOutdatedPlugins;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Always authorize plugins.
/// </summary>
2020-05-07 11:46:48 +02:00
property AlwaysAuthorizePlugins : boolean read FAlwaysAuthorizePlugins write SetAlwaysAuthorizePlugins;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Always open PDF files externally.
/// </summary>
2022-10-05 17:36:09 +02:00
property AlwaysOpenPDFExternally : boolean read FAlwaysOpenPDFExternally write SetAlwaysOpenPDFExternally;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Set to True if you want to enable the spell checker.
/// </summary>
2020-05-07 11:46:48 +02:00
property SpellChecking : boolean read FSpellChecking write SetSpellChecking;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Comma delimited list of language codes used by the spell checker, for example "es-ES,en-US,fr-FR,de-DE,it-IT".
/// </summary>
2020-05-07 11:46:48 +02:00
property SpellCheckerDicts : ustring read FSpellCheckerDicts write SetSpellCheckerDicts;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true if the main frame exists and it's valid.
/// </summary>
2020-05-07 11:46:48 +02:00
property HasValidMainFrame : boolean read GetHasValidMainFrame;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the number of frames that currently exist.
/// </summary>
2020-05-07 11:46:48 +02:00
property FrameCount : NativeUInt read GetFrameCount;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns the TcefDragOperation value used during drag and drop.
/// </summary>
2020-05-07 11:46:48 +02:00
property DragOperations : TCefDragOperations read FDragOperations write FDragOperations;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Returns true if the browser's audio is muted.
/// </summary>
2020-05-07 11:46:48 +02:00
property AudioMuted : boolean read GetAudioMuted write SetAudioMuted;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Forces the Google safesearch in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property SafeSearch : boolean read FSafeSearch write SetSafeSearch;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Forces the YouTube restrictions in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property YouTubeRestrict : integer read FYouTubeRestrict write SetYouTubeRestrict;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Enables printing in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property PrintingEnabled : boolean read FPrintingEnabled write SetPrintingEnabled;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Set the accept language list in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property AcceptLanguageList : ustring read FAcceptLanguageList write SetAcceptLanguageList;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Sets the cookies policy value in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property AcceptCookies : TCefCookiePref read FAcceptCookies write SetAcceptCookies;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Blocks third party cookies in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property Block3rdPartyCookies : boolean read FBlock3rdPartyCookies write SetBlock3rdPartyCookies;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Enables the multi-browser mode that allows TChromiumCore to handle several browsers with one component. These browsers are usually the main browser, popup windows and new tabs.
/// </summary>
2020-05-07 11:46:48 +02:00
property MultiBrowserMode : boolean read FMultiBrowserMode write SetMultiBrowserMode;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Default ExStyle value used to initialize the browser. A value of WS_EX_NOACTIVATE can be used as a workaround for some focus issues in CEF.
/// </summary>
2020-09-10 11:21:39 +02:00
property DefaultWindowInfoExStyle : DWORD read FDefaultWindowInfoExStyle write FDefaultWindowInfoExStyle;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Uses the Network.emulateNetworkConditions DevTool method to set the browser in offline mode.
/// </summary>
2020-07-02 12:49:21 +02:00
property Offline : boolean read FOffline write SetOffline;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Enables the Quic protocol in the browser preferences.
/// </summary>
2020-08-05 16:11:50 +02:00
property QuicAllowed : boolean read FQuicAllowed write SetQuicAllowed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Enables JavaScript in the browser preferences.
/// </summary>
2020-08-22 14:56:24 +02:00
property JavascriptEnabled : boolean read FJavascriptEnabled write SetJavascriptEnabled;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Enables automatic image loading in the browser preferences.
/// </summary>
2020-08-22 14:56:24 +02:00
property LoadImagesAutomatically : boolean read FLoadImagesAutomatically write SetLoadImagesAutomatically;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Battery saver mode state.
/// </summary>
2023-01-25 18:06:32 +01:00
property BatterySaverModeState : TCefBatterySaverModeState read FBatterySaverModeState write SetBatterySaverModeState;
2023-08-07 20:21:42 +02:00
/// <summary>
/// High efficiency mode state.
/// </summary>
property HighEfficiencyModeState : TCefHighEfficiencyModeState read FHighEfficiencyModeState write SetHighEfficiencyModeState;
/// <summary>
/// Indicates whether the browser can receive focus.
/// </summary>
2023-03-11 17:29:30 +01:00
property CanFocus : boolean read FCanFocus;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Delay in milliseconds to enable browser focus.
/// </summary>
2023-03-11 17:29:30 +01:00
property EnableFocusDelayMs : cardinal read FEnableFocusDelayMs write FEnableFocusDelayMs;
2021-02-06 17:38:44 +01:00
{$IFDEF LINUX}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Gets the Xdisplay pointer in Linux.
/// </summary>
2021-02-06 17:38:44 +01:00
property XDisplay : PXDisplay read GetXDisplay;
{$ENDIF}
2023-08-07 20:21:42 +02:00
/// <summary>
/// WebRTC handling policy setting in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property WebRTCIPHandlingPolicy : TCefWebRTCHandlingPolicy read FWebRTCIPHandlingPolicy write SetWebRTCIPHandlingPolicy;
2023-08-07 20:21:42 +02:00
/// <summary>
/// WebRTC multiple routes setting in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property WebRTCMultipleRoutes : TCefState read FWebRTCMultipleRoutes write SetWebRTCMultipleRoutes;
2023-08-07 20:21:42 +02:00
/// <summary>
/// WebRTC nonproxied UDP setting in the browser preferences.
/// </summary>
2020-05-07 11:46:48 +02:00
property WebRTCNonproxiedUDP : TCefState read FWebRTCNonProxiedUDP write SetWebRTCNonProxiedUDP;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Proxy type: CEF_PROXYTYPE_DIRECT, CEF_PROXYTYPE_AUTODETECT, CEF_PROXYTYPE_SYSTEM, CEF_PROXYTYPE_FIXED_SERVERS or CEF_PROXYTYPE_PAC_SCRIPT.
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyType : integer read FProxyType write SetProxyType;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Proxy scheme
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyScheme : TCefProxyScheme read FProxyScheme write SetProxyScheme;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Proxy server address
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyServer : ustring read FProxyServer write SetProxyServer;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Proxy server port
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyPort : integer read FProxyPort write SetProxyPort;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Proxy username
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyUsername : ustring read FProxyUsername write SetProxyUsername;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Proxy password
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyPassword : ustring read FProxyPassword write SetProxyPassword;
2023-08-07 20:21:42 +02:00
/// <summary>
/// URL of the PAC script file.
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyScriptURL : ustring read FProxyScriptURL write SetProxyScriptURL;
2023-08-07 20:21:42 +02:00
/// <summary>
/// This tells chromium to bypass any specified proxy for the given semi-colon-separated list of hosts.
/// </summary>
2020-05-07 11:46:48 +02:00
property ProxyByPassList : ustring read FProxyByPassList write SetProxyByPassList;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Sets the maximum connections per proxy value in the browser preferences (experimental).
/// </summary>
2020-05-07 11:46:48 +02:00
property MaxConnectionsPerProxy : integer read FMaxConnectionsPerProxy write SetMaxConnectionsPerProxy;
2019-11-10 00:24:26 +01:00
published
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.RetrieveHTML or TChromiumCore.RetrieveText call with the HTML or text results.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnTextResultAvailable : TOnTextResultAvailableEvent read FOnTextResultAvailable write FOnTextResultAvailable;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.PrintToPDF call when the PDF has been created.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnPdfPrintFinished : TOnPdfPrintFinishedEvent read FOnPdfPrintFinished write FOnPdfPrintFinished;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.SavePreferences call when the preferences have been saved.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnPrefsAvailable : TOnPrefsAvailableEvent read FOnPrefsAvailable write FOnPrefsAvailable;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered when the browser preferences have been updated.
/// </summary>
2021-10-22 19:19:57 +02:00
property OnPrefsUpdated : TNotifyEvent read FOnPrefsUpdated write FOnPrefsUpdated;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.DeleteCookies call when the cookies have been deleted.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnCookiesDeleted : TOnCookiesDeletedEvent read FOnCookiesDeleted write FOnCookiesDeleted;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.ResolveHost call with the host information.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnResolvedHostAvailable : TOnResolvedIPsAvailableEvent read FOnResolvedHostAvailable write FOnResolvedHostAvailable;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.GetNavigationEntries call with a navigation entry.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnNavigationVisitorResultAvailable : TOnNavigationVisitorResultAvailableEvent read FOnNavigationVisitorResultAvailable write FOnNavigationVisitorResultAvailable;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.DownloadImage call when the download is complete.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnDownloadImageFinished : TOnDownloadImageFinishedEvent read FOnDownloadImageFinished write FOnDownloadImageFinished;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.FlushCookieStore call when the cookies are flushed.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnCookiesFlushed : TNotifyEvent read FOnCookiesFlushed write FOnCookiesFlushed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.ClearCertificateExceptions call when the exceptions are cleared.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnCertificateExceptionsCleared : TNotifyEvent read FOnCertificateExceptionsCleared write FOnCertificateExceptionsCleared;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.ClearHttpAuthCredentials call when the credentials are cleared.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnHttpAuthCredentialsCleared : TNotifyEvent read FOnHttpAuthCredentialsCleared write FOnHttpAuthCredentialsCleared;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.CloseAllConnections call when the connections are closed.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnAllConnectionsClosed : TNotifyEvent read FOnAllConnectionsClosed write FOnAllConnectionsClosed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.ExecuteTaskOnCefThread call in the context of the specified CEF thread.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnExecuteTaskOnCefThread : TOnExecuteTaskOnCefThread read FOnExecuteTaskOnCefThread write FOnExecuteTaskOnCefThread;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.VisitAllCookies call with cookie information.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnCookiesVisited : TOnCookiesVisited read FOnCookiesVisited write FOnCookiesVisited;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.VisitAllCookies call when the IcefCookieVisitor has been destroyed.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnCookieVisitorDestroyed : TOnCookieVisitorDestroyed read FOnCookieVisitorDestroyed write FOnCookieVisitorDestroyed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.SetCookie call when the cookie has been set.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnCookieSet : TOnCookieSet read FOnCookieSet write FOnCookieSet;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a call to any of the procedures to increase, decrease or reset the zoom with the new zoom value.
/// </summary>
2019-12-10 16:49:07 +01:00
property OnZoomPctAvailable : TOnZoomPctAvailable read FOnZoomPctAvailable write FOnZoomPctAvailable;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.CreateRoute call when the route is created.
/// </summary>
2020-04-19 22:47:20 +02:00
property OnMediaRouteCreateFinished : TOnMediaRouteCreateFinishedEvent read FOnMediaRouteCreateFinished write FOnMediaRouteCreateFinished;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered after a TChromiumCore.GetDeviceInfo call with the device info.
/// </summary>
2020-07-15 14:56:41 +02:00
property OnMediaSinkDeviceInfo : TOnMediaSinkDeviceInfoEvent read FOnMediaSinkDeviceInfo write FOnMediaSinkDeviceInfo;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered when the browser is capable of being focused.
/// </summary>
2023-03-11 17:29:30 +01:00
property OnCanFocus : TNotifyEvent read FOnCanFocus write FOnCanFocus;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered for all messages sent to the child controls created by CEF to show the web contents.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnBrowserCompMsg : TOnCompMsgEvent read FOnBrowserCompMsg write FOnBrowserCompMsg;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered for all messages sent to the child controls created by CEF to show the web contents.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnWidgetCompMsg : TOnCompMsgEvent read FOnWidgetCompMsg write FOnWidgetCompMsg;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Triggered for all messages sent to the child controls created by CEF to show the web contents.
/// </summary>
2019-11-10 00:24:26 +01:00
property OnRenderCompMsg : TOnCompMsgEvent read FOnRenderCompMsg write FOnRenderCompMsg;
{$ENDIF}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a new message is received from a different process. Return
/// true (1) if the message was handled or false (0) otherwise. It is safe to
/// keep a reference to |message| outside of this callback.
/// </summary>
/// <remarks>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_client_capi.h">CEF source file: /include/capi/cef_client_capi.h (cef_client_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnProcessMessageReceived : TOnProcessMessageReceived read FOnProcessMessageReceived write FOnProcessMessageReceived;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called after a navigation has been committed and before the browser begins
/// loading contents in the frame. The |frame| value will never be NULL --
/// call the IsMain() function to check if this frame is the main frame.
/// |transition_type| provides information about the source of the navigation
/// and an accurate value is only available in the browser process. Multiple
/// frames may be loading at the same time. Sub-frames may start or continue
/// loading after the main frame load has ended. This function will not be
/// called for same page navigations (fragments, history state, etc.) or for
/// navigations that fail or are canceled before commit. For notification of
/// overall browser load status use OnLoadingStateChange instead.
/// </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_load_handler_capi.h">CEF source file: /include/capi/cef_load_handler_capi.h (cef_load_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnLoadStart : TOnLoadStart read FOnLoadStart write FOnLoadStart;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser is done loading a frame. The |frame| value will
/// never be NULL -- call the IsMain() function to check if this frame is the
/// main frame. Multiple frames may be loading at the same time. Sub-frames
/// may start or continue loading after the main frame load has ended. This
/// function will not be called for same page navigations (fragments, history
/// state, etc.) or for navigations that fail or are canceled before commit.
/// For notification of overall browser load status use OnLoadingStateChange
/// instead.
/// </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_load_handler_capi.h">CEF source file: /include/capi/cef_load_handler_capi.h (cef_load_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnLoadEnd : TOnLoadEnd read FOnLoadEnd write FOnLoadEnd;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a navigation fails or is canceled. This function may be called
/// by itself if before commit or in combination with OnLoadStart/OnLoadEnd if
/// after commit. |errorCode| is the error code number, |errorText| is the
/// error text and |failedUrl| is the URL that failed to load. See
/// net\base\net_error_list.h for complete descriptions of the error codes.
/// </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_load_handler_capi.h">CEF source file: /include/capi/cef_load_handler_capi.h (cef_load_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnLoadError : TOnLoadError read FOnLoadError write FOnLoadError;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the loading state has changed. This callback will be executed
/// twice -- once when loading is initiated either programmatically or by user
/// action, and once when loading is terminated due to completion,
/// cancellation of failure. It will be called before any calls to OnLoadStart
/// and after all calls to OnLoadError and/or OnLoadEnd.
/// </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_load_handler_capi.h">CEF source file: /include/capi/cef_load_handler_capi.h (cef_load_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnLoadingStateChange : TOnLoadingStateChange read FOnLoadingStateChange write FOnLoadingStateChange;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser component is about to loose focus. For instance,
/// if focus was on the last HTML element and the user pressed the TAB key.
/// |next| will be true (1) if the browser is giving focus to the next
/// component and false (0) if the browser is giving focus to the previous
/// component.
/// </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_focus_handler_capi.h">CEF source file: /include/capi/cef_focus_handler_capi.h (cef_focus_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnTakeFocus : TOnTakeFocus read FOnTakeFocus write FOnTakeFocus;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser component is requesting focus. |source| indicates
/// where the focus request is originating from. Return false (0) to allow the
/// focus to be set or true (1) to cancel setting the focus.
/// </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_focus_handler_capi.h">CEF source file: /include/capi/cef_focus_handler_capi.h (cef_focus_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnSetFocus : TOnSetFocus read FOnSetFocus write FOnSetFocus;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser component has received focus.
/// </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_focus_handler_capi.h">CEF source file: /include/capi/cef_focus_handler_capi.h (cef_focus_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGotFocus : TOnGotFocus read FOnGotFocus write FOnGotFocus;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called before a context menu is displayed. |params| provides information
/// about the context menu state. |model| initially contains the default
/// context menu. The |model| can be cleared to show no context menu or
/// modified to show a custom menu. Do not keep references to |params| or
/// |model| outside of this callback.
/// </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_context_menu_handler_capi.h">CEF source file: /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnBeforeContextMenu : TOnBeforeContextMenu read FOnBeforeContextMenu write FOnBeforeContextMenu;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to allow custom display of the context menu. |params| provides
/// information about the context menu state. |model| contains the context
/// menu model resulting from OnBeforeContextMenu. For custom display return
/// true (1) and execute |callback| either synchronously or asynchronously
/// with the selected command ID. For default display return false (0). Do not
/// keep references to |params| or |model| outside of this callback.
/// </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_context_menu_handler_capi.h">CEF source file: /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnRunContextMenu : TOnRunContextMenu read FOnRunContextMenu write FOnRunContextMenu;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to execute a command selected from the context menu. Return true
/// (1) if the command was handled or false (0) for the default
/// implementation. See cef_menu_id_t for the command ids that have default
/// implementations. All user-defined command ids should be between
/// MENU_ID_USER_FIRST and MENU_ID_USER_LAST. |params| will have the same
/// values as what was passed to on_before_context_menu(). Do not keep a
/// reference to |params| outside of this callback.
/// </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_context_menu_handler_capi.h">CEF source file: /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnContextMenuCommand : TOnContextMenuCommand read FOnContextMenuCommand write FOnContextMenuCommand;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the context menu is dismissed irregardless of whether the menu
/// was canceled or a command was selected.
/// </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_context_menu_handler_capi.h">CEF source file: /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnContextMenuDismissed : TOnContextMenuDismissed read FOnContextMenuDismissed write FOnContextMenuDismissed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to allow custom display of the quick menu for a windowless browser.
/// |location| is the top left corner of the selected region. |size| is the
/// size of the selected region. |edit_state_flags| is a combination of flags
/// that represent the state of the quick menu. Return true (1) if the menu
/// will be handled and execute |callback| either synchronously or
/// asynchronously with the selected command ID. Return false (0) to cancel
/// the menu.
/// </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_context_menu_handler_capi.h">CEF source file: /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnRunQuickMenu : TOnRunQuickMenuEvent read FOnRunQuickMenu write FOnRunQuickMenu;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to execute a command selected from the quick menu for a windowless
/// browser. Return true (1) if the command was handled or false (0) for the
/// default implementation. See cef_menu_id_t for command IDs that have
/// default implementations.
/// </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_context_menu_handler_capi.h">CEF source file: /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnQuickMenuCommand : TOnQuickMenuCommandEvent read FOnQuickMenuCommand write FOnQuickMenuCommand;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the quick menu for a windowless browser is dismissed
/// irregardless of whether the menu was canceled or a command was selected.
/// </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_context_menu_handler_capi.h">CEF source file: /include/capi/cef_context_menu_handler_capi.h (cef_context_menu_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnQuickMenuDismissed : TOnQuickMenuDismissedEvent read FOnQuickMenuDismissed write FOnQuickMenuDismissed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called before a keyboard event is sent to the renderer. |event| contains
/// information about the keyboard event. |os_event| is the operating system
/// event message, if any. Return true (1) if the event was handled or false
/// (0) otherwise. If the event will be handled in on_key_event() as a
/// keyboard shortcut set |is_keyboard_shortcut| to true (1) and return false
/// (0).
/// </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_keyboard_handler_capi.h">CEF source file: /include/capi/cef_keyboard_handler_capi.h (cef_keyboard_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnPreKeyEvent : TOnPreKeyEvent read FOnPreKeyEvent write FOnPreKeyEvent;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called after the renderer and JavaScript in the page has had a chance to
/// handle the event. |event| contains information about the keyboard event.
/// |os_event| is the operating system event message, if any. Return true (1)
/// if the keyboard event was handled or false (0) otherwise.
/// </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_keyboard_handler_capi.h">CEF source file: /include/capi/cef_keyboard_handler_capi.h (cef_keyboard_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnKeyEvent : TOnKeyEvent read FOnKeyEvent write FOnKeyEvent;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a frame's address has changed.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnAddressChange : TOnAddressChange read FOnAddressChange write FOnAddressChange;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the page title changes.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnTitleChange : TOnTitleChange read FOnTitleChange write FOnTitleChange;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the page icon changes.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnFavIconUrlChange : TOnFavIconUrlChange read FOnFavIconUrlChange write FOnFavIconUrlChange;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when web content in the page has toggled fullscreen mode. If
/// |fullscreen| is true (1) the content will automatically be sized to fill
/// the browser content area. If |fullscreen| is false (0) the content will
/// automatically return to its original size and position. The client is
/// responsible for resizing the browser if desired.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnFullScreenModeChange : TOnFullScreenModeChange read FOnFullScreenModeChange write FOnFullScreenModeChange;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser is about to display a tooltip. |text| contains the
/// text that will be displayed in the tooltip. To handle the display of the
/// tooltip yourself return true (1). Otherwise, you can optionally modify
/// |text| and then return false (0) to allow the browser to display the
/// tooltip. When window rendering is disabled the application is responsible
/// for drawing tooltips and the return value is ignored.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnTooltip : TOnTooltip read FOnTooltip write FOnTooltip;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser receives a status message. |value| contains the
/// text that will be displayed in the status message.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnStatusMessage : TOnStatusMessage read FOnStatusMessage write FOnStatusMessage;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to display a console message. Return true (1) to stop the message
/// from being output to the console.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnConsoleMessage : TOnConsoleMessage read FOnConsoleMessage write FOnConsoleMessage;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when auto-resize is enabled via
/// cef_browser_host_t::SetAutoResizeEnabled and the contents have auto-
/// resized. |new_size| will be the desired size in view coordinates. Return
/// true (1) if the resize was handled or false (0) for default handling.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnAutoResize : TOnAutoResize read FOnAutoResize write FOnAutoResize;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the overall page loading progress has changed. |progress|
/// ranges from 0.0 to 1.0.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnLoadingProgressChange : TOnLoadingProgressChange read FOnLoadingProgressChange write FOnLoadingProgressChange;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser's cursor has changed. If |type| is CT_CUSTOM then
/// |custom_cursor_info| will be populated with the custom cursor information.
/// Return true (1) if the cursor change was handled or false (0) for default
/// handling.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2020-11-19 18:55:17 +01:00
property OnCursorChange : TOnCursorChange read FOnCursorChange write FOnCursorChange;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser's access to an audio and/or video source has
/// changed.
/// </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_display_handler_capi.h">CEF source file: /include/capi/cef_display_handler_capi.h (cef_display_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnMediaAccessChange : TOnMediaAccessChange read FOnMediaAccessChange write FOnMediaAccessChange;
2019-11-10 00:24:26 +01:00
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called before a download begins in response to a user-initiated action
/// (e.g. alt + link click or link click that returns a `Content-Disposition:
/// attachment` response from the server). |url| is the target download URL
/// and |request_function| is the target function (GET, POST, etc). Return
/// true (1) to proceed with the download or false (0) to cancel the download.
/// </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_download_handler_capi.h">CEF source file: /include/capi/cef_download_handler_capi.h (cef_download_handler_t)</see></para>
/// </remarks>
2022-05-03 12:43:16 +02:00
property OnCanDownload : TOnCanDownloadEvent read FOnCanDownload write FOnCanDownload;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called before a download begins. |suggested_name| is the suggested name
/// for the download file. By default the download will be canceled. Execute
/// |callback| either asynchronously or in this function to continue the
/// download if desired. Do not keep a reference to |download_item| outside of
/// this function.
/// </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_download_handler_capi.h">CEF source file: /include/capi/cef_download_handler_capi.h (cef_download_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnBeforeDownload : TOnBeforeDownload read FOnBeforeDownload write FOnBeforeDownload;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a download's status or progress information has been updated.
/// This may be called multiple times before and after OnBeforeDownload.
/// Execute |callback| either asynchronously or in this function to cancel the
/// download if desired. Do not keep a reference to |download_item| outside of
/// this function.
/// </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_download_handler_capi.h">CEF source file: /include/capi/cef_download_handler_capi.h (cef_download_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnDownloadUpdated : TOnDownloadUpdated read FOnDownloadUpdated write FOnDownloadUpdated;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to run a JavaScript dialog. If |origin_url| is non-NULL it can be
/// passed to the CefFormatUrlForSecurityDisplay function to retrieve a secure
/// and user-friendly display string. The |default_prompt_text| value will be
/// specified for prompt dialogs only. Set |suppress_message| to true (1) and
/// return false (0) to suppress the message (suppressing messages is
/// preferable to immediately executing the callback as this is used to detect
/// presumably malicious behavior like spamming alert messages in
/// onbeforeunload). Set |suppress_message| to false (0) and return false (0)
/// to use the default implementation (the default implementation will show
/// one modal dialog at a time and suppress any additional dialog requests
/// until the displayed dialog is dismissed). Return true (1) if the
/// application will use a custom dialog or if the callback has been executed
/// immediately. Custom dialogs may be either modal or modeless. If a custom
/// dialog is used the application must execute |callback| once the custom
/// dialog is dismissed.
/// </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_jsdialog_handler_capi.h">CEF source file: /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnJsdialog : TOnJsdialog read FOnJsdialog write FOnJsdialog;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to run a dialog asking the user if they want to leave a page.
/// Return false (0) to use the default dialog implementation. Return true (1)
/// if the application will use a custom dialog or if the callback has been
/// executed immediately. Custom dialogs may be either modal or modeless. If a
/// custom dialog is used the application must execute |callback| once the
/// custom dialog is dismissed.
/// </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_jsdialog_handler_capi.h">CEF source file: /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnBeforeUnloadDialog : TOnBeforeUnloadDialog read FOnBeforeUnloadDialog write FOnBeforeUnloadDialog;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to cancel any pending dialogs and reset any saved dialog state.
/// Will be called due to events like page navigation irregardless of whether
/// any dialogs are currently pending.
/// </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_jsdialog_handler_capi.h">CEF source file: /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnResetDialogState : TOnResetDialogState read FOnResetDialogState write FOnResetDialogState;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the dialog is closed.
/// </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_jsdialog_handler_capi.h">CEF source file: /include/capi/cef_jsdialog_handler_capi.h (cef_jsdialog_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnDialogClosed : TOnDialogClosed read FOnDialogClosed write FOnDialogClosed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI thread before a new popup browser is created. The
/// |browser| and |frame| values represent the source of the popup request.
/// The |target_url| and |target_frame_name| values indicate where the popup
/// browser should navigate and may be NULL if not specified with the request.
/// The |target_disposition| value indicates where the user intended to open
/// the popup (e.g. current tab, new tab, etc). The |user_gesture| value will
/// be true (1) if the popup was opened via explicit user gesture (e.g.
/// clicking a link) or false (0) if the popup opened automatically (e.g. via
/// the DomContentLoaded event). The |popupFeatures| structure contains
/// additional information about the requested popup window. To allow creation
/// of the popup browser optionally modify |windowInfo|, |client|, |settings|
/// and |no_javascript_access| and return false (0). To cancel creation of the
/// popup browser return true (1). The |client| and |settings| values will
/// default to the source browser's values. If the |no_javascript_access|
/// value is set to false (0) the new browser will not be scriptable and may
/// not be hosted in the same renderer process as the source browser. Any
/// modifications to |windowInfo| will be ignored if the parent browser is
/// wrapped in a ICefBrowserView. Popup browser creation will be canceled
/// if the parent browser is destroyed before the popup browser creation
/// completes (indicated by a call to OnAfterCreated for the popup browser).
/// The |extra_info| parameter provides an opportunity to specify extra
/// information specific to the created popup browser that will be passed to
/// ICefRenderProcessHandler.OnBrowserCreated in the render process.
/// </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_life_span_handler_capi.h">CEF source file: /include/capi/cef_life_span_handler_capi.h (cef_life_span_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnBeforePopup : TOnBeforePopup read FOnBeforePopup write FOnBeforePopup;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called after a new browser is created. It is now safe to begin performing
/// actions with |browser|. ICefFrameHandler callbacks related to initial
/// main frame creation will arrive before this callback. See
/// ICefFrameHandler documentation for additional usage information.
/// </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_life_span_handler_capi.h">CEF source file: /include/capi/cef_life_span_handler_capi.h (cef_life_span_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnAfterCreated : TOnAfterCreated read FOnAfterCreated write FOnAfterCreated;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called just before a browser is destroyed. Release all references to the
/// browser object and do not attempt to execute any functions on the browser
/// object (other than IsValid, GetIdentifier or IsSame) after this callback
/// returns. ICefFrameHandler callbacks related to final main frame
/// destruction will arrive after this callback and ICefBrowser.IsValid
/// will return false (0) at that time. Any in-progress network requests
/// associated with |browser| will be aborted when the browser is destroyed,
/// and ICefResourceRequestHandler callbacks related to those requests may
/// still arrive on the IO thread after this callback. See ICefFrameHandler
/// and OnClose() documentation for additional usage information.
/// </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_life_span_handler_capi.h">CEF source file: /include/capi/cef_life_span_handler_capi.h (cef_life_span_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnBeforeClose : TOnBeforeClose read FOnBeforeClose write FOnBeforeClose;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a browser has recieved a request to close. This may result
/// directly from a call to ICefBrowserHost.*CloseBrowser or indirectly
/// if the browser is parented to a top-level window created by CEF and the
/// user attempts to close that window (by clicking the 'X', for example). The
/// OnClose function will be called after the JavaScript 'onunload' event
/// has been fired.
///
/// An application should handle top-level owner window close notifications by
/// calling ICefBrowserHost.TryCloseBrowser or
/// ICefBrowserHost.CloseBrowser(false) instead of allowing the window
/// to close immediately (see the examples below). This gives CEF an
/// opportunity to process the 'onbeforeunload' event and optionally cancel
/// the close before OnClose is called.
///
/// When windowed rendering is enabled CEF will internally create a window or
/// view to host the browser. In that case returning false (0) from OnClose()
/// will send the standard close notification to the browser's top-level owner
/// window (e.g. WM_CLOSE on Windows, performClose: on OS X, "delete_event" on
/// Linux or ICefWindowDelegate.CanClose callback from Views). If the
/// browser's host window/view has already been destroyed (via view hierarchy
/// tear-down, for example) then OnClose() will not be called for that
/// browser since is no longer possible to cancel the close.
///
/// When windowed rendering is disabled returning false (0) from OnClose()
/// will cause the browser object to be destroyed immediately.
///
/// If the browser's top-level owner window requires a non-standard close
/// notification then send that notification from OnClose() and return true
/// (1).
///
/// The ICefLifeSpanHandler.OnBeforeClose function will be called
/// after OnClose() (if OnClose() is called) and immediately before the
/// browser object is destroyed. The application should only exit after
/// OnBeforeClose() has been called for all existing browsers.
///
/// The below examples describe what should happen during window close when
/// the browser is parented to an application-provided top-level window.
///
/// Example 1: Using ICefBrowserHost.TryCloseBrowser(). This is
/// recommended for clients using standard close handling and windows created
/// on the browser process UI thread.
/// 1. User clicks the window close button which sends a close notification
/// to the application's top-level window.
/// 2. Application's top-level window receives the close notification and
/// calls TryCloseBrowser() (which internally calls CloseBrowser(false)).
/// TryCloseBrowser() returns false so the client cancels the window
/// close.
/// 3. JavaScript 'onbeforeunload' handler executes and shows the close
/// confirmation dialog (which can be overridden via
/// ICefJSDialogHandler.OnBeforeUnloadDialog()).
/// 4. User approves the close.
/// 5. JavaScript 'onunload' handler executes.
/// 6. CEF sends a close notification to the application's top-level window
/// (because OnClose() returned false by default).
/// 7. Application's top-level window receives the close notification and
/// calls TryCloseBrowser(). TryCloseBrowser() returns true so the client
/// allows the window close.
/// 8. Application's top-level window is destroyed.
/// 9. Application's OnBeforeClose() handler is called and the browser object is destroyed.
/// 10. Application exits by calling cef_quit_message_loop() if no other browsers exist.
///
/// Example 2: Using ICefBrowserHost::CloseBrowser(false) and
/// implementing the OnClose() callback. This is recommended for clients
/// using non-standard close handling or windows that were not created on the
/// browser process UI thread.
/// 1. User clicks the window close button which sends a close notification
/// to the application's top-level window.
/// 2. Application's top-level window receives the close notification and:
/// A. Calls ICefBrowserHost.CloseBrowser(false).
/// B. Cancels the window close.
/// 3. JavaScript 'onbeforeunload' handler executes and shows the close
/// confirmation dialog (which can be overridden via
/// ICefJSDialogHandler.OnBeforeUnloadDialog()).
/// 4. User approves the close.
/// 5. JavaScript 'onunload' handler executes.
/// 6. Application's OnClose() handler is called. Application will:
/// A. Set a flag to indicate that the next close attempt will be allowed.
/// B. Return false.
/// 7. CEF sends an close notification to the application's top-level window.
/// 8. Application's top-level window receives the close notification and
/// allows the window to close based on the flag from #6B.
/// 9. Application's top-level window is destroyed.
/// 10. Application's OnBeforeClose() handler is called and the browser object is destroyed.
/// 11. Application exits by calling cef_quit_message_loop() if no other browsers exist.
/// </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_life_span_handler_capi.h">CEF source file: /include/capi/cef_life_span_handler_capi.h (cef_life_span_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnClose : TOnClose read FOnClose write FOnClose;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI thread before browser navigation. Return true (1) to
/// cancel the navigation or false (0) to allow the navigation to proceed. The
/// |request| object cannot be modified in this callback.
/// ICefLoadHandler.OnLoadingStateChange will be called twice in all
/// cases. If the navigation is allowed ICefLoadHandler.OnLoadStart and
/// ICefLoadHandler.OnLoadEnd will be called. If the navigation is
/// canceled ICefLoadHandler.OnLoadError will be called with an
/// |errorCode| value of ERR_ABORTED. The |user_gesture| value will be true
/// (1) if the browser navigated via explicit user gesture (e.g. clicking a
/// link) or false (0) if it navigated automatically (e.g. via the
/// DomContentLoaded event).
/// </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_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnBeforeBrowse : TOnBeforeBrowse read FOnBeforeBrowse write FOnBeforeBrowse;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI thread before OnBeforeBrowse in certain limited cases
/// where navigating a new or different browser might be desirable. This
/// includes user-initiated navigation that might open in a special way (e.g.
/// links clicked via middle-click or ctrl + left-click) and certain types of
/// cross-origin navigation initiated from the renderer process (e.g.
/// navigating the top-level frame to/from a file URL). The |browser| and
/// |frame| values represent the source of the navigation. The
/// |target_disposition| value indicates where the user intended to navigate
/// the browser based on standard Chromium behaviors (e.g. current tab, new
/// tab, etc). The |user_gesture| value will be true (1) if the browser
/// navigated via explicit user gesture (e.g. clicking a link) or false (0) if
/// it navigated automatically (e.g. via the DomContentLoaded event). Return
/// true (1) to cancel the navigation or false (0) to allow the navigation to
/// proceed in the source browser's top-level frame.
/// </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_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnOpenUrlFromTab : TOnOpenUrlFromTab read FOnOpenUrlFromTab write FOnOpenUrlFromTab;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread when the browser needs credentials from the user.
/// |origin_url| is the origin making this authentication request. |isProxy|
/// indicates whether the host is a proxy server. |host| contains the hostname
/// and |port| contains the port number. |realm| is the realm of the challenge
/// and may be NULL. |scheme| is the authentication scheme used, such as
/// "basic" or "digest", and will be NULL if the source of the request is an
/// FTP server. Return true (1) to continue the request and call
/// ICefAuthCallback.cont() either in this function or at a later time
/// when the authentication information is available. Return false (0) to
/// cancel the request immediately.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetAuthCredentials : TOnGetAuthCredentials read FOnGetAuthCredentials write FOnGetAuthCredentials;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI thread to handle requests for URLs with an invalid SSL
/// certificate. Return true (1) and call ICefCallback functions either in
/// this function or at a later time to continue or cancel the request. Return
/// false (0) to cancel the request immediately. If
/// TCefSettings.ignore_certificate_errors is set all invalid certificates
/// will be accepted without calling this function.
/// </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_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnCertificateError : TOnCertificateError read FOnCertificateError write FOnCertificateError;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI thread when a client certificate is being requested for
/// authentication. Return false (0) to use the default behavior and
/// automatically select the first certificate available. Return true (1) and
/// call ICefSelectClientCertificateCallback.Select either in this
/// function or at a later time to select a certificate. Do not call Select or
/// call it with NULL to continue without using any certificate. |isProxy|
/// indicates whether the host is an HTTPS proxy or the origin server. |host|
/// and |port| contains the hostname and port of the SSL server.
/// |certificates| is the list of certificates to choose from; this list has
/// already been pruned by Chromium so that it only contains certificates from
/// issuers that the server trusts.
/// </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_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnSelectClientCertificate : TOnSelectClientCertificate read FOnSelectClientCertificate write FOnSelectClientCertificate;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the browser process UI thread when the render view associated
/// with |browser| is ready to receive/handle IPC messages in the render
/// process.
/// </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_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnRenderViewReady : TOnRenderViewReady read FOnRenderViewReady write FOnRenderViewReady;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the browser process UI thread when the render process terminates
/// unexpectedly. |status| indicates how the process terminated.
/// </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_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnRenderProcessTerminated : TOnRenderProcessTerminated read FOnRenderProcessTerminated write FOnRenderProcessTerminated;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the browser process IO thread before a resource request is
/// initiated. The |browser| and |frame| values represent the source of the
/// request. |request| represents the request contents and cannot be modified
/// in this callback. |is_navigation| will be true (1) if the resource request
/// is a navigation. |is_download| will be true (1) if the resource request is
/// a download. |request_initiator| is the origin (scheme + domain) of the
/// page that initiated the request. Set |disable_default_handling| to true
/// (1) to disable default handling of the request, in which case it will need
/// to be handled via ICefResourceRequestHandler.GetResourceHandler or it
/// will be canceled. To allow the resource load to proceed with default
/// handling return NULL. To specify a handler for the resource return a
/// ICefResourceRequestHandler object. If this callback returns NULL the
/// same function will be called on the associated
/// ICefRequestContextHandler, if any.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetResourceRequestHandler_ReqHdlr : TOnGetResourceRequestHandler read FOnGetResourceRequestHandler_ReqHdlr write FOnGetResourceRequestHandler_ReqHdlr;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the browser process UI thread when the window.document object of
/// the main frame has been created.
/// </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_request_handler_capi.h">CEF source file: /include/capi/cef_request_handler_capi.h (cef_request_handler_t)</see></para>
/// </remarks>
2020-06-21 21:27:55 +02:00
property OnDocumentAvailableInMainFrame : TOnDocumentAvailableInMainFrame read FOnDocumentAvailableInMainFrame write FOnDocumentAvailableInMainFrame;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread before a resource request is loaded. The |browser|
/// and |frame| values represent the source of the request, and may be NULL
/// for requests originating from service workers or ICefUrlRequest. To
/// redirect or change the resource load optionally modify |request|.
/// Modification of the request URL will be treated as a redirect. Return
/// RV_CONTINUE to continue the request immediately. Return RV_CONTINUE_ASYNC
/// and call ICefCallback functions at a later time to continue or cancel
/// the request asynchronously. Return RV_CANCEL to cancel the request
/// immediately.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_resource_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnBeforeResourceLoad : TOnBeforeResourceLoad read FOnBeforeResourceLoad write FOnBeforeResourceLoad;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread before a resource is loaded. The |browser| and
/// |frame| values represent the source of the request, and may be NULL for
/// requests originating from service workers or ICefUrlRequest. To allow
/// the resource to load using the default network loader return NULL. To
/// specify a handler for the resource return a ICefResourceHandler object.
/// The |request| object cannot not be modified in this callback.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_resource_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetResourceHandler : TOnGetResourceHandler read FOnGetResourceHandler write FOnGetResourceHandler;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread when a resource load is redirected. The |browser|
/// and |frame| values represent the source of the request, and may be NULL
/// for requests originating from service workers or ICefUrlRequest. The
/// |request| parameter will contain the old URL and other request-related
/// information. The |response| parameter will contain the response that
/// resulted in the redirect. The |new_url| parameter will contain the new URL
/// and can be changed if desired. The |request| and |response| objects cannot
/// be modified in this callback.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_resource_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnResourceRedirect : TOnResourceRedirect read FOnResourceRedirect write FOnResourceRedirect;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread when a resource response is received. The
/// |browser| and |frame| values represent the source of the request, and may
/// be NULL for requests originating from service workers or ICefUrlRequest.
/// To allow the resource load to proceed without modification return false
/// (0). To redirect or retry the resource load optionally modify |request|
/// and return true (1). Modification of the request URL will be treated as a
/// redirect. Requests handled using the default network loader cannot be
/// redirected in this callback. The |response| object cannot be modified in
/// this callback.
///
/// WARNING: Redirecting using this function is deprecated. Use
/// OnBeforeResourceLoad or GetResourceHandler to perform redirects.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_resource_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnResourceResponse : TOnResourceResponse read FOnResourceResponse write FOnResourceResponse;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread to optionally filter resource response content.
/// The |browser| and |frame| values represent the source of the request, and
/// may be NULL for requests originating from service workers or
/// ICefUrlRequest. |request| and |response| represent the request and
/// response respectively and cannot be modified in this callback.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_resource_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetResourceResponseFilter : TOnGetResourceResponseFilter read FOnGetResourceResponseFilter write FOnGetResourceResponseFilter;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread when a resource load has completed. The |browser|
/// and |frame| values represent the source of the request, and may be NULL
/// for requests originating from service workers or ICefUrlRequest.
/// |request| and |response| represent the request and response respectively
/// and cannot be modified in this callback. |status| indicates the load
/// completion status. |received_content_length| is the number of response
/// bytes actually read. This function will be called for all requests,
/// including requests that are aborted due to CEF shutdown or destruction of
/// the associated browser. In cases where the associated browser is destroyed
/// this callback may arrive after the ICefLifeSpanHandler.OnBeforeClose
/// callback for that browser. The ICefFrame.IsValid function can be used
/// to test for this situation, and care should be taken not to call |browser|
/// or |frame| functions that modify state (like LoadURL, SendProcessMessage,
/// etc.) if the frame is invalid.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_resource_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnResourceLoadComplete : TOnResourceLoadComplete read FOnResourceLoadComplete write FOnResourceLoadComplete;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread to handle requests for URLs with an unknown
/// protocol component. The |browser| and |frame| values represent the source
/// of the request, and may be NULL for requests originating from service
/// workers or ICefUrlRequest. |request| cannot be modified in this
/// callback. Set |allow_os_execution| to true (1) to attempt execution via
/// the registered OS protocol handler, if any. SECURITY WARNING: YOU SHOULD
/// USE THIS METHOD TO ENFORCE RESTRICTIONS BASED ON SCHEME, HOST OR OTHER URL
/// ANALYSIS BEFORE ALLOWING OS EXECUTION.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_resource_request_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnProtocolExecution : TOnProtocolExecution read FOnProtocolExecution write FOnProtocolExecution;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread before a resource request is sent. The |browser|
/// and |frame| values represent the source of the request, and may be NULL
/// for requests originating from service workers or ICefUrlRequest.
/// |request| cannot be modified in this callback. Return true (1) if the
/// specified cookie can be sent with the request or false (0) otherwise.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_cookie_access_filter_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnCanSendCookie : TOnCanSendCookie read FOnCanSendCookie write FOnCanSendCookie;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the IO thread after a resource response is received. The
/// |browser| and |frame| values represent the source of the request, and may
/// be NULL for requests originating from service workers or ICefUrlRequest.
/// |request| cannot be modified in this callback. Return true (1) if the
/// specified cookie returned with the response can be saved or false (0)
/// otherwise.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_resource_request_handler_capi.h">CEF source file: /include/capi/cef_resource_request_handler_capi.h (cef_cookie_access_filter_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnCanSaveCookie : TOnCanSaveCookie read FOnCanSaveCookie write FOnCanSaveCookie;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to run a file chooser dialog. |mode| represents the type of dialog
/// to display. |title| to the title to be used for the dialog and may be NULL
/// to show the default title ("Open" or "Save" depending on the mode).
/// |default_file_path| is the path with optional directory and/or file name
/// component that should be initially selected in the dialog.
/// |accept_filters| are used to restrict the selectable file types and may
/// any combination of (a) valid lower-cased MIME types (e.g. "text/*" or
/// "image/*"), (b) individual file extensions (e.g. ".txt" or ".png"), or (c)
/// combined description and file extension delimited using "|" and ";" (e.g.
/// "Image Types|.png;.gif;.jpg"). To display a custom dialog return true (1)
/// and execute |callback| either inline or at a later time. To display the
/// default dialog return false (0).
/// </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_dialog_handler_capi.h">CEF source file: /include/capi/cef_dialog_handler_capi.h (cef_dialog_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnFileDialog : TOnFileDialog read FOnFileDialog write FOnFileDialog;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Return the handler for accessibility notifications. If no handler is
/// provided the default implementation will be used.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetAccessibilityHandler : TOnGetAccessibilityHandler read FOnGetAccessibilityHandler write FOnGetAccessibilityHandler;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to retrieve the root window rectangle in screen DIP coordinates.
/// Return true (1) if the rectangle was provided. If this function returns
/// false (0) the rectangle from OnGetViewRect will be used.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetRootScreenRect : TOnGetRootScreenRect read FOnGetRootScreenRect write FOnGetRootScreenRect;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to retrieve the view rectangle in screen DIP coordinates. This
/// function must always provide a non-NULL rectangle.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetViewRect : TOnGetViewRect read FOnGetViewRect write FOnGetViewRect;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to retrieve the translation from view DIP coordinates to screen
/// coordinates. Windows/Linux should provide screen device (pixel)
/// coordinates and MacOS should provide screen DIP coordinates. Return true
/// (1) if the requested coordinates were provided.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetScreenPoint : TOnGetScreenPoint read FOnGetScreenPoint write FOnGetScreenPoint;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to allow the client to fill in the TCefScreenInfo object with
/// appropriate values. Return true (1) if the |screen_info| structure has
/// been modified.
/// If the screen info rectangle is left NULL the rectangle from OnGetViewRect
/// will be used. If the rectangle is still NULL or invalid popups may not be
/// drawn correctly.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetScreenInfo : TOnGetScreenInfo read FOnGetScreenInfo write FOnGetScreenInfo;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser wants to show or hide the popup widget. The popup
/// should be shown if |show| is true (1) and hidden if |show| is false (0).
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnPopupShow : TOnPopupShow read FOnPopupShow write FOnPopupShow;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the browser wants to move or resize the popup widget. |rect|
/// contains the new location and size in view coordinates.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnPopupSize : TOnPopupSize read FOnPopupSize write FOnPopupSize;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when an element should be painted. Pixel values passed to this
/// function are scaled relative to view coordinates based on the value of
/// TCefScreenInfo.device_scale_factor returned from OnGetScreenInfo. |type|
/// indicates whether the element is the view or the popup widget. |buffer|
/// contains the pixel data for the whole image. |dirtyRects| contains the set
/// of rectangles in pixel coordinates that need to be repainted. |buffer|
/// will be |width|*|height|*4 bytes in size and represents a BGRA image with
/// an upper-left origin. This function is only called when
/// TCefWindowInfo.shared_texture_enabled is set to false (0).
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnPaint : TOnPaint read FOnPaint write FOnPaint;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when an element has been rendered to the shared texture handle.
/// |type| indicates whether the element is the view or the popup widget.
/// |dirtyRects| contains the set of rectangles in pixel coordinates that need
/// to be repainted. |shared_handle| is the handle for a D3D11 Texture2D that
/// can be accessed via ID3D11Device using the OpenSharedResource function.
/// This function is only called when TCefWindowInfo.shared_texture_enabled
/// is set to true (1), and is currently only supported on Windows.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnAcceleratedPaint : TOnAcceleratedPaint read FOnAcceleratedPaint write FOnAcceleratedPaint;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to retrieve the size of the touch handle for the specified
/// |orientation|.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnGetTouchHandleSize : TOnGetTouchHandleSize read FOnGetTouchHandleSize write FOnGetTouchHandleSize;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when touch handle state is updated. The client is responsible for
/// rendering the touch handles.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnTouchHandleStateChanged : TOnTouchHandleStateChanged read FOnTouchHandleStateChanged write FOnTouchHandleStateChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the user starts dragging content in the web view. Contextual
/// information about the dragged content is supplied by |drag_data|. (|x|,
/// |y|) is the drag start location in screen coordinates. OS APIs that run a
/// system message loop may be used within the StartDragging call.
///
/// Return false (0) to abort the drag operation. Don't call any of
/// ICefBrowserHost.DragSource*Ended* functions after returning false (0).
///
/// Return true (1) to handle the drag operation. Call
/// ICefBrowserHost.DragSourceEndedAt and DragSourceSystemDragEnded either
/// synchronously or asynchronously to inform the web view that the drag
/// operation has ended.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnStartDragging : TOnStartDragging read FOnStartDragging write FOnStartDragging;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the web view wants to update the mouse cursor during a drag &
/// drop operation. |operation| describes the allowed operation (none, move,
/// copy, link).
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnUpdateDragCursor : TOnUpdateDragCursor read FOnUpdateDragCursor write FOnUpdateDragCursor;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the scroll offset has changed.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnScrollOffsetChanged : TOnScrollOffsetChanged read FOnScrollOffsetChanged write FOnScrollOffsetChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the IME composition range has changed. |selected_range| is the
/// range of characters that have been selected. |character_bounds| is the
/// bounds of each character in view coordinates.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnIMECompositionRangeChanged : TOnIMECompositionRangeChanged read FOnIMECompositionRangeChanged write FOnIMECompositionRangeChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when text selection has changed for the specified |browser|.
/// |selected_text| is the currently selected text and |selected_range| is the
/// character range.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnTextSelectionChanged : TOnTextSelectionChanged read FOnTextSelectionChanged write FOnTextSelectionChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when an on-screen keyboard should be shown or hidden for the
/// specified |browser|. |input_mode| specifies what kind of keyboard should
/// be opened. If |input_mode| is CEF_TEXT_INPUT_MODE_NONE, any existing
/// keyboard for this browser should be hidden.
/// </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_render_handler_capi.h">CEF source file: /include/capi/cef_render_handler_capi.h (cef_render_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnVirtualKeyboardRequested : TOnVirtualKeyboardRequested read FOnVirtualKeyboardRequested write FOnVirtualKeyboardRequested;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when an external drag event enters the browser window. |dragData|
/// contains the drag event data and |mask| represents the type of drag
/// operation. Return false (0) for default drag handling behavior or true (1)
/// to cancel the drag event.
/// </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_drag_handler_capi.h">CEF source file: /include/capi/cef_drag_handler_capi.h (cef_drag_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnDragEnter : TOnDragEnter read FOnDragEnter write FOnDragEnter;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called whenever draggable regions for the browser window change. These can
/// be specified using the '-webkit-app-region: drag/no-drag' CSS-property. If
/// draggable regions are never defined in a document this function will also
/// never be called. If the last draggable region is removed from a document
/// this function will be called with an NULL vector.
/// </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_drag_handler_capi.h">CEF source file: /include/capi/cef_drag_handler_capi.h (cef_drag_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnDraggableRegionsChanged : TOnDraggableRegionsChanged read FOnDraggableRegionsChanged write FOnDraggableRegionsChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to report find results returned by ICefBrowserHost.find().
/// |identifer| is a unique incremental identifier for the currently active
/// search, |count| is the number of matches currently identified,
/// |selectionRect| is the location of where the match was found (in window
/// coordinates), |activeMatchOrdinal| is the current position in the search
/// results, and |finalUpdate| is true (1) if this is the last find
/// notification.
/// </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_find_handler_capi.h">CEF source file: /include/capi/cef_find_handler_capi.h (cef_find_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnFindResult : TOnFindResult read FOnFindResult write FOnFindResult;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the browser process UI thread immediately after the request
/// context has been initialized.
/// </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_request_context_handler_capi.h">CEF source file: /include/capi/cef_request_context_handler_capi.h (cef_request_context_handler_t)</see></para>
/// </remarks>
2021-04-18 19:36:20 +02:00
property OnRequestContextInitialized : TOnRequestContextInitialized read FOnRequestContextInitialized write FOnRequestContextInitialized;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the browser process IO thread before a resource request is
/// initiated. The |browser| and |frame| values represent the source of the
/// request, and may be NULL for requests originating from service workers or
/// ICefUrlRequest. |request| represents the request contents and cannot be
/// modified in this callback. |is_navigation| will be true (1) if the
/// resource request is a navigation. |is_download| will be true (1) if the
/// resource request is a download. |request_initiator| is the origin (scheme
/// + domain) of the page that initiated the request. Set
/// |disable_default_handling| to true (1) to disable default handling of the
/// request, in which case it will need to be handled via
/// ICefResourceRequestHandler.GetResourceHandler or it will be canceled.
/// To allow the resource load to proceed with default handling return NULL.
/// To specify a handler for the resource return a
/// ICefResourceRequestHandler object. This function will not be called if
/// the client associated with |browser| returns a non-NULL value from
/// ICefRequestHandler.GetResourceRequestHandler for the same request
/// (identified by ICefRequest.GetIdentifier).
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF IO thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_request_context_handler_capi.h">CEF source file: /include/capi/cef_request_context_handler_capi.h (cef_request_context_handler_t)</see></para>
/// </remarks>
2019-11-10 00:24:26 +01:00
property OnGetResourceRequestHandler_ReqCtxHdlr : TOnGetResourceRequestHandler read FOnGetResourceRequestHandler_ReqCtxHdlr write FOnGetResourceRequestHandler_ReqCtxHdlr;
2023-08-07 20:21:42 +02:00
/// <summary>
/// The list of available media sinks has changed or
/// ICefMediaRouter.NotifyCurrentSinks was called.
/// </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_media_router_capi.h">CEF source file: /include/capi/cef_media_router_capi.h (cef_media_observer_t)</see></para>
/// </remarks>
2020-04-19 22:47:20 +02:00
property OnSinks : TOnSinksEvent read FOnSinks write FOnSinks;
2023-08-07 20:21:42 +02:00
/// <summary>
/// The list of available media routes has changed or
/// ICefMediaRouter.NotifyCurrentRoutes was called.
/// </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_media_router_capi.h">CEF source file: /include/capi/cef_media_router_capi.h (cef_media_observer_t)</see></para>
/// </remarks>
2020-04-19 22:47:20 +02:00
property OnRoutes : TOnRoutesEvent read FOnRoutes write FOnRoutes;
2023-08-07 20:21:42 +02:00
/// <summary>
/// The connection state of |route| has changed.
/// </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_media_router_capi.h">CEF source file: /include/capi/cef_media_router_capi.h (cef_media_observer_t)</see></para>
/// </remarks>
2020-04-19 22:47:20 +02:00
property OnRouteStateChanged : TOnRouteStateChangedEvent read FOnRouteStateChanged write FOnRouteStateChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// A message was recieved over |route|. |message| is only valid for the scope
/// of this callback and should be copied if necessary.
/// </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_media_router_capi.h">CEF source file: /include/capi/cef_media_router_capi.h (cef_media_observer_t)</see></para>
/// </remarks>
2020-04-19 22:47:20 +02:00
property OnRouteMessageReceived : TOnRouteMessageReceivedEvent read FOnRouteMessageReceived write FOnRouteMessageReceived;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI thread to allow configuration of audio stream parameters.
/// Return true (1) to proceed with audio stream capture, or false (0) to
/// cancel it. All members of |params| can optionally be configured here, but
/// they are also pre-filled with some sensible defaults.
/// </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_audio_handler_capi.h">CEF source file: /include/capi/cef_audio_handler_capi.h (cef_audio_handler_t)</see></para>
/// </remarks>
2020-05-23 15:00:44 +02:00
property OnGetAudioParameters : TOnGetAudioParametersEvent read FOnGetAudioParameters write FOnGetAudioParameters;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on a browser audio capture thread when the browser starts streaming
/// audio. OnAudioStreamStopped will always be called after
/// OnAudioStreamStarted; both functions may be called multiple times for the
/// same browser. |params| contains the audio parameters like sample rate and
/// channel layout. |channels| is the number of channels.
/// </summary>
/// <remarks>
/// <para>This event will be called on a browser audio capture thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_audio_handler_capi.h">CEF source file: /include/capi/cef_audio_handler_capi.h (cef_audio_handler_t)</see></para>
/// </remarks>
2020-05-23 15:00:44 +02:00
property OnAudioStreamStarted : TOnAudioStreamStartedEvent read FOnAudioStreamStarted write FOnAudioStreamStarted;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the audio stream thread when a PCM packet is received for the
/// stream. |data| is an array representing the raw PCM data as a floating
/// point type, i.e. 4-byte value(s). |frames| is the number of frames in the
/// PCM packet. |pts| is the presentation timestamp (in milliseconds since the
/// Unix Epoch) and represents the time at which the decompressed packet
/// should be presented to the user. Based on |frames| and the
/// |channel_layout| value passed to OnAudioStreamStarted you can calculate
/// the size of the |data| array in bytes.
/// </summary>
/// <remarks>
/// <para>This event will be called on a browser audio capture thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_audio_handler_capi.h">CEF source file: /include/capi/cef_audio_handler_capi.h (cef_audio_handler_t)</see></para>
/// </remarks>
2020-05-23 15:00:44 +02:00
property OnAudioStreamPacket : TOnAudioStreamPacketEvent read FOnAudioStreamPacket write FOnAudioStreamPacket;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI thread when the stream has stopped. OnAudioSteamStopped
/// will always be called after OnAudioStreamStarted; both functions may be
/// called multiple times for the same stream.
/// </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_audio_handler_capi.h">CEF source file: /include/capi/cef_audio_handler_capi.h (cef_audio_handler_t)</see></para>
/// </remarks>
2020-05-23 15:00:44 +02:00
property OnAudioStreamStopped : TOnAudioStreamStoppedEvent read FOnAudioStreamStopped write FOnAudioStreamStopped;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called on the UI or audio stream thread when an error occurred. During the
/// stream creation phase this callback will be called on the UI thread while
/// in the capturing phase it will be called on the audio stream thread. The
/// stream will be stopped immediately.
/// </summary>
/// <remarks>
/// <para>This event will be called on the browser process CEF UI thread or a browser audio capture thread.</para>
/// <para><see href="https://bitbucket.org/chromiumembedded/cef/src/master/include/capi/cef_audio_handler_capi.h">CEF source file: /include/capi/cef_audio_handler_capi.h (cef_audio_handler_t)</see></para>
/// </remarks>
2020-05-23 15:00:44 +02:00
property OnAudioStreamError : TOnAudioStreamErrorEvent read FOnAudioStreamError write FOnAudioStreamError;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called on receipt of a DevTools protocol message.
/// |browser| is the originating browser instance. |message| is a UTF8-encoded
/// JSON dictionary representing either a function result or an event.
/// |message| is only valid for the scope of this callback and should be
/// copied if necessary. Return true (1) if the message was handled or false
/// (0) if the message should be further processed and passed to the
/// OnDevToolsMethodResult or OnDevToolsEvent functions as appropriate.
///
/// Method result dictionaries include an "id" (int) value that identifies the
/// orginating function call sent from
/// ICefBrowserHost.SendDevToolsMessage, and optionally either a "result"
/// (dictionary) or "error" (dictionary) value. The "error" dictionary will
/// contain "code" (int) and "message" (string) values. Event dictionaries
/// include a "function" (string) value and optionally a "params" (dictionary)
/// value. See the DevTools protocol documentation at
/// https://chromedevtools.github.io/devtools-protocol/ for details of
/// supported function calls and the expected "result" or "params" dictionary
/// contents. JSON dictionaries can be parsed using the CefParseJSON function
/// if desired, however be aware of performance considerations when parsing
/// large messages (some of which may exceed 1MB in size).
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2020-06-21 21:27:55 +02:00
property OnDevToolsMessage : TOnDevToolsMessageEvent read FOnDevToolsMessage write FOnDevToolsMessage;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called on receipt of a DevTools protocol message.
/// |browser| is the originating browser instance. |message| is a UTF8-encoded
/// JSON dictionary representing either a function result or an event.
/// |message| is only valid for the scope of this callback and should be
/// copied if necessary. Return true (1) if the message was handled or false
/// (0) if the message should be further processed and passed to the
/// OnDevToolsMethodResult or OnDevToolsEvent functions as appropriate.
///
/// Method result dictionaries include an "id" (int) value that identifies the
/// orginating function call sent from
/// ICefBrowserHost.SendDevToolsMessage, and optionally either a "result"
/// (dictionary) or "error" (dictionary) value. The "error" dictionary will
/// contain "code" (int) and "message" (string) values. Event dictionaries
/// include a "function" (string) value and optionally a "params" (dictionary)
/// value. See the DevTools protocol documentation at
/// https://chromedevtools.github.io/devtools-protocol/ for details of
/// supported function calls and the expected "result" or "params" dictionary
/// contents. JSON dictionaries can be parsed using the CefParseJSON function
/// if desired, however be aware of performance considerations when parsing
/// large messages (some of which may exceed 1MB in size).
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2021-01-16 14:35:01 +01:00
property OnDevToolsRawMessage : TOnDevToolsRawMessageEvent read FOnDevToolsRawMessage write FOnDevToolsRawMessage;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called after attempted execution of a DevTools
/// protocol function. |browser| is the originating browser instance.
/// |message_id| is the "id" value that identifies the originating function
/// call message. If the function succeeded |success| will be true (1) and
/// |result| will be the UTF8-encoded JSON "result" dictionary value (which
/// may be NULL). If the function failed |success| will be false (0) and
/// |result| will be the UTF8-encoded JSON "error" dictionary value. |result|
/// is only valid for the scope of this callback and should be copied if
/// necessary. See the OnDevToolsMessage documentation for additional details
/// on |result| contents.
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2020-06-21 21:27:55 +02:00
property OnDevToolsMethodResult : TOnDevToolsMethodResultEvent read FOnDevToolsMethodResult write FOnDevToolsMethodResult;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called after attempted execution of a DevTools
/// protocol function. |browser| is the originating browser instance.
/// |message_id| is the "id" value that identifies the originating function
/// call message. If the function succeeded |success| will be true (1) and
/// |result| will be the UTF8-encoded JSON "result" dictionary value (which
/// may be NULL). If the function failed |success| will be false (0) and
/// |result| will be the UTF8-encoded JSON "error" dictionary value. |result|
/// is only valid for the scope of this callback and should be copied if
/// necessary. See the OnDevToolsMessage documentation for additional details
/// on |result| contents.
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2021-01-16 14:35:01 +01:00
property OnDevToolsMethodRawResult : TOnDevToolsMethodRawResultEvent read FOnDevToolsMethodRawResult write FOnDevToolsMethodRawResult;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called on receipt of a DevTools protocol event.
/// |browser| is the originating browser instance. |function| is the
/// "function" value. |params| is the UTF8-encoded JSON "params" dictionary
/// value (which may be NULL). |params| is only valid for the scope of this
/// callback and should be copied if necessary. See the OnDevToolsMessage
/// documentation for additional details on |params| contents.
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2020-06-21 21:27:55 +02:00
property OnDevToolsEvent : TOnDevToolsEventEvent read FOnDevToolsEvent write FOnDevToolsEvent;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called on receipt of a DevTools protocol event.
/// |browser| is the originating browser instance. |function| is the
/// "function" value. |params| is the UTF8-encoded JSON "params" dictionary
/// value (which may be NULL). |params| is only valid for the scope of this
/// callback and should be copied if necessary. See the OnDevToolsMessage
/// documentation for additional details on |params| contents.
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2021-01-16 14:35:01 +01:00
property OnDevToolsRawEvent : TOnDevToolsEventRawEvent read FOnDevToolsRawEvent write FOnDevToolsRawEvent;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called when the DevTools agent has attached. |browser|
/// is the originating browser instance. This will generally occur in response
/// to the first message sent while the agent is detached.
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2020-06-21 21:27:55 +02:00
property OnDevToolsAgentAttached : TOnDevToolsAgentAttachedEvent read FOnDevToolsAgentAttached write FOnDevToolsAgentAttached;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Method that will be called when the DevTools agent has detached. |browser|
/// is the originating browser instance. Any function results that were
/// pending before the agent became detached will not be delivered, and any
/// active event subscriptions will be canceled.
/// </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_devtools_message_observer_capi.h">CEF source file: /include/capi/cef_devtools_message_observer_capi.h (cef_dev_tools_message_observer_t)</see></para>
/// </remarks>
2020-06-21 21:27:55 +02:00
property OnDevToolsAgentDetached : TOnDevToolsAgentDetachedEvent read FOnDevToolsAgentDetached write FOnDevToolsAgentDetached;
2020-08-04 17:52:09 +02:00
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called if the ICefRequestContext.LoadExtension request fails. |result|
/// will be the error code.
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionLoadFailed : TOnExtensionLoadFailedEvent read FOnExtensionLoadFailed write FOnExtensionLoadFailed;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called if the ICefRequestContext.LoadExtension request succeeds.
/// |extension| is the loaded extension.
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionLoaded : TOnExtensionLoadedEvent read FOnExtensionLoaded write FOnExtensionLoaded;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called after the ICefExtension.Unload request has completed.
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionUnloaded : TOnExtensionUnloadedEvent read FOnExtensionUnloaded write FOnExtensionUnloaded;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when an extension needs a browser to host a background script
/// specified via the "background" manifest key. The browser will have no
/// visible window and cannot be displayed. |extension| is the extension that
/// is loading the background script. |url| is an internally generated
/// reference to an HTML page that will be used to load the background script
/// via a "<script>" src attribute. To allow creation of the browser
/// optionally modify |client| and |settings| and return false (0). To cancel
/// creation of the browser (and consequently cancel load of the background
/// script) return true (1). Successful creation will be indicated by a call
/// to ICefLifeSpanHandler.OnAfterCreated, and
/// ICefBrowserHost.IsBackgroundHost will return true (1) for the
/// resulting browser. See https://developer.chrome.com/extensions/event_pages
/// for more information about extension background script usage.
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionBeforeBackgroundBrowser : TOnBeforeBackgroundBrowserEvent read FOnExtensionBeforeBackgroundBrowser write FOnExtensionBeforeBackgroundBrowser;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when an extension API (e.g. chrome.tabs.create) requests creation
/// of a new browser. |extension| and |browser| are the source of the API
/// call. |active_browser| may optionally be specified via the windowId
/// property or returned via the get_active_browser() callback and provides
/// the default |client| and |settings| values for the new browser. |index| is
/// the position value optionally specified via the index property. |url| is
/// the URL that will be loaded in the browser. |active| is true (1) if the
/// new browser should be active when opened. To allow creation of the
/// browser optionally modify |windowInfo|, |client| and |settings| and return
/// false (0). To cancel creation of the browser return true (1). Successful
/// creation will be indicated by a call to
/// ICefLifeSpanHandler.OnAfterCreated. Any modifications to |windowInfo|
/// will be ignored if |active_browser| is wrapped in a ICefBrowserView.
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionBeforeBrowser : TOnBeforeBrowserEvent read FOnExtensionBeforeBrowser write FOnExtensionBeforeBrowser;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when no tabId is specified to an extension API call that accepts a
/// tabId parameter (e.g. chrome.tabs.*). |extension| and |browser| are the
/// source of the API call. Return the browser that will be acted on by the
/// API call or return NULL to act on |browser|. The returned browser must
/// share the same ICefRequestContext as |browser|. Incognito browsers
/// should not be considered unless the source extension has incognito access
/// enabled, in which case |include_incognito| will be true (1).
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionGetActiveBrowser : TOnGetActiveBrowserEvent read FOnExtensionGetActiveBrowser write FOnExtensionGetActiveBrowser;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the tabId associated with |target_browser| is specified to an
/// extension API call that accepts a tabId parameter (e.g. chrome.tabs.*).
/// |extension| and |browser| are the source of the API call. Return true (1)
/// to allow access of false (0) to deny access. Access to incognito browsers
/// should not be allowed unless the source extension has incognito access
/// enabled, in which case |include_incognito| will be true (1).
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionCanAccessBrowser : TOnCanAccessBrowserEvent read FOnExtensionCanAccessBrowser write FOnExtensionCanAccessBrowser;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to retrieve an extension resource that would normally be loaded
/// from disk (e.g. if a file parameter is specified to
/// chrome.tabs.executeScript). |extension| and |browser| are the source of
/// the resource request. |file| is the requested relative file path. To
/// handle the resource request return true (1) and execute |callback| either
/// synchronously or asynchronously. For the default behavior which reads the
/// resource from the extension directory on disk return false (0).
/// Localization substitutions will not be applied to resources handled via
/// this function.
/// </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_extension_handler_capi.h">CEF source file: /include/capi/cef_extension_handler_capi.h (cef_extension_handler_t)</see></para>
/// </remarks>
2020-08-04 17:52:09 +02:00
property OnExtensionGetExtensionResource : TOnGetExtensionResourceEvent read FOnExtensionGetExtensionResource write FOnExtensionGetExtensionResource;
2021-04-18 19:36:20 +02:00
{$IFDEF LINUX}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when printing has started for the specified |browser|. This
/// function will be called before the other OnPrint*() functions and
/// irrespective of how printing was initiated (e.g.
/// ICefBrowserHost.print(), JavaScript window.print() or PDF extension
/// print button).
/// </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_print_handler_capi.h">CEF source file: /include/capi/cef_print_handler_capi.h (cef_print_handler_t)</see></para>
/// </remarks>
2021-04-18 19:36:20 +02:00
property OnPrintStart : TOnPrintStartEvent read FOnPrintStart write FOnPrintStart;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Synchronize |settings| with client state. If |get_defaults| is true (1)
/// then populate |settings| with the default print settings. Do not keep a
/// reference to |settings| outside of this callback.
/// </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_print_handler_capi.h">CEF source file: /include/capi/cef_print_handler_capi.h (cef_print_handler_t)</see></para>
/// </remarks>
2021-04-18 19:36:20 +02:00
property OnPrintSettings : TOnPrintSettingsEvent read FOnPrintSettings write FOnPrintSettings;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Show the print dialog. Execute |callback| once the dialog is dismissed.
/// Return true (1) if the dialog will be displayed or false (0) to cancel the
/// printing immediately.
/// </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_print_handler_capi.h">CEF source file: /include/capi/cef_print_handler_capi.h (cef_print_handler_t)</see></para>
/// </remarks>
2021-04-18 19:36:20 +02:00
property OnPrintDialog : TOnPrintDialogEvent read FOnPrintDialog write FOnPrintDialog;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Send the print job to the printer. Execute |callback| once the job is
/// completed. Return true (1) if the job will proceed or false (0) to cancel
/// the job immediately.
/// </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_print_handler_capi.h">CEF source file: /include/capi/cef_print_handler_capi.h (cef_print_handler_t)</see></para>
/// </remarks>
2021-04-18 19:36:20 +02:00
property OnPrintJob : TOnPrintJobEvent read FOnPrintJob write FOnPrintJob;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Reset client state related to printing.
/// </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_print_handler_capi.h">CEF source file: /include/capi/cef_print_handler_capi.h (cef_print_handler_t)</see></para>
/// </remarks>
2021-04-18 19:36:20 +02:00
property OnPrintReset : TOnPrintResetEvent read FOnPrintReset write FOnPrintReset;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Return the PDF paper size in device units. Used in combination with
/// ICefBrowserHost.PrintToPdf().
/// </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_print_handler_capi.h">CEF source file: /include/capi/cef_print_handler_capi.h (cef_print_handler_t)</see></para>
/// </remarks>
2021-04-18 19:36:20 +02:00
property OnGetPDFPaperSize : TOnGetPDFPaperSizeEvent read FOnGetPDFPaperSize write FOnGetPDFPaperSize;
{$ENDIF}
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a new frame is created. This will be the first notification
/// that references |frame|. Any commands that require transport to the
/// associated renderer process (LoadRequest, SendProcessMessage, GetSource,
/// etc.) will be queued until OnFrameAttached is called for |frame|.
/// </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_frame_handler_capi.h">CEF source file: /include/capi/cef_frame_handler_capi.h (cef_frame_handler_t)</see></para>
/// </remarks>
2021-07-29 16:20:34 +02:00
property OnFrameCreated : TOnFrameCreated read FOnFrameCreated write FOnFrameCreated;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a frame can begin routing commands to/from the associated
/// renderer process. |reattached| will be true (1) if the frame was re-
/// attached after exiting the BackForwardCache. Any commands that were queued
/// have now been dispatched.
/// </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_frame_handler_capi.h">CEF source file: /include/capi/cef_frame_handler_capi.h (cef_frame_handler_t)</see></para>
/// </remarks>
2021-07-29 16:20:34 +02:00
property OnFrameAttached : TOnFrameAttached read FOnFrameAttached write FOnFrameAttached;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a frame loses its connection to the renderer process and will
/// be destroyed. Any pending or future commands will be discarded and
/// ICefFrame.IsValid() will now return false (0) for |frame|. If called
/// after ICefLifeSpanHandler.OnBeforeClose() during browser
/// destruction then ICefBrowser.IsValid() will return false (0) for
/// |browser|.
/// </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_frame_handler_capi.h">CEF source file: /include/capi/cef_frame_handler_capi.h (cef_frame_handler_t)</see></para>
/// </remarks>
2021-07-29 16:20:34 +02:00
property OnFrameDetached : TOnFrameDetached read FOnFrameDetached write FOnFrameDetached;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when the main frame changes due to (a) initial browser creation,
/// (b) final browser destruction, (c) cross-origin navigation or (d) re-
/// navigation after renderer process termination (due to crashes, etc).
/// |old_frame| will be NULL and |new_frame| will be non-NULL when a main
/// frame is assigned to |browser| for the first time. |old_frame| will be
/// non-NULL and |new_frame| will be NULL and when a main frame is removed
/// from |browser| for the last time. Both |old_frame| and |new_frame| will be
/// non-NULL for cross-origin navigations or re-navigation after renderer
/// process termination. This function will be called after on_frame_created()
/// for |new_frame| and/or after OnFrameDetached() for |old_frame|. If
/// called after ICefLifeSpanHandler.OnBeforeClose() during browser
/// destruction then ICefBrowser.IsValid() will return false (0) for
/// |browser|.
/// </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_frame_handler_capi.h">CEF source file: /include/capi/cef_frame_handler_capi.h (cef_frame_handler_t)</see></para>
/// </remarks>
2021-07-29 16:20:34 +02:00
property OnMainFrameChanged : TOnMainFrameChanged read FOnMainFrameChanged write FOnMainFrameChanged;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to execute a Chrome command triggered via menu selection or
/// keyboard shortcut. Values for |command_id| can be found in the
/// cef_command_ids.h file. |disposition| provides information about the
/// intended command target. Return true (1) if the command was handled or
/// false (0) for the default implementation. For context menu commands this
/// will be called after ICefContextMenuHandler.OnContextMenuCommand.
/// </summary>
/// <remarks>
/// <para>Only used with the Chrome runtime.</para>
/// <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_command_handler_capi.h">CEF source file: /include/capi/cef_command_handler_capi.h (cef_command_handler_t)</see></para>
/// </remarks>
2023-04-08 19:00:33 +02:00
property OnChromeCommand : TOnChromeCommandEvent read FOnChromeCommand write FOnChromeCommand;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to check if a Chrome app menu item should be visible. Values for
/// |command_id| can be found in the cef_command_ids.h file. Only called for
/// menu items that would be visible by default.
/// </summary>
/// <remarks>
/// <para>Only used with the Chrome runtime.</para>
/// <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_command_handler_capi.h">CEF source file: /include/capi/cef_command_handler_capi.h (cef_command_handler_t)</see></para>
/// </remarks>
2023-04-08 19:00:33 +02:00
property OnIsChromeAppMenuItemVisible : TOnIsChromeAppMenuItemVisibleEvent read FOnIsChromeAppMenuItemVisible write FOnIsChromeAppMenuItemVisible;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called to check if a Chrome app menu item should be enabled. Values for
/// |command_id| can be found in the cef_command_ids.h file. Only called for
/// menu items that would be enabled by default.
/// </summary>
/// <remarks>
/// <para>Only used with the Chrome runtime.</para>
/// <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_command_handler_capi.h">CEF source file: /include/capi/cef_command_handler_capi.h (cef_command_handler_t)</see></para>
/// </remarks>
2023-04-08 19:00:33 +02:00
property OnIsChromeAppMenuItemEnabled : TOnIsChromeAppMenuItemEnabledEvent read FOnIsChromeAppMenuItemEnabled write FOnIsChromeAppMenuItemEnabled;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called during browser creation to check if a Chrome page action icon
/// should be visible. Only called for icons that would be visible by default.
/// </summary>
/// <remarks>
/// <para>Only used with the Chrome runtime.</para>
/// <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_command_handler_capi.h">CEF source file: /include/capi/cef_command_handler_capi.h (cef_command_handler_t)</see></para>
/// </remarks>
2023-04-08 19:00:33 +02:00
property OnIsChromePageActionIconVisible : TOnIsChromePageActionIconVisibleEvent read FOnIsChromePageActionIconVisible write FOnIsChromePageActionIconVisible;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called during browser creation to check if a Chrome toolbar button should
/// be visible. Only called for buttons that would be visible by default.
/// </summary>
/// <remarks>
/// <para>Only used with the Chrome runtime.</para>
/// <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_command_handler_capi.h">CEF source file: /include/capi/cef_command_handler_capi.h (cef_command_handler_t)</see></para>
/// </remarks>
2023-04-08 19:00:33 +02:00
property OnIsChromeToolbarButtonVisible : TOnIsChromeToolbarButtonVisibleEvent read FOnIsChromeToolbarButtonVisible write FOnIsChromeToolbarButtonVisible;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a page requests permission to access media.
/// |requesting_origin| is the URL origin requesting permission.
/// |requested_permissions| is a combination of values from
/// TCefMediaAccessPermissionTypes that represent the requested
/// permissions. Return true (1) and call ICefMediaAccessCallback
/// functions either in this function or at a later time to continue or cancel
/// the request. Return false (0) to proceed with default handling. With the
/// Chrome runtime, default handling will display the permission request UI.
/// With the Alloy runtime, default handling will deny the request. This
/// function will not be called if the "--enable-media-stream" command-line
/// switch is used to grant all permissions.
/// </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_permission_handler_capi.h">CEF source file: /include/capi/cef_permission_handler_capi.h (cef_permission_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnRequestMediaAccessPermission : TOnRequestMediaAccessPermissionEvent read FOnRequestMediaAccessPermission write FOnRequestMediaAccessPermission;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a page should show a permission prompt. |prompt_id| uniquely
/// identifies the prompt. |requesting_origin| is the URL origin requesting
/// permission. |requested_permissions| is a combination of values from
/// TCefPermissionRequestTypes that represent the requested permissions.
/// Return true (1) and call ICefPermissionPromptCallback.Continue either
/// in this function or at a later time to continue or cancel the request.
/// Return false (0) to proceed with default handling. With the Chrome
/// runtime, default handling will display the permission prompt UI. With the
/// Alloy runtime, default handling is CEF_PERMISSION_RESULT_IGNORE.
/// </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_permission_handler_capi.h">CEF source file: /include/capi/cef_permission_handler_capi.h (cef_permission_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnShowPermissionPrompt : TOnShowPermissionPromptEvent read FOnShowPermissionPrompt write FOnShowPermissionPrompt;
2023-08-07 20:21:42 +02:00
/// <summary>
/// Called when a permission prompt handled via OnShowPermissionPrompt is
/// dismissed. |prompt_id| will match the value that was passed to
/// OnShowPermissionPrompt. |result| will be the value passed to
/// ICefPermissionPromptCallback.Continue or CEF_PERMISSION_RESULT_IGNORE
/// if the dialog was dismissed for other reasons such as navigation, browser
/// closure, etc. This function will not be called if OnShowPermissionPrompt
/// returned false (0) for |prompt_id|.
/// </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_permission_handler_capi.h">CEF source file: /include/capi/cef_permission_handler_capi.h (cef_permission_handler_t)</see></para>
/// </remarks>
2022-08-06 12:00:28 +02:00
property OnDismissPermissionPrompt : TOnDismissPermissionPromptEvent read FOnDismissPermissionPrompt write FOnDismissPermissionPrompt;
2019-11-10 00:24:26 +01:00
end ;
2020-05-07 11:46:48 +02:00
TBrowserInfo = class
protected
FBrowser : ICefBrowser;
FIsClosing : boolean ;
FID : integer ;
2021-07-29 16:20:34 +02:00
function GetIsValid : boolean ;
2020-05-07 11:46:48 +02:00
public
constructor Create( const aBrowser : ICefBrowser) ; reintroduce ;
destructor Destroy; override ;
property Browser : ICefBrowser read FBrowser;
property ID : integer read FID;
property IsClosing : boolean read FIsClosing write FIsClosing;
2021-07-29 16:20:34 +02:00
property IsValid : boolean read GetIsValid;
2020-05-07 11:46:48 +02:00
end ;
TBrowserInfoList = class( TList)
protected
procedure SetBrowserIsClosing( aID : integer ; aValue : boolean ) ;
function GetBrowserIsClosing( aID : integer ) : boolean ;
2021-07-29 16:20:34 +02:00
function GetBrowserIsValid( aID : integer ) : boolean ;
2020-05-07 11:46:48 +02:00
function GetBrowser( aID : integer ) : ICefBrowser;
function GetFirstBrowser : ICefBrowser;
function GetFirstID : integer ;
public
destructor Destroy; override ;
function AddBrowser( const aBrowser : ICefBrowser) : boolean ;
function RemoveBrowser( const aBrowser : ICefBrowser) : boolean ;
function SearchBrowser( aID : integer ) : integer ;
procedure FreeAndClearAllItems;
procedure CloseAllBrowsers;
2021-07-29 16:20:34 +02:00
property BrowserIsClosing[ aID : integer ] : boolean read GetBrowserIsClosing write SetBrowserIsClosing;
property BrowserIsValid[ aID : integer ] : boolean read GetBrowserIsValid;
2020-05-07 11:46:48 +02:00
property Browser[ aID : integer ] : ICefBrowser read GetBrowser;
property FirstBrowser : ICefBrowser read GetFirstBrowser;
property FirstID : integer read GetFirstID;
end ;
2019-11-10 00:24:26 +01:00
// *********************************************************
// ********************** ATTENTION ! **********************
// *********************************************************
// ** **
// ** MANY OF THE EVENTS IN CEF4DELPHI COMPONENTS LIKE **
// ** TCHROMIUM, TFMXCHROMIUM OR TCEFAPPLICATION ARE **
// ** EXECUTED IN A CEF THREAD BY DEFAULT. **
// ** **
// ** WINDOWS CONTROLS MUST BE CREATED AND DESTROYED IN **
// ** THE SAME THREAD TO AVOID ERRORS. **
// ** SOME OF THEM RECREATE THE HANDLERS IF THEY ARE **
// ** MODIFIED AND CAN CAUSE THE SAME ERRORS. **
// ** **
// ** DON'T CREATE, MODIFY OR DESTROY WINDOWS CONTROLS **
// ** INSIDE THE CEF4DELPHI EVENTS AND USE **
// ** SYNCHRONIZATION OBJECTS TO PROTECT VARIABLES AND **
// ** FIELDS IF THEY ARE ALSO USED IN THE MAIN THREAD. **
// ** **
// ** READ THIS FOR MORE INFORMATION : **
// ** https://www.briskbard.com/index.php?pageid=cef **
// ** **
// ** USE OUR FORUMS FOR MORE QUESTIONS : **
// ** https://www.briskbard.com/forum/ **
// ** **
// *********************************************************
// *********************************************************
implementation
uses
{$IFDEF DELPHI16_UP}
2022-06-25 16:41:34 +02:00
System. SysUtils, System. Math,
{$ELSE}
SysUtils, Math,
{$IFDEF FPC}
{$IFDEF LINUX} x, xatom,
{$IFDEF LCLGTK2} gdk2x, gtk2, {$ENDIF}
{$IFDEF LCLGTK3} LazGdk3, LazGtk3, LazGLib2, {$ENDIF}
{$ENDIF}
{$ENDIF}
2019-11-10 00:24:26 +01:00
{$ENDIF}
uCEFBrowser, uCEFValue, uCEFDictionaryValue, uCEFStringMultimap, uCEFFrame,
uCEFApplicationCore, uCEFProcessMessage, uCEFRequestContext,
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS} uCEFOLEDragAndDrop, {$ENDIF}
2020-04-19 22:47:20 +02:00
uCEFPDFPrintCallback, uCEFResolveCallback, uCEFDeleteCookiesCallback,
uCEFStringVisitor, uCEFListValue, uCEFNavigationEntryVisitor,
uCEFDownloadImageCallBack, uCEFCookieManager, uCEFRequestContextHandler,
uCEFCookieVisitor, uCEFSetCookieCallback, uCEFResourceRequestHandler,
2020-07-15 14:56:41 +02:00
uCEFMediaObserver, uCEFMediaRouteCreateCallback , uCEFDevToolsMessageObserver,
2020-08-04 17:52:09 +02:00
uCEFMediaSinkDeviceInfoCallback, uCEFJson, uCEFExtensionHandler;
2019-11-10 00:24:26 +01:00
constructor TChromiumCore. Create( AOwner: TComponent) ;
begin
2020-08-22 14:56:24 +02:00
FBrowsersCS : = nil ;
FBrowsers : = nil ;
FBrowserId : = 0 ;
FMultiBrowserMode : = False ;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
2020-08-22 14:56:24 +02:00
FCompHandle : = 0 ;
2019-11-10 00:24:26 +01:00
{$ENDIF}
2020-08-22 14:56:24 +02:00
FIsOSR : = False ;
2022-02-19 18:56:41 +01:00
FDefaultUrl : = ABOUTBLANK_URI;
2020-08-22 14:56:24 +02:00
FHandler : = nil ;
FReqContextHandler : = nil ;
FResourceRequestHandler : = nil ;
FMediaObserver : = nil ;
FMediaObserverReg : = nil ;
FDevToolsMsgObserver : = nil ;
FDevToolsMsgObserverReg : = nil ;
FExtensionHandler : = nil ;
FOptions : = nil ;
FFontOptions : = nil ;
FDefaultEncoding : = '' ;
FPDFPrintOptions : = nil ;
FUpdatePreferences : = False ;
FCustomHeaderName : = '' ;
FCustomHeaderValue : = '' ;
FPrefsFileName : = '' ;
FAddCustomHeader : = False ;
FDoNotTrack : = True ;
FSendReferrer : = True ;
FAllowOutdatedPlugins : = False ;
FAlwaysAuthorizePlugins : = False ;
2022-10-05 17:36:09 +02:00
FAlwaysOpenPDFExternally : = False ;
2020-08-22 14:56:24 +02:00
FSpellChecking : = True ;
FSpellCheckerDicts : = '' ;
FZoomStep : = ZOOM_STEP_DEF;
FZoomStepCS : = nil ;
FSafeSearch : = False ;
FYouTubeRestrict : = YOUTUBE_RESTRICT_OFF;
FPrintingEnabled : = True ;
FAcceptLanguageList : = '' ;
FAcceptCookies : = cpAllow;
FBlock3rdPartyCookies : = False ;
FOffline : = False ;
FQuicAllowed : = True ;
FJavascriptEnabled : = True ;
FLoadImagesAutomatically : = True ;
2023-08-10 18:08:50 +02:00
FBatterySaverModeState : = bsmsDefault;
FHighEfficiencyModeState : = kDefault;
2023-03-11 17:29:30 +01:00
FCanFocus : = False ;
FEnableFocusDelayMs : = CEF_DEFAULT_ENABLEFOCUSDELAY;
2021-02-06 17:38:44 +01:00
{$IFDEF LINUX}
FXDisplay : = nil ;
{$ENDIF}
2019-11-10 00:24:26 +01:00
2020-07-21 12:41:03 +02:00
if ( GlobalCEFApp < > nil ) then
FHyperlinkAuditing : = GlobalCEFApp. HyperlinkAuditing
else
FHyperlinkAuditing : = True ;
2020-06-22 16:17:38 +02:00
//
2020-09-30 12:43:48 +02:00
// Some focus issues in CEF seem to be fixed when you use WS_EX_NOACTIVATE in
2020-06-22 16:17:38 +02:00
// FDefaultWindowInfoExStyle to initialize the browser with that ExStyle but
// it may cause side effects. Read these links for more information :
// https://www.briskbard.com/forum/viewtopic.php?f=10&t=723
// https://bitbucket.org/chromiumembedded/cef/issues/1856/branch-2526-cef-activates-browser-window
//
// It's necessary to set this property before the CreateBrowser call.
//
FDefaultWindowInfoExStyle : = 0 ;
//FDefaultWindowInfoExStyle := WS_EX_NOACTIVATE;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
FOldBrowserCompWndPrc : = nil ;
FOldWidgetCompWndPrc : = nil ;
FOldRenderCompWndPrc : = nil ;
FBrowserCompStub : = nil ;
FWidgetCompStub : = nil ;
FRenderCompStub : = nil ;
FBrowserCompHWND : = 0 ;
FWidgetCompHWND : = 0 ;
FRenderCompHWND : = 0 ;
2020-09-20 12:07:24 +02:00
{$ENDIF MSWINDOWS}
2019-11-10 00:24:26 +01:00
FDragOperations : = DRAG_OPERATION_NONE;
{$IFDEF MSWINDOWS}
FDragDropManager : = nil ;
FDropTargetWnd : = 0 ;
{$ENDIF MSWINDOWS}
FDragAndDropInitialized : = False ;
FWebRTCIPHandlingPolicy : = hpDefault;
FWebRTCMultipleRoutes : = STATE_DEFAULT;
FWebRTCNonProxiedUDP : = STATE_DEFAULT;
FProxyType : = CEF_PROXYTYPE_SYSTEM;
FProxyScheme : = psHTTP;
FProxyServer : = '' ;
FProxyPort : = 8 0 ;
FProxyUsername : = '' ;
FProxyPassword : = '' ;
FProxyScriptURL : = '' ;
FProxyByPassList : = '' ;
FMaxConnectionsPerProxy : = CEF_MAX_CONNECTIONS_PER_PROXY_DEFAULT_VALUE;
FillChar( FWindowInfo, SizeOf( TCefWindowInfo) , 0 ) ;
FillChar( FDevWindowInfo, SizeOf( TCefWindowInfo) , 0 ) ;
InitializeSettings( FBrowserSettings) ;
InitializeSettings( FDevBrowserSettings) ;
InitializeEvents;
inherited Create( AOwner) ;
end ;
destructor TChromiumCore. Destroy;
begin
try
try
2021-10-02 16:22:10 +02:00
DestroyAllHandlersAndObservers;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2020-09-20 12:07:24 +02:00
RestoreOldCompWndProc;
2019-11-10 00:24:26 +01:00
if ( FDragDropManager < > nil ) then FreeAndNil( FDragDropManager) ;
if ( FCompHandle < > 0 ) then
begin
DeallocateHWnd( FCompHandle) ;
FCompHandle : = 0 ;
end ;
{$ENDIF MSWINDOWS}
2020-05-07 11:46:48 +02:00
DestroyAllBrowsers;
2019-11-10 00:24:26 +01:00
if ( FFontOptions < > nil ) then FreeAndNil( FFontOptions) ;
if ( FOptions < > nil ) then FreeAndNil( FOptions) ;
if ( FPDFPrintOptions < > nil ) then FreeAndNil( FPDFPrintOptions) ;
2019-12-10 16:49:07 +01:00
if ( FZoomStepCS < > nil ) then FreeAndNil( FZoomStepCS) ;
2020-05-07 11:46:48 +02:00
if ( FBrowsersCS < > nil ) then FreeAndNil( FBrowsersCS) ;
2019-11-10 00:24:26 +01:00
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.Destroy' , e) then raise ;
end ;
finally
inherited Destroy;
end ;
end ;
2020-05-07 11:46:48 +02:00
procedure TChromiumCore. DestroyAllBrowsers;
begin
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
if ( FBrowsers < > nil ) then FreeAndNil( FBrowsers) ;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
{$IFNDEF FPC}
2019-11-10 18:23:39 +01:00
// Windows XP and newer (older Delphi version < XE don't have them and newer
// require a call to InitCommonControl what isn't necessary.
{ type
SUBCLASSPROC = function( hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM;
uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR) : LRESULT; stdcall ;
TSubClassProc = SUBCLASSPROC;
function SetWindowSubclass( hWnd: HWND; pfnSubclass: SUBCLASSPROC; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR) : BOOL; stdcall ;
external comctl32 name 'SetWindowSubclass' ;
//function GetWindowSubclass(hWnd: HWND; pfnSubclass: SUBCLASSPROC; uIdSubclass: UINT_PTR; var pdwRefData: DWORD_PTR): BOOL; stdcall;
// external comctl32 name 'GetWindowSubclass';
function RemoveWindowSubclass( hWnd: HWND; pfnSubclass: SUBCLASSPROC; uIdSubclass: UINT_PTR) : BOOL; stdcall ;
external comctl32 name 'RemoveWindowSubclass' ;
function DefSubclassProc( hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM) : LRESULT; stdcall ;
external comctl32 name 'DefSubclassProc' ;
// We stick with the original implementation because the WndProc stub is a lot
// faster than the WindowSubClass stub that uses the slow GetProp(hWnd). Which
// is extremly slow in Windows 10 1809 and newer.
}
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. CreateStub( const aMethod : TWndMethod; var aStub : Pointer ) ;
begin
if ( aStub = nil ) then aStub : = MakeObjectInstance( aMethod) ;
end ;
procedure TChromiumCore. FreeAndNilStub( var aStub : pointer ) ;
begin
if ( aStub < > nil ) then
begin
FreeObjectInstance( aStub) ;
aStub : = nil ;
end ;
end ;
2019-11-10 18:23:39 +01:00
function TChromiumCore. InstallCompWndProc( aWnd: THandle; aStub: Pointer ) : TFNWndProc;
begin
Result : = TFNWndProc( SetWindowLongPtr( aWnd, GWLP_WNDPROC, NativeInt( aStub) ) ) ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. RestoreCompWndProc( var aOldWnd: THandle; aNewWnd: THandle; var aProc: TFNWndProc) ;
begin
if ( aOldWnd < > 0 ) and ( aOldWnd < > aNewWnd) and ( aProc < > nil ) then
begin
SetWindowLongPtr( aOldWnd, GWLP_WNDPROC, NativeInt( aProc) ) ;
aProc : = nil ;
aOldWnd : = 0 ;
end ;
end ;
2019-11-10 18:23:39 +01:00
procedure TChromiumCore. CallOldCompWndProc( aProc: TFNWndProc; aWnd: THandle; var aMessage: TMessage) ;
begin
if ( aProc < > nil ) and ( aWnd < > 0 ) then
aMessage. Result : = CallWindowProc( aProc, aWnd, aMessage. Msg, aMessage. wParam, aMessage. lParam) ;
end ;
{$ELSE}
procedure TChromiumCore. CreateStub( const aMethod : TWndMethod; var aStub : Pointer ) ;
begin
if ( aStub = nil ) then
begin
GetMem( aStub, SizeOf( TWndMethod) ) ;
TWndMethod( aStub^ ) : = aMethod;
end ;
end ;
procedure TChromiumCore. FreeAndNilStub( var aStub : pointer ) ;
begin
if ( aStub < > nil ) then
begin
FreeMem( aStub) ;
aStub : = nil ;
end ;
end ;
function CompSubClassProc( hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM;
uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR) : LRESULT; stdcall ;
var
m: TWndMethod;
Msg: TMessage;
begin
Msg. msg : = uMsg;
Msg. wParam : = wparam;
Msg. lParam : = lParam;
Msg. Result : = 0 ;
m : = TWndMethod( Pointer( dwRefData) ^ ) ;
m( Msg) ;
Result : = Msg. Result ;
end ;
function TChromiumCore. InstallCompWndProc( aWnd: THandle; aStub: Pointer ) : TFNWndProc;
begin
Result : = nil ;
if ( aWnd < > 0 ) and ( aStub < > nil ) then
begin
SetWindowSubclass( aWnd, @ CompSubClassProc, 1 , NativeInt( aStub) ) ;
Result : = TFNWndProc( 1 ) ; // IdSubClass
end ;
end ;
procedure TChromiumCore. RestoreCompWndProc( var aOldWnd: THandle; aNewWnd: THandle; var aProc: TFNWndProc) ;
begin
if ( aOldWnd < > 0 ) and ( aOldWnd < > aNewWnd) and ( aProc < > nil ) then
begin
RemoveWindowSubclass( aOldWnd, @ CompSubClassProc, 1 ) ;
aProc : = nil ;
aOldWnd : = 0 ;
end ;
end ;
procedure TChromiumCore. CallOldCompWndProc( aProc: TFNWndProc; aWnd: THandle; var aMessage: TMessage) ;
begin
if ( aProc < > nil ) and ( aWnd < > 0 ) then
aMessage. Result : = DefSubclassProc( aWnd, aMessage. Msg, aMessage. wParam, aMessage. lParam) ;
end ;
2019-11-10 00:24:26 +01:00
{$ENDIF}
{$ENDIF}
procedure TChromiumCore. DestroyClientHandler;
begin
try
if ( FHandler < > nil ) then
begin
FHandler. RemoveReferences;
FHandler : = nil ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.DestroyClientHandler' , e) then raise ;
end ;
end ;
procedure TChromiumCore. DestroyReqContextHandler;
begin
try
if ( FReqContextHandler < > nil ) then
begin
FReqContextHandler. RemoveReferences;
FReqContextHandler : = nil ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.DestroyReqContextHandler' , e) then raise ;
end ;
end ;
2020-07-14 15:50:23 +02:00
procedure TChromiumCore. DestroyResourceRequestHandler;
2019-11-10 00:24:26 +01:00
begin
2020-07-14 15:50:23 +02:00
try
if ( FResourceRequestHandler < > nil ) then
begin
FResourceRequestHandler. RemoveReferences;
FResourceRequestHandler : = nil ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.DestroyResourceRequestHandler' , e) then raise ;
end ;
2019-11-10 00:24:26 +01:00
end ;
2020-04-19 22:47:20 +02:00
procedure TChromiumCore. DestroyMediaObserver;
begin
2020-06-21 21:27:55 +02:00
FMediaObserverReg : = nil ;
2020-07-13 15:28:04 +02:00
FMediaObserver : = nil ;
2020-04-19 22:47:20 +02:00
end ;
2020-07-14 15:50:23 +02:00
procedure TChromiumCore. DestroyDevToolsMsgObserver;
begin
FDevToolsMsgObserverReg : = nil ;
FDevToolsMsgObserver : = nil ;
end ;
2020-08-04 17:52:09 +02:00
procedure TChromiumCore. DestroyExtensionHandler;
begin
try
if ( FExtensionHandler < > nil ) then
begin
FExtensionHandler. RemoveReferences;
FExtensionHandler : = nil ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.DestroyExtensionHandler' , e) then raise ;
end ;
end ;
2020-07-14 15:50:23 +02:00
procedure TChromiumCore. DestroyAllHandlersAndObservers;
begin
2020-08-04 17:52:09 +02:00
DestroyExtensionHandler;
2020-07-14 15:50:23 +02:00
DestroyDevToolsMsgObserver;
DestroyMediaObserver;
DestroyResourceRequestHandler;
DestroyReqContextHandler;
DestroyClientHandler;
end ;
2020-04-19 22:47:20 +02:00
procedure TChromiumCore. CreateMediaObserver;
begin
if MustCreateMediaObserver and
( FMediaObserver = nil ) then
FMediaObserver : = TCustomMediaObserver. Create( self) ;
end ;
2020-06-21 21:27:55 +02:00
procedure TChromiumCore. CreateDevToolsMsgObserver;
begin
if MustCreateDevToolsMessageObserver and
( FDevToolsMsgObserver = nil ) then
FDevToolsMsgObserver : = TCustomDevToolsMessageObserver. Create( self) ;
end ;
2020-08-04 17:52:09 +02:00
procedure TChromiumCore. CreateExtensionHandler;
begin
if MustCreateExtensionHandler and
( FExtensionHandler = nil ) then
FExtensionHandler : = TCustomExtensionHandler. Create( self) ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. CreateResourceRequestHandler;
begin
if MustCreateResourceRequestHandler and
( FResourceRequestHandler = nil ) then
FResourceRequestHandler : = TCustomResourceRequestHandler. Create( self) ;
end ;
2021-09-28 16:39:21 +02:00
procedure TChromiumCore. CreateOptionsClasses;
begin
if ( Owner = nil ) or not( csDesigning in ComponentState) then
begin
FOptions : = TChromiumOptions. Create;
FFontOptions : = TChromiumFontOptions. Create;
FPDFPrintOptions : = TPDFPrintOptions. Create;
end ;
end ;
procedure TChromiumCore. CreateSyncObjects;
begin
if ( Owner = nil ) or not( csDesigning in ComponentState) then
begin
FZoomStepCS : = TCriticalSection. Create;
FBrowsersCS : = TCriticalSection. Create;
end ;
end ;
procedure TChromiumCore. CreateRequestContextHandler;
begin
if ( Owner = nil ) or not( csDesigning in ComponentState) then
FReqContextHandler : = TCustomRequestContextHandler. Create( self) ;
end ;
{$IFDEF MSWINDOWS}
procedure TChromiumCore. CreateWindowWithWndProc;
begin
if ( Owner = nil ) or not( csDesigning in ComponentState) then
FCompHandle : = AllocateHWnd( {$IFDEF FPC} @ {$ENDIF} WndProc) ;
end ;
{$ENDIF}
procedure TChromiumCore. CreateBrowserInfoList;
begin
if ( Owner = nil ) or not( csDesigning in ComponentState) then
FBrowsers : = TBrowserInfoList. Create;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. AfterConstruction;
begin
inherited AfterConstruction;
2021-09-28 16:39:21 +02:00
CreateOptionsClasses;
CreateSyncObjects;
{$IFDEF MSWINDOWS}
CreateWindowWithWndProc;
{$ENDIF}
CreateBrowserInfoList;
CreateRequestContextHandler;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. CreateClientHandler( aIsOSR : boolean ) : boolean ;
begin
Result : = False ;
try
if ( FHandler = nil ) then
begin
FIsOSR : = aIsOsr;
FHandler : = TCustomClientHandler. Create( Self) ;
Result : = True ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.CreateClientHandler' , e) then raise ;
end ;
end ;
function TChromiumCore. CreateClientHandler( var aClient : ICefClient; aIsOSR : boolean ) : boolean ;
begin
if CreateClientHandler( aIsOSR) then
begin
2019-11-28 17:28:35 +01:00
CreateResourceRequestHandler;
2020-04-19 22:47:20 +02:00
CreateMediaObserver;
2020-06-21 21:27:55 +02:00
CreateDevToolsMsgObserver;
2020-08-04 17:52:09 +02:00
CreateExtensionHandler;
2019-11-28 17:28:35 +01:00
2019-11-10 00:24:26 +01:00
aClient : = FHandler;
Result : = True ;
end
else
Result : = False ;
end ;
procedure TChromiumCore. InitializeEvents;
begin
// ICefClient
FOnProcessMessageReceived : = nil ;
// ICefLoadHandler
FOnLoadStart : = nil ;
FOnLoadEnd : = nil ;
FOnLoadError : = nil ;
FOnLoadingStateChange : = nil ;
// ICefFocusHandler
FOnTakeFocus : = nil ;
FOnSetFocus : = nil ;
FOnGotFocus : = nil ;
// ICefContextMenuHandler
FOnBeforeContextMenu : = nil ;
FOnRunContextMenu : = nil ;
FOnContextMenuCommand : = nil ;
FOnContextMenuDismissed : = nil ;
2022-08-06 12:00:28 +02:00
FOnRunQuickMenu : = nil ;
FOnQuickMenuCommand : = nil ;
FOnQuickMenuDismissed : = nil ;
2019-11-10 00:24:26 +01:00
// ICefKeyboardHandler
FOnPreKeyEvent : = nil ;
FOnKeyEvent : = nil ;
// ICefDisplayHandler
FOnAddressChange : = nil ;
FOnTitleChange : = nil ;
FOnFavIconUrlChange : = nil ;
FOnFullScreenModeChange : = nil ;
FOnTooltip : = nil ;
FOnStatusMessage : = nil ;
FOnConsoleMessage : = nil ;
FOnAutoResize : = nil ;
FOnLoadingProgressChange : = nil ;
2020-11-19 18:55:17 +01:00
FOnCursorChange : = nil ;
2022-08-06 12:00:28 +02:00
FOnMediaAccessChange : = nil ;
2019-11-10 00:24:26 +01:00
// ICefDownloadHandler
2022-05-03 12:43:16 +02:00
FOnCanDownload : = nil ;
2019-11-10 00:24:26 +01:00
FOnBeforeDownload : = nil ;
FOnDownloadUpdated : = nil ;
// ICefJsDialogHandler
FOnJsdialog : = nil ;
FOnBeforeUnloadDialog : = nil ;
FOnResetDialogState : = nil ;
FOnDialogClosed : = nil ;
// ICefLifeSpanHandler
FOnBeforePopup : = nil ;
FOnAfterCreated : = nil ;
FOnBeforeClose : = nil ;
FOnClose : = nil ;
// ICefRequestHandler
FOnBeforeBrowse : = nil ;
FOnOpenUrlFromTab : = nil ;
FOnGetAuthCredentials : = nil ;
FOnCertificateError : = nil ;
FOnSelectClientCertificate : = nil ;
FOnRenderViewReady : = nil ;
FOnRenderProcessTerminated : = nil ;
FOnGetResourceRequestHandler_ReqHdlr : = nil ;
2020-06-21 21:27:55 +02:00
FOnDocumentAvailableInMainFrame : = nil ;
2019-11-10 00:24:26 +01:00
// ICefResourceRequestHandler
FOnBeforeResourceLoad : = nil ;
FOnGetResourceHandler : = nil ;
FOnResourceRedirect : = nil ;
FOnResourceResponse : = nil ;
FOnGetResourceResponseFilter : = nil ;
FOnResourceLoadComplete : = nil ;
FOnProtocolExecution : = nil ;
// ICefCookieAccessFilter
FOnCanSendCookie : = nil ;
FOnCanSaveCookie : = nil ;
// ICefDialogHandler
FOnFileDialog : = nil ;
// ICefRenderHandler
FOnGetAccessibilityHandler : = nil ;
FOnGetRootScreenRect : = nil ;
FOnGetViewRect : = nil ;
FOnGetScreenPoint : = nil ;
FOnGetScreenInfo : = nil ;
FOnPopupShow : = nil ;
FOnPopupSize : = nil ;
FOnPaint : = nil ;
FOnAcceleratedPaint : = nil ;
2022-08-06 12:00:28 +02:00
FOnGetTouchHandleSize : = nil ;
FOnTouchHandleStateChanged : = nil ;
2019-11-10 00:24:26 +01:00
FOnStartDragging : = nil ;
FOnUpdateDragCursor : = nil ;
FOnScrollOffsetChanged : = nil ;
FOnIMECompositionRangeChanged : = nil ;
FOnTextSelectionChanged : = nil ;
FOnVirtualKeyboardRequested : = nil ;
// ICefDragHandler
FOnDragEnter : = nil ;
FOnDraggableRegionsChanged : = nil ;
// ICefFindHandler
FOnFindResult : = nil ;
// ICefRequestContextHandler
FOnRequestContextInitialized : = nil ;
FOnGetResourceRequestHandler_ReqCtxHdlr : = nil ;
2020-04-19 22:47:20 +02:00
// ICefMediaObserver
FOnSinks : = nil ;
FOnRoutes : = nil ;
FOnRouteStateChanged : = nil ;
FOnRouteMessageReceived : = nil ;
2020-05-23 15:00:44 +02:00
// ICefAudioHandler
FOnGetAudioParameters : = nil ;
FOnAudioStreamStarted : = nil ;
FOnAudioStreamPacket : = nil ;
FOnAudioStreamStopped : = nil ;
FOnAudioStreamError : = nil ;
2020-06-21 21:27:55 +02:00
// ICefDevToolsMessageObserver
FOnDevToolsMessage : = nil ;
2021-01-16 14:35:01 +01:00
FOnDevToolsRawMessage : = nil ;
2020-06-21 21:27:55 +02:00
FOnDevToolsMethodResult : = nil ;
2021-01-16 14:35:01 +01:00
FOnDevToolsMethodRawResult : = nil ;
2020-06-21 21:27:55 +02:00
FOnDevToolsEvent : = nil ;
2021-01-16 14:35:01 +01:00
FOnDevToolsRawEvent : = nil ;
2020-06-21 21:27:55 +02:00
FOnDevToolsAgentAttached : = nil ;
FOnDevToolsAgentDetached : = nil ;
2020-08-04 17:52:09 +02:00
// ICefExtensionHandler
FOnExtensionLoadFailed : = nil ;
FOnExtensionLoaded : = nil ;
FOnExtensionUnloaded : = nil ;
FOnExtensionBeforeBackgroundBrowser : = nil ;
FOnExtensionBeforeBrowser : = nil ;
FOnExtensionGetActiveBrowser : = nil ;
FOnExtensionCanAccessBrowser : = nil ;
FOnExtensionGetExtensionResource : = nil ;
2021-04-18 19:36:20 +02:00
// ICefPrintHandler
FOnPrintStart : = nil ;
FOnPrintSettings : = nil ;
FOnPrintDialog : = nil ;
FOnPrintJob : = nil ;
FOnPrintReset : = nil ;
FOnGetPDFPaperSize : = nil ;
2021-07-29 16:20:34 +02:00
// ICefFrameHandler
FOnFrameCreated : = nil ;
FOnFrameAttached : = nil ;
FOnFrameDetached : = nil ;
FOnMainFrameChanged : = nil ;
2022-05-03 12:43:16 +02:00
// ICefCommandHandler
FOnChromeCommand : = nil ;
2023-04-08 19:00:33 +02:00
FOnIsChromeAppMenuItemVisible : = nil ;
FOnIsChromeAppMenuItemEnabled : = nil ;
FOnIsChromePageActionIconVisible : = nil ;
FOnIsChromeToolbarButtonVisible : = nil ;
2022-05-03 12:43:16 +02:00
2022-08-06 12:00:28 +02:00
// ICefPermissionHandler
FOnRequestMediaAccessPermission : = nil ;
FOnShowPermissionPrompt : = nil ;
FOnDismissPermissionPrompt : = nil ;
2019-11-10 00:24:26 +01:00
// Custom
FOnTextResultAvailable : = nil ;
FOnPdfPrintFinished : = nil ;
FOnPrefsAvailable : = nil ;
2021-10-22 19:19:57 +02:00
FOnPrefsUpdated : = nil ;
2019-11-10 00:24:26 +01:00
FOnCookiesDeleted : = nil ;
FOnResolvedHostAvailable : = nil ;
FOnNavigationVisitorResultAvailable : = nil ;
FOnDownloadImageFinished : = nil ;
FOnCookiesFlushed : = nil ;
FOnCertificateExceptionsCleared : = nil ;
FOnHttpAuthCredentialsCleared : = nil ;
FOnAllConnectionsClosed : = nil ;
FOnExecuteTaskOnCefThread : = nil ;
FOnCookiesVisited : = nil ;
FOnCookieVisitorDestroyed : = nil ;
FOnCookieSet : = nil ;
2019-12-10 16:49:07 +01:00
FOnZoomPctAvailable : = nil ;
2020-04-19 22:47:20 +02:00
FOnMediaRouteCreateFinished : = nil ;
2020-07-15 14:56:41 +02:00
FOnMediaSinkDeviceInfo : = nil ;
2023-03-11 17:29:30 +01:00
FOnCanFocus : = nil ;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
FOnBrowserCompMsg : = nil ;
FOnWidgetCompMsg : = nil ;
FOnRenderCompMsg : = nil ;
{$ENDIF}
end ;
2019-11-20 10:45:46 +01:00
function TChromiumCore. CreateBrowser( aParentHandle : TCefWindowHandle;
aParentRect : TRect;
const aWindowName : ustring;
const aContext : ICefRequestContext;
2021-04-18 19:36:20 +02:00
const aExtraInfo : ICefDictionaryValue;
aForceAsPopup : boolean ) : boolean ;
2019-11-10 00:24:26 +01:00
var
2021-04-18 19:36:20 +02:00
TempNewContext, TempOldContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
TempNewContext : = nil ;
try
try
// GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser
// even if you use a custom request context.
// If you create a browser in the initialization of your app, make sure you call this
// function when GlobalCEFApp.GlobalContextInitialized is TRUE.
// Use the GlobalCEFApp.OnContextInitialized event to know when
// GlobalCEFApp.GlobalContextInitialized is set to TRUE.
if not( csDesigning in ComponentState) and
2020-05-07 11:46:48 +02:00
( BrowserId = 0 ) and
2019-11-10 00:24:26 +01:00
( GlobalCEFApp < > nil ) and
2020-06-13 17:24:22 +02:00
GlobalCEFApp. GlobalContextInitialized and
2020-04-03 17:57:52 +02:00
CreateClientHandler( not( ValidCefWindowHandle( aParentHandle) ) ) then
2019-11-10 00:24:26 +01:00
begin
GetSettings( FBrowserSettings) ;
2021-04-18 19:36:20 +02:00
if aForceAsPopup then
WindowInfoAsPopUp( FWindowInfo, aParentHandle, aWindowName)
else
InitializeWindowInfo( aParentHandle, aParentRect, aWindowName) ;
2019-11-10 00:24:26 +01:00
CreateResourceRequestHandler;
2020-04-19 22:47:20 +02:00
CreateMediaObserver;
2020-06-21 21:27:55 +02:00
CreateDevToolsMsgObserver;
2020-08-04 17:52:09 +02:00
CreateExtensionHandler;
2019-11-10 00:24:26 +01:00
if ( aContext = nil ) then
2021-04-18 19:36:20 +02:00
TempOldContext : = TCefRequestContextRef. Global( )
2019-11-10 00:24:26 +01:00
else
2021-04-18 19:36:20 +02:00
TempOldContext : = aContext;
TempNewContext : = TCefRequestContextRef. Shared( TempOldContext, FReqContextHandler) ;
2019-11-10 00:24:26 +01:00
if GlobalCEFApp. MultiThreadedMessageLoop then
Result : = CreateBrowserHost( @ FWindowInfo, FDefaultUrl, @ FBrowserSettings, aExtraInfo, TempNewContext)
else
Result : = CreateBrowserHostSync( @ FWindowInfo, FDefaultUrl, @ FBrowserSettings, aExtraInfo, TempNewContext) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.CreateBrowser' , e) then raise ;
end ;
finally
2021-04-18 19:36:20 +02:00
TempOldContext : = nil ;
TempNewContext : = nil ;
2019-11-10 00:24:26 +01:00
end ;
end ;
2020-05-05 18:10:33 +02:00
function TChromiumCore. CreateBrowser( const aURL : ustring;
const aBrowserViewComp : TCEFBrowserViewComponent;
const aContext : ICefRequestContext;
const aExtraInfo : ICefDictionaryValue) : boolean ;
var
2021-04-18 19:36:20 +02:00
TempNewContext, TempOldContext : ICefRequestContext;
2020-05-05 18:10:33 +02:00
begin
2021-04-18 19:36:20 +02:00
Result : = False ;
TempNewContext : = nil ;
2020-05-05 18:10:33 +02:00
try
try
// GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser
// even if you use a custom request context.
// If you create a browser in the initialization of your app, make sure you call this
// function when GlobalCEFApp.GlobalContextInitialized is TRUE.
// Use the GlobalCEFApp.OnContextInitialized event to know when
// GlobalCEFApp.GlobalContextInitialized is set to TRUE.
if not( csDesigning in ComponentState) and
2020-05-07 11:46:48 +02:00
( BrowserId = 0 ) and
2020-05-05 18:10:33 +02:00
( aBrowserViewComp < > nil ) and
2020-05-07 11:46:48 +02:00
( GlobalCEFApp < > nil ) and
2020-08-04 17:52:09 +02:00
GlobalCEFApp. GlobalContextInitialized and
2020-05-05 18:10:33 +02:00
CreateClientHandler( False ) then
begin
GetSettings( FBrowserSettings) ;
CreateResourceRequestHandler;
CreateMediaObserver;
2020-06-21 21:27:55 +02:00
CreateDevToolsMsgObserver;
2020-08-04 17:52:09 +02:00
CreateExtensionHandler;
2020-05-05 18:10:33 +02:00
if ( aContext = nil ) then
2021-04-18 19:36:20 +02:00
TempOldContext : = TCefRequestContextRef. Global( )
2020-05-05 18:10:33 +02:00
else
2021-04-18 19:36:20 +02:00
TempOldContext : = aContext;
TempNewContext : = TCefRequestContextRef. Shared( TempOldContext, FReqContextHandler) ;
2020-05-05 18:10:33 +02:00
Result : = aBrowserViewComp. CreateBrowserView( FHandler, aURL, FBrowserSettings, aExtraInfo, TempNewContext) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.CreateBrowser' , e) then raise ;
end ;
finally
2021-04-18 19:36:20 +02:00
TempOldContext : = nil ;
TempNewContext : = nil ;
2020-12-06 12:28:13 +01:00
end ;
end ;
2019-11-20 10:45:46 +01:00
procedure TChromiumCore. InitializeWindowInfo( aParentHandle : TCefWindowHandle;
aParentRect : TRect;
const aWindowName : ustring) ;
2019-11-10 00:24:26 +01:00
begin
{$IFDEF MSWINDOWS}
if FIsOSR then
2020-01-28 11:36:34 +01:00
WindowInfoAsWindowless( FWindowInfo, ParentFormHandle, aWindowName)
2019-11-10 00:24:26 +01:00
else
2020-06-22 16:17:38 +02:00
WindowInfoAsChild( FWindowInfo, aParentHandle, aParentRect, aWindowName, FDefaultWindowInfoExStyle) ;
2019-11-10 00:24:26 +01:00
{$ELSE}
if FIsOSR then
2021-02-08 10:28:36 +01:00
WindowInfoAsWindowless( FWindowInfo, aParentHandle)
2019-11-10 00:24:26 +01:00
else
WindowInfoAsChild( FWindowInfo, aParentHandle, aParentRect) ;
{$ENDIF}
end ;
2019-11-20 10:45:46 +01:00
procedure TChromiumCore. DefaultInitializeDevToolsWindowInfo( aDevToolsWnd : TCefWindowHandle;
const aClientRect : TRect;
const aWindowName : ustring) ;
2019-11-10 00:24:26 +01:00
begin
2020-04-03 17:57:52 +02:00
if ( ValidCefWindowHandle( aDevToolsWnd) ) then
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
WindowInfoAsChild( FDevWindowInfo, aDevToolsWnd, aClientRect, aWindowName)
else
WindowInfoAsPopUp( FDevWindowInfo, WindowHandle, DEVTOOLS_WINDOWNAME) ;
{$ELSE}
WindowInfoAsChild( FDevWindowInfo, aDevToolsWnd, aClientRect)
else
2021-01-06 12:18:14 +01:00
// WindowInfoAsPopUp only exists for Windows. The Linux version of cefclient
// calls WindowInfoAsChild with aParent set to NULL to create a popup window.
WindowInfoAsPopUp( FDevWindowInfo, aDevToolsWnd) ;
2019-11-10 00:24:26 +01:00
{$ENDIF}
end ;
function TChromiumCore. ShareRequestContext( var aContext : ICefRequestContext;
const aHandler : ICefRequestContextHandler) : boolean ;
begin
Result : = False ;
aContext : = nil ;
if Initialized then
begin
2020-05-07 11:46:48 +02:00
aContext : = TCefRequestContextRef. Shared( Browser. Host. RequestContext, aHandler) ;
2019-11-10 00:24:26 +01:00
Result : = ( aContext < > nil ) ;
end ;
end ;
{$IFDEF MSWINDOWS}
procedure TChromiumCore. InitializeDragAndDrop( const aDropTargetWnd : HWND) ;
var
TempDropTarget : IDropTarget;
begin
if FIsOSR and
not( FDragAndDropInitialized) and
( FDragDropManager = nil ) and
( aDropTargetWnd < > 0 ) then
begin
FDropTargetWnd : = aDropTargetWnd;
FDragDropManager : = TCEFDragAndDropMgr. Create;
2019-11-10 18:23:39 +01:00
FDragDropManager. OnDragEnter : = {$IFDEF FPC} @ {$ENDIF} DragDropManager_OnDragEnter;
FDragDropManager. OnDragOver : = {$IFDEF FPC} @ {$ENDIF} DragDropManager_OnDragOver;
FDragDropManager. OnDragLeave : = {$IFDEF FPC} @ {$ENDIF} DragDropManager_OnDragLeave;
FDragDropManager. OnDrop : = {$IFDEF FPC} @ {$ENDIF} DragDropManager_OnDrop;
2019-11-10 00:24:26 +01:00
TempDropTarget : = TOLEDropTarget. Create( FDragDropManager) ;
RegisterDragDrop( FDropTargetWnd, TempDropTarget) ;
FDragAndDropInitialized : = True ;
end ;
end ;
procedure TChromiumCore. ShutdownDragAndDrop;
begin
if FDragAndDropInitialized and ( FDropTargetWnd < > 0 ) then
begin
RevokeDragDrop( FDropTargetWnd) ;
FDragAndDropInitialized : = False ;
end ;
end ;
procedure TChromiumCore. ToMouseEvent( grfKeyState : Longint ; pt : TPoint; var aMouseEvent : TCefMouseEvent) ;
begin
if ( FDropTargetWnd < > 0 ) then
begin
MapWindowPoints( 0 , FDropTargetWnd, pt, 1 ) ;
aMouseEvent. x : = pt. x;
aMouseEvent. y : = pt. y;
aMouseEvent. modifiers : = GetCefMouseModifiers( grfKeyState) ;
end ;
end ;
{$ENDIF}
procedure TChromiumCore. DragDropManager_OnDragEnter( Sender: TObject; const aDragData : ICefDragData; grfKeyState: Longint ; pt: TPoint; var dwEffect: Longint ) ;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
var
TempMouseEvent : TCefMouseEvent;
TempAllowedOps : TCefDragOperations;
2019-11-10 18:23:39 +01:00
{$ENDIF}
2019-11-10 00:24:26 +01:00
begin
if ( GlobalCEFApp < > nil ) then
begin
{$IFDEF MSWINDOWS}
ToMouseEvent( grfKeyState, pt, TempMouseEvent) ;
DropEffectToDragOperation( dwEffect, TempAllowedOps) ;
DeviceToLogical( TempMouseEvent, GlobalCEFApp. DeviceScaleFactor) ;
DragTargetDragEnter( aDragData, @ TempMouseEvent, TempAllowedOps) ;
DragTargetDragOver( @ TempMouseEvent, TempAllowedOps) ;
DragOperationToDropEffect( FDragOperations, dwEffect) ;
{$ENDIF}
end ;
end ;
procedure TChromiumCore. DragDropManager_OnDragOver( Sender: TObject; grfKeyState: Longint ; pt: TPoint; var dwEffect: Longint ) ;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
var
TempMouseEvent : TCefMouseEvent;
TempAllowedOps : TCefDragOperations;
2019-11-10 18:23:39 +01:00
{$ENDIF}
2019-11-10 00:24:26 +01:00
begin
if ( GlobalCEFApp < > nil ) then
begin
{$IFDEF MSWINDOWS}
ToMouseEvent( grfKeyState, pt, TempMouseEvent) ;
DropEffectToDragOperation( dwEffect, TempAllowedOps) ;
DeviceToLogical( TempMouseEvent, GlobalCEFApp. DeviceScaleFactor) ;
DragTargetDragOver( @ TempMouseEvent, TempAllowedOps) ;
DragOperationToDropEffect( FDragOperations, dwEffect) ;
{$ENDIF}
end ;
end ;
procedure TChromiumCore. DragDropManager_OnDragLeave( Sender: TObject) ;
begin
DragTargetDragLeave;
end ;
procedure TChromiumCore. DragDropManager_OnDrop( Sender: TObject; grfKeyState: Longint ; pt: TPoint; var dwEffect: Longint ) ;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
var
TempMouseEvent : TCefMouseEvent;
TempAllowedOps : TCefDragOperations;
2019-11-10 18:23:39 +01:00
{$ENDIF}
2019-11-10 00:24:26 +01:00
begin
if ( GlobalCEFApp < > nil ) then
begin
{$IFDEF MSWINDOWS}
ToMouseEvent( grfKeyState, pt, TempMouseEvent) ;
DropEffectToDragOperation( dwEffect, TempAllowedOps) ;
DeviceToLogical( TempMouseEvent, GlobalCEFApp. DeviceScaleFactor) ;
DragTargetDragOver( @ TempMouseEvent, TempAllowedOps) ;
DragTargetDrop( @ TempMouseEvent) ;
DragOperationToDropEffect( FDragOperations, dwEffect) ;
{$ENDIF}
end ;
end ;
procedure TChromiumCore. CloseBrowser( aForceClose : boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. CloseBrowser( aForceClose) ;
2020-05-07 11:46:48 +02:00
end ;
procedure TChromiumCore. CloseAllBrowsers;
begin
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
if ( FBrowsers < > nil ) then FBrowsers. CloseAllBrowsers;
finally
FBrowsersCS. Release;
end ;
2019-11-10 00:24:26 +01:00
end ;
2020-05-05 18:10:33 +02:00
function TChromiumCore. TryCloseBrowser : boolean ;
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Result : = Browser. Host. TryCloseBrowser
2020-05-05 18:10:33 +02:00
else
Result : = True ;
end ;
2019-11-20 10:45:46 +01:00
function TChromiumCore. CreateBrowserHost( aWindowInfo : PCefWindowInfo;
const aURL : ustring;
const aSettings : PCefBrowserSettings;
const aExtraInfo : ICefDictionaryValue;
const aContext : ICefRequestContext) : boolean ;
2019-11-10 00:24:26 +01:00
var
TempURL : TCefString;
begin
TempURL : = CefString( aURL) ;
Result : = cef_browser_host_create_browser( aWindowInfo, FHandler. Wrap, @ TempURL, aSettings, CefGetData( aExtraInfo) , CefGetData( aContext) ) < > 0 ;
end ;
2019-11-20 10:45:46 +01:00
function TChromiumCore. CreateBrowserHostSync( aWindowInfo : PCefWindowInfo;
const aURL : ustring;
const aSettings : PCefBrowserSettings;
const aExtraInfo : ICefDictionaryValue;
const aContext : ICefRequestContext) : boolean ;
2019-11-10 00:24:26 +01:00
var
2020-05-07 11:46:48 +02:00
TempURL : TCefString;
TempBrowser : ICefBrowser;
2019-11-10 00:24:26 +01:00
begin
2022-04-30 19:01:45 +02:00
try
TempURL : = CefString( aURL) ;
TempBrowser : = TCefBrowserRef. UnWrap( cef_browser_host_create_browser_sync( aWindowInfo, FHandler. Wrap, @ TempURL, aSettings, CefGetData( aExtraInfo) , CefGetData( aContext) ) ) ;
Result : = assigned( TempBrowser) ;
finally
TempBrowser : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
2022-03-03 11:16:30 +01:00
procedure TChromiumCore. Find( const aSearchText : ustring; aForward, aMatchCase, aFindNext : Boolean ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if Initialized then
2022-03-03 11:16:30 +01:00
Browser. Host. Find( aSearchText, aForward, aMatchCase, aFindNext) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. StopFinding( aClearSelection : Boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. StopFinding( aClearSelection) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. Print;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. Print;
2019-11-10 00:24:26 +01:00
end ;
2022-12-16 11:29:15 +01:00
procedure TChromiumCore. PrintToPDF( const aFilePath : ustring) ;
2019-11-10 00:24:26 +01:00
var
TempSettings : TCefPdfPrintSettings;
TempCallback : ICefPdfPrintCallback;
begin
2022-12-16 11:29:15 +01:00
if Initialized and ( FPDFPrintOptions < > nil ) then
2019-11-10 00:24:26 +01:00
begin
2022-12-16 11:29:15 +01:00
FPDFPrintOptions. CopyToSettings( TempSettings) ;
2019-11-10 00:24:26 +01:00
TempCallback : = TCefCustomPDFPrintCallBack. Create( self) ;
2020-05-07 11:46:48 +02:00
Browser. Host. PrintToPdf( aFilePath, @ TempSettings, TempCallback) ;
2019-11-10 00:24:26 +01:00
end ;
end ;
procedure TChromiumCore. ClipboardCopy;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. FocusedFrame;
if ( TempFrame = nil ) then TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. Copy;
end ;
end ;
procedure TChromiumCore. ClipboardPaste;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. FocusedFrame;
if ( TempFrame = nil ) then TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. Paste;
end ;
end ;
procedure TChromiumCore. ClipboardCut;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. FocusedFrame;
if ( TempFrame = nil ) then TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. Cut;
end ;
end ;
procedure TChromiumCore. ClipboardUndo;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. FocusedFrame;
if ( TempFrame = nil ) then TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. Undo;
end ;
end ;
procedure TChromiumCore. ClipboardRedo;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. FocusedFrame;
if ( TempFrame = nil ) then TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. Redo;
end ;
end ;
procedure TChromiumCore. ClipboardDel;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. FocusedFrame;
if ( TempFrame = nil ) then TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. Del;
end ;
end ;
procedure TChromiumCore. SelectAll;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. FocusedFrame;
if ( TempFrame = nil ) then TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. SelectAll;
end ;
end ;
procedure TChromiumCore. GetSettings( var aSettings : TCefBrowserSettings) ;
begin
if ( FFontOptions < > nil ) and ( FOptions < > nil ) then
begin
aSettings. size : = SizeOf( TCefBrowserSettings) ;
aSettings. windowless_frame_rate : = FOptions. WindowlessFrameRate;
aSettings. standard_font_family : = CefString( FFontOptions. StandardFontFamily) ;
aSettings. fixed_font_family : = CefString( FFontOptions. FixedFontFamily) ;
aSettings. serif_font_family : = CefString( FFontOptions. SerifFontFamily) ;
aSettings. sans_serif_font_family : = CefString( FFontOptions. SansSerifFontFamily) ;
aSettings. cursive_font_family : = CefString( FFontOptions. CursiveFontFamily) ;
aSettings. fantasy_font_family : = CefString( FFontOptions. FantasyFontFamily) ;
aSettings. default_font_size : = FFontOptions. DefaultFontSize;
aSettings. default_fixed_font_size : = FFontOptions. DefaultFixedFontSize;
aSettings. minimum_font_size : = FFontOptions. MinimumFontSize;
aSettings. minimum_logical_font_size : = FFontOptions. MinimumLogicalFontSize;
aSettings. remote_fonts : = FFontOptions. RemoteFonts;
2023-08-07 20:21:42 +02:00
aSettings. default_encoding : = CefString( FDefaultEncoding) ;
2019-11-10 00:24:26 +01:00
aSettings. javascript : = FOptions. Javascript;
aSettings. javascript_close_windows : = FOptions. JavascriptCloseWindows;
aSettings. javascript_access_clipboard : = FOptions. JavascriptAccessClipboard;
aSettings. javascript_dom_paste : = FOptions. JavascriptDomPaste;
aSettings. image_loading : = FOptions. ImageLoading;
aSettings. image_shrink_standalone_to_fit : = FOptions. ImageShrinkStandaloneToFit;
aSettings. text_area_resize : = FOptions. TextAreaResize;
aSettings. tab_to_links : = FOptions. TabToLinks;
aSettings. local_storage : = FOptions. LocalStorage;
aSettings. databases : = FOptions. Databases;
aSettings. webgl : = FOptions. Webgl;
aSettings. background_color : = FOptions. BackgroundColor;
aSettings. accept_language_list : = CefString( FOptions. AcceptLanguageList) ;
2022-05-03 12:43:16 +02:00
aSettings. chrome_status_bubble : = FOptions. ChromeStatusBubble;
2019-11-10 00:24:26 +01:00
end ;
end ;
procedure TChromiumCore. InitializeSettings( var aSettings : TCefBrowserSettings) ;
begin
2021-04-18 19:36:20 +02:00
FillChar( aSettings, SizeOf( TCefBrowserSettings) , 0 ) ;
aSettings. size : = SizeOf( TCefBrowserSettings) ;
aSettings. windowless_frame_rate : = CEF_OSR_FRAMERATE_DEFAULT; // Use CEF_OSR_SHARED_TEXTURES_FRAMERATE_DEFAULT if the shared textures are enabled.
2019-11-10 00:24:26 +01:00
end ;
// Leave aFrameName empty to load the URL in the main frame
procedure TChromiumCore. LoadURL( const aURL : ustring; const aFrameName : ustring) ;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. LoadUrl( aURL) ;
end ;
end ;
procedure TChromiumCore. LoadURL( const aURL : ustring; const aFrame : ICefFrame) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized and ( aFrame < > nil ) and aFrame. IsValid then
aFrame. LoadUrl( aURL) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. LoadURL( const aURL : ustring; const aFrameIdentifier : int64 ) ;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. LoadUrl( aURL) ;
end ;
end ;
// Leave aFrameName empty to load the URL in the main frame
procedure TChromiumCore. LoadString( const aHTML : ustring; const aFrameName : ustring) ;
var
TempFrame : ICefFrame;
begin
if Initialized and ( length( aHTML) > 0 ) then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. LoadUrl( CefGetDataURI( aHTML, 'text/html' ) ) ;
end ;
end ;
procedure TChromiumCore. LoadString( const aHTML : ustring; const aFrame : ICefFrame) ;
begin
if Initialized and ( length( aHTML) > 0 ) and ( aFrame < > nil ) and aFrame. IsValid then
aFrame. LoadUrl( CefGetDataURI( aHTML, 'text/html' ) ) ;
end ;
procedure TChromiumCore. LoadString( const aHTML : ustring; const aFrameIdentifier : int64 ) ;
var
TempFrame : ICefFrame;
begin
if Initialized and ( length( aHTML) > 0 ) then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. LoadUrl( CefGetDataURI( aHTML, 'text/html' ) ) ;
end ;
end ;
// Leave aFrameName empty to load the URL in the main frame
procedure TChromiumCore. LoadResource( const aStream : TCustomMemoryStream; const aMimeType, aCharset : string ; const aFrameName : ustring) ;
var
TempFrame : ICefFrame;
begin
if Initialized and ( aStream < > nil ) and ( aStream. Size > 0 ) then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. LoadUrl( CefGetDataURI( aStream. Memory, aStream. Size, aMimeType, aCharset) ) ;
end ;
end ;
procedure TChromiumCore. LoadResource( const aStream : TCustomMemoryStream; const aMimeType, aCharset : string ; const aFrame : ICefFrame) ;
begin
if Initialized and ( aStream < > nil ) and ( aStream. Size > 0 ) and ( aFrame < > nil ) and aFrame. IsValid then
aFrame. LoadUrl( CefGetDataURI( aStream. Memory, aStream. Size, aMimeType, aCharset) ) ;
end ;
procedure TChromiumCore. LoadResource( const aStream : TCustomMemoryStream; const aMimeType, aCharset : string ; const aFrameIdentifier : int64 ) ;
var
TempFrame : ICefFrame;
begin
if Initialized and ( aStream < > nil ) and ( aStream. Size > 0 ) then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. LoadUrl( CefGetDataURI( aStream. Memory, aStream. Size, aMimeType, aCharset) ) ;
end ;
end ;
// WARNING: This function will fail with "bad IPC message" reason
// INVALID_INITIATOR_ORIGIN (213) unless you first navigate to the request
// origin using some other mechanism (LoadURL, link click, etc).
procedure TChromiumCore. LoadRequest( const aRequest: ICefRequest) ;
var
TempFrame : ICefFrame;
begin
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then TempFrame. LoadRequest( aRequest) ;
end ;
end ;
2020-11-22 16:42:52 +01:00
function TChromiumCore. ExecuteBrowserNavigationTask( aTask : TCefBrowserNavigation) : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefBrowserNavigationTask. Create( self, aTask) ;
Result : = CefPostTask( TID_UI, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. GoBack;
begin
2020-11-22 16:42:52 +01:00
ExecuteBrowserNavigationTask( bnBack) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. GoForward;
begin
2020-11-22 16:42:52 +01:00
ExecuteBrowserNavigationTask( bnForward) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. Reload;
begin
2020-11-22 16:42:52 +01:00
ExecuteBrowserNavigationTask( bnReload) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. ReloadIgnoreCache;
begin
2020-11-22 16:42:52 +01:00
ExecuteBrowserNavigationTask( bnReloadIgnoreCache) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. StopLoad;
begin
2020-11-22 16:42:52 +01:00
ExecuteBrowserNavigationTask( bnStopLoad) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. StartDownload( const aURL : ustring) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. StartDownload( aURL) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. DownloadImage( const imageUrl : ustring;
2019-11-20 10:45:46 +01:00
isFavicon : boolean ;
maxImageSize : cardinal ;
bypassCache : boolean ) ;
2019-11-10 00:24:26 +01:00
var
TempCallback : ICefDownloadImageCallback;
begin
try
2020-05-07 11:46:48 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
begin
TempCallback : = TCefCustomDownloadImageCallback. Create( self) ;
2020-05-07 11:46:48 +02:00
Browser. Host. DownloadImage( imageUrl, isFavicon, maxImageSize, bypassCache, TempCallback) ;
2019-11-10 00:24:26 +01:00
end ;
finally
TempCallback : = nil ;
end ;
end ;
function TChromiumCore. GetIsLoading : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. IsLoading;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetMultithreadApp : boolean ;
begin
Result : = ( GlobalCEFApp < > nil ) and GlobalCEFApp. MultiThreadedMessageLoop;
end ;
function TChromiumCore. GetHasDocument : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. HasDocument;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetHasView : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. Host. HasView;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetHasDevTools : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. Host. HasDevTools;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetHasClientHandler : boolean ;
begin
Result : = ( FHandler < > nil ) ;
end ;
function TChromiumCore. GetHasBrowser : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = ( Browser < > nil ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetWindowHandle : TCefWindowHandle;
begin
2020-09-30 12:43:48 +02:00
InitializeWindowHandle( Result ) ;
2019-11-10 00:24:26 +01:00
if Initialized then
2020-09-30 12:43:48 +02:00
Result : = Browser. Host. WindowHandle;
end ;
function TChromiumCore. GetOpenerWindowHandle : TCefWindowHandle;
begin
InitializeWindowHandle( Result ) ;
if Initialized then
Result : = Browser. Host. OpenerWindowHandle;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetFrameIsFocused : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and ( Browser. FocusedFrame < > nil ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetWindowlessFrameRate : integer ;
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Result : = Browser. Host. GetWindowlessFrameRate
2019-11-10 00:24:26 +01:00
else
Result : = 0 ;
end ;
function TChromiumCore. GetVisibleNavigationEntry : ICefNavigationEntry;
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Result : = Browser. Host. VisibleNavigationEntry
2019-11-10 00:24:26 +01:00
else
Result : = nil ;
end ;
2020-05-07 11:46:48 +02:00
function TChromiumCore. GetBrowser : ICefBrowser;
begin
Result : = nil ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
2020-05-07 11:46:48 +02:00
2020-06-13 17:24:22 +02:00
if ( FBrowsers < > nil ) then
begin
if FMultiBrowserMode then
Result : = FBrowsers. Browser[ FBrowserId]
else
Result : = FBrowsers. FirstBrowser;
end ;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
function TChromiumCore. GetBrowserId : integer ;
begin
2020-06-13 17:24:22 +02:00
Result : = 0 ;
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
Result : = FBrowserId;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
function TChromiumCore. GetBrowserById( aID : integer ) : ICefBrowser;
begin
Result : = nil ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
if ( FBrowsers < > nil ) then
Result : = FBrowsers. Browser[ aID] ;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
function TChromiumCore. GetBrowserCount : integer ;
begin
Result : = 0 ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
if ( FBrowsers < > nil ) then
Result : = FBrowsers. Count;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
function TChromiumCore. GetBrowserIdByIndex( aIndex : integer ) : integer ;
begin
Result : = 0 ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
if ( FBrowsers < > nil ) and ( aIndex > = 0 ) and ( aIndex < FBrowsers. Count) then
Result : = TBrowserInfo( FBrowsers[ aIndex] ) . ID;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
2021-02-06 17:38:44 +01:00
{$IFDEF LINUX}
function TChromiumCore. GetXDisplay : PXDisplay;
{$IFDEF FPC}
var
TempParent : TCefWindowHandle;
{$ENDIF}
begin
if ( FXDisplay = nil ) then
begin
{$IFDEF FPC}
2022-06-25 16:41:34 +02:00
{$IFDEF LCLGTK2}
TempParent : = ParentFormHandle;
if ValidCefWindowHandle( TempParent) and
( PGtkWidget( TempParent) ^ . Window < > nil ) then
FXDisplay : = GDK_WINDOW_XDISPLAY( PGtkWidget( TempParent) ^ . Window) ;
{$ENDIF}
{$IFDEF LCLGTK3}
TempParent : = ParentFormHandle;
{
if ValidCefWindowHandle( TempParent) and
( PGtkWidget( TempParent) ^ . Window < > nil ) then
FXDisplay : = GDK_WINDOW_XDISPLAY( PGtkWidget( TempParent) ^ . Window) ; }
FXDisplay : = gdk_x11_get_default_xdisplay( ) ;
{$ENDIF}
2021-02-06 17:38:44 +01:00
{$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}
2019-11-10 00:24:26 +01:00
function TChromiumCore. GetHasValidMainFrame : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and ( Browser. MainFrame < > nil ) and Browser. MainFrame. IsValid;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetFrameCount : NativeUInt ;
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Result : = Browser. GetFrameCount
2019-11-10 00:24:26 +01:00
else
Result : = 0 ;
end ;
function TChromiumCore. GetRequestContextCache : ustring;
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Result : = Browser. host. RequestContext. CachePath
2019-11-10 00:24:26 +01:00
else
if ( GlobalCEFApp < > nil ) then
Result : = GlobalCEFApp. cache
else
Result : = '' ;
end ;
function TChromiumCore. GetRequestContextIsGlobal : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. host. RequestContext. IsGlobal;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetAudioMuted : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. host. IsAudioMuted;
2019-11-10 00:24:26 +01:00
end ;
2020-01-28 11:36:34 +01:00
function TChromiumCore. GetParentFormHandle : TCefWindowHandle;
begin
2020-09-30 12:43:48 +02:00
InitializeWindowHandle( Result ) ;
2020-01-28 11:36:34 +01:00
end ;
2020-05-07 11:46:48 +02:00
procedure TChromiumCore. SetMultiBrowserMode( aValue : boolean ) ;
begin
if not( Initialized) then FMultiBrowserMode : = aValue;
end ;
2020-08-05 16:11:50 +02:00
procedure TChromiumCore. SetQuicAllowed( aValue : boolean ) ;
begin
if ( FQuicAllowed < > aValue) then
begin
FQuicAllowed : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2020-08-22 14:56:24 +02:00
procedure TChromiumCore. SetJavascriptEnabled( aValue : boolean ) ;
begin
if ( FJavascriptEnabled < > aValue) then
begin
FJavascriptEnabled : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetLoadImagesAutomatically( aValue : boolean ) ;
begin
if ( FLoadImagesAutomatically < > aValue) then
begin
FLoadImagesAutomatically : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2023-01-25 18:06:32 +01:00
procedure TChromiumCore. SetBatterySaverModeState( aValue : TCefBatterySaverModeState) ;
begin
if ( FBatterySaverModeState < > aValue) then
begin
FBatterySaverModeState : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2023-08-07 20:21:42 +02:00
procedure TChromiumCore. SetHighEfficiencyModeState( aValue : TCefHighEfficiencyModeState) ;
2023-01-25 18:06:32 +01:00
begin
2023-08-07 20:21:42 +02:00
if ( FHighEfficiencyModeState < > aValue) then
2023-01-25 18:06:32 +01:00
begin
2023-08-07 20:21:42 +02:00
FHighEfficiencyModeState : = aValue;
FUpdatePreferences : = True ;
2023-01-25 18:06:32 +01:00
end ;
end ;
2022-02-19 18:56:41 +01:00
procedure TChromiumCore. SetDefaultUrl( const aValue : ustring) ;
begin
FDefaultUrl : = trim( aValue) ;
// Use 'about:blank' if FDefaultUrl is empty to avoid a memory leak when the browser is destroyed.
// https://github.com/salvadordf/CEF4Delphi/issues/404
if ( Length( FDefaultUrl) = 0 ) then
FDefaultUrl : = ABOUTBLANK_URI;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. SetAudioMuted( aValue : boolean ) ;
2022-08-29 22:45:28 +02:00
var
TempTask : ICefTask;
2019-11-10 00:24:26 +01:00
begin
2022-08-29 22:45:28 +02:00
if CefCurrentlyOn( TID_UI) then
doSetAudioMuted( aValue)
else
if Initialized then
try
TempTask : = TCefSetAudioMutedTask. Create( self, aValue) ;
CefPostTask( TID_UI, TempTask) ;
finally
TempTask : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SetWindowlessFrameRate( aValue : integer ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SetWindowlessFrameRate( aValue) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetCanGoBack : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. CanGoBack;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetCanGoForward : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. CanGoForward;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetIsPopUp : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. IsPopUp;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetInitialized : boolean ;
begin
2020-06-13 17:24:22 +02:00
Result : = False ;
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
2021-07-29 16:20:34 +02:00
Result : = ( FBrowserId < > 0 ) and ( FBrowsers < > nil ) and FBrowsers. BrowserIsValid[ FBrowserId] ;
2020-06-13 17:24:22 +02:00
finally
FBrowsersCS. Release;
end ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetDocumentURL : ustring;
var
TempFrame : ICefFrame;
begin
Result : = '' ;
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then Result : = TempFrame. URL;
end ;
end ;
function TChromiumCore. GetZoomLevel : double ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Result : = Browser. Host. ZoomLevel
else
Result : = 0 ;
2019-11-10 00:24:26 +01:00
end ;
2019-12-10 16:49:07 +01:00
function TChromiumCore. GetZoomPct : double ;
2019-11-10 00:24:26 +01:00
begin
2019-12-10 16:49:07 +01:00
Result : = power( 1.2 , ZoomLevel) * 1 0 0 ;
2019-11-10 00:24:26 +01:00
end ;
2019-12-10 16:49:07 +01:00
function TChromiumCore. GetZoomStep : byte ;
2019-11-10 00:24:26 +01:00
begin
2019-12-10 16:49:07 +01:00
Result : = ZOOM_STEP_DEF;
if ( FZoomStepCS < > nil ) then
try
FZoomStepCS. Acquire;
Result : = FZoomStep;
finally
FZoomStepCS. Release;
end ;
end ;
procedure TChromiumCore. SetZoomLevel( const aValue : double ) ;
begin
if CefCurrentlyOn( TID_UI) then
doSetZoomLevel( aValue)
else
ExecuteSetZoomLevelTask( aValue) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SetZoomPct( const aValue : double ) ;
begin
2019-12-10 16:49:07 +01:00
if CefCurrentlyOn( TID_UI) then
doSetZoomPct( aValue)
else
ExecuteSetZoomPctTask( aValue) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SetZoomStep( aValue : byte ) ;
begin
2019-12-10 16:49:07 +01:00
if CefCurrentlyOn( TID_UI) then
doSetZoomStep( aValue)
else
ExecuteSetZoomStepTask( aValue) ;
2019-11-10 00:24:26 +01:00
end ;
2019-12-10 16:49:07 +01:00
// Increments the Zoom Step value and triggers the TChromium.OnZoomPctAvailable event with the new value
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. IncZoomStep;
begin
2019-12-10 16:49:07 +01:00
if CefCurrentlyOn( TID_UI) then
doUpdateZoomStep( True )
else
ExecuteUpdateZoomStepTask( True ) ;
2019-11-10 00:24:26 +01:00
end ;
2019-12-10 16:49:07 +01:00
// Decrements the Zoom Step value and triggers the TChromium.OnZoomPctAvailable event with the new value
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. DecZoomStep;
begin
2019-12-10 16:49:07 +01:00
if CefCurrentlyOn( TID_UI) then
doUpdateZoomStep( False )
else
ExecuteUpdateZoomStepTask( False ) ;
2019-11-10 00:24:26 +01:00
end ;
2019-12-10 16:49:07 +01:00
// Increments the Zoom Percent value and triggers the TChromium.OnZoomPctAvailable event with the new value
procedure TChromiumCore. IncZoomPct;
begin
if CefCurrentlyOn( TID_UI) then
doUpdateZoomPct( True )
else
ExecuteUpdateZoomPctTask( True ) ;
end ;
// Decrements the Zoom Percent value and triggers the TChromium.OnZoomPctAvailable event with the new value
procedure TChromiumCore. DecZoomPct;
begin
if CefCurrentlyOn( TID_UI) then
doUpdateZoomPct( False )
else
ExecuteUpdateZoomPctTask( False ) ;
end ;
// Sets the Zoom Step to the default value and triggers the TChromium.OnZoomPctAvailable event
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. ResetZoomStep;
begin
ZoomStep : = ZOOM_STEP_DEF;
end ;
2019-12-10 16:49:07 +01:00
// Sets the Zoom Level to the default value and triggers the TChromium.OnZoomPctAvailable event
procedure TChromiumCore. ResetZoomLevel;
begin
ZoomLevel : = 0 ;
end ;
// Sets the Zoom Percent to the default value and triggers the TChromium.OnZoomPctAvailable event
procedure TChromiumCore. ResetZoomPct;
begin
ZoomPct : = ZoomStepValues[ ZOOM_STEP_DEF] ;
end ;
// Triggers the TChromium.OnZoomPctAvailable event with the current Zoom Percent value
procedure TChromiumCore. ReadZoom;
begin
if CefCurrentlyOn( TID_UI) then
doReadZoom
else
ExecuteReadZoomTask;
end ;
function TChromiumCore. ExecuteUpdateZoomStepTask( aInc : boolean ) : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefUpdateZoomStepTask. Create( self, aInc) ;
Result : = CefPostTask( TID_UI, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
function TChromiumCore. ExecuteUpdateZoomPctTask( aInc : boolean ) : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefUpdateZoomPctTask. Create( self, aInc) ;
Result : = CefPostTask( TID_UI, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
function TChromiumCore. ExecuteReadZoomTask : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefReadZoomTask. Create( self) ;
Result : = CefPostTask( TID_UI, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
function TChromiumCore. ExecuteSetZoomPctTask( const aValue : double ) : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefSetZoomPctTask. Create( self, aValue) ;
Result : = CefPostTask( TID_UI, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
function TChromiumCore. ExecuteSetZoomLevelTask( const aValue : double ) : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefSetZoomLevelTask. Create( self, aValue) ;
Result : = CefPostTask( TID_UI, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
function TChromiumCore. ExecuteSetZoomStepTask( aValue : byte ) : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefSetZoomStepTask. Create( self, aValue) ;
Result : = CefPostTask( TID_UI, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. SetDoNotTrack( aValue : boolean ) ;
begin
if ( FDoNotTrack < > aValue) then
begin
FDoNotTrack : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetSendReferrer( aValue : boolean ) ;
begin
if ( FSendReferrer < > aValue) then
begin
FSendReferrer : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetHyperlinkAuditing( aValue : boolean ) ;
begin
if ( FHyperlinkAuditing < > aValue) then
begin
FHyperlinkAuditing : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetAllowOutdatedPlugins( aValue : boolean ) ;
begin
if ( FAllowOutdatedPlugins < > aValue) then
begin
FAllowOutdatedPlugins : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetAlwaysAuthorizePlugins( aValue : boolean ) ;
begin
if ( FAlwaysAuthorizePlugins < > aValue) then
begin
FAlwaysAuthorizePlugins : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2022-10-05 17:36:09 +02:00
procedure TChromiumCore. SetAlwaysOpenPDFExternally( aValue : boolean ) ;
begin
if ( FAlwaysOpenPDFExternally < > aValue) then
begin
FAlwaysOpenPDFExternally : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. SetSpellChecking( aValue : boolean ) ;
begin
if ( FSpellChecking < > aValue) then
begin
FSpellChecking : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetSpellCheckerDicts( const aValue : ustring) ;
begin
if ( FSpellCheckerDicts < > aValue) then
begin
FSpellCheckerDicts : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetSafeSearch( aValue : boolean ) ;
begin
if ( FSafeSearch < > aValue) then
begin
FSafeSearch : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2020-07-02 12:49:21 +02:00
procedure TChromiumCore. SetOffline( aValue : boolean ) ;
var
TempParams : ICefDictionaryValue;
begin
if ( FOffline < > aValue) then
try
FOffline : = aValue;
TempParams : = TCefDictionaryValueRef. New;
TempParams. SetBool( 'offline' , FOffline) ;
TempParams. SetDouble( 'latency' , 0 ) ;
TempParams. SetDouble( 'downloadThroughput' , 0 ) ;
TempParams. SetDouble( 'uploadThroughput' , 0 ) ;
ExecuteDevToolsMethod( 0 , 'Network.emulateNetworkConditions' , TempParams) ;
finally
TempParams : = nil ;
end ;
end ;
2020-07-05 12:56:21 +02:00
procedure TChromiumCore. SetUserAgentOverride( const aUserAgent, aAcceptLanguage, aPlatform : ustring) ;
2020-07-05 12:06:33 +02:00
var
TempParams : ICefDictionaryValue;
begin
try
TempParams : = TCefDictionaryValueRef. New;
TempParams. SetString( 'userAgent' , aUserAgent) ;
if ( length( aAcceptLanguage) > 0 ) then
TempParams. SetString( 'acceptLanguage' , aAcceptLanguage) ;
if ( length( aPlatform) > 0 ) then
TempParams. SetString( 'platform' , aPlatform) ;
ExecuteDevToolsMethod( 0 , 'Emulation.setUserAgentOverride' , TempParams) ;
finally
TempParams : = nil ;
2020-07-05 12:56:21 +02:00
end ;
end ;
2020-07-28 20:04:25 +02:00
procedure TChromiumCore. ClearDataForOrigin( const aOrigin : ustring; aStorageTypes : TCefClearDataStorageTypes) ;
2020-07-05 12:56:21 +02:00
var
TempParams : ICefDictionaryValue;
begin
try
TempParams : = TCefDictionaryValueRef. New;
2020-07-28 20:04:25 +02:00
TempParams. SetString( 'origin' , aOrigin) ;
2020-07-05 12:56:21 +02:00
case aStorageTypes of
cdstAppCache : TempParams. SetString( 'storageTypes' , 'appcache' ) ;
cdstCookies : TempParams. SetString( 'storageTypes' , 'cookies' ) ;
cdstFileSystems : TempParams. SetString( 'storageTypes' , 'file_systems' ) ;
cdstIndexeddb : TempParams. SetString( 'storageTypes' , 'indexeddb' ) ;
cdstLocalStorage : TempParams. SetString( 'storageTypes' , 'local_storage' ) ;
cdstShaderCache : TempParams. SetString( 'storageTypes' , 'shader_cache' ) ;
cdstWebsql : TempParams. SetString( 'storageTypes' , 'websql' ) ;
cdstServiceWorkers : TempParams. SetString( 'storageTypes' , 'service_workers' ) ;
cdstCacheStorage : TempParams. SetString( 'storageTypes' , 'cache_storage' ) ;
else TempParams. SetString( 'storageTypes' , 'all' ) ;
end ;
ExecuteDevToolsMethod( 0 , 'Storage.clearDataForOrigin' , TempParams) ;
finally
TempParams : = nil ;
2020-07-05 12:06:33 +02:00
end ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. SetYouTubeRestrict( aValue : integer ) ;
begin
if ( FYouTubeRestrict < > aValue) then
begin
FYouTubeRestrict : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetPrintingEnabled( aValue : boolean ) ;
begin
if ( FPrintingEnabled < > aValue) then
begin
FPrintingEnabled : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2019-12-03 12:12:19 +01:00
procedure TChromiumCore. SetAcceptLanguageList( const aValue : ustring) ;
begin
if ( FAcceptLanguageList < > aValue) then
begin
FAcceptLanguageList : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2020-03-04 09:42:32 +01:00
procedure TChromiumCore. SetAcceptCookies( const aValue : TCefCookiePref) ;
begin
if ( FAcceptCookies < > aValue) then
begin
FAcceptCookies : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetBlock3rdPartyCookies( const aValue : boolean ) ;
begin
if ( FBlock3rdPartyCookies < > aValue) then
begin
FBlock3rdPartyCookies : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
2019-12-10 16:49:07 +01:00
procedure TChromiumCore. UpdateHostZoomLevel( const aValue : double ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. ZoomLevel : = aValue;
2019-12-10 16:49:07 +01:00
end ;
procedure TChromiumCore. UpdateHostZoomPct( const aValue : double ) ;
begin
2020-06-21 21:27:55 +02:00
if ( aValue > 0 ) then
UpdateHostZoomLevel( LogN( 1.2 , aValue / 1 0 0 ) ) ;
2019-12-10 16:49:07 +01:00
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. SetWebRTCIPHandlingPolicy( aValue : TCefWebRTCHandlingPolicy) ;
begin
if ( FWebRTCIPHandlingPolicy < > aValue) then
begin
FWebRTCIPHandlingPolicy : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetWebRTCMultipleRoutes( aValue : TCefState) ;
begin
if ( FWebRTCMultipleRoutes < > aValue) then
begin
FWebRTCMultipleRoutes : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetWebRTCNonProxiedUDP( aValue : TCefState) ;
begin
if ( FWebRTCNonProxiedUDP < > aValue) then
begin
FWebRTCNonProxiedUDP : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyType( aValue : integer ) ;
begin
if ( FProxyType < > aValue) then
begin
FProxyType : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyScheme( aValue : TCefProxyScheme) ;
begin
if ( FProxyScheme < > aValue) then
begin
FProxyScheme : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyServer( const aValue : ustring) ;
begin
if ( FProxyServer < > aValue) then
begin
FProxyServer : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyPort( aValue : integer ) ;
begin
if ( FProxyPort < > aValue) then
begin
FProxyPort : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyUsername( const aValue : ustring) ;
begin
if ( FProxyUsername < > aValue) then
begin
FProxyUsername : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyPassword( const aValue : ustring) ;
begin
if ( FProxyPassword < > aValue) then
begin
FProxyPassword : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyScriptURL( const aValue : ustring) ;
begin
if ( FProxyScriptURL < > aValue) then
begin
FProxyScriptURL : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetProxyByPassList( const aValue : ustring) ;
begin
if ( FProxyByPassList < > aValue) then
begin
FProxyByPassList : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetMaxConnectionsPerProxy( const aValue : integer ) ;
begin
if ( FMaxConnectionsPerProxy < > aValue) and
( aValue in [ CEF_MAX_CONNECTIONS_PER_PROXY_MIN_VALUE.. CEF_MAX_CONNECTIONS_PER_PROXY_MAX_VALUE] ) then
begin
FMaxConnectionsPerProxy : = aValue;
FUpdatePreferences : = True ;
end ;
end ;
procedure TChromiumCore. SetCustomHeaderName( const aValue : ustring) ;
begin
if ( FCustomHeaderName < > aValue) then
begin
FCustomHeaderName : = aValue;
FAddCustomHeader : = ( length( FCustomHeaderName) > 0 ) and ( length( FCustomHeaderValue) > 0 ) ;
end ;
end ;
procedure TChromiumCore. SetCustomHeaderValue( const aValue : ustring) ;
begin
if ( FCustomHeaderValue < > aValue) then
begin
FCustomHeaderValue : = aValue;
FAddCustomHeader : = ( length( FCustomHeaderName) > 0 ) and ( length( FCustomHeaderValue) > 0 ) ;
end ;
end ;
function TChromiumCore. DeleteCookies( const url, cookieName: ustring; aDeleteImmediately : boolean ) : boolean ;
var
TempManager : ICefCookieManager;
TempCallback : ICefDeleteCookiesCallback;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
begin
2020-05-07 11:46:48 +02:00
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
begin
TempManager : = TempContext. GetCookieManager( nil ) ;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempManager < > nil ) then
try
if aDeleteImmediately then
TempCallBack : = nil
else
TempCallback : = TCefCustomDeleteCookiesCallback. Create( self) ;
Result : = TempManager. DeleteCookies( url, cookieName, TempCallback) ;
finally
TempCallback : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
end ;
function TChromiumCore. VisitAllCookies( aID : integer ) : boolean ;
var
TempManager : ICefCookieManager;
TempVisitor : ICefCookieVisitor;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
begin
2020-05-07 11:46:48 +02:00
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
begin
TempManager : = TempContext. GetCookieManager( nil ) ;
if ( TempManager < > nil ) then
try
TempVisitor : = TCefCustomCookieVisitor. Create( self, aID) ;
Result : = TempManager. VisitAllCookies( TempVisitor) ;
finally
TempVisitor : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
end ;
2019-12-21 12:30:16 +01:00
function TChromiumCore. VisitURLCookies( const url : ustring;
includeHttpOnly : boolean ;
aID : integer ) : boolean ;
2019-11-10 00:24:26 +01:00
var
TempManager : ICefCookieManager;
TempVisitor : ICefCookieVisitor;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
begin
2020-05-07 11:46:48 +02:00
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
begin
TempManager : = TempContext. GetCookieManager( nil ) ;
if ( TempManager < > nil ) then
try
TempVisitor : = TCefCustomCookieVisitor. Create( self, aID) ;
Result : = TempManager. VisitUrlCookies( url, includeHttpOnly, TempVisitor) ;
finally
TempVisitor : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
end ;
function TChromiumCore. SetCookie( const url, name_, value, domain, path: ustring;
2019-12-21 12:30:16 +01:00
secure, httponly, hasExpires: Boolean ;
const creation, lastAccess, expires: TDateTime;
2020-05-23 15:00:44 +02:00
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
2019-12-21 12:30:16 +01:00
aSetImmediately : boolean ;
aID : integer ) : Boolean ;
2019-11-10 00:24:26 +01:00
var
TempManager : ICefCookieManager;
TempCallback : ICefSetCookieCallback;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
begin
2020-05-07 11:46:48 +02:00
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
begin
TempManager : = TempContext. GetCookieManager( nil ) ;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempManager < > nil ) then
try
if aSetImmediately then
TempCallback : = nil
else
TempCallback : = TCefCustomSetCookieCallback. Create( self, aID) ;
Result : = TempManager. SetCookie( url, name_, value, domain, path,
secure, httponly, hasExpires,
creation, lastAccess, expires,
2020-05-23 15:00:44 +02:00
same_site, priority,
2020-05-07 11:46:48 +02:00
TempCallback) ;
finally
TempCallback : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
end ;
function TChromiumCore. FlushCookieStore( aFlushImmediately : boolean ) : boolean ;
var
TempManager : ICefCookieManager;
TempCallback : ICefCompletionCallback;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
begin
2020-05-07 11:46:48 +02:00
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
begin
TempManager : = TempContext. GetCookieManager( nil ) ;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempManager < > nil ) then
try
if aFlushImmediately then
TempCallback : = nil
else
TempCallback : = TCefFlushStoreCompletionCallback. Create( self) ;
Result : = TempManager. FlushStore( TempCallback) ;
finally
TempCallback : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
2019-12-21 12:30:16 +01:00
end ;
2019-11-10 00:24:26 +01:00
function TChromiumCore. ClearCertificateExceptions( aClearImmediately : boolean ) : boolean ;
var
TempCallback : ICefCompletionCallback;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
try
if aClearImmediately then
TempCallback : = nil
else
TempCallback : = TCefClearCertificateExceptionsCompletionCallback. Create( self) ;
TempContext. ClearCertificateExceptions( TempCallback) ;
Result : = True ;
finally
TempCallback : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
function TChromiumCore. ClearHttpAuthCredentials( aClearImmediately : boolean ) : boolean ;
var
TempCallback : ICefCompletionCallback;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
try
if aClearImmediately then
TempCallback : = nil
else
TempCallback : = TCefClearHttpAuthCredentialsCompletionCallback. Create( self) ;
TempContext. ClearHttpAuthCredentials( TempCallback) ;
Result : = True ;
finally
TempCallback : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
// If aCloseImmediately is false then OnAllConnectionsClosed is triggered when the connections are closed
function TChromiumCore. CloseAllConnections( aCloseImmediately : boolean ) : boolean ;
var
TempCallback : ICefCompletionCallback;
2020-05-07 11:46:48 +02:00
TempContext : ICefRequestContext;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-05-07 11:46:48 +02:00
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
2019-11-10 00:24:26 +01:00
2020-05-07 11:46:48 +02:00
if ( TempContext < > nil ) then
try
if aCloseImmediately then
TempCallback : = nil
else
TempCallback : = TCefCloseAllConnectionsCompletionCallback. Create( self) ;
TempContext. CloseAllConnections( TempCallback) ;
Result : = True ;
finally
TempCallback : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
end ;
// Leave aFrameName empty to get the HTML source from the main frame
2021-05-26 19:32:10 +02:00
// The TChromiumCore.OnTextResultAvailable event will be triggered with the HTML contents
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. RetrieveHTML( const aFrameName : ustring) ;
var
TempFrame : ICefFrame;
TempVisitor : ICefStringVisitor;
begin
if Initialized then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
try
TempVisitor : = TCustomCefStringVisitor. Create( self) ;
TempFrame. GetSource( TempVisitor) ;
finally
TempVisitor : = nil ;
end ;
end ;
end ;
procedure TChromiumCore. RetrieveHTML( const aFrame : ICefFrame) ;
var
2023-08-07 20:21:42 +02:00
TempFrame : ICefFrame;
2019-11-10 00:24:26 +01:00
TempVisitor : ICefStringVisitor;
begin
2023-08-07 20:21:42 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
try
2023-08-07 20:21:42 +02:00
if ( aFrame < > nil ) and aFrame. IsValid then
TempFrame : = aFrame
else
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
TempVisitor : = TCustomCefStringVisitor. Create( self) ;
2023-08-07 20:21:42 +02:00
TempFrame. GetSource( TempVisitor) ;
2019-11-10 00:24:26 +01:00
finally
TempVisitor : = nil ;
end ;
end ;
procedure TChromiumCore. RetrieveHTML( const aFrameIdentifier : int64 ) ;
var
TempFrame : ICefFrame;
TempVisitor : ICefStringVisitor;
begin
if Initialized then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
try
TempVisitor : = TCustomCefStringVisitor. Create( self) ;
TempFrame. GetSource( TempVisitor) ;
finally
TempVisitor : = nil ;
end ;
end ;
end ;
procedure TChromiumCore. RetrieveText( const aFrameName : ustring) ;
var
TempFrame : ICefFrame;
TempVisitor : ICefStringVisitor;
begin
if Initialized then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
try
TempVisitor : = TCustomCefStringVisitor. Create( self) ;
TempFrame. GetText( TempVisitor) ;
finally
TempVisitor : = nil ;
end ;
end ;
end ;
procedure TChromiumCore. RetrieveText( const aFrame : ICefFrame) ;
var
2023-08-07 20:21:42 +02:00
TempFrame : ICefFrame;
2019-11-10 00:24:26 +01:00
TempVisitor : ICefStringVisitor;
begin
2023-08-07 20:21:42 +02:00
if Initialized then
2019-11-10 00:24:26 +01:00
try
2023-08-07 20:21:42 +02:00
if ( aFrame < > nil ) and aFrame. IsValid then
TempFrame : = aFrame
else
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
TempVisitor : = TCustomCefStringVisitor. Create( self) ;
2023-08-07 20:21:42 +02:00
TempFrame. GetText( TempVisitor) ;
2019-11-10 00:24:26 +01:00
finally
TempVisitor : = nil ;
end ;
end ;
procedure TChromiumCore. RetrieveText( const aFrameIdentifier : int64 ) ;
var
TempFrame : ICefFrame;
TempVisitor : ICefStringVisitor;
begin
if Initialized then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
try
TempVisitor : = TCustomCefStringVisitor. Create( self) ;
TempFrame. GetText( TempVisitor) ;
finally
TempVisitor : = nil ;
end ;
end ;
end ;
procedure TChromiumCore. GetNavigationEntries( currentOnly: Boolean ) ;
var
TempVisitor : ICefNavigationEntryVisitor;
begin
if Initialized then
try
TempVisitor : = TCustomCefNavigationEntryVisitor. Create( self) ;
2020-05-07 11:46:48 +02:00
Browser. Host. GetNavigationEntries( TempVisitor, currentOnly) ;
2019-11-10 00:24:26 +01:00
finally
TempVisitor : = nil ;
end ;
end ;
function TChromiumCore. GetFrameNames( var aFrameNames : TStrings) : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. GetFrameNames( aFrameNames) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. GetFrameIdentifiers( var aFrameCount : NativeUInt ; var aFrameIdentifierArray : TCefFrameIdentifierArray) : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and Browser. GetFrameIdentifiers( aFrameCount, aFrameIdentifierArray) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. UpdatePreferences;
var
TempTask: ICefTask;
begin
if Initialized then
try
TempTask : = TCefUpdatePrefsTask. Create( self) ;
CefPostTask( TID_UI, TempTask) ;
finally
TempTask : = nil ;
end ;
end ;
procedure TChromiumCore. SavePreferences( const aFileName : string ) ;
var
TempTask: ICefTask;
begin
if Initialized and ( length( aFileName) > 0 ) then
try
FPrefsFileName : = aFileName;
TempTask : = TCefSavePrefsTask. Create( self) ;
CefPostTask( TID_UI, TempTask) ;
finally
TempTask : = nil ;
end ;
end ;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2020-04-03 17:57:52 +02:00
function TChromiumCore. SetNewBrowserParent( aNewParentHwnd : HWND) : boolean ;
2019-11-10 00:24:26 +01:00
var
TempHandle : HWND;
begin
Result : = False ;
if Initialized then
begin
2020-05-07 11:46:48 +02:00
TempHandle : = Browser. Host. WindowHandle;
2019-11-10 00:24:26 +01:00
Result : = ( TempHandle < > 0 ) and ( SetParent( TempHandle, aNewParentHwnd) < > 0 ) ;
end ;
end ;
2020-04-03 17:57:52 +02:00
{$ENDIF}
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. ResolveHost( const aURL : ustring) ;
var
TempCallback : ICefResolveCallback;
begin
if Initialized and ( length( aURL) > 0 ) then
try
TempCallback : = TCefCustomResolveCallback. Create( self) ;
2020-05-07 11:46:48 +02:00
Browser. Host. RequestContext. ResolveHost( aURL, TempCallback) ;
2019-11-10 00:24:26 +01:00
finally
TempCallback : = nil ;
end ;
end ;
function TChromiumCore. IsSameBrowser( const aBrowser : ICefBrowser) : boolean ;
begin
2020-05-07 11:46:48 +02:00
Result : = Initialized and ( aBrowser < > nil ) and Browser. IsSame( aBrowser) ;
2019-11-10 00:24:26 +01:00
end ;
// Calling ExecuteTaskOnCefThread function will trigger the TChromiumCore.OnExecuteTaskOnCefThread event.
// "aCefThreadId" indicates the CEF thread on which TChromiumCore.OnExecuteTaskOnCefThread will be executed.
// "aTaskID" is a custom ID used to identify the task that triggered the TChromiumCore.OnExecuteTaskOnCefThread event.
// "aDelayMs" is an optional delay in milliseconds to trigger the TChromiumCore.OnExecuteTaskOnCefThread event.
function TChromiumCore. ExecuteTaskOnCefThread( aCefThreadId : TCefThreadId; aTaskID : cardinal ; aDelayMs : Int64 ) : boolean ;
var
TempTask : ICefTask;
begin
Result : = False ;
try
if Initialized then
begin
TempTask : = TCefGenericTask. Create( self, aTaskID) ;
if ( aDelayMs < > 0 ) then
Result : = CefPostDelayedTask( aCefThreadId, TempTask, aDelayMs)
else
Result : = CefPostTask( aCefThreadId, TempTask) ;
end ;
finally
TempTask : = nil ;
end ;
end ;
2020-07-02 12:49:21 +02:00
procedure TChromiumCore. ClearCache;
begin
ExecuteDevToolsMethod( 0 , 'Network.clearBrowserCache' , nil ) ;
end ;
2022-08-29 22:45:28 +02:00
procedure TChromiumCore. ToggleAudioMuted;
var
TempTask : ICefTask;
begin
if CefCurrentlyOn( TID_UI) then
doToggleAudioMuted
else
if Initialized then
try
TempTask : = TCefToggleAudioMutedTask. Create( self) ;
CefPostTask( TID_UI, TempTask) ;
finally
TempTask : = nil ;
end ;
end ;
2020-04-19 22:47:20 +02:00
function TChromiumCore. GetRequestContext : ICefRequestContext;
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Result : = Browser. Host. RequestContext
2020-04-19 22:47:20 +02:00
else
Result : = nil ;
end ;
function TChromiumCore. GetMediaRouter : ICefMediaRouter;
var
TempRequestContext : ICefRequestContext;
begin
TempRequestContext : = RequestContext;
if ( TempRequestContext < > nil ) then
2021-04-18 19:36:20 +02:00
Result : = TempRequestContext. GetMediaRouter( nil )
2020-04-19 22:47:20 +02:00
else
Result : = nil ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. SimulateMouseWheel( aDeltaX, aDeltaY : integer ) ;
var
TempEvent : TCefMouseEvent;
begin
if Initialized then
begin
TempEvent. x : = 0 ;
TempEvent. y : = 0 ;
TempEvent. modifiers : = EVENTFLAG_NONE;
2020-05-07 11:46:48 +02:00
Browser. Host. SendMouseWheelEvent( @ TempEvent, aDeltaX, aDeltaY) ;
2019-11-10 00:24:26 +01:00
end ;
end ;
procedure TChromiumCore. doUpdatePreferences( const aBrowser: ICefBrowser) ;
2020-04-20 12:02:16 +02:00
var
TempLanguagesList : ustring;
2019-11-10 00:24:26 +01:00
begin
FUpdatePreferences : = False ;
// The preferences registered in CEF are defined in :
// /libcef/browser/prefs/browser_prefs.cc
UpdateProxyPrefs( aBrowser) ;
UpdatePreference( aBrowser, 'enable_do_not_track' , FDoNotTrack) ;
UpdatePreference( aBrowser, 'enable_referrers' , FSendReferrer) ;
UpdatePreference( aBrowser, 'enable_a_ping' , FHyperlinkAuditing) ;
UpdatePreference( aBrowser, 'plugins.allow_outdated' , FAllowOutdatedPlugins) ;
UpdatePreference( aBrowser, 'plugins.always_authorize' , FAlwaysAuthorizePlugins) ;
2022-10-05 17:36:09 +02:00
UpdatePreference( aBrowser, 'plugins.always_open_pdf_externally' , FAlwaysOpenPDFExternally) ;
2019-11-10 00:24:26 +01:00
UpdatePreference( aBrowser, 'browser.enable_spellchecking' , FSpellChecking) ;
UpdateStringListPref( aBrowser, 'spellcheck.dictionaries' , FSpellCheckerDicts) ;
UpdatePreference( aBrowser, 'settings.force_google_safesearch' , FSafeSearch) ;
UpdatePreference( aBrowser, 'settings.force_youtube_restrict' , FYouTubeRestrict) ;
UpdatePreference( aBrowser, 'printing.enabled' , FPrintingEnabled) ;
2020-04-20 12:02:16 +02:00
TempLanguagesList : = FAcceptLanguageList;
2020-06-13 17:24:22 +02:00
if ( length( TempLanguagesList) = 0 ) and ( FOptions < > nil ) then
2020-04-20 12:02:16 +02:00
TempLanguagesList : = FOptions. AcceptLanguageList;
if ( length( TempLanguagesList) = 0 ) then
TempLanguagesList : = GlobalCEFApp. AcceptLanguageList;
if ( length( TempLanguagesList) = 0 ) then
TempLanguagesList : = 'en-US,en' ;
UpdatePreference( aBrowser, 'intl.accept_languages' , TempLanguagesList) ;
2019-12-03 12:12:19 +01:00
2020-03-04 09:42:32 +01:00
case FAcceptCookies of
cpAllow : UpdatePreference( aBrowser, 'profile.default_content_setting_values.cookies' , CEF_COOKIE_PREF_ALLOW) ;
cpBlock : UpdatePreference( aBrowser, 'profile.default_content_setting_values.cookies' , CEF_COOKIE_PREF_BLOCK) ;
else UpdatePreference( aBrowser, 'profile.default_content_setting_values.cookies' , CEF_COOKIE_PREF_DEFAULT) ;
end ;
UpdatePreference( aBrowser, 'profile.block_third_party_cookies' , FBlock3rdPartyCookies) ;
2019-11-10 00:24:26 +01:00
if ( FMaxConnectionsPerProxy < > CEF_MAX_CONNECTIONS_PER_PROXY_DEFAULT_VALUE) then
UpdatePreference( aBrowser, 'net.max_connections_per_proxy' , FMaxConnectionsPerProxy) ;
case FWebRTCIPHandlingPolicy of
hpDefaultPublicAndPrivateInterfaces :
UpdatePreference( aBrowser, 'webrtc.ip_handling_policy' , 'default_public_and_private_interfaces' ) ;
hpDefaultPublicInterfaceOnly :
UpdatePreference( aBrowser, 'webrtc.ip_handling_policy' , 'default_public_interface_only' ) ;
hpDisableNonProxiedUDP :
UpdatePreference( aBrowser, 'webrtc.ip_handling_policy' , 'disable_non_proxied_udp' ) ;
end ;
if ( FWebRTCMultipleRoutes < > STATE_DEFAULT) then
UpdatePreference( aBrowser, 'webrtc.multiple_routes_enabled' , ( FWebRTCMultipleRoutes = STATE_ENABLED) ) ;
if ( FWebRTCNonProxiedUDP < > STATE_DEFAULT) then
UpdatePreference( aBrowser, 'webrtc.nonproxied_udp_enabled' , ( FWebRTCNonProxiedUDP = STATE_ENABLED) ) ;
2020-08-05 16:11:50 +02:00
2020-09-30 12:43:48 +02:00
UpdatePreference( aBrowser, 'net.quic_allowed' , FQuicAllowed) ;
2020-08-22 14:56:24 +02:00
UpdatePreference( aBrowser, 'webkit.webprefs.javascript_enabled' , FJavascriptEnabled) ;
UpdatePreference( aBrowser, 'webkit.webprefs.loads_images_automatically' , FLoadImagesAutomatically) ;
2021-10-22 19:19:57 +02:00
2023-08-10 18:08:50 +02:00
if ( FHighEfficiencyModeState < > kDefault) then
2023-08-07 20:21:42 +02:00
UpdatePreference( aBrowser, 'performance_tuning.high_efficiency_mode.state' , integer( FHighEfficiencyModeState) ) ;
2023-01-25 18:06:32 +01:00
2023-08-10 18:08:50 +02:00
if ( FBatterySaverModeState < > bsmsDefault) then
2023-01-25 18:06:32 +01:00
UpdatePreference( aBrowser, 'performance_tuning.battery_saver_mode.state' , integer( FBatterySaverModeState) ) ;
2021-10-22 19:19:57 +02:00
if assigned( FOnPrefsUpdated) then
FOnPrefsUpdated( self) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doUpdateOwnPreferences;
begin
2020-05-07 11:46:48 +02:00
if Initialized then doUpdatePreferences( Browser) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. UpdateProxyPrefs( const aBrowser: ICefBrowser) : boolean ;
var
TempError : ustring;
TempProxy : ICefValue;
TempValue : ICefValue;
TempDict : ICefDictionaryValue;
begin
Result : = False ;
try
try
if ( aBrowser < > nil ) and
( aBrowser. Host < > nil ) and
aBrowser. Host. RequestContext. CanSetPreference( 'proxy' ) then
begin
TempProxy : = TCefValueRef. New;
TempValue : = TCefValueRef. New;
TempDict : = TCefDictionaryValueRef. New;
case FProxyType of
CEF_PROXYTYPE_AUTODETECT :
begin
TempValue. SetString( 'auto_detect' ) ;
TempDict. SetValue( 'mode' , TempValue) ;
end ;
CEF_PROXYTYPE_SYSTEM :
begin
TempValue. SetString( 'system' ) ;
TempDict. SetValue( 'mode' , TempValue) ;
end ;
CEF_PROXYTYPE_FIXED_SERVERS :
begin
TempValue. SetString( 'fixed_servers' ) ;
TempDict. SetValue( 'mode' , TempValue) ;
case FProxyScheme of
psSOCKS4 : TempDict. SetString( 'server' , 'socks4://' + FProxyServer + ':' + inttostr( FProxyPort) ) ;
psSOCKS5 : TempDict. SetString( 'server' , 'socks5://' + FProxyServer + ':' + inttostr( FProxyPort) ) ;
else TempDict. SetString( 'server' , FProxyServer + ':' + inttostr( FProxyPort) ) ;
end ;
if ( length( FProxyByPassList) > 0 ) then TempDict. SetString( 'bypass_list' , FProxyByPassList) ;
end ;
CEF_PROXYTYPE_PAC_SCRIPT :
begin
TempValue. SetString( 'pac_script' ) ;
TempDict. SetValue( 'mode' , TempValue) ;
TempDict. SetString( 'pac_url' , FProxyScriptURL) ;
end ;
else // CEF_PROXYTYPE_DIRECT
begin
TempValue. SetString( 'direct' ) ;
TempDict. SetValue( 'mode' , TempValue) ;
end ;
end ;
Result : = TempProxy. SetDictionary( TempDict) and
aBrowser. Host. RequestContext. SetPreference( 'proxy' , TempProxy, TempError) ;
if not( Result ) then
OutputDebugMessage( 'TChromiumCore.UpdateProxyPrefs error : ' + quotedstr( TempError) ) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.UpdateProxyPrefs' , e) then raise ;
end ;
finally
TempProxy : = nil ;
TempValue : = nil ;
TempDict : = nil ;
end ;
end ;
function TChromiumCore. UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; aValue : boolean ) : boolean ;
var
TempError : ustring;
TempValue : ICefValue;
begin
Result : = False ;
try
try
if ( aBrowser < > nil ) and
( aBrowser. Host < > nil ) and
aBrowser. Host. RequestContext. CanSetPreference( aName) then
begin
TempValue : = TCefValueRef. New;
2019-11-24 18:19:49 +01:00
TempValue. SetBool( aValue) ;
2019-11-10 00:24:26 +01:00
Result : = aBrowser. Host. RequestContext. SetPreference( aName, TempValue, TempError) ;
if not( Result ) then
OutputDebugMessage( 'TChromiumCore.UpdatePreference error : ' + quotedstr( TempError) ) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.UpdatePreference' , e) then raise ;
end ;
finally
TempValue : = nil ;
end ;
end ;
function TChromiumCore. UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; aValue : integer ) : boolean ;
var
TempError : ustring;
TempValue : ICefValue;
begin
Result : = False ;
try
try
if ( aBrowser < > nil ) and
( aBrowser. Host < > nil ) and
aBrowser. Host. RequestContext. CanSetPreference( aName) then
begin
TempValue : = TCefValueRef. New;
TempValue. SetInt( aValue) ;
Result : = aBrowser. Host. RequestContext. SetPreference( aName, TempValue, TempError) ;
if not( Result ) then
OutputDebugMessage( 'TChromiumCore.UpdatePreference error : ' + quotedstr( TempError) ) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.UpdatePreference' , e) then raise ;
end ;
finally
TempValue : = nil ;
end ;
end ;
function TChromiumCore. UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; const aValue : double ) : boolean ;
var
TempError : ustring;
TempValue : ICefValue;
begin
Result : = False ;
try
try
if ( aBrowser < > nil ) and
( aBrowser. Host < > nil ) and
aBrowser. Host. RequestContext. CanSetPreference( aName) then
begin
TempValue : = TCefValueRef. New;
TempValue. SetDouble( aValue) ;
Result : = aBrowser. Host. RequestContext. SetPreference( aName, TempValue, TempError) ;
if not( Result ) then
OutputDebugMessage( 'TChromiumCore.UpdatePreference error : ' + quotedstr( TempError) ) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.UpdatePreference' , e) then raise ;
end ;
finally
TempValue : = nil ;
end ;
end ;
function TChromiumCore. UpdatePreference( const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean ;
var
TempError : ustring;
TempValue : ICefValue;
begin
Result : = False ;
try
try
if ( aBrowser < > nil ) and
( aBrowser. Host < > nil ) and
aBrowser. Host. RequestContext. CanSetPreference( aName) then
begin
TempValue : = TCefValueRef. New;
TempValue. SetString( aValue) ;
Result : = aBrowser. Host. RequestContext. SetPreference( aName, TempValue, TempError) ;
if not( Result ) then
OutputDebugMessage( 'TChromiumCore.UpdatePreference error : ' + quotedstr( TempError) ) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.UpdatePreference' , e) then raise ;
end ;
finally
TempValue : = nil ;
end ;
end ;
function TChromiumCore. UpdatePreference( const aBrowser: ICefBrowser; const aName : ustring; const aValue : TStringList) : boolean ;
var
TempError : ustring;
TempValue : ICefValue;
TempList : ICefListValue;
i : NativeUInt ;
TempSize : NativeUInt ;
begin
Result : = False ;
try
try
if ( aValue < > nil ) and
( aValue. Count > 0 ) and
( aBrowser < > nil ) and
( aBrowser. Host < > nil ) and
aBrowser. Host. RequestContext. CanSetPreference( aName) then
begin
TempSize : = aValue. Count;
TempList : = TCefListValueRef. New;
if TempList. SetSize( TempSize) then
begin
i : = 0 ;
while ( i < TempSize) do
begin
TempList. SetString( i, aValue[ i] ) ;
inc( i) ;
end ;
TempValue : = TCefValueRef. New;
Result : = TempValue. SetList( TempList) and
aBrowser. Host. RequestContext. SetPreference( aName, TempValue, TempError) ;
if not( Result ) then
OutputDebugMessage( 'TChromiumCore.UpdatePreference error : ' + quotedstr( TempError) ) ;
end ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.UpdatePreference' , e) then raise ;
end ;
finally
TempValue : = nil ;
TempList : = nil ;
end ;
end ;
function TChromiumCore. UpdateStringListPref( const aBrowser: ICefBrowser; const aName, aValue : ustring) : boolean ;
var
TempSL : TStringList;
begin
Result : = False ;
TempSL : = nil ;
try
if ( length( aName) > 0 ) and ( length( aValue) > 0 ) then
begin
TempSL : = TStringList. Create;
TempSL. CommaText : = aValue;
Result : = UpdatePreference( aBrowser, aName, TempSL) ;
end ;
finally
if ( TempSL < > nil ) then FreeAndNil( TempSL) ;
end ;
end ;
function TChromiumCore. doSavePreferences : boolean ;
begin
2020-07-17 12:56:43 +02:00
Result : = Initialized and
TCEFJson. SaveToFile( Browser. Host. RequestContext. GetAllPreferences( True ) , FPrefsFileName) ;
2019-11-10 00:24:26 +01:00
2020-07-17 12:56:43 +02:00
{$IFDEF MSWINDOWS}
SendCompMessage( CEF_PREFERENCES_SAVED, Ord( Result ) ) ;
2019-11-10 00:24:26 +01:00
{$ENDIF}
end ;
procedure TChromiumCore. doResolvedHostAvailable( result : TCefErrorCode; const resolvedIps: TStrings) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnResolvedHostAvailable) then
FOnResolvedHostAvailable( self, result , resolvedIps) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doNavigationVisitorResultAvailable( const entry : ICefNavigationEntry;
2019-11-20 10:45:46 +01:00
current : Boolean ;
index : Integer ;
total : Integer ) : boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
if assigned( FOnNavigationVisitorResultAvailable) then
2020-09-15 16:31:49 +02:00
FOnNavigationVisitorResultAvailable( self, entry, current, index , total, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doDownloadImageFinished( const imageUrl : ustring;
2019-11-20 10:45:46 +01:00
httpStatusCode : Integer ;
const image : ICefImage) ;
2019-11-10 00:24:26 +01:00
begin
if assigned( FOnDownloadImageFinished) then
FOnDownloadImageFinished( self, imageUrl, httpStatusCode, image) ;
end ;
procedure TChromiumCore. doOnCookiesStoreFlushed;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnCookiesFlushed) then
FOnCookiesFlushed( self) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doCertificateExceptionsCleared;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnCertificateExceptionsCleared) then
FOnCertificateExceptionsCleared( self) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doHttpAuthCredentialsCleared;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnHttpAuthCredentialsCleared) then
FOnHttpAuthCredentialsCleared( self) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doAllConnectionsClosed;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnAllConnectionsClosed) then
FOnAllConnectionsClosed( self) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnExecuteTaskOnCefThread( aTaskID : cardinal ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnExecuteTaskOnCefThread) then
FOnExecuteTaskOnCefThread( self, aTaskID) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnCookiesVisited( const name_, value, domain, path: ustring;
2019-11-20 10:45:46 +01:00
secure, httponly, hasExpires: Boolean ;
const creation, lastAccess, expires: TDateTime;
count, total, aID : Integer ;
2020-05-23 15:00:44 +02:00
same_site : TCefCookieSameSite;
priority : TCefCookiePriority;
2019-11-20 10:45:46 +01:00
var aDeleteCookie, aResult : Boolean ) ;
2019-11-10 00:24:26 +01:00
begin
if assigned( FOnCookiesVisited) then
FOnCookiesVisited( self, name_, value, domain, path,
secure, httponly, hasExpires,
creation, lastAccess, expires,
count, total, aID,
2020-05-23 15:00:44 +02:00
same_site, priority,
2019-11-10 00:24:26 +01:00
aDeleteCookie, aResult) ;
end ;
procedure TChromiumCore. doOnCookieVisitorDestroyed( aID : integer ) ;
begin
if assigned( FOnCookieVisitorDestroyed) then
FOnCookieVisitorDestroyed( self, aID) ;
end ;
procedure TChromiumCore. doOnCookieSet( aSuccess : boolean ; aID : integer ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnCookieSet) then
FOnCookieSet( self, aSuccess, aID) ;
2019-11-10 00:24:26 +01:00
end ;
2019-12-10 16:49:07 +01:00
procedure TChromiumCore. doUpdateZoomStep( aInc : boolean ) ;
var
TempPct, TempPrev, TempNext : double ;
i : integer ;
begin
if not( Initialized) or ( FZoomStepCS = nil ) then exit;
try
FZoomStepCS. Acquire;
if ( FZoomStep in [ ZOOM_STEP_MIN.. ZOOM_STEP_MAX] ) then
begin
if aInc then
begin
if ( FZoomStep < ZOOM_STEP_MAX) then
begin
inc( FZoomStep) ;
UpdateHostZoomPct( ZoomStepValues[ FZoomStep] ) ;
end ;
end
else
if ( FZoomStep > ZOOM_STEP_MIN) then
begin
dec( FZoomStep) ;
UpdateHostZoomPct( ZoomStepValues[ FZoomStep] ) ;
end ;
end
else
begin
TempPct : = ZoomPct;
TempPrev : = 0 ;
i : = ZOOM_STEP_MIN;
repeat
if ( i < = ZOOM_STEP_MAX) then
TempNext : = ZoomStepValues[ i]
else
TempNext : = ZoomStepValues[ ZOOM_STEP_MAX] * 2 ;
if ( TempPct > TempPrev) and ( TempPct < TempNext) then
begin
if aInc then
begin
if ( i < = ZOOM_STEP_MAX) then
begin
FZoomStep : = i;
UpdateHostZoomPct( ZoomStepValues[ FZoomStep] ) ;
end ;
end
else
if ( i > ZOOM_STEP_MIN) then
begin
FZoomStep : = pred( i) ;
UpdateHostZoomPct( ZoomStepValues[ FZoomStep] ) ;
end ;
i : = ZOOM_STEP_MAX + 2 ;
end
else
begin
TempPrev : = TempNext;
inc( i) ;
end ;
until ( i > succ( ZOOM_STEP_MAX) ) ;
end ;
finally
FZoomStepCS. Release;
2020-06-21 21:27:55 +02:00
if assigned( FOnZoomPctAvailable) then
FOnZoomPctAvailable( self, ZoomPct) ;
2019-12-10 16:49:07 +01:00
end ;
end ;
procedure TChromiumCore. doUpdateZoomPct( aInc : boolean ) ;
var
TempNewZoom : double ;
i : integer ;
begin
if not( Initialized) or ( FZoomStepCS = nil ) then exit;
TempNewZoom : = ZoomPct;
try
FZoomStepCS. Acquire;
if aInc then
TempNewZoom : = min( TempNewZoom + ZOOM_PCT_DELTA, ZoomStepValues[ ZOOM_STEP_MAX] )
else
TempNewZoom : = max( TempNewZoom - ZOOM_PCT_DELTA, ZoomStepValues[ ZOOM_STEP_MIN] ) ;
for i : = ZOOM_STEP_MIN to ZOOM_STEP_MAX do
if ( TempNewZoom = ZoomStepValues[ i] ) then break;
FZoomStep : = i;
UpdateHostZoomPct( TempNewZoom) ;
finally
FZoomStepCS. Release;
2020-06-21 21:27:55 +02:00
if assigned( FOnZoomPctAvailable) then
FOnZoomPctAvailable( self, TempNewZoom) ;
2019-12-10 16:49:07 +01:00
end ;
end ;
procedure TChromiumCore. doReadZoom;
begin
if Initialized and assigned( FOnZoomPctAvailable) then
FOnZoomPctAvailable( self, ZoomPct) ;
end ;
procedure TChromiumCore. doSetZoomLevel( const aValue : double ) ;
var
TempZoom : double ;
i : integer ;
begin
if not( Initialized) or ( FZoomStepCS = nil ) then exit;
try
FZoomStepCS. Acquire;
UpdateHostZoomLevel( aValue) ;
TempZoom : = ZoomPct;
for i : = ZOOM_STEP_MIN to ZOOM_STEP_MAX do
if ( TempZoom = ZoomStepValues[ i] ) then break;
FZoomStep : = i;
finally
FZoomStepCS. Release;
2020-06-21 21:27:55 +02:00
if assigned( FOnZoomPctAvailable) then
FOnZoomPctAvailable( self, ZoomPct) ;
2019-12-10 16:49:07 +01:00
end ;
end ;
procedure TChromiumCore. doSetZoomPct( const aValue : double ) ;
var
TempZoom : double ;
i : integer ;
begin
if not( Initialized) or ( FZoomStepCS = nil ) then exit;
try
FZoomStepCS. Acquire;
if ( aValue > = ZoomStepValues[ ZOOM_STEP_MIN] ) and
( aValue < = ZoomStepValues[ ZOOM_STEP_MAX] ) then
begin
UpdateHostZoomPct( aValue) ;
TempZoom : = ZoomPct;
for i : = ZOOM_STEP_MIN to ZOOM_STEP_MAX do
if ( TempZoom = ZoomStepValues[ i] ) then break;
FZoomStep : = i;
end ;
finally
FZoomStepCS. Release;
2020-06-21 21:27:55 +02:00
if assigned( FOnZoomPctAvailable) then
FOnZoomPctAvailable( self, ZoomPct) ;
2019-12-10 16:49:07 +01:00
end ;
end ;
procedure TChromiumCore. doSetZoomStep( aValue : byte ) ;
begin
if not( Initialized) or ( FZoomStepCS = nil ) then exit;
try
FZoomStepCS. Acquire;
if ( aValue in [ ZOOM_STEP_MIN.. ZOOM_STEP_MAX] ) then
begin
FZoomStep : = aValue;
UpdateHostZoomPct( ZoomStepValues[ aValue] ) ;
end ;
finally
FZoomStepCS. Release;
2020-06-21 21:27:55 +02:00
if assigned( FOnZoomPctAvailable) then
FOnZoomPctAvailable( self, ZoomPct) ;
2019-12-10 16:49:07 +01:00
end ;
end ;
2020-04-19 22:47:20 +02:00
procedure TChromiumCore. doMediaRouteCreateFinished( result : TCefMediaRouterCreateResult;
const error : ustring;
const route : ICefMediaRoute) ;
begin
if assigned( FOnMediaRouteCreateFinished) then
FOnMediaRouteCreateFinished( self, result , error, route) ;
end ;
2020-07-15 14:56:41 +02:00
procedure TChromiumCore. doOnMediaSinkDeviceInfo( const ip_address: ustring; port: integer ; const model_name: ustring) ;
begin
if assigned( FOnMediaSinkDeviceInfo) then
FOnMediaSinkDeviceInfo( self, ip_address, port, model_name) ;
end ;
2020-11-22 16:42:52 +01:00
procedure TChromiumCore. doBrowserNavigation( aTask : TCefBrowserNavigation) ;
begin
if Initialized then
case aTask of
bnBack : if CanGoBack then Browser. GoBack;
bnForward : if CanGoForward then Browser. GoForward;
bnReload : Browser. Reload;
bnReloadIgnoreCache : Browser. ReloadIgnoreCache;
bnStopLoad : Browser. StopLoad;
end ;
end ;
2022-08-29 22:45:28 +02:00
procedure TChromiumCore. doSetAudioMuted( aValue : boolean ) ;
begin
if Initialized then
Browser. Host. SetAudioMuted( aValue) ;
end ;
procedure TChromiumCore. doToggleAudioMuted;
begin
if Initialized then
AudioMuted : = not( AudioMuted) ;
end ;
2023-03-11 17:29:30 +01:00
procedure TChromiumCore. doEnableFocus;
begin
FCanFocus : = True ;
if assigned( FOnCanFocus) then
FOnCanFocus( self) ;
end ;
2021-02-06 17:38:44 +01:00
{$IFDEF LINUX}
procedure TChromiumCore. UpdateBrowserSize( aLeft, aTop, aWidth, aHeight : integer ) ;
{$IFDEF FPC}
2020-12-30 19:40:07 +01:00
var
TempHandle : TCefWindowHandle;
TempChanges : TXWindowChanges;
TempXDisplay : PXDisplay;
2021-02-06 17:38:44 +01:00
{$ENDIF}
2020-12-30 19:40:07 +01:00
begin
2021-02-06 17:38:44 +01:00
{$IFDEF FPC}
TempHandle : = WindowHandle;
if ValidCefWindowHandle( TempHandle) then
2020-12-30 19:40:07 +01:00
begin
2021-02-06 17:38:44 +01:00
TempXDisplay : = XDisplay;
2020-12-30 19:40:07 +01:00
if ( TempXDisplay < > nil ) then
begin
2021-02-06 17:38:44 +01:00
TempChanges. x : = aLeft;
TempChanges. y : = aTop;
TempChanges. width : = aWidth;
TempChanges. height : = aHeight;
2020-12-30 19:40:07 +01:00
2021-02-06 17:38:44 +01:00
XConfigureWindow( TempXDisplay, TempHandle, CWX or CWY or CWHeight or CWWidth, @ TempChanges) ;
2020-12-30 19:40:07 +01:00
end ;
end ;
2021-02-06 17:38:44 +01:00
{$ENDIF}
2020-12-30 19:40:07 +01:00
end ;
2021-02-06 17:38:44 +01:00
procedure TChromiumCore. UpdateXWindowVisibility( aVisible : boolean ) ;
{$IFDEF FPC}
2020-12-30 19:40:07 +01:00
var
2021-01-12 20:32:28 +01:00
TempXDisplay : PXDisplay;
2020-12-30 19:40:07 +01:00
TempHandle : TCefWindowHandle;
TempState : TAtom;
TempHidden : TAtom;
2021-02-06 17:38:44 +01:00
{$ENDIF}
2020-12-30 19:40:07 +01:00
begin
2021-02-06 17:38:44 +01:00
{$IFDEF FPC}
TempHandle : = WindowHandle;
if ValidCefWindowHandle( TempHandle) then
2020-12-30 19:40:07 +01:00
begin
2021-02-06 17:38:44 +01:00
TempXDisplay : = XDisplay;
2020-12-30 19:40:07 +01:00
if ( TempXDisplay < > nil ) then
2021-02-06 17:38:44 +01:00
begin
TempState : = XInternAtom( TempXDisplay, '_NET_WM_STATE' , False ) ;
2020-12-30 19:40:07 +01:00
2021-02-06 17:38:44 +01:00
if aVisible then
XChangeProperty( TempXDisplay, TempHandle, TempState, XA_ATOM, 3 2 , PropModeReplace, nil , 0 )
else
2020-12-30 19:40:07 +01:00
begin
2021-02-06 17:38:44 +01:00
TempHidden : = XInternAtom( TempXDisplay, '_NET_WM_STATE_HIDDEN' , False ) ;
XChangeProperty( TempXDisplay, TempHandle, TempState, XA_ATOM, 3 2 , PropModeReplace, @ TempHidden, 1 ) ;
2020-12-30 19:40:07 +01:00
end ;
end ;
end ;
2021-02-06 17:38:44 +01:00
{$ENDIF}
2020-12-30 19:40:07 +01:00
end ;
{$ENDIF}
2019-11-10 00:24:26 +01:00
function TChromiumCore. MustCreateLoadHandler : boolean ;
begin
Result : = assigned( FOnLoadStart) or
assigned( FOnLoadEnd) or
assigned( FOnLoadError) or
assigned( FOnLoadingStateChange) ;
end ;
function TChromiumCore. MustCreateFocusHandler : boolean ;
begin
Result : = assigned( FOnTakeFocus) or
assigned( FOnSetFocus) or
assigned( FOnGotFocus) ;
end ;
function TChromiumCore. MustCreateContextMenuHandler : boolean ;
begin
2022-08-06 12:00:28 +02:00
Result : = assigned( FOnBeforeContextMenu) or
assigned( FOnRunContextMenu) or
assigned( FOnContextMenuCommand) or
assigned( FOnContextMenuDismissed) or
assigned( FOnRunQuickMenu) or
assigned( FOnQuickMenuCommand) or
assigned( FOnQuickMenuDismissed) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. MustCreateDialogHandler : boolean ;
begin
Result : = assigned( FOnFileDialog) ;
end ;
function TChromiumCore. MustCreateKeyboardHandler : boolean ;
begin
Result : = assigned( FOnPreKeyEvent) or
assigned( FOnKeyEvent) ;
end ;
function TChromiumCore. MustCreateDisplayHandler : boolean ;
begin
Result : = assigned( FOnAddressChange) or
assigned( FOnTitleChange) or
assigned( FOnFavIconUrlChange) or
assigned( FOnFullScreenModeChange) or
assigned( FOnTooltip) or
assigned( FOnStatusMessage) or
assigned( FOnConsoleMessage) or
assigned( FOnAutoResize) or
2020-11-19 18:55:17 +01:00
assigned( FOnLoadingProgressChange) or
2022-08-06 12:00:28 +02:00
assigned( FOnCursorChange) or
assigned( FOnMediaAccessChange) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. MustCreateDownloadHandler : boolean ;
begin
2022-05-03 12:43:16 +02:00
Result : = assigned( FOnCanDownload) or
assigned( FOnBeforeDownload) or
2019-11-10 00:24:26 +01:00
assigned( FOnDownloadUpdated) ;
end ;
function TChromiumCore. MustCreateJsDialogHandler : boolean ;
begin
Result : = assigned( FOnJsdialog) or
assigned( FOnBeforeUnloadDialog) or
assigned( FOnResetDialogState) or
assigned( FOnDialogClosed) ;
end ;
function TChromiumCore. MustCreateLifeSpanHandler : boolean ;
begin
Result : = True ;
end ;
function TChromiumCore. MustCreateRenderHandler : boolean ;
begin
Result : = FIsOSR;
end ;
function TChromiumCore. MustCreateRequestHandler : boolean ;
begin
Result : = True ;
end ;
function TChromiumCore. MustCreateDragHandler : boolean ;
begin
Result : = assigned( FOnDragEnter) or
assigned( FOnDraggableRegionsChanged) ;
end ;
function TChromiumCore. MustCreateFindHandler : boolean ;
begin
Result : = assigned( FOnFindResult) ;
end ;
function TChromiumCore. MustCreateResourceRequestHandler : boolean ;
begin
Result : = assigned( FOnBeforeResourceLoad) or
assigned( FOnGetResourceHandler) or
assigned( FOnResourceRedirect) or
assigned( FOnResourceResponse) or
assigned( FOnGetResourceResponseFilter) or
assigned( FOnResourceLoadComplete) or
assigned( FOnProtocolExecution) or
MustCreateCookieAccessFilter;
end ;
function TChromiumCore. MustCreateCookieAccessFilter : boolean ;
begin
Result : = assigned( FOnCanSendCookie) or
assigned( FOnCanSaveCookie) ;
end ;
2020-04-19 22:47:20 +02:00
function TChromiumCore. MustCreateMediaObserver : boolean ;
begin
2022-08-06 12:00:28 +02:00
Result : = assigned( FOnSinks) or
assigned( FOnRoutes) or
2020-04-19 22:47:20 +02:00
assigned( FOnRouteStateChanged) or
assigned( FOnRouteMessageReceived) ;
end ;
2020-05-23 15:00:44 +02:00
function TChromiumCore. MustCreateAudioHandler : boolean ;
begin
Result : = assigned( FOnGetAudioParameters) or
assigned( FOnAudioStreamStarted) or
2022-08-06 12:00:28 +02:00
assigned( FOnAudioStreamPacket) or
2020-05-23 15:00:44 +02:00
assigned( FOnAudioStreamStopped) or
assigned( FOnAudioStreamError) ;
end ;
2020-06-21 21:27:55 +02:00
function TChromiumCore. MustCreateDevToolsMessageObserver : boolean ;
begin
2022-08-06 12:00:28 +02:00
Result : = assigned( FOnDevToolsMessage) or
assigned( FOnDevToolsRawMessage) or
assigned( FOnDevToolsMethodResult) or
2021-01-16 14:35:01 +01:00
assigned( FOnDevToolsMethodRawResult) or
2022-08-06 12:00:28 +02:00
assigned( FOnDevToolsEvent) or
assigned( FOnDevToolsRawEvent) or
assigned( FOnDevToolsAgentAttached) or
2020-06-21 21:27:55 +02:00
assigned( FOnDevToolsAgentDetached) ;
end ;
2020-08-04 17:52:09 +02:00
function TChromiumCore. MustCreateExtensionHandler : boolean ;
begin
2022-08-06 12:00:28 +02:00
Result : = assigned( FOnExtensionLoadFailed) or
assigned( FOnExtensionLoaded) or
assigned( FOnExtensionUnloaded) or
2020-08-04 17:52:09 +02:00
assigned( FOnExtensionBeforeBackgroundBrowser) or
2022-08-06 12:00:28 +02:00
assigned( FOnExtensionBeforeBrowser) or
assigned( FOnExtensionGetActiveBrowser) or
assigned( FOnExtensionCanAccessBrowser) or
2020-08-04 17:52:09 +02:00
assigned( FOnExtensionGetExtensionResource) ;
end ;
2021-04-18 19:36:20 +02:00
function TChromiumCore. MustCreatePrintHandler : boolean ;
begin
2022-08-06 12:00:28 +02:00
Result : = assigned( FOnPrintStart) or
2021-04-18 19:36:20 +02:00
assigned( FOnPrintSettings) or
2022-08-06 12:00:28 +02:00
assigned( FOnPrintDialog) or
assigned( FOnPrintJob) or
assigned( FOnPrintReset) or
2021-04-18 19:36:20 +02:00
assigned( FOnGetPDFPaperSize) ;
end ;
2021-07-29 16:20:34 +02:00
function TChromiumCore. MustCreateFrameHandler : boolean ;
begin
2022-08-06 12:00:28 +02:00
Result : = assigned( FOnFrameCreated) or
2021-07-29 16:20:34 +02:00
assigned( FOnFrameAttached) or
assigned( FOnFrameDetached) or
assigned( FOnMainFrameChanged) ;
end ;
2022-08-06 12:00:28 +02:00
function TChromiumCore. MustCreatePermissionHandler : boolean ;
begin
Result : = assigned( FOnRequestMediaAccessPermission) or
assigned( FOnShowPermissionPrompt) or
assigned( FOnDismissPermissionPrompt) ;
end ;
2022-05-03 12:43:16 +02:00
function TChromiumCore. MustCreateCommandHandler : boolean ;
begin
2023-04-08 19:00:33 +02:00
Result : = assigned( FOnChromeCommand) or
assigned( FOnIsChromeAppMenuItemVisible) or
assigned( FOnIsChromeAppMenuItemEnabled) or
assigned( FOnIsChromePageActionIconVisible) or
assigned( FOnIsChromeToolbarButtonVisible) ;
2022-05-03 12:43:16 +02:00
end ;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
2020-01-28 11:36:34 +01:00
procedure TChromiumCore. PrefsAvailableMsg( aResultOK : boolean ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnPrefsAvailable) then
FOnPrefsAvailable( self, aResultOK) ;
2019-11-10 00:24:26 +01:00
end ;
2020-03-29 17:31:42 +02:00
function TChromiumCore. SendCompMessage( aMsg : cardinal ; aWParam : WPARAM; aLParam : LPARAM) : boolean ;
2019-11-10 00:24:26 +01:00
begin
2020-03-29 17:31:42 +02:00
Result : = ( FCompHandle < > 0 ) and PostMessage( FCompHandle, aMsg, aWParam, aLParam) ;
2019-11-10 00:24:26 +01:00
end ;
{$ENDIF}
procedure TChromiumCore. doTextResultAvailable( const aText : ustring) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnTextResultAvailable) then
FOnTextResultAvailable( self, aText) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. ExecuteJavaScript( const aCode, aScriptURL, aFrameName : ustring; aStartLine : integer ) ;
var
TempFrame : ICefFrame;
begin
try
if Initialized then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. ExecuteJavaScript( aCode, aScriptURL, aStartLine) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.ExecuteJavaScript' , e) then raise ;
end ;
end ;
procedure TChromiumCore. ExecuteJavaScript( const aCode, aScriptURL : ustring; const aFrame : ICefFrame; aStartLine : integer ) ;
begin
try
if Initialized and ( aFrame < > nil ) and aFrame. IsValid then
aFrame. ExecuteJavaScript( aCode, aScriptURL, aStartLine) ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.ExecuteJavaScript' , e) then raise ;
end ;
end ;
procedure TChromiumCore. ExecuteJavaScript( const aCode, aScriptURL : ustring; const aFrameIdentifier : int64 ; aStartLine : integer = 0 ) ;
var
TempFrame : ICefFrame;
begin
try
if Initialized then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. ExecuteJavaScript( aCode, aScriptURL, aStartLine) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.ExecuteJavaScript' , e) then raise ;
end ;
end ;
procedure TChromiumCore. doCookiesDeleted( numDeleted : integer ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnCookiesDeleted) then
FOnCookiesDeleted( self, numDeleted) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doPdfPrintFinished( aResultOK : boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnPdfPrintFinished) then
FOnPdfPrintFinished( self, aResultOK) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. ShowDevTools( const inspectElementAt: TPoint; aWindowInfo: PCefWindowInfo) ;
var
TempPoint : TCefPoint;
TempClient : ICefClient;
TempPPoint : PCefPoint;
2021-02-21 18:41:25 +01:00
TempHandle : TCefWindowHandle;
2019-11-10 00:24:26 +01:00
begin
try
try
if Initialized then
begin
InitializeSettings( FDevBrowserSettings) ;
2021-04-18 19:36:20 +02:00
if ( aWindowInfo = nil ) then
2021-02-21 18:41:25 +01:00
begin
InitializeWindowHandle( TempHandle) ;
DefaultInitializeDevToolsWindowInfo( TempHandle, Rect( 0 , 0 , 0 , 0 ) , '' ) ;
end
2019-11-10 00:24:26 +01:00
else
2021-04-18 19:36:20 +02:00
if ( aWindowInfo < > @ FDevWindowInfo) then
FDevWindowInfo : = aWindowInfo^ ;
2019-11-10 00:24:26 +01:00
TempClient : = TCustomClientHandler. Create( Self, True ) ;
if ( inspectElementAt. x < > low( integer ) ) and
( inspectElementAt. y < > low( integer ) ) then
begin
TempPoint. x : = inspectElementAt. x;
TempPoint. y : = inspectElementAt. y;
TempPPoint : = @ TempPoint;
end
else
TempPPoint : = nil ;
2020-05-07 11:46:48 +02:00
Browser. Host. ShowDevTools( @ FDevWindowInfo, TempClient, @ FDevBrowserSettings, TempPPoint) ;
2019-11-10 00:24:26 +01:00
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.ShowDevTools' , e) then raise ;
end ;
finally
TempClient : = nil ;
end ;
end ;
2020-09-30 12:43:48 +02:00
procedure TChromiumCore. CloseDevTools;
begin
if Initialized then
Browser. Host. CloseDevTools;
end ;
2019-11-10 18:23:39 +01:00
procedure TChromiumCore. CloseDevTools( const aDevToolsWnd : TCefWindowHandle) ;
2019-11-10 00:24:26 +01:00
begin
if Initialized then
begin
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2020-09-30 12:43:48 +02:00
if ValidCefWindowHandle( aDevToolsWnd) then
2019-11-10 00:24:26 +01:00
SetParent( GetWindow( aDevToolsWnd, GW_CHILD) , 0 ) ;
2019-11-10 18:23:39 +01:00
{$ENDIF}
2019-11-10 00:24:26 +01:00
2020-06-21 21:27:55 +02:00
Browser. Host. CloseDevTools;
2019-11-10 00:24:26 +01:00
end ;
end ;
2020-06-21 21:27:55 +02:00
function TChromiumCore. SendDevToolsMessage( const message_: ustring) : boolean ;
begin
Result : = Initialized and Browser. Host. SendDevToolsMessage( message_) ;
end ;
function TChromiumCore. ExecuteDevToolsMethod( message_id: integer ; const method: ustring; const params: ICefDictionaryValue) : Integer ;
begin
if Initialized then
Result : = Browser. Host. ExecuteDevToolsMethod( message_id, method, params)
else
Result : = 0 ;
end ;
function TChromiumCore. AddDevToolsMessageObserver( const observer: ICefDevToolsMessageObserver) : ICefRegistration;
begin
if Initialized then
Result : = Browser. Host. AddDevToolsMessageObserver( observer)
else
Result : = nil ;
end ;
2019-11-10 00:24:26 +01:00
{$IFDEF MSWINDOWS}
procedure TChromiumCore. WndProc( var aMessage: TMessage) ;
begin
case aMessage. Msg of
2020-01-28 11:36:34 +01:00
CEF_PREFERENCES_SAVED : PrefsAvailableMsg( aMessage. WParam < > 0 ) ;
2019-11-10 00:24:26 +01:00
CEF_STARTDRAGGING : DelayedDragging;
else aMessage. Result : = DefWindowProc( FCompHandle, aMessage. Msg, aMessage. WParam, aMessage. LParam) ;
end ;
end ;
procedure TChromiumCore. BrowserCompWndProc( var aMessage: TMessage) ;
var
TempHandled : boolean ;
begin
try
TempHandled : = False ;
try
if assigned( FOnBrowserCompMsg) then
2020-09-15 16:31:49 +02:00
FOnBrowserCompMsg( self, aMessage, TempHandled) ;
2019-11-10 00:24:26 +01:00
2019-11-10 18:23:39 +01:00
if not( TempHandled) then
CallOldCompWndProc( FOldBrowserCompWndPrc, FBrowserCompHWND, aMessage) ;
2019-11-10 00:24:26 +01:00
finally
if aMessage. Msg = WM_DESTROY then
RestoreCompWndProc( FBrowserCompHWND, 0 , FOldBrowserCompWndPrc) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.BrowserCompWndProc' , e) then raise ;
end ;
end ;
procedure TChromiumCore. WidgetCompWndProc( var aMessage: TMessage) ;
var
TempHandled : boolean ;
begin
try
TempHandled : = False ;
try
if assigned( FOnWidgetCompMsg) then
2020-09-15 16:31:49 +02:00
FOnWidgetCompMsg( self, aMessage, TempHandled) ;
2019-11-10 00:24:26 +01:00
2019-11-10 18:23:39 +01:00
if not( TempHandled) then
CallOldCompWndProc( FOldWidgetCompWndPrc, FWidgetCompHWND, aMessage) ;
2019-11-10 00:24:26 +01:00
finally
if aMessage. Msg = WM_DESTROY then
RestoreCompWndProc( FWidgetCompHWND, 0 , FOldWidgetCompWndPrc) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.WidgetCompWndProc' , e) then raise ;
end ;
end ;
procedure TChromiumCore. RenderCompWndProc( var aMessage: TMessage) ;
var
TempHandled : boolean ;
begin
try
TempHandled : = False ;
try
if assigned( FOnRenderCompMsg) then
2020-09-15 16:31:49 +02:00
FOnRenderCompMsg( self, aMessage, TempHandled) ;
2019-11-10 00:24:26 +01:00
2019-11-10 18:23:39 +01:00
if not( TempHandled) then
CallOldCompWndProc( FOldRenderCompWndPrc, FRenderCompHWND, aMessage) ;
2019-11-10 00:24:26 +01:00
finally
if aMessage. Msg = WM_DESTROY then
RestoreCompWndProc( FRenderCompHWND, 0 , FOldRenderCompWndPrc) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.RenderCompWndProc' , e) then raise ;
end ;
end ;
2020-09-20 12:07:24 +02:00
procedure TChromiumCore. RestoreOldCompWndProc;
begin
RestoreCompWndProc( FBrowserCompHWND, 0 , FOldBrowserCompWndPrc) ;
FreeAndNilStub( FBrowserCompStub) ;
RestoreCompWndProc( FWidgetCompHWND, 0 , FOldWidgetCompWndPrc) ;
FreeAndNilStub( FWidgetCompStub) ;
RestoreCompWndProc( FRenderCompHWND, 0 , FOldRenderCompWndPrc) ;
FreeAndNilStub( FRenderCompStub) ;
end ;
2019-11-10 00:24:26 +01:00
{$ENDIF}
2020-05-07 11:46:48 +02:00
function TChromiumCore. RemoveBrowser( const aBrowser : ICefBrowser) : boolean ;
begin
Result : = False ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
2020-05-07 11:46:48 +02:00
2021-03-25 13:00:37 +01:00
if ( FBrowsers < > nil ) and
FBrowsers. RemoveBrowser( aBrowser) and
( FBrowserId = aBrowser. Identifier) then
FBrowserId : = FBrowsers. FirstID;
2020-06-13 17:24:22 +02:00
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
function TChromiumCore. AddBrowser( const aBrowser : ICefBrowser) : boolean ;
begin
Result : = False ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
2020-05-07 11:46:48 +02:00
2022-04-30 19:01:45 +02:00
if ( FBrowsers < > nil ) and FBrowsers. AddBrowser( aBrowser) then
2020-06-13 17:24:22 +02:00
begin
Result : = True ;
2020-05-07 11:46:48 +02:00
2020-06-13 17:24:22 +02:00
if ( FBrowserId = 0 ) then
FBrowserId : = aBrowser. Identifier;
end ;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
function TChromiumCore. SelectBrowser( aID : integer ) : boolean ;
begin
Result : = False ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
2020-05-07 11:46:48 +02:00
2020-06-13 17:24:22 +02:00
if FMultiBrowserMode and ( FBrowsers < > nil ) and ( FBrowsers. SearchBrowser( aID) > = 0 ) then
begin
FBrowserId : = aID;
Result : = True ;
end ;
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
2020-05-12 11:30:19 +02:00
function TChromiumCore. IndexOfBrowserID( aID : integer ) : integer ;
begin
Result : = - 1 ;
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
2020-05-12 11:30:19 +02:00
2020-06-13 17:24:22 +02:00
if ( FBrowsers < > nil ) then
Result : = FBrowsers. SearchBrowser( aID) ;
finally
FBrowsersCS. Release;
end ;
2020-05-12 11:30:19 +02:00
end ;
2020-05-07 11:46:48 +02:00
procedure TChromiumCore. SetBrowserIsClosing( aID : integer ) ;
begin
2020-06-13 17:24:22 +02:00
if ( FBrowsersCS < > nil ) then
try
FBrowsersCS. Acquire;
2020-06-21 21:27:55 +02:00
if ( FBrowsers < > nil ) then
FBrowsers. BrowserIsClosing[ aID] : = True ;
2020-06-13 17:24:22 +02:00
finally
FBrowsersCS. Release;
end ;
2020-05-07 11:46:48 +02:00
end ;
2019-11-10 00:24:26 +01:00
function TChromiumCore. doOnClose( const browser: ICefBrowser) : Boolean ;
var
TempAction : TCefCloseBrowserAction;
2021-03-25 13:00:37 +01:00
TempID : Integer ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
TempAction : = cbaClose;
2021-03-25 13:00:37 +01:00
TempID : = browser. Identifier;
2019-11-10 00:24:26 +01:00
// TempAction values
// -----------------
// cbaCancel : stop closing the browser
// cbaClose : continue closing the browser
// cbaDelay : stop closing the browser momentarily. Used when the application
// needs to execute some custom processes before closing the
// browser. This is usually needed to destroy a TCEFWindowParent
// in the main thread before closing the browser.
2020-06-21 21:27:55 +02:00
if assigned( FOnClose) then
FOnClose( Self, browser, TempAction) ;
2019-11-10 00:24:26 +01:00
case TempAction of
cbaCancel : Result : = True ;
cbaDelay :
begin
Result : = True ;
2021-03-25 13:00:37 +01:00
SetBrowserIsClosing( TempID) ;
2019-11-10 00:24:26 +01:00
end ;
else
2021-03-25 13:00:37 +01:00
SetBrowserIsClosing( TempID) ;
2019-11-10 00:24:26 +01:00
end ;
end ;
procedure TChromiumCore. doOnBeforeClose( const browser: ICefBrowser) ;
begin
2020-05-07 11:46:48 +02:00
RemoveBrowser( browser) ;
if ( BrowserCount = 0 ) then
2020-07-14 15:50:23 +02:00
DestroyAllHandlersAndObservers;
2019-11-10 00:24:26 +01:00
2020-06-21 21:27:55 +02:00
if assigned( FOnBeforeClose) then
FOnBeforeClose( Self, browser) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnAddressChange( const browser: ICefBrowser; const frame: ICefFrame; const url: ustring) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnAddressChange) then
FOnAddressChange( Self, browser, frame, url) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnAfterCreated( const browser: ICefBrowser) ;
2023-03-11 17:29:30 +01:00
var
TempTask : ICefTask;
2019-11-10 00:24:26 +01:00
begin
2022-04-30 19:01:45 +02:00
AddBrowser( browser) ;
2019-11-10 00:24:26 +01:00
doUpdatePreferences( browser) ;
2020-06-21 21:27:55 +02:00
if ( FMediaObserver < > nil ) and ( FMediaObserverReg = nil ) then
FMediaObserverReg : = AddObserver( FMediaObserver) ;
if ( FDevToolsMsgObserver < > nil ) and ( FDevToolsMsgObserverReg = nil ) then
FDevToolsMsgObserverReg : = AddDevToolsMessageObserver( FDevToolsMsgObserver) ;
2020-04-19 22:47:20 +02:00
2020-06-21 21:27:55 +02:00
if assigned( FOnAfterCreated) then
FOnAfterCreated( Self, browser) ;
2023-03-11 17:29:30 +01:00
try
// The browser requires some time to create associated internal objects
// before being able to accept the focus.
// https://bitbucket.org/chromiumembedded/cef/src/14dd0c0d06166d8198980b7fd5ed2d5f526e8990/tests/cefclient/browser/osr_window_win.cc#lines-949
TempTask : = TCefEnableFocusTask. Create( self) ;
if ( FEnableFocusDelayMs = 0 ) then
CefPostTask( TID_UI, TempTask)
else
CefPostDelayedTask( TID_UI, TempTask, FEnableFocusDelayMs) ;
finally
TempTask : = nil ;
end ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnBeforeBrowse( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
user_gesture : Boolean ;
isRedirect : Boolean ) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if FUpdatePreferences then
doUpdatePreferences( browser) ;
2019-11-10 00:24:26 +01:00
2020-06-21 21:27:55 +02:00
if assigned( FOnBeforeBrowse) then
FOnBeforeBrowse( Self, browser, frame, request, user_gesture, isRedirect, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnBeforeContextMenu( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const params : ICefContextMenuParams;
const model : ICefMenuModel) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnBeforeContextMenu) then
FOnBeforeContextMenu( Self, browser, frame, params, model) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doRunContextMenu( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const params : ICefContextMenuParams;
const model : ICefMenuModel;
const callback : ICefRunContextMenuCallback) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnRunContextMenu) then
FOnRunContextMenu( Self, browser, frame, params, model, callback, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
2022-05-03 12:43:16 +02:00
function TChromiumCore. doOnCanDownload( const browser : ICefBrowser;
const url : ustring;
const request_method : ustring) : boolean ;
begin
Result : = True ;
if assigned( FOnCanDownload) then
FOnCanDownload( Self, browser, url, request_method, Result ) ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. doOnBeforeDownload( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const downloadItem : ICefDownloadItem;
const suggestedName : ustring;
const callback : ICefBeforeDownloadCallback) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnBeforeDownload) then
FOnBeforeDownload( Self, browser, downloadItem, suggestedName, callback) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnBeforePopup( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const targetUrl : ustring;
const targetFrameName : ustring;
targetDisposition : TCefWindowOpenDisposition;
userGesture : Boolean ;
const popupFeatures : TCefPopupFeatures;
var windowInfo : TCefWindowInfo;
var client : ICefClient;
var settings : TCefBrowserSettings;
var extra_info : ICefDictionaryValue;
var noJavascriptAccess : Boolean ) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnBeforePopup) then
2019-11-10 00:24:26 +01:00
FOnBeforePopup( Self, browser, frame, targetUrl, targetFrameName,
targetDisposition, userGesture, popupFeatures, windowInfo, client,
settings, extra_info, noJavascriptAccess, Result ) ;
end ;
function TChromiumCore. doOnBeforeResourceLoad( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
2021-10-22 19:19:57 +02:00
const callback : ICefCallback) : TCefReturnValue;
2019-11-10 00:24:26 +01:00
var
TempHeaderMap : ICefStringMultimap;
begin
if FAddCustomHeader then
try
TempHeaderMap : = TCefStringMultimapOwn. Create;
request. GetHeaderMap( TempHeaderMap) ;
TempHeaderMap. Append( FCustomHeaderName, FCustomHeaderValue) ;
request. SetHeaderMap( TempHeaderMap) ;
finally
TempHeaderMap : = nil ;
end ;
2020-06-21 21:27:55 +02:00
if not( FSendReferrer) then
request. SetReferrer( '' , REFERRER_POLICY_NO_REFERRER) ;
2019-11-10 00:24:26 +01:00
Result : = RV_CONTINUE;
2020-06-21 21:27:55 +02:00
if assigned( FOnBeforeResourceLoad) then
FOnBeforeResourceLoad( Self, browser, frame, request, callback, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnBeforeUnloadDialog( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const messageText : ustring;
isReload : Boolean ;
const callback : ICefJsDialogCallback) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnBeforeUnloadDialog) then
FOnBeforeUnloadDialog( Self, browser, messageText, isReload, callback, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnCertificateError( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
certError : TCefErrorcode;
const requestUrl : ustring;
const sslInfo : ICefSslInfo;
2021-10-22 19:19:57 +02:00
const callback : ICefCallback) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnCertificateError) then
2019-11-10 00:24:26 +01:00
FOnCertificateError( Self, browser, certError, requestUrl, sslInfo, callback, Result ) ;
end ;
function TChromiumCore. doOnConsoleMessage( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
level : TCefLogSeverity;
const aMessage : ustring;
const source : ustring;
line : Integer ) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnConsoleMessage) then
FOnConsoleMessage( Self, browser, level, aMessage, source, line, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnAutoResize( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const new_size : PCefSize) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnAutoResize) then
FOnAutoResize( Self, browser, new_size, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnLoadingProgressChange( const browser: ICefBrowser; const progress: double ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnLoadingProgressChange) then
FOnLoadingProgressChange( self, browser, progress) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnContextMenuCommand( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const params : ICefContextMenuParams;
commandId : Integer ;
eventFlags : TCefEventFlags) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnContextMenuCommand) then
2019-11-10 00:24:26 +01:00
FOnContextMenuCommand( Self, browser, frame, params, commandId, eventFlags, Result ) ;
end ;
procedure TChromiumCore. doOnContextMenuDismissed( const browser: ICefBrowser; const frame: ICefFrame) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnContextMenuDismissed) then
FOnContextMenuDismissed( Self, browser, frame) ;
2019-11-10 00:24:26 +01:00
end ;
2022-08-06 12:00:28 +02:00
function TChromiumCore. doRunQuickMenu( const browser : ICefBrowser;
const frame : ICefFrame;
location : PCefPoint;
size : PCefSize;
edit_state_flags : TCefQuickMenuEditStateFlags;
const callback : ICefRunQuickMenuCallback) : boolean ;
begin
Result : = False ;
if assigned( FOnRunQuickMenu) then
FOnRunQuickMenu( Self, browser, frame, location^ , size^ , edit_state_flags, callback, Result ) ;
end ;
function TChromiumCore. doOnQuickMenuCommand( const browser : ICefBrowser;
const frame : ICefFrame;
command_id : integer ;
event_flags : TCefEventFlags) : boolean ;
begin
Result : = False ;
if assigned( FOnQuickMenuCommand) then
FOnQuickMenuCommand( Self, browser, frame, command_id, event_flags, Result ) ;
end ;
procedure TChromiumCore. doOnQuickMenuDismissed( const browser : ICefBrowser;
const frame : ICefFrame) ;
begin
if assigned( FOnQuickMenuDismissed) then
FOnQuickMenuDismissed( Self, browser, frame) ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. doOnCursorChange( const browser : ICefBrowser;
2021-01-26 18:26:24 +01:00
cursor_ : TCefCursorHandle;
2019-11-20 10:45:46 +01:00
cursorType : TCefCursorType;
2020-11-19 18:55:17 +01:00
const customCursorInfo : PCefCursorInfo;
var aResult : boolean ) ;
2019-11-10 00:24:26 +01:00
begin
2020-11-19 18:55:17 +01:00
aResult : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnCursorChange) then
2021-01-26 18:26:24 +01:00
FOnCursorChange( self, browser, cursor_, cursorType, customCursorInfo, aResult) ;
2019-11-10 00:24:26 +01:00
end ;
2022-08-06 12:00:28 +02:00
procedure TChromiumCore. doOnMediaAccessChange( const browser: ICefBrowser; has_video_access, has_audio_access: boolean ) ;
begin
if assigned( FOnMediaAccessChange) then
FOnMediaAccessChange( self, browser, has_video_access, has_audio_access) ;
end ;
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. doOnDialogClosed( const browser: ICefBrowser) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnDialogClosed) then
FOnDialogClosed( Self, browser) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnDownloadUpdated( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const downloadItem : ICefDownloadItem;
const callback : ICefDownloadItemCallback) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnDownloadUpdated) then
FOnDownloadUpdated( Self, browser, downloadItem, callback) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnDragEnter( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const dragData : ICefDragData;
mask : TCefDragOperations) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnDragEnter) then
FOnDragEnter( Self, browser, dragData, mask, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnDraggableRegionsChanged( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
regionsCount : NativeUInt ;
const regions : PCefDraggableRegionArray) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnDraggableRegionsChanged) then
FOnDraggableRegionsChanged( Self, browser, frame, regionsCount, regions) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnFaviconUrlChange( const browser: ICefBrowser; const iconUrls: TStrings) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnFavIconUrlChange) then
FOnFavIconUrlChange( Self, browser, iconUrls) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnFileDialog( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
mode : TCefFileDialogMode;
const title : ustring;
const defaultFilePath : ustring;
const acceptFilters : TStrings;
const callback : ICefFileDialogCallback) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnFileDialog) then
2022-05-26 13:08:20 +02:00
FOnFileDialog( Self, browser, mode, title, defaultFilePath, acceptFilters, callback, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnFindResult( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
identifier : integer ;
count : Integer ;
const selectionRect : PCefRect;
activeMatchOrdinal : Integer ;
finalUpdate : Boolean ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnFindResult) then
2019-11-10 00:24:26 +01:00
FOnFindResult( Self, browser, identifier, count, selectionRect, activeMatchOrdinal, finalUpdate) ;
end ;
procedure TChromiumCore. doOnRequestContextInitialized( const request_context: ICefRequestContext) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnRequestContextInitialized) then
FOnRequestContextInitialized( self, request_context) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doGetResourceRequestHandler_ReqCtxHdlr( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
is_navigation : boolean ;
is_download : boolean ;
const request_initiator : ustring;
var disable_default_handling : boolean ;
var aResourceRequestHandler : ICefResourceRequestHandler) ;
2019-11-10 00:24:26 +01:00
begin
if ( FResourceRequestHandler < > nil ) then
aResourceRequestHandler : = FResourceRequestHandler;
2020-06-21 21:27:55 +02:00
if assigned( FOnGetResourceRequestHandler_ReqCtxHdlr) then
2019-11-10 00:24:26 +01:00
FOnGetResourceRequestHandler_ReqCtxHdlr( self, browser, frame, request, is_navigation, is_download,
request_initiator, disable_default_handling,
aResourceRequestHandler) ;
end ;
2020-04-19 22:47:20 +02:00
procedure TChromiumCore. doOnSinks( const sinks: TCefMediaSinkArray) ;
begin
if assigned( FOnSinks) then
FOnSinks( self, sinks) ;
end ;
procedure TChromiumCore. doOnRoutes( const routes: TCefMediaRouteArray) ;
begin
if assigned( FOnRoutes) then
FOnRoutes( self, routes) ;
end ;
procedure TChromiumCore. doOnRouteStateChanged( const route : ICefMediaRoute;
state : TCefMediaRouteConnectionState) ;
2019-11-10 00:24:26 +01:00
begin
2020-04-19 22:47:20 +02:00
if assigned( FOnRouteStateChanged) then
FOnRouteStateChanged( self, route, state) ;
end ;
procedure TChromiumCore. doOnRouteMessageReceived( const route : ICefMediaRoute;
const message_ : ustring) ;
begin
if assigned( FOnRouteMessageReceived) then
FOnRouteMessageReceived( self, route, message_) ;
end ;
2020-05-23 15:00:44 +02:00
procedure TChromiumCore. doOnGetAudioParameters( const browser : ICefBrowser;
var params : TCefAudioParameters;
var aResult : boolean ) ;
begin
if assigned( FOnGetAudioParameters) then
FOnGetAudioParameters( self, browser, params, aResult) ;
end ;
procedure TChromiumCore. doOnAudioStreamStarted( const browser : ICefBrowser;
const params : TCefAudioParameters;
channels : integer ) ;
begin
if assigned( FOnAudioStreamStarted) then
FOnAudioStreamStarted( self, browser, params, channels) ;
end ;
procedure TChromiumCore. doOnAudioStreamPacket( const browser : ICefBrowser;
const data : PPSingle;
frames : integer ;
pts : int64 ) ;
begin
if assigned( FOnAudioStreamPacket) then
FOnAudioStreamPacket( self, browser, data, frames, pts) ;
end ;
procedure TChromiumCore. doOnAudioStreamStopped( const browser: ICefBrowser) ;
begin
if assigned( FOnAudioStreamStopped) then
FOnAudioStreamStopped( self, browser) ;
end ;
procedure TChromiumCore. doOnAudioStreamError( const browser : ICefBrowser;
const message_ : ustring) ;
begin
if assigned( FOnAudioStreamError) then
FOnAudioStreamError( self, browser, message_) ;
end ;
2020-06-21 21:27:55 +02:00
// ICefDevToolsMessageObserver
procedure TChromiumCore. doOnDevToolsMessage( const browser : ICefBrowser;
2021-01-16 14:35:01 +01:00
const message_ : Pointer ;
message_size : NativeUInt ;
2020-06-21 21:27:55 +02:00
var aHandled : boolean ) ;
2021-01-16 14:35:01 +01:00
var
TempValue : ICefValue;
2020-06-21 21:27:55 +02:00
begin
2021-01-16 14:35:01 +01:00
if assigned( FOnDevToolsRawMessage) then
FOnDevToolsRawMessage( self, browser, message_, message_size, aHandled)
else
if assigned( FOnDevToolsMessage) then
try
TempValue : = TCEFJson. Parse( message_, message_size) ;
FOnDevToolsMessage( self, browser, TempValue, aHandled) ;
finally
TempValue : = nil ;
end ;
2020-06-21 21:27:55 +02:00
end ;
procedure TChromiumCore. doOnDevToolsMethodResult( const browser : ICefBrowser;
message_id : integer ;
success : boolean ;
2021-01-16 14:35:01 +01:00
const result : Pointer ;
result_size : NativeUInt ) ;
var
TempValue : ICefValue;
2020-06-21 21:27:55 +02:00
begin
2021-01-16 14:35:01 +01:00
if assigned( FOnDevToolsMethodRawResult) then
FOnDevToolsMethodRawResult( self, browser, message_id, success, result , result_size)
else
if assigned( FOnDevToolsMethodResult) then
try
TempValue : = TCEFJson. Parse( result , result_size) ;
FOnDevToolsMethodResult( self, browser, message_id, success, TempValue) ;
finally
TempValue : = nil ;
end ;
2020-06-21 21:27:55 +02:00
end ;
2021-01-16 14:35:01 +01:00
procedure TChromiumCore. doOnDevToolsEvent( const browser : ICefBrowser;
const method : ustring;
const params : Pointer ;
params_size : NativeUInt ) ;
var
TempValue : ICefValue;
2020-06-21 21:27:55 +02:00
begin
2021-01-16 14:35:01 +01:00
if assigned( FOnDevToolsRawEvent) then
FOnDevToolsRawEvent( self, browser, method, params, params_size)
else
if assigned( FOnDevToolsEvent) then
try
TempValue : = TCEFJson. Parse( params, params_size) ;
FOnDevToolsEvent( self, browser, method, TempValue) ;
finally
TempValue : = nil ;
end ;
2020-06-21 21:27:55 +02:00
end ;
procedure TChromiumCore. doOnDevToolsAgentAttached( const browser: ICefBrowser) ;
begin
if assigned( FOnDevToolsAgentAttached) then
FOnDevToolsAgentAttached( self, browser) ;
end ;
procedure TChromiumCore. doOnDevToolsAgentDetached( const browser: ICefBrowser) ;
begin
if assigned( FOnDevToolsAgentDetached) then
FOnDevToolsAgentDetached( self, browser) ;
end ;
2020-08-04 17:52:09 +02:00
procedure TChromiumCore. doOnExtensionLoadFailed( result : TCefErrorcode) ;
begin
if assigned( FOnExtensionLoadFailed) then
FOnExtensionLoadFailed( self, result ) ;
end ;
procedure TChromiumCore. doOnExtensionLoaded( const extension: ICefExtension) ;
begin
if assigned( FOnExtensionLoaded) then
FOnExtensionLoaded( self, extension) ;
end ;
procedure TChromiumCore. doOnExtensionUnloaded( const extension: ICefExtension) ;
begin
if assigned( FOnExtensionUnloaded) then
FOnExtensionUnloaded( self, extension) ;
end ;
function TChromiumCore. doOnExtensionBeforeBackgroundBrowser( const extension : ICefExtension;
const url : ustring;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean ;
begin
Result : = False ;
if assigned( FOnExtensionBeforeBackgroundBrowser) then
FOnExtensionBeforeBackgroundBrowser( self, extension, url, client, settings, Result ) ;
end ;
function TChromiumCore. doOnExtensionBeforeBrowser( const extension : ICefExtension;
const browser : ICefBrowser;
const active_browser : ICefBrowser;
index : Integer ;
const url : ustring;
active : boolean ;
var windowInfo : TCefWindowInfo;
var client : ICefClient;
var settings : TCefBrowserSettings) : boolean ;
begin
Result : = False ;
if assigned( FOnExtensionBeforeBrowser) then
FOnExtensionBeforeBrowser( self, extension, browser, active_browser, index , url,
active, windowInfo, client, settings, Result ) ;
end ;
procedure TChromiumCore. doOnExtensionGetActiveBrowser( const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean ;
var aRsltBrowser : ICefBrowser) ;
begin
aRsltBrowser : = nil ;
if assigned( FOnExtensionGetActiveBrowser) then
FOnExtensionGetActiveBrowser( self, extension, browser, include_incognito, aRsltBrowser) ;
end ;
function TChromiumCore. doOnExtensionCanAccessBrowser( const extension : ICefExtension;
const browser : ICefBrowser;
include_incognito : boolean ;
const target_browser : ICefBrowser) : boolean ;
begin
Result : = False ;
if assigned( FOnExtensionCanAccessBrowser) then
FOnExtensionCanAccessBrowser( self, extension, browser, include_incognito, target_browser, Result ) ;
end ;
function TChromiumCore. doOnExtensionGetExtensionResource( const extension : ICefExtension;
const browser : ICefBrowser;
const file_ : ustring;
const callback : ICefGetExtensionResourceCallback) : boolean ;
begin
Result : = False ;
if assigned( FOnExtensionGetExtensionResource) then
FOnExtensionGetExtensionResource( self, extension, browser, file_, callback, Result ) ;
end ;
2021-04-18 19:36:20 +02:00
procedure TChromiumCore. doOnPrintStart( const browser: ICefBrowser) ;
begin
if assigned( FOnPrintStart) then
FOnPrintStart( self, browser) ;
end ;
procedure TChromiumCore. doOnPrintSettings( const browser : ICefBrowser;
const settings : ICefPrintSettings;
getDefaults : boolean ) ;
begin
if assigned( FOnPrintSettings) then
FOnPrintSettings( self, browser, settings, getDefaults) ;
end ;
procedure TChromiumCore. doOnPrintDialog( const browser : ICefBrowser;
hasSelection : boolean ;
const callback : ICefPrintDialogCallback;
var aResult : boolean ) ;
begin
if assigned( FOnPrintDialog) then
FOnPrintDialog( self, browser, hasSelection, callback, aResult) ;
end ;
procedure TChromiumCore. doOnPrintJob( const browser : ICefBrowser;
const documentName : ustring;
const PDFFilePath : ustring;
const callback : ICefPrintJobCallback;
var aResult : boolean ) ;
begin
if assigned( FOnPrintJob) then
FOnPrintJob( self, browser, documentName, PDFFilePath, callback, aResult) ;
end ;
procedure TChromiumCore. doOnPrintReset( const browser: ICefBrowser) ;
begin
if assigned( FOnPrintReset) then
FOnPrintReset( self, browser) ;
end ;
procedure TChromiumCore. doOnGetPDFPaperSize( const browser : ICefBrowser;
deviceUnitsPerInch : Integer ;
var aResult : TCefSize) ;
begin
if assigned( FOnGetPDFPaperSize) then
FOnGetPDFPaperSize( self, browser, deviceUnitsPerInch, aResult) ;
end ;
2021-07-29 16:20:34 +02:00
procedure TChromiumCore. doOnFrameCreated( const browser: ICefBrowser; const frame: ICefFrame) ;
begin
if assigned( FOnFrameCreated) then
FOnFrameCreated( self, browser, frame) ;
end ;
2021-09-27 12:04:33 +02:00
procedure TChromiumCore. doOnFrameAttached( const browser: ICefBrowser; const frame: ICefFrame; reattached: boolean ) ;
2021-07-29 16:20:34 +02:00
begin
if assigned( FOnFrameAttached) then
2021-09-27 12:04:33 +02:00
FOnFrameAttached( self, browser, frame, reattached) ;
2021-07-29 16:20:34 +02:00
end ;
procedure TChromiumCore. doOnFrameDetached( const browser: ICefBrowser; const frame: ICefFrame) ;
begin
if assigned( FOnFrameDetached) then
FOnFrameDetached( self, browser, frame) ;
end ;
procedure TChromiumCore. doOnMainFrameChanged( const browser: ICefBrowser; const old_frame, new_frame: ICefFrame) ;
begin
if assigned( FOnMainFrameChanged) then
FOnMainFrameChanged( self, browser, old_frame, new_frame) ;
end ;
2022-08-06 12:00:28 +02:00
function TChromiumCore. doOnChromeCommand( const browser : ICefBrowser;
command_id : integer ;
disposition : TCefWindowOpenDisposition) : boolean ;
2022-05-03 12:43:16 +02:00
begin
Result : = False ;
if assigned( FOnChromeCommand) then
FOnChromeCommand( self, browser, command_id, disposition, Result ) ;
end ;
2023-04-08 19:00:33 +02:00
function TChromiumCore. doOnIsChromeAppMenuItemVisible( const browser: ICefBrowser; command_id: integer ) : boolean ;
begin
Result : = True ;
if assigned( FOnIsChromeAppMenuItemVisible) then
FOnIsChromeAppMenuItemVisible( self, browser, command_id, Result ) ;
end ;
function TChromiumCore. doOnIsChromeAppMenuItemEnabled( const browser: ICefBrowser; command_id: integer ) : boolean ;
begin
Result : = True ;
if assigned( FOnIsChromeAppMenuItemEnabled) then
FOnIsChromeAppMenuItemEnabled( self, browser, command_id, Result ) ;
end ;
function TChromiumCore. doOnIsChromePageActionIconVisible( icon_type: TCefChromePageActionIconType) : boolean ;
begin
Result : = True ;
if assigned( FOnIsChromePageActionIconVisible) then
FOnIsChromePageActionIconVisible( self, icon_type, Result ) ;
end ;
function TChromiumCore. doOnIsChromeToolbarButtonVisible( button_type: TCefChromeToolbarButtonType) : boolean ;
begin
Result : = True ;
if assigned( FOnIsChromeToolbarButtonVisible) then
FOnIsChromeToolbarButtonVisible( self, button_type, Result ) ;
end ;
2022-08-06 12:00:28 +02:00
function TChromiumCore. doOnRequestMediaAccessPermission( const browser : ICefBrowser;
const frame : ICefFrame;
const requesting_origin : ustring;
requested_permissions : cardinal ;
const callback : ICefMediaAccessCallback) : boolean ;
begin
Result : = False ;
if assigned( FOnRequestMediaAccessPermission) then
FOnRequestMediaAccessPermission( self, browser, frame, requesting_origin, requested_permissions, callback, Result ) ;
end ;
function TChromiumCore. doOnShowPermissionPrompt( const browser : ICefBrowser;
prompt_id : uint64 ;
const requesting_origin : ustring;
requested_permissions : cardinal ;
const callback : ICefPermissionPromptCallback) : boolean ;
begin
Result : = False ;
if assigned( FOnShowPermissionPrompt) then
FOnShowPermissionPrompt( self, browser, prompt_id, requesting_origin, requested_permissions, callback, Result ) ;
end ;
procedure TChromiumCore. doOnDismissPermissionPrompt( const browser : ICefBrowser;
prompt_id : uint64 ;
result : TCefPermissionRequestResult) ;
begin
if assigned( FOnDismissPermissionPrompt) then
FOnDismissPermissionPrompt( self, browser, prompt_id, result ) ;
end ;
2020-04-19 22:47:20 +02:00
procedure TChromiumCore. doOnFullScreenModeChange( const browser : ICefBrowser;
fullscreen : Boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnFullScreenModeChange) then
2020-04-19 22:47:20 +02:00
FOnFullScreenModeChange( Self, browser, fullscreen) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnGetAuthCredentials( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const originUrl : ustring;
isProxy : Boolean ;
const host : ustring;
port : Integer ;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-03-04 09:42:32 +01:00
if isProxy and ( FProxyType = CEF_PROXYTYPE_FIXED_SERVERS) and ( callback < > nil ) then
2019-11-10 00:24:26 +01:00
begin
2020-03-04 09:42:32 +01:00
Result : = True ;
callback. cont( FProxyUsername, FProxyPassword) ;
2019-11-10 00:24:26 +01:00
end
else
2020-06-21 21:27:55 +02:00
if assigned( FOnGetAuthCredentials) then
2019-11-10 00:24:26 +01:00
FOnGetAuthCredentials( Self, browser, originUrl, isProxy, host, port, realm, scheme, callback, Result ) ;
end ;
function TChromiumCore. doCanSendCookie( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
const cookie : PCefCookie) : boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = True ;
2020-06-21 21:27:55 +02:00
if assigned( FOnCanSendCookie) then
FOnCanSendCookie( self, browser, frame, request, cookie, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doCanSaveCookie( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
const response : ICefResponse;
const cookie : PCefCookie) : boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = True ;
2020-06-21 21:27:55 +02:00
if assigned( FOnCanSaveCookie) then
FOnCanSaveCookie( self, browser, frame, request, response, cookie, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnGetResourceHandler( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
var aResourceHandler : ICefResourceHandler) ;
2019-11-10 00:24:26 +01:00
begin
aResourceHandler : = nil ;
2020-06-21 21:27:55 +02:00
if assigned( FOnGetResourceHandler) then
2019-11-10 00:24:26 +01:00
FOnGetResourceHandler( Self, browser, frame, request, aResourceHandler) ;
end ;
procedure TChromiumCore. doOnGetAccessibilityHandler( var aAccessibilityHandler : ICefAccessibilityHandler) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnGetAccessibilityHandler) then
FOnGetAccessibilityHandler( Self, aAccessibilityHandler) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnGetRootScreenRect( const browser: ICefBrowser; var rect: TCefRect) : Boolean ;
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnGetRootScreenRect) then
FOnGetRootScreenRect( Self, browser, rect, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnGetScreenInfo( const browser: ICefBrowser; var screenInfo: TCefScreenInfo) : Boolean ;
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnGetScreenInfo) then
FOnGetScreenInfo( Self, browser, screenInfo, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnGetScreenPoint( const browser: ICefBrowser; viewX, viewY: Integer ; var screenX, screenY: Integer ) : Boolean ;
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnGetScreenPoint) then
FOnGetScreenPoint( Self, browser, viewX, viewY, screenX, screenY, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnGetViewRect( const browser: ICefBrowser; var rect: TCefRect) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnGetViewRect) then
FOnGetViewRect( Self, browser, rect) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnGotFocus( const browser: ICefBrowser) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnGotFocus) then
FOnGotFocus( Self, browser)
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnJsdialog( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const originUrl : ustring;
dialogType : TCefJsDialogType;
const messageText : ustring;
const defaultPromptText : ustring;
const callback : ICefJsDialogCallback;
out suppressMessage : Boolean ) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
if not( Initialized) then
suppressMessage : = True
else
begin
suppressMessage : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnJsdialog) then
2019-11-10 00:24:26 +01:00
FOnJsdialog( Self, browser, originUrl, dialogType, messageText,
defaultPromptText, callback, suppressMessage, Result ) ;
end ;
end ;
function TChromiumCore. doOnKeyEvent( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const event : PCefKeyEvent;
osEvent : TCefEventHandle) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnKeyEvent) then
FOnKeyEvent( Self, browser, event, osEvent, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnLoadEnd( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
httpStatusCode : Integer ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnLoadEnd) then
FOnLoadEnd( Self, browser, frame, httpStatusCode) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnLoadError( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
errorCode : TCefErrorCode;
const errorText : ustring;
const failedUrl : ustring) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnLoadError) then
FOnLoadError( Self, browser, frame, errorCode, errorText, failedUrl) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnLoadingStateChange( const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnLoadingStateChange) then
FOnLoadingStateChange( Self, browser, isLoading, canGoBack, canGoForward) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnLoadStart( const browser: ICefBrowser; const frame: ICefFrame; transitionType: TCefTransitionType) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnLoadStart) then
FOnLoadStart( Self, browser, frame, transitionType) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnOpenUrlFromTab( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const targetUrl : ustring;
targetDisposition : TCefWindowOpenDisposition;
userGesture : Boolean ) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnOpenUrlFromTab) then
2019-11-10 00:24:26 +01:00
FOnOpenUrlFromTab( Self, browser, frame, targetUrl, targetDisposition, userGesture, Result ) ;
end ;
procedure TChromiumCore. doGetResourceRequestHandler_ReqHdlr( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
is_navigation : boolean ;
is_download : boolean ;
const request_initiator : ustring;
var disable_default_handling : boolean ;
var aResourceRequestHandler : ICefResourceRequestHandler) ;
2019-11-10 00:24:26 +01:00
begin
if ( FResourceRequestHandler < > nil ) then
aResourceRequestHandler : = FResourceRequestHandler;
2020-06-21 21:27:55 +02:00
if assigned( FOnGetResourceRequestHandler_ReqHdlr) then
2019-11-10 00:24:26 +01:00
FOnGetResourceRequestHandler_ReqHdlr( self, browser, frame, request, is_navigation, is_download,
request_initiator, disable_default_handling,
aResourceRequestHandler) ;
end ;
procedure TChromiumCore. doOnPaint( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
type_ : TCefPaintElementType;
dirtyRectsCount : NativeUInt ;
const dirtyRects : PCefRectArray;
const buffer : Pointer ;
width : Integer ;
height : Integer ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnPaint) then
FOnPaint( Self, browser, type_, dirtyRectsCount, dirtyRects, buffer, width, height) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnAcceleratedPaint( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
type_ : TCefPaintElementType;
dirtyRectsCount : NativeUInt ;
const dirtyRects : PCefRectArray;
shared_handle : Pointer ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnAcceleratedPaint) then
FOnAcceleratedPaint( Self, browser, type_, dirtyRectsCount, dirtyRects, shared_handle) ;
2019-11-10 00:24:26 +01:00
end ;
2022-08-06 12:00:28 +02:00
procedure TChromiumCore. doGetTouchHandleSize( const browser: ICefBrowser; orientation: TCefHorizontalAlignment; var size: TCefSize) ;
begin
if assigned( FOnGetTouchHandleSize) then
FOnGetTouchHandleSize( Self, browser, orientation, size) ;
end ;
procedure TChromiumCore. doOnTouchHandleStateChanged( const browser: ICefBrowser; const state: TCefTouchHandleState) ;
begin
if assigned( FOnTouchHandleStateChanged) then
FOnTouchHandleStateChanged( Self, browser, state) ;
end ;
2019-11-10 00:24:26 +01:00
function TChromiumCore. doOnSelectClientCertificate( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
isProxy : boolean ;
const host : ustring;
port : integer ;
certificatesCount : NativeUInt ;
const certificates : TCefX509CertificateArray;
const callback : ICefSelectClientCertificateCallback) : boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
if assigned( FOnSelectClientCertificate) then
FOnSelectClientCertificate( self, browser, isProxy, host, port, certificatesCount, certificates, callback, Result ) ;
end ;
procedure TChromiumCore. doOnPopupShow( const browser: ICefBrowser; show: Boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnPopupShow) then
FOnPopupShow( self, browser, show) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnPopupSize( const browser: ICefBrowser; const rect: PCefRect) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnPopupSize) then
FOnPopupSize( self, browser, rect) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnPreKeyEvent( const browser : ICefBrowser;
2020-06-21 21:27:55 +02:00
const event : PCefKeyEvent;
osEvent : TCefEventHandle;
out isKeyboardShortcut : Boolean ) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnPreKeyEvent) then
FOnPreKeyEvent( Self, browser, event, osEvent, isKeyboardShortcut, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnProcessMessageReceived( const browser : ICefBrowser;
2020-06-21 21:27:55 +02:00
const frame : ICefFrame;
sourceProcess : TCefProcessId;
const aMessage : ICefProcessMessage) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnProcessMessageReceived) then
2019-11-10 00:24:26 +01:00
FOnProcessMessageReceived( Self, browser, frame, sourceProcess, aMessage, Result ) ;
end ;
procedure TChromiumCore. doOnProtocolExecution( const browser : ICefBrowser;
2020-06-21 21:27:55 +02:00
const frame : ICefFrame;
const request : ICefRequest;
var allowOsExecution : Boolean ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnProtocolExecution) then
FOnProtocolExecution( Self, browser, frame, request, allowOsExecution) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnRenderProcessTerminated( const browser: ICefBrowser; status: TCefTerminationStatus) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnRenderProcessTerminated) then
FOnRenderProcessTerminated( Self, browser, status) ;
end ;
procedure TChromiumCore. doOnDocumentAvailableInMainFrame( const browser: ICefBrowser) ;
begin
if assigned( FOnDocumentAvailableInMainFrame) then
FOnDocumentAvailableInMainFrame( Self, browser) ;
2019-11-10 00:24:26 +01:00
end ;
2019-11-11 21:21:14 +01:00
{$IFDEF MSWINDOWS}
function EnumProcOSRChromeWidgetWin0( hWnd: HWND; lParam: LPARAM) : BOOL; stdcall ;
var
ClsName: array [ 0 .. 2 5 6 ] of Char ;
begin
ClsName[ GetClassName( hWnd, ClsName, 2 5 6 ) ] : = #0 ;
if StrComp( ClsName, 'Chrome_WidgetWin_0' ) = 0 then
begin
PHandle( lParam) ^ : = hWnd;
Result : = False ;
end
else
Result : = True ;
end ;
{$ENDIF MSWINDOWS}
2019-11-10 00:24:26 +01:00
procedure TChromiumCore. doOnRenderViewReady( const browser: ICefBrowser) ;
{$IFDEF MSWINDOWS}
var
OldBrowserCompHWND, OldWidgetCompHWND, OldRenderCompHWND: THandle;
{$ENDIF}
begin
2020-05-07 11:46:48 +02:00
if ( browser < > nil ) and
( browser. Host < > nil ) and
( browser. Identifier = BrowserId) then
2019-11-10 00:24:26 +01:00
begin
{$IFDEF MSWINDOWS}
OldBrowserCompHWND : = FBrowserCompHWND;
2020-01-02 20:02:47 +01:00
OldWidgetCompHWND : = FWidgetCompHWND;
OldRenderCompHWND : = FRenderCompHWND;
2020-04-03 18:30:12 +02:00
FBrowserCompHWND : = browser. Host. WindowHandle;
2019-11-10 00:24:26 +01:00
if ( FBrowserCompHWND < > 0 ) then
2019-11-11 21:21:14 +01:00
begin
2020-01-02 20:02:47 +01:00
FWidgetCompHWND : = FindWindowEx( FBrowserCompHWND, 0 , 'Chrome_WidgetWin_0' , '' ) ;
if ( FWidgetCompHWND = 0 ) and FIsOSR and CefCurrentlyOn( TID_UI) then
begin
// The WidgetCompHWND window doesn't have a HwndParent (Owner). If we are in OSR mode this
// causes popup menus that are opened by CEF to stay open if the user clicks somewhere else.
// With this code we search for the Widget window in the UI Thread's window list and set
// the Browser window as its HwndParent. This works around the bug.
EnumThreadWindows( GetCurrentThreadId, @ EnumProcOSRChromeWidgetWin0, NativeInt( @ FWidgetCompHWND) ) ;
if ( FWidgetCompHWND < > 0 ) then
SetWindowLongPtr( FWidgetCompHWND, GWLP_HWNDPARENT, NativeInt( FBrowserCompHWND) ) ;
end ;
2019-11-11 21:21:14 +01:00
end ;
2019-11-10 00:24:26 +01:00
if ( FWidgetCompHWND < > 0 ) then
FRenderCompHWND : = FindWindowEx( FWidgetCompHWND, 0 , 'Chrome_RenderWidgetHostHWND' , 'Chrome Legacy Window' ) ;
2019-11-10 18:23:39 +01:00
2019-11-10 00:24:26 +01:00
RestoreCompWndProc( OldBrowserCompHWND, FBrowserCompHWND, FOldBrowserCompWndPrc) ;
if assigned( FOnBrowserCompMsg) and ( FBrowserCompHWND < > 0 ) and ( FOldBrowserCompWndPrc = nil ) then
begin
2019-11-10 18:23:39 +01:00
CreateStub( {$IFDEF FPC} @ {$ENDIF} BrowserCompWndProc, FBrowserCompStub) ;
FOldBrowserCompWndPrc : = InstallCompWndProc( FBrowserCompHWND, FBrowserCompStub) ;
2019-11-10 00:24:26 +01:00
end ;
RestoreCompWndProc( OldWidgetCompHWND, FWidgetCompHWND, FOldWidgetCompWndPrc) ;
if assigned( FOnWidgetCompMsg) and ( FWidgetCompHWND < > 0 ) and ( FOldWidgetCompWndPrc = nil ) then
begin
2019-11-10 18:23:39 +01:00
CreateStub( {$IFDEF FPC} @ {$ENDIF} WidgetCompWndProc, FWidgetCompStub) ;
FOldWidgetCompWndPrc : = InstallCompWndProc( FWidgetCompHWND, FWidgetCompStub) ;
2019-11-10 00:24:26 +01:00
end ;
RestoreCompWndProc( OldRenderCompHWND, FRenderCompHWND, FOldRenderCompWndPrc) ;
if assigned( FOnRenderCompMsg) and ( FRenderCompHWND < > 0 ) and ( FOldRenderCompWndPrc = nil ) then
begin
2019-11-10 18:23:39 +01:00
CreateStub( {$IFDEF FPC} @ {$ENDIF} RenderCompWndProc, FRenderCompStub) ;
FOldRenderCompWndPrc : = InstallCompWndProc( FRenderCompHWND, FRenderCompStub) ;
2019-11-10 00:24:26 +01:00
end ;
{$ENDIF}
end ;
2020-06-21 21:27:55 +02:00
if assigned( FOnRenderViewReady) then
FOnRenderViewReady( Self, browser) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnResetDialogState( const browser: ICefBrowser) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnResetDialogState) then
FOnResetDialogState( Self, browser) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnResourceRedirect( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
const response : ICefResponse;
var newUrl : ustring) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnResourceRedirect) then
FOnResourceRedirect( Self, browser, frame, request, response, newUrl) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnResourceResponse( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
const response : ICefResponse) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnResourceResponse) then
FOnResourceResponse( Self, browser, frame, request, response, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnGetResourceResponseFilter( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
const response : ICefResponse;
var aResponseFilter : ICefResponseFilter) ;
2019-11-10 00:24:26 +01:00
begin
aResponseFilter : = nil ;
2020-06-21 21:27:55 +02:00
if assigned( FOnGetResourceResponseFilter) then
2019-11-10 00:24:26 +01:00
FOnGetResourceResponseFilter( self, browser, frame, request, response, aResponseFilter) ;
end ;
procedure TChromiumCore. doOnResourceLoadComplete( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const frame : ICefFrame;
const request : ICefRequest;
const response : ICefResponse;
status : TCefUrlRequestStatus;
receivedContentLength : Int64 ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnResourceLoadComplete) then
2019-11-10 00:24:26 +01:00
FOnResourceLoadComplete( self, browser, frame, request, response, status, receivedContentLength) ;
end ;
procedure TChromiumCore. doOnScrollOffsetChanged( const browser: ICefBrowser; x, y: Double ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnScrollOffsetChanged) then
FOnScrollOffsetChanged( Self, browser, x, y) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnIMECompositionRangeChanged( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const selected_range : PCefRange;
character_boundsCount : NativeUInt ;
const character_bounds : PCefRect) ;
2019-11-10 00:24:26 +01:00
begin
if assigned( FOnIMECompositionRangeChanged) then
FOnIMECompositionRangeChanged( self, browser, selected_range, character_boundsCount, character_bounds) ;
end ;
procedure TChromiumCore. doOnTextSelectionChanged( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const selected_text : ustring;
const selected_range : PCefRange) ;
2019-11-10 00:24:26 +01:00
begin
if assigned( FOnTextSelectionChanged) then
FOnTextSelectionChanged( self, browser, selected_text, selected_range) ;
end ;
procedure TChromiumCore. doOnVirtualKeyboardRequested( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
input_mode : TCefTextInpuMode) ;
2019-11-10 00:24:26 +01:00
begin
if assigned( FOnVirtualKeyboardRequested) then
FOnVirtualKeyboardRequested( self, browser, input_mode) ;
end ;
function TChromiumCore. doOnSetFocus( const browser: ICefBrowser; source: TCefFocusSource) : Boolean ;
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnSetFocus) then
FOnSetFocus( Self, browser, source, Result ) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnStartDragging( const browser : ICefBrowser;
2019-11-20 10:45:46 +01:00
const dragData : ICefDragData;
allowedOps : TCefDragOperations;
x : integer ;
y : Integer ) : Boolean ;
2019-11-10 00:24:26 +01:00
begin
Result : = False ;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
if FDragAndDropInitialized and
FDragDropManager. CloneDragData( dragData, allowedOps) then
begin
Result : = True ;
SendCompMessage( CEF_STARTDRAGGING) ;
end ;
2020-06-21 21:27:55 +02:00
if assigned( FOnStartDragging) then
FOnStartDragging( Self, browser, dragData, allowedOps, x, y, Result ) ;
2019-11-10 00:24:26 +01:00
{$ENDIF}
end ;
procedure TChromiumCore. DelayedDragging;
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
var
TempOperation : TCefDragOperation;
TempPoint : TPoint;
{$ENDIF}
begin
2019-11-10 18:23:39 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
if FDragAndDropInitialized and ( FDropTargetWnd < > 0 ) and ( GlobalCEFApp < > nil ) then
begin
FDragOperations : = DRAG_OPERATION_NONE;
TempOperation : = FDragDropManager. StartDragging;
FDragOperations : = DRAG_OPERATION_NONE;
GetCursorPos( TempPoint) ;
MapWindowPoints( 0 , FDropTargetWnd, TempPoint, 1 ) ;
DeviceToLogical( TempPoint, GlobalCEFApp. DeviceScaleFactor) ;
DragSourceEndedAt( TempPoint. x, TempPoint. y, TempOperation) ;
DragSourceSystemDragEnded;
end ;
{$ENDIF}
end ;
procedure TChromiumCore. doOnStatusMessage( const browser: ICefBrowser; const value: ustring) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnStatusMessage) then
FOnStatusMessage( Self, browser, value) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnTakeFocus( const browser: ICefBrowser; next: Boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnTakeFocus) then
FOnTakeFocus( Self, browser, next) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnTitleChange( const browser: ICefBrowser; const title: ustring) ;
begin
2020-06-21 21:27:55 +02:00
if assigned( FOnTitleChange) then
FOnTitleChange( Self, browser, title) ;
2019-11-10 00:24:26 +01:00
end ;
function TChromiumCore. doOnTooltip( const browser: ICefBrowser; var text : ustring) : Boolean ;
begin
Result : = False ;
2020-06-21 21:27:55 +02:00
if assigned( FOnTooltip) then
FOnTooltip( Self, browser, text , Result ) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. doOnUpdateDragCursor( const browser: ICefBrowser; operation: TCefDragOperation) ;
begin
if FDragAndDropInitialized then FDragOperations : = operation;
2020-06-21 21:27:55 +02:00
if assigned( FOnUpdateDragCursor) then
FOnUpdateDragCursor( Self, browser, operation) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. WasResized;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. WasResized;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. WasHidden( hidden: Boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. WasHidden( hidden) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. NotifyScreenInfoChanged;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. NotifyScreenInfoChanged;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. NotifyMoveOrResizeStarted;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. NotifyMoveOrResizeStarted;
2019-11-10 00:24:26 +01:00
end ;
2019-11-19 12:44:29 +01:00
procedure TChromiumCore. Invalidate( type_: TCefPaintElementType) ;
2019-11-10 00:24:26 +01:00
begin
if Initialized then
begin
if FIsOSR then
2020-05-07 11:46:48 +02:00
Browser. Host. Invalidate( type_)
2020-01-28 11:36:34 +01:00
{$IFDEF MSWINDOWS}
2019-11-10 00:24:26 +01:00
else
if ( RenderHandle < > 0 ) then
InvalidateRect( RenderHandle, nil , False )
else
InvalidateRect( WindowHandle, nil , False ) ;
2020-01-28 11:36:34 +01:00
{$ENDIF}
2019-11-10 00:24:26 +01:00
end ;
end ;
procedure TChromiumCore. SendExternalBeginFrame;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SendExternalBeginFrame;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SendKeyEvent( const event: PCefKeyEvent) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SendKeyEvent( event) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SendMouseClickEvent( const event : PCefMouseEvent;
2019-11-19 12:44:29 +01:00
type_ : TCefMouseButtonType;
mouseUp : Boolean ;
clickCount : Integer ) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SendMouseClickEvent( event, type_, mouseUp, clickCount) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SendMouseMoveEvent( const event: PCefMouseEvent; mouseLeave: Boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SendMouseMoveEvent( event, mouseLeave) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SendMouseWheelEvent( const event: PCefMouseEvent; deltaX, deltaY: Integer ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SendMouseWheelEvent( event, deltaX, deltaY) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SendTouchEvent( const event: PCefTouchEvent) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SendTouchEvent( event) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SendCaptureLostEvent;
2021-02-06 17:38:44 +01:00
{$IFDEF LINUX} {$IFDEF FPC}
var
TempXDisplay : PXDisplay;
{$ENDIF} {$ENDIF}
2019-11-10 00:24:26 +01:00
begin
2021-02-06 17:38:44 +01:00
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;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SetFocus( focus: Boolean ) ;
begin
2023-03-11 17:29:30 +01:00
if ( not( FIsOSR) or FCanFocus) and
Initialized then
2020-06-21 21:27:55 +02:00
Browser. Host. SetFocus( focus) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SetAccessibilityState( accessibilityState: TCefState) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. SetAccessibilityState( accessibilityState) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. SendProcessMessage( targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage; const aFrameName : ustring) ;
var
TempFrame : ICefFrame;
begin
try
if Initialized then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. SendProcessMessage( targetProcess, ProcMessage) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.SendProcessMessage' , e) then raise ;
end ;
end ;
procedure TChromiumCore. SendProcessMessage( targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage; const aFrame : ICefFrame) ;
2023-08-07 20:21:42 +02:00
var
TempFrame : ICefFrame;
2019-11-10 00:24:26 +01:00
begin
try
2023-08-07 20:21:42 +02:00
if Initialized then
begin
if ( aFrame < > nil ) and aFrame. IsValid then
TempFrame : = aFrame
else
TempFrame : = Browser. MainFrame;
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. SendProcessMessage( targetProcess, ProcMessage) ;
end ;
2019-11-10 00:24:26 +01:00
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.SendProcessMessage' , e) then raise ;
end ;
end ;
procedure TChromiumCore. SendProcessMessage( targetProcess: TCefProcessId; const ProcMessage: ICefProcessMessage; const aFrameIdentifier : int64 ) ;
var
TempFrame : ICefFrame;
begin
try
if Initialized then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
TempFrame. SendProcessMessage( targetProcess, ProcMessage) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.SendProcessMessage' , e) then raise ;
end ;
end ;
2019-11-20 10:45:46 +01:00
function TChromiumCore. CreateUrlRequest( const request: ICefRequest; const client: ICefUrlrequestClient; const aFrameName : ustring) : ICefUrlRequest;
2019-11-10 00:24:26 +01:00
var
TempFrame : ICefFrame;
begin
Result : = nil ;
try
if Initialized then
begin
if ( length( aFrameName) > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrame( aFrameName)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
Result : = TempFrame. CreateUrlRequest( request, client) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.CreateUrlRequest' , e) then raise ;
end ;
end ;
function TChromiumCore. CreateUrlRequest( const request: ICefRequest; const client: ICefUrlrequestClient; const aFrame : ICefFrame) : ICefUrlRequest;
2023-08-07 20:21:42 +02:00
var
TempFrame : ICefFrame;
2019-11-10 00:24:26 +01:00
begin
Result : = nil ;
try
2023-08-07 20:21:42 +02:00
if Initialized then
begin
if ( aFrame < > nil ) and aFrame. IsValid then
Result : = aFrame. CreateUrlRequest( request, client)
else
begin
TempFrame : = Browser. MainFrame;
if ( TempFrame < > nil ) and TempFrame. IsValid then
Result : = TempFrame. CreateUrlRequest( request, client) ;
end ;
end ;
2019-11-10 00:24:26 +01:00
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.CreateUrlRequest' , e) then raise ;
end ;
end ;
function TChromiumCore. CreateUrlRequest( const request: ICefRequest; const client: ICefUrlrequestClient; const aFrameIdentifier : int64 ) : ICefUrlRequest;
var
TempFrame : ICefFrame;
begin
Result : = nil ;
try
if Initialized then
begin
if ( aFrameIdentifier < > 0 ) then
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. GetFrameByident( aFrameIdentifier)
2019-11-10 00:24:26 +01:00
else
2020-05-07 11:46:48 +02:00
TempFrame : = Browser. MainFrame;
2019-11-10 00:24:26 +01:00
if ( TempFrame < > nil ) and TempFrame. IsValid then
Result : = TempFrame. CreateUrlRequest( request, client) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TChromiumCore.CreateUrlRequest' , e) then raise ;
end ;
end ;
procedure TChromiumCore. DragTargetDragEnter( const dragData: ICefDragData; const event: PCefMouseEvent; allowedOps: TCefDragOperations) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. DragTargetDragEnter( dragData, event, allowedOps) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. DragTargetDragOver( const event: PCefMouseEvent; allowedOps: TCefDragOperations) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. DragTargetDragOver( event, allowedOps) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. DragTargetDragLeave;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. DragTargetDragLeave;
2019-11-10 00:24:26 +01:00
end ;
2019-11-19 12:44:29 +01:00
procedure TChromiumCore. DragTargetDrop( const event: PCefMouseEvent) ;
2019-11-10 00:24:26 +01:00
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. DragTargetDrop( event) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. DragSourceEndedAt( x, y: Integer ; op: TCefDragOperation) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. DragSourceEndedAt( x, y, op) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. DragSourceSystemDragEnded;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. DragSourceSystemDragEnded;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. IMESetComposition( const text : ustring;
2019-11-20 10:45:46 +01:00
const underlines : TCefCompositionUnderlineDynArray;
const replacement_range : PCefRange;
const selection_range : PCefRange) ;
2019-11-10 00:24:26 +01:00
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Browser. Host. IMESetComposition( text , underlines, replacement_range, selection_range) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. IMECommitText( const text : ustring;
2019-11-20 10:45:46 +01:00
const replacement_range : PCefRange;
relative_cursor_pos : integer ) ;
2019-11-10 00:24:26 +01:00
begin
if Initialized then
2020-05-07 11:46:48 +02:00
Browser. Host. IMECommitText( text , replacement_range, relative_cursor_pos) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. IMEFinishComposingText( keep_selection : boolean ) ;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. IMEFinishComposingText( keep_selection) ;
2019-11-10 00:24:26 +01:00
end ;
procedure TChromiumCore. IMECancelComposition;
begin
2020-06-21 21:27:55 +02:00
if Initialized then
Browser. Host. IMECancelComposition;
2019-11-10 00:24:26 +01:00
end ;
2020-09-30 12:43:48 +02:00
procedure TChromiumCore. ReplaceMisspelling( const aWord : ustring) ;
begin
if Initialized then
Browser. Host. ReplaceMisspelling( aWord) ;
end ;
procedure TChromiumCore. AddWordToDictionary( const aWord : ustring) ;
begin
if Initialized then
Browser. Host. AddWordToDictionary( aWord) ;
end ;
2020-04-19 22:47:20 +02:00
function TChromiumCore. AddObserver( const observer: ICefMediaObserver) : ICefRegistration;
var
TempMediaRouter : ICefMediaRouter;
begin
Result : = nil ;
TempMediaRouter : = MediaRouter;
if ( TempMediaRouter < > nil ) then
Result : = TempMediaRouter. AddObserver( observer) ;
end ;
function TChromiumCore. GetSource( const urn: ustring) : ICefMediaSource;
var
TempMediaRouter : ICefMediaRouter;
begin
Result : = nil ;
TempMediaRouter : = MediaRouter;
if ( TempMediaRouter < > nil ) then
Result : = TempMediaRouter. GetSource( urn) ;
end ;
procedure TChromiumCore. NotifyCurrentSinks;
var
TempMediaRouter : ICefMediaRouter;
begin
TempMediaRouter : = MediaRouter;
if ( TempMediaRouter < > nil ) then
TempMediaRouter. NotifyCurrentSinks;
end ;
procedure TChromiumCore. NotifyCurrentRoutes;
var
TempMediaRouter : ICefMediaRouter;
begin
TempMediaRouter : = MediaRouter;
if ( TempMediaRouter < > nil ) then
TempMediaRouter. NotifyCurrentRoutes;
end ;
procedure TChromiumCore. CreateRoute( const source: ICefMediaSource; const sink: ICefMediaSink) ;
var
TempMediaRouter : ICefMediaRouter;
TempCallback : ICefMediaRouteCreateCallback;
begin
TempMediaRouter : = MediaRouter;
if ( TempMediaRouter < > nil ) then
try
TempCallback : = TCefCustomMediaRouteCreateCallback. Create( self) ;
TempMediaRouter. CreateRoute( source, sink, TempCallback) ;
finally
TempCallback : = nil ;
end ;
end ;
2020-07-15 14:56:41 +02:00
procedure TChromiumCore. GetDeviceInfo( const aMediaSink: ICefMediaSink) ;
var
TempCallback : ICefMediaSinkDeviceInfoCallback;
begin
if ( aMediaSink < > nil ) then
try
TempCallback : = TCefCustomMediaSinkDeviceInfoCallback. Create( self) ;
aMediaSink. GetDeviceInfo( TempCallback) ;
finally
TempCallback : = nil ;
end ;
end ;
2020-08-04 17:52:09 +02:00
function TChromiumCore. LoadExtension( const root_directory : ustring;
const manifest : ICefDictionaryValue;
const handler : ICefExtensionHandler;
const requestContext : ICefRequestContext) : boolean ;
var
TempContext : ICefRequestContext;
TempHandler : ICefExtensionHandler;
begin
Result : = False ;
// The global context must be initalized to load extensions
// This TChromium must not be initialized before loading an extension.
if ( GlobalCEFApp = nil ) or
not( GlobalCEFApp. GlobalContextInitialized) or
Initialized then
exit;
// We use a custom request context if available or the global request context if not.
if ( requestContext < > nil ) then
TempContext : = requestContext
else
TempContext : = TCefRequestContextRef. Global;
if ( handler < > nil ) then
TempHandler : = handler
else
begin
// All TChromium events must be assigned before calling LoadExtension.
CreateExtensionHandler;
TempHandler : = FExtensionHandler;
end ;
if ( TempContext < > nil ) then
try
TempContext. LoadExtension( root_directory, manifest, TempHandler) ;
Result : = True ;
finally
TempHandler : = nil ;
end ;
end ;
function TChromiumCore. DidLoadExtension( const extension_id: ustring) : boolean ;
var
TempContext : ICefRequestContext;
begin
Result : = False ;
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
Result : = ( TempContext < > nil ) and
TempContext. DidLoadExtension( extension_id) ;
end ;
end ;
function TChromiumCore. HasExtension( const extension_id: ustring) : boolean ;
var
TempContext : ICefRequestContext;
begin
Result : = False ;
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
Result : = ( TempContext < > nil ) and
TempContext. HasExtension( extension_id) ;
end ;
end ;
function TChromiumCore. GetExtensions( const extension_ids: TStringList) : boolean ;
var
TempContext : ICefRequestContext;
begin
Result : = False ;
if Initialized and ( extension_ids < > nil ) then
begin
TempContext : = Browser. Host. RequestContext;
Result : = ( TempContext < > nil ) and
TempContext. GetExtensions( extension_ids) ;
end ;
end ;
function TChromiumCore. GetExtension( const extension_id: ustring) : ICefExtension;
var
TempContext : ICefRequestContext;
begin
Result : = nil ;
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
if ( TempContext < > nil ) then
Result : = TempContext. GetExtension( extension_id) ;
end ;
end ;
2023-07-30 18:47:35 +02:00
function TChromiumCore. GetWebsiteSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes) : ICefValue;
var
TempContext : ICefRequestContext;
begin
Result : = nil ;
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
if ( TempContext < > nil ) then
Result : = TempContext. GetWebsiteSetting( requesting_url, top_level_url, content_type) ;
end ;
end ;
procedure TChromiumCore. SetWebsiteSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes; const value: ICefValue) ;
var
TempContext : ICefRequestContext;
begin
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
if ( TempContext < > nil ) then
TempContext. SetWebsiteSetting( requesting_url, top_level_url, content_type, value) ;
end ;
end ;
function TChromiumCore. GetContentSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes) : TCefContentSettingValues;
var
TempContext : ICefRequestContext;
begin
Result : = CEF_CONTENT_SETTING_VALUE_DEFAULT;
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
if ( TempContext < > nil ) then
Result : = TempContext. GetContentSetting( requesting_url, top_level_url, content_type) ;
end ;
end ;
procedure TChromiumCore. SetContentSetting( const requesting_url, top_level_url: ustring; content_type: TCefContentSettingTypes; value: TCefContentSettingValues) ;
var
TempContext : ICefRequestContext;
begin
if Initialized then
begin
TempContext : = Browser. Host. RequestContext;
if ( TempContext < > nil ) then
TempContext. SetContentSetting( requesting_url, top_level_url, content_type, value) ;
end ;
end ;
2020-01-02 20:02:47 +01:00
{$IFDEF MSWINDOWS}
2021-08-19 14:20:01 +02:00
function TChromiumCore. CopyDCToBitmapStream( aSrcDC : HDC; const aSrcRect : TRect; const aStream : TStream) : boolean ;
2020-01-02 20:02:47 +01:00
var
TempDstDC : HDC;
TempWidth : Integer ;
TempHeight : Integer ;
TempInfo : TBitmapInfo;
TempBits : Pointer ;
TempNewBitmap : HBITMAP;
TempOldBitmap : HBITMAP;
TempHeader : TBitmapFileHeader;
begin
Result : = False ;
if ( aSrcDC = 0 ) or ( aStream = nil ) then exit;
TempDstDC : = CreateCompatibleDC( aSrcDC) ;
if ( TempDstDC = 0 ) then exit;
TempWidth : = aSrcRect. Right - aSrcRect. Left;
TempHeight : = aSrcRect. Bottom - aSrcRect. Top;
TempBits : = nil ;
if ( TempWidth > 0 ) and ( TempHeight > 0 ) then
begin
ZeroMemory( @ TempInfo, SizeOf( TBitmapInfo) ) ;
ZeroMemory( @ TempHeader, SizeOf( TBitmapFileHeader) ) ;
TempInfo. bmiHeader. biSize : = SizeOf( TBitmapInfoHeader) ;
TempInfo. bmiHeader. biWidth : = TempWidth;
TempInfo. bmiHeader. biHeight : = TempHeight;
TempInfo. bmiHeader. biPlanes : = 1 ;
TempInfo. bmiHeader. biBitCount : = 3 2 ;
TempInfo. bmiHeader. biCompression : = BI_RGB;
TempInfo. bmiHeader. biSizeImage : = TempWidth * TempHeight * SizeOf( TRGBQuad) ;
TempNewBitmap : = CreateDIBSection( TempDstDC, TempInfo, DIB_RGB_COLORS, TempBits, 0 , 0 ) ;
if ( TempNewBitmap < > 0 ) then
try
TempOldBitmap : = SelectObject( TempDstDC, TempNewBitmap) ;
if BitBlt( TempDstDC, 0 , 0 , TempWidth, TempHeight, aSrcDC, aSrcRect. Left, aSrcRect. Top, SRCCOPY) then
begin
TempHeader. bfType : = $4D42 ; // "BM" bitmap header
2020-01-07 17:08:37 +01:00
TempHeader. bfOffBits : = sizeof( TBitmapFileHeader) + TempInfo. bmiHeader. biSize + TempInfo. bmiHeader. biClrUsed * SizeOf( TRGBQuad) ;
2020-01-02 20:02:47 +01:00
TempHeader. bfSize : = TempHeader. bfOffBits + TempInfo. bmiHeader. biSizeImage;
aStream. position : = 0 ;
aStream. Write( TempHeader, SizeOf( TBitmapFileHeader) ) ;
aStream. Write( TempInfo. bmiHeader, SizeOf( TBitmapInfoHeader) ) ;
aStream. Write( TempBits^ , TempInfo. bmiHeader. biSizeImage) ;
aStream. position : = 0 ;
Result : = True ;
end ;
SelectObject( TempDstDC, TempOldBitmap) ;
finally
DeleteObject( TempNewBitmap) ;
end ;
end ;
ReleaseDC( 0 , TempDstDC) ;
end ;
{$ENDIF}
2020-05-07 11:46:48 +02:00
// ******************************************
// ************** TBrowserInfo **************
// ******************************************
constructor TBrowserInfo. Create( const aBrowser : ICefBrowser) ;
begin
inherited Create;
FBrowser : = aBrowser;
FID : = aBrowser. Identifier;
FIsClosing : = False ;
end ;
destructor TBrowserInfo. Destroy;
begin
FBrowser : = nil ;
inherited Destroy;
end ;
2021-07-29 16:20:34 +02:00
function TBrowserInfo. GetIsValid : boolean ;
begin
Result : = not( FIsClosing) and ( FBrowser < > nil ) and FBrowser. IsValid;
end ;
2020-05-07 11:46:48 +02:00
// ******************************************
// *********** TBrowserInfoList *************
// ******************************************
destructor TBrowserInfoList. Destroy;
begin
FreeAndClearAllItems;
inherited Destroy;
end ;
function TBrowserInfoList. AddBrowser( const aBrowser : ICefBrowser) : boolean ;
var
i : integer ;
TempInfo : TBrowserInfo;
begin
Result : = False ;
2021-03-25 13:00:37 +01:00
if ( aBrowser < > nil ) then
2020-05-07 11:46:48 +02:00
begin
2021-03-25 13:00:37 +01:00
i : = SearchBrowser( aBrowser. Identifier) ;
2020-05-07 11:46:48 +02:00
2021-03-25 13:00:37 +01:00
if ( i < 0 ) then
begin
TempInfo : = TBrowserInfo. Create( aBrowser) ;
if ( Add( TempInfo) > = 0 ) then
Result : = True
else
TempInfo. Free;
end ;
2020-05-07 11:46:48 +02:00
end ;
end ;
function TBrowserInfoList. RemoveBrowser( const aBrowser : ICefBrowser) : boolean ;
var
i : integer ;
begin
Result : = False ;
2021-03-25 13:00:37 +01:00
if ( aBrowser < > nil ) then
2020-05-07 11:46:48 +02:00
begin
2021-03-25 13:00:37 +01:00
i : = SearchBrowser( aBrowser. Identifier) ;
if ( i > = 0 ) then
begin
TBrowserInfo( Items[ i] ) . Free;
Delete( i) ;
Result : = True ;
end ;
2020-05-07 11:46:48 +02:00
end ;
end ;
function TBrowserInfoList. SearchBrowser( aID : integer ) : integer ;
var
i : integer ;
begin
i : = 0 ;
while ( i < Count) do
if ( TBrowserInfo( Items[ i] ) . ID = aID) then
2020-05-08 17:47:49 +02:00
begin
Result : = i;
exit;
end
2020-05-07 11:46:48 +02:00
else
inc( i) ;
Result : = - 1 ;
end ;
procedure TBrowserInfoList. SetBrowserIsClosing( aID : integer ; aValue : boolean ) ;
var
i : integer ;
begin
i : = SearchBrowser( aID) ;
if ( i > = 0 ) then TBrowserInfo( Items[ i] ) . IsClosing : = aValue;
end ;
function TBrowserInfoList. GetBrowserIsClosing( aID : integer ) : boolean ;
var
i : integer ;
begin
i : = SearchBrowser( aID) ;
Result : = ( i > = 0 ) and TBrowserInfo( Items[ i] ) . IsClosing;
end ;
2021-07-29 16:20:34 +02:00
function TBrowserInfoList. GetBrowserIsValid( aID : integer ) : boolean ;
var
i : integer ;
begin
i : = SearchBrowser( aID) ;
Result : = ( i > = 0 ) and TBrowserInfo( Items[ i] ) . IsValid;
end ;
2020-05-07 11:46:48 +02:00
function TBrowserInfoList. GetBrowser( aID : integer ) : ICefBrowser;
var
i : integer ;
begin
i : = SearchBrowser( aID) ;
if ( i > = 0 ) then
Result : = TBrowserInfo( Items[ i] ) . Browser
else
Result : = nil ;
end ;
function TBrowserInfoList. GetFirstBrowser : ICefBrowser;
begin
if ( Count > 0 ) then
Result : = TBrowserInfo( Items[ 0 ] ) . Browser
else
Result : = nil ;
end ;
function TBrowserInfoList. GetFirstID : integer ;
begin
if ( Count > 0 ) then
Result : = TBrowserInfo( Items[ 0 ] ) . ID
else
Result : = 0 ;
end ;
procedure TBrowserInfoList. FreeAndClearAllItems;
var
i : integer ;
begin
i : = pred( Count) ;
while ( i > = 0 ) do
begin
TBrowserInfo( Items[ i] ) . Free;
dec( i) ;
end ;
Clear;
end ;
procedure TBrowserInfoList. CloseAllBrowsers;
var
i : integer ;
begin
try
i : = pred( Count) ;
while ( i > = 0 ) do
begin
if ( TBrowserInfo( Items[ i] ) . Browser. Host < > nil ) then
TBrowserInfo( Items[ i] ) . Browser. Host. CloseBrowser( True ) ;
dec( i) ;
end ;
except
on e : exception do
if CustomExceptionHandler( 'TBrowserInfoList.CloseAllBrowsers' , e) then raise ;
end ;
end ;
2019-11-10 00:24:26 +01:00
end .