Not logged in · Please run /login

[2026-05-21] vault sync
This commit is contained in:
Alexey Martemyanov
2026-05-21 16:01:35 +06:00
parent 2e46ed4755
commit a9b7cf25d6
@@ -21,6 +21,20 @@
## Open Items
### D1 — Subscription upsell dismissed: Dax background gone + UTI address bar not activated *(2026-05-21)*
**Status:** ✅ Fixed *(2026-05-21)*
**Repro:** UTI + experiment flags enabled → complete fire step → NTP shows "You've got this" completion dialog → subscription promo appears → dismiss promo → NTP is blank (no Dax background) and UTI address bar stays collapsed and inactive.
**Root cause:** `showDuckAIOnboardingCompletionWithActiveAddressBar` calls `chromeDelegate?.omniBar.beginEditing(animated: true)` before showing the completion dialog. In non-UTI mode this creates an `OmniBarEditingStateViewController` (the modal editing state). In UTI mode there is no editing state VC; instead, `omniBar.beginEditing()` may present a conflicting modal OR trigger the UTI to enter `.aiTab(.expanded)` state, causing `coordinator.isOmnibarSession` to return `false` on the next run loop. `showDuckAIOnboardingCompletionDialog` then falls through to the `OmniBarEditingStateViewController` guard, fails, leaves `view.alpha = 0`, and shows no dialog. Additionally, after the subscription promo is dismissed, `launchNewSearch()` calls `omniBar.beginEditing()` which does not expand the UTI pill.
**Fix:** In `showDuckAIOnboardingCompletionWithActiveAddressBar`, detect UTI omnibar mode and call `coordinator.activateInput()` instead of `omniBar.beginEditing()`. Same check in `launchNewSearch()`.
**Files:** `NewTabPageViewController.swift`
### D2 — Trackers-blocked "Got it": dialog not dismissed on original tab + tab switcher broken *(2026-05-21)*
**Status:** ✅ Fixed (same root cause as D1) *(2026-05-21)*
**Repro:** UTI + experiment flags enabled + bottom bar position selected → visit a site (trackers detected) → trackers-blocked dialog appears → tap "Got it" → new NTP tab is opened, but the dialog in the original website tab is not dismissed, and the tab switcher button on the new NTP is non-functional.
**Root cause (hypothesis):** `showDuckAIOnboardingCompletionWithActiveAddressBar` calls `omniBar.beginEditing()` which in UTI mode may present an `OmniBarEditingStateViewController` on top of the view hierarchy. This modal presentation covers the UTI content container and intercepts touches, making the tab switcher (rendered below the modal) unreachable. The "dialog not dismissed" on the original tab is likely a follow-on: when `newTab()` calls `currentTab?.dismiss()` immediately after `dismissContextualOnboardingIfNeeded()` starts its 0.3 s fade-out animation, the tab VC is removed from the view hierarchy before the animation completes. If the user switches back within that 300 ms window they may briefly see the dialog still present; or the animation callback on the off-screen view leaves `daxContextualOnboardingController` pointing to a stale reference.
**Relation to D1:** Both D1 and D2 are symptoms of the same root cause — `omniBar.beginEditing()` in UTI mode. Fixing D1 should also resolve D2.
**Files:** `NewTabPageViewController.swift`
---
### C1 — Intro onboarding background lingers during UTI duck.ai transition *(2026-05-21)*