From 9c74f49b1ddacd56dd35667b0fa76ff4de422c19 Mon Sep 17 00:00:00 2001 From: stelar7 Date: Thu, 1 Jun 2023 09:38:40 +0200 Subject: LibWeb: Implement `has_transient_activation` --- Userland/Libraries/LibWeb/HTML/Window.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'Userland') diff --git a/Userland/Libraries/LibWeb/HTML/Window.cpp b/Userland/Libraries/LibWeb/HTML/Window.cpp index 41fcfe60fa..e434b64351 100644 --- a/Userland/Libraries/LibWeb/HTML/Window.cpp +++ b/Userland/Libraries/LibWeb/HTML/Window.cpp @@ -621,7 +621,23 @@ WebIDL::ExceptionOr> Window::session_storage() // https://html.spec.whatwg.org/multipage/interaction.html#transient-activation bool Window::has_transient_activation() const { - // FIXME: Implement this. + // The transient activation duration is expected be at most a few seconds, so that the user can possibly + // perceive the link between an interaction with the page and the page calling the activation-gated API. + auto transient_activation_duration = 5; + + // When the current high resolution time given W + auto unsafe_shared_time = HighResolutionTime::unsafe_shared_current_time(); + auto current_time = HighResolutionTime::relative_high_resolution_time(unsafe_shared_time, realm().global_object()); + + // is greater than or equal to the last activation timestamp in W + if (current_time >= m_last_activation_timestamp) { + // and less than the last activation timestamp in W plus the transient activation duration + if (current_time < m_last_activation_timestamp + transient_activation_duration) { + // then W is said to have transient activation. + return true; + } + } + return false; } -- cgit v1.2.3