summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/URL
diff options
context:
space:
mode:
authorTimothy Flynn <trflynn89@pm.me>2023-01-10 06:28:20 -0500
committerAndreas Kling <kling@serenityos.org>2023-01-10 16:08:14 +0100
commit834202aeb9a47c544ab4e61deb813de50bc03946 (patch)
treec120e9231fa5451b527131f6e423fac2645253bb /Userland/Libraries/LibWeb/URL
parent7bd8fd000f3f8e92ff632be2370a279ac2309250 (diff)
downloadserenity-834202aeb9a47c544ab4e61deb813de50bc03946.zip
LibWeb: Move setting of Web object prototypes to initialize()
This needs to happen before prototype/constructor intitialization can be made lazy. Otherwise, GC could run during the C++ constructor and try to collect the object currently being created.
Diffstat (limited to 'Userland/Libraries/LibWeb/URL')
-rw-r--r--Userland/Libraries/LibWeb/URL/URL.cpp7
-rw-r--r--Userland/Libraries/LibWeb/URL/URL.h1
-rw-r--r--Userland/Libraries/LibWeb/URL/URLSearchParams.cpp7
-rw-r--r--Userland/Libraries/LibWeb/URL/URLSearchParams.h1
-rw-r--r--Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.cpp7
-rw-r--r--Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.h1
6 files changed, 21 insertions, 3 deletions
diff --git a/Userland/Libraries/LibWeb/URL/URL.cpp b/Userland/Libraries/LibWeb/URL/URL.cpp
index c52a3b4921..49cfc3f906 100644
--- a/Userland/Libraries/LibWeb/URL/URL.cpp
+++ b/Userland/Libraries/LibWeb/URL/URL.cpp
@@ -57,11 +57,16 @@ URL::URL(JS::Realm& realm, AK::URL url, JS::NonnullGCPtr<URLSearchParams> query)
, m_url(move(url))
, m_query(move(query))
{
- set_prototype(&Bindings::cached_web_prototype(realm, "URL"));
}
URL::~URL() = default;
+void URL::initialize(JS::Realm& realm)
+{
+ Base::initialize(realm);
+ set_prototype(&Bindings::ensure_web_prototype<Bindings::URLPrototype>(realm, "URL"));
+}
+
void URL::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
diff --git a/Userland/Libraries/LibWeb/URL/URL.h b/Userland/Libraries/LibWeb/URL/URL.h
index 718ebf09ea..d691f0ec08 100644
--- a/Userland/Libraries/LibWeb/URL/URL.h
+++ b/Userland/Libraries/LibWeb/URL/URL.h
@@ -65,6 +65,7 @@ public:
private:
URL(JS::Realm&, AK::URL, JS::NonnullGCPtr<URLSearchParams> query);
+ virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
AK::URL m_url;
diff --git a/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp b/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp
index f5766c6337..ddf08690a6 100644
--- a/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp
+++ b/Userland/Libraries/LibWeb/URL/URLSearchParams.cpp
@@ -17,11 +17,16 @@ URLSearchParams::URLSearchParams(JS::Realm& realm, Vector<QueryParam> list)
: PlatformObject(realm)
, m_list(move(list))
{
- set_prototype(&Bindings::cached_web_prototype(realm, "URLSearchParams"));
}
URLSearchParams::~URLSearchParams() = default;
+void URLSearchParams::initialize(JS::Realm& realm)
+{
+ Base::initialize(realm);
+ set_prototype(&Bindings::ensure_web_prototype<Bindings::URLSearchParamsPrototype>(realm, "URLSearchParams"));
+}
+
void URLSearchParams::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
diff --git a/Userland/Libraries/LibWeb/URL/URLSearchParams.h b/Userland/Libraries/LibWeb/URL/URLSearchParams.h
index 02f5fb708e..9456c83030 100644
--- a/Userland/Libraries/LibWeb/URL/URLSearchParams.h
+++ b/Userland/Libraries/LibWeb/URL/URLSearchParams.h
@@ -48,6 +48,7 @@ private:
URLSearchParams(JS::Realm&, Vector<QueryParam> list);
+ virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
void update();
diff --git a/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.cpp b/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.cpp
index 6b289fe2c1..66ebc57ee9 100644
--- a/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.cpp
+++ b/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.cpp
@@ -33,11 +33,16 @@ URLSearchParamsIterator::URLSearchParamsIterator(URLSearchParams const& url_sear
, m_url_search_params(url_search_params)
, m_iteration_kind(iteration_kind)
{
- set_prototype(&Bindings::ensure_web_prototype<Bindings::URLSearchParamsIteratorPrototype>(url_search_params.realm(), "URLSearchParamsIterator"));
}
URLSearchParamsIterator::~URLSearchParamsIterator() = default;
+void URLSearchParamsIterator::initialize(JS::Realm& realm)
+{
+ Base::initialize(realm);
+ set_prototype(&Bindings::ensure_web_prototype<Bindings::URLSearchParamsIteratorPrototype>(realm, "URLSearchParamsIterator"));
+}
+
void URLSearchParamsIterator::visit_edges(JS::Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
diff --git a/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.h b/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.h
index 84fc9373c7..7a2714d22a 100644
--- a/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.h
+++ b/Userland/Libraries/LibWeb/URL/URLSearchParamsIterator.h
@@ -24,6 +24,7 @@ public:
private:
URLSearchParamsIterator(URLSearchParams const&, JS::Object::PropertyKind iteration_kind);
+ virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
URLSearchParams const& m_url_search_params;