Log Message
[Unforgeable] operations should not be writable as per Web IDL https://bugs.webkit.org/show_bug.cgi?id=154396 <rdar://problem/24721063>
Reviewed by Ryosuke Niwa. LayoutTests/imported/w3c: Rebaseline now that more checks are passing. * web-platform-tests/html/dom/interfaces-expected.txt: Source/WebCore: [Unforgeable] operations should not be writable as per the Web IDL specification: http://heycam.github.io/webidl/#es-operations They were currently non-configurable in WebKit but still writable. No new tests, already covered by existing test. * bindings/scripts/CodeGeneratorJS.pm: Mark [Unforgeable] operations as ReadOnly. * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: * bindings/scripts/test/GObject/WebKitDOMTestObj.h: * bindings/scripts/test/JS/JSTestObj.cpp: * bindings/scripts/test/ObjC/DOMTestObj.h: * bindings/scripts/test/ObjC/DOMTestObj.mm: * bindings/scripts/test/TestObj.idl: Add bindings test coverage for [Unforgeable].
Modified Paths
- trunk/LayoutTests/imported/w3c/ChangeLog
- trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt
- trunk/Source/WebCore/ChangeLog
- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp
- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h
- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp
- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h
- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm
- trunk/Source/WebCore/bindings/scripts/test/TestObj.idl
Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (196769 => 196770)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2016-02-18 20:18:39 UTC (rev 196770)
@@ -1,5 +1,17 @@
2016-02-18 Chris Dumez <[email protected]>
+ [Unforgeable] operations should not be writable as per Web IDL
+ https://bugs.webkit.org/show_bug.cgi?id=154396
+ <rdar://problem/24721063>
+
+ Reviewed by Ryosuke Niwa.
+
+ Rebaseline now that more checks are passing.
+
+ * web-platform-tests/html/dom/interfaces-expected.txt:
+
+2016-02-18 Chris Dumez <[email protected]>
+
Fix behavior of reflecting unsigned long IDL attributes that are limited to only non-negative numbers greater than zero
https://bugs.webkit.org/show_bug.cgi?id=154398
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt (196769 => 196770)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt 2016-02-18 20:18:39 UTC (rev 196770)
@@ -4146,11 +4146,11 @@
PASS Location interface: window.location must have own property "pathname"
PASS Location interface: window.location must have own property "search"
PASS Location interface: window.location must have own property "hash"
-FAIL Location interface: window.location must have own property "assign" assert_equals: property should be writable if and only if not unforgeable expected false but got true
+PASS Location interface: window.location must have own property "assign"
PASS Location interface: calling assign(USVString) on window.location with too few arguments must throw TypeError
-FAIL Location interface: window.location must have own property "replace" assert_equals: property should be writable if and only if not unforgeable expected false but got true
+PASS Location interface: window.location must have own property "replace"
PASS Location interface: calling replace(USVString) on window.location with too few arguments must throw TypeError
-FAIL Location interface: window.location must have own property "reload" assert_equals: property should be writable if and only if not unforgeable expected false but got true
+PASS Location interface: window.location must have own property "reload"
PASS Location interface: window.location must have own property "ancestorOrigins"
PASS PopStateEvent interface: existence and properties of interface object
PASS PopStateEvent interface object length
Modified: trunk/Source/WebCore/ChangeLog (196769 => 196770)
--- trunk/Source/WebCore/ChangeLog 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/ChangeLog 2016-02-18 20:18:39 UTC (rev 196770)
@@ -1,5 +1,31 @@
2016-02-18 Chris Dumez <[email protected]>
+ [Unforgeable] operations should not be writable as per Web IDL
+ https://bugs.webkit.org/show_bug.cgi?id=154396
+ <rdar://problem/24721063>
+
+ Reviewed by Ryosuke Niwa.
+
+ [Unforgeable] operations should not be writable as per the Web IDL specification:
+ http://heycam.github.io/webidl/#es-operations
+
+ They were currently non-configurable in WebKit but still writable.
+
+ No new tests, already covered by existing test.
+
+ * bindings/scripts/CodeGeneratorJS.pm:
+ Mark [Unforgeable] operations as ReadOnly.
+
+ * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
+ * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
+ * bindings/scripts/test/JS/JSTestObj.cpp:
+ * bindings/scripts/test/ObjC/DOMTestObj.h:
+ * bindings/scripts/test/ObjC/DOMTestObj.mm:
+ * bindings/scripts/test/TestObj.idl:
+ Add bindings test coverage for [Unforgeable].
+
+2016-02-18 Chris Dumez <[email protected]>
+
Fix behavior of reflecting unsigned long IDL attributes that are limited to only non-negative numbers greater than zero
https://bugs.webkit.org/show_bug.cgi?id=154398
Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (196769 => 196770)
--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm 2016-02-18 20:18:39 UTC (rev 196770)
@@ -699,7 +699,7 @@
# [Unforgeable] attributes should be on the instance.
# https://heycam.github.io/webidl/#Unforgeable
- return 1 if $attribute->signature->extendedAttributes->{"Unforgeable"} || $interface->extendedAttributes->{"Unforgeable"};
+ return 1 if IsUnforgeable($interface, $attribute);
# It becomes hard to reason about attributes that require security checks if we push
# them down the prototype chain, so before we do these we'll need to carefully consider
@@ -731,7 +731,7 @@
# [Unforgeable] operations should be on the instance.
# https://heycam.github.io/webidl/#Unforgeable
- return 1 if $function->signature->extendedAttributes->{"Unforgeable"} || $interface->extendedAttributes->{"Unforgeable"};
+ return 1 if IsUnforgeable($interface, $function);
return 0;
}
@@ -1397,8 +1397,7 @@
push(@$hashKeys, $name);
my @specials = ();
- push(@specials, "DontDelete") if $attribute->signature->extendedAttributes->{"Unforgeable"}
- || $interface->extendedAttributes->{"Unforgeable"};
+ push(@specials, "DontDelete") if IsUnforgeable($interface, $attribute);
# As per Web IDL specification, constructor properties on the ECMAScript global object should not be enumerable.
my $is_global_constructor = $attribute->signature->type =~ /Constructor$/;
@@ -5072,14 +5071,21 @@
return IsDOMGlobalObject($interface) || $interface->extendedAttributes->{"JSCustomNamedGetterOnPrototype"} || $interface->extendedAttributes->{"JSCustomDefineOwnPropertyOnPrototype"};
}
+sub IsUnforgeable
+{
+ my $interface = shift;
+ my $property = shift;
+
+ return $property->signature->extendedAttributes->{"Unforgeable"} || $interface->extendedAttributes->{"Unforgeable"};
+}
+
sub ComputeFunctionSpecial
{
my $interface = shift;
my $function = shift;
my @specials = ();
- push(@specials, "DontDelete") if $function->signature->extendedAttributes->{"Unforgeable"}
- || $interface->extendedAttributes->{"Unforgeable"};
+ push(@specials, ("DontDelete", "ReadOnly")) if IsUnforgeable($interface, $function);
push(@specials, "DontEnum") if $function->signature->extendedAttributes->{"NotEnumerable"};
if (IsJSBuiltin($interface, $function)) {
push(@specials, "JSC::Builtin");
Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp (196769 => 196770)
--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp 2016-02-18 20:18:39 UTC (rev 196770)
@@ -91,6 +91,7 @@
PROP_STRING_ATTR,
PROP_TEST_OBJ_ATTR,
PROP_LENIENT_TEST_OBJ_ATTR,
+ PROP_UNFORGEABLE_ATTR,
PROP_XML_OBJ_ATTR,
PROP_CREATE,
PROP_REFLECTED_STRING_ATTR,
@@ -303,6 +304,9 @@
case PROP_LENIENT_TEST_OBJ_ATTR:
g_value_set_object(value, webkit_dom_test_obj_get_lenient_test_obj_attr(self));
break;
+ case PROP_UNFORGEABLE_ATTR:
+ g_value_take_string(value, webkit_dom_test_obj_get_unforgeable_attr(self));
+ break;
case PROP_XML_OBJ_ATTR:
g_value_set_object(value, webkit_dom_test_obj_get_xml_obj_attr(self));
break;
@@ -608,6 +612,16 @@
g_object_class_install_property(
gobjectClass,
+ PROP_UNFORGEABLE_ATTR,
+ g_param_spec_string(
+ "unforgeable-attr",
+ "TestObj:unforgeable-attr",
+ "read-only gchar* TestObj:unforgeable-attr",
+ "",
+ WEBKIT_PARAM_READABLE));
+
+ g_object_class_install_property(
+ gobjectClass,
PROP_XML_OBJ_ATTR,
g_param_spec_object(
"xml-obj-attr",
@@ -1212,6 +1226,15 @@
return WebKit::kit(gobjectResult.get());
}
+glong webkit_dom_test_obj_unforgeable_method(WebKitDOMTestObj* self)
+{
+ WebCore::JSMainThreadNullState state;
+ g_return_val_if_fail(WEBKIT_DOM_IS_TEST_OBJ(self), 0);
+ WebCore::TestObj* item = WebKit::core(self);
+ glong result = item->unforgeableMethod();
+ return result;
+}
+
void webkit_dom_test_obj_method_with_enum_arg(WebKitDOMTestObj* self, WebKitDOMTestEnumType* enumArg)
{
WebCore::JSMainThreadNullState state;
@@ -1844,6 +1867,15 @@
item->setLenientTestObjAttr(convertedValue);
}
+gchar* webkit_dom_test_obj_get_unforgeable_attr(WebKitDOMTestObj* self)
+{
+ WebCore::JSMainThreadNullState state;
+ g_return_val_if_fail(WEBKIT_DOM_IS_TEST_OBJ(self), 0);
+ WebCore::TestObj* item = WebKit::core(self);
+ gchar* result = convertToUTF8String(item->unforgeableAttr());
+ return result;
+}
+
WebKitDOMTestObj* webkit_dom_test_obj_get_xml_obj_attr(WebKitDOMTestObj* self)
{
WebCore::JSMainThreadNullState state;
Modified: trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h (196769 => 196770)
--- trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h 2016-02-18 20:18:39 UTC (rev 196770)
@@ -236,6 +236,17 @@
webkit_dom_test_obj_obj_method_with_args(WebKitDOMTestObj* self, glong longArg, const gchar* strArg, WebKitDOMTestObj* objArg);
/**
+ * webkit_dom_test_obj_unforgeable_method:
+ * @self: A #WebKitDOMTestObj
+ *
+ * Returns: A #glong
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API glong
+webkit_dom_test_obj_unforgeable_method(WebKitDOMTestObj* self);
+
+/**
* webkit_dom_test_obj_method_with_enum_arg:
* @self: A #WebKitDOMTestObj
* @enumArg: A #WebKitDOMTestEnumType
@@ -892,6 +903,17 @@
webkit_dom_test_obj_set_lenient_test_obj_attr(WebKitDOMTestObj* self, WebKitDOMTestObj* value);
/**
+ * webkit_dom_test_obj_get_unforgeable_attr:
+ * @self: A #WebKitDOMTestObj
+ *
+ * Returns: A #gchar
+ *
+ * Stability: Unstable
+**/
+WEBKIT_API gchar*
+webkit_dom_test_obj_get_unforgeable_attr(WebKitDOMTestObj* self);
+
+/**
* webkit_dom_test_obj_get_xml_obj_attr:
* @self: A #WebKitDOMTestObj
*
Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (196769 => 196770)
--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp 2016-02-18 20:18:39 UTC (rev 196770)
@@ -97,6 +97,7 @@
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionLongMethodWithArgs(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethod(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethodWithArgs(JSC::ExecState*);
+JSC::EncodedJSValue JSC_HOST_CALL jsTestObjInstanceFunctionUnforgeableMethod(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithSequenceArg(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodReturningSequence(JSC::ExecState*);
JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithEnumArg(JSC::ExecState*);
@@ -212,6 +213,7 @@
void setJSTestObjTestObjAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
JSC::EncodedJSValue jsTestObjLenientTestObjAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
void setJSTestObjLenientTestObjAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestObjUnforgeableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
JSC::EncodedJSValue jsTestObjXMLObjAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
void setJSTestObjXMLObjAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
JSC::EncodedJSValue jsTestObjCreate(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
@@ -365,29 +367,30 @@
/* Hash table */
static const struct CompactHashIndex JSTestObjTableIndex[17] = {
- { 4, -1 },
+ { 5, -1 },
{ -1, -1 },
+ { 6, -1 },
{ -1, -1 },
{ -1, -1 },
{ -1, -1 },
+ { 4, -1 },
{ -1, -1 },
- { 3, -1 },
- { -1, -1 },
- { -1, -1 },
{ 1, -1 },
+ { 2, -1 },
{ 0, 16 },
{ -1, -1 },
{ -1, -1 },
{ -1, -1 },
{ -1, -1 },
{ -1, -1 },
- { 2, -1 },
+ { 3, -1 },
};
static const HashTableValue JSTestObjTableValues[] =
{
{ "TestSubObjEnabledBySetting", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestSubObjEnabledBySettingConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestSubObjEnabledBySettingConstructor) } },
+ { "unforgeableAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnforgeableAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
#if ENABLE(Condition1)
{ "conditionalAttr4", DontEnum, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr4Constructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr4Constructor) } },
#else
@@ -404,9 +407,10 @@
{ 0, 0, NoIntrinsic, { 0, 0 } },
#endif
{ "contentDocument", ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjContentDocument), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
+ { "unforgeableMethod", DontDelete | ReadOnly | JSC::Function, NoIntrinsic, { (intptr_t)static_cast<NativeFunction>(jsTestObjInstanceFunctionUnforgeableMethod), (intptr_t) (0) } },
};
-static const HashTable JSTestObjTable = { 5, 15, true, JSTestObjTableValues, JSTestObjTableIndex };
+static const HashTable JSTestObjTable = { 7, 15, true, JSTestObjTableValues, JSTestObjTableIndex };
/* Hash table for constructor */
static const HashTableValue JSTestObjConstructorTableValues[] =
@@ -744,7 +748,7 @@
{
auto* thisObject = jsCast<JSTestObj*>(object);
ASSERT_GC_OBJECT_INHERITS(thisObject, info());
- if (getStaticValueSlot<JSTestObj, Base>(state, JSTestObjTable, thisObject, propertyName, slot))
+ if (getStaticPropertySlot<JSTestObj, Base>(state, JSTestObjTable, thisObject, propertyName, slot))
return true;
return false;
}
@@ -1008,6 +1012,21 @@
}
+EncodedJSValue jsTestObjUnforgeableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+ UNUSED_PARAM(state);
+ UNUSED_PARAM(thisValue);
+ JSValue decodedThisValue = JSValue::decode(thisValue);
+ auto* castedThis = jsDynamicCast<JSTestObj*>(decodedThisValue);
+ if (UNLIKELY(!castedThis)) {
+ return throwGetterTypeError(*state, "TestObj", "unforgeableAttr");
+ }
+ auto& impl = castedThis->wrapped();
+ JSValue result = jsStringWithCache(state, impl.unforgeableAttr());
+ return JSValue::encode(result);
+}
+
+
EncodedJSValue jsTestObjXMLObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
{
UNUSED_PARAM(state);
@@ -3190,6 +3209,18 @@
return JSValue::encode(result);
}
+EncodedJSValue JSC_HOST_CALL jsTestObjInstanceFunctionUnforgeableMethod(ExecState* state)
+{
+ JSValue thisValue = state->thisValue();
+ auto castedThis = jsDynamicCast<JSTestObj*>(thisValue);
+ if (UNLIKELY(!castedThis))
+ return throwThisTypeError(*state, "TestObj", "unforgeableMethod");
+ ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
+ auto& impl = castedThis->wrapped();
+ JSValue result = jsNumber(impl.unforgeableMethod());
+ return JSValue::encode(result);
+}
+
EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithSequenceArg(ExecState* state)
{
JSValue thisValue = state->thisValue();
Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h (196769 => 196770)
--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h 2016-02-18 20:18:39 UTC (rev 196770)
@@ -74,6 +74,7 @@
@property (copy) NSString *stringAttr;
@property (strong) DOMTestObj *testObjAttr;
@property (strong) DOMTestObj *lenientTestObjAttr;
+@property (readonly, copy) NSString *unforgeableAttr;
@property (strong) DOMTestObj *XMLObjAttr;
@property BOOL create;
@property (copy) NSString *reflectedStringAttr;
@@ -140,6 +141,7 @@
- (int)longMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg;
- (DOMTestObj *)objMethod;
- (DOMTestObj *)objMethodWithArgs:(int)longArg strArg:(NSString *)strArg objArg:(DOMTestObj *)objArg;
+- (int)unforgeableMethod;
- (void)methodWithEnumArg:(DOMTestEnumType *)enumArg;
- (void)methodWithOptionalEnumArgAndDefaultValue:(DOMTestEnumType *)enumArg;
- (DOMTestObj *)methodThatRequiresAllArgsAndThrows:(NSString *)strArg objArg:(DOMTestObj *)objArg;
Modified: trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm (196769 => 196770)
--- trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm 2016-02-18 20:18:39 UTC (rev 196770)
@@ -239,6 +239,12 @@
IMPL->setLenientTestObjAttr(core(newLenientTestObjAttr));
}
+- (NSString *)unforgeableAttr
+{
+ WebCore::JSMainThreadNullState state;
+ return IMPL->unforgeableAttr();
+}
+
- (DOMTestObj *)XMLObjAttr
{
WebCore::JSMainThreadNullState state;
@@ -957,6 +963,12 @@
return kit(WTF::getPtr(IMPL->objMethodWithArgs(longArg, strArg, core(objArg))));
}
+- (int)unforgeableMethod
+{
+ WebCore::JSMainThreadNullState state;
+ return IMPL->unforgeableMethod();
+}
+
- (void)methodWithEnumArg:(DOMTestEnumType *)enumArg
{
WebCore::JSMainThreadNullState state;
Modified: trunk/Source/WebCore/bindings/scripts/test/TestObj.idl (196769 => 196770)
--- trunk/Source/WebCore/bindings/scripts/test/TestObj.idl 2016-02-18 20:14:13 UTC (rev 196769)
+++ trunk/Source/WebCore/bindings/scripts/test/TestObj.idl 2016-02-18 20:18:39 UTC (rev 196770)
@@ -58,6 +58,7 @@
attribute DOMString stringAttr;
attribute TestObj testObjAttr;
[LenientThis] attribute TestObj lenientTestObjAttr;
+ [Unforgeable] readonly attribute DOMString unforgeableAttr;
// WK_ucfirst, WK_lcfirst exceptional cases.
attribute TestObj XMLObjAttr;
@@ -92,6 +93,7 @@
long longMethodWithArgs(long longArg, DOMString strArg, TestObj objArg);
TestObj objMethod();
TestObj objMethodWithArgs(long longArg, DOMString strArg, TestObj objArg);
+ [Unforgeable] long unforgeableMethod();
void methodWithSequenceArg(sequence<ScriptProfile> sequenceArg);
sequence<ScriptProfile> methodReturningSequence(long longArg);
_______________________________________________ webkit-changes mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-changes
