Changeset 73564 in webkit


Ignore:
Timestamp:
Dec 8, 2010 4:37:34 PM (13 years ago)
Author:
aestes@apple.com
Message:

2010-12-08 Andy Estes <aestes@apple.com>

Reviewed by Darin Adler.

Reflected unsigned attributes should be in the range [0, 231).
https://bugs.webkit.org/show_bug.cgi?id=50472

HTML5 says that unsigned reflected attributes should be in the range
[0, 231). When a value isn't in this range, a default value (or 0)
should be returned instead. Update the JS bindings code generator to
ensure 0 is returned when a content attribute value falls outside of
this range.

Tests: bindings/scripts/test/TestObj.idl

fast/html/marquee-element.html

  • bindings/scripts/CodeGeneratorJS.pm: Return the maximum of 0 and the content attribute as a 32-bit signed int when converting a native value to an unsigned JS value.
  • bindings/scripts/test/TestObj.idl: Add a reflected unsigned attribute to test code generation.
  • bindings/scripts/test/CPP/WebDOMTestObj.cpp: Update test results.
  • bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
  • bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
  • bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
  • bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
  • bindings/scripts/test/JS/JSTestObj.h: Ditto.
  • bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
  • bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
  • bindings/scripts/test/V8/V8TestObj.cpp: Ditto.

2010-12-08 Andy Estes <aestes@apple.com>

Reviewed by Darin Adler.

Reflected unsigned attributes should be in the range [0, 231).
https://bugs.webkit.org/show_bug.cgi?id=50472

  • fast/html/marquee-element.html: Give hspace and vspace negative values and test what their corresponding IDL attributes reflect.
  • fast/html/marquee-element-expected.txt:
Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r73562 r73564  
     12010-12-08  Andy Estes  <aestes@apple.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        Reflected unsigned attributes should be in the range [0, 2^31).
     6        https://bugs.webkit.org/show_bug.cgi?id=50472
     7
     8        * fast/html/marquee-element.html: Give hspace and vspace negative values
     9        and test what their corresponding IDL attributes reflect.
     10        * fast/html/marquee-element-expected.txt:
     11
    1122010-12-08  Ryosuke Niwa  <rniwa@webkit.org>
    213
  • trunk/LayoutTests/fast/html/marquee-element-expected.txt

    r73189 r73564  
    2424"hspace" IDL attribute can be modified:
    2525PASS marquee.hspace is 20
     26"hspace" IDL attribute is 0 when content attribute is negative:
     27PASS marquee.hspace is 0
     28"hspace" IDL attribute is 0 when content attribute is too large:
     29PASS marquee.hspace is 0
    2630"loop" IDL attribute reflects content attribute:
    2731PASS marquee.loop is 3
     
    4448"vspace" IDL attribute can be modified:
    4549PASS marquee.vspace is 20
     50"vspace" IDL attribute is 0 when content attribute is negative:
     51PASS marquee.vspace is 0
     52"vspace" IDL attribute is 0 when content attribute is too large:
     53PASS marquee.vspace is 0
    4654Default "scrollAmount" value is 6:
    4755PASS marquee.scrollAmount is 6
  • trunk/LayoutTests/fast/html/marquee-element.html

    r73189 r73564  
    7070shouldBe('marquee.hspace', '20');
    7171
     72debug('"hspace" IDL attribute is 0 when content attribute is negative:');
     73testParent.innerHTML = '<marquee id="marquee" hspace="-1">test</marquee>';
     74marquee = document.getElementById('marquee');
     75shouldBe('marquee.hspace', '0');
     76
     77debug('"hspace" IDL attribute is 0 when content attribute is too large:');
     78testParent.innerHTML = '<marquee id="marquee" hspace="2147483648">test</marquee>';
     79marquee = document.getElementById('marquee');
     80shouldBe('marquee.hspace', '0');
     81
    7282debug('"loop" IDL attribute reflects content attribute:');
    7383testParent.innerHTML = '<marquee id="marquee" loop="3">test</marquee>';
     
    124134marquee.vspace=20;
    125135shouldBe('marquee.vspace', '20');
     136
     137debug('"vspace" IDL attribute is 0 when content attribute is negative:');
     138testParent.innerHTML = '<marquee id="marquee" vspace="-1">test</marquee>';
     139marquee = document.getElementById('marquee');
     140shouldBe('marquee.vspace', '0');
     141
     142debug('"vspace" IDL attribute is 0 when content attribute is too large:');
     143testParent.innerHTML = '<marquee id="marquee" vspace="2147483648">test</marquee>';
     144marquee = document.getElementById('marquee');
     145shouldBe('marquee.vspace', '0');
    126146
    127147debug('Default "scrollAmount" value is 6:');
  • trunk/WebCore/ChangeLog

    r73561 r73564  
     12010-12-08  Andy Estes  <aestes@apple.com>
     2
     3        Reviewed by Darin Adler.
     4
     5        Reflected unsigned attributes should be in the range [0, 2^31).
     6        https://bugs.webkit.org/show_bug.cgi?id=50472
     7
     8        HTML5 says that unsigned reflected attributes should be in the range
     9        [0, 2^31). When a value isn't in this range, a default value (or 0)
     10        should be returned instead. Update the JS bindings code generator to
     11        ensure 0 is returned when a content attribute value falls outside of
     12        this range.
     13
     14        Tests: bindings/scripts/test/TestObj.idl
     15               fast/html/marquee-element.html
     16
     17        * bindings/scripts/CodeGeneratorJS.pm: Return the maximum of 0 and the
     18        content attribute as a 32-bit signed int when converting a native value
     19        to an unsigned JS value.
     20        * bindings/scripts/test/TestObj.idl: Add a reflected unsigned attribute
     21        to test code generation.
     22        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Update test results.
     23        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
     24        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
     25        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
     26        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
     27        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
     28        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
     29        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
     30        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.
     31
    1322010-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>
    233
  • trunk/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r72941 r73564  
    24982498        return "jsDateOrNull(exec, $value)";
    24992499    }
     2500
     2501    if ($signature->extendedAttributes->{"Reflect"} and ($type eq "unsigned long" or $type eq "unsigned short")) {
     2502        $value =~ s/getUnsignedIntegralAttribute/getIntegralAttribute/g;
     2503        return "jsNumber(std::max(0, " . $value . "))";
     2504    }
     2505
    25002506    if ($codeGenerator->IsPrimitiveType($type) or $type eq "SVGPaintType" or $type eq "DOMTimeStamp") {
    25012507        $implIncludes{"<runtime/JSNumberCell.h>"} = 1;
  • trunk/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp

    r72728 r73564  
    282282}
    283283
     284unsigned WebDOMTestObj::reflectedUnsignedIntegralAttr() const
     285{
     286    if (!impl())
     287        return unsigned();
     288
     289    return impl()->getUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr);
     290}
     291
     292void WebDOMTestObj::setReflectedUnsignedIntegralAttr(unsigned newReflectedUnsignedIntegralAttr)
     293{
     294    if (!impl())
     295        return;
     296
     297    impl()->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, newReflectedUnsignedIntegralAttr);
     298}
     299
    284300bool WebDOMTestObj::reflectedBooleanAttr() const
    285301{
  • trunk/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.h

    r72728 r73564  
    8484    int reflectedIntegralAttr() const;
    8585    void setReflectedIntegralAttr(int);
     86    unsigned reflectedUnsignedIntegralAttr() const;
     87    void setReflectedUnsignedIntegralAttr(unsigned);
    8688    bool reflectedBooleanAttr() const;
    8789    void setReflectedBooleanAttr(bool);
  • trunk/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.cpp

    r73238 r73564  
    666666}
    667667
     668gulong
     669webkit_dom_test_obj_get_reflected_unsigned_integral_attr(WebKitDOMTestObj* self)
     670{
     671    g_return_val_if_fail(self, 0);
     672    WebCore::JSMainThreadNullState state;
     673    WebCore::TestObj * item = WebKit::core(self);
     674    gulong res = item->getUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr);
     675    return res;
     676}
     677
     678void
     679webkit_dom_test_obj_set_reflected_unsigned_integral_attr(WebKitDOMTestObj* self, gulong value)
     680{
     681    g_return_if_fail(self);
     682    WebCore::JSMainThreadNullState state;
     683    WebCore::TestObj * item = WebKit::core(self);
     684    item->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, value);
     685}
     686
    668687gboolean
    669688webkit_dom_test_obj_get_reflected_boolean_attr(WebKitDOMTestObj* self)
     
    10951114    PROP_REFLECTED_STRING_ATTR,
    10961115    PROP_REFLECTED_INTEGRAL_ATTR,
     1116    PROP_REFLECTED_UNSIGNED_INTEGRAL_ATTR,
    10971117    PROP_REFLECTED_BOOLEAN_ATTR,
    10981118    PROP_REFLECTED_URL_ATTR,
     
    11811201        break;
    11821202    }
     1203    case PROP_REFLECTED_UNSIGNED_INTEGRAL_ATTR:
     1204    {
     1205        coreSelf->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, (g_value_get_ulong(value)));
     1206        break;
     1207    }
    11831208    case PROP_REFLECTED_BOOLEAN_ATTR:
    11841209    {
     
    13551380    {
    13561381        g_value_set_long(value, coreSelf->getIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr));
     1382        break;
     1383    }
     1384    case PROP_REFLECTED_UNSIGNED_INTEGRAL_ATTR:
     1385    {
     1386        g_value_set_ulong(value, coreSelf->getUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr));
    13571387        break;
    13581388    }
     
    15951625                                                           WEBKIT_PARAM_READWRITE));
    15961626    g_object_class_install_property(gobjectClass,
     1627                                    PROP_REFLECTED_UNSIGNED_INTEGRAL_ATTR,
     1628                                    g_param_spec_ulong("reflected-unsigned-integral-attr", /* name */
     1629                                                           "test_obj_reflected-unsigned-integral-attr", /* short description */
     1630                                                           "read-write  gulong TestObj.reflected-unsigned-integral-attr", /* longer - could do with some extra doc stuff here */
     1631                                                           0, /* min */
     1632G_MAXULONG, /* max */
     16330, /* default */
     1634                                                           WEBKIT_PARAM_READWRITE));
     1635    g_object_class_install_property(gobjectClass,
    15971636                                    PROP_REFLECTED_BOOLEAN_ATTR,
    15981637                                    g_param_spec_boolean("reflected-boolean-attr", /* name */
  • trunk/WebCore/bindings/scripts/test/GObject/WebKitDOMTestObj.h

    r72728 r73564  
    209209webkit_dom_test_obj_set_reflected_integral_attr(WebKitDOMTestObj* self, glong value);
    210210
     211WEBKIT_API gulong
     212webkit_dom_test_obj_get_reflected_unsigned_integral_attr(WebKitDOMTestObj* self);
     213
     214WEBKIT_API void
     215webkit_dom_test_obj_set_reflected_unsigned_integral_attr(WebKitDOMTestObj* self, gulong value);
     216
    211217WEBKIT_API gboolean
    212218webkit_dom_test_obj_get_reflected_boolean_attr(WebKitDOMTestObj* self);
  • trunk/WebCore/bindings/scripts/test/JS/JSTestObj.cpp

    r72895 r73564  
    5656#endif
    5757
    58 static const HashTableValue JSTestObjTableValues[36] =
     58static const HashTableValue JSTestObjTableValues[37] =
    5959{
    6060    { "readOnlyIntAttr", DontDelete | ReadOnly, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyIntAttr), (intptr_t)0 THUNK_GENERATOR(0) },
     
    7272    { "reflectedStringAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t)setJSTestObjReflectedStringAttr THUNK_GENERATOR(0) },
    7373    { "reflectedIntegralAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t)setJSTestObjReflectedIntegralAttr THUNK_GENERATOR(0) },
     74    { "reflectedUnsignedIntegralAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUnsignedIntegralAttr), (intptr_t)setJSTestObjReflectedUnsignedIntegralAttr THUNK_GENERATOR(0) },
    7475    { "reflectedBooleanAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t)setJSTestObjReflectedBooleanAttr THUNK_GENERATOR(0) },
    7576    { "reflectedURLAttr", DontDelete, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t)setJSTestObjReflectedURLAttr THUNK_GENERATOR(0) },
     
    408409}
    409410
     411JSValue jsTestObjReflectedUnsignedIntegralAttr(ExecState* exec, JSValue slotBase, const Identifier&)
     412{
     413    JSTestObj* castedThis = static_cast<JSTestObj*>(asObject(slotBase));
     414    UNUSED_PARAM(exec);
     415    TestObj* imp = static_cast<TestObj*>(castedThis->impl());
     416    JSValue result = jsNumber(std::max(0, imp->getIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr)));
     417    return result;
     418}
     419
    410420JSValue jsTestObjReflectedBooleanAttr(ExecState* exec, JSValue slotBase, const Identifier&)
    411421{
     
    678688    TestObj* imp = static_cast<TestObj*>(castedThis->impl());
    679689    imp->setIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr, value.toInt32(exec));
     690}
     691
     692void setJSTestObjReflectedUnsignedIntegralAttr(ExecState* exec, JSObject* thisObject, JSValue value)
     693{
     694    JSTestObj* castedThis = static_cast<JSTestObj*>(thisObject);
     695    TestObj* imp = static_cast<TestObj*>(castedThis->impl());
     696    imp->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, value.toUInt32(exec));
    680697}
    681698
  • trunk/WebCore/bindings/scripts/test/JS/JSTestObj.h

    r72728 r73564  
    150150JSC::JSValue jsTestObjReflectedIntegralAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
    151151void setJSTestObjReflectedIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
     152JSC::JSValue jsTestObjReflectedUnsignedIntegralAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
     153void setJSTestObjReflectedUnsignedIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
    152154JSC::JSValue jsTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
    153155void setJSTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::JSValue);
  • trunk/WebCore/bindings/scripts/test/ObjC/DOMTestObj.h

    r72728 r73564  
    7676- (int)reflectedIntegralAttr;
    7777- (void)setReflectedIntegralAttr:(int)newReflectedIntegralAttr;
     78- (unsigned)reflectedUnsignedIntegralAttr;
     79- (void)setReflectedUnsignedIntegralAttr:(unsigned)newReflectedUnsignedIntegralAttr;
    7880- (BOOL)reflectedBooleanAttr;
    7981- (void)setReflectedBooleanAttr:(BOOL)newReflectedBooleanAttr;
  • trunk/WebCore/bindings/scripts/test/ObjC/DOMTestObj.mm

    r72728 r73564  
    231231}
    232232
     233- (unsigned)reflectedUnsignedIntegralAttr
     234{
     235    WebCore::JSMainThreadNullState state;
     236    return IMPL->getUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr);
     237}
     238
     239- (void)setReflectedUnsignedIntegralAttr:(unsigned)newReflectedUnsignedIntegralAttr
     240{
     241    WebCore::JSMainThreadNullState state;
     242    IMPL->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, newReflectedUnsignedIntegralAttr);
     243}
     244
    233245- (BOOL)reflectedBooleanAttr
    234246{
  • trunk/WebCore/bindings/scripts/test/TestObj.idl

    r72728 r73564  
    5252        attribute [Reflect] DOMString reflectedStringAttr;
    5353        attribute [Reflect] long reflectedIntegralAttr;
     54        attribute [Reflect] unsigned long reflectedUnsignedIntegralAttr;
    5455        attribute [Reflect] boolean reflectedBooleanAttr;
    5556        attribute [Reflect, URL] DOMString reflectedURLAttr;
  • trunk/WebCore/bindings/scripts/test/V8/V8TestObj.cpp

    r72895 r73564  
    254254    int v = toInt32(value);
    255255    imp->setIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr, v);
     256    return;
     257}
     258
     259static v8::Handle<v8::Value> reflectedUnsignedIntegralAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
     260{
     261    INC_STATS("DOM.TestObj.reflectedUnsignedIntegralAttr._get");
     262    TestObj* imp = V8TestObj::toNative(info.Holder());
     263    return v8::Integer::NewFromUnsigned(imp->getUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr));
     264}
     265
     266static void reflectedUnsignedIntegralAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
     267{
     268    INC_STATS("DOM.TestObj.reflectedUnsignedIntegralAttr._set");
     269    TestObj* imp = V8TestObj::toNative(info.Holder());
     270    unsigned v = toUInt32(value);
     271    imp->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, v);
    256272    return;
    257273}
     
    11641180    // Attribute 'reflectedIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
    11651181    {"reflectedIntegralAttr", TestObjInternal::reflectedIntegralAttrAttrGetter, TestObjInternal::reflectedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
     1182    // Attribute 'reflectedUnsignedIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
     1183    {"reflectedUnsignedIntegralAttr", TestObjInternal::reflectedUnsignedIntegralAttrAttrGetter, TestObjInternal::reflectedUnsignedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
    11661184    // Attribute 'reflectedBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect')
    11671185    {"reflectedBooleanAttr", TestObjInternal::reflectedBooleanAttrAttrGetter, TestObjInternal::reflectedBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
Note: See TracChangeset for help on using the changeset viewer.