diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index bf00659030..69c68697c8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -306,9 +306,9 @@ https://github.com/dotnet/runtime 1dfd9438149f74ae11918a7b0709b8d58c61443f - + https://github.com/dotnet/runtime - 6cc7cffaff2e0413ee84d9a7736f9ae1aa9a3f12 + 1dfd9438149f74ae11918a7b0709b8d58c61443f diff --git a/eng/Versions.props b/eng/Versions.props index e7cc59f8a6..5d26db11d9 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -68,6 +68,7 @@ 5.0.0-rc.1.20428.3 5.0.0-rc.1.20428.3 5.0.0-rc.1.20428.3 + 5.0.0-rc.1.20428.3 5.0.0-rc.1.20428.3 5.0.0-rc.1.20428.3 5.0.0-rc.1.20428.3 diff --git a/src/Components/WebAssembly/Server/src/DebugProxyLauncher.cs b/src/Components/WebAssembly/Server/src/DebugProxyLauncher.cs index f6cc0ebe21..26d51d49b8 100644 --- a/src/Components/WebAssembly/Server/src/DebugProxyLauncher.cs +++ b/src/Components/WebAssembly/Server/src/DebugProxyLauncher.cs @@ -10,7 +10,9 @@ using System.Reflection; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; +using System.Web; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.CommandLineUtils; using Microsoft.Extensions.DependencyInjection; @@ -24,20 +26,20 @@ namespace Microsoft.AspNetCore.Builder private static readonly Regex NowListeningRegex = new Regex(@"^\s*Now listening on: (?.*)$", RegexOptions.None, TimeSpan.FromSeconds(10)); private static readonly Regex ApplicationStartedRegex = new Regex(@"^\s*Application started\. Press Ctrl\+C to shut down\.$", RegexOptions.None, TimeSpan.FromSeconds(10)); - public static Task EnsureLaunchedAndGetUrl(IServiceProvider serviceProvider) + public static Task EnsureLaunchedAndGetUrl(IServiceProvider serviceProvider, string devToolsHost) { lock (LaunchLock) { if (LaunchedDebugProxyUrl == null) { - LaunchedDebugProxyUrl = LaunchAndGetUrl(serviceProvider); + LaunchedDebugProxyUrl = LaunchAndGetUrl(serviceProvider, devToolsHost); } return LaunchedDebugProxyUrl; } } - private static async Task LaunchAndGetUrl(IServiceProvider serviceProvider) + private static async Task LaunchAndGetUrl(IServiceProvider serviceProvider, string devToolsHost) { var tcs = new TaskCompletionSource(); @@ -45,10 +47,11 @@ namespace Microsoft.AspNetCore.Builder var executablePath = LocateDebugProxyExecutable(environment); var muxerPath = DotNetMuxer.MuxerPathOrDefault(); var ownerPid = Process.GetCurrentProcess().Id; + var processStartInfo = new ProcessStartInfo { FileName = muxerPath, - Arguments = $"exec \"{executablePath}\"", + Arguments = $"exec \"{executablePath}\" --owner-pid {ownerPid} --DevToolsUrl {devToolsHost}", UseShellExecute = false, RedirectStandardOutput = true, }; diff --git a/src/Components/WebAssembly/Server/src/Microsoft.AspNetCore.Components.WebAssembly.Server.csproj b/src/Components/WebAssembly/Server/src/Microsoft.AspNetCore.Components.WebAssembly.Server.csproj index f77658c0e0..e789734fcd 100644 --- a/src/Components/WebAssembly/Server/src/Microsoft.AspNetCore.Components.WebAssembly.Server.csproj +++ b/src/Components/WebAssembly/Server/src/Microsoft.AspNetCore.Components.WebAssembly.Server.csproj @@ -12,9 +12,7 @@ - - - + @@ -32,12 +30,7 @@ - + diff --git a/src/Components/WebAssembly/Server/src/TargetPickerUi.cs b/src/Components/WebAssembly/Server/src/TargetPickerUi.cs index e063ba8fef..538086f29c 100644 --- a/src/Components/WebAssembly/Server/src/TargetPickerUi.cs +++ b/src/Components/WebAssembly/Server/src/TargetPickerUi.cs @@ -23,12 +23,13 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Server IgnoreNullValues = true }; - private readonly string BrowserHost = "http://localhost:9222"; + private string _browserHost; private string _debugProxyUrl; - public TargetPickerUi(string debugProxyUrl) + public TargetPickerUi(string debugProxyUrl, string devToolsHost) { _debugProxyUrl = debugProxyUrl; + _browserHost = devToolsHost; } public async Task Display(HttpContext context) @@ -38,7 +39,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Server var request = context.Request; var targetApplicationUrl = request.Query["url"]; - var debuggerTabsListUrl = $"{BrowserHost}/json"; + var debuggerTabsListUrl = $"{_browserHost}/json"; IEnumerable availableTabs; try @@ -137,7 +138,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Server { var underlyingV8Endpoint = new Uri(tabToDebug.WebSocketDebuggerUrl); var proxyEndpoint = new Uri(_debugProxyUrl); - var devToolsUrlAbsolute = new Uri(BrowserHost + tabToDebug.DevtoolsFrontendUrl); + var devToolsUrlAbsolute = new Uri(_browserHost + tabToDebug.DevtoolsFrontendUrl); var devToolsUrlWithProxy = $"{devToolsUrlAbsolute.Scheme}://{devToolsUrlAbsolute.Authority}{devToolsUrlAbsolute.AbsolutePath}?{underlyingV8Endpoint.Scheme}={proxyEndpoint.Authority}{underlyingV8Endpoint.PathAndQuery}"; return devToolsUrlWithProxy; } @@ -145,7 +146,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Server private string GetLaunchChromeInstructions(string targetApplicationUrl) { var profilePath = Path.Combine(Path.GetTempPath(), "blazor-chrome-debug"); - var debuggerPort = new Uri(BrowserHost).Port; + var debuggerPort = new Uri(_browserHost).Port; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { @@ -171,7 +172,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Server private string GetLaunchEdgeInstructions(string targetApplicationUrl) { var profilePath = Path.Combine(Path.GetTempPath(), "blazor-edge-debug"); - var debuggerPort = new Uri(BrowserHost).Port; + var debuggerPort = new Uri(_browserHost).Port; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { @@ -210,7 +211,7 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Server private async Task> GetOpenedBrowserTabs() { using var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(5) }; - var jsonResponse = await httpClient.GetStringAsync($"{BrowserHost}/json"); + var jsonResponse = await httpClient.GetStringAsync($"{_browserHost}/json"); return JsonSerializer.Deserialize(jsonResponse, JsonOptions); } diff --git a/src/Components/WebAssembly/Server/src/WebAssemblyNetDebugProxyAppBuilderExtensions.cs b/src/Components/WebAssembly/Server/src/WebAssemblyNetDebugProxyAppBuilderExtensions.cs index 25e80543b0..81eb09641b 100644 --- a/src/Components/WebAssembly/Server/src/WebAssemblyNetDebugProxyAppBuilderExtensions.cs +++ b/src/Components/WebAssembly/Server/src/WebAssemblyNetDebugProxyAppBuilderExtensions.cs @@ -1,7 +1,9 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Net; +using System.Web; using Microsoft.AspNetCore.Components.WebAssembly.Server; namespace Microsoft.AspNetCore.Builder @@ -21,7 +23,17 @@ namespace Microsoft.AspNetCore.Builder { app.Use(async (context, next) => { - var debugProxyBaseUrl = await DebugProxyLauncher.EnsureLaunchedAndGetUrl(context.RequestServices); + var queryParams = HttpUtility.ParseQueryString(context.Request.QueryString.Value); + var browserParam = queryParams.Get("browser"); + Uri browserUrl = null; + var devToolsHost = "http://localhost:9222"; + if (browserParam != null) + { + browserUrl = new Uri(browserParam); + devToolsHost = $"http://{browserUrl.Host}:{browserUrl.Port}"; + } + + var debugProxyBaseUrl = await DebugProxyLauncher.EnsureLaunchedAndGetUrl(context.RequestServices, devToolsHost); var requestPath = context.Request.Path.ToString(); if (requestPath == string.Empty) { @@ -31,11 +43,11 @@ namespace Microsoft.AspNetCore.Builder switch (requestPath) { case "/": - var targetPickerUi = new TargetPickerUi(debugProxyBaseUrl); + var targetPickerUi = new TargetPickerUi(debugProxyBaseUrl, devToolsHost); await targetPickerUi.Display(context); break; case "/ws-proxy": - context.Response.Redirect($"{debugProxyBaseUrl}{requestPath}{context.Request.QueryString}"); + context.Response.Redirect($"{debugProxyBaseUrl}{browserUrl.PathAndQuery}"); break; default: context.Response.StatusCode = (int)HttpStatusCode.NotFound;