- Add `ForegroundExecutor::spawn_when_idle(timeout, future)`, which schedules `future` to be polled on the main thread when the main thread is idle, but tries to do so no later than `timeout` after the current instant (with the same `timeout` being applied to subsequent polls of the same future) - Add `Platform::dispatch_on_main_thread_when_idle(runnable, timeout)` as the basis for `spawn_when_idle`, with a default implementation that ignores the timeout and delegates to `dispatch_on_main_thread(runnable, Priority::Low)` - Implement `dispatch_on_main_thread_when_idle` for the web platform using [`requestIdleCallback`](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback) Release Notes: - N/A