mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-01 00:38:48 +00:00
LibWeb: Initialize static web strings during main-thread VM creation
These are currently initialized in a [[gnu::constructor]], which has a weird initialization order. These constructors are invoked before main() and, incidentally, before any user-defined default constructors of the static strings they are initializing. This will become an issue when these strings are ported to FlyString, which has a user-defined default constructor. In that scenario, when the FlyString constructor is executed after the [[gnu::constructor]], the strings will be "reset" to the empty string. Instead of relying on a non-standard compiler extension here, let's just initialize these strings explicitly during main-thread VM creation, as this now happens in WebContent's main().
This commit is contained in:
parent
0d0b87fd46
commit
db2ba5f1d9
Notes:
sideshowbarker
2024-07-17 22:55:25 +09:00
Author: https://github.com/trflynn89
Commit: db2ba5f1d9
Pull-request: https://github.com/SerenityOS/serenity/pull/17914
Reviewed-by: https://github.com/gmta ✅
Reviewed-by: https://github.com/linusg ✅
19 changed files with 74 additions and 27 deletions
|
@ -19,16 +19,25 @@
|
||||||
#include <LibWeb/Bindings/MainThreadVM.h>
|
#include <LibWeb/Bindings/MainThreadVM.h>
|
||||||
#include <LibWeb/Bindings/WindowExposedInterfaces.h>
|
#include <LibWeb/Bindings/WindowExposedInterfaces.h>
|
||||||
#include <LibWeb/DOM/Document.h>
|
#include <LibWeb/DOM/Document.h>
|
||||||
|
#include <LibWeb/DOM/MutationType.h>
|
||||||
|
#include <LibWeb/HTML/AttributeNames.h>
|
||||||
|
#include <LibWeb/HTML/EventNames.h>
|
||||||
#include <LibWeb/HTML/Location.h>
|
#include <LibWeb/HTML/Location.h>
|
||||||
#include <LibWeb/HTML/PromiseRejectionEvent.h>
|
#include <LibWeb/HTML/PromiseRejectionEvent.h>
|
||||||
#include <LibWeb/HTML/Scripting/ClassicScript.h>
|
#include <LibWeb/HTML/Scripting/ClassicScript.h>
|
||||||
#include <LibWeb/HTML/Scripting/Environments.h>
|
#include <LibWeb/HTML/Scripting/Environments.h>
|
||||||
#include <LibWeb/HTML/Scripting/ExceptionReporter.h>
|
#include <LibWeb/HTML/Scripting/ExceptionReporter.h>
|
||||||
#include <LibWeb/HTML/Scripting/Fetching.h>
|
#include <LibWeb/HTML/Scripting/Fetching.h>
|
||||||
|
#include <LibWeb/HTML/TagNames.h>
|
||||||
#include <LibWeb/HTML/Window.h>
|
#include <LibWeb/HTML/Window.h>
|
||||||
#include <LibWeb/HTML/WindowProxy.h>
|
#include <LibWeb/HTML/WindowProxy.h>
|
||||||
|
#include <LibWeb/Namespace.h>
|
||||||
#include <LibWeb/Platform/EventLoopPlugin.h>
|
#include <LibWeb/Platform/EventLoopPlugin.h>
|
||||||
|
#include <LibWeb/SVG/AttributeNames.h>
|
||||||
|
#include <LibWeb/SVG/TagNames.h>
|
||||||
|
#include <LibWeb/UIEvents/EventNames.h>
|
||||||
#include <LibWeb/WebIDL/AbstractOperations.h>
|
#include <LibWeb/WebIDL/AbstractOperations.h>
|
||||||
|
#include <LibWeb/XHR/EventNames.h>
|
||||||
|
|
||||||
namespace Web::Bindings {
|
namespace Web::Bindings {
|
||||||
|
|
||||||
|
@ -64,6 +73,17 @@ ErrorOr<void> initialize_main_thread_vm()
|
||||||
// This avoids doing an exhaustive garbage collection on process exit.
|
// This avoids doing an exhaustive garbage collection on process exit.
|
||||||
s_main_thread_vm->ref();
|
s_main_thread_vm->ref();
|
||||||
|
|
||||||
|
// These strings could potentially live on the VM similar to CommonPropertyNames.
|
||||||
|
TRY(DOM::MutationType::initialize_strings());
|
||||||
|
TRY(HTML::AttributeNames::initialize_strings());
|
||||||
|
TRY(HTML::EventNames::initialize_strings());
|
||||||
|
TRY(HTML::TagNames::initialize_strings());
|
||||||
|
TRY(Namespace::initialize_strings());
|
||||||
|
TRY(SVG::AttributeNames::initialize_strings());
|
||||||
|
TRY(SVG::TagNames::initialize_strings());
|
||||||
|
TRY(UIEvents::EventNames::initialize_strings());
|
||||||
|
TRY(XHR::EventNames::initialize_strings());
|
||||||
|
|
||||||
static_cast<WebEngineCustomData*>(s_main_thread_vm->custom_data())->event_loop.set_vm(*s_main_thread_vm);
|
static_cast<WebEngineCustomData*>(s_main_thread_vm->custom_data())->event_loop.set_vm(*s_main_thread_vm);
|
||||||
|
|
||||||
// 8.1.5.1 HostEnsureCanAddPrivateElement(O), https://html.spec.whatwg.org/multipage/webappapis.html#the-hostensurecanaddprivateelement-implementation
|
// 8.1.5.1 HostEnsureCanAddPrivateElement(O), https://html.spec.whatwg.org/multipage/webappapis.html#the-hostensurecanaddprivateelement-implementation
|
||||||
|
|
|
@ -12,17 +12,17 @@ namespace Web::DOM::MutationType {
|
||||||
ENUMERATE_MUTATION_TYPES
|
ENUMERATE_MUTATION_TYPES
|
||||||
#undef __ENUMERATE_MUTATION_TYPE
|
#undef __ENUMERATE_MUTATION_TYPE
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_MUTATION_TYPE(name) name = #name;
|
#define __ENUMERATE_MUTATION_TYPE(name) name = #name;
|
||||||
ENUMERATE_MUTATION_TYPES
|
ENUMERATE_MUTATION_TYPES
|
||||||
#undef __ENUMERATE_MUTATION_TYPE
|
#undef __ENUMERATE_MUTATION_TYPE
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::DOM::MutationType {
|
namespace Web::DOM::MutationType {
|
||||||
|
|
||||||
|
@ -19,4 +20,6 @@ namespace Web::DOM::MutationType {
|
||||||
ENUMERATE_MUTATION_TYPES
|
ENUMERATE_MUTATION_TYPES
|
||||||
#undef __ENUMERATE_MUTATION_TYPE
|
#undef __ENUMERATE_MUTATION_TYPE
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,11 +14,10 @@ namespace AttributeNames {
|
||||||
ENUMERATE_HTML_ATTRIBUTES
|
ENUMERATE_HTML_ATTRIBUTES
|
||||||
#undef __ENUMERATE_HTML_ATTRIBUTE
|
#undef __ENUMERATE_HTML_ATTRIBUTE
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_HTML_ATTRIBUTE(name) \
|
#define __ENUMERATE_HTML_ATTRIBUTE(name) \
|
||||||
name = #name;
|
name = #name;
|
||||||
|
@ -36,6 +35,7 @@ ENUMERATE_HTML_ATTRIBUTES
|
||||||
http_equiv = "http-equiv";
|
http_equiv = "http-equiv";
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web {
|
namespace Web {
|
||||||
namespace HTML {
|
namespace HTML {
|
||||||
|
@ -233,6 +234,8 @@ namespace AttributeNames {
|
||||||
ENUMERATE_HTML_ATTRIBUTES
|
ENUMERATE_HTML_ATTRIBUTES
|
||||||
#undef __ENUMERATE_HTML_ATTRIBUTE
|
#undef __ENUMERATE_HTML_ATTRIBUTE
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_boolean_attribute(DeprecatedFlyString const& attribute);
|
bool is_boolean_attribute(DeprecatedFlyString const& attribute);
|
||||||
|
|
|
@ -12,11 +12,10 @@ namespace Web::HTML::EventNames {
|
||||||
ENUMERATE_HTML_EVENTS
|
ENUMERATE_HTML_EVENTS
|
||||||
#undef __ENUMERATE_HTML_EVENT
|
#undef __ENUMERATE_HTML_EVENT
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_HTML_EVENT(name) \
|
#define __ENUMERATE_HTML_EVENT(name) \
|
||||||
name = #name;
|
name = #name;
|
||||||
|
@ -24,6 +23,7 @@ ENUMERATE_HTML_EVENTS
|
||||||
#undef __ENUMERATE_HTML_EVENT
|
#undef __ENUMERATE_HTML_EVENT
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::HTML::EventNames {
|
namespace Web::HTML::EventNames {
|
||||||
|
|
||||||
|
@ -64,4 +65,6 @@ namespace Web::HTML::EventNames {
|
||||||
ENUMERATE_HTML_EVENTS
|
ENUMERATE_HTML_EVENTS
|
||||||
#undef __ENUMERATE_HTML_EVENT
|
#undef __ENUMERATE_HTML_EVENT
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,11 +12,10 @@ namespace Web::HTML::TagNames {
|
||||||
ENUMERATE_HTML_TAGS
|
ENUMERATE_HTML_TAGS
|
||||||
#undef __ENUMERATE_HTML_TAG
|
#undef __ENUMERATE_HTML_TAG
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_HTML_TAG(name) \
|
#define __ENUMERATE_HTML_TAG(name) \
|
||||||
name = #name;
|
name = #name;
|
||||||
|
@ -26,6 +25,7 @@ ENUMERATE_HTML_TAGS
|
||||||
template_ = "template";
|
template_ = "template";
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::HTML::TagNames {
|
namespace Web::HTML::TagNames {
|
||||||
|
|
||||||
|
@ -156,4 +157,6 @@ namespace Web::HTML::TagNames {
|
||||||
ENUMERATE_HTML_TAGS
|
ENUMERATE_HTML_TAGS
|
||||||
#undef __ENUMERATE_HTML_TAG
|
#undef __ENUMERATE_HTML_TAG
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,11 +12,10 @@ namespace Web::Namespace {
|
||||||
ENUMERATE_NAMESPACES
|
ENUMERATE_NAMESPACES
|
||||||
#undef __ENUMERATE_NAMESPACE
|
#undef __ENUMERATE_NAMESPACE
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_NAMESPACE(name, namespace_) \
|
#define __ENUMERATE_NAMESPACE(name, namespace_) \
|
||||||
name = namespace_;
|
name = namespace_;
|
||||||
|
@ -24,6 +23,7 @@ ENUMERATE_NAMESPACES
|
||||||
#undef __ENUMERATE_NAMESPACE
|
#undef __ENUMERATE_NAMESPACE
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::Namespace {
|
namespace Web::Namespace {
|
||||||
|
|
||||||
|
@ -22,4 +23,6 @@ namespace Web::Namespace {
|
||||||
ENUMERATE_NAMESPACES
|
ENUMERATE_NAMESPACES
|
||||||
#undef __ENUMERATE_NAMESPACE
|
#undef __ENUMERATE_NAMESPACE
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,11 +12,10 @@ namespace Web::SVG::AttributeNames {
|
||||||
ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
|
ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
|
||||||
#undef __ENUMERATE_SVG_ATTRIBUTE
|
#undef __ENUMERATE_SVG_ATTRIBUTE
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_SVG_ATTRIBUTE(name) \
|
#define __ENUMERATE_SVG_ATTRIBUTE(name) \
|
||||||
name = #name;
|
name = #name;
|
||||||
|
@ -24,6 +23,7 @@ ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
|
||||||
#undef __ENUMERATE_SVG_ATTRIBUTE
|
#undef __ENUMERATE_SVG_ATTRIBUTE
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::SVG::AttributeNames {
|
namespace Web::SVG::AttributeNames {
|
||||||
|
|
||||||
|
@ -91,4 +92,6 @@ namespace Web::SVG::AttributeNames {
|
||||||
ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
|
ENUMERATE_SVG_ATTRIBUTES(__ENUMERATE_SVG_ATTRIBUTE)
|
||||||
#undef __ENUMERATE_SVG_ATTRIBUTE
|
#undef __ENUMERATE_SVG_ATTRIBUTE
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,17 +12,17 @@ namespace Web::SVG::TagNames {
|
||||||
ENUMERATE_SVG_TAGS
|
ENUMERATE_SVG_TAGS
|
||||||
#undef __ENUMERATE_SVG_TAG
|
#undef __ENUMERATE_SVG_TAG
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_SVG_TAG(name) name = #name;
|
#define __ENUMERATE_SVG_TAG(name) name = #name;
|
||||||
ENUMERATE_SVG_TAGS
|
ENUMERATE_SVG_TAGS
|
||||||
#undef __ENUMERATE_SVG_TAG
|
#undef __ENUMERATE_SVG_TAG
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::SVG::TagNames {
|
namespace Web::SVG::TagNames {
|
||||||
|
|
||||||
|
@ -35,4 +36,6 @@ namespace Web::SVG::TagNames {
|
||||||
ENUMERATE_SVG_TAGS
|
ENUMERATE_SVG_TAGS
|
||||||
#undef __ENUMERATE_SVG_TAG
|
#undef __ENUMERATE_SVG_TAG
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,11 +12,10 @@ namespace Web::UIEvents::EventNames {
|
||||||
ENUMERATE_UI_EVENTS
|
ENUMERATE_UI_EVENTS
|
||||||
#undef __ENUMERATE_UI_EVENT
|
#undef __ENUMERATE_UI_EVENT
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_UI_EVENT(name) \
|
#define __ENUMERATE_UI_EVENT(name) \
|
||||||
name = #name;
|
name = #name;
|
||||||
|
@ -24,6 +23,7 @@ ENUMERATE_UI_EVENTS
|
||||||
#undef __ENUMERATE_UI_EVENT
|
#undef __ENUMERATE_UI_EVENT
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::UIEvents::EventNames {
|
namespace Web::UIEvents::EventNames {
|
||||||
|
|
||||||
|
@ -33,4 +34,6 @@ namespace Web::UIEvents::EventNames {
|
||||||
ENUMERATE_UI_EVENTS
|
ENUMERATE_UI_EVENTS
|
||||||
#undef __ENUMERATE_UI_EVENT
|
#undef __ENUMERATE_UI_EVENT
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,11 +12,10 @@ namespace Web::XHR::EventNames {
|
||||||
ENUMERATE_XHR_EVENTS
|
ENUMERATE_XHR_EVENTS
|
||||||
#undef __ENUMERATE_XHR_EVENT
|
#undef __ENUMERATE_XHR_EVENT
|
||||||
|
|
||||||
[[gnu::constructor]] static void initialize()
|
ErrorOr<void> initialize_strings()
|
||||||
{
|
{
|
||||||
static bool s_initialized = false;
|
static bool s_initialized = false;
|
||||||
if (s_initialized)
|
VERIFY(!s_initialized);
|
||||||
return;
|
|
||||||
|
|
||||||
#define __ENUMERATE_XHR_EVENT(name) \
|
#define __ENUMERATE_XHR_EVENT(name) \
|
||||||
name = #name;
|
name = #name;
|
||||||
|
@ -24,6 +23,7 @@ ENUMERATE_XHR_EVENTS
|
||||||
#undef __ENUMERATE_XHR_EVENT
|
#undef __ENUMERATE_XHR_EVENT
|
||||||
|
|
||||||
s_initialized = true;
|
s_initialized = true;
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/DeprecatedFlyString.h>
|
#include <AK/DeprecatedFlyString.h>
|
||||||
|
#include <AK/Error.h>
|
||||||
|
|
||||||
namespace Web::XHR::EventNames {
|
namespace Web::XHR::EventNames {
|
||||||
|
|
||||||
|
@ -24,4 +25,6 @@ namespace Web::XHR::EventNames {
|
||||||
ENUMERATE_XHR_EVENTS
|
ENUMERATE_XHR_EVENTS
|
||||||
#undef __ENUMERATE_XHR_EVENT
|
#undef __ENUMERATE_XHR_EVENT
|
||||||
|
|
||||||
|
ErrorOr<void> initialize_strings();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue