Skip to content

Fix for Issue33356NavigateShouldOccur failure#35521

Merged
PureWeen merged 2 commits into
dotnet:release/10.0.1xx-sr7from
Dhivya-SF4094:fix-Issue33356NavigateShouldOccur-failure
May 19, 2026
Merged

Fix for Issue33356NavigateShouldOccur failure#35521
PureWeen merged 2 commits into
dotnet:release/10.0.1xx-sr7from
Dhivya-SF4094:fix-Issue33356NavigateShouldOccur-failure

Conversation

@Dhivya-SF4094

@Dhivya-SF4094 Dhivya-SF4094 commented May 19, 2026

Copy link
Copy Markdown
Contributor

Issue details:

Failed case: Issue33356NavigateShouldOccur

Root Cause

On iOS 26+, _sendPopPending was introduced to prevent duplicate back navigation caused by changed UINavigationBardelegate behavior. However, in two early-return paths (BackButtonBehavior.IsEnabled == false and Shell.SendBackButtonPressed() == true), the flag was set to true but never reset, causing subsequent back navigations to be ignored.

Fix Description

Reset _sendPopPending to false before returning from the affected early-return paths in SendPop(). This ensures the navigation guard is always released when GoToAsync("..") is not dispatched.

Note: The changes in this PR have already been merged into the inflight/Candidate branch.

PR link: #34890

@github-actions

github-actions Bot commented May 19, 2026

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 -- 35521

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35521"

@dotnet-policy-service dotnet-policy-service Bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label May 19, 2026
@github-actions github-actions Bot added the area-controls-shell Shell Navigation, Routes, Tabs, Flyout label May 19, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review May 19, 2026 14:38
@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).

@kubaflo kubaflo enabled auto-merge (squash) May 19, 2026 15:53
@PureWeen PureWeen disabled auto-merge May 19, 2026 19:26
@PureWeen PureWeen merged commit 6192ce3 into dotnet:release/10.0.1xx-sr7 May 19, 2026
158 of 168 checks passed
@github-actions github-actions Bot added this to the .NET 10 SR7 milestone May 19, 2026
PureWeen added a commit that referenced this pull request May 21, 2026
…ShownOnBackButton on iOS 26 (#35566)

<!-- 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!

### Issue

UI test `BackButtonBehavior_IconOverride_CustomIconShownOnBackButton`
fails on iOS 26 (vlatest) on the `release/10.0.1xx-sr7` branch.

- Build:
[1427432](https://dev.azure.com/dnceng-public/public/_build/results?buildId=1427432)
(`maui-pr-uitests` on SR7 head `bdca474345`)
- Failed twice (both attempts) — deterministic, not flaky
- Failure: `System.TimeoutException : Timed out waiting for element...`
at `ShellNavigationFeatureTests.cs:line 922`
- Other platforms (Android API 30, iOS 18.5, MacCatalyst) all pass

### Root cause

PR #35521 backported the `_sendPopPending` product fix from #34890 to
SR7 and **removed** the `Assert.Ignore` from tests 50 and 51 (since the
product is now fixed and those tests should pass on iOS 26).

It left in place an obsolete iOS 26 workaround in test 52:

```csharp
[Test, Order(52)]
public void BackButtonBehavior_IconOverride_CustomIconShownOnBackButton()
{
    if (iOS26OrHigher)
    {
        NavigateToDetail1AndWait();   // ← obsolete after #35521
    }
    App.WaitForElement("Detail1GoBackButton");
    ...
```

That workaround was originally needed when test 51 was being skipped on
iOS 26 (so test 52 started from Main and had to navigate to Detail1
itself).

Now that #35521 un-ignored test 51, the flow on iOS 26 is:
1. Test 51 runs, calls `NavigateToDetail1AndWait()` and ends with
`ShellScreenshot()` — UI is on **Detail1**, no reset
2. Test 52 starts on Detail1, hits `if (iOS26OrHigher)` and tries to
navigate **Main → Detail1**
3. But we're already on Detail1, so `NavigateToDetail1Button` isn't
visible → `TimeoutException`

This is purely a test state-leak bug — not a product regression.

### Fix

Remove the now-redundant `iOS26OrHigher` block from test 52. After the
removal, test 52 starts by tapping `Detail1GoBackButton` directly, which
is correct because:
- Test 51 leaves the UI on Detail1
- `Detail1GoBackButton` is a custom page-content button (created via
`ShellNavHelper.CreateNavButton(..., "Detail1GoBackButton")` in
`ShellNavigationControlPage.xaml.cs`), **not** the shell back arrow — it
is unaffected by test 51's `IsVisibleButton` toggle (which sets
`BackButtonBehavior.IsVisible=false` on the shell back arrow)

### Diff

```diff
 [Test, Order(52)]
 public void BackButtonBehavior_IconOverride_CustomIconShownOnBackButton()
 {
-    if (iOS26OrHigher)
-    {
-        NavigateToDetail1AndWait();
-    }
     App.WaitForElement("Detail1GoBackButton");
     App.Tap("Detail1GoBackButton");
     ...
```

### Follow-up (main)

`main` and `net11.0` have the **opposite** asymmetry: the product fix
(`_sendPopPending` reset) is already there, but tests 50 and 51 still
carry the `Assert.Ignore` (so iOS 26 coverage for those scenarios is
silently skipped). When those `Assert.Ignore` lines get removed, the
same workaround should also be removed from test 52 — otherwise main
will hit the same failure this PR fixes here.

### Validation

- Tested locally: only the obsolete branch is removed; remaining test
body matches the iOS 18.5 / Android / MacCatalyst flow that already
passes
- The 4 deleted lines were dead code on every other platform anyway
(`iOS26OrHigher` is false there)
- No product code touched

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Jun 11, 2026
…xx-sr8 (#35810)

<!-- 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!

## Cut-then-merge step 2 of 2

SR8 was cut from `main` at
[`e02d6b6dc2`](e02d6b6)
(commit "Add gh-aw rerun review scanner (#35685)"). This PR pulls the
SR7 stabilization work into SR8 so SR8 contains everything that's in
SR7.

- **Base:** `release/10.0.1xx-sr8` @
[`e02d6b6dc2`](e02d6b6)
- **Merging in:** `release/10.0.1xx-sr7` @
[`9da598b4a1`](9da598b)
(PatchVersion bump to 71)
- **Merge base:**
[`f8cb875e`](f8cb875eee)
("[Testing] The Windows WebView category is removed from CI…" #35335)
- **Strategy:** non-fast-forward merge commit (preserves both branches'
history)

## Conflict resolution

Two trivial conflicts, both resolved by taking the SR8 (`HEAD`) side:

| File | Why it conflicted | Resolution |
| --- | --- | --- |
|
[`eng/Versions.props`](https://github.com/dotnet/maui/blob/release/10.0.1xx-sr8/eng/Versions.props)
| SR7 bumped `PatchVersion` 70→71 (#35786); SR8 starts at 80 | Keep
`PatchVersion=80` (SR8 is the higher patch band) |
|
`src/Controls/src/Core/Compatibility/Handlers/Shell/iOS/ShellSectionRenderer.cs`
| Whitespace-only difference (`false; //` vs `false; //`) in two
comments | Keep SR8's whitespace |

No semantic conflicts.

## Inherited from SR7

26 SR7-only commits land in SR8 via this merge. The source PRs are:

<details>
<summary>Source PRs (43, deduped by commit)</summary>

#35020, #35072, #35092, #35150, #35223, #35299, #35305, #35347, #35356,
#35359, #35360, #35421, #35423, #35424, #35425, #35426, #35427, #35428,
#35430, #35434, #35441, #35447, #35461, #35480, #35503, #35520, #35521,
#35559, #35566, #35585, #35625, #35642, #35664, #35689, #35690, #35691,
#35692, #35693, #35694, #35703, #35744, #35768, #35786

Includes the SR7 revert chain:
- #35689 — Revert PR #30068 (FontImageSource centering on Windows)
- #35694 — Revert TalkBack RadioButton fix
- #35703 — Revert Shell.NavBarIsVisible fix
- #35744 — Revert HybridWebView WebView fix
- #35461, #35503 — additional Android reverts
</details>

After this lands, the release-readiness tracker can survey
`release/10.0.1xx-sr8` directly instead of using `-Candidate
-InheritFromPriorSr` mode against SR7.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-shell Shell Navigation, Routes, Tabs, Flyout partner/syncfusion Issues / PR's with Syncfusion collaboration platform/ios

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants