diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 0d2cef56eb..9cff085408 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -474,7 +474,6 @@ class MutationRecordWrapper; class NodeListWrapper; class OptionConstructor; class Path2DWrapper; -class PerformanceTimingWrapper; class RangePrototype; class ResizeObserverWrapper; class SelectionWrapper; diff --git a/Userland/Libraries/LibWeb/HighResolutionTime/Performance.cpp b/Userland/Libraries/LibWeb/HighResolutionTime/Performance.cpp index 6d99647275..f35a6addc9 100644 --- a/Userland/Libraries/LibWeb/HighResolutionTime/Performance.cpp +++ b/Userland/Libraries/LibWeb/HighResolutionTime/Performance.cpp @@ -10,13 +10,13 @@ #include #include #include +#include namespace Web::HighResolutionTime { Performance::Performance(HTML::Window& window) : DOM::EventTarget(window.realm()) , m_window(window) - , m_timing(make(window)) { set_prototype(&window.ensure_web_prototype("Performance")); m_timer.start(); @@ -28,6 +28,14 @@ void Performance::visit_edges(Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_window.ptr()); + visitor.visit(m_timing.ptr()); +} + +JS::GCPtr Performance::timing() +{ + if (!m_timing) + m_timing = heap().allocate(realm(), *m_window); + return m_timing; } double Performance::time_origin() const diff --git a/Userland/Libraries/LibWeb/HighResolutionTime/Performance.h b/Userland/Libraries/LibWeb/HighResolutionTime/Performance.h index 70ad0838f0..689186e869 100644 --- a/Userland/Libraries/LibWeb/HighResolutionTime/Performance.h +++ b/Userland/Libraries/LibWeb/HighResolutionTime/Performance.h @@ -10,7 +10,6 @@ #include #include #include -#include namespace Web::HighResolutionTime { @@ -23,7 +22,7 @@ public: double now() const { return m_timer.elapsed(); } double time_origin() const; - JS::GCPtr timing() { return *m_timing; } + JS::GCPtr timing(); private: explicit Performance(HTML::Window&); @@ -31,10 +30,9 @@ private: virtual void visit_edges(Cell::Visitor&) override; JS::NonnullGCPtr m_window; + JS::GCPtr m_timing; Core::ElapsedTimer m_timer; - - OwnPtr m_timing; }; } diff --git a/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.cpp b/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.cpp index 6bb8a05525..552b8899ca 100644 --- a/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.cpp +++ b/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.cpp @@ -9,10 +9,18 @@ namespace Web::NavigationTiming { PerformanceTiming::PerformanceTiming(HTML::Window& window) - : m_window(JS::make_handle(window)) + : PlatformObject(window.realm()) + , m_window(window) { + set_prototype(&window.cached_web_prototype("PerformanceTiming")); } PerformanceTiming::~PerformanceTiming() = default; +void PerformanceTiming::visit_edges(Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_window.ptr()); +} + } diff --git a/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.h b/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.h index ffdf6d569d..7247a58e5f 100644 --- a/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.h +++ b/Userland/Libraries/LibWeb/NavigationTiming/PerformanceTiming.h @@ -6,21 +6,18 @@ #pragma once -#include #include #include #include namespace Web::NavigationTiming { -class PerformanceTiming final - : public RefCounted - , public Bindings::Wrappable { +class PerformanceTiming final : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(PerformanceTiming, Bindings::PlatformObject); + public: - using WrapperType = Bindings::PerformanceTimingWrapper; using AllowOwnPtr = TrueType; - explicit PerformanceTiming(HTML::Window&); ~PerformanceTiming(); u64 navigation_start() { return 0; } @@ -46,7 +43,13 @@ public: u64 load_event_end() { return 0; } private: - JS::Handle m_window; + explicit PerformanceTiming(HTML::Window&); + + virtual void visit_edges(Cell::Visitor&) override; + + JS::GCPtr m_window; }; } + +WRAPPER_HACK(PerformanceTiming, Web::NavigationTiming) diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 8e9af7b273..9c22dabed3 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -156,7 +156,7 @@ libweb_js_wrapper(HTML/WorkerLocation) libweb_js_wrapper(HTML/WorkerNavigator) libweb_js_wrapper(HighResolutionTime/Performance NO_INSTANCE) libweb_js_wrapper(IntersectionObserver/IntersectionObserver) -libweb_js_wrapper(NavigationTiming/PerformanceTiming) +libweb_js_wrapper(NavigationTiming/PerformanceTiming NO_INSTANCE) libweb_js_wrapper(RequestIdleCallback/IdleDeadline) libweb_js_wrapper(ResizeObserver/ResizeObserver) libweb_js_wrapper(SVG/SVGAnimatedLength)