diff --git a/dotnet/src/webdriver/DevTools/DevToolsSession.cs b/dotnet/src/webdriver/DevTools/DevToolsSession.cs index 27358159dff5a..2223517de4a2d 100644 --- a/dotnet/src/webdriver/DevTools/DevToolsSession.cs +++ b/dotnet/src/webdriver/DevTools/DevToolsSession.cs @@ -429,11 +429,11 @@ private async Task InitializeSession() this.domains.Target.TargetDetached += this.OnTargetDetached; } - private async void OnTargetDetached(object sender, TargetDetachedEventArgs e) + private void OnTargetDetached(object sender, TargetDetachedEventArgs e) { if (e.SessionId == this.ActiveSessionId && e.TargetId == this.attachedTargetId) { - await this.StopSession(false); + Task.Run(async () => await this.StopSession(false)).GetAwaiter().GetResult(); } } @@ -524,7 +524,10 @@ private async Task ReceiveMessage() using (var reader = new StreamReader(stream, Encoding.UTF8)) { string message = reader.ReadToEnd(); - ProcessIncomingMessage(message); + + // fire and forget + // TODO: we need implement some kind of queue + Task.Run(() => ProcessIncomingMessage(message)); } } } @@ -583,8 +586,7 @@ private void ProcessIncomingMessage(string message) LogTrace("Recieved Event {0}: {1}", method, eventData.ToString()); - // fire and forget - Task.Run(() => OnDevToolsEventReceived(new DevToolsEventReceivedEventArgs(methodParts[0], methodParts[1], eventData))); + OnDevToolsEventReceived(new DevToolsEventReceivedEventArgs(methodParts[0], methodParts[1], eventData)); return; } diff --git a/dotnet/src/webdriver/DevTools/Network.cs b/dotnet/src/webdriver/DevTools/Network.cs index 76603b2f38b1b..22ff81d2b21a6 100644 --- a/dotnet/src/webdriver/DevTools/Network.cs +++ b/dotnet/src/webdriver/DevTools/Network.cs @@ -16,7 +16,7 @@ // limitations under the License. // -using System; +using System.Linq; using System.Threading.Tasks; namespace OpenQA.Selenium.DevTools @@ -29,17 +29,17 @@ public abstract class Network /// /// Occurs when a network request requires authorization. /// - public event EventHandler AuthRequired; + public event AsyncEventHandler AuthRequired; /// /// Occurs when a network request is intercepted. /// - public event EventHandler RequestPaused; + public event AsyncEventHandler RequestPaused; /// /// Occurs when a network response is received. /// - public event EventHandler ResponsePaused; + public event AsyncEventHandler ResponsePaused; /// /// Asynchronously disables network caching. @@ -152,9 +152,14 @@ public async Task SetUserAgentOverride(string userAgent) /// An that contains the event data. protected virtual void OnAuthRequired(AuthRequiredEventArgs e) { - if (this.AuthRequired != null) + var delegates = AuthRequired?.GetInvocationList(); + + if (delegates != null) { - this.AuthRequired(this, e); + foreach (var d in delegates.Cast>()) + { + Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult(); + } } } @@ -164,9 +169,14 @@ protected virtual void OnAuthRequired(AuthRequiredEventArgs e) /// An that contains the event data. protected virtual void OnRequestPaused(RequestPausedEventArgs e) { - if (this.RequestPaused != null) + var delegates = RequestPaused?.GetInvocationList(); + + if (delegates != null) { - this.RequestPaused(this, e); + foreach (var d in delegates.Cast>()) + { + Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult(); + } } } @@ -176,10 +186,17 @@ protected virtual void OnRequestPaused(RequestPausedEventArgs e) /// An that contains the event data. protected virtual void OnResponsePaused(ResponsePausedEventArgs e) { - if (this.ResponsePaused != null) + var delegates = ResponsePaused?.GetInvocationList(); + + if (delegates != null) { - this.ResponsePaused(this, e); + foreach (var d in delegates.Cast>()) + { + Task.Run(async () => await d.Invoke(this, e)).GetAwaiter().GetResult(); + } } } + + public delegate Task AsyncEventHandler(object sender, TEventArgs e); } } diff --git a/dotnet/src/webdriver/NetworkManager.cs b/dotnet/src/webdriver/NetworkManager.cs index dbea1611457c1..7bce452bcb4af 100644 --- a/dotnet/src/webdriver/NetworkManager.cs +++ b/dotnet/src/webdriver/NetworkManager.cs @@ -190,7 +190,7 @@ public void ClearResponseHandlers() this.responseHandlers.Clear(); } - private async void OnAuthRequired(object sender, AuthRequiredEventArgs e) + private async Task OnAuthRequired(object sender, AuthRequiredEventArgs e) { string requestId = e.RequestId; Uri uri = new Uri(e.Uri); @@ -212,7 +212,7 @@ private async void OnAuthRequired(object sender, AuthRequiredEventArgs e) } } - private async void OnRequestPaused(object sender, RequestPausedEventArgs e) + private async Task OnRequestPaused(object sender, RequestPausedEventArgs e) { if (this.NetworkRequestSent != null) { @@ -240,7 +240,7 @@ private async void OnRequestPaused(object sender, RequestPausedEventArgs e) await this.session.Value.Domains.Network.ContinueRequestWithoutModification(e.RequestData); } - private async void OnResponsePaused(object sender, ResponsePausedEventArgs e) + private async Task OnResponsePaused(object sender, ResponsePausedEventArgs e) { if (e.ResponseData.Headers.Count > 0) {