Skip to content

Commit f27b489

Browse files
campersauamaitland
authored andcommitted
DevTools Client - Generic ExecuteDevToolsMethodAsync and add RegisterEventHandler (#3674)
* Make ExecuteDevToolsMethodAsync generic * Make RegisterEventHandler generic * PR feedback and added test for registering multiple event handlers * Updated generated code to latest version * Fix possible NRE when removing event listener before adding one
1 parent 90cbf84 commit f27b489

10 files changed

+8312
-5411
lines changed

CefSharp.Test/DevTools/DevToolsClientFacts.cs

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using System.Drawing.Imaging;
99
using System.IO;
1010
using System.Threading.Tasks;
11+
using CefSharp.DevTools;
1112
using CefSharp.DevTools.Browser;
1213
using CefSharp.DevTools.Emulation;
1314
using 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
}

CefSharp/CefSharp.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
<Compile Include="DevTools\DevToolsClient.cs" />
9393
<Compile Include="DevTools\DevToolsClient.Generated.cs" />
9494
<Compile Include="DevTools\DevToolsClientException.cs" />
95+
<Compile Include="DevTools\DevToolsEventHandlerRegistration.cs" />
96+
<Compile Include="DevTools\DevToolsMethodResponseContext.cs" />
9597
<Compile Include="DevTools\DevToolsDomainBase.cs" />
9698
<Compile Include="DevTools\DevToolsDomainEntityBase.cs" />
9799
<Compile Include="DevTools\DevToolsDomainErrorResponse.cs" />

0 commit comments

Comments
 (0)