The one being generated RIGHT NOW. Each chest will call the function with different context.
Everything previously generated. All of it. Every last item, its a list. That including any stacks created by previously run modifiers.
And for whatever loot table is being processed. You seem to have a bit of confusion over what loot modifiers do. Loot modifiers are the replacement system and are a 1:1 translation of what the HarvestDropsEvent did, and more, and does it better.
Break a block? apply() is called for all modifiers.
Kill an entity? apply() is called for all modifiers.
ALL loot table generation should call apply().
(Minor caveat, if your loot modifier does not need to be called, due to its loot conditions, then it is not actually called, but apply() is called, which checks those conditions, and if those conditions are true, then doApply()--the orrideable method you have control of--is called, but all loot modifiers are processed).
The only difference is what context those events have. Which is why you're given the context.