Unreviewed, rolling out r194201.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Dec 2015 19:52:25 +0000 (19:52 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Dec 2015 19:52:25 +0000 (19:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=152391

Caused crashes with GuardMalloc (Requested by ap|away on
#webkit).

Reverted changeset:

"Reduce PassRefPtr uses in dom - 2"
https://bugs.webkit.org/show_bug.cgi?id=151936
http://trac.webkit.org/changeset/194201

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@194222 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/NamedFlowCollection.cpp
Source/WebCore/dom/NodeIterator.cpp
Source/WebCore/dom/ScopedEventQueue.h
Source/WebCore/dom/StaticNodeList.h
Source/WebCore/dom/Traversal.cpp
Source/WebCore/dom/Traversal.h
Source/WebCore/dom/TreeWalker.cpp
Source/WebCore/dom/TreeWalker.h
Source/WebCore/dom/UserActionElementSet.h
Source/WebCore/dom/WebKitNamedFlow.cpp
Source/WebCore/dom/WebKitNamedFlow.h
Source/WebCore/dom/WheelEvent.cpp
Source/WebCore/dom/WheelEvent.h

index d08c7e1..5f1ad02 100644 (file)
@@ -1,3 +1,17 @@
+2015-12-17  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r194201.
+        https://bugs.webkit.org/show_bug.cgi?id=152391
+
+        Caused crashes with GuardMalloc (Requested by ap|away on
+        #webkit).
+
+        Reverted changeset:
+
+        "Reduce PassRefPtr uses in dom - 2"
+        https://bugs.webkit.org/show_bug.cgi?id=151936
+        http://trac.webkit.org/changeset/194201
+
 2015-12-17  Csaba Osztrogon√°c  <ossy@webkit.org>
 
         Fix unused parameter handling in WebGLRenderingContextBase.cp
index fbf4721..f5dbdbf 100644 (file)
@@ -1748,7 +1748,7 @@ RefPtr<TreeWalker> Document::createTreeWalker(Node* root, unsigned long whatToSh
         ec = TypeError;
         return nullptr;
     }
-    return TreeWalker::create(*root, whatToShow, WTF::move(filter));
+    return TreeWalker::create(root, whatToShow, WTF::move(filter));
 }
 
 RefPtr<TreeWalker> Document::createTreeWalker(Node* root, unsigned long whatToShow, ExceptionCode& ec)
index 24360dc..1a14db4 100644 (file)
@@ -76,7 +76,7 @@ Ref<WebKitNamedFlow> NamedFlowCollection::ensureFlowWithName(const String& flowN
         return *namedFlow;
     }
 
-    RefPtr<WebKitNamedFlow> newFlow = WebKitNamedFlow::create(*this, flowName);
+    RefPtr<WebKitNamedFlow> newFlow = WebKitNamedFlow::create(this, flowName);
     m_namedFlows.add(newFlow.get());
 
     InspectorInstrumentation::didCreateNamedFlow(document(), *newFlow);
index 038efc8..da9d023 100644 (file)
@@ -77,7 +77,7 @@ bool NodeIterator::NodePointer::moveToPrevious(Node* root)
 }
 
 NodeIterator::NodeIterator(PassRefPtr<Node> rootNode, unsigned long whatToShow, RefPtr<NodeFilter>&& filter)
-    : NodeIteratorBase(*rootNode, whatToShow, WTF::move(filter))
+    : NodeIteratorBase(rootNode, whatToShow, WTF::move(filter))
     , m_referenceNode(root(), true)
 {
     root()->document().attachNodeIterator(this);
index d76fa43..78bbc65 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <wtf/NeverDestroyed.h>
 #include <wtf/Noncopyable.h>
+#include <wtf/PassRefPtr.h>
 #include <wtf/RefPtr.h>
 #include <wtf/Vector.h>
 
index 6e342b4..2a8a0ac 100644 (file)
@@ -62,11 +62,11 @@ private:
 
 class StaticElementList final : public NodeList {
 public:
-    static Ref<StaticElementList> adopt(Vector<Ref<Element>>& elements)
+    static PassRefPtr<StaticElementList> adopt(Vector<Ref<Element>>& elements)
     {
-        Ref<StaticElementList> nodeList = adoptRef(*new StaticElementList);
+        RefPtr<StaticElementList> nodeList = adoptRef(new StaticElementList);
         nodeList->m_elements.swap(elements);
-        return nodeList;
+        return nodeList.release();
     }
 
     static Ref<StaticElementList> createEmpty()
index b5cfc84..3c4a955 100644 (file)
@@ -30,7 +30,7 @@
 
 namespace WebCore {
 
-NodeIteratorBase::NodeIteratorBase(Node& rootNode, unsigned long whatToShow, RefPtr<NodeFilter>&& nodeFilter)
+NodeIteratorBase::NodeIteratorBase(PassRefPtr<Node> rootNode, unsigned long whatToShow, RefPtr<NodeFilter>&& nodeFilter)
     : m_root(rootNode)
     , m_whatToShow(whatToShow)
     , m_filter(WTF::move(nodeFilter))
index 6ab9781..ffbd549 100644 (file)
@@ -35,17 +35,17 @@ namespace WebCore {
 
     class NodeIteratorBase {
     public:
-        Node* root() const { return &m_root; }
+        Node* root() const { return m_root.get(); }
         unsigned long whatToShow() const { return m_whatToShow; }
         NodeFilter* filter() const { return m_filter.get(); }
         bool expandEntityReferences() const { return false; }
 
     protected:
-        NodeIteratorBase(Node&, unsigned long whatToShow, RefPtr<NodeFilter>&&);
+        NodeIteratorBase(PassRefPtr<Node>, unsigned long whatToShow, RefPtr<NodeFilter>&&);
         short acceptNode(Node*) const;
 
     private:
-        Node& m_root;
+        RefPtr<Node> m_root;
         unsigned long m_whatToShow;
         RefPtr<NodeFilter> m_filter;
     };
index be16ea1..ce7f1c1 100644 (file)
 
 namespace WebCore {
 
-TreeWalker::TreeWalker(Node& rootNode, unsigned long whatToShow, RefPtr<NodeFilter>&& filter)
+TreeWalker::TreeWalker(PassRefPtr<Node> rootNode, unsigned long whatToShow, RefPtr<NodeFilter>&& filter)
     : NodeIteratorBase(rootNode, whatToShow, WTF::move(filter))
     , m_current(root())
 {
 }
 
-void TreeWalker::setCurrentNode(Node* node, ExceptionCode& ec)
+void TreeWalker::setCurrentNode(PassRefPtr<Node> node, ExceptionCode& ec)
 {
     if (!node) {
         ec = NOT_SUPPORTED_ERR;
index 1dbf5ce..795eed1 100644 (file)
@@ -37,13 +37,13 @@ namespace WebCore {
 
     class TreeWalker : public ScriptWrappable, public RefCounted<TreeWalker>, public NodeIteratorBase {
     public:
-        static Ref<TreeWalker> create(Node& rootNode, unsigned long whatToShow, RefPtr<NodeFilter>&& filter)
+        static Ref<TreeWalker> create(PassRefPtr<Node> rootNode, unsigned long whatToShow, RefPtr<NodeFilter>&& filter)
         {
             return adoptRef(*new TreeWalker(rootNode, whatToShow, WTF::move(filter)));
         }                            
 
         Node* currentNode() const { return m_current.get(); }
-        void setCurrentNode(Node*, ExceptionCode&);
+        void setCurrentNode(PassRefPtr<Node>, ExceptionCode&);
 
         Node* parentNode();
         Node* firstChild();
@@ -54,7 +54,7 @@ namespace WebCore {
         Node* nextNode();
 
     private:
-        TreeWalker(Node&, unsigned long whatToShow, RefPtr<NodeFilter>&&);
+        TreeWalker(PassRefPtr<Node>, unsigned long whatToShow, RefPtr<NodeFilter>&&);
         enum class SiblingTraversalType { Previous, Next };
         template<SiblingTraversalType> Node* traverseSiblings();
         
index eb486f0..07c77b2 100644 (file)
@@ -29,6 +29,7 @@
 #define UserActionElementSet_h
 
 #include <wtf/HashMap.h>
+#include <wtf/PassRefPtr.h>
 #include <wtf/RefPtr.h>
 
 namespace WebCore {
index 870780c..3974bf7 100644 (file)
@@ -39,7 +39,7 @@
 
 namespace WebCore {
 
-WebKitNamedFlow::WebKitNamedFlow(NamedFlowCollection& manager, const AtomicString& flowThreadName)
+WebKitNamedFlow::WebKitNamedFlow(PassRefPtr<NamedFlowCollection> manager, const AtomicString& flowThreadName)
     : m_flowThreadName(flowThreadName)
     , m_flowManager(manager)
     , m_parentFlowThread(nullptr)
@@ -49,10 +49,10 @@ WebKitNamedFlow::WebKitNamedFlow(NamedFlowCollection& manager, const AtomicStrin
 WebKitNamedFlow::~WebKitNamedFlow()
 {
     // The named flow is not "strong" referenced from anywhere at this time so it shouldn't be reused if the named flow is recreated.
-    m_flowManager.discardNamedFlow(this);
+    m_flowManager->discardNamedFlow(this);
 }
 
-Ref<WebKitNamedFlow> WebKitNamedFlow::create(NamedFlowCollection& manager, const AtomicString& flowThreadName)
+Ref<WebKitNamedFlow> WebKitNamedFlow::create(PassRefPtr<NamedFlowCollection> manager, const AtomicString& flowThreadName)
 {
     return adoptRef(*new WebKitNamedFlow(manager, flowThreadName));
 }
@@ -64,8 +64,8 @@ const AtomicString& WebKitNamedFlow::name() const
 
 bool WebKitNamedFlow::overset() const
 {
-    if (m_flowManager.document())
-        m_flowManager.document()->updateLayoutIgnorePendingStylesheets();
+    if (m_flowManager->document())
+        m_flowManager->document()->updateLayoutIgnorePendingStylesheets();
 
     // The renderer may be destroyed or created after the style update.
     // Because this is called from JS, where the wrapper keeps a reference to the NamedFlow, no guard is necessary.
@@ -92,8 +92,8 @@ static inline bool inFlowThread(RenderObject* renderer, RenderNamedFlowThread* f
 
 int WebKitNamedFlow::firstEmptyRegionIndex() const
 {
-    if (m_flowManager.document())
-        m_flowManager.document()->updateLayoutIgnorePendingStylesheets();
+    if (m_flowManager->document())
+        m_flowManager->document()->updateLayoutIgnorePendingStylesheets();
 
     if (!m_parentFlowThread)
         return -1;
@@ -117,13 +117,13 @@ int WebKitNamedFlow::firstEmptyRegionIndex() const
     return -1;
 }
 
-Ref<NodeList> WebKitNamedFlow::getRegionsByContent(Node* contentNode)
+PassRefPtr<NodeList> WebKitNamedFlow::getRegionsByContent(Node* contentNode)
 {
     if (!contentNode)
         return StaticElementList::createEmpty();
 
-    if (m_flowManager.document())
-        m_flowManager.document()->updateLayoutIgnorePendingStylesheets();
+    if (m_flowManager->document())
+        m_flowManager->document()->updateLayoutIgnorePendingStylesheets();
 
     // The renderer may be destroyed or created after the style update.
     // Because this is called from JS, where the wrapper keeps a reference to the NamedFlow, no guard is necessary.
@@ -151,10 +151,10 @@ Ref<NodeList> WebKitNamedFlow::getRegionsByContent(Node* contentNode)
     return StaticElementList::adopt(regionElements);
 }
 
-Ref<NodeList> WebKitNamedFlow::getRegions()
+PassRefPtr<NodeList> WebKitNamedFlow::getRegions()
 {
-    if (m_flowManager.document())
-        m_flowManager.document()->updateLayoutIgnorePendingStylesheets();
+    if (m_flowManager->document())
+        m_flowManager->document()->updateLayoutIgnorePendingStylesheets();
 
     // The renderer may be destroyed or created after the style update.
     // Because this is called from JS, where the wrapper keeps a reference to the NamedFlow, no guard is necessary.
@@ -178,10 +178,10 @@ Ref<NodeList> WebKitNamedFlow::getRegions()
     return StaticElementList::adopt(regionElements);
 }
 
-Ref<NodeList> WebKitNamedFlow::getContent()
+PassRefPtr<NodeList> WebKitNamedFlow::getContent()
 {
-    if (m_flowManager.document())
-        m_flowManager.document()->updateLayoutIgnorePendingStylesheets();
+    if (m_flowManager->document())
+        m_flowManager->document()->updateLayoutIgnorePendingStylesheets();
 
     // The renderer may be destroyed or created after the style update.
     // Because this is called from JS, where the wrapper keeps a reference to the NamedFlow, no guard is necessary.
@@ -216,17 +216,17 @@ void WebKitNamedFlow::dispatchRegionOversetChangeEvent()
     if (flowState() == FlowStateNull)
         return;
 
-    dispatchEvent(UIEvent::create(eventNames().webkitregionoversetchangeEvent, false, false, m_flowManager.document()->defaultView(), 0));
+    dispatchEvent(UIEvent::create(eventNames().webkitregionoversetchangeEvent, false, false, m_flowManager->document()->defaultView(), 0));
 }
 
 ScriptExecutionContext* WebKitNamedFlow::scriptExecutionContext() const
 {
-    return m_flowManager.document();
+    return m_flowManager->document();
 }
 
 Node* WebKitNamedFlow::ownerNode() const
 {
-    return m_flowManager.document();
+    return m_flowManager->document();
 }
 
 } // namespace WebCore
index 822ee0d..ff8611d 100644 (file)
@@ -48,16 +48,16 @@ class ScriptExecutionContext;
 
 class WebKitNamedFlow final : public RefCounted<WebKitNamedFlow>, public EventTargetWithInlineData {
 public:
-    static Ref<WebKitNamedFlow> create(NamedFlowCollection& manager, const AtomicString& flowThreadName);
+    static Ref<WebKitNamedFlow> create(PassRefPtr<NamedFlowCollection> manager, const AtomicString& flowThreadName);
 
     ~WebKitNamedFlow();
 
     const AtomicString& name() const;
     bool overset() const;
     int firstEmptyRegionIndex() const;
-    Ref<NodeList> getRegionsByContent(Node*);
-    Ref<NodeList> getRegions();
-    Ref<NodeList> getContent();
+    PassRefPtr<NodeList> getRegionsByContent(Node*);
+    PassRefPtr<NodeList> getRegions();
+    PassRefPtr<NodeList> getContent();
 
     using RefCounted<WebKitNamedFlow>::ref;
     using RefCounted<WebKitNamedFlow>::deref;
@@ -81,7 +81,7 @@ public:
     void dispatchRegionOversetChangeEvent();
 
 private:
-    WebKitNamedFlow(NamedFlowCollection&, const AtomicString&);
+    WebKitNamedFlow(PassRefPtr<NamedFlowCollection>, const AtomicString&);
 
     // EventTarget implementation.
     virtual void refEventTarget() override { ref(); }
@@ -90,7 +90,7 @@ private:
     // The name of the flow thread as specified in CSS.
     AtomicString m_flowThreadName;
 
-    NamedFlowCollection& m_flowManager;
+    RefPtr<NamedFlowCollection> m_flowManager;
     RenderNamedFlowThread* m_parentFlowThread;
 };
 
index 2044235..5310388 100644 (file)
@@ -65,7 +65,7 @@ WheelEvent::WheelEvent(const AtomicString& type, const WheelEventInit& initializ
 {
 }
 
-WheelEvent::WheelEvent(const PlatformWheelEvent& event, AbstractView* view)
+WheelEvent::WheelEvent(const PlatformWheelEvent& event, PassRefPtr<AbstractView> view)
     : MouseEvent(eventNames().wheelEvent, true, true, event.timestamp(), view, 0, event.globalPosition().x(), event.globalPosition().y(), event.position().x(), event.position().y()
 #if ENABLE(POINTER_LOCK)
                 , 0, 0
@@ -81,7 +81,7 @@ WheelEvent::WheelEvent(const PlatformWheelEvent& event, AbstractView* view)
 {
 }
 
-void WheelEvent::initWheelEvent(int rawDeltaX, int rawDeltaY, AbstractView* view, int screenX, int screenY, int pageX, int pageY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey)
+void WheelEvent::initWheelEvent(int rawDeltaX, int rawDeltaY, PassRefPtr<AbstractView> view, int screenX, int screenY, int pageX, int pageY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey)
 {
     if (dispatched())
         return;
@@ -104,7 +104,7 @@ void WheelEvent::initWheelEvent(int rawDeltaX, int rawDeltaY, AbstractView* view
     initCoordinates(IntPoint(pageX, pageY));
 }
 
-void WheelEvent::initWebKitWheelEvent(int rawDeltaX, int rawDeltaY, AbstractView* view, int screenX, int screenY, int pageX, int pageY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey)
+void WheelEvent::initWebKitWheelEvent(int rawDeltaX, int rawDeltaY, PassRefPtr<AbstractView> view, int screenX, int screenY, int pageX, int pageY, bool ctrlKey, bool altKey, bool shiftKey, bool metaKey)
 {
     initWheelEvent(rawDeltaX, rawDeltaY, view, screenX, screenY, pageX, pageY, ctrlKey, altKey, shiftKey, metaKey);
 }
index 3adb01c..37fc680 100644 (file)
@@ -64,16 +64,16 @@ public:
         return adoptRef(*new WheelEvent(type, initializer));
     }
 
-    static Ref<WheelEvent> create(const PlatformWheelEvent& event, AbstractView* view)
+    static Ref<WheelEvent> create(const PlatformWheelEvent& event, PassRefPtr<AbstractView> view)
     {
         return adoptRef(*new WheelEvent(event, view));
     }
 
-    void initWheelEvent(int rawDeltaX, int rawDeltaY, AbstractView*,
+    void initWheelEvent(int rawDeltaX, int rawDeltaY, PassRefPtr<AbstractView>,
         int screenX, int screenY, int pageX, int pageY,
         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
 
-    void initWebKitWheelEvent(int rawDeltaX, int rawDeltaY, AbstractView*,
+    void initWebKitWheelEvent(int rawDeltaX, int rawDeltaY, PassRefPtr<AbstractView>,
         int screenX, int screenY, int pageX, int pageY,
         bool ctrlKey, bool altKey, bool shiftKey, bool metaKey);
 
@@ -100,7 +100,7 @@ public:
 private:
     WheelEvent();
     WheelEvent(const AtomicString&, const WheelEventInit&);
-    WheelEvent(const PlatformWheelEvent&, AbstractView*);
+    WheelEvent(const PlatformWheelEvent&, PassRefPtr<AbstractView>);
 
     virtual bool isWheelEvent() const override;