Parent
Sub-issue of #287 (multi-tab support implementation plan).
What to build
The headline feature of #283. Open site A, open site B from the tab grid, then switch back to A: A renders instantly with its prior DOM/scroll/JS state — no reload — and any BLE connection A held is still connected, with GATT notifications received while A was backgrounded reflected in its page state.
Under the hood: tabs become retained sessions governed by the LRU cache (cap 4, active pinned). All live web views remain attached to the view hierarchy (invisible and non-interactive when not active) so their content processes keep running; browser chrome (nav bar, sheets, alerts) mounts only for the active tab. The tab grid keeps sessions alive. Opening a tab beyond the cap tears down the least-recently-used background tab, which quietly reverts to reload-on-revisit. A freshly opened empty tab (no page load yet) occupies no cache slot and gets no grid cell, as today.
Acceptance criteria
Blocked by
Parent
Sub-issue of #287 (multi-tab support implementation plan).
What to build
The headline feature of #283. Open site A, open site B from the tab grid, then switch back to A: A renders instantly with its prior DOM/scroll/JS state — no reload — and any BLE connection A held is still connected, with GATT notifications received while A was backgrounded reflected in its page state.
Under the hood: tabs become retained sessions governed by the LRU cache (cap 4, active pinned). All live web views remain attached to the view hierarchy (invisible and non-interactive when not active) so their content processes keep running; browser chrome (nav bar, sheets, alerts) mounts only for the active tab. The tab grid keeps sessions alive. Opening a tab beyond the cap tears down the least-recently-used background tab, which quietly reverts to reload-on-revisit. A freshly opened empty tab (no page load yet) occupies no cache slot and gets no grid cell, as today.
Acceptance criteria
Blocked by