diff --git a/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp b/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp
index 7d5110fd98..41a52e5a53 100644
--- a/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp
+++ b/Userland/Libraries/LibWeb/HTML/EventLoop/EventLoop.cpp
@@ -12,6 +12,7 @@
#include
#include
#include
+#include
namespace Web::HTML {
@@ -139,7 +140,10 @@ void EventLoop::process()
}
};
- // FIXME: 2. Rendering opportunities: Remove from docs all Document objects whose browsing context do not have a rendering opportunity.
+ // 2. Rendering opportunities: Remove from docs all Document objects whose browsing context do not have a rendering opportunity.
+ docs.remove_all_matching([&](auto& document) {
+ return document->browsing_context() && !document->browsing_context()->has_a_rendering_opportunity();
+ });
// 3. If docs is not empty, then set hasARenderingOpportunity to true.
if (!docs.is_empty())
diff --git a/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp b/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp
index 219d9c04ed..653f2cc1fd 100644
--- a/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp
+++ b/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp
@@ -348,4 +348,14 @@ DOM::Document const* BrowsingContext::container_document() const
return nullptr;
}
+// https://html.spec.whatwg.org/#rendering-opportunity
+bool BrowsingContext::has_a_rendering_opportunity() const
+{
+ // A browsing context has a rendering opportunity if the user agent is currently able to present the contents of the browsing context to the user,
+ // accounting for hardware refresh rate constraints and user agent throttling for performance reasons, but considering content presentable even if it's outside the viewport.
+
+ // FIXME: We should at the very least say `false` here if we're an inactive browser tab.
+ return true;
+}
+
}
diff --git a/Userland/Libraries/LibWeb/Page/BrowsingContext.h b/Userland/Libraries/LibWeb/Page/BrowsingContext.h
index f0bb307ece..5243de125c 100644
--- a/Userland/Libraries/LibWeb/Page/BrowsingContext.h
+++ b/Userland/Libraries/LibWeb/Page/BrowsingContext.h
@@ -102,6 +102,8 @@ public:
DOM::Document* container_document();
DOM::Document const* container_document() const;
+ bool has_a_rendering_opportunity() const;
+
private:
explicit BrowsingContext(Page&, HTML::BrowsingContextContainer*);