diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp index c55efef7f03..48ef8b2aef2 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp @@ -65,6 +65,13 @@ void HTMLMediaElement::initialize(JS::Realm& realm) // the document is active again. pause_element().release_value_but_fixme_should_propagate_errors(); }); + + document().page().register_media_element({}, unique_id()); +} + +void HTMLMediaElement::finalize() +{ + document().page().unregister_media_element({}, unique_id()); } // https://html.spec.whatwg.org/multipage/media.html#queue-a-media-element-task diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h index 7f908424da3..c08d2da0469 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h @@ -132,6 +132,7 @@ protected: HTMLMediaElement(DOM::Document&, DOM::QualifiedName); virtual void initialize(JS::Realm&) override; + virtual void finalize() override; virtual void visit_edges(Cell::Visitor&) override; virtual void attribute_changed(FlyString const& name, Optional const& value) override; diff --git a/Userland/Libraries/LibWeb/Page/Page.cpp b/Userland/Libraries/LibWeb/Page/Page.cpp index b1388406b89..6f4fff85e20 100644 --- a/Userland/Libraries/LibWeb/Page/Page.cpp +++ b/Userland/Libraries/LibWeb/Page/Page.cpp @@ -390,6 +390,18 @@ void Page::select_dropdown_closed(Optional value) } } +void Page::register_media_element(Badge, int media_id) +{ + m_media_elements.append(media_id); +} + +void Page::unregister_media_element(Badge, int media_id) +{ + m_media_elements.remove_all_matching([&](auto candidate_id) { + return candidate_id == media_id; + }); +} + void Page::did_request_media_context_menu(i32 media_id, CSSPixelPoint position, ByteString const& target, unsigned modifiers, MediaContextMenu menu) { m_media_context_menu_element_id = media_id; diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h index 9b199900f16..0544979e842 100644 --- a/Userland/Libraries/LibWeb/Page/Page.h +++ b/Userland/Libraries/LibWeb/Page/Page.h @@ -150,6 +150,9 @@ public: Select, }; + void register_media_element(Badge, int media_id); + void unregister_media_element(Badge, int media_id); + struct MediaContextMenu { URL::URL media_url; bool is_video { false }; @@ -204,6 +207,7 @@ private: PendingNonBlockingDialog m_pending_non_blocking_dialog { PendingNonBlockingDialog::None }; WeakPtr m_pending_non_blocking_dialog_target; + Vector m_media_elements; Optional m_media_context_menu_element_id; Optional m_user_style_sheet_source;