onContentEnded
Content reached its end — the provider plays postrolls (if any) and then calls callbacks.onAllAdsCompleted().
Contract: after this call the provider MUST eventually invoke callbacks.onAllAdsCompleted() — playback completion is deferred on it. The SDK only waits when the provider's last onAdCuePointsChanged reported hasPostroll = true (no postroll → content completes immediately), and the wait is guarded by a watchdog that forces completion and logs the contract violation. Custom providers should still honor the contract rather than rely on the watchdog.