Jelajahi Sumber

LibWeb: Make HTMLIFrameElement a LazyLoadingElement

This replaces its previous partial implementation of the lazy loading
scaffolding. It still doesn't actually load lazily yet.
Sam Atkins 1 tahun lalu
induk
melakukan
1d6f06b203

+ 7 - 13
Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.cpp

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2023, Sam Atkins <atkinssj@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
@@ -59,19 +60,6 @@ void HTMLIFrameElement::inserted()
     }
 }
 
-// https://html.spec.whatwg.org/multipage/urls-and-fetching.html#will-lazy-load-element-steps
-bool HTMLIFrameElement::will_lazy_load_element() const
-{
-    // 1. If scripting is disabled for element, then return false.
-    if (document().is_scripting_disabled())
-        return false;
-
-    // FIXME: 2. If element's lazy loading attribute is in the Lazy state, then return true.
-
-    // 3. Return false.
-    return false;
-}
-
 // https://html.spec.whatwg.org/multipage/iframe-embed-object.html#process-the-iframe-attributes
 void HTMLIFrameElement::process_the_iframe_attributes(bool initial_insertion)
 {
@@ -188,4 +176,10 @@ i32 HTMLIFrameElement::default_tab_index_value() const
     return 0;
 }
 
+void HTMLIFrameElement::visit_edges(Cell::Visitor& visitor)
+{
+    Base::visit_edges(visitor);
+    visit_lazy_loading_element(visitor);
+}
+
 }

+ 9 - 4
Userland/Libraries/LibWeb/HTML/HTMLIFrameElement.h

@@ -1,17 +1,23 @@
 /*
  * Copyright (c) 2020-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2023, Sam Atkins <atkinssj@serenityos.org>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
 #pragma once
 
+#include <LibWeb/HTML/LazyLoadingElement.h>
 #include <LibWeb/HTML/NavigableContainer.h>
 
 namespace Web::HTML {
 
-class HTMLIFrameElement final : public NavigableContainer {
+class HTMLIFrameElement final
+    : public NavigableContainer
+    , public LazyLoadingElement<HTMLIFrameElement> {
+
     WEB_PLATFORM_OBJECT(HTMLIFrameElement, NavigableContainer);
+    LAZY_LOADING_ELEMENT(HTMLIFrameElement);
     JS_DECLARE_ALLOCATOR(HTMLIFrameElement);
 
 public:
@@ -19,9 +25,6 @@ public:
 
     virtual JS::GCPtr<Layout::Node> create_layout_node(NonnullRefPtr<CSS::StyleProperties>) override;
 
-    // https://html.spec.whatwg.org/multipage/urls-and-fetching.html#will-lazy-load-element-steps
-    bool will_lazy_load_element() const;
-
     void set_current_navigation_was_lazy_loaded(bool value) { m_current_navigation_was_lazy_loaded = value; }
 
     Optional<HighResolutionTime::DOMHighResTimeStamp> const& pending_resource_start_time() const { return m_pending_resource_start_time; }
@@ -29,6 +32,8 @@ public:
 
     virtual void apply_presentational_hints(CSS::StyleProperties&) const override;
 
+    virtual void visit_edges(Cell::Visitor&) override;
+
 private:
     HTMLIFrameElement(DOM::Document&, DOM::QualifiedName);