@@ -3,7 +3,7 @@ use std::path::{Path, PathBuf};
33use cef:: args:: Args ;
44use cef:: sys:: { CEF_API_VERSION_LAST , cef_resultcode_t} ;
55use cef:: {
6- App , BrowserSettings , CefString , Client , DictionaryValue , ImplCommandLine , ImplRequestContext , RenderHandler , RequestContextSettings , SchemeHandlerFactory , Settings , WindowInfo , api_hash,
6+ App , BrowserSettings , CefString , Client , DictionaryValue , ImplCommandLine , ImplRequestContext , RequestContextSettings , SchemeHandlerFactory , Settings , WindowInfo , api_hash,
77 browser_host_create_browser_sync, execute_process,
88} ;
99
@@ -13,7 +13,7 @@ use crate::cef::CefEventHandler;
1313use crate :: cef:: consts:: { RESOURCE_DOMAIN , RESOURCE_SCHEME } ;
1414use crate :: cef:: dirs:: create_instance_dir;
1515use crate :: cef:: input:: InputState ;
16- use crate :: cef:: internal:: { BrowserProcessAppImpl , BrowserProcessClientImpl , RenderHandlerImpl , RenderProcessAppImpl , SchemeHandlerFactoryImpl } ;
16+ use crate :: cef:: internal:: { BrowserProcessAppImpl , BrowserProcessClientImpl , RenderProcessAppImpl , SchemeHandlerFactoryImpl } ;
1717
1818pub ( crate ) struct CefContextBuilder < H : CefEventHandler > {
1919 pub ( crate ) args : Args ,
@@ -131,7 +131,7 @@ impl<H: CefEventHandler> CefContextBuilder<H> {
131131
132132 fn initialize_inner ( self , event_handler : & H , settings : Settings ) -> Result < ( ) , InitError > {
133133 // Attention! Wrapping this in an extra App is necessary, otherwise the program still compiles but segfaults
134- let mut cef_app = App :: new ( BrowserProcessAppImpl :: new ( event_handler. clone ( ) ) ) ;
134+ let mut cef_app = App :: new ( BrowserProcessAppImpl :: new ( event_handler. duplicate ( ) ) ) ;
135135
136136 let result = cef:: initialize ( Some ( self . args . as_main_args ( ) ) , Some ( & settings) , Some ( & mut cef_app) , std:: ptr:: null_mut ( ) ) ;
137137 if result != 1 {
@@ -146,8 +146,7 @@ impl<H: CefEventHandler> CefContextBuilder<H> {
146146}
147147
148148fn create_browser < H : CefEventHandler > ( event_handler : H , instance_dir : PathBuf , disable_gpu_acceleration : bool ) -> Result < SingleThreadedCefContext , InitError > {
149- let render_handler = RenderHandler :: new ( RenderHandlerImpl :: new ( event_handler. clone ( ) ) ) ;
150- let mut client = Client :: new ( BrowserProcessClientImpl :: new ( render_handler, event_handler. clone ( ) ) ) ;
149+ let mut client = Client :: new ( BrowserProcessClientImpl :: new ( & event_handler) ) ;
151150
152151 #[ cfg( feature = "accelerated_paint" ) ]
153152 let use_accelerated_paint = if disable_gpu_acceleration {
@@ -180,7 +179,7 @@ fn create_browser<H: CefEventHandler>(event_handler: H, instance_dir: PathBuf, d
180179 return Err ( InitError :: RequestContextCreationFailed ) ;
181180 } ;
182181
183- let mut scheme_handler_factory = SchemeHandlerFactory :: new ( SchemeHandlerFactoryImpl :: new ( event_handler. clone ( ) ) ) ;
182+ let mut scheme_handler_factory = SchemeHandlerFactory :: new ( SchemeHandlerFactoryImpl :: new ( event_handler. duplicate ( ) ) ) ;
184183 incognito_request_context. clear_scheme_handler_factories ( ) ;
185184 incognito_request_context. register_scheme_handler_factory ( Some ( & CefString :: from ( RESOURCE_SCHEME ) ) , Some ( & CefString :: from ( RESOURCE_DOMAIN ) ) , Some ( & mut scheme_handler_factory) ) ;
186185
@@ -197,6 +196,7 @@ fn create_browser<H: CefEventHandler>(event_handler: H, instance_dir: PathBuf, d
197196
198197 if let Some ( browser) = browser {
199198 Ok ( SingleThreadedCefContext {
199+ event_handler : Box :: new ( event_handler) ,
200200 browser,
201201 input_state : InputState :: default ( ) ,
202202 instance_dir,
0 commit comments