Don't use raw pointers in ShadowRoot.
https://bugs.webkit.org/show_bug.cgi?id=209843
<rdar://problem/61069603>

Reviewed by Brent Fulgham.

* dom/Element.cpp:
(WebCore::Element::addShadowRoot):
* dom/ShadowRoot.h:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@259353 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index d8735a8..5180137 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,15 @@
+2020-04-01  Jer Noble  <jer.noble@apple.com>
+
+        Don't use raw pointers in ShadowRoot.
+        https://bugs.webkit.org/show_bug.cgi?id=209843
+        <rdar://problem/61069603>
+
+        Reviewed by Brent Fulgham.
+
+        * dom/Element.cpp:
+        (WebCore::Element::addShadowRoot):
+        * dom/ShadowRoot.h:
+
 2020-04-01  Jack Lee  <shihchieh_lee@apple.com>
 
         Notify accessibility when a node is removed from its ancestor.
diff --git a/Source/WebCore/dom/Element.cpp b/Source/WebCore/dom/Element.cpp
index 60bfc71..6002c3d 100644
--- a/Source/WebCore/dom/Element.cpp
+++ b/Source/WebCore/dom/Element.cpp
@@ -2291,7 +2291,7 @@
 
         ensureElementRareData().setShadowRoot(WTFMove(newShadowRoot));
 
-        shadowRoot.setHost(this);
+        shadowRoot.setHost(makeWeakPtr<Element>(this));
         shadowRoot.setParentTreeScope(treeScope());
 
 #if ASSERT_ENABLED
diff --git a/Source/WebCore/dom/ShadowRoot.h b/Source/WebCore/dom/ShadowRoot.h
index dbe16a7..b0c9dc1 100644
--- a/Source/WebCore/dom/ShadowRoot.h
+++ b/Source/WebCore/dom/ShadowRoot.h
@@ -71,8 +71,8 @@
     bool containsFocusedElement() const { return m_containsFocusedElement; }
     void setContainsFocusedElement(bool flag) { m_containsFocusedElement = flag; }
 
-    Element* host() const { return m_host; }
-    void setHost(Element* host) { m_host = host; }
+    Element* host() const { return m_host.get(); }
+    void setHost(WeakPtr<Element>&& host) { m_host = WTFMove(host); }
 
     String innerHTML() const;
     ExceptionOr<void> setInnerHTML(const String&);
@@ -130,7 +130,7 @@
     bool m_containsFocusedElement { false };
     ShadowRootMode m_type { ShadowRootMode::UserAgent };
 
-    Element* m_host { nullptr };
+    WeakPtr<Element> m_host;
     RefPtr<StyleSheetList> m_styleSheetList;
 
     std::unique_ptr<Style::Scope> m_styleScope;