mirror of
https://github.com/RGBCube/serenity
synced 2025-05-22 17:25:07 +00:00
LibWeb: Make the HTMLParser GC-allocated
This prevents a reference cycle between a HTMLParser opened via document.open() and the document. It was one of many things keeping some documents alive indefinitely.
This commit is contained in:
parent
68452c749a
commit
6e0f80fbe0
8 changed files with 71 additions and 35 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
||||
* Copyright (c) 2020-2022, Andreas Kling <kling@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
@ -14,6 +14,12 @@ static Vector<FlyString> s_base_list { "applet", "caption", "html", "table", "td
|
|||
|
||||
StackOfOpenElements::~StackOfOpenElements() = default;
|
||||
|
||||
void StackOfOpenElements::visit_edges(JS::Cell::Visitor& visitor)
|
||||
{
|
||||
for (auto& element : m_elements)
|
||||
visitor.visit(element);
|
||||
}
|
||||
|
||||
bool StackOfOpenElements::has_in_scope_impl(FlyString const& tag_name, Vector<FlyString> const& list) const
|
||||
{
|
||||
for (auto const& element : m_elements.in_reverse()) {
|
||||
|
@ -162,7 +168,7 @@ void StackOfOpenElements::replace(DOM::Element const& to_remove, JS::NonnullGCPt
|
|||
for (size_t i = 0; i < m_elements.size(); i++) {
|
||||
if (m_elements[i].ptr() == &to_remove) {
|
||||
m_elements.remove(i);
|
||||
m_elements.insert(i, JS::make_handle(*to_add));
|
||||
m_elements.insert(i, to_add);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -172,7 +178,7 @@ void StackOfOpenElements::insert_immediately_below(JS::NonnullGCPtr<DOM::Element
|
|||
{
|
||||
for (size_t i = 0; i < m_elements.size(); i++) {
|
||||
if (m_elements[i].ptr() == &target) {
|
||||
m_elements.insert(i + 1, JS::make_handle(*element_to_add));
|
||||
m_elements.insert(i + 1, element_to_add);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue