Yep, HRG nailed it; He understood EXACTLY what I was saying.
The only reason that 1MB of data might seem sufficient from a Chromium dev's perspective is that they're only really imagining toy apps, rather than "big boy apps" that are used by real customers to do "big boy things". If you design these constrained API with a very specific limited use-case in mind, then you really hamper the ability of devs to be imaginative and make anything other than what whatever toy example you thought up.
What makes this even worse is that we as professional extension developers are usually responsible for integrating into an existing product; We rarely have the opportunity to create a self-contained greenfield app that operates entirely within Google Chrome
(extensions in-and-of themselves tend to be extremely difficult to monetize). This means that we can't build our product entirely around Google's arbitrary paranoid constraints like this, and it makes our lives extremely painful. But hey, at least the fact that developing extensions totally sucks is a form of job security, right...? 🤔
As I see it: If this in-memory API isn't going to be a general-use API, then don't give it a general name.
If you absolutely meant for it only to be useful for storing encryption keys, then call it something like chrome.storage.encryptionKeys rather than something misleadingly general like chrome.storage.session. Of course, if this name feels ridiculous, then that feeling should help highlight just how absurd it is to defend its minuscule size on the basis that it "was only meant for encryption keys".
As it stands with a shrunken schema using chrome.storage.session, I would have to tell users that our solution can't reliably store more than ~3000 logins, and that if they want more than that, they'll have to take it up with Google. 🤷♂️
That arbitrary limit seems unacceptable to me. I've thought of a handful of workarounds, but each of them is convoluted, nonperformant, and/or insecure.
Finally: If you don't see from telemetry that people are regularly approaching 1MB, don't assume that it's because there are few use-cases that need >1MB. Instead, it's just more likely that we as developers simply cannot rely upon something so tiny to store user data. There's a survivor bias sampling there, as only the people who need a handful of KB of fixed quantities of data (or those hobbyists unaware of the limit) would feel comfortable using that at all. EVERY professional developer I've told about MV3's constraints expects that Google would provide some form of unbounded memory storage that persists across service worker restarts; Without exception, they're always surprised when I reveal all of the janky workarounds I have to apply in order to try to compensate, and they're happy they're not the ones who have to do my job.