88using System . Drawing . Imaging ;
99using System . IO ;
1010using System . Threading . Tasks ;
11+ using CefSharp . DevTools ;
1112using CefSharp . DevTools . Browser ;
1213using CefSharp . DevTools . Emulation ;
1314using CefSharp . DevTools . Network ;
@@ -310,7 +311,7 @@ public async Task ExecuteDevToolsMethodThrowsExceptionWithInvalidMethod()
310311
311312 using ( var devToolsClient = browser . GetDevToolsClient ( ) )
312313 {
313- var ex = await Assert . ThrowsAsync < CefSharp . DevTools . DevToolsClientException > (
314+ var ex = await Assert . ThrowsAsync < DevToolsClientException > (
314315 ( ) => devToolsClient . ExecuteDevToolsMethodAsync ( "methoddoesnotexist" ) ) ;
315316
316317 Assert . NotNull ( ex . Response ) ;
@@ -320,5 +321,84 @@ public async Task ExecuteDevToolsMethodThrowsExceptionWithInvalidMethod()
320321 }
321322 }
322323 }
324+
325+ [ Fact ]
326+ public async Task CanRegisterMultipleEventHandlers ( )
327+ {
328+ using ( var browser = new ChromiumWebBrowser ( "about:blank" , automaticallyCreateBrowser : false ) )
329+ {
330+ await browser . CreateBrowserAsync ( ) ;
331+
332+ using ( var devToolsClient = browser . GetDevToolsClient ( ) )
333+ {
334+ DevToolsEventArgs devToolsEventArgs = null ;
335+ EventHandler < DevToolsEventArgs > devToolsEventHandler = ( sender , args ) =>
336+ {
337+ if ( devToolsEventArgs == null )
338+ {
339+ devToolsEventArgs = args ;
340+ }
341+ } ;
342+ devToolsClient . DevToolsEvent += devToolsEventHandler ;
343+
344+ RequestWillBeSentEventArgs requestWillBeSentEventArgs1 = null ;
345+ EventHandler < RequestWillBeSentEventArgs > requestWillBeSentEventHandler1 = ( sender , args ) =>
346+ {
347+ if ( requestWillBeSentEventArgs1 == null )
348+ {
349+ requestWillBeSentEventArgs1 = args ;
350+ }
351+ } ;
352+ devToolsClient . Network . RequestWillBeSent += requestWillBeSentEventHandler1 ;
353+
354+ RequestWillBeSentEventArgs requestWillBeSentEventArgs2 = null ;
355+ EventHandler < RequestWillBeSentEventArgs > requestWillBeSentEventHandler2 = ( sender , args ) =>
356+ {
357+ if ( requestWillBeSentEventArgs2 == null )
358+ {
359+ requestWillBeSentEventArgs2 = args ;
360+ }
361+ } ;
362+ devToolsClient . Network . RequestWillBeSent += requestWillBeSentEventHandler2 ;
363+
364+ // enable events
365+ await devToolsClient . Network . EnableAsync ( ) ;
366+
367+ await browser . LoadUrlAsync ( "www.google.com" ) ;
368+
369+ Assert . NotNull ( devToolsEventArgs ) ;
370+ Assert . NotNull ( requestWillBeSentEventArgs1 ) ;
371+ Assert . NotNull ( requestWillBeSentEventArgs2 ) ;
372+
373+ Assert . Equal ( requestWillBeSentEventArgs1 . RequestId , requestWillBeSentEventArgs2 . RequestId ) ;
374+
375+ // remove second event handler
376+ devToolsClient . Network . RequestWillBeSent -= requestWillBeSentEventHandler2 ;
377+ devToolsEventArgs = null ;
378+ requestWillBeSentEventArgs1 = null ;
379+ requestWillBeSentEventArgs2 = null ;
380+
381+ await browser . LoadUrlAsync ( "www.google.com" ) ;
382+
383+ Assert . NotNull ( devToolsEventArgs ) ;
384+ Assert . NotNull ( requestWillBeSentEventArgs1 ) ;
385+ Assert . Null ( requestWillBeSentEventArgs2 ) ;
386+ }
387+ }
388+ }
389+
390+ [ Fact ]
391+ public async Task CanRemoveEventListenerBeforeAddingOne ( )
392+ {
393+ using ( var browser = new ChromiumWebBrowser ( "about:blank" , automaticallyCreateBrowser : false ) )
394+ {
395+ await browser . CreateBrowserAsync ( ) ;
396+
397+ using ( var devToolsClient = browser . GetDevToolsClient ( ) )
398+ {
399+ devToolsClient . Network . RequestWillBeSent -= ( sender , args ) => { } ;
400+ }
401+ }
402+ }
323403 }
324404}
0 commit comments