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