LibWeb: Forbid reentrancy of style-layout-repaint in EventLoop::process

Fixes crashing on https://playbiolab.com/ in
VERIFY(page.client().is_ready_to_paint()) caused by attempting to start
the next repaint before the ongoing repaint is done.
This commit is contained in:
Aliaksandr Kalenik 2024-09-29 17:25:26 +02:00 committed by Andreas Kling
parent 5faca4f027
commit f341af1d72
Notes: github-actions[bot] 2024-09-30 06:11:51 +00:00
2 changed files with 13 additions and 0 deletions

View file

@ -177,6 +177,17 @@ void EventLoop::process()
// 8. Microtasks: Perform a microtask checkpoint.
perform_a_microtask_checkpoint();
if (m_is_running_reflow_steps) {
// NOTE: If we entered style-layout-repaint steps, then we need to wait for them to finish before doing next iteration.
schedule();
return;
}
m_is_running_reflow_steps = true;
ScopeGuard const guard = [this] {
m_is_running_reflow_steps = false;
};
// 9. Let hasARenderingOpportunity be false.
[[maybe_unused]] bool has_a_rendering_opportunity = false;