From 56048b59a4515ea3f49e61954b4959430e1811ee Mon Sep 17 00:00:00 2001 From: Ilona Tomkowicz <32700855+ilonatommy@users.noreply.github.com> Date: Thu, 25 Apr 2024 17:40:26 +0200 Subject: [PATCH] [browser][wbt] Detect when browser gets disconnected and do not try to dispose. (#101530) --- .../wasm/Wasm.Build.Tests/BrowserRunner.cs | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/mono/wasm/Wasm.Build.Tests/BrowserRunner.cs b/src/mono/wasm/Wasm.Build.Tests/BrowserRunner.cs index 6772c540962c9..b37deb5781b29 100644 --- a/src/mono/wasm/Wasm.Build.Tests/BrowserRunner.cs +++ b/src/mono/wasm/Wasm.Build.Tests/BrowserRunner.cs @@ -109,11 +109,17 @@ public async Task SpawnBrowserAsync( // codespaces: ignore certificate error -> Microsoft.Playwright.PlaywrightException : net::ERR_CERT_AUTHORITY_INVALID string[] chromeArgs = new[] { $"--explicitly-allowed-ports={url.Port}", "--ignore-certificate-errors" }; _testOutput.WriteLine($"Launching chrome ('{s_chromePath.Value}') via playwright with args = {string.Join(',', chromeArgs)}"); - return Browser = await Playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions{ + Browser = await Playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions{ ExecutablePath = s_chromePath.Value, Headless = headless, Args = chromeArgs }); + Browser.Disconnected += (sender, e) => + { + Browser = null; + _testOutput.WriteLine("Browser has been disconnected"); + }; + return Browser; } // FIXME: options @@ -196,8 +202,21 @@ public async Task WaitForProcessExitAsync(TimeSpan timeout) public async ValueTask DisposeAsync() { - if (Browser is not null) - await Browser.DisposeAsync(); - Playwright?.Dispose(); + try + { + if (Browser is not null) + { + await Browser.DisposeAsync(); + Browser = null; + } + } + catch (PlaywrightException ex) + { + _testOutput.WriteLine($"PlaywrightException occurred during DisposeAsync: {ex.Message}"); + } + finally + { + Playwright?.Dispose(); + } } }