From 46a5a2a57ad313f764e899aa128b7b6b00469e72 Mon Sep 17 00:00:00 2001 From: Amelia Hart Date: Fri, 26 Sep 2025 11:00:06 +0200 Subject: [PATCH] Implement cycle collection support for the Visual Viewport API --- dom/base/VisualViewport.cpp | 16 ++++++++++++++++ dom/base/VisualViewport.h | 3 +++ dom/base/nsGlobalWindow.cpp | 2 ++ 3 files changed, 21 insertions(+) diff --git a/dom/base/VisualViewport.cpp b/dom/base/VisualViewport.cpp index c33b1dbf5f..9efe4c7545 100644 --- a/dom/base/VisualViewport.cpp +++ b/dom/base/VisualViewport.cpp @@ -25,6 +25,22 @@ VisualViewport::~VisualViewport() { } +NS_IMPL_CYCLE_COLLECTION_CLASS(VisualViewport) + +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(VisualViewport, + DOMEventTargetHelper) +NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END + +NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(VisualViewport, + DOMEventTargetHelper) +NS_IMPL_CYCLE_COLLECTION_UNLINK_END + +NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(VisualViewport) +NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper) + +NS_IMPL_ADDREF_INHERITED(VisualViewport, DOMEventTargetHelper) +NS_IMPL_RELEASE_INHERITED(VisualViewport, DOMEventTargetHelper) + /* virtual */ JSObject* VisualViewport::WrapObject(JSContext* aCx, JS::Handle aGivenProto) diff --git a/dom/base/VisualViewport.h b/dom/base/VisualViewport.h index 720b368726..c9d39b577a 100644 --- a/dom/base/VisualViewport.h +++ b/dom/base/VisualViewport.h @@ -21,6 +21,9 @@ class VisualViewport final: public mozilla::DOMEventTargetHelper { public: + NS_DECL_ISUPPORTS_INHERITED + NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(VisualViewport, DOMEventTargetHelper) + explicit VisualViewport(nsPIDOMWindowInner* aWindow); explicit VisualViewport(nsIGlobalObject* aGlobal); diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index 3a0d89f1b5..4685c50136 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -2183,6 +2183,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsGlobalWindow) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocation) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mHistory) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCustomElements) + NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mVisualViewport) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocalStorage) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSessionStorage) @@ -2261,6 +2262,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsGlobalWindow) NS_IMPL_CYCLE_COLLECTION_UNLINK(mLocation) NS_IMPL_CYCLE_COLLECTION_UNLINK(mHistory) NS_IMPL_CYCLE_COLLECTION_UNLINK(mCustomElements) + NS_IMPL_CYCLE_COLLECTION_UNLINK(mVisualViewport) NS_IMPL_CYCLE_COLLECTION_UNLINK(mLocalStorage) NS_IMPL_CYCLE_COLLECTION_UNLINK(mSessionStorage) if (tmp->mApplicationCache) {