1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 07:55:07 +00:00

LibWebView: Don't re-create WebContent proceses when repeatedly crashing

Serenity handles this in the SystemServer already, but the simplest
place to put this logic is the ViewImplementation base class.

This is trivial to see when running Ladybird without SERENTIY_SOURCE_DIR
set, or set improperly.
This commit is contained in:
Andrew Kaster 2023-05-27 10:46:45 -06:00 committed by Andreas Kling
parent bdeccf8844
commit 5fd2fc70e5
2 changed files with 18 additions and 0 deletions

View file

@ -19,6 +19,12 @@ ViewImplementation::ViewImplementation()
m_backing_store_shrink_timer = Core::Timer::create_single_shot(3000, [this] {
resize_backing_stores_if_needed(WindowResizeInProgress::No);
}).release_value_but_fixme_should_propagate_errors();
m_repeated_crash_timer = Core::Timer::create_single_shot(1000, [this] {
// Reset the "crashing a lot" counter after 1 second in case we just
// happen to be visiting crashy websites a lot.
this->m_crash_count = 0;
}).release_value_but_fixme_should_propagate_errors();
}
WebContentClient& ViewImplementation::client()
@ -304,6 +310,15 @@ void ViewImplementation::handle_web_content_process_crash()
{
dbgln("WebContent process crashed!");
++m_crash_count;
constexpr size_t max_reasonable_crash_count = 5U;
if (m_crash_count >= max_reasonable_crash_count) {
dbgln("WebContent has crashed {} times in quick succession! Not restarting...", m_crash_count);
m_repeated_crash_timer->stop();
return;
}
m_repeated_crash_timer->restart();
create_client();
VERIFY(m_client_state.client);