summaryrefslogtreecommitdiffstats
path: root/webkit/port
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/port')
-rw-r--r--webkit/port/bindings/v8/v8_custom.cpp39
-rw-r--r--webkit/port/bindings/v8/v8_custom.h8
2 files changed, 43 insertions, 4 deletions
diff --git a/webkit/port/bindings/v8/v8_custom.cpp b/webkit/port/bindings/v8/v8_custom.cpp
index 7b4ccdd..ecbe1b8 100644
--- a/webkit/port/bindings/v8/v8_custom.cpp
+++ b/webkit/port/bindings/v8/v8_custom.cpp
@@ -970,8 +970,47 @@ CALLBACK_FUNC_DECL(HTMLDocumentOpen) {
return args.Holder();
}
+// Document --------------------------------------------------------------------
+CALLBACK_FUNC_DECL(DocumentEvaluate) {
+ INC_STATS("DOM.Document.evaluate()");
+ Document* imp = V8Proxy::DOMWrapperToNode<Document>(args.Holder());
+ ExceptionCode ec = 0;
+ String expression = ToWebCoreString(args[0]);
+ Node* contextNode = NULL;
+ if (V8Node::HasInstance(args[1])) {
+ contextNode = V8Proxy::DOMWrapperToNode<Node>(args[1]);
+ }
+ // Find the XPath
+ XPathNSResolver* resolver = NULL;
+ if (V8XPathNSResolver::HasInstance(args[2])) {
+ resolver = V8Proxy::ToNativeObject<XPathNSResolver>(
+ V8ClassIndex::XPATHNSRESOLVER, args[2]);
+ } else if (args[2]->IsObject()) {
+ v8::Handle<v8::Object> obj = args[2]->ToObject();
+ resolver = new JSXPathNSResolver(obj);
+ } else if (!args[2]->IsNull() && !args[2]->IsUndefined()) {
+ V8Proxy::SetDOMException(TYPE_MISMATCH_ERR);
+ return v8::Handle<v8::Value>();
+ }
+ int type = ToInt32(args[3]);
+ XPathResult* inResult = NULL;
+ if (V8XPathResult::HasInstance(args[4])) {
+ inResult = V8Proxy::ToNativeObject<XPathResult>(
+ V8ClassIndex::XPATHRESULT, args[4]);
+ }
+
+ v8::TryCatch try_catch;
+ RefPtr<XPathResult> result =
+ imp->evaluate(expression, contextNode, resolver, type, inResult, ec);
+ if (try_catch.HasCaught() || ec != 0) {
+ if (!try_catch.HasCaught())
+ V8Proxy::SetDOMException(ec);
+ return v8::Handle<v8::Value>();
+ }
+ return V8Proxy::ToV8Object(V8ClassIndex::XPATHRESULT, result.get());
+}
// DOMWindow -------------------------------------------------------------------
diff --git a/webkit/port/bindings/v8/v8_custom.h b/webkit/port/bindings/v8/v8_custom.h
index 16e9359..2afbfc8 100644
--- a/webkit/port/bindings/v8/v8_custom.h
+++ b/webkit/port/bindings/v8/v8_custom.h
@@ -228,9 +228,6 @@ DECLARE_PROPERTY_ACCESSOR(DOMWindowEventHandler)
// Getter/Setter for Element event handlers
DECLARE_PROPERTY_ACCESSOR(ElementEventHandler)
-// HTMLCanvasElement
-DECLARE_CALLBACK(HTMLCanvasElementGetContext)
-
// Customized setter of src and location on HTMLFrameElement
DECLARE_PROPERTY_ACCESSOR_SETTER(HTMLFrameElementSrc)
DECLARE_PROPERTY_ACCESSOR_SETTER(HTMLFrameElementLocation)
@@ -274,7 +271,10 @@ DECLARE_CALLBACK(HTMLDocumentOpen)
// Document customized functions
DECLARE_CALLBACK(DocumentEvaluate)
-DECLARE_CALLBACK(DocumentGetCSSCanvasContext)
+DECLARE_CALLBACK(DocumentQuerySelector)
+DECLARE_CALLBACK(DocumentQuerySelectorAll)
+DECLARE_CALLBACK(DocumentFragmentQuerySelector)
+DECLARE_CALLBACK(DocumentFragmentQuerySelectorAll)
// Window customized functions
DECLARE_CALLBACK(DOMWindowAddEventListener)