diff options
Diffstat (limited to 'WebCore/bindings/scripts')
9 files changed, 160 insertions, 66 deletions
diff --git a/WebCore/bindings/scripts/CodeGeneratorCPP.pm b/WebCore/bindings/scripts/CodeGeneratorCPP.pm index 6bafb1e..f9dd5f2 100644 --- a/WebCore/bindings/scripts/CodeGeneratorCPP.pm +++ b/WebCore/bindings/scripts/CodeGeneratorCPP.pm @@ -393,7 +393,9 @@ sub GenerateHeader # Destructor if ($parentName eq "WebDOMObject") { - push(@headerContent, " ~$className();\n"); + push(@headerContent, " virtual ~$className();\n"); + } else { + push(@headerContent, " virtual ~$className() { }\n"); } push(@headerContent, "\n"); diff --git a/WebCore/bindings/scripts/CodeGeneratorGObject.pm b/WebCore/bindings/scripts/CodeGeneratorGObject.pm index 5700ff7..6a1d115 100644 --- a/WebCore/bindings/scripts/CodeGeneratorGObject.pm +++ b/WebCore/bindings/scripts/CodeGeneratorGObject.pm @@ -479,23 +479,11 @@ sub EventSignalName { } sub GenerateEventListener { - my $attribute = shift; + my $name = shift; my $object = shift; my $interfaceName = shift; - # This marks event listeners in some subclasses of Element. We - # cannot add them, otherwise we'll get runtime errors because of - # duplicated signal definitions between a class and some ancestor. - - # FIXME: it would be very good to be a lot more precise in how we - # do this... - if ($attribute->signature->extendedAttributes->{"WindowEventListener"}) { - return; - } - - my $name = $attribute->signature->name; - my $domSignalName = substr($name, 2); - my $gobjectSignalName = EventSignalName($domSignalName); + my $gobjectSignalName = EventSignalName($name); my $txtInstallSignal = << "EOF"; g_signal_new("${gobjectSignalName}", @@ -510,11 +498,11 @@ sub GenerateEventListener { EOF push(@txtInstallSignals, $txtInstallSignal); - my ${listenerName} = $domSignalName . "Listener"; + my ${listenerName} = $name . "Listener"; my $txtInstallEventListener = << "EOF"; RefPtr<WebCore::GObjectEventListener> ${listenerName} = WebCore::GObjectEventListener::create(reinterpret_cast<GObject*>(object), "${gobjectSignalName}"); - coreObject->addEventListener("${domSignalName}", ${listenerName}, false); + coreObject->addEventListener("${name}", ${listenerName}, false); EOF push(@txtInstallEventListeners, $txtInstallEventListener); @@ -522,6 +510,34 @@ EOF $implIncludes{"GObjectEventListener.h"} = 1; } +my @eventSignalNames = ( + # User Interface Event types + "focus", "blur", + # Basic Event types + "load", "unload", "abort", "error", "select", "change", "submit", "reset", + "resize", "scroll", + # Mouse Event types + "click", "dblclick", "mousedown", "mouseup", + "mousemove", "mouseover", "mouseout", + # Mouse Wheel Event types + "mousewheel", + # Keyboard Event types + "keydown", "keypress", "keyup", + # -- Events not in the spec but defined in WebKit + # Media Event types, + "loadstart", "progress", "suspend", "emptied", "stalled", "play", + "loadedmetadata", "loadeddata", "waiting", "playing", "canplay", + "canplaythrough", "seeking", "seeked", "timeupdate", "ended", + "ratechange", "durationchange", "volumechange", + # Drag and Drop Event types + "drag", "dragend", "dragenter", "dragleave", "dragover", "dragstart", "drop", + # Cut and Paste Event types + "beforecut", "cut", "beforecopy", "copy", "beforepaste", "paste", + # Animations + "webkitanimationend", "webkitanimationstart", "webkitanimationiteration", + # Other + "contextmenu", "input", "invalid", "search", "selectstart"); + sub GenerateProperties { my ($object, $interfaceName, $dataNode) = @_; @@ -584,13 +600,20 @@ EOF push(@txtSetProps, $txtSetProps); foreach my $attribute (@readableProperties) { - if ($attribute->signature->type eq "EventListener") { - GenerateEventListener($attribute, $object, $interfaceName); - } else { + if ($attribute->signature->type ne "EventListener") { GenerateProperty($attribute, $interfaceName, \@writeableProperties); } } + # We need to define all the events there are in all base classes + # that implement EventTarget. For now we only care about these + # two. + if ($interfaceName eq "Node" || $interfaceName eq "DOMWindow") { + foreach my $signalName (@eventSignalNames) { + GenerateEventListener($signalName, $object, $interfaceName); + } + } + push(@cBodyPriv, "};\n\n"); $txtGetProp = << "EOF"; @@ -888,7 +911,11 @@ sub GenerateFunction { if (!$paramTypeIsPrimitive) { if ($returnType ne "void") { # TODO: return proper default result - push(@cBody, " g_return_val_if_fail($paramName, 0);\n"); + # FIXME: Temporary hack for generating a proper implementation + # of the webkit_dom_document_evaluate function (Bug-ID: 42115) + if (!(($functionName eq "webkit_dom_document_evaluate") && ($paramIDLType eq "XPathResult"))) { + push(@cBody, " g_return_val_if_fail($paramName, 0);\n"); + } } else { push(@cBody, " g_return_if_fail($paramName);\n"); } @@ -906,13 +933,18 @@ sub GenerateFunction { } elsif ($paramIDLType eq "CompareHow") { push(@cBody, " WebCore::Range::CompareHow converted_${paramName} = static_cast<WebCore::Range::CompareHow>($paramName);\n"); } elsif ($paramIsGDOMType) { - push(@cBody, " WebCore::${paramIDLType} * converted_${paramName} = WebKit::core($paramName);\n"); + push(@cBody, " WebCore::${paramIDLType} * converted_${paramName} = NULL;\n"); + push(@cBody, " if (${paramName} != NULL) {\n"); + push(@cBody, " converted_${paramName} = WebKit::core($paramName);\n"); + if ($returnType ne "void") { # TODO: return proper default result - push(@cBody, " g_return_val_if_fail(converted_${paramName}, 0);\n"); + push(@cBody, " g_return_val_if_fail(converted_${paramName}, 0);\n"); } else { - push(@cBody, " g_return_if_fail(converted_${paramName});\n"); + push(@cBody, " g_return_if_fail(converted_${paramName});\n"); } + + push(@cBody, " }\n"); } $returnParamName = "converted_".$paramName if $param->extendedAttributes->{"Return"}; } diff --git a/WebCore/bindings/scripts/CodeGeneratorV8.pm b/WebCore/bindings/scripts/CodeGeneratorV8.pm index 56838ca..028169f 100644 --- a/WebCore/bindings/scripts/CodeGeneratorV8.pm +++ b/WebCore/bindings/scripts/CodeGeneratorV8.pm @@ -762,8 +762,11 @@ END } if ($useExceptions) { - push(@implContentDecls, " $nativeType v = "); - push(@implContentDecls, "$getterString;\n"); + if ($nativeType =~ /^V8Parameter/) { + push(@implContentDecls, " " . ConvertToV8Parameter($attribute->signature, $nativeType, "v", $getterString) . ";\n"); + } else { + push(@implContentDecls, " $nativeType v = $getterString;\n"); + } push(@implContentDecls, GenerateSetDOMException(" ")); $result = "v"; $result .= ".release()" if (IsRefPtrType($returnType)); @@ -830,6 +833,8 @@ sub GenerateNormalAttrSetter my $implClassName = shift; my $interfaceName = shift; + $implIncludes{"V8BindingMacros.h"} = 1; + my $attrExt = $attribute->signature->extendedAttributes; my $conditionalString = GenerateConditionalString($attribute->signature); @@ -890,7 +895,12 @@ END push(@implContentDecls, " return;\n"); } } else { - push(@implContentDecls, " $nativeType v = " . JSValueToNative($attribute->signature, "value") . ";\n"); + my $value = JSValueToNative($attribute->signature, "value"); + if ($nativeType =~ /^V8Parameter/) { + push(@implContentDecls, " " . ConvertToV8Parameter($attribute->signature, $nativeType, "v", $value, "VOID") . "\n"); + } else { + push(@implContentDecls, " $nativeType v = $value;\n"); + } } my $result = "v"; @@ -1236,13 +1246,7 @@ END push(@implContentDecls, " }\n"); } elsif ($nativeType =~ /^V8Parameter/) { my $value = JSValueToNative($parameter, "args[$paramIndex]", BasicTypeCanFailConversion($parameter) ? "${parameterName}Ok" : undef); - if ($parameter->type eq "DOMString") { - $implIncludes{"V8BindingMacros.h"} = 1; - push(@implContentDecls, " STRING_TO_V8PARAMETER_EXCEPTION_BLOCK($nativeType, $parameterName, $value);\n"); - } else { - # Don't know how to properly check for conversion exceptions when $parameter->type is "DOMUserData" - push(@implContentDecls, " $nativeType $parameterName = $value;\n"); - } + push(@implContentDecls, " " . ConvertToV8Parameter($parameter, $nativeType, $parameterName, $value) . "\n"); } else { $implIncludes{"V8BindingMacros.h"} = 1; # For functions with "StrictTypeChecking", if an input parameter's type does not match the signature, @@ -3055,7 +3059,8 @@ my %non_wrapper_types = ( 'EventTarget' => 1, 'NodeFilter' => 1, 'EventListener' => 1, - 'IDBKey' => 1 + 'IDBKey' => 1, + 'Date' => 1 ); @@ -3316,6 +3321,25 @@ sub GetCallbackClassName return "V8$interfaceName"; } +sub ConvertToV8Parameter +{ + my $signature = shift; + my $nativeType = shift; + my $variableName = shift; + my $value = shift; + my $suffix = shift; + + die "Wrong native type passed: $nativeType" unless $nativeType =~ /^V8Parameter/; + if ($signature->type eq "DOMString") { + my $macro = "STRING_TO_V8PARAMETER_EXCEPTION_BLOCK"; + $macro .= "_$suffix" if $suffix; + return "$macro($nativeType, $variableName, $value);" + } else { + # Don't know how to properly check for conversion exceptions when $parameter->type is "DOMUserData" + return "$nativeType $variableName($value, true);"; + } +} + sub DebugPrint { my $output = shift; diff --git a/WebCore/bindings/scripts/test/CPP/WebDOMTestCallback.h b/WebCore/bindings/scripts/test/CPP/WebDOMTestCallback.h index a4d130e..91ff787 100644 --- a/WebCore/bindings/scripts/test/CPP/WebDOMTestCallback.h +++ b/WebCore/bindings/scripts/test/CPP/WebDOMTestCallback.h @@ -44,7 +44,7 @@ public: explicit WebDOMTestCallback(WebCore::TestCallback*); WebDOMTestCallback(const WebDOMTestCallback&); WebDOMTestCallback& operator=(const WebDOMTestCallback&); - ~WebDOMTestCallback(); + virtual ~WebDOMTestCallback(); bool callbackWithClass1Param(const WebDOMClass1& class1Param); bool callbackWithClass2Param(const WebDOMClass2& class2Param, const WebDOMString& strArg); diff --git a/WebCore/bindings/scripts/test/CPP/WebDOMTestInterface.h b/WebCore/bindings/scripts/test/CPP/WebDOMTestInterface.h index ca20c4e..5db5db8 100644 --- a/WebCore/bindings/scripts/test/CPP/WebDOMTestInterface.h +++ b/WebCore/bindings/scripts/test/CPP/WebDOMTestInterface.h @@ -39,7 +39,7 @@ public: explicit WebDOMTestInterface(WebCore::TestInterface*); WebDOMTestInterface(const WebDOMTestInterface&); WebDOMTestInterface& operator=(const WebDOMTestInterface&); - ~WebDOMTestInterface(); + virtual ~WebDOMTestInterface(); WebCore::TestInterface* impl() const; diff --git a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h index 2fedf41..770ce51 100644 --- a/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h +++ b/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h @@ -41,7 +41,7 @@ public: explicit WebDOMTestObj(WebCore::TestObj*); WebDOMTestObj(const WebDOMTestObj&); WebDOMTestObj& operator=(const WebDOMTestObj&); - ~WebDOMTestObj(); + virtual ~WebDOMTestObj(); enum { WEBDOM_CONST_VALUE_0 = 0, diff --git a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp index e547d35..fbe538d 100644 --- a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp +++ b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp @@ -62,8 +62,11 @@ webkit_dom_test_callback_callback_with_class1param(WebKitDOMTestCallback* self, g_return_val_if_fail(self, 0); WebCore::TestCallback * item = WebKit::core(self); g_return_val_if_fail(class1param, 0); - WebCore::Class1 * converted_class1param = WebKit::core(class1param); - g_return_val_if_fail(converted_class1param, 0); + WebCore::Class1 * converted_class1param = NULL; + if (class1param != NULL) { + converted_class1param = WebKit::core(class1param); + g_return_val_if_fail(converted_class1param, 0); + } gboolean res = item->callbackWithClass1Param(converted_class1param); return res; } @@ -76,8 +79,11 @@ webkit_dom_test_callback_callback_with_class2param(WebKitDOMTestCallback* self, WebCore::TestCallback * item = WebKit::core(self); g_return_val_if_fail(class2param, 0); g_return_val_if_fail(str_arg, 0); - WebCore::Class2 * converted_class2param = WebKit::core(class2param); - g_return_val_if_fail(converted_class2param, 0); + WebCore::Class2 * converted_class2param = NULL; + if (class2param != NULL) { + converted_class2param = WebKit::core(class2param); + g_return_val_if_fail(converted_class2param, 0); + } WTF::String converted_str_arg = WTF::String::fromUTF8(str_arg); gboolean res = item->callbackWithClass2Param(converted_class2param, converted_str_arg); return res; @@ -90,8 +96,11 @@ webkit_dom_test_callback_callback_with_non_bool_return_type(WebKitDOMTestCallbac g_return_val_if_fail(self, 0); WebCore::TestCallback * item = WebKit::core(self); g_return_val_if_fail(class3param, 0); - WebCore::Class3 * converted_class3param = WebKit::core(class3param); - g_return_val_if_fail(converted_class3param, 0); + WebCore::Class3 * converted_class3param = NULL; + if (class3param != NULL) { + converted_class3param = WebKit::core(class3param); + g_return_val_if_fail(converted_class3param, 0); + } glong res = item->callbackWithNonBoolReturnType(converted_class3param); return res; } diff --git a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp index 56c6e14..3c27b81 100644 --- a/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp +++ b/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp @@ -70,8 +70,11 @@ webkit_dom_test_obj_void_method_with_args(WebKitDOMTestObj* self, glong int_arg, g_return_if_fail(str_arg); g_return_if_fail(obj_arg); WTF::String converted_str_arg = WTF::String::fromUTF8(str_arg); - WebCore::TestObj * converted_obj_arg = WebKit::core(obj_arg); - g_return_if_fail(converted_obj_arg); + WebCore::TestObj * converted_obj_arg = NULL; + if (obj_arg != NULL) { + converted_obj_arg = WebKit::core(obj_arg); + g_return_if_fail(converted_obj_arg); + } item->voidMethodWithArgs(int_arg, converted_str_arg, converted_obj_arg); } @@ -94,8 +97,11 @@ webkit_dom_test_obj_int_method_with_args(WebKitDOMTestObj* self, glong int_arg, g_return_val_if_fail(str_arg, 0); g_return_val_if_fail(obj_arg, 0); WTF::String converted_str_arg = WTF::String::fromUTF8(str_arg); - WebCore::TestObj * converted_obj_arg = WebKit::core(obj_arg); - g_return_val_if_fail(converted_obj_arg, 0); + WebCore::TestObj * converted_obj_arg = NULL; + if (obj_arg != NULL) { + converted_obj_arg = WebKit::core(obj_arg); + g_return_val_if_fail(converted_obj_arg, 0); + } glong res = item->intMethodWithArgs(int_arg, converted_str_arg, converted_obj_arg); return res; } @@ -120,8 +126,11 @@ webkit_dom_test_obj_obj_method_with_args(WebKitDOMTestObj* self, glong int_arg, g_return_val_if_fail(str_arg, 0); g_return_val_if_fail(obj_arg, 0); WTF::String converted_str_arg = WTF::String::fromUTF8(str_arg); - WebCore::TestObj * converted_obj_arg = WebKit::core(obj_arg); - g_return_val_if_fail(converted_obj_arg, 0); + WebCore::TestObj * converted_obj_arg = NULL; + if (obj_arg != NULL) { + converted_obj_arg = WebKit::core(obj_arg); + g_return_val_if_fail(converted_obj_arg, 0); + } PassRefPtr<WebCore::TestObj> g_res = WTF::getPtr(item->objMethodWithArgs(int_arg, converted_str_arg, converted_obj_arg)); WebKitDOMTestObj* res = static_cast<WebKitDOMTestObj*>(WebKit::kit(g_res.get())); return res; @@ -136,8 +145,11 @@ webkit_dom_test_obj_method_that_requires_all_args(WebKitDOMTestObj* self, const g_return_val_if_fail(str_arg, 0); g_return_val_if_fail(obj_arg, 0); WTF::String converted_str_arg = WTF::String::fromUTF8(str_arg); - WebCore::TestObj * converted_obj_arg = WebKit::core(obj_arg); - g_return_val_if_fail(converted_obj_arg, 0); + WebCore::TestObj * converted_obj_arg = NULL; + if (obj_arg != NULL) { + converted_obj_arg = WebKit::core(obj_arg); + g_return_val_if_fail(converted_obj_arg, 0); + } PassRefPtr<WebCore::TestObj> g_res = WTF::getPtr(item->methodThatRequiresAllArgs(converted_str_arg, converted_obj_arg)); WebKitDOMTestObj* res = static_cast<WebKitDOMTestObj*>(WebKit::kit(g_res.get())); return res; @@ -152,8 +164,11 @@ webkit_dom_test_obj_method_that_requires_all_args_and_throws(WebKitDOMTestObj* s g_return_val_if_fail(str_arg, 0); g_return_val_if_fail(obj_arg, 0); WTF::String converted_str_arg = WTF::String::fromUTF8(str_arg); - WebCore::TestObj * converted_obj_arg = WebKit::core(obj_arg); - g_return_val_if_fail(converted_obj_arg, 0); + WebCore::TestObj * converted_obj_arg = NULL; + if (obj_arg != NULL) { + converted_obj_arg = WebKit::core(obj_arg); + g_return_val_if_fail(converted_obj_arg, 0); + } WebCore::ExceptionCode ec = 0; PassRefPtr<WebCore::TestObj> g_res = WTF::getPtr(item->methodThatRequiresAllArgsAndThrows(converted_str_arg, converted_obj_arg, ec)); if (ec) { @@ -172,8 +187,11 @@ webkit_dom_test_obj_serialized_value(WebKitDOMTestObj* self, WebKitDOMSerialized g_return_if_fail(self); WebCore::TestObj * item = WebKit::core(self); g_return_if_fail(serialized_arg); - WebCore::SerializedScriptValue * converted_serialized_arg = WebKit::core(serialized_arg); - g_return_if_fail(converted_serialized_arg); + WebCore::SerializedScriptValue * converted_serialized_arg = NULL; + if (serialized_arg != NULL) { + converted_serialized_arg = WebKit::core(serialized_arg); + g_return_if_fail(converted_serialized_arg); + } item->serializedValue(converted_serialized_arg); } @@ -184,8 +202,11 @@ webkit_dom_test_obj_idb_key(WebKitDOMTestObj* self, WebKitDOMIDBKey* key) g_return_if_fail(self); WebCore::TestObj * item = WebKit::core(self); g_return_if_fail(key); - WebCore::IDBKey * converted_key = WebKit::core(key); - g_return_if_fail(converted_key); + WebCore::IDBKey * converted_key = NULL; + if (key != NULL) { + converted_key = WebKit::core(key); + g_return_if_fail(converted_key); + } item->idbKey(converted_key); } @@ -470,8 +491,11 @@ webkit_dom_test_obj_set_test_obj_attr(WebKitDOMTestObj* self, WebKitDOMTestObj* g_return_if_fail(self); WebCore::TestObj * item = WebKit::core(self); g_return_if_fail(value); - WebCore::TestObj * converted_value = WebKit::core(value); - g_return_if_fail(converted_value); + WebCore::TestObj * converted_value = NULL; + if (value != NULL) { + converted_value = WebKit::core(value); + g_return_if_fail(converted_value); + } item->setTestObjAttr(converted_value); } @@ -493,8 +517,11 @@ webkit_dom_test_obj_set_xml_obj_attr(WebKitDOMTestObj* self, WebKitDOMTestObj* v g_return_if_fail(self); WebCore::TestObj * item = WebKit::core(self); g_return_if_fail(value); - WebCore::TestObj * converted_value = WebKit::core(value); - g_return_if_fail(converted_value); + WebCore::TestObj * converted_value = NULL; + if (value != NULL) { + converted_value = WebKit::core(value); + g_return_if_fail(converted_value); + } item->setXMLObjAttr(converted_value); } diff --git a/WebCore/bindings/scripts/test/TestObj.idl b/WebCore/bindings/scripts/test/TestObj.idl index a2bc89d..94f734b 100644 --- a/WebCore/bindings/scripts/test/TestObj.idl +++ b/WebCore/bindings/scripts/test/TestObj.idl @@ -50,13 +50,13 @@ module test { attribute [Reflect] DOMString reflectedStringAttr; attribute [Reflect] long reflectedIntegralAttr; attribute [Reflect] boolean reflectedBooleanAttr; - attribute [Reflect,URL] DOMString reflectedURLAttr; - attribute [Reflect,NonEmpty,URL] DOMString reflectedNonEmptyURLAttr; + attribute [Reflect, URL] DOMString reflectedURLAttr; + attribute [Reflect, NonEmpty, URL] DOMString reflectedNonEmptyURLAttr; attribute [Reflect=customContentStringAttr] DOMString reflectedStringAttr; attribute [Reflect=customContentIntegralAttr] long reflectedCustomIntegralAttr; attribute [Reflect=customContentBooleanAttr] boolean reflectedCustomBooleanAttr; - attribute [Reflect=customContentURLAttr,URL] DOMString reflectedCustomURLAttr; - attribute [Reflect=customContentNonEmptyURLAttr,NonEmpty,URL] DOMString reflectedCustomNonEmptyURLAttr; + attribute [Reflect=customContentURLAttr, URL] DOMString reflectedCustomURLAttr; + attribute [Reflect=customContentNonEmptyURLAttr, NonEmpty, URL] DOMString reflectedCustomNonEmptyURLAttr; // Methods void voidMethod(); |