JSNodeFilterCondition.cpp [plain text]
#include "config.h"
#include "JSNodeFilterCondition.h"
#include "Document.h"
#include "Frame.h"
#include "JSNode.h"
#include "JSNodeFilter.h"
#include "NodeFilter.h"
#include "kjs_proxy.h"
namespace WebCore {
JSNodeFilterCondition::JSNodeFilterCondition(KJS::JSObject* filter)
: m_filter(filter)
{
}
void JSNodeFilterCondition::mark()
{
m_filter->mark();
}
short JSNodeFilterCondition::acceptNode(Node* filterNode) const
{
Node* node = filterNode;
Frame* frame = node->document()->frame();
KJSProxy* proxy = frame->scriptProxy();
if (proxy && m_filter->implementsCall()) {
KJS::JSLock lock;
KJS::ExecState* exec = proxy->globalObject()->globalExec();
KJS::List args;
args.append(toJS(exec, node));
KJS::JSObject* obj = m_filter;
KJS::JSValue* result = obj->call(exec, obj, args);
return result->toInt32(exec);
}
return NodeFilter::FILTER_REJECT;
}
}