소스 검색

LibWeb: Establish parent/child relationship between BrowsingContexts

When an iframe is inserted or removed from a document, we now take it in
and out of the BrowsingContext tree.
Andreas Kling 3 년 전
부모
커밋
1e53cc3f5b
2개의 변경된 파일9개의 추가작업 그리고 0개의 파일을 삭제
  1. 8 0
      Userland/Libraries/LibWeb/HTML/BrowsingContextContainer.cpp
  2. 1 0
      Userland/Libraries/LibWeb/HTML/BrowsingContextContainer.h

+ 8 - 0
Userland/Libraries/LibWeb/HTML/BrowsingContextContainer.cpp

@@ -31,11 +31,19 @@ void BrowsingContextContainer::inserted()
     if (auto* browsing_context = document().browsing_context()) {
         VERIFY(browsing_context->page());
         m_nested_browsing_context = BrowsingContext::create_nested(*browsing_context->page(), *this);
+        browsing_context->append_child(*m_nested_browsing_context);
         m_nested_browsing_context->set_frame_nesting_levels(browsing_context->frame_nesting_levels());
         m_nested_browsing_context->register_frame_nesting(document().url());
     }
 }
 
+void BrowsingContextContainer::removed_from(Node* old_parent)
+{
+    HTMLElement::removed_from(old_parent);
+    if (m_nested_browsing_context && m_nested_browsing_context->parent())
+        m_nested_browsing_context->parent()->remove_child(*m_nested_browsing_context);
+}
+
 // https://html.spec.whatwg.org/multipage/browsers.html#concept-bcc-content-document
 const DOM::Document* BrowsingContextContainer::content_document() const
 {

+ 1 - 0
Userland/Libraries/LibWeb/HTML/BrowsingContextContainer.h

@@ -22,6 +22,7 @@ public:
     DOM::Document const* content_document_without_origin_check() const;
 
     virtual void inserted() override;
+    virtual void removed_from(Node*) override;
 
 protected:
     RefPtr<BrowsingContext> m_nested_browsing_context;