Title: [196770] trunk
Revision
196770
Author
[email protected]
Date
2016-02-18 12:18:39 -0800 (Thu, 18 Feb 2016)

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

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

Reply via email to