Skip to content

Fix for ApplyQueryAttributes being called on non-destination pages during back navigation - #35392

Merged
kubaflo merged 6 commits into
dotnet:inflight/currentfrom
BagavathiPerumal:fix-35183
May 13, 2026
Merged

Fix for ApplyQueryAttributes being called on non-destination pages during back navigation#35392
kubaflo merged 6 commits into
dotnet:inflight/currentfrom
BagavathiPerumal:fix-35183

Conversation

@BagavathiPerumal

@BagavathiPerumal BagavathiPerumal commented May 12, 2026

Copy link
Copy Markdown
Contributor

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

  • Android
  • Windows
  • iOS
  • Mac

Issues Fixed

Fixes #35183

Output ScreenShot

Platform Before After
Android
35183-BeforeFix.mov
35183-AfterFix.mov
Mac
35183-BeforeFix-Mac.mov
35183-AfterFix-Mac.mov
iOS
35183-BeforeFix-iOS.mov
35183-AfterFix-iOS.mov
Windows
35183-BeforeFix-Windows.mp4
35183-AfterFix-Windows.mp4
dependabot Bot and others added 6 commits May 7, 2026 08:48
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>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=Magick.NET-Q8-AnyCPU&package-manager=nuget&previous-version=14.10.4&new-version=14.12.0)](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.
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35392

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35392"
@dotnet-policy-service dotnet-policy-service Bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label May 12, 2026
@Tamilarasan-Paranthaman Tamilarasan-Paranthaman added platform/macos macOS / Mac Catalyst platform/windows platform/android platform/ios area-controls-shell Shell Navigation, Routes, Tabs, Flyout community ✨ Community Contribution labels May 12, 2026
@sheiksyedm
sheiksyedm marked this pull request as ready for review May 12, 2026 10:56
Copilot AI review requested due to automatic review settings May 12, 2026 10:56
@sheiksyedm

Copy link
Copy Markdown
Contributor

/azp run maui-pr-uitests , maui-pr-devicetests

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.ApplyQueryAttributes to 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 ApplyQueryAttributes call.

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.
Comment on lines +782 to +792
// 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

@MauiBot

MauiBot commented May 13, 2026

Copy link
Copy Markdown
Collaborator

🤖 AI Summary

👋 @BagavathiPerumal — new AI review results are available. Please review the latest session below.

📊 Review Session4ed9a4d · fix-35183-Made code changes to resolve the issue by adding an early return guard in ShellNavigationManager.ApplyQueryAttributes to prevent non-destination pages from processing stale or empty query parameters during navigation. · 2026-05-13 00:50 UTC
🚦 Gate — Test Before & After Fix

Gate Result: ✅ PASSED

Platform: ANDROID · Base: main · Merge base: f8cb875e

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:

  1. filteredQuery is empty (no prefix match).
  2. But MergeData re-inflates it by merging the previously stored QueryAttributesProperty (set during a prior navigation cycle).
  3. The non-empty merged result triggers ApplyQueryAttributes on 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 return skips both branches (baseShellItem is ShellContent and isLastItem else).
  • 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 QueryAttributesProperty for non-destination items on forward navigation (!isPopping branch). Skipping that branch means no clearing of stale state on the non-destination, but the stored state remains scoped to a ShellContent whose 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:

  1. Targets the exact failing condition (!isLastItem && filteredQuery.Count == 0).
  2. Returns before MergeData and before any side effects.
  3. Covers both back-navigation merge bug and forward-navigation empty-call bug in one early return.
  4. 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 ⚠️ Likely regresses 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:

  1. pr — 7-line guard at the exact failure point; minimal blast radius; expert reviewer rates LGTM; gate-verified.
  2. pr-plus-reviewer — same fix + improved test assertions (no stale-key leakage check + remove dead local). Strict improvement over pr.
  3. try-fix-3 — functionally equivalent but duplicates prefix-match logic.
  4. try-fix-4 — functionally equivalent but larger diff.
  5. try-fix-1 — narrower coverage (does not address forward-nav empty-call behavior change that pr incidentally fixes).
  6. 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 callsAfterCycle1Back is unchanged after cycle-1 main pop (uses the currently-dead local).
  • Strengthen assertion to verify no stale fromThird / fromSecond keys appear in any of mainPage.AppliedQueryAttributes.
  • (Optional) Mirror sibling tests' [Theory]-over-useDataTemplates parameterization.

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.


@kubaflo
kubaflo changed the base branch from main to inflight/current May 13, 2026 09:02
@kubaflo
kubaflo merged commit 514a566 into dotnet:inflight/current May 13, 2026
160 of 166 checks passed
@github-actions github-actions Bot added this to the .NET 10 SR7 milestone May 13, 2026
@kubaflo kubaflo added s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) and removed s/agent-review-incomplete labels May 20, 2026
PureWeen pushed a commit that referenced this pull request Jun 2, 2026
…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">
|

---------
PureWeen pushed a commit that referenced this pull request Jun 11, 2026
…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">
|

---------
devanathan-vaithiyanathan pushed a commit to devanathan-vaithiyanathan/maui that referenced this pull request Jun 18, 2026
…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">
|

---------
PureWeen pushed a commit that referenced this pull request Jun 22, 2026
…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">
|

---------
@github-actions github-actions Bot locked and limited conversation to collaborators Jun 24, 2026
@github-actions github-actions Bot modified the milestones: .NET 10 SR7, .NET 10 SR9 Jul 22, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-shell Shell Navigation, Routes, Tabs, Flyout community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/android platform/ios platform/macos macOS / Mac Catalyst platform/windows s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

8 participants