diff --git a/eng/pipelines/common/templates/wasm-library-aot-tests.yml b/eng/pipelines/common/templates/wasm-library-aot-tests.yml
index 43b90a370450d..cbafd9c6b3553 100644
--- a/eng/pipelines/common/templates/wasm-library-aot-tests.yml
+++ b/eng/pipelines/common/templates/wasm-library-aot-tests.yml
@@ -1,7 +1,7 @@
parameters:
alwaysRun: false
extraBuildArgs: ''
- extraHelixArgs: ''
+ extraHelixArguments: ''
isExtraPlatformsBuild: false
isWasmOnlyBuild: false
buildAOTOnHelix: true
@@ -26,7 +26,7 @@ jobs:
isExtraPlatformsBuild: ${{ parameters.isExtraPlatformsBuild }}
isWasmOnlyBuild: ${{ parameters.isWasmOnlyBuild }}
extraBuildArgs: /p:EnableAggressiveTrimming=true /p:BuildAOTTestsOnHelix=${{ parameters.buildAOTOnHelix }} /p:RunAOTCompilation=${{ parameters.runAOT }} ${{ parameters.extraBuildArgs }}
- extraHelixArgs: /p:NeedsToBuildWasmAppsOnHelix=true ${{ parameters.extraHelixArgs }}
+ extraHelixArguments: /p:NeedsToBuildWasmAppsOnHelix=true ${{ parameters.extraHelixArguments }}
alwaysRun: ${{ parameters.alwaysRun }}
shouldRunSmokeOnly: ${{ parameters.shouldRunSmokeOnly }}
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
@@ -35,5 +35,6 @@ jobs:
- WasmTestOnV8
- ${{ if eq(platform, 'browser_wasm_win') }}:
- WasmTestOnChrome
+ - WasmTestOnFirefox
- ${{ if or(eq(platform, 'wasi_wasm_win'), eq(platform, 'wasi_wasm')) }}:
- WasmTestOnWasmtime
diff --git a/eng/pipelines/common/templates/wasm-library-tests.yml b/eng/pipelines/common/templates/wasm-library-tests.yml
index 4a1a5a79a30bf..f015563fef00e 100644
--- a/eng/pipelines/common/templates/wasm-library-tests.yml
+++ b/eng/pipelines/common/templates/wasm-library-tests.yml
@@ -1,7 +1,7 @@
parameters:
alwaysRun: false
extraBuildArgs: ''
- extraHelixArgs: ''
+ extraHelixArguments: ''
isExtraPlatformsBuild: false
isWasmOnlyBuild: false
nameSuffix: ''
@@ -97,5 +97,5 @@ jobs:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
- extraHelixArguments: /p:BrowserHost=$(_hostedOs) $(_wasmRunSmokeTestsOnlyArg) ${{ parameters.extraHelixArgs }}
+ extraHelixArguments: /p:BrowserHost=$(_hostedOs) $(_wasmRunSmokeTestsOnlyArg) ${{ parameters.extraHelixArguments }}
scenarios: ${{ parameters.scenarios }}
diff --git a/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml b/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
index 2c947a048e055..d31cad685995d 100644
--- a/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
+++ b/eng/pipelines/extra-platforms/runtime-extra-platforms-wasm.yml
@@ -199,6 +199,7 @@ jobs:
scenarios:
- WasmTestOnV8
- WasmTestOnChrome
+ - WasmTestOnFirefox
- WasmTestOnNodeJS
# Hybrid Globalization AOT tests
@@ -321,4 +322,4 @@ jobs:
isExtraPlatformsBuild: ${{ parameters.isExtraPlatformsBuild }}
isWasmOnlyBuild: ${{ parameters.isWasmOnlyBuild }}
scenarios:
- - WasmTestOnV8
+ - WasmTestOnWasmtime
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 6bb44bd64fc24..32f99429ffd69 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -843,6 +843,7 @@ extends:
scenarios:
- WasmTestOnV8
- WasmTestOnChrome
+ - WasmTestOnFirefox
- template: /eng/pipelines/common/templates/wasm-library-tests.yml
parameters:
@@ -861,10 +862,12 @@ extends:
#- browser_wasm_win
nameSuffix: _Threading
extraBuildArgs: /p:WasmEnableThreads=true /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
+ extraHelixArguments: /p:WasmEnableThreads=true
alwaysRun: ${{ variables.isRollingBuild }}
shouldRunSmokeOnly: onLibrariesAndIllinkChanges
scenarios:
- WasmTestOnChrome
+ - WasmTestOnFirefox
#- WasmTestOnNodeJS - this is not supported yet, https://github.com/dotnet/runtime/issues/85592
# EAT Library tests - only run on linux
diff --git a/eng/testing/BrowserVersions.props b/eng/testing/BrowserVersions.props
index b1e85302a8ed3..c66b61a6e4404 100644
--- a/eng/testing/BrowserVersions.props
+++ b/eng/testing/BrowserVersions.props
@@ -8,7 +8,9 @@
1250580
https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/1250586
12.3.219
- 124.0.2
+ 125.0.1
0.34.0
+ 125.0.1
+ 0.34.0
diff --git a/eng/testing/WasmRunnerTemplate.cmd b/eng/testing/WasmRunnerTemplate.cmd
index 0c7f3dc2195d2..e043ce7a34e9f 100644
--- a/eng/testing/WasmRunnerTemplate.cmd
+++ b/eng/testing/WasmRunnerTemplate.cmd
@@ -30,7 +30,11 @@ if [%XHARNESS_COMMAND%] == [] (
if /I [%SCENARIO%]==[WasmTestOnChrome] (
set XHARNESS_COMMAND=test-browser
) else (
- set XHARNESS_COMMAND=test
+ if /I [%SCENARIO%]==[WasmTestOnFirefox] (
+ set XHARNESS_COMMAND=test-browser
+ ) else (
+ set XHARNESS_COMMAND=test
+ )
)
)
@@ -56,11 +60,25 @@ if /I [%XHARNESS_COMMAND%] == [test] (
)
)
) else (
- if [%BROWSER_PATH%] == [] if not [%HELIX_CORRELATION_PAYLOAD%] == [] (
- set "BROWSER_PATH=--browser-path^=%HELIX_CORRELATION_PAYLOAD%\chrome-win\chrome.exe"
- )
- if [%JS_ENGINE_ARGS%] == [] (
- set "JS_ENGINE_ARGS=--browser-arg^=--js-flags^=--stack-trace-limit^=1000"
+ if /I [%SCENARIO%] == [WasmTestOnChrome] (
+ if [%BROWSER_PATH%] == [] if not [%HELIX_CORRELATION_PAYLOAD%] == [] (
+ set "BROWSER_PATH=--browser-path^=%HELIX_CORRELATION_PAYLOAD%\chrome-win\chrome.exe"
+ )
+ if [%JS_ENGINE_ARGS%] == [] (
+ set "JS_ENGINE_ARGS=--browser-arg^=--js-flags^=--stack-trace-limit^=1000"
+ )
+ ) else (
+ if /I [%SCENARIO%] == [WasmTestOnFirefox] (
+ if [%BROWSER_PATH%] == [] if not [%HELIX_CORRELATION_PAYLOAD%] == [] (
+ set "BROWSER_PATH=--browser-path^=%HELIX_CORRELATION_PAYLOAD%\firefox\firefox.exe"
+ )
+ if [%JS_ENGINE%] == [] (
+ set "JS_ENGINE=--browser^=Firefox"
+ )
+ if [%JS_ENGINE_ARGS%] == [] (
+ set "JS_ENGINE_ARGS=--browser-arg^=-private-window"
+ )
+ )
)
)
diff --git a/eng/testing/WasmRunnerTemplate.sh b/eng/testing/WasmRunnerTemplate.sh
index bd7f1faadf355..6cf4dc11d4bea 100644
--- a/eng/testing/WasmRunnerTemplate.sh
+++ b/eng/testing/WasmRunnerTemplate.sh
@@ -26,7 +26,9 @@ else
fi
if [[ -z "$XHARNESS_COMMAND" ]]; then
- if [[ "$SCENARIO" == "WasmTestOnChrome" || "$SCENARIO" == "wasmtestonchrome" ]]; then
+ if [[ "$SCENARIO" == "WasmTestOnFirefox" || "$SCENARIO" == "wasmtestonfirefox" ]]; then
+ XHARNESS_COMMAND="test-browser"
+ elif [[ "$SCENARIO" == "WasmTestOnChrome" || "$SCENARIO" == "wasmtestonchrome" ]]; then
XHARNESS_COMMAND="test-browser"
else
XHARNESS_COMMAND="test"
@@ -59,8 +61,17 @@ if [[ "$XHARNESS_COMMAND" == "test" ]]; then
fi
fi
else
- if [[ -z "$JS_ENGINE_ARGS" ]]; then
- JS_ENGINE_ARGS="--browser-arg=--js-flags=--stack-trace-limit=1000"
+ if [[ "$SCENARIO" == "WasmTestOnChrome" || "$SCENARIO" == "wasmtestonchrome" ]]; then
+ if [[ -z "$JS_ENGINE_ARGS" ]]; then
+ JS_ENGINE_ARGS="--browser-arg=--js-flags=--stack-trace-limit=1000"
+ fi
+ elif [[ "$SCENARIO" == "WasmTestOnFirefox" || "$SCENARIO" == "wasmtestonfirefox" ]]; then
+ if [[ -z "$JS_ENGINE" ]]; then
+ JS_ENGINE="--browser=Firefox"
+ fi
+ if [[ -z "$JS_ENGINE_ARGS" ]]; then
+ JS_ENGINE_ARGS="--browser-arg=-private-window"
+ fi
fi
fi
diff --git a/eng/testing/tests.browser.targets b/eng/testing/tests.browser.targets
index ccfc96f5211cd..26a2086c850b5 100644
--- a/eng/testing/tests.browser.targets
+++ b/eng/testing/tests.browser.targets
@@ -250,9 +250,18 @@
<_NodeNpmModuleStringTrimmed Include="@(_NodeNpmModuleString->Trim(':'))" />
+ WasmTestOnV8
@(_NodeNpmModuleStringTrimmed, ',')
+
+
diff --git a/eng/testing/tests.wasi.targets b/eng/testing/tests.wasi.targets
index d147fea218fe4..989e934dd8412 100644
--- a/eng/testing/tests.wasi.targets
+++ b/eng/testing/tests.wasi.targets
@@ -147,6 +147,13 @@
+
+ WasmTestOnWasmtime
+
+
+
diff --git a/eng/testing/wasm-provisioning.targets b/eng/testing/wasm-provisioning.targets
index 47076a23770dd..540fcfb035fa2 100644
--- a/eng/testing/wasm-provisioning.targets
+++ b/eng/testing/wasm-provisioning.targets
@@ -21,18 +21,30 @@
-
- https://ftp.mozilla.org/pub/firefox/releases/$(linux_FirefoxRevision)/linux-x86_64/en-US/firefox-$(linux_FirefoxRevision).tar.bz2
- https://github.com/mozilla/geckodriver/releases/download/v$(linux_GeckoDriverRevision)/geckodriver-v$(linux_GeckoDriverRevision)-linux64.tar.gz
- firefox
- geckodriver
+
$(ArtifactsBinDir)firefox\
firefox
geckodriver
$(ArtifactsBinDir)geckodriver\
+
+
+ https://ftp.mozilla.org/pub/firefox/releases/$(linux_FirefoxRevision)/linux-x86_64/en-US/firefox-$(linux_FirefoxRevision).tar.bz2
+ https://github.com/mozilla/geckodriver/releases/download/v$(linux_GeckoDriverRevision)/geckodriver-v$(linux_GeckoDriverRevision)-linux64.tar.gz
+ firefox
+ geckodriver
$([MSBuild]::NormalizePath($(FirefoxDir), '.install-firefox-$(linux_FirefoxRevision).stamp'))
$([MSBuild]::NormalizePath($(GeckoDriverDir), '.install-geckodriver-$(linux_GeckoDriverRevision).stamp'))
+ $([MSBuild]::NormalizePath($(FirefoxDir), $(FirefoxDirName), $(FirefoxBinaryName)))
+ $([MSBuild]::NormalizePath($(GeckoDriverDir), $(GeckoDriverDirName), $(GeckoDriverBinaryName)))
+
+
+ https://ftp.mozilla.org/pub/firefox/releases/$(win_FirefoxRevision)/win64/en-US/Firefox%20Setup%20$(win_FirefoxRevision).exe
+ https://github.com/mozilla/geckodriver/releases/download/v$(win_GeckoDriverRevision)/geckodriver-v$(win_GeckoDriverRevision)-win64.zip
+ firefox.exe
+ geckodriver.exe
+ $([MSBuild]::NormalizePath($(FirefoxDir), '.install-firefox-$(win_FirefoxRevision).stamp'))
+ $([MSBuild]::NormalizePath($(GeckoDriverDir), '.install-geckodriver-$(win_GeckoDriverRevision).stamp'))
$([MSBuild]::NormalizePath($(FirefoxDir), $(FirefoxDirName), $(FirefoxBinaryName)))
$([MSBuild]::NormalizePath($(GeckoDriverDir), $(GeckoDriverDirName), $(GeckoDriverBinaryName)))
@@ -183,7 +195,7 @@ export __SCRIPT_DIR=%24( cd -- "%24( dirname -- "%24{BASH_SOURCE[0]}" )" &>
+ Condition="!Exists($(FirefoxStampFile)) and '$(InstallFirefoxForTests)' == 'true'">
<_StampFile Include="$(_BrowserStampDir).install-firefox*.stamp" />
@@ -197,24 +209,22 @@ export __SCRIPT_DIR=%24( cd -- "%24( dirname -- "%24{BASH_SOURCE[0]}" )" &>
-
-
-
-
- <_FirefoxBinaryPath>$([MSBuild]::NormalizePath($(FirefoxDir), $(FirefoxBinaryName)))
-
+
+
+
+
-
+
-
+
+ Condition="!Exists($(GeckoDriverStampFile)) and '$(InstallFirefoxForTests)' == 'true'">
<_StampFile Include="$(_BrowserStampDir).install-geckodriver*.stamp" />
@@ -228,18 +238,15 @@ export __SCRIPT_DIR=%24( cd -- "%24( dirname -- "%24{BASH_SOURCE[0]}" )" &>
-
-
-
-
-
- <_GeckoDriverBinaryPath>$([MSBuild]::NormalizePath($(GeckoDriverDir), $(GeckoDriverBinaryName)))
-
+
+
+
+
-
+
-
+
diff --git a/src/libraries/Common/tests/System/Net/Configuration.Http.cs b/src/libraries/Common/tests/System/Net/Configuration.Http.cs
index ae1481c56061c..460b7893cc635 100644
--- a/src/libraries/Common/tests/System/Net/Configuration.Http.cs
+++ b/src/libraries/Common/tests/System/Net/Configuration.Http.cs
@@ -58,12 +58,19 @@ public static partial class Http
public static readonly Uri RemoteEchoServer = new Uri("http://" + Host + "/" + EchoHandler);
public static readonly Uri SecureRemoteEchoServer = new Uri("https://" + SecureHost + "/" + EchoHandler);
public static readonly Uri Http2RemoteEchoServer = new Uri("https://" + Http2Host + "/" + EchoHandler);
- public static readonly Uri[] EchoServerList = new Uri[] { RemoteEchoServer, SecureRemoteEchoServer, Http2RemoteEchoServer };
+ public static Uri[] GetEchoServerList()
+ {
+ if (PlatformDetection.IsFirefox)
+ {
+ // https://github.com/dotnet/runtime/issues/101115
+ return [RemoteEchoServer];
+ }
+ return [RemoteEchoServer, SecureRemoteEchoServer, Http2RemoteEchoServer];
+ }
public static readonly Uri RemoteVerifyUploadServer = new Uri("http://" + Host + "/" + VerifyUploadHandler);
public static readonly Uri SecureRemoteVerifyUploadServer = new Uri("https://" + SecureHost + "/" + VerifyUploadHandler);
public static readonly Uri Http2RemoteVerifyUploadServer = new Uri("https://" + Http2Host + "/" + VerifyUploadHandler);
- public static readonly Uri[] VerifyUploadServerList = new Uri[] { RemoteVerifyUploadServer, SecureRemoteVerifyUploadServer, Http2RemoteVerifyUploadServer };
public static readonly Uri RemoteEmptyContentServer = new Uri("http://" + Host + "/" + EmptyContentHandler);
public static readonly Uri RemoteDeflateServer = new Uri("http://" + Host + "/" + DeflateHandler);
@@ -72,7 +79,7 @@ public static partial class Http
public static readonly Uri Http2RemoteGZipServer = new Uri("https://" + Http2Host + "/" + GZipHandler);
public static Uri RemoteLoopServer => new Uri("ws://" + RemoteLoopHost + "/" + RemoteLoopHandler);
- public static readonly object[][] EchoServers = EchoServerList.Select(x => new object[] { x }).ToArray();
+ public static readonly object[][] EchoServers = GetEchoServerList().Select(x => new object[] { x }).ToArray();
public static readonly object[][] VerifyUploadServers = { new object[] { RemoteVerifyUploadServer }, new object[] { SecureRemoteVerifyUploadServer }, new object[] { Http2RemoteVerifyUploadServer } };
public static readonly object[][] CompressedServers = { new object[] { RemoteDeflateServer }, new object[] { RemoteGZipServer }, new object[] { Http2RemoteDeflateServer }, new object[] { Http2RemoteGZipServer } };
@@ -83,9 +90,17 @@ public static partial class Http
public static readonly RemoteServer RemoteSecureHttp11Server = new RemoteServer(new Uri("https://" + SecureHost + "/"), HttpVersion.Version11);
public static readonly RemoteServer RemoteHttp2Server = new RemoteServer(new Uri("https://" + Http2Host + "/"), new Version(2, 0));
- public static readonly IEnumerable RemoteServers = new RemoteServer[] { RemoteHttp11Server, RemoteSecureHttp11Server, RemoteHttp2Server };
+ public static IEnumerable GetRemoteServers()
+ {
+ if (PlatformDetection.IsFirefox)
+ {
+ // https://github.com/dotnet/runtime/issues/101115
+ return new RemoteServer[] { RemoteHttp11Server };
+ }
+ return new RemoteServer[] { RemoteHttp11Server, RemoteSecureHttp11Server, RemoteHttp2Server };
+ }
- public static readonly IEnumerable
+
- $HARNESS_RUNNER
- $XHARNESS_OUT
+ $HARNESS_RUNNER
+ $XHARNESS_OUT
+ $XHARNESS_COMMAND
+ $XHARNESS_ARGS
-
- %HARNESS_RUNNER%
- %XHARNESS_OUT%
+ %HARNESS_RUNNER%
+ %XHARNESS_OUT%
+ %XHARNESS_COMMAND%
+ %XHARNESS_ARGS%
diff --git a/src/mono/sample/wasm/DefaultBrowserSample.targets b/src/mono/sample/wasm/DefaultBrowserSample.targets
index d34e280cf19c6..af224ce9c48af 100644
--- a/src/mono/sample/wasm/DefaultBrowserSample.targets
+++ b/src/mono/sample/wasm/DefaultBrowserSample.targets
@@ -7,7 +7,7 @@
-1
true
$(WasmXHarnessArgs) --web-server-use-cop
- $(ExecXHarnessCmd) wasm test-browser --app=. --browser=Chrome $(XHarnessBrowserPathArg) $(WasmXHarnessArgs) --html-file=index.html --output-directory=$(XHarnessOutput) -- $(MSBuildProjectName).dll
+ $(ExecXHarnessVar) wasm $(XHarnessCommandVar) --app=. $(XHarnessBrowserPathArg) $(WasmXHarnessArgsVar) $(WasmXHarnessArgs) --html-file=index.html --output-directory=$(XHarnessOutputVar) -- $(MSBuildProjectName).dll
true
$(TestArchiveRoot)chromeonly/
$(TestArchiveTestsRoot)$(OSPlatformConfig)/
diff --git a/src/mono/sample/wasm/console-node/Wasm.Console.Node.Sample.csproj b/src/mono/sample/wasm/console-node/Wasm.Console.Node.Sample.csproj
index 7234698ff2283..995e1d3650e2c 100644
--- a/src/mono/sample/wasm/console-node/Wasm.Console.Node.Sample.csproj
+++ b/src/mono/sample/wasm/console-node/Wasm.Console.Node.Sample.csproj
@@ -6,7 +6,7 @@
true
2
- $(ExecXHarnessCmd) wasm test --app=. --engine=NodeJS --engine-arg=--stack-trace-limit=1000 --js-file=main.mjs --output-directory=$(XHarnessOutput) --expected-exit-code $(ExpectedExitCode)
+ $(ExecXHarnessVar) wasm test --app=. --engine=NodeJS --engine-arg=--stack-trace-limit=1000 --js-file=main.mjs --output-directory=$(XHarnessOutputVar) --expected-exit-code $(ExpectedExitCode)
diff --git a/src/mono/sample/wasm/console-v8/Wasm.Console.V8.Sample.csproj b/src/mono/sample/wasm/console-v8/Wasm.Console.V8.Sample.csproj
index 13ed38bfe63e4..09e9f7bf1a0d2 100644
--- a/src/mono/sample/wasm/console-v8/Wasm.Console.V8.Sample.csproj
+++ b/src/mono/sample/wasm/console-v8/Wasm.Console.V8.Sample.csproj
@@ -5,7 +5,7 @@
true
true
- $(ExecXHarnessCmd) wasm test --app=. --engine=V8 --engine-arg=--stack-trace-limit=1000 --engine-arg=--module --js-file=main.mjs --output-directory=$(XHarnessOutput) -- --run $(MSBuildProjectName).dll
+ $(ExecXHarnessVar) wasm test --app=. --engine=V8 --engine-arg=--stack-trace-limit=1000 --engine-arg=--module --js-file=main.mjs --output-directory=$(XHarnessOutputVar) -- --run $(MSBuildProjectName).dll