mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-13 22:52:52 +00:00
These lambdas were marked mutable as they captured a Ptr wrapper class by value, which then only returned const-qualified references to the value they point from the previous const pointer operators. Nothing is actually mutating in the lambdas state here, and now that the Ptr operators don't add extra const qualifiers these can be removed.
65 lines
1.9 KiB
C++
65 lines
1.9 KiB
C++
/*
|
|
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <LibJS/Heap/Heap.h>
|
|
#include <LibJS/Runtime/VM.h>
|
|
#include <LibWeb/Fetch/Fetching/PendingResponse.h>
|
|
#include <LibWeb/Fetch/Infrastructure/HTTP/Requests.h>
|
|
#include <LibWeb/Platform/EventLoopPlugin.h>
|
|
|
|
namespace Web::Fetch::Fetching {
|
|
|
|
JS::NonnullGCPtr<PendingResponse> PendingResponse::create(JS::VM& vm, JS::NonnullGCPtr<Infrastructure::Request> request)
|
|
{
|
|
return { *vm.heap().allocate_without_realm<PendingResponse>(request) };
|
|
}
|
|
|
|
JS::NonnullGCPtr<PendingResponse> PendingResponse::create(JS::VM& vm, JS::NonnullGCPtr<Infrastructure::Request> request, JS::NonnullGCPtr<Infrastructure::Response> response)
|
|
{
|
|
return { *vm.heap().allocate_without_realm<PendingResponse>(request, response) };
|
|
}
|
|
|
|
PendingResponse::PendingResponse(JS::NonnullGCPtr<Infrastructure::Request> request, JS::GCPtr<Infrastructure::Response> response)
|
|
: m_request(request)
|
|
, m_response(response)
|
|
{
|
|
m_request->add_pending_response({}, *this);
|
|
}
|
|
|
|
void PendingResponse::visit_edges(JS::Cell::Visitor& visitor)
|
|
{
|
|
Base::visit_edges(visitor);
|
|
visitor.visit(m_request);
|
|
visitor.visit(m_response);
|
|
}
|
|
|
|
void PendingResponse::when_loaded(Callback callback)
|
|
{
|
|
VERIFY(!m_callback);
|
|
m_callback = move(callback);
|
|
if (m_response)
|
|
run_callback();
|
|
}
|
|
|
|
void PendingResponse::resolve(JS::NonnullGCPtr<Infrastructure::Response> response)
|
|
{
|
|
VERIFY(!m_response);
|
|
m_response = response;
|
|
if (m_callback)
|
|
run_callback();
|
|
}
|
|
|
|
void PendingResponse::run_callback() const
|
|
{
|
|
VERIFY(m_callback);
|
|
VERIFY(m_response);
|
|
Platform::EventLoopPlugin::the().deferred_invoke([strong_this = JS::make_handle(const_cast<PendingResponse&>(*this))] {
|
|
strong_this->m_callback(*strong_this->m_response);
|
|
strong_this->m_request->remove_pending_response({}, *strong_this.ptr());
|
|
});
|
|
}
|
|
|
|
}
|