@@ -345,151 +345,7 @@ void ResourceLoader::handle_resource_load_request(LoadRequest const& request, Re
345345 on_resource (load_result);
346346}
347347
348- void ResourceLoader::load (LoadRequest& request, GC::Root<SuccessCallback> success_callback, GC::Root<ErrorCallback> error_callback, Optional<u32 > timeout, GC::Root<TimeoutCallback> timeout_callback)
349- {
350- auto const & url = request.url ().value ();
351-
352- log_request_start (request);
353- request.start_timer ();
354-
355- if (should_block_request (request)) {
356- error_callback->function ()(" Request was blocked" , {}, {}, {}, {}, {});
357- return ;
358- }
359-
360- if (url.scheme () == " about" ) {
361- handle_about_load_request (request, [success_callback, request](ReadonlyBytes data, Requests::RequestTimingInfo const & timing_info, HTTP::HeaderMap const & response_headers) {
362- log_success (request);
363- success_callback->function ()(data, timing_info, response_headers, {}, {});
364- });
365- return ;
366- }
367-
368- if (url.scheme () == " data" ) {
369- auto data_url_or_error = Fetch::Infrastructure::process_data_url (url);
370- if (data_url_or_error.is_error ()) {
371- auto error_message = data_url_or_error.error ().string_literal ();
372- log_failure (request, error_message);
373- error_callback->function ()(error_message, {}, {}, {}, {}, {});
374- return ;
375- }
376- auto data_url = data_url_or_error.release_value ();
377-
378- dbgln_if (SPAM_DEBUG, " ResourceLoader loading a data URL with mime-type: '{}', payload='{}'" ,
379- data_url.mime_type .serialized (),
380- StringView (data_url.body .bytes ()));
381-
382- HTTP::HeaderMap response_headers;
383- response_headers.set (" Content-Type" , data_url.mime_type .serialized ().to_byte_string ());
384-
385- log_success (request);
386-
387- Platform::EventLoopPlugin::the ().deferred_invoke (GC::create_function (m_heap, [data = move (data_url.body ), response_headers = move (response_headers), success_callback] {
388- // FIXME: Implement timing info for data requests.
389- Requests::RequestTimingInfo fixme_implement_timing_info {};
390-
391- success_callback->function ()(data, fixme_implement_timing_info, response_headers, {}, {});
392- }));
393- return ;
394- }
395-
396- if (url.scheme () == " resource" ) {
397- handle_resource_load_request (
398- request,
399- [success_callback, request](FileLoadResult const & load_result) {
400- log_success (request);
401- success_callback->function ()(load_result.data , load_result.timing_info , load_result.response_headers , {}, {});
402- },
403- [error_callback, request](ByteString const & error_message) {
404- log_failure (request, error_message);
405- if (error_callback)
406- error_callback->function ()(error_message, {}, {}, {}, {}, {});
407- });
408- return ;
409- }
410-
411- if (url.scheme () == " file" ) {
412- handle_file_load_request (
413- request,
414- [success_callback, request](FileLoadResult const & load_result) {
415- log_success (request);
416- success_callback->function ()(load_result.data , load_result.timing_info , load_result.response_headers , {}, {});
417- },
418- [error_callback, request](ByteString const & error_message) {
419- log_failure (request, error_message);
420- if (error_callback)
421- error_callback->function ()(error_message, {}, {}, {}, {}, {});
422- });
423-
424- return ;
425- }
426-
427- if (url.scheme () == " http" || url.scheme () == " https" ) {
428- auto protocol_request = start_network_request (request);
429- if (!protocol_request) {
430- if (error_callback)
431- error_callback->function ()(" Failed to start network request" sv, {}, {}, {}, {}, {});
432- return ;
433- }
434-
435- if (timeout.has_value () && timeout.value () > 0 ) {
436- auto timer = Platform::Timer::create_single_shot (m_heap, timeout.value (), nullptr );
437- timer->on_timeout = GC::create_function (m_heap, [timer = GC::make_root (timer), protocol_request, timeout_callback] {
438- (void )timer;
439- protocol_request->stop ();
440- if (timeout_callback)
441- timeout_callback->function ()();
442- });
443- timer->start ();
444- }
445-
446- auto on_buffered_request_finished = [this , success_callback, error_callback, request, &protocol_request = *protocol_request](auto , auto const & timing_info, auto const & network_error, auto & response_headers, auto status_code, auto const & reason_phrase, ReadonlyBytes payload) mutable {
447- handle_network_response_headers (request, response_headers);
448-
449- // NOTE: We finish the network request *after* invoking callbacks, otherwise a nested
450- // event loop inside a callback may cause this function object to be destroyed
451- // while we're still calling it.
452- ScopeGuard cleanup = [&] {
453- deferred_invoke ([this , protocol_request = NonnullRefPtr (protocol_request)] {
454- finish_network_request (move (protocol_request));
455- });
456- };
457- if (network_error.has_value () || (status_code.has_value () && *status_code >= 400 && *status_code <= 599 && (payload.is_empty () || !request.is_main_resource ()))) {
458- StringBuilder error_builder;
459- if (network_error.has_value ())
460- error_builder.appendff (" {}" , Requests::network_error_to_string (*network_error));
461- else
462- error_builder.append (" Load failed" sv);
463-
464- if (status_code.has_value ()) {
465- if (*status_code >= 100 && *status_code <= 599 )
466- error_builder.appendff (" (status: {} {})" , *status_code, HTTP::HttpResponse::reason_phrase_for_code (*status_code));
467- else
468- error_builder.appendff (" (status: {})" , *status_code);
469- }
470-
471- log_failure (request, error_builder.string_view ());
472- if (error_callback)
473- error_callback->function ()(error_builder.to_byte_string (), timing_info, status_code, reason_phrase, payload, response_headers);
474- return ;
475- }
476-
477- log_success (request);
478- success_callback->function ()(payload, timing_info, response_headers, status_code, reason_phrase);
479- };
480-
481- protocol_request->set_buffered_request_finished_callback (move (on_buffered_request_finished));
482- return ;
483- }
484-
485- auto not_implemented_error = ByteString::formatted (" Protocol not implemented: {}" , url.scheme ());
486- log_failure (request, not_implemented_error);
487- if (error_callback) {
488- error_callback->function ()(not_implemented_error, {}, {}, {}, {}, {});
489- }
490- }
491-
492- void ResourceLoader::load_unbuffered (LoadRequest& request, GC::Root<OnHeadersReceived> on_headers_received, GC::Root<OnDataReceived> on_data_received, GC::Root<OnComplete> on_complete)
348+ void ResourceLoader::load (LoadRequest& request, GC::Root<OnHeadersReceived> on_headers_received, GC::Root<OnDataReceived> on_data_received, GC::Root<OnComplete> on_complete)
493349{
494350 auto const & url = request.url ().value ();
495351
0 commit comments