From 89ebef9730797a25a9d6263deda4b17e18fb1905 Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Thu, 23 Mar 2023 16:46:28 +0000 Subject: [PATCH] LibWeb: Add a list of the entry names in the PerformanceTiming interface Required for the PerformanceMark constructor, which doesn't allow any mark names that have the same name as an attribute in the PerformanceTiming interface in a Window context. --- .../LibWeb/Bindings/MainThreadVM.cpp | 2 + .../LibWeb/NavigationTiming/EntryNames.cpp | 29 +++++++++++++ .../LibWeb/NavigationTiming/EntryNames.h | 42 +++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 Userland/Libraries/LibWeb/NavigationTiming/EntryNames.cpp create mode 100644 Userland/Libraries/LibWeb/NavigationTiming/EntryNames.h diff --git a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp index e075b8a945..9bbdc7a759 100644 --- a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp +++ b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -80,6 +81,7 @@ ErrorOr initialize_main_thread_vm() TRY(HTML::EventNames::initialize_strings()); TRY(HTML::TagNames::initialize_strings()); TRY(Namespace::initialize_strings()); + TRY(NavigationTiming::EntryNames::initialize_strings()); TRY(PerformanceTimeline::EntryTypes::initialize_strings()); TRY(SVG::AttributeNames::initialize_strings()); TRY(SVG::TagNames::initialize_strings()); diff --git a/Userland/Libraries/LibWeb/NavigationTiming/EntryNames.cpp b/Userland/Libraries/LibWeb/NavigationTiming/EntryNames.cpp new file mode 100644 index 0000000000..2769f4690c --- /dev/null +++ b/Userland/Libraries/LibWeb/NavigationTiming/EntryNames.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023, Luke Wilde + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace Web::NavigationTiming::EntryNames { + +#define __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(name) FlyString name; +ENUMERATE_NAVIGATION_TIMING_ENTRY_NAMES +#undef __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME + +ErrorOr initialize_strings() +{ + static bool s_initialized = false; + VERIFY(!s_initialized); + +#define __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(name) \ + name = TRY(#name##_fly_string); + ENUMERATE_NAVIGATION_TIMING_ENTRY_NAMES +#undef __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME + + s_initialized = true; + return {}; +} + +} diff --git a/Userland/Libraries/LibWeb/NavigationTiming/EntryNames.h b/Userland/Libraries/LibWeb/NavigationTiming/EntryNames.h new file mode 100644 index 0000000000..3343f745fd --- /dev/null +++ b/Userland/Libraries/LibWeb/NavigationTiming/EntryNames.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023, Luke Wilde + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::NavigationTiming::EntryNames { + +#define ENUMERATE_NAVIGATION_TIMING_ENTRY_NAMES \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(navigationStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(unloadEventStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(unloadEventEnd) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(redirectStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(redirectEnd) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(fetchStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(domainLookupStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(domainLookupEnd) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(connectStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(connectEnd) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(secureConnectionStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(requestStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(responseStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(responseEnd) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(domLoading) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(domInteractive) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(domContentLoadedEventStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(domContentLoadedEventEnd) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(domComplete) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(loadEventStart) \ + __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(loadEventEnd) + +#define __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME(name) extern FlyString name; +ENUMERATE_NAVIGATION_TIMING_ENTRY_NAMES +#undef __ENUMERATE_NAVIGATION_TIMING_ENTRY_NAME + +ErrorOr initialize_strings(); + +}