Fix for ApplyQueryAttributes being called on non-destination pages during back navigation - #35392
Conversation
Updated [Magick.NET-Q8-AnyCPU](https://github.com/dlemstra/Magick.NET) from 14.10.4 to 14.12.0. <details> <summary>Release notes</summary> _Sourced from [Magick.NET-Q8-AnyCPU's releases](https://github.com/dlemstra/Magick.NET/releases)._ ## 14.12.0 ### What's Changed - Added `FixByteOrder` to the `DcmReadDefines` (#1976) - Added `IconWriteDefines`. ### Related changes in ImageMagick since the last release of Magick.NET: - Correct bug in `Composite` when using `CopyAlpha` (#1985) - Fixed incorrect orientation of JPEG compressed TIFF images (#1991) - Heap-Buffer-Overflow write of single zero byte when parsing xml (GHSA-cr67-pvmx-2pp2) - Stack Overflow in DestroyXMLTree (GHSA-fwvm-ggf6-2p4x) - Out-of-Bounds read in sample operation (GHSA-pcvx-ph33-r5vv) - Stack Overflow via Recursive FX Expression Parsing (GHSA-f4qm-vj5j-9xpw) - Heap Buffer Overflow in ImageMagick MVG decoder (GHSA-x9h5-r9v2-vcww) - Heap overflow caused by integer overflow/wraparound in viff encoder on 32-bit builds (GHSA-v67w-737x-v2c9) - Stack-buffer-overflow in MNG encoder with oversized pallete (GHSA-98cp-rj9f-6v5g) - Integer overflow in despeckle operation causes heap buffer overflow on 32-bit builds (GHSA-26qp-ffjh-2x4v) - Off-by-One in MSL decoder could result in crash (GHSA-5xg3-585r-9jh5) - Heap buffer overflow when encoding JXL image with a 16-bit float (GHSA-jvgr-9ph5-m8v4) - Heap-use-after-free via XMP profile could result in a crash when printing the values (GHSA-r83h-crwp-3vm7) - Heap buffer overflow (WRITE) in the YAML and JSON encoders (GHSA-5592-p365-24xh) - Heap out-of-bounds write in JP2 encoder (GHSA-pwg5-6jfc-crvh) ### Library updates: - ImageMagick 7.1.2-19 (2026-04-12) - aom 3.13.3 (2026-04-02) - openexr 3.4.9 (2026-04-03) - freetype 2.14.3 (2026-03-22) - gdk-pixbuf 2.44.6 (2026-03-31) - harfbuzz 14.0.0 (2026-04-01) - liblzma 5.8.3 (2026-04-31) - libpng 1.6.56 (2026-03-25) **Full Changelog**: dlemstra/Magick.NET@14.11.1...14.12.0 ## 14.11.1 ### Related changes in ImageMagick since the last release of Magick.NET: - Stack-buffer-overflow WRITE in InterpretImageFilename due to overflow (GHSA-8793-7xv6-82cf) ### Library updates: - ImageMagick 7.1.2-18 (2026-03-23) - aom 3.13.2 (2026-03-19) - openexr 3.4.7 (2026-03-15) - harfbuzz 13.2.1 (2026-03-19) **Full Changelog**: dlemstra/Magick.NET@14.11.0...14.11.1 ## 14.11.0 ### What's Changed - Added `DcmReadDefines`. ### Related changes in ImageMagick since the last release of Magick.NET: - Access mode change for files created from 0666 to 0600 (ImageMagick/ImageMagick#8609) - Heap-buffer-overflow in NewXMLTree could result in crash (GHSA-gc62-2v5p-qpmp) ### Library updates: - ImageMagick 7.1.2-17 (2026-03-16) - openexr 3.4.6 (2026-03-01) - freetype 2.14.2 (2026-03-01) - harfbuzz 13.0.1 (2026-03-07) - libxml2 2.15.2 (2026-03-03) **Full Changelog**: dlemstra/Magick.NET@14.10.4...14.11.0 Commits viewable in [compare view](dlemstra/Magick.NET@14.10.4...14.12.0). </details> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/dotnet/maui/network/alerts). </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…t#35333) Bump OpenTelemetry packages to latest stable versions in the maui-aspire-servicedefaults template: - OpenTelemetry.Exporter.OpenTelemetryProtocol: 1.9.0 to 1.15.3 - OpenTelemetry.Extensions.Hosting: 1.9.0 to 1.15.3 - OpenTelemetry.Instrumentation.Http: 1.9.0 to 1.15.1 - OpenTelemetry.Instrumentation.Runtime: 1.9.0 to 1.15.1 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This pull request updates the following dependencies [marker]: <> (Begin:a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95) ## From https://github.com/dotnet/xharness - **Subscription**: [a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95](https://maestro.dot.net/subscriptions?search=a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95) - **Build**: [20260430.4](https://dev.azure.com/dnceng/internal/_build/results?buildId=2964906) ([312724](https://maestro.dot.net/channel/2/github:dotnet:xharness/build/312724)) - **Date Produced**: May 1, 2026 7:05:11 AM UTC - **Commit**: [92962e5c46ac08a66ded4c5696209cc60f1a232f](dotnet/xharness@92962e5) - **Branch**: [main](https://github.com/dotnet/xharness/tree/main) [DependencyUpdate]: <> (Begin) - **Dependency Updates**: - From [11.0.0-prerelease.26229.1 to 11.0.0-prerelease.26230.4][1] - Microsoft.DotNet.XHarness.CLI - Microsoft.DotNet.XHarness.TestRunners.Common - Microsoft.DotNet.XHarness.TestRunners.Xunit [1]: dotnet/xharness@9d5a7e9...92962e5 [DependencyUpdate]: <> (End) [marker]: <> (End:a71c12d9-5aa4-4b46-e2d6-08da0cf8cd95) Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
> [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Replaces `review-rules.md` (flat 345-line checklist) with a dimensional expert review agent. Single source of truth for all review rules, organized into 30 dimensions for per-dimension sub-agent evaluation. Adds inline file:line PR comments alongside the existing wall-of-text summary. Extracted from 28k review comments across 5 maintainers via [extraction-pipeline](https://github.com/dotnet/fsharp/blob/main/.github/agents/extraction-pipeline.md). No functional code changes. Recreated from dotnet#35062 on a dotnet/maui branch (originally opened from a fork). ## What changed **Before:** `review-rules.md` had 345 lines of flat rules. `code-review` skill loaded them all into one context. Output was a single wall-of-text PR comment. **After:** Rules absorbed into `maui-expert-reviewer.md` as 30 dimensions with 200+ CHECK items. Each dimension runs as an independent sub-agent with focused context. Output is inline file:line PR comments via `inline-findings.json`. ## CI Flow ``` Review-PR.ps1 prompt: 1. code-review → maui-expert-reviewer agent → inline-findings.json 2. pr-review → Pre-Flight → Try-Fix → Report (sees findings, no duplication) Posting: post-inline-review.ps1 → .json → GitHub file:line comments (NEW) post-ai-summary-comment.ps1 → {phase}/content.md → wall-of-text (existing) CI: COMMENTS_VIA_FILE=true → agent writes .json, script posts Local: agent writes .json, code-review posts directly via gh api ``` ## Files | Action | File | What | |--------|------|------| | **Add** | `agents/maui-expert-reviewer.md` | 30 dimensions, 200+ CHECKs, routing table | | **Add** | `instructions/collectionview-{android,ios,windows}` | Platform-isolated CV rules | | **Add** | `instructions/{handler-patterns,layout-system,performance-hotpaths,public-api,threading-async}` | Domain-specific ambient guidance | | **Add** | `scripts/post-inline-review.ps1` | Posts .json as GitHub PR review | | **Del** | `skills/code-review/references/review-rules.md` | Absorbed into agent | | **Mod** | `skills/code-review/SKILL.md` | Delegates to agent | | **Mod** | `scripts/Review-PR.ps1` | Prompt + inline posting wiring | | **Mod** | `eng/pipelines/ci-copilot.yml` | `COMMENTS_VIA_FILE` env var | --------- Co-authored-by: kubaflo <kubaflo@users.noreply.github.com> Co-authored-by: T-Gro <46543583+T-Gro@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Tomas Grosup <tomasgrosup@microsoft.com>
…View2 is not connected in Appium. (dotnet#35335) ### Description of Changes - Recently, the Appium driver has not been connecting properly to the native WebView2 control on Windows. While running locally using Appium Inspector with the WebView control, the inspector is unable to recognize the WebView and displays an error. - Due to this Appium driver issue, the WebView lane in CI takes a long time to run (approximately 3 hours) and eventually gets cancelled. As a temporary workaround, the WebView lane has been temporarily removed from the Windows CI pipeline to allow the CI process to complete more quickly. <img width="649" height="294" alt="image" src="https://github.com/user-attachments/assets/68df006b-56d6-4bfa-870a-a4184f5b18b7" /> <img width="576" height="430" alt="image" src="https://github.com/user-attachments/assets/40c222e8-4935-450d-be7e-5ee9245e9eb1" /> **Issue:** dotnet#35334
…eturn guard in ShellNavigationManager.ApplyQueryAttributes to prevent non-destination pages from processing stale or empty query parameters during navigation.
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35392Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35392" |
|
/azp run maui-pr-uitests , maui-pr-devicetests |
|
Azure Pipelines successfully started running 2 pipeline(s). |
There was a problem hiding this comment.
Pull request overview
Fixes a Shell navigation bug where ApplyQueryAttributes could be invoked for non-destination ShellContent (inactive pages / their binding contexts) during back navigation, due to previously-stored QueryAttributesProperty being merged back in on pop.
Changes:
- Added an early-return guard in
ShellNavigationManager.ApplyQueryAttributesto skip non-destination items when no query parameters match the item’s route prefix. - Added a regression unit test covering a “second cycle” back-navigation scenario where an inactive page previously received an extra
ApplyQueryAttributescall.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| src/Controls/src/Core/Shell/ShellNavigationManager.cs | Skips query-attribute merging/apply for non-destination items when there are no matching prefixed parameters. |
| src/Controls/tests/Core.UnitTests/ShellParameterPassingTests.cs | Adds a regression test to ensure inactive pages don’t receive ApplyQueryAttributes on back navigation. |
| // ApplyQueryAttributes should NOT be called on an inactive (non-target) page's ViewModel | ||
| // when navigating back with query params on the second cycle through the same pages. | ||
| [Fact] | ||
| public async Task ApplyQueryAttributesNotCalledOnInactivePageDuringBackNavigation() | ||
| { | ||
| Routing.RegisterRoute("secondPage", typeof(ShellTestPage)); | ||
| Routing.RegisterRoute("thirdPage", typeof(ShellTestPage)); | ||
|
|
||
| var mainPage = new ShellTestPage(); | ||
| mainPage.BindingContext = mainPage; | ||
|
|
| int callsAfterCycle1Back = mainPage.AppliedQueryAttributes.Count; | ||
|
|
||
| await shell.GoToAsync("..?backToMain=1"); // Second → Main | ||
|
|
🤖 AI Summary
📊 Review Session —
|
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
🧪 ShellParameterPassingTests ShellParameterPassingTests |
✅ FAIL — 108s | ✅ PASS — 68s |
🔴 Without fix — 🧪 ShellParameterPassingTests: FAIL ✅ · 108s
Determining projects to restore...
Restored /home/vsts/work/1/s/src/Controls/tests/Core.UnitTests/Controls.Core.UnitTests.csproj (in 8.53 sec).
Restored /home/vsts/work/1/s/src/Controls/src/Xaml/Controls.Xaml.csproj (in 194 ms).
Restored /home/vsts/work/1/s/src/Controls/Maps/src/Controls.Maps.csproj (in 8.94 sec).
Restored /home/vsts/work/1/s/src/TestUtils/src/TestUtils/TestUtils.csproj (in 6 ms).
Restored /home/vsts/work/1/s/src/Graphics/src/Graphics/Graphics.csproj (in 14 ms).
Restored /home/vsts/work/1/s/src/Controls/src/Core/Controls.Core.csproj (in 58 ms).
Restored /home/vsts/work/1/s/src/Essentials/src/Essentials.csproj (in 40 ms).
Restored /home/vsts/work/1/s/src/Core/src/Core.csproj (in 89 ms).
Restored /home/vsts/work/1/s/src/Core/maps/src/Maps.csproj (in 46 ms).
1 of 10 projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0/Microsoft.Maui.Maps.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0/Microsoft.Maui.Controls.Xaml.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0/Microsoft.Maui.Controls.Maps.dll
TestUtils -> /home/vsts/work/1/s/artifacts/bin/TestUtils/Debug/netstandard2.0/Microsoft.Maui.TestUtils.dll
Controls.Core.UnitTests -> /home/vsts/work/1/s/artifacts/bin/Controls.Core.UnitTests/Debug/net10.0/Microsoft.Maui.Controls.Core.UnitTests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.Core.UnitTests/Debug/net10.0/Microsoft.Maui.Controls.Core.UnitTests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.14] Discovering: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:01.37] Discovered: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:01.38] Starting: Microsoft.Maui.Controls.Core.UnitTests
Passed UrlParameter [99 ms]
Passed InitialNavigationDoesntSetQueryAttributesProperty [34 ms]
Passed ReNavigatingToCurrentLocationPassesParameters(useDataTemplates: True) [7 ms]
Passed ReNavigatingToCurrentLocationPassesParameters(useDataTemplates: False) [< 1 ms]
Passed NavigationWithQueryStringThenWithoutQueryString [2 ms]
Passed NavigatingBackToShellContentRetainsQueryParameter [6 ms]
Passed BasicShellParameterTest [6 ms]
Passed PopNavigationTriggersApplyQueryAttributes [4 ms]
Passed ExtraParametersArentReAppliedWhenNavigatingBackToShellContent [5 ms]
Passed DotDotNavigationPassesShellParameters [2 ms]
Passed ExtraParametersDontGetRetained [9 ms]
Passed DotDotNavigationPassesParameters [1 ms]
Passed PassesUrlInShellParameter [1 ms]
Passed ShellNavigationQueryParametersPassedInAsReadOnly [3 ms]
Passed NavigatingBackToTabSetsQueryAttributesProperty [3 ms]
Passed UriEncodedStringDecodesCorrectly [2 ms]
Passed BasicQueryStringTest [1 ms]
Passed FlyoutItemNavigationSetsQueryAttributesProperty [2 ms]
Passed NavigationBetweenShellContentsPassesQueryString [2 ms]
Passed NavigationBetweenFlyoutItemWithPushedPageRetainsQueryString [16 ms]
Passed NavigationWithQueryStringAndNoDataTemplate [1 ms]
Passed SingleUseQueryParametersReplaceQueryStringParams [1 ms]
Passed UriDecodesQueryString [1 ms]
Passed ShellSectionChangedSetsQueryAttributesProperty [1 ms]
Passed NavigationWithQueryStringWhenPageMatchesBindingContext [1 ms]
Passed SetParameterOfTypeThatsNotAString [6 ms]
Passed TabBarNavigationSetsQueryAttributesProperty [1 ms]
[xUnit.net 00:00:01.70] Assert.Equal() Failure: Values differ
[xUnit.net 00:00:01.70] Expected: 1
[xUnit.net 00:00:01.70] Actual: 2
[xUnit.net 00:00:01.70] Stack Trace:
[xUnit.net 00:00:01.70] ApplyQueryAttributesNotCalledOnInactivePageDuringBackNavigation [FAIL]
[xUnit.net 00:00:01.70] /_/src/Controls/tests/Core.UnitTests/ShellParameterPassingTests.cs(823,0): at Microsoft.Maui.Controls.Core.UnitTests.ShellParameterPassingTests.ApplyQueryAttributesNotCalledOnInactivePageDuringBackNavigation()
[xUnit.net 00:00:01.70] --- End of stack trace from previous location ---
[xUnit.net 00:00:01.71] Finished: Microsoft.Maui.Controls.Core.UnitTests
Passed NavigatingBackDoesntClearParametersFromPreviousPage [2 ms]
Passed NavigatingBackAbsolutelyClearsParametersFromPreviousPage [2 ms]
Passed NavigationBetweenFlyoutItemsRetainsQueryString [2 ms]
Passed ValidateReadOnlyDictionary [2 ms]
Passed NavigatingBackToShellContentAbsolutelyClearsQueryParameter [1 ms]
Failed ApplyQueryAttributesNotCalledOnInactivePageDuringBackNavigation [4 ms]
Error Message:
Assert.Equal() Failure: Values differ
Expected: 1
Actual: 2
Stack Trace:
at Microsoft.Maui.Controls.Core.UnitTests.ShellParameterPassingTests.ApplyQueryAttributesNotCalledOnInactivePageDuringBackNavigation() in /_/src/Controls/tests/Core.UnitTests/ShellParameterPassingTests.cs:line 823
--- End of stack trace from previous location ---
Passed TabBarNavigationWithGoToAsyncSetsQueryAttributesProperty [1 ms]
Test Run Failed.
Total tests: 34
Passed: 33
Failed: 1
Total time: 2.1673 Seconds
🟢 With fix — 🧪 ShellParameterPassingTests: PASS ✅ · 68s
Determining projects to restore...
All projects are up-to-date for restore.
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Graphics -> /home/vsts/work/1/s/artifacts/bin/Graphics/Debug/net10.0/Microsoft.Maui.Graphics.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Essentials -> /home/vsts/work/1/s/artifacts/bin/Essentials/Debug/net10.0/Microsoft.Maui.Essentials.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Core -> /home/vsts/work/1/s/artifacts/bin/Core/Debug/net10.0/Microsoft.Maui.dll
Controls.BindingSourceGen -> /home/vsts/work/1/s/artifacts/bin/Controls.BindingSourceGen/Debug/netstandard2.0/Microsoft.Maui.Controls.BindingSourceGen.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Controls.Core -> /home/vsts/work/1/s/artifacts/bin/Controls.Core/Debug/net10.0/Microsoft.Maui.Controls.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Maps -> /home/vsts/work/1/s/artifacts/bin/Maps/Debug/net10.0/Microsoft.Maui.Maps.dll
Controls.Xaml -> /home/vsts/work/1/s/artifacts/bin/Controls.Xaml/Debug/net10.0/Microsoft.Maui.Controls.Xaml.dll
##vso[build.updatebuildnumber]10.0.70-ci+azdo.14079053
Controls.Maps -> /home/vsts/work/1/s/artifacts/bin/Controls.Maps/Debug/net10.0/Microsoft.Maui.Controls.Maps.dll
TestUtils -> /home/vsts/work/1/s/artifacts/bin/TestUtils/Debug/netstandard2.0/Microsoft.Maui.TestUtils.dll
Controls.Core.UnitTests -> /home/vsts/work/1/s/artifacts/bin/Controls.Core.UnitTests/Debug/net10.0/Microsoft.Maui.Controls.Core.UnitTests.dll
Test run for /home/vsts/work/1/s/artifacts/bin/Controls.Core.UnitTests/Debug/net10.0/Microsoft.Maui.Controls.Core.UnitTests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)
Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
[xUnit.net 00:00:00.01] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.46] Discovering: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:02.67] Discovered: Microsoft.Maui.Controls.Core.UnitTests
[xUnit.net 00:00:02.69] Starting: Microsoft.Maui.Controls.Core.UnitTests
Passed UrlParameter [136 ms]
Passed InitialNavigationDoesntSetQueryAttributesProperty [50 ms]
Passed ReNavigatingToCurrentLocationPassesParameters(useDataTemplates: True) [11 ms]
Passed ReNavigatingToCurrentLocationPassesParameters(useDataTemplates: False) [1 ms]
Passed NavigationWithQueryStringThenWithoutQueryString [3 ms]
Passed NavigatingBackToShellContentRetainsQueryParameter [8 ms]
Passed BasicShellParameterTest [9 ms]
Passed PopNavigationTriggersApplyQueryAttributes [6 ms]
Passed ExtraParametersArentReAppliedWhenNavigatingBackToShellContent [4 ms]
Passed DotDotNavigationPassesShellParameters [2 ms]
Passed ExtraParametersDontGetRetained [11 ms]
Passed DotDotNavigationPassesParameters [1 ms]
Passed PassesUrlInShellParameter [1 ms]
Passed ShellNavigationQueryParametersPassedInAsReadOnly [6 ms]
Passed NavigatingBackToTabSetsQueryAttributesProperty [37 ms]
Passed UriEncodedStringDecodesCorrectly [2 ms]
Passed BasicQueryStringTest [1 ms]
Passed FlyoutItemNavigationSetsQueryAttributesProperty [2 ms]
Passed NavigationBetweenShellContentsPassesQueryString [3 ms]
Passed NavigationBetweenFlyoutItemWithPushedPageRetainsQueryString [25 ms]
Passed NavigationWithQueryStringAndNoDataTemplate [1 ms]
Passed SingleUseQueryParametersReplaceQueryStringParams [2 ms]
Passed UriDecodesQueryString [2 ms]
Passed ShellSectionChangedSetsQueryAttributesProperty [2 ms]
Passed NavigationWithQueryStringWhenPageMatchesBindingContext [1 ms]
Passed SetParameterOfTypeThatsNotAString [12 ms]
Passed TabBarNavigationSetsQueryAttributesProperty [2 ms]
[xUnit.net 00:00:03.17] Finished: Microsoft.Maui.Controls.Core.UnitTests
Passed NavigatingBackDoesntClearParametersFromPreviousPage [2 ms]
Passed NavigatingBackAbsolutelyClearsParametersFromPreviousPage [2 ms]
Passed NavigationBetweenFlyoutItemsRetainsQueryString [2 ms]
Passed ValidateReadOnlyDictionary [4 ms]
Passed NavigatingBackToShellContentAbsolutelyClearsQueryParameter [1 ms]
Passed ApplyQueryAttributesNotCalledOnInactivePageDuringBackNavigation [4 ms]
Passed TabBarNavigationWithGoToAsyncSetsQueryAttributesProperty [1 ms]
Test Run Successful.
Total tests: 34
Passed: 34
Total time: 4.3822 Seconds
📁 Fix files reverted (1 files)
src/Controls/src/Core/Shell/ShellNavigationManager.cs
🧪 UI Tests — Shell
Detected UI test categories: Shell
❌ Deep UI tests — 0 passed, 297 failed across 1 category on platform-pool agent (replaces in-process counts above).
🧪 UI Test Execution Results (deep, platform pool)
| Category | Tests | Snapshot diffs |
|---|---|---|
controls-Shell |
0/297 (297 ❌) | — |
❌ controls-Shell — 297 failed tests
ShouldExecuteCommandWhenTappingShellSearchItem
OneTimeSetUp: System.TimeoutException : [Android, iOS, macOS] Shell SearchHandler Command Not Executed on Item Selection
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryT
...
BackAndForwardNavigation_NavTest2ToNavTest3
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
VerifyShellFlyout_BackgroundImageAndBackDrop
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
SearchHandlerVisibilityChangesToExpanded
OneTimeSetUp: System.TimeoutException : Shell SearchHandler SearchBoxVisibility does not update when changed dynamically
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryT
...
Issue29559KeyboardDismissonSearchHander
OneTimeSetUp: System.TimeoutException : Add An API to SearchHandler so users can hide or show the softkeyboard
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToResetTest
...
EntryScrollTest
OneTimeSetUp: System.TimeoutException : Shell Inset Test
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToResetTestState() in /_/src/Controls/tests/TestCases.Shared.Test
...
ShellSecondPageHasSameLayoutAsPrimary
OneTimeSetUp: System.TimeoutException : [Android] Shell content layout hides navigated to page
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToResetTestState() in /_/sr
...
Issue8145ShellToolbarDisposedException
OneTimeSetUp: System.TimeoutException : Shell System.ObjectDisposedException: Cannot access a disposed object. Object name: Android.Support.Design.Widget.BottomSheetDialog
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
a
...
BackButtonShouldNotBeVisible
OneTimeSetUp: System.TimeoutException : Setting BackButtonBehavior to not visible or not enabled does not work
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToResetTest
...
AFlyoutTests
OneTimeSetUp: System.TimeoutException : Shell Flyout Header Footer
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToResetTestState() in /_/src/Controls/tests/TestCases.S
...
VerifyShellFlyout_BackgroundImage
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
DoubleBackNavigation_NavTest3ToDetail1
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
VerifyShell_TabBarBackgroundColorAndForegroundColor
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
FlyoutHeaderBehaviorCollapseOnScroll
OneTimeSetUp: System.TimeoutException : Shell Flyout Header Behavior
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToResetTestState() in /_/src/Controls/tests/TestCases
...
VerifyShellFlyout_DisplayOptionsWithHeaderAndFooter
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
Issue9088SwipeViewConfictWithShellMenuSwipeInFromLeft
OneTimeSetUp: System.TimeoutException : [Bug] SwipeView items conflict with Shell menu swipe in from left, on real iOS devices
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITes
...
VerifyShellFlyoutHeaderFooterTemplate_Height
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
TabStack_OnRemovePage_NoOp_WhenNothingToRemove
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
TabBarIconsShouldAutoscaleShell
OneTimeSetUp: System.TimeoutException : Shell - Auto Resize chrome icons on iOS to make it more consistent with other platforms - TabBar
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._I
...
VerifyShellFlyout_FlyoutContent
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
VerifyShellMenuItemsAlignedInRTL
OneTimeSetUp: System.TimeoutException : [iOS, macOS] Shell menu and flyout items do not update correctly in RTL mode
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToRes
...
ShellPages_PresentationModeAnimated
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
VerifyShellFlyoutHeaderFooterTemplate_Width
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
NavEvents_PopToRoot_NavigatingEvent_SourceIsPopToRoot
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
NavEvents_Pop_NavigatingEvent_SourceIsPopAndCurrentIsPreviousPage
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
VerifyShellFlyout_FlyoutIcon
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
NavigatingBackToAlreadySelectedTopTabDoesntCrash
OneTimeSetUp: System.TimeoutException : [Bug] NullReferenceException in the Shell on UWP when navigating back to Shell Section with multiple content items
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.
...
PassData_DictionaryParam_ReceivedByIQueryAttributable
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
VerifySearchHandlerClearPlaceholderIconColor
OneTimeSetUp: System.TimeoutException : [iOS] SearchHandler ClearPlaceholderIcon color
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests._IssuesUITest.NavigateToIssue(String issue) in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_IssuesUITest.cs:line 54
at Microsoft.Maui.TestCases.Tests._IssuesUITest.TryToResetTestState() in /_/src/Contro
...
PassData_SingleUseParams_ReceivedByIQueryAttributable
OneTimeSetUp: System.TimeoutException : Timed out waiting for Go To Test button to appear
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.UtilExtensions.NavigateToGallery(IApp app, String page) in /_/src/Controls/tests/TestCases.Shared.Tests/UtilExtensions.cs:line 37
at Microsoft.Maui.TestCases.Tests._GalleryUITest.FixtureSetup() in /_/src/Controls/
...
(+267 more — see TRX in artifact)
📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)
🔍 Pre-Flight — Context & Validation
Pre-Flight: PR #35392
Summary
Title: Fix for ApplyQueryAttributes being called on non-destination pages during back navigation
Author: BagavathiPerumal
Base: main
Head: fix-35183
Fixes: #35183 (Syncfusion partner issue, area-navigation, verified)
Problem
When navigating back in Shell with query parameters, IQueryAttributable.ApplyQueryAttributes is incorrectly invoked on a non-target (inactive) page's view model on the second navigation cycle through the same pages.
Root cause (per PR author)
In ShellNavigationManager.ApplyQueryAttributes, the method processes ALL ShellContent elements in the hierarchy, not just the destination. For non-destination items:
filteredQueryis empty (no prefix match).- But
MergeDatare-inflates it by merging the previously storedQueryAttributesProperty(set during a prior navigation cycle). - The non-empty merged result triggers
ApplyQueryAttributeson the inactive page's VM.
Also: during forward navigation, the mergedData.Count > 0 || !isPopping condition forced ApplyQueryAttributes({}) on non-destination items unconditionally.
Fix
Adds an early return guard right after filteredQuery is computed:
if (!isLastItem && filteredQuery.Count == 0)
{
return;
}If this is a non-destination item AND no query params match its prefix, exit before MergeData/ApplyQueryAttributes.
Files Changed (+51 / -0)
src/Controls/src/Core/Shell/ShellNavigationManager.cs(+7)src/Controls/tests/Core.UnitTests/ShellParameterPassingTests.cs(+44)
Test
New xUnit test ApplyQueryAttributesNotCalledOnInactivePageDuringBackNavigation simulates two navigation cycles main→second→third→back and asserts mainPage.AppliedQueryAttributes.Count is unchanged on the third→second back step in cycle 2.
Gate
Already verified ✅ — test fails without fix, passes with fix.
Risk Surface
- Function is on the hot path of all Shell navigation. Early
returnskips both branches (baseShellItem is ShellContentandisLastItemelse). - Guard is
!isLastItem && filteredQuery.Count == 0— destination items and any item with at least one matching prefix param are unaffected, so the surface is narrowed to the precise bug pattern. - Potential concern: prior behavior intentionally cleared/re-applied
QueryAttributesPropertyfor non-destination items on forward navigation (!isPoppingbranch). Skipping that branch means no clearing of stale state on the non-destination, but the stored state remains scoped to aShellContentwhose VM should not be invoked anyway when not the target. Net effect appears correct for the reported scenario. - The early-return prevents the unwanted invocation; no destination-page paths are affected.
🔧 Fix — Analysis & Comparison
Try-Fix aggregate narrative
Four alternative fixes were explored, each with a distinct expert-reviewer dimension lens:
| Candidate | Dimension | Approach | Coverage vs PR |
|---|---|---|---|
| try-fix-1 | Shell/navigation correctness | Pass isPopping && isLastItem to MergeData so stored property isn't merged on non-destination items |
Narrower — fixes only back-navigation merge regression |
| try-fix-2 | Regression / state hygiene | Clear stale QueryAttributesProperty on non-destination items when current filtered query is empty |
Riskier — likely regresses ShellSectionChangedSetsQueryAttributesProperty |
| try-fix-3 | Performance hot path | Loop over query.Keys to early-out before allocating filteredQuery |
Equivalent to PR but duplicates prefix-match logic |
| try-fix-4 | API contract / design | Add isDestination to MergeData + change forward-nav condition to (!isPopping && isLastItem) |
Equivalent to PR, larger diff |
Outcome: None of the four alternatives beat the PR's minimal 7-line guard, which:
- Targets the exact failing condition (
!isLastItem && filteredQuery.Count == 0). - Returns before
MergeDataand before any side effects. - Covers both back-navigation merge bug and forward-navigation empty-call bug in one early return.
- Has zero impact on destination-item paths (smallest blast radius).
The PR's fix is recommended.
📋 Report — Final Recommendation
Comparative Analysis — PR #35392
Candidates
| Candidate | Approach | Tests pass new regression? | Notes |
|---|---|---|---|
| pr | Early return on !isLastItem && filteredQuery.Count == 0 (7 lines) |
✅ (gate verified PASSED) | Minimal blast radius. Covers both back- and forward-nav. |
| pr-plus-reviewer | pr + nice-to-have cosmetic test cleanup (assert dead local, assert no stale keys, optional [Theory] over useDataTemplates) |
✅ (same fix logic) | Strictly improves test rigor without changing fix. |
| try-fix-1 | Pass isPopping && isLastItem to MergeData |
✅ on the new regression test (verified via trace, not built) | Doesn't fix forward-nav empty-call issue; narrower than PR. |
| try-fix-2 | Clear stale QueryAttributesProperty on non-destination items |
ShellSectionChangedSetsQueryAttributesProperty which asserts the property remains set |
Higher regression risk. Not run. |
| try-fix-3 | Loop query.Keys to short-circuit before filteredQuery allocation |
✅ (semantic equivalent to PR) | Duplicates prefix-match logic; YAGNI. |
| try-fix-4 | Add isDestination parameter to MergeData + change forward-nav condition |
✅ (verified via trace, not built) | Larger diff, more conditionals. Equivalent coverage to PR. |
Ranking
Regression-test status governs ranking per instructions: gate already verified pr passes. The four try-fix candidates were not built/run (environment constraint), but trace analysis shows:
- try-fix-1, try-fix-3, try-fix-4 should pass.
- try-fix-2 has identifiable regression risk against an existing test in the same file.
Among candidates that pass:
- pr — 7-line guard at the exact failure point; minimal blast radius; expert reviewer rates LGTM; gate-verified.
- pr-plus-reviewer — same fix + improved test assertions (no stale-key leakage check + remove dead local). Strict improvement over
pr. - try-fix-3 — functionally equivalent but duplicates prefix-match logic.
- try-fix-4 — functionally equivalent but larger diff.
- try-fix-1 — narrower coverage (does not address forward-nav empty-call behavior change that
princidentally fixes). - try-fix-2 — high regression risk.
Winner
pr-plus-reviewer — adopts the PR's fix verbatim and applies the expert reviewer's nice-to-have test improvements:
- Assert
callsAfterCycle1Backis unchanged after cycle-1 main pop (uses the currently-dead local). - Strengthen assertion to verify no stale
fromThird/fromSecondkeys appear in any ofmainPage.AppliedQueryAttributes. - (Optional) Mirror sibling tests'
[Theory]-over-useDataTemplatesparameterization.
This is isPRFix == true (recommend merging the PR; the reviewer feedback is comment-level only).
Why not pr directly?
Both are merge-ready. pr-plus-reviewer is the better candidate to recommend because it carries the actionable reviewer feedback forward as suggestions for the PR author. From the orchestrator's perspective, the PR as submitted is acceptable, and the inline findings (none must-fix) are the correct mechanism to communicate improvements.
Why not a try-fix?
None of the four alternatives are strictly better than the PR. The expert review explicitly assesses the fix as correct, minimal, and at the right architectural layer with no API/threading/performance concerns.
Inline findings to post
The 5 findings in inline-findings.json (1 praise + 4 nice-to-have) capture all actionable reviewer feedback and are scoped to the PR diff for inline posting.
…ring back navigation (#35392) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details When navigating back in Shell with query parameters, ApplyQueryAttributes is incorrectly called on the previous page instead of only the destination page. This causes stale query parameters to be applied to inactive pages during navigation. ### Root Cause The issue occurs because of how ApplyQueryAttributes in ShellNavigationManager handles non-destination ShellContent elements (pages that are not the navigation target). When a page with an explicit Shell route (e.g., MainPage) is navigated to, its ShellContent stores the query parameters in QueryAttributesProperty. On subsequent back navigations to a different page, the method still processes all ShellContent elements in the hierarchy not just the destination. For non-destination items, filteredQuery is empty because no parameters match their route prefix. However, MergeData inflates it by merging the previously stored QueryAttributesProperty back in, producing a non-empty merged result that incorrectly triggers IQueryAttributable.ApplyQueryAttributes on the inactive page's ViewModel. Additionally, during forward navigation, the condition mergedData.Count > 0 || !isPopping unconditionally called baseShellItem.ApplyQueryAttributes({}) for non-destination items. Because ShellContent.IsSet(QueryAttributesProperty) was true from a prior navigation cycle, even an empty query propagated to the page. ### Description of Change The fix involves adding an early return guard in ShellNavigationManager.ApplyQueryAttributes immediately after filteredQuery is built. When a ShellContent element is not the navigation destination and no query parameters match its route prefix, the method exits before calling MergeData or ApplyQueryAttributes. This prevents stale stored query parameters from being merged during back navigation and avoids empty query propagation during forward navigation. As a result, non-destination pages are no longer processed during navigation, even if they contain stored query parameters from previous navigation cycles. Validated the behavior in the following platforms - [x] Android - [x] Windows - [x] iOS - [x] Mac ### Issues Fixed Fixes #35183 ### Output ScreenShot |Platform|Before|After| |--|--|--| |Android| <video src="https://github.com/user-attachments/assets/5b5d94ee-d2c0-449c-8363-e3d539029dcb" >| <video src="https://github.com/user-attachments/assets/145df879-c76a-4518-8d7b-79f8e495c11f">| |Mac|<video src="https://github.com/user-attachments/assets/61ba30ac-1b75-4988-ad54-aae835c708e2"> |<video src="https://github.com/user-attachments/assets/fd077605-39dc-4137-8e41-f309945f854f">| |iOS|<video src="https://github.com/user-attachments/assets/5af1cd44-0f8c-4aeb-85d4-d8b89df4113b">|<video src="https://github.com/user-attachments/assets/b890fdb1-affd-425e-8203-59d025dccec1">| |Windows|<video src="https://github.com/user-attachments/assets/a51a9a73-6b6f-4951-9f9c-f92a32ea530b">|<video src="https://github.com/user-attachments/assets/8f7fc37c-4ee3-4b39-8790-514624643fe5"> | ---------
…ring back navigation (#35392) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details When navigating back in Shell with query parameters, ApplyQueryAttributes is incorrectly called on the previous page instead of only the destination page. This causes stale query parameters to be applied to inactive pages during navigation. ### Root Cause The issue occurs because of how ApplyQueryAttributes in ShellNavigationManager handles non-destination ShellContent elements (pages that are not the navigation target). When a page with an explicit Shell route (e.g., MainPage) is navigated to, its ShellContent stores the query parameters in QueryAttributesProperty. On subsequent back navigations to a different page, the method still processes all ShellContent elements in the hierarchy not just the destination. For non-destination items, filteredQuery is empty because no parameters match their route prefix. However, MergeData inflates it by merging the previously stored QueryAttributesProperty back in, producing a non-empty merged result that incorrectly triggers IQueryAttributable.ApplyQueryAttributes on the inactive page's ViewModel. Additionally, during forward navigation, the condition mergedData.Count > 0 || !isPopping unconditionally called baseShellItem.ApplyQueryAttributes({}) for non-destination items. Because ShellContent.IsSet(QueryAttributesProperty) was true from a prior navigation cycle, even an empty query propagated to the page. ### Description of Change The fix involves adding an early return guard in ShellNavigationManager.ApplyQueryAttributes immediately after filteredQuery is built. When a ShellContent element is not the navigation destination and no query parameters match its route prefix, the method exits before calling MergeData or ApplyQueryAttributes. This prevents stale stored query parameters from being merged during back navigation and avoids empty query propagation during forward navigation. As a result, non-destination pages are no longer processed during navigation, even if they contain stored query parameters from previous navigation cycles. Validated the behavior in the following platforms - [x] Android - [x] Windows - [x] iOS - [x] Mac ### Issues Fixed Fixes #35183 ### Output ScreenShot |Platform|Before|After| |--|--|--| |Android| <video src="https://github.com/user-attachments/assets/5b5d94ee-d2c0-449c-8363-e3d539029dcb" >| <video src="https://github.com/user-attachments/assets/145df879-c76a-4518-8d7b-79f8e495c11f">| |Mac|<video src="https://github.com/user-attachments/assets/61ba30ac-1b75-4988-ad54-aae835c708e2"> |<video src="https://github.com/user-attachments/assets/fd077605-39dc-4137-8e41-f309945f854f">| |iOS|<video src="https://github.com/user-attachments/assets/5af1cd44-0f8c-4aeb-85d4-d8b89df4113b">|<video src="https://github.com/user-attachments/assets/b890fdb1-affd-425e-8203-59d025dccec1">| |Windows|<video src="https://github.com/user-attachments/assets/a51a9a73-6b6f-4951-9f9c-f92a32ea530b">|<video src="https://github.com/user-attachments/assets/8f7fc37c-4ee3-4b39-8790-514624643fe5"> | ---------
…ring back navigation (dotnet#35392) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> When navigating back in Shell with query parameters, ApplyQueryAttributes is incorrectly called on the previous page instead of only the destination page. This causes stale query parameters to be applied to inactive pages during navigation. The issue occurs because of how ApplyQueryAttributes in ShellNavigationManager handles non-destination ShellContent elements (pages that are not the navigation target). When a page with an explicit Shell route (e.g., MainPage) is navigated to, its ShellContent stores the query parameters in QueryAttributesProperty. On subsequent back navigations to a different page, the method still processes all ShellContent elements in the hierarchy not just the destination. For non-destination items, filteredQuery is empty because no parameters match their route prefix. However, MergeData inflates it by merging the previously stored QueryAttributesProperty back in, producing a non-empty merged result that incorrectly triggers IQueryAttributable.ApplyQueryAttributes on the inactive page's ViewModel. Additionally, during forward navigation, the condition mergedData.Count > 0 || !isPopping unconditionally called baseShellItem.ApplyQueryAttributes({}) for non-destination items. Because ShellContent.IsSet(QueryAttributesProperty) was true from a prior navigation cycle, even an empty query propagated to the page. The fix involves adding an early return guard in ShellNavigationManager.ApplyQueryAttributes immediately after filteredQuery is built. When a ShellContent element is not the navigation destination and no query parameters match its route prefix, the method exits before calling MergeData or ApplyQueryAttributes. This prevents stale stored query parameters from being merged during back navigation and avoids empty query propagation during forward navigation. As a result, non-destination pages are no longer processed during navigation, even if they contain stored query parameters from previous navigation cycles. Validated the behavior in the following platforms - [x] Android - [x] Windows - [x] iOS - [x] Mac Fixes dotnet#35183 |Platform|Before|After| |--|--|--| |Android| <video src="https://github.com/user-attachments/assets/5b5d94ee-d2c0-449c-8363-e3d539029dcb" >| <video src="https://github.com/user-attachments/assets/145df879-c76a-4518-8d7b-79f8e495c11f">| |Mac|<video src="https://github.com/user-attachments/assets/61ba30ac-1b75-4988-ad54-aae835c708e2"> |<video src="https://github.com/user-attachments/assets/fd077605-39dc-4137-8e41-f309945f854f">| |iOS|<video src="https://github.com/user-attachments/assets/5af1cd44-0f8c-4aeb-85d4-d8b89df4113b">|<video src="https://github.com/user-attachments/assets/b890fdb1-affd-425e-8203-59d025dccec1">| |Windows|<video src="https://github.com/user-attachments/assets/a51a9a73-6b6f-4951-9f9c-f92a32ea530b">|<video src="https://github.com/user-attachments/assets/8f7fc37c-4ee3-4b39-8790-514624643fe5"> | ---------
…ring back navigation (#35392) <!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! <!-- !!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING MAIN. !!!!!!! --> ### Issue Details When navigating back in Shell with query parameters, ApplyQueryAttributes is incorrectly called on the previous page instead of only the destination page. This causes stale query parameters to be applied to inactive pages during navigation. ### Root Cause The issue occurs because of how ApplyQueryAttributes in ShellNavigationManager handles non-destination ShellContent elements (pages that are not the navigation target). When a page with an explicit Shell route (e.g., MainPage) is navigated to, its ShellContent stores the query parameters in QueryAttributesProperty. On subsequent back navigations to a different page, the method still processes all ShellContent elements in the hierarchy not just the destination. For non-destination items, filteredQuery is empty because no parameters match their route prefix. However, MergeData inflates it by merging the previously stored QueryAttributesProperty back in, producing a non-empty merged result that incorrectly triggers IQueryAttributable.ApplyQueryAttributes on the inactive page's ViewModel. Additionally, during forward navigation, the condition mergedData.Count > 0 || !isPopping unconditionally called baseShellItem.ApplyQueryAttributes({}) for non-destination items. Because ShellContent.IsSet(QueryAttributesProperty) was true from a prior navigation cycle, even an empty query propagated to the page. ### Description of Change The fix involves adding an early return guard in ShellNavigationManager.ApplyQueryAttributes immediately after filteredQuery is built. When a ShellContent element is not the navigation destination and no query parameters match its route prefix, the method exits before calling MergeData or ApplyQueryAttributes. This prevents stale stored query parameters from being merged during back navigation and avoids empty query propagation during forward navigation. As a result, non-destination pages are no longer processed during navigation, even if they contain stored query parameters from previous navigation cycles. Validated the behavior in the following platforms - [x] Android - [x] Windows - [x] iOS - [x] Mac ### Issues Fixed Fixes #35183 ### Output ScreenShot |Platform|Before|After| |--|--|--| |Android| <video src="https://github.com/user-attachments/assets/5b5d94ee-d2c0-449c-8363-e3d539029dcb" >| <video src="https://github.com/user-attachments/assets/145df879-c76a-4518-8d7b-79f8e495c11f">| |Mac|<video src="https://github.com/user-attachments/assets/61ba30ac-1b75-4988-ad54-aae835c708e2"> |<video src="https://github.com/user-attachments/assets/fd077605-39dc-4137-8e41-f309945f854f">| |iOS|<video src="https://github.com/user-attachments/assets/5af1cd44-0f8c-4aeb-85d4-d8b89df4113b">|<video src="https://github.com/user-attachments/assets/b890fdb1-affd-425e-8203-59d025dccec1">| |Windows|<video src="https://github.com/user-attachments/assets/a51a9a73-6b6f-4951-9f9c-f92a32ea530b">|<video src="https://github.com/user-attachments/assets/8f7fc37c-4ee3-4b39-8790-514624643fe5"> | ---------
Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Issue Details
When navigating back in Shell with query parameters, ApplyQueryAttributes is incorrectly called on the previous page instead of only the destination page. This causes stale query parameters to be applied to inactive pages during navigation.
Root Cause
The issue occurs because of how ApplyQueryAttributes in ShellNavigationManager handles non-destination ShellContent elements (pages that are not the navigation target). When a page with an explicit Shell route (e.g., MainPage) is navigated to, its ShellContent stores the query parameters in QueryAttributesProperty.
On subsequent back navigations to a different page, the method still processes all ShellContent elements in the hierarchy not just the destination. For non-destination items, filteredQuery is empty because no parameters match their route prefix. However, MergeData inflates it by merging the previously stored QueryAttributesProperty back in, producing a non-empty merged result that incorrectly triggers IQueryAttributable.ApplyQueryAttributes on the inactive page's ViewModel.
Additionally, during forward navigation, the condition mergedData.Count > 0 || !isPopping unconditionally called baseShellItem.ApplyQueryAttributes({}) for non-destination items. Because ShellContent.IsSet(QueryAttributesProperty) was true from a prior navigation cycle, even an empty query propagated to the page.
Description of Change
The fix involves adding an early return guard in ShellNavigationManager.ApplyQueryAttributes immediately after filteredQuery is built.
When a ShellContent element is not the navigation destination and no query parameters match its route prefix, the method exits before calling MergeData or ApplyQueryAttributes.
This prevents stale stored query parameters from being merged during back navigation and avoids empty query propagation during forward navigation.
As a result, non-destination pages are no longer processed during navigation, even if they contain stored query parameters from previous navigation cycles.
Validated the behavior in the following platforms
Issues Fixed
Fixes #35183
Output ScreenShot
35183-BeforeFix.mov
35183-AfterFix.mov
35183-BeforeFix-Mac.mov
35183-AfterFix-Mac.mov
35183-BeforeFix-iOS.mov
35183-AfterFix-iOS.mov
35183-BeforeFix-Windows.mp4
35183-AfterFix-Windows.mp4