Page 1 of 1

Re: Help on Using Custom Renderer

Posted: Fri Feb 15, 2019 11:07 am
by salvadordf
Hi,

GlobalCEFApp creates a TCustomCefApp which creates all the handlers internally :
  • ICefResourceBundleHandler
  • ICefBrowserProcessHandler
  • ICefRenderProcessHandler
GlobalCEFApp also creates a ICefRegisterCDMCallback and the internal ICefRenderProcessHandler also creates a ICefLoadHandler.

All the handler events are exposed as GlobalCEFApp events.

For ICefBrowserProcessHandler :
  • GlobalCEFApp.OnContextInitialized
  • GlobalCEFApp.OnBeforeChildProcessLaunch
  • GlobalCEFApp.OnRenderProcessThreadCreated
  • GlobalCEFApp.OnScheduleMessagePumpWork
For ICefResourceBundleHandler :
  • GlobalCEFApp.OnGetLocalizedString
  • GlobalCEFApp.OnGetDataResource
  • GlobalCEFApp.OnGetDataResourceForScale
For ICefRenderProcessHandler :
  • GlobalCEFApp.OnRenderThreadCreated
  • GlobalCEFApp.OnWebKitInitialized
  • GlobalCEFApp.OnBrowserCreated
  • GlobalCEFApp.OnBrowserDestroyed
  • GlobalCEFApp.OnContextCreated
  • GlobalCEFApp.OnContextReleased
  • GlobalCEFApp.OnUncaughtException
  • GlobalCEFApp.OnFocusedNodeChanged
  • GlobalCEFApp.OnProcessMessageReceived

For ICefRegisterCDMCallback :
  • GlobalCEFApp.OnCDMRegistrationComplete
For ICefLoadHandler :
  • GlobalCEFApp.OnLoadingStateChange
  • GlobalCEFApp.OnLoadStart
  • GlobalCEFApp.OnLoadEnd
  • GlobalCEFApp.OnLoadError

If you want to reuse the code inside GlobalCEFApp.OnProcessMessageReceived I would suggest that you assign that event to a local procedure and then call your custom class from that procedure. For example :

Code: Select all

type
TCustomClass = class // It's just a regular TObject subclass
  public
    procedure OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage; var aHandled : boolean);
end;    

procedure TCustomClass.OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage; var aHandled : boolean);
begin
// 
end;

Code: Select all

initialization
  MyCustomClass := TCustomClass.Create;

Code: Select all

procedure CreateGlobalCEFApp;
begin
  GlobalCEFApp                          := TCefApplication.Create;
  GlobalCEFApp.OnProcessMessageReceived := GlobalCEFApp_OnProcessMessageReceived;
end;

Code: Select all

procedure GlobalCEFApp_OnProcessMessageReceived(const browser       : ICefBrowser;
                                                      sourceProcess : TCefProcessId;
                                                const message       : ICefProcessMessage;
                                                var   aHandled      : boolean);
begin
  MyCustomClass.OnProcessMessageReceived(browser, sourceProcess, message, aHandled);
end;