@@ -37,6 +37,13 @@ namespace CefSharp.WinForms.Handler
3737    /// <param name="browser">browser</param> 
3838    public  delegate  void  OnPopupDestroyedDelegate ( ChromiumHostControl  control ,  IBrowser  browser ) ; 
3939
40+     /// <summary> 
41+     /// Called to create a new instance of <see cref="ChromiumHostControl"/>. Allows creation of a derived 
42+     /// implementation of <see cref="ChromiumHostControl"/>. 
43+     /// </summary> 
44+     /// <returns>A custom instance of <see cref="ChromiumHostControl"/>.</returns> 
45+     public  delegate  ChromiumHostControl  CreatePopupChromiumHostControl ( ) ; 
46+ 
4047    /// <summary> 
4148    /// A WinForms Specific <see cref="ILifeSpanHandler"/> implementation that simplifies 
4249    /// the process of hosting a Popup as a Control/Tab. 
@@ -49,7 +56,13 @@ public class LifeSpanHandler : CefSharp.Handler.LifeSpanHandler
4956        private  OnPopupDestroyedDelegate  onPopupDestroyed ; 
5057        private  OnPopupBrowserCreatedDelegate  onPopupBrowserCreated ; 
5158        private  OnPopupCreatedDelegate  onPopupCreated ; 
52-         
59+         private  CreatePopupChromiumHostControl  chromiumHostControlCreatedDelegate ; 
60+ 
61+         public  LifeSpanHandler ( CreatePopupChromiumHostControl  chromiumHostControlCreatedDelegate ) 
62+         { 
63+             this . chromiumHostControlCreatedDelegate  =  chromiumHostControlCreatedDelegate ; 
64+         } 
65+ 
5366        /// <inheritdoc/> 
5467        protected  override  bool  DoClose ( IWebBrowser  chromiumWebBrowser ,  IBrowser  browser ) 
5568        { 
@@ -168,10 +181,15 @@ protected override bool OnBeforePopup(IWebBrowser chromiumWebBrowser, IBrowser b
168181            //We need to execute sync here so IWindowInfo.SetAsChild is called before we return false; 
169182            webBrowser . InvokeSyncOnUiThreadIfRequired ( new  Action ( ( )  => 
170183            { 
171-                 var  control  =  new  ChromiumHostControl 
184+                 ChromiumHostControl  control  =  chromiumHostControlCreatedDelegate ? . Invoke ( ) ; 
185+ 
186+                 if  ( control  ==  null ) 
172187                { 
173-                     Dock  =  DockStyle . Fill 
174-                 } ; 
188+                     control  =  new  ChromiumHostControl 
189+                     { 
190+                         Dock  =  DockStyle . Fill 
191+                     } ; 
192+                 } 
175193                control . CreateControl ( ) ; 
176194
177195                onPopupCreated ? . Invoke ( control ,  targetUrl ) ; 
@@ -238,10 +256,14 @@ public LifeSpanHandler OnPopupDestroyed(OnPopupDestroyedDelegate onPopupDestroye
238256        /// of implementing directly you will need to inherit from <see cref="CefSharp.WinForms.Handler.LoadHandler"/>. 
239257        /// As it provides base functionality required to make <see cref="ChromiumHostControl"/> events work correctly. 
240258        /// </summary> 
241-         /// <returns>LifeSpanHandlerBuilder</returns> 
242-         public  static   LifeSpanHandlerBuilder  Create ( ) 
259+         /// <returns> 
260+         /// A <see cref="LifeSpanHandlerBuilder"/> which can be used to fluently create an <see cref="ILifeSpanHandler"/>. 
261+         /// Call <see cref="LifeSpanHandlerBuilder.Build"/> to create the actual instance after you have call 
262+         /// <see cref="LifeSpanHandlerBuilder.OnPopupCreated(OnPopupCreatedDelegate)"/> etc. 
263+         /// </returns> 
264+         public  static   LifeSpanHandlerBuilder  Create ( CreatePopupChromiumHostControl  chromiumHostControlCreatedDelegate  =  null ) 
243265        { 
244-             return  new  LifeSpanHandlerBuilder ( ) ; 
266+             return  new  LifeSpanHandlerBuilder ( chromiumHostControlCreatedDelegate ) ; 
245267        } 
246268    } 
247269} 
0 commit comments