From a0a8aac9a95da4a67cc38980a1d264b34de4fd65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Mon, 16 Jun 2025 14:26:13 +0200 Subject: [PATCH 1/2] Fix devtools url used for debug with chrome and edge --- ...semblyNetDebugProxyAppBuilderExtensions.cs | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/mono/wasm/host/DevServer/WebAssemblyNetDebugProxyAppBuilderExtensions.cs b/src/mono/wasm/host/DevServer/WebAssemblyNetDebugProxyAppBuilderExtensions.cs index 836ba2adc470e2..c15f8948b2e353 100644 --- a/src/mono/wasm/host/DevServer/WebAssemblyNetDebugProxyAppBuilderExtensions.cs +++ b/src/mono/wasm/host/DevServer/WebAssemblyNetDebugProxyAppBuilderExtensions.cs @@ -18,6 +18,7 @@ using System.Web; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Extensions; namespace Microsoft.WebAssembly.AppHost.DevServer; @@ -428,9 +429,31 @@ private string GetDevToolsUrlWithProxy(BrowserTab tabToDebug) { var underlyingV8Endpoint = new Uri(tabToDebug.WebSocketDebuggerUrl); var proxyEndpoint = new Uri(_debugProxyUrl); - var devToolsUrlAbsolute = new Uri(_browserHost + tabToDebug.DevtoolsFrontendUrl); + var devToolsUrlAbsolute = new Uri(new Uri(_browserHost), relativeUri: NormalizeDevtoolsFrontendUrl(tabToDebug.DevtoolsFrontendUrl)); var devToolsUrlWithProxy = $"{devToolsUrlAbsolute.Scheme}://{devToolsUrlAbsolute.Authority}{devToolsUrlAbsolute.AbsolutePath}?{underlyingV8Endpoint.Scheme}={proxyEndpoint.Authority}{underlyingV8Endpoint.PathAndQuery}"; return devToolsUrlWithProxy; + + static string NormalizeDevtoolsFrontendUrl(string devtoolsFrontendUrl) + { + // Currently frontend url can be: + // - absolute (since v135 of chrome and edge) + // chrome example: https://chrome-devtools-frontend.appspot.com/serve_rev/@031848bc6ad02b97854f3d6154d3aefd0434756a/inspector.html?ws=localhost:9222/devtools/page/719FE9D3B43570193235446E0AB36859 + // edge example: https://aka.ms/docs-landing-page/serve_rev/@4e2c41645f24197463afa2ab6aa999352ee8255c/inspector.html?ws=localhost:9222/devtools/page/3A4D56E09776321628432588FC9299F4 + // - relative (managed as fallback for brosers with prior version) + // example: /devtools/inspector.html?ws=localhost:9222/devtools/page/DAB7FB6187B554E10B0BD18821265734 + // The absolute url can't be used as-is because is not valid for debugging and cannot be made relative because of lack "devtools" segment + // before "inspector.html" but we can keep the query string and append to the default "devtools/inspector.html" browser devtools page + + const string DefaultBrowserDevToolsPagePath = "devtools/inspector.html"; + + if (devtoolsFrontendUrl.AsSpan().TrimStart('/').StartsWith(DefaultBrowserDevToolsPagePath)) + { + return devtoolsFrontendUrl; + } + + UriHelper.FromAbsolute(devtoolsFrontendUrl, out _, out _, out _, out var query, out _); + return $"{DefaultBrowserDevToolsPagePath}{query}"; + } } private string GetLaunchChromeInstructions(string targetApplicationUrl) From b64586f1692f254ecd3cf2df0cb8f200da3c6f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Fi=C5=A1era?= Date: Mon, 16 Jun 2025 14:40:22 +0200 Subject: [PATCH 2/2] Fingerprint javascript files --- src/mono/wasm/templates/templates/browser/browser.0.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mono/wasm/templates/templates/browser/browser.0.csproj b/src/mono/wasm/templates/templates/browser/browser.0.csproj index cf11f1d4e3ab53..e6debf4cd7fab3 100644 --- a/src/mono/wasm/templates/templates/browser/browser.0.csproj +++ b/src/mono/wasm/templates/templates/browser/browser.0.csproj @@ -4,4 +4,8 @@ true true + + + +