ladybird/Userland/Libraries/LibWeb/HTML/Scripting/Fetching.h
Timothy Flynn 567b8da1e0 LibWeb: Change the script fetch completion callback to accept any script
The completion callback currently only accepts a JavaScriptModuleScript.
The same callback will need to be used for ClassicScript scripts as well
so allow the callback to accept any Script type. The single existing
outside caller already stores the result as a Script.
2023-05-12 05:47:36 +02:00

61 lines
3.1 KiB
C++

/*
* Copyright (c) 2022, networkException <networkexception@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/HTML/Scripting/ImportMap.h>
#include <LibWeb/HTML/Scripting/ModuleMap.h>
#include <LibWeb/HTML/Scripting/ModuleScript.h>
namespace Web::HTML {
using OnFetchScriptComplete = JS::SafeFunction<void(JS::GCPtr<Script>)>;
class DescendantFetchingContext : public RefCounted<DescendantFetchingContext> {
public:
static NonnullRefPtr<DescendantFetchingContext> create() { return adopt_ref(*new DescendantFetchingContext); }
~DescendantFetchingContext() = default;
size_t pending_count() const { return m_pending_count; };
void set_pending_count(size_t count) { m_pending_count = count; }
void decrement_pending_count() { --m_pending_count; }
bool failed() const { return m_failed; }
void set_failed(bool failed) { m_failed = failed; }
void on_complete(JavaScriptModuleScript* module_script) { m_on_complete(module_script); };
void set_on_complete(OnFetchScriptComplete on_complete) { m_on_complete = move(on_complete); }
private:
DescendantFetchingContext() = default;
size_t m_pending_count { 0 };
bool m_failed { false };
OnFetchScriptComplete m_on_complete;
};
DeprecatedString module_type_from_module_request(JS::ModuleRequest const&);
WebIDL::ExceptionOr<AK::URL> resolve_module_specifier(Optional<Script&> referring_script, DeprecatedString const& specifier);
WebIDL::ExceptionOr<Optional<AK::URL>> resolve_imports_match(DeprecatedString const& normalized_specifier, Optional<AK::URL> as_url, ModuleSpecifierMap const&);
Optional<AK::URL> resolve_url_like_module_specifier(DeprecatedString const& specifier, AK::URL const& base_url);
void fetch_internal_module_script_graph(JS::ModuleRequest const& module_request, EnvironmentSettingsObject& fetch_client_settings_object, StringView destination, Script& referring_script, HashTable<ModuleLocationTuple> const& visited_set, OnFetchScriptComplete on_complete);
void fetch_external_module_script_graph(AK::URL const&, EnvironmentSettingsObject& settings_object, OnFetchScriptComplete on_complete);
void fetch_inline_module_script_graph(DeprecatedString const& filename, DeprecatedString const& source_text, AK::URL const& base_url, EnvironmentSettingsObject& settings_object, OnFetchScriptComplete on_complete);
void fetch_descendants_of_a_module_script(JavaScriptModuleScript& module_script, EnvironmentSettingsObject& fetch_client_settings_object, StringView destination, HashTable<ModuleLocationTuple> visited_set, OnFetchScriptComplete callback);
void fetch_descendants_of_and_link_a_module_script(JavaScriptModuleScript& module_script, EnvironmentSettingsObject& fetch_client_settings_object, StringView destination, HashTable<ModuleLocationTuple> const& visited_set, OnFetchScriptComplete on_complete);
enum class TopLevelModule {
Yes,
No
};
void fetch_single_module_script(AK::URL const&, EnvironmentSettingsObject& fetch_client_settings_object, StringView destination, EnvironmentSettingsObject& module_map_settings_object, AK::URL const& referrer, Optional<JS::ModuleRequest> const&, TopLevelModule, OnFetchScriptComplete callback);
}