diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp
index 7df28b1934..b5410a40f6 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.cpp
@@ -1857,6 +1857,20 @@ void HTMLMediaElement::reject_pending_play_promises(ReadonlySpan HTMLMediaElement::handle_keydown(Badge, KeyCode key)
+{
+ switch (key) {
+ case KeyCode::Key_Space:
+ TRY(toggle_playback());
+ break;
+
+ default:
+ break;
+ }
+
+ return {};
+}
+
void HTMLMediaElement::set_layout_display_time(Badge, Optional display_time)
{
if (display_time.has_value() && !m_display_time.has_value()) {
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h
index 0819892e2e..5fb4a1765f 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLMediaElement.h
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -99,6 +100,8 @@ public:
JS::NonnullGCPtr audio_tracks() const { return *m_audio_tracks; }
JS::NonnullGCPtr video_tracks() const { return *m_video_tracks; }
+ WebIDL::ExceptionOr handle_keydown(Badge, KeyCode);
+
enum class MouseTrackingComponent {
Timeline,
Volume,
diff --git a/Userland/Libraries/LibWeb/Page/EventHandler.cpp b/Userland/Libraries/LibWeb/Page/EventHandler.cpp
index 6929489897..6389e76cdd 100644
--- a/Userland/Libraries/LibWeb/Page/EventHandler.cpp
+++ b/Userland/Libraries/LibWeb/Page/EventHandler.cpp
@@ -745,6 +745,11 @@ bool EventHandler::handle_keydown(KeyCode key, unsigned modifiers, u32 code_poin
}
}
+ if (auto* element = m_browsing_context->active_document()->focused_element(); is(element)) {
+ auto& media_element = static_cast(*element);
+ media_element.handle_keydown({}, key).release_value_but_fixme_should_propagate_errors();
+ }
+
if (m_browsing_context->cursor_position().is_valid() && m_browsing_context->cursor_position().node()->is_editable()) {
if (key == KeyCode::Key_Backspace) {
if (!m_browsing_context->decrement_cursor_position_offset()) {