Fix for Issue33356NavigateShouldOccur failure#35521
Merged
PureWeen merged 2 commits intoMay 19, 2026
Merged
Conversation
Contributor
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 35521Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 35521" |
Contributor
|
/azp run maui-pr-uitests , maui-pr-devicetests |
|
Azure Pipelines successfully started running 2 pipeline(s). |
kubaflo
approved these changes
May 19, 2026
This was referenced May 19, 2026
6192ce3
into
dotnet:release/10.0.1xx-sr7
158 of 168 checks passed
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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