From 238ea2daa43962e151f17b15eaa4ba03ac79fc13 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Fri, 20 Feb 2026 15:34:10 +0100 Subject: [PATCH 01/15] - smoke test V8 + FF - version check for shell --- eng/pipelines/runtime.yml | 2 ++ src/native/libs/Common/JavaScript/loader/bootstrap.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml index 825b60dadd6da4..91b3dec5371a6d 100644 --- a/eng/pipelines/runtime.yml +++ b/eng/pipelines/runtime.yml @@ -965,6 +965,8 @@ extends: extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS) scenarios: - WasmTestOnChrome + - WasmTestOnFirefox + - WasmTestOnV8 # EAT Library tests - only run on linux - template: /eng/pipelines/common/templates/wasm-library-aot-tests.yml diff --git a/src/native/libs/Common/JavaScript/loader/bootstrap.ts b/src/native/libs/Common/JavaScript/loader/bootstrap.ts index 77fa053c4e328d..bfdd27368a8f61 100644 --- a/src/native/libs/Common/JavaScript/loader/bootstrap.ts +++ b/src/native/libs/Common/JavaScript/loader/bootstrap.ts @@ -3,7 +3,7 @@ import { exceptions, simd } from "wasm-feature-detect"; -import { ENVIRONMENT_IS_NODE, ENVIRONMENT_IS_SHELL } from "./per-module"; +import { ENVIRONMENT_IS_NODE, ENVIRONMENT_IS_SHELL, globalThisAny } from "./per-module"; import { dotnetAssert } from "./cross-module"; const scriptUrlQuery = /*! webpackIgnore: true */import.meta.url; @@ -15,6 +15,13 @@ const scriptDirectory = normalizeDirectoryUrl(scriptUrl); export async function validateWasmFeatures(): Promise { dotnetAssert.check(await exceptions, "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); dotnetAssert.check(await simd, "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + if (ENVIRONMENT_IS_NODE) { + const nodeMajorVersion = parseInt(globalThisAny.process.versions.node.split(".")[0], 10); + dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://aka.ms/dotnet-wasm-features`); + } else if (ENVIRONMENT_IS_SHELL) { + const v8MajorVersion = globalThisAny.version ? parseInt(globalThisAny.version.split(".")[0], 10) : 0; + dotnetAssert.check(v8MajorVersion >= 14, "This V8 shell is too old. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + } } export function locateFile(path: string, isModule = false): string { From af9aa1f744bbfe98af21afb4e1f24c53cf09ec6f Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Fri, 20 Feb 2026 15:42:24 +0100 Subject: [PATCH 02/15] Update src/native/libs/Common/JavaScript/loader/bootstrap.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/native/libs/Common/JavaScript/loader/bootstrap.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/native/libs/Common/JavaScript/loader/bootstrap.ts b/src/native/libs/Common/JavaScript/loader/bootstrap.ts index bfdd27368a8f61..64e17575f653aa 100644 --- a/src/native/libs/Common/JavaScript/loader/bootstrap.ts +++ b/src/native/libs/Common/JavaScript/loader/bootstrap.ts @@ -13,8 +13,8 @@ const scriptUrl = normalizeFileUrl(scriptUrlQuery); const scriptDirectory = normalizeDirectoryUrl(scriptUrl); export async function validateWasmFeatures(): Promise { - dotnetAssert.check(await exceptions, "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); - dotnetAssert.check(await simd, "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + dotnetAssert.check(await exceptions(), "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + dotnetAssert.check(await simd(), "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); if (ENVIRONMENT_IS_NODE) { const nodeMajorVersion = parseInt(globalThisAny.process.versions.node.split(".")[0], 10); dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://aka.ms/dotnet-wasm-features`); From 4e3990f03265fccd4b9280e60cafb9ec61f6a023 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Fri, 20 Feb 2026 15:42:51 +0100 Subject: [PATCH 03/15] Update src/native/libs/Common/JavaScript/loader/bootstrap.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../Common/JavaScript/loader/bootstrap.ts | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/native/libs/Common/JavaScript/loader/bootstrap.ts b/src/native/libs/Common/JavaScript/loader/bootstrap.ts index 64e17575f653aa..83c265d5df5757 100644 --- a/src/native/libs/Common/JavaScript/loader/bootstrap.ts +++ b/src/native/libs/Common/JavaScript/loader/bootstrap.ts @@ -19,8 +19,34 @@ export async function validateWasmFeatures(): Promise { const nodeMajorVersion = parseInt(globalThisAny.process.versions.node.split(".")[0], 10); dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://aka.ms/dotnet-wasm-features`); } else if (ENVIRONMENT_IS_SHELL) { - const v8MajorVersion = globalThisAny.version ? parseInt(globalThisAny.version.split(".")[0], 10) : 0; - dotnetAssert.check(v8MajorVersion >= 14, "This V8 shell is too old. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + const rawVersion = globalThisAny.version; + let versionString: string | undefined; + if (typeof rawVersion === "function") { + try { + const result = rawVersion(); + if (typeof result === "string") { + versionString = result; + } + } catch { + // Ignore errors when probing version() + } + } else if (typeof rawVersion === "string") { + versionString = rawVersion; + } + + let v8MajorVersion = 0; + if (versionString) { + const match = versionString.match(/^(\d+)/); + if (match) { + v8MajorVersion = parseInt(match[1], 10); + } + } + + const detectedVersionDescription = versionString ?? (rawVersion !== undefined ? String(rawVersion) : "unknown"); + dotnetAssert.check( + v8MajorVersion >= 14, + `This V8 shell is too old (detected version: ${detectedVersionDescription}). Please use a modern version. See also https://aka.ms/dotnet-wasm-features` + ); } } From ab76ee1dde473f7d7ec86f4b4274b9cf0fd93378 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Fri, 20 Feb 2026 15:55:06 +0100 Subject: [PATCH 04/15] Simpler, V8 only --- .../Common/JavaScript/loader/bootstrap.ts | 31 +++---------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/src/native/libs/Common/JavaScript/loader/bootstrap.ts b/src/native/libs/Common/JavaScript/loader/bootstrap.ts index 83c265d5df5757..f6fb9377a9ffe6 100644 --- a/src/native/libs/Common/JavaScript/loader/bootstrap.ts +++ b/src/native/libs/Common/JavaScript/loader/bootstrap.ts @@ -19,34 +19,11 @@ export async function validateWasmFeatures(): Promise { const nodeMajorVersion = parseInt(globalThisAny.process.versions.node.split(".")[0], 10); dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://aka.ms/dotnet-wasm-features`); } else if (ENVIRONMENT_IS_SHELL) { - const rawVersion = globalThisAny.version; - let versionString: string | undefined; - if (typeof rawVersion === "function") { - try { - const result = rawVersion(); - if (typeof result === "string") { - versionString = result; - } - } catch { - // Ignore errors when probing version() - } - } else if (typeof rawVersion === "string") { - versionString = rawVersion; + if (typeof globalThisAny.version === "function" && globalThisAny.d8) { + const v8v = globalThisAny.version(); + const v8MajorVersion = parseInt(v8v.split(".")[0], 10); + dotnetAssert.check(v8MajorVersion >= 14, "This V8 shell is too old. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); } - - let v8MajorVersion = 0; - if (versionString) { - const match = versionString.match(/^(\d+)/); - if (match) { - v8MajorVersion = parseInt(match[1], 10); - } - } - - const detectedVersionDescription = versionString ?? (rawVersion !== undefined ? String(rawVersion) : "unknown"); - dotnetAssert.check( - v8MajorVersion >= 14, - `This V8 shell is too old (detected version: ${detectedVersionDescription}). Please use a modern version. See also https://aka.ms/dotnet-wasm-features` - ); } } From ff361ccff1d6d8c830b8e37d7b686b7775ed4442 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Fri, 20 Feb 2026 15:56:35 +0100 Subject: [PATCH 05/15] feedback --- src/libraries/sendtohelix-browser.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/sendtohelix-browser.targets b/src/libraries/sendtohelix-browser.targets index 2107f66ed254c7..0729da3fb808d7 100644 --- a/src/libraries/sendtohelix-browser.targets +++ b/src/libraries/sendtohelix-browser.targets @@ -60,7 +60,7 @@ false true true - true + true true true From 191e034b4f1245321c119dfaf9b1268dabce15f0 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Fri, 20 Feb 2026 17:45:02 +0100 Subject: [PATCH 06/15] feedback --- src/mono/browser/runtime/http.ts | 4 ++-- src/mono/browser/runtime/loader/polyfills.ts | 12 ++++++------ src/mono/browser/runtime/loader/run.ts | 2 +- src/mono/browser/runtime/startup.ts | 4 ++-- src/mono/browser/runtime/web-socket.ts | 4 ++-- .../libs/Common/JavaScript/loader/bootstrap.ts | 8 ++++---- .../interop/http.ts | 4 ++-- .../interop/web-socket.ts | 4 ++-- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/mono/browser/runtime/http.ts b/src/mono/browser/runtime/http.ts index 149c3c05a473f6..9d72178963a968 100644 --- a/src/mono/browser/runtime/http.ts +++ b/src/mono/browser/runtime/http.ts @@ -15,8 +15,8 @@ import { mono_log_debug } from "./logging"; function verifyEnvironment () { if (typeof globalThis.fetch !== "function" || typeof globalThis.AbortController !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://aka.ms/dotnet-wasm-features" - : "This browser doesn't support fetch API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features"; + ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } } diff --git a/src/mono/browser/runtime/loader/polyfills.ts b/src/mono/browser/runtime/loader/polyfills.ts index bfa4a8c99b2ea3..6849729c511b9b 100644 --- a/src/mono/browser/runtime/loader/polyfills.ts +++ b/src/mono/browser/runtime/loader/polyfills.ts @@ -19,8 +19,8 @@ const URLPolyfill = class URL { }; export function verifyEnvironment () { - mono_assert(ENVIRONMENT_IS_SHELL || typeof globalThis.URL === "function", "This browser/engine doesn't support URL API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); - mono_assert(typeof globalThis.BigInt64Array === "function", "This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + mono_assert(ENVIRONMENT_IS_SHELL || typeof globalThis.URL === "function", "This browser/engine doesn't support URL API. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + mono_assert(typeof globalThis.BigInt64Array === "function", "This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); mono_assert(globalThis.performance && typeof globalThis.performance.now === "function", "This browser/engine doesn't support performance.now. Please use a modern version."); mono_assert(ENVIRONMENT_IS_SHELL || globalThis.crypto && typeof globalThis.crypto.subtle === "object", "This engine doesn't support crypto.subtle. Please use a modern version."); mono_assert(ENVIRONMENT_IS_SHELL || globalThis.crypto && typeof globalThis.crypto.getRandomValues === "function", "This engine doesn't support crypto.getRandomValues. Please use a modern version."); @@ -28,9 +28,9 @@ export function verifyEnvironment () { mono_assert(typeof process.exit === "function", "This engine doesn't support process.exit. Please use a modern version."); } if (WasmEnableThreads) { - mono_assert(!ENVIRONMENT_IS_SHELL && !ENVIRONMENT_IS_NODE, "This build of dotnet is multi-threaded, it doesn't support shell environments like V8 or NodeJS. See also https://aka.ms/dotnet-wasm-features"); - mono_assert(globalThis.SharedArrayBuffer !== undefined, "SharedArrayBuffer is not enabled on this page. Please use a modern browser and set Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy http headers. See also https://aka.ms/dotnet-wasm-features"); - mono_assert(typeof globalThis.EventTarget === "function", "This browser/engine doesn't support EventTarget API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + mono_assert(!ENVIRONMENT_IS_SHELL && !ENVIRONMENT_IS_NODE, "This build of dotnet is multi-threaded, it doesn't support shell environments like V8 or NodeJS. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + mono_assert(globalThis.SharedArrayBuffer !== undefined, "SharedArrayBuffer is not enabled on this page. Please use a modern browser and set Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy http headers. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + mono_assert(typeof globalThis.EventTarget === "function", "This browser/engine doesn't support EventTarget API. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); } } @@ -41,7 +41,7 @@ export async function detect_features_and_polyfill (module: DotnetModuleInternal const process = await import(/*! webpackIgnore: true */"process"); const minNodeVersion = 14; if (process.versions.node.split(".")[0] < minNodeVersion) { - throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}. See also https://aka.ms/dotnet-wasm-features`); + throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms`); } } diff --git a/src/mono/browser/runtime/loader/run.ts b/src/mono/browser/runtime/loader/run.ts index ccdaf60f668ad1..f75afa8fdb26ac 100644 --- a/src/mono/browser/runtime/loader/run.ts +++ b/src/mono/browser/runtime/loader/run.ts @@ -395,7 +395,7 @@ async function initializeModules (es6Modules: [RuntimeModuleExportsInternal, Nat }); result.catch((error) => { if (error.message && error.message.toLowerCase().includes("out of memory")) { - throw new Error(".NET runtime has failed to start, because too much memory was requested. Please decrease the memory by adjusting EmccMaximumHeapSize. See also https://aka.ms/dotnet-wasm-features"); + throw new Error(".NET runtime has failed to start, because too much memory was requested. Please decrease the memory by adjusting EmccMaximumHeapSize. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); } throw error; }); diff --git a/src/mono/browser/runtime/startup.ts b/src/mono/browser/runtime/startup.ts index 7b2a3e20d3b5d6..4d54edfaf88988 100644 --- a/src/mono/browser/runtime/startup.ts +++ b/src/mono/browser/runtime/startup.ts @@ -80,10 +80,10 @@ export function configureEmscriptenStartup (module: DotnetModuleInternal): void mono_log_warn(`The threads of dotnet.native.js ${runtimeHelpers.emscriptenBuildOptions.wasmEnableThreads} is different from the version of dotnet.runtime.js ${WasmEnableThreads}!`); } if (runtimeHelpers.emscriptenBuildOptions.wasmEnableSIMD) { - mono_assert(runtimeHelpers.featureWasmSimd, "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + mono_assert(runtimeHelpers.featureWasmSimd, "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); } if (runtimeHelpers.emscriptenBuildOptions.wasmEnableEH) { - mono_assert(runtimeHelpers.featureWasmEh, "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + mono_assert(runtimeHelpers.featureWasmEh, "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); } module.mainScriptUrlOrBlob = loaderHelpers.scriptUrl;// this is needed by worker threads diff --git a/src/mono/browser/runtime/web-socket.ts b/src/mono/browser/runtime/web-socket.ts index f15bd0668f2135..030d08a824905c 100644 --- a/src/mono/browser/runtime/web-socket.ts +++ b/src/mono/browser/runtime/web-socket.ts @@ -38,8 +38,8 @@ function verifyEnvironment () { } if (typeof globalThis.WebSocket !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `ws` npm package to enable networking support. See also https://aka.ms/dotnet-wasm-features" - : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features"; + ? "Please install `ws` npm package to enable networking support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } } diff --git a/src/native/libs/Common/JavaScript/loader/bootstrap.ts b/src/native/libs/Common/JavaScript/loader/bootstrap.ts index f6fb9377a9ffe6..849cc675abca24 100644 --- a/src/native/libs/Common/JavaScript/loader/bootstrap.ts +++ b/src/native/libs/Common/JavaScript/loader/bootstrap.ts @@ -13,16 +13,16 @@ const scriptUrl = normalizeFileUrl(scriptUrlQuery); const scriptDirectory = normalizeDirectoryUrl(scriptUrl); export async function validateWasmFeatures(): Promise { - dotnetAssert.check(await exceptions(), "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); - dotnetAssert.check(await simd(), "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + dotnetAssert.check(await exceptions(), "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + dotnetAssert.check(await simd(), "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); if (ENVIRONMENT_IS_NODE) { const nodeMajorVersion = parseInt(globalThisAny.process.versions.node.split(".")[0], 10); - dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://aka.ms/dotnet-wasm-features`); + dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms`); } else if (ENVIRONMENT_IS_SHELL) { if (typeof globalThisAny.version === "function" && globalThisAny.d8) { const v8v = globalThisAny.version(); const v8MajorVersion = parseInt(v8v.split(".")[0], 10); - dotnetAssert.check(v8MajorVersion >= 14, "This V8 shell is too old. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"); + dotnetAssert.check(v8MajorVersion >= 14, "This V8 shell is too old. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); } } } diff --git a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts index a51d1125df3ede..293041abfeed52 100644 --- a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts +++ b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts @@ -15,8 +15,8 @@ import { dotnetLogger, dotnetAssert } from "./cross-module"; function verifyEnvironment() { if (typeof globalThis.fetch !== "function" || typeof globalThis.AbortController !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://aka.ms/dotnet-wasm-features" - : "This browser doesn't support fetch API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features"; + ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } } diff --git a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts index 825e10a9407206..dbd206c7a8eb6c 100644 --- a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts +++ b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts @@ -496,8 +496,8 @@ function verifyEnvironment() { } if (typeof globalThis.WebSocket !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `ws` npm package to enable networking support. See also https://aka.ms/dotnet-wasm-features" - : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features"; + ? "Please install `ws` npm package to enable networking support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } } From 30a6b57a5281351622c744365523320fb5ecb836 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Fri, 20 Feb 2026 18:18:43 +0100 Subject: [PATCH 07/15] fix fetchlike --- src/native/libs/Common/JavaScript/loader/exit.ts | 2 +- src/native/libs/Common/JavaScript/loader/polyfills.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/native/libs/Common/JavaScript/loader/exit.ts b/src/native/libs/Common/JavaScript/loader/exit.ts index 111c85919999fa..09c2c9b7ef63b7 100644 --- a/src/native/libs/Common/JavaScript/loader/exit.ts +++ b/src/native/libs/Common/JavaScript/loader/exit.ts @@ -131,7 +131,7 @@ export function exit(exitCode: number, reason: any): void { } } if (!runtimeState.dotnetReady) { - dotnetLogger.debug(() => `Aborting startup, reason: ${reason}`); + dotnetLogger.info(`Aborting startup, reason: ${reason}`); dotnetLoaderExports.abortStartup(reason); } } catch (err) { diff --git a/src/native/libs/Common/JavaScript/loader/polyfills.ts b/src/native/libs/Common/JavaScript/loader/polyfills.ts index aebf928b616a9f..72febf17d0ff33 100644 --- a/src/native/libs/Common/JavaScript/loader/polyfills.ts +++ b/src/native/libs/Common/JavaScript/loader/polyfills.ts @@ -100,7 +100,7 @@ export async function fetchLike(url: string, init?: RequestInit, expectedContent } else if (hasFetch) { return globalThis.fetch(url, init || { credentials: "same-origin" }); } else if (typeof (read) === "function") { - const isText = expectedContentType === "application/json" || expectedContentType === "text/plain"; + const isText = expectedContentType && (expectedContentType.startsWith("application/json") || expectedContentType.startsWith("text/plain")); const arrayBuffer = read(url, isText ? "utf8" : "binary"); return responseLike(url, arrayBuffer, { status: 200, From c3f761a3dd0f4671f66aa69f4772ebd18f5af8ec Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Mon, 23 Feb 2026 11:13:21 +0100 Subject: [PATCH 08/15] feedeback --- src/mono/browser/runtime/http.ts | 4 ++-- src/mono/browser/runtime/loader/polyfills.ts | 12 ++++++------ src/mono/browser/runtime/loader/run.ts | 2 +- src/mono/browser/runtime/startup.ts | 4 ++-- src/mono/browser/runtime/web-socket.ts | 4 ++-- .../libs/Common/JavaScript/loader/bootstrap.ts | 8 ++++---- .../interop/http.ts | 4 ++-- .../interop/web-socket.ts | 4 ++-- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/mono/browser/runtime/http.ts b/src/mono/browser/runtime/http.ts index 9d72178963a968..321bbba4c2e3a1 100644 --- a/src/mono/browser/runtime/http.ts +++ b/src/mono/browser/runtime/http.ts @@ -15,8 +15,8 @@ import { mono_log_debug } from "./logging"; function verifyEnvironment () { if (typeof globalThis.fetch !== "function" || typeof globalThis.AbortController !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" - : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; + ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support." + : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"; throw new Error(message); } } diff --git a/src/mono/browser/runtime/loader/polyfills.ts b/src/mono/browser/runtime/loader/polyfills.ts index 6849729c511b9b..6f999bc42ef298 100644 --- a/src/mono/browser/runtime/loader/polyfills.ts +++ b/src/mono/browser/runtime/loader/polyfills.ts @@ -19,8 +19,8 @@ const URLPolyfill = class URL { }; export function verifyEnvironment () { - mono_assert(ENVIRONMENT_IS_SHELL || typeof globalThis.URL === "function", "This browser/engine doesn't support URL API. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); - mono_assert(typeof globalThis.BigInt64Array === "function", "This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + mono_assert(ENVIRONMENT_IS_SHELL || typeof globalThis.URL === "function", "This browser/engine doesn't support URL API. Please use a modern version."); + mono_assert(typeof globalThis.BigInt64Array === "function", "This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"); mono_assert(globalThis.performance && typeof globalThis.performance.now === "function", "This browser/engine doesn't support performance.now. Please use a modern version."); mono_assert(ENVIRONMENT_IS_SHELL || globalThis.crypto && typeof globalThis.crypto.subtle === "object", "This engine doesn't support crypto.subtle. Please use a modern version."); mono_assert(ENVIRONMENT_IS_SHELL || globalThis.crypto && typeof globalThis.crypto.getRandomValues === "function", "This engine doesn't support crypto.getRandomValues. Please use a modern version."); @@ -28,9 +28,9 @@ export function verifyEnvironment () { mono_assert(typeof process.exit === "function", "This engine doesn't support process.exit. Please use a modern version."); } if (WasmEnableThreads) { - mono_assert(!ENVIRONMENT_IS_SHELL && !ENVIRONMENT_IS_NODE, "This build of dotnet is multi-threaded, it doesn't support shell environments like V8 or NodeJS. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); - mono_assert(globalThis.SharedArrayBuffer !== undefined, "SharedArrayBuffer is not enabled on this page. Please use a modern browser and set Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy http headers. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); - mono_assert(typeof globalThis.EventTarget === "function", "This browser/engine doesn't support EventTarget API. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + mono_assert(!ENVIRONMENT_IS_SHELL && !ENVIRONMENT_IS_NODE, "This build of dotnet is multi-threaded, it doesn't support shell environments like V8 or NodeJS."); + mono_assert(globalThis.SharedArrayBuffer !== undefined, "SharedArrayBuffer is not enabled on this page. Please use a modern browser and set Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy http headers."); + mono_assert(typeof globalThis.EventTarget === "function", "This browser/engine doesn't support EventTarget API. Please use a modern version. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"); } } @@ -41,7 +41,7 @@ export async function detect_features_and_polyfill (module: DotnetModuleInternal const process = await import(/*! webpackIgnore: true */"process"); const minNodeVersion = 14; if (process.versions.node.split(".")[0] < minNodeVersion) { - throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms`); + throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}.`); } } diff --git a/src/mono/browser/runtime/loader/run.ts b/src/mono/browser/runtime/loader/run.ts index f75afa8fdb26ac..c6bfeab4c26d01 100644 --- a/src/mono/browser/runtime/loader/run.ts +++ b/src/mono/browser/runtime/loader/run.ts @@ -395,7 +395,7 @@ async function initializeModules (es6Modules: [RuntimeModuleExportsInternal, Nat }); result.catch((error) => { if (error.message && error.message.toLowerCase().includes("out of memory")) { - throw new Error(".NET runtime has failed to start, because too much memory was requested. Please decrease the memory by adjusting EmccMaximumHeapSize. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + throw new Error(".NET runtime has failed to start, because too much memory was requested. Please decrease the memory by adjusting EmccMaximumHeapSize."); } throw error; }); diff --git a/src/mono/browser/runtime/startup.ts b/src/mono/browser/runtime/startup.ts index 4d54edfaf88988..a3210d5ac94239 100644 --- a/src/mono/browser/runtime/startup.ts +++ b/src/mono/browser/runtime/startup.ts @@ -80,10 +80,10 @@ export function configureEmscriptenStartup (module: DotnetModuleInternal): void mono_log_warn(`The threads of dotnet.native.js ${runtimeHelpers.emscriptenBuildOptions.wasmEnableThreads} is different from the version of dotnet.runtime.js ${WasmEnableThreads}!`); } if (runtimeHelpers.emscriptenBuildOptions.wasmEnableSIMD) { - mono_assert(runtimeHelpers.featureWasmSimd, "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + mono_assert(runtimeHelpers.featureWasmSimd, "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"); } if (runtimeHelpers.emscriptenBuildOptions.wasmEnableEH) { - mono_assert(runtimeHelpers.featureWasmEh, "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + mono_assert(runtimeHelpers.featureWasmEh, "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"); } module.mainScriptUrlOrBlob = loaderHelpers.scriptUrl;// this is needed by worker threads diff --git a/src/mono/browser/runtime/web-socket.ts b/src/mono/browser/runtime/web-socket.ts index 030d08a824905c..ba8145b388a8bb 100644 --- a/src/mono/browser/runtime/web-socket.ts +++ b/src/mono/browser/runtime/web-socket.ts @@ -38,8 +38,8 @@ function verifyEnvironment () { } if (typeof globalThis.WebSocket !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `ws` npm package to enable networking support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" - : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; + ? "Please install `ws` npm package to enable networking support." + : "This browser doesn't support WebSocket API. Please use a modern browser."; throw new Error(message); } } diff --git a/src/native/libs/Common/JavaScript/loader/bootstrap.ts b/src/native/libs/Common/JavaScript/loader/bootstrap.ts index 849cc675abca24..0db95274d705cc 100644 --- a/src/native/libs/Common/JavaScript/loader/bootstrap.ts +++ b/src/native/libs/Common/JavaScript/loader/bootstrap.ts @@ -13,16 +13,16 @@ const scriptUrl = normalizeFileUrl(scriptUrlQuery); const scriptDirectory = normalizeDirectoryUrl(scriptUrl); export async function validateWasmFeatures(): Promise { - dotnetAssert.check(await exceptions(), "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); - dotnetAssert.check(await simd(), "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + dotnetAssert.check(await exceptions(), "This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"); + dotnetAssert.check(await simd(), "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"); if (ENVIRONMENT_IS_NODE) { const nodeMajorVersion = parseInt(globalThisAny.process.versions.node.split(".")[0], 10); - dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms`); + dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later.`); } else if (ENVIRONMENT_IS_SHELL) { if (typeof globalThisAny.version === "function" && globalThisAny.d8) { const v8v = globalThisAny.version(); const v8MajorVersion = parseInt(v8v.split(".")[0], 10); - dotnetAssert.check(v8MajorVersion >= 14, "This V8 shell is too old. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); + dotnetAssert.check(v8MajorVersion >= 14, "This V8 shell is too old. Please use a modern version."); } } } diff --git a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts index 293041abfeed52..0376efbb0ab49b 100644 --- a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts +++ b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts @@ -15,8 +15,8 @@ import { dotnetLogger, dotnetAssert } from "./cross-module"; function verifyEnvironment() { if (typeof globalThis.fetch !== "function" || typeof globalThis.AbortController !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" - : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; + ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support." + : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"; throw new Error(message); } } diff --git a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts index dbd206c7a8eb6c..285909704eb1e6 100644 --- a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts +++ b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts @@ -496,8 +496,8 @@ function verifyEnvironment() { } if (typeof globalThis.WebSocket !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `ws` npm package to enable networking support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" - : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; + ? "Please install `ws` npm package to enable networking support." + : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://learn.microsoft.com/aspnet/core/blazor/supported-platforms"; throw new Error(message); } } From f3b5e47516ef6f0aa977836eda373c8327265998 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Mon, 23 Feb 2026 11:14:49 +0100 Subject: [PATCH 09/15] Update src/mono/browser/runtime/http.ts Co-authored-by: Jan Kotas --- src/mono/browser/runtime/http.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/browser/runtime/http.ts b/src/mono/browser/runtime/http.ts index 9d72178963a968..5e80956f47331f 100644 --- a/src/mono/browser/runtime/http.ts +++ b/src/mono/browser/runtime/http.ts @@ -15,7 +15,7 @@ import { mono_log_debug } from "./logging"; function verifyEnvironment () { if (typeof globalThis.fetch !== "function" || typeof globalThis.AbortController !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support." : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } From 4893c4b9d33d17be0d004d51f98df2db5b1c50f3 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Mon, 23 Feb 2026 11:15:05 +0100 Subject: [PATCH 10/15] Update src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts Co-authored-by: Jan Kotas --- .../interop/http.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts index 293041abfeed52..5ceac91595dd6b 100644 --- a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts +++ b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/http.ts @@ -15,7 +15,7 @@ import { dotnetLogger, dotnetAssert } from "./cross-module"; function verifyEnvironment() { if (typeof globalThis.fetch !== "function" || typeof globalThis.AbortController !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + ? "Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support." : "This browser doesn't support fetch API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } From 814d0a931880f47b2b03de17236032abfa246036 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Mon, 23 Feb 2026 11:15:26 +0100 Subject: [PATCH 11/15] Update src/native/libs/Common/JavaScript/loader/bootstrap.ts Co-authored-by: Jan Kotas --- src/native/libs/Common/JavaScript/loader/bootstrap.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/native/libs/Common/JavaScript/loader/bootstrap.ts b/src/native/libs/Common/JavaScript/loader/bootstrap.ts index 849cc675abca24..13ae044e6ea901 100644 --- a/src/native/libs/Common/JavaScript/loader/bootstrap.ts +++ b/src/native/libs/Common/JavaScript/loader/bootstrap.ts @@ -17,7 +17,7 @@ export async function validateWasmFeatures(): Promise { dotnetAssert.check(await simd(), "This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"); if (ENVIRONMENT_IS_NODE) { const nodeMajorVersion = parseInt(globalThisAny.process.versions.node.split(".")[0], 10); - dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms`); + dotnetAssert.check(nodeMajorVersion >= 18, `Node.js version ${globalThisAny.process.versions.node} is not supported. Please use Node.js 18 or later.`); } else if (ENVIRONMENT_IS_SHELL) { if (typeof globalThisAny.version === "function" && globalThisAny.d8) { const v8v = globalThisAny.version(); From f0db4ec46547d088d4db4deab0a0063a9a4e7fe2 Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Mon, 23 Feb 2026 11:16:00 +0100 Subject: [PATCH 12/15] Update src/mono/browser/runtime/loader/polyfills.ts Co-authored-by: Jan Kotas --- src/mono/browser/runtime/loader/polyfills.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/browser/runtime/loader/polyfills.ts b/src/mono/browser/runtime/loader/polyfills.ts index 6849729c511b9b..11725a00b1e873 100644 --- a/src/mono/browser/runtime/loader/polyfills.ts +++ b/src/mono/browser/runtime/loader/polyfills.ts @@ -41,7 +41,7 @@ export async function detect_features_and_polyfill (module: DotnetModuleInternal const process = await import(/*! webpackIgnore: true */"process"); const minNodeVersion = 14; if (process.versions.node.split(".")[0] < minNodeVersion) { - throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms`); + throw new Error(`NodeJS at '${process.execPath}' has too low version '${process.versions.node}', please use at least ${minNodeVersion}.`); } } From 23de7ec383c954431112fc7c57478da63ad0b0be Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Mon, 23 Feb 2026 11:16:28 +0100 Subject: [PATCH 13/15] Update src/mono/browser/runtime/web-socket.ts Co-authored-by: Jan Kotas --- src/mono/browser/runtime/web-socket.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mono/browser/runtime/web-socket.ts b/src/mono/browser/runtime/web-socket.ts index 030d08a824905c..17cebb6519767e 100644 --- a/src/mono/browser/runtime/web-socket.ts +++ b/src/mono/browser/runtime/web-socket.ts @@ -38,7 +38,7 @@ function verifyEnvironment () { } if (typeof globalThis.WebSocket !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `ws` npm package to enable networking support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + ? "Please install `ws` npm package to enable networking support." : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } From 6772ae08e3b163fe6c1a1d9b0c04ae806aeb792e Mon Sep 17 00:00:00 2001 From: Pavel Savara Date: Mon, 23 Feb 2026 11:16:49 +0100 Subject: [PATCH 14/15] Update src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts Co-authored-by: Jan Kotas --- .../interop/web-socket.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts index dbd206c7a8eb6c..60c5725fdcf02a 100644 --- a/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts +++ b/src/native/libs/System.Runtime.InteropServices.JavaScript.Native/interop/web-socket.ts @@ -496,7 +496,7 @@ function verifyEnvironment() { } if (typeof globalThis.WebSocket !== "function") { const message = ENVIRONMENT_IS_NODE - ? "Please install `ws` npm package to enable networking support. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms" + ? "Please install `ws` npm package to enable networking support." : "This browser doesn't support WebSocket API. Please use a modern browser. See also https://learn.microsoft.com/en-us/aspnet/core/blazor/supported-platforms"; throw new Error(message); } From 94505a6f37ccc290b824ae3b248630423f4d0d70 Mon Sep 17 00:00:00 2001 From: pavelsavara Date: Mon, 23 Feb 2026 12:18:00 +0100 Subject: [PATCH 15/15] fix tests --- .../InteropServices/JavaScript/HttpRequestMessageTest.cs | 4 ++-- .../System/Runtime/InteropServices/JavaScript/JSImportTest.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/HttpRequestMessageTest.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/HttpRequestMessageTest.cs index 57a037b0d45ba1..62313837dfdbb9 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/HttpRequestMessageTest.cs +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/HttpRequestMessageTest.cs @@ -297,7 +297,7 @@ public void Properties_SetOptionsAndGetTheirValue_NotSet_EnableStreamingResponse Assert.False(streamingEnabledValue); } - [Fact] + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsBrowserDomSupportedOrNodeJS))] // not V8 shell public async Task HttpStreamingDisabledBy_WasmEnableStreamingResponse_InProject() { using var client = new HttpClient(); @@ -309,7 +309,7 @@ public async Task HttpStreamingDisabledBy_WasmEnableStreamingResponse_InProject( Assert.True(stream.CanSeek); } - [Fact] + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsBrowserDomSupportedOrNodeJS))] // not V8 shell public async Task HttpStreamingEnabledBy_WebAssemblyEnableStreamingResponse_Option() { using var client = new HttpClient(); diff --git a/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/JSImportTest.cs b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/JSImportTest.cs index 2a8cbc1b8fe006..8e5e51f66ba9e9 100644 --- a/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/JSImportTest.cs +++ b/src/libraries/System.Runtime.InteropServices.JavaScript/tests/System.Runtime.InteropServices.JavaScript.UnitTests/System/Runtime/InteropServices/JavaScript/JSImportTest.cs @@ -20,7 +20,7 @@ public unsafe void StructSize() Assert.Equal(32, sizeof(JSMarshalerArgument)); } - [Fact] + [ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsBrowserDomSupportedOrNodeJS))] // not V8 shell public unsafe void PrototypeNotEqual() { using var temp1 = JSHost.GlobalThis.GetPropertyAsJSObject("EventTarget");