Title: [137190] trunk/Source/WebCore
Revision
137190
Author
e...@webkit.org
Date
2012-12-10 11:31:23 -0800 (Mon, 10 Dec 2012)

Log Message

Caused crashes in v8.  Rolling out until abarth can fix.  See cr-issue 165136 for more info
https://bugs.webkit.org/show_bug.cgi?id=104575

Unreviewed, just rolling out r136559.


* bindings/v8/V8GCController.cpp:
* bindings/v8/V8NodeFilterCondition.cpp:
(WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
(WebCore::V8NodeFilterCondition::acceptNode):
* bindings/v8/V8NodeFilterCondition.h:
(WebCore::V8NodeFilterCondition::create):
(V8NodeFilterCondition):
* dom/NodeFilter.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (137189 => 137190)


--- trunk/Source/WebCore/ChangeLog	2012-12-10 19:29:54 UTC (rev 137189)
+++ trunk/Source/WebCore/ChangeLog	2012-12-10 19:31:23 UTC (rev 137190)
@@ -1,3 +1,19 @@
+2012-12-10  Eric Seidel  <e...@webkit.org>
+
+        Caused crashes in v8.  Rolling out until abarth can fix.  See cr-issue 165136 for more info
+        https://bugs.webkit.org/show_bug.cgi?id=104575
+
+        Unreviewed, just rolling out r136559.
+
+        * bindings/v8/V8GCController.cpp:
+        * bindings/v8/V8NodeFilterCondition.cpp:
+        (WebCore::V8NodeFilterCondition::V8NodeFilterCondition):
+        (WebCore::V8NodeFilterCondition::acceptNode):
+        * bindings/v8/V8NodeFilterCondition.h:
+        (WebCore::V8NodeFilterCondition::create):
+        (V8NodeFilterCondition):
+        * dom/NodeFilter.h:
+
 2012-12-10  Eric Carlson  <eric.carl...@apple.com>
 
         Unreviewed build fix after r137167.

Modified: trunk/Source/WebCore/bindings/v8/V8GCController.cpp (137189 => 137190)


--- trunk/Source/WebCore/bindings/v8/V8GCController.cpp	2012-12-10 19:29:54 UTC (rev 137189)
+++ trunk/Source/WebCore/bindings/v8/V8GCController.cpp	2012-12-10 19:31:23 UTC (rev 137190)
@@ -40,8 +40,6 @@
 #include "V8MessagePort.h"
 #include "V8MutationObserver.h"
 #include "V8Node.h"
-#include "V8NodeFilter.h"
-#include "V8NodeFilterCondition.h"
 #include "V8RecursionScope.h"
 #include "WrapperTypeInfo.h"
 #include <algorithm>
@@ -149,7 +147,6 @@
         WrapperTypeInfo* type = toWrapperTypeInfo(wrapper);
         void* object = toNative(wrapper);
 
-        // FIXME: Abstract this if cascade into a WrapperTypeInfo function.
         if (V8MessagePort::info.equals(type)) {
             // Mark each port as in-use if it's entangled. For simplicity's sake,
             // we assume all ports are remotely entangled, since the Chromium port
@@ -165,9 +162,6 @@
             for (HashSet<Node*>::iterator it = observedNodes.begin(); it != observedNodes.end(); ++it)
                 m_grouper.addToGroup(V8GCController::opaqueRootForGC(*it), wrapper);
 #endif // ENABLE(MUTATION_OBSERVERS)
-        } else if (V8NodeFilter::info.equals(type)) {
-            NodeFilter* filter = static_cast<NodeFilter*>(object);
-            m_grouper.addToGroup(type->opaqueRootForGC(object, wrapper), static_cast<V8NodeFilterCondition*>(filter->condition())->callback());
         } else {
             ActiveDOMObject* activeDOMObject = type->toActiveDOMObject(wrapper);
             if (activeDOMObject && activeDOMObject->hasPendingActivity())

Modified: trunk/Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp (137189 => 137190)


--- trunk/Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp	2012-12-10 19:29:54 UTC (rev 137189)
+++ trunk/Source/WebCore/bindings/v8/V8NodeFilterCondition.cpp	2012-12-10 19:31:23 UTC (rev 137190)
@@ -40,37 +40,29 @@
 
 namespace WebCore {
 
-V8NodeFilterCondition::V8NodeFilterCondition(v8::Handle<v8::Value> callback)
-    : m_callback(callback)
+V8NodeFilterCondition::V8NodeFilterCondition(v8::Handle<v8::Value> filter)
+    : m_filter(filter)
 {
-    m_callback.get().MakeWeak(this, weakCallback);
 }
 
 V8NodeFilterCondition::~V8NodeFilterCondition()
 {
 }
 
-void V8NodeFilterCondition::weakCallback(v8::Persistent<v8::Value> value, void* context)
-{
-    V8NodeFilterCondition* condition = static_cast<V8NodeFilterCondition*>(context);
-    ASSERT(condition->callback() == value);
-    condition->m_callback.clear();
-}
-
 short V8NodeFilterCondition::acceptNode(ScriptState* state, Node* node) const
 {
     ASSERT(v8::Context::InContext());
 
-    if (!m_callback->IsObject())
+    if (!m_filter->IsObject())
         return NodeFilter::FILTER_ACCEPT;
 
     v8::TryCatch exceptionCatcher;
 
     v8::Handle<v8::Function> callback;
-    if (m_callback->IsFunction())
-        callback = v8::Handle<v8::Function>::Cast(m_callback.get());
+    if (m_filter->IsFunction())
+        callback = v8::Handle<v8::Function>::Cast(m_filter.get());
     else {
-        v8::Local<v8::Value> value = m_callback->ToObject()->Get(v8::String::NewSymbol("acceptNode"));
+        v8::Local<v8::Value> value = m_filter->ToObject()->Get(v8::String::NewSymbol("acceptNode"));
         if (!value->IsFunction()) {
             throwTypeError("NodeFilter object does not have an acceptNode function");
             return NodeFilter::FILTER_REJECT;

Modified: trunk/Source/WebCore/bindings/v8/V8NodeFilterCondition.h (137189 => 137190)


--- trunk/Source/WebCore/bindings/v8/V8NodeFilterCondition.h	2012-12-10 19:29:54 UTC (rev 137189)
+++ trunk/Source/WebCore/bindings/v8/V8NodeFilterCondition.h	2012-12-10 19:31:23 UTC (rev 137190)
@@ -43,22 +43,19 @@
 
 class V8NodeFilterCondition : public NodeFilterCondition {
 public:
-    static PassRefPtr<V8NodeFilterCondition> create(v8::Handle<v8::Value> callback)
+    static PassRefPtr<V8NodeFilterCondition> create(v8::Handle<v8::Value> filter)
     {
-        return adoptRef(new V8NodeFilterCondition(callback));
+        return adoptRef(new V8NodeFilterCondition(filter));
     }
 
     virtual ~V8NodeFilterCondition();
 
-    virtual short acceptNode(ScriptState*, Node*) const OVERRIDE;
-    v8::Persistent<v8::Value> callback() const { return m_callback.get(); }
+    virtual short acceptNode(ScriptState*, Node*) const;
 
 private:
-    explicit V8NodeFilterCondition(v8::Handle<v8::Value> callback);
+    explicit V8NodeFilterCondition(v8::Handle<v8::Value> filter);
 
-    static void weakCallback(v8::Persistent<v8::Value>, void*);
-
-    ScopedPersistent<v8::Value> m_callback;
+    ScopedPersistent<v8::Value> m_filter;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/dom/NodeFilter.h (137189 => 137190)


--- trunk/Source/WebCore/dom/NodeFilter.h	2012-12-10 19:29:54 UTC (rev 137189)
+++ trunk/Source/WebCore/dom/NodeFilter.h	2012-12-10 19:31:23 UTC (rev 137190)
@@ -82,7 +82,6 @@
         short acceptNode(Node* node) const { return acceptNode(scriptStateFromNode(mainThreadNormalWorld(), node), node); }
         
         void setCondition(PassRefPtr<NodeFilterCondition> condition) { ASSERT(!m_condition); m_condition = condition; }
-        NodeFilterCondition* condition() const { return m_condition.get(); }
 
     private:
         explicit NodeFilter(PassRefPtr<NodeFilterCondition> condition) : m_condition(condition) { }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to