Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(400)

Unified Diff: third_party/WebKit/Source/bindings/core/v8/V8NodeFilterCondition.cpp

Issue 2840163002: DOM: NodeIterator.filter and TreeWalker.filter should return values which were specified to createN… (Closed)
Patch Set: Move ToV8() to ToV8ForCore.h, etc. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) ||

Powered by Google App Engine
This is Rietveld 408576698