mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-25 04:32:32 +00:00 
			
		
		
		
	 8a5d2be617
			
		
	
	
		8a5d2be617
		
	
	
	
	
		
			
			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());
 | |
|     });
 | |
| }
 | |
| 
 | |
| }
 |