I don't have a strong opinion on what it should be but per-WC/tab is how I think of it. It occurred to me that Webium might break this but actually, surface-embed will be a WC so that's not the case.
For fenced frames, they are attached (transitively) to the primary main frame's BFCache, even though their inner frame tree has its own nav controller's BFCache. That BFCache sits unused which seems odd.
Rakina also mentioned some problems that arose because pages in BFCache lack a frame-tree. I'll let her fill in the details.
It's unclear to me when we would want a BFCacheable non-main frame and I also don't think the current CL looks too bad. Certainly not to the extent that I would want to relocate where BFCache sits in the object hierarchy. Then again, the current CL technically should find all of the BFCaches associated with this frame tree even though only one is used, and signal the visibility change to all of them. I think
WebContentsImpl::GetOutermostMainFramesForViewChange currently fails to look inside any of these inner BFCaches,
F