fix: an open popup follows a network switch the background saves (closes #650)
When the background saves a network switch after the user approves a site's request, an open popup now notices the stored record change and takes the new network from it, holding the lock, inside a save. It then leaves the page as a switch in Settings does: the stack is cut, every screen counts as not yet rendered, and the screen on top is drawn again. The cut and the redraw are now two functions in the Settings view that both paths call. A record already on the popup's network, such as its own Settings switch, changes nothing. The popup never switches the network itself. Model: opus-5-5
This commit is contained in:
@@ -1562,20 +1562,26 @@ such as an edit typed into Settings and not yet saved. Home is the one screen
|
||||
"Back" always re-renders, so the wallet list reflects anything that changed
|
||||
while the user was away from it.
|
||||
|
||||
A network switch in Settings leaves every screen beneath Settings showing the
|
||||
previous network, so after it "Back" behaves as in a reopened popup: every
|
||||
screen on the stack counts as not yet rendered, and the stack is cut at the
|
||||
first screen that cannot be rendered from saved state, such as Send or AddToken,
|
||||
or at AddressToken for any token but the native one, because that token was
|
||||
picked on the previous network. The cut stack is saved with the switch, so a
|
||||
popup closed straight after it and reopened onto Settings lands in the same
|
||||
place. "Back" then renders the screen it lands on for the new network, and
|
||||
anything typed there and not saved, which belonged to the previous network, is
|
||||
dropped. ConfirmTx, WaitTx, SuccessTx, ErrorTx and TransactionDetail are
|
||||
rendered instead for the network of the transaction they show: the network it
|
||||
was reviewed on for ConfirmTx, and the network it was sent on for the others.
|
||||
Without a wallet the stack is not cut, because it starts at Welcome, which shows
|
||||
nothing from a network.
|
||||
A network switch leaves every screen on the page showing the previous network.
|
||||
The user makes it in Settings, or approves a site's request and the background
|
||||
saves it; a popup open meanwhile takes that switch from the stored record, and
|
||||
never switches the network itself. After either, "Back" behaves as in a reopened
|
||||
popup: every screen on the stack counts as not yet rendered, and the stack is
|
||||
cut at the first screen that cannot be rendered from saved state, such as Send
|
||||
or AddToken, or at AddressToken for any token but the native one, because that
|
||||
token was picked on the previous network and is no longer selected. The cut
|
||||
stack is saved with the popup's new network, so a popup closed straight after
|
||||
and reopened lands in the same place. The screen on top is drawn again for the
|
||||
new network: Settings in place, and any other screen as a reopened popup draws
|
||||
it, so Home takes the place of one that cannot be rendered from saved state or
|
||||
of AddressToken for a token no longer selected. "Back" then renders the screen
|
||||
it lands on for the new network, and anything typed there and not saved, which
|
||||
belonged to the previous network, is dropped. ConfirmTx, WaitTx, SuccessTx,
|
||||
ErrorTx and TransactionDetail are rendered instead for the network of the
|
||||
transaction they show: the network it was reviewed on for ConfirmTx, and the
|
||||
network it was sent on for the others. Without a wallet the stack is not cut and
|
||||
only Settings is drawn again, because the stack starts at Welcome, and Welcome
|
||||
and AddWallet show nothing from a network.
|
||||
|
||||
Every screen that holds secret material in the page registers a cleanup with
|
||||
`onViewLeave()` (`src/popup/views/helpers.js`), which `showView()` runs on every
|
||||
|
||||
Reference in New Issue
Block a user