mirror of
https://github.com/RGBCube/serenity
synced 2025-05-15 01:44:58 +00:00
LibWeb/Fetch: Use JS::HeapFunction
for callback in FetchAlgorithms
In FetchAlgorithms, it is common for callbacks to capture realms. This can indirectly keep objects alive that hold FetchController with these callbacks. This creates a cyclic dependency. However, when JS::HeapFunction is used, this is not a problem, as captured by callbacks values do not create new roots.
This commit is contained in:
parent
469aea5a5b
commit
9a07ac0b6a
3 changed files with 54 additions and 41 deletions
|
@ -12,17 +12,27 @@ namespace Web::Fetch::Infrastructure {
|
|||
|
||||
JS::NonnullGCPtr<FetchAlgorithms> FetchAlgorithms::create(JS::VM& vm, Input input)
|
||||
{
|
||||
return vm.heap().allocate_without_realm<FetchAlgorithms>(move(input));
|
||||
return vm.heap().allocate_without_realm<FetchAlgorithms>(vm, move(input));
|
||||
}
|
||||
|
||||
FetchAlgorithms::FetchAlgorithms(Input input)
|
||||
: m_process_request_body_chunk_length(move(input.process_request_body_chunk_length))
|
||||
, m_process_request_end_of_body(move(input.process_request_end_of_body))
|
||||
, m_process_early_hints_response(move(input.process_early_hints_response))
|
||||
, m_process_response(move(input.process_response))
|
||||
, m_process_response_end_of_body(move(input.process_response_end_of_body))
|
||||
, m_process_response_consume_body(move(input.process_response_consume_body))
|
||||
FetchAlgorithms::FetchAlgorithms(JS::VM& vm, Input input)
|
||||
: m_process_request_body_chunk_length(JS::create_heap_function(vm.heap(), move(input.process_request_body_chunk_length)))
|
||||
, m_process_request_end_of_body(JS::create_heap_function(vm.heap(), move(input.process_request_end_of_body)))
|
||||
, m_process_early_hints_response(JS::create_heap_function(vm.heap(), move(input.process_early_hints_response)))
|
||||
, m_process_response(JS::create_heap_function(vm.heap(), move(input.process_response)))
|
||||
, m_process_response_end_of_body(JS::create_heap_function(vm.heap(), move(input.process_response_end_of_body)))
|
||||
, m_process_response_consume_body(JS::create_heap_function(vm.heap(), move(input.process_response_consume_body)))
|
||||
{
|
||||
}
|
||||
|
||||
void FetchAlgorithms::visit_edges(JS::Cell::Visitor& visitor)
|
||||
{
|
||||
visitor.visit(m_process_request_body_chunk_length);
|
||||
visitor.visit(m_process_request_end_of_body);
|
||||
visitor.visit(m_process_early_hints_response);
|
||||
visitor.visit(m_process_response);
|
||||
visitor.visit(m_process_response_end_of_body);
|
||||
visitor.visit(m_process_response_consume_body);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue