ladybird/Libraries/LibWeb/HTML/HTMLAreaElement.h
Luke Wilde 82bd3d3891 LibWeb: Avoid invoking Trusted Types where avoidable
Prevents observably calling Trusted Types, which can run arbitrary JS,
cause crashes due to use of MUST and allow arbitrary JS to modify
internal elements.
2025-11-06 11:43:06 -05:00

70 lines
2.5 KiB
C++

/*
* Copyright (c) 2020, the SerenityOS developers.
* Copyright (c) 2021, Andreas Kling <andreas@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/HTML/HTMLElement.h>
#include <LibWeb/HTML/HTMLHyperlinkElementUtils.h>
namespace Web::HTML {
class HTMLAreaElement final
: public HTMLElement
, public HTMLHyperlinkElementUtils {
WEB_PLATFORM_OBJECT(HTMLAreaElement, HTMLElement);
GC_DECLARE_ALLOCATOR(HTMLAreaElement);
public:
virtual ~HTMLAreaElement() override;
GC::Ref<DOM::DOMTokenList> rel_list();
private:
HTMLAreaElement(DOM::Document&, DOM::QualifiedName);
virtual bool is_html_area_element() const override { return true; }
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
// ^DOM::Element
virtual void attribute_changed(FlyString const& name, Optional<String> const& old_value, Optional<String> const& value, Optional<FlyString> const& namespace_) override;
virtual i32 default_tab_index_value() const override;
// ^HTML::HTMLHyperlinkElementUtils
virtual DOM::Document& hyperlink_element_utils_document() override { return document(); }
virtual DOM::Element& hyperlink_element_utils_element() override { return *this; }
virtual Optional<String> hyperlink_element_utils_href() const override;
virtual void set_hyperlink_element_utils_href(String) override;
virtual Optional<String> hyperlink_element_utils_referrerpolicy() const override;
virtual bool hyperlink_element_utils_is_html_anchor_element() const override { return false; }
virtual bool hyperlink_element_utils_is_connected() const override { return is_connected(); }
virtual void hyperlink_element_utils_queue_an_element_task(HTML::Task::Source source, Function<void()> steps) override
{
queue_an_element_task(source, move(steps));
}
virtual String hyperlink_element_utils_get_an_elements_target(Optional<String> target) const override
{
return get_an_elements_target(target);
}
virtual TokenizedFeature::NoOpener hyperlink_element_utils_get_an_elements_noopener(URL::URL const& url, StringView target) const override
{
return get_an_elements_noopener(url, target);
}
virtual Optional<ARIA::Role> default_role() const override;
GC::Ptr<DOM::DOMTokenList> m_rel_list;
};
}
namespace Web::DOM {
template<>
inline bool Node::fast_is<HTML::HTMLAreaElement>() const { return is_html_area_element(); }
}