On desktop, we run unload handlers pretty much all the time.
On mobile, we fire unload handlers during navigation, but during situations where the render-process can get OOM-killed by the OS, we skip running unload handlers. This behavior is arguably good for end users, because it lets the OS free up resources for the active tabs. But, it has predictability consequences: when exactly unload does and doesn't run is only rational when you understand the complexities of Chrome's implementation.
The of behavior of unload (and related events) is discussed at greater length here: https://www.igvita.com/2015/11/20/dont-lose-user-and-app-state-use-page-visibility/. Note how each vendor does something slightly different.
Maybe there are ways we could do better here...
Comment 1 by nduca@chromium.org
, Jun 12 2017