mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 02:37:36 +00:00
LibWeb+WebContent: Add abstraction layer for event loop and timers
Instead of using Core::EventLoop and Core::Timer directly, LibWeb now goes through a Web::Platform abstraction layer instead. This will allow us to plug in Qt's event loop (and QTimer) over in Ladybird, to avoid having to deal with multiple event loops.
This commit is contained in:
parent
7e5a8bd4b0
commit
9567e211e7
28 changed files with 365 additions and 42 deletions
|
@ -5,18 +5,18 @@
|
|||
*/
|
||||
|
||||
#include <AK/Debug.h>
|
||||
#include <LibCore/Timer.h>
|
||||
#include <LibGfx/Bitmap.h>
|
||||
#include <LibWeb/DOM/Document.h>
|
||||
#include <LibWeb/DOM/Element.h>
|
||||
#include <LibWeb/Loader/ImageLoader.h>
|
||||
#include <LibWeb/Loader/ResourceLoader.h>
|
||||
#include <LibWeb/Platform/Timer.h>
|
||||
|
||||
namespace Web {
|
||||
|
||||
ImageLoader::ImageLoader(DOM::Element& owner_element)
|
||||
: m_owner_element(owner_element)
|
||||
, m_timer(Core::Timer::construct())
|
||||
, m_timer(Platform::Timer::create())
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Function.h>
|
||||
#include <LibCore/Timer.h>
|
||||
#include <LibWeb/Loader/ImageResource.h>
|
||||
#include <LibWeb/Platform/Timer.h>
|
||||
|
||||
namespace Web {
|
||||
|
||||
|
@ -60,7 +60,7 @@ private:
|
|||
size_t m_current_frame_index { 0 };
|
||||
size_t m_loops_completed { 0 };
|
||||
LoadingState m_loading_state { LoadingState::Loading };
|
||||
NonnullRefPtr<Core::Timer> m_timer;
|
||||
NonnullRefPtr<Platform::Timer> m_timer;
|
||||
size_t m_redirects_count { 0 };
|
||||
};
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
|
||||
#include <AK/Debug.h>
|
||||
#include <AK/Function.h>
|
||||
#include <LibCore/EventLoop.h>
|
||||
#include <LibCore/MimeData.h>
|
||||
#include <LibTextCodec/Decoder.h>
|
||||
#include <LibWeb/HTML/HTMLImageElement.h>
|
||||
#include <LibWeb/Loader/Resource.h>
|
||||
#include <LibWeb/Loader/ResourceLoader.h>
|
||||
#include <LibWeb/Platform/EventLoopPlugin.h>
|
||||
|
||||
namespace Web {
|
||||
|
||||
|
@ -168,7 +168,7 @@ void ResourceClient::set_resource(Resource* resource)
|
|||
// This ensures that these callbacks always happen in a consistent way, instead of being invoked
|
||||
// synchronously in some cases, and asynchronously in others.
|
||||
if (resource->is_loaded() || resource->is_failed()) {
|
||||
Core::deferred_invoke([this, strong_resource = NonnullRefPtr { *m_resource }] {
|
||||
Platform::EventLoopPlugin::the().deferred_invoke([this, strong_resource = NonnullRefPtr { *m_resource }] {
|
||||
if (m_resource != strong_resource.ptr())
|
||||
return;
|
||||
|
||||
|
|
|
@ -9,14 +9,14 @@
|
|||
#include <AK/Debug.h>
|
||||
#include <AK/JsonObject.h>
|
||||
#include <LibCore/ElapsedTimer.h>
|
||||
#include <LibCore/EventLoop.h>
|
||||
#include <LibCore/File.h>
|
||||
#include <LibCore/Timer.h>
|
||||
#include <LibWeb/Loader/ContentFilter.h>
|
||||
#include <LibWeb/Loader/LoadRequest.h>
|
||||
#include <LibWeb/Loader/ProxyMappings.h>
|
||||
#include <LibWeb/Loader/Resource.h>
|
||||
#include <LibWeb/Loader/ResourceLoader.h>
|
||||
#include <LibWeb/Platform/EventLoopPlugin.h>
|
||||
#include <LibWeb/Platform/Timer.h>
|
||||
|
||||
#ifdef __serenity__
|
||||
# include <serenity.h>
|
||||
|
@ -179,7 +179,7 @@ void ResourceLoader::load(LoadRequest& request, Function<void(ReadonlyBytes, Has
|
|||
HashMap<String, String, CaseInsensitiveStringTraits> response_headers;
|
||||
response_headers.set("Content-Type", "text/html; charset=UTF-8");
|
||||
|
||||
deferred_invoke([success_callback = move(success_callback), response_headers = move(response_headers)] {
|
||||
Platform::EventLoopPlugin::the().deferred_invoke([success_callback = move(success_callback), response_headers = move(response_headers)] {
|
||||
success_callback(String::empty().to_byte_buffer(), response_headers, {});
|
||||
});
|
||||
return;
|
||||
|
@ -206,7 +206,7 @@ void ResourceLoader::load(LoadRequest& request, Function<void(ReadonlyBytes, Has
|
|||
}
|
||||
|
||||
log_success(request);
|
||||
deferred_invoke([data = move(data), success_callback = move(success_callback)] {
|
||||
Platform::EventLoopPlugin::the().deferred_invoke([data = move(data), success_callback = move(success_callback)] {
|
||||
success_callback(data, {}, {});
|
||||
});
|
||||
return;
|
||||
|
@ -284,7 +284,7 @@ void ResourceLoader::load(LoadRequest& request, Function<void(ReadonlyBytes, Has
|
|||
}
|
||||
|
||||
if (timeout.has_value() && timeout.value() > 0) {
|
||||
auto timer = Core::Timer::create_single_shot(timeout.value(), nullptr);
|
||||
auto timer = Platform::Timer::create_single_shot(timeout.value(), nullptr);
|
||||
timer->on_timeout = [timer, protocol_request, timeout_callback = move(timeout_callback)]() mutable {
|
||||
protocol_request->stop();
|
||||
if (timeout_callback)
|
||||
|
@ -312,7 +312,7 @@ void ResourceLoader::load(LoadRequest& request, Function<void(ReadonlyBytes, Has
|
|||
}
|
||||
log_success(request);
|
||||
success_callback(payload, response_headers, status_code);
|
||||
deferred_invoke([this, &protocol_request] {
|
||||
Platform::EventLoopPlugin::the().deferred_invoke([this, &protocol_request] {
|
||||
m_active_requests.remove(protocol_request);
|
||||
});
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue