diff --git a/Userland/Libraries/LibWeb/HTML/HTMLElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLElement.cpp
index f958711ed0..03cda6a6cd 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLElement.cpp
@@ -547,4 +547,14 @@ TokenizedFeature::NoOpener HTMLElement::get_an_elements_noopener(StringView targ
return TokenizedFeature::NoOpener::No;
}
+void HTMLElement::did_receive_focus()
+{
+ if (m_content_editable_state != ContentEditableState::True)
+ return;
+ auto* browsing_context = document().browsing_context();
+ if (!browsing_context)
+ return;
+ browsing_context->set_cursor_position(DOM::Position::create(realm(), *this, 0));
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLElement.h b/Userland/Libraries/LibWeb/HTML/HTMLElement.h
index 1c23657a33..cc4a8946b0 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLElement.h
@@ -82,6 +82,7 @@ private:
// ^HTML::GlobalEventHandlers
virtual DOM::EventTarget& global_event_handlers_to_event_target(FlyString const&) override { return *this; }
+ virtual void did_receive_focus() override;
JS::GCPtr m_dataset;