Index: third_party/WebKit/Source/bindings/core/v8/V8NodeFilterCondition.cpp |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8NodeFilterCondition.cpp b/third_party/WebKit/Source/bindings/core/v8/V8NodeFilterCondition.cpp |
index fc69c2eac808c6e669907d5e615d051fe12cf1e0..426dd0e441001459be2bcb7c466b83f5a3a940c7 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8NodeFilterCondition.cpp |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8NodeFilterCondition.cpp |
@@ -42,32 +42,29 @@ |
namespace blink { |
V8NodeFilterCondition::V8NodeFilterCondition(v8::Local<v8::Value> filter, |
- v8::Local<v8::Object> owner, |
ScriptState* script_state) |
- : script_state_(script_state) { |
- // ..acceptNode(..) will only dispatch m_filter if m_filter->IsObject(). |
- // We'll make sure m_filter is either usable by acceptNode or empty. |
+ : script_state_(script_state), filter_(this) { |
+ // ..acceptNode(..) will only dispatch filter_ if filter_->IsObject(). |
+ // We'll make sure filter_ is either usable by acceptNode or empty. |
// (See the fast/dom/node-filter-gc test for a case where 'empty' happens.) |
- if (!filter.IsEmpty() && filter->IsObject()) { |
- V8PrivateProperty::GetV8NodeFilterConditionFilter( |
- script_state->GetIsolate()) |
- .Set(owner, filter); |
- filter_.Set(script_state->GetIsolate(), filter); |
- filter_.SetPhantom(); |
- } |
+ if (!filter.IsEmpty() && filter->IsObject()) |
+ filter_.Set(script_state->GetIsolate(), filter.As<v8::Object>()); |
} |
V8NodeFilterCondition::~V8NodeFilterCondition() {} |
-unsigned V8NodeFilterCondition::AcceptNode( |
+DEFINE_TRACE_WRAPPERS(V8NodeFilterCondition) { |
+ visitor->TraceWrappers(filter_.Cast<v8::Value>()); |
+} |
+ |
+unsigned V8NodeFilterCondition::acceptNode( |
Node* node, |
ExceptionState& exception_state) const { |
v8::Isolate* isolate = script_state_->GetIsolate(); |
DCHECK(!script_state_->GetContext().IsEmpty()); |
v8::HandleScope handle_scope(isolate); |
- v8::Local<v8::Value> filter = filter_.NewLocal(isolate); |
+ v8::Local<v8::Object> filter = filter_.NewLocal(isolate); |
- DCHECK(filter.IsEmpty() || filter->IsObject()); |
if (filter.IsEmpty()) |
return NodeFilter::kFilterAccept; |
@@ -81,14 +78,8 @@ unsigned V8NodeFilterCondition::AcceptNode( |
callback = v8::Local<v8::Function>::Cast(filter); |
receiver = v8::Undefined(isolate); |
} else { |
- v8::Local<v8::Object> filter_object; |
- if (!filter->ToObject(script_state_->GetContext()) |
- .ToLocal(&filter_object)) { |
- exception_state.ThrowTypeError("NodeFilter is not an object"); |
- return NodeFilter::kFilterReject; |
- } |
v8::Local<v8::Value> value; |
- if (!filter_object |
+ if (!filter |
->Get(script_state_->GetContext(), |
V8AtomicString(isolate, "acceptNode")) |
.ToLocal(&value) || |