Procházet zdrojové kódy

LibWeb: Make StyleSheet::m_parent_style_sheet a WeakPtr

It's not safe for this to be a raw pointer, as the child can outlive the
parent.
Andreas Kling před 3 roky
rodič
revize
58b99df16d

+ 3 - 1
Userland/Libraries/LibWeb/CSS/CSSStyleSheet.h

@@ -18,7 +18,9 @@ namespace Web::CSS {
 
 class CSSImportRule;
 
-class CSSStyleSheet final : public StyleSheet {
+class CSSStyleSheet final
+    : public StyleSheet
+    , public Weakable<CSSStyleSheet> {
 public:
     using WrapperType = Bindings::CSSStyleSheetWrapper;
 

+ 6 - 0
Userland/Libraries/LibWeb/CSS/StyleSheet.cpp

@@ -5,6 +5,7 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <LibWeb/CSS/CSSStyleSheet.h>
 #include <LibWeb/CSS/StyleSheet.h>
 #include <LibWeb/DOM/Element.h>
 
@@ -18,4 +19,9 @@ void StyleSheet::set_owner_node(DOM::Element* element)
         m_owner_node = nullptr;
 }
 
+void StyleSheet::set_parent_css_style_sheet(CSSStyleSheet* parent)
+{
+    m_parent_style_sheet = parent;
+}
+
 }

+ 2 - 3
Userland/Libraries/LibWeb/CSS/StyleSheet.h

@@ -41,7 +41,7 @@ public:
     void set_disabled(bool disabled) { m_disabled = disabled; }
 
     CSSStyleSheet* parent_style_sheet() { return m_parent_style_sheet; }
-    void set_parent_css_style_sheet(CSSStyleSheet* sheet) { m_parent_style_sheet = sheet; }
+    void set_parent_css_style_sheet(CSSStyleSheet*);
 
 protected:
     StyleSheet() = default;
@@ -49,8 +49,7 @@ protected:
 private:
     WeakPtr<DOM::Element> m_owner_node;
 
-    // FIXME: Use WeakPtr.
-    CSSStyleSheet* m_parent_style_sheet { nullptr };
+    WeakPtr<CSSStyleSheet> m_parent_style_sheet;
 
     String m_title;
     String m_type_string;