Changeset 124276 in webkit


Ignore:
Timestamp:
Jul 31, 2012 5:44:18 PM (12 years ago)
Author:
tony@chromium.org
Message:

-webkit-order should take an integer, not a number
https://bugs.webkit.org/show_bug.cgi?id=92688

Reviewed by Ojan Vafai.

Source/WebCore:

The spec changed back from floats to integers:
http://lists.w3.org/Archives/Public/www-style/2012Jul/0607.html

Tests: css3/flexbox/css-properties.html: Updated.

css3/flexbox/flex-order.html: Test cases modified.

  • css/CSSComputedStyleDeclaration.cpp:

(WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

  • css/CSSParser.cpp:

(WebCore::CSSParser::parseValue):

  • css/StyleBuilder.cpp:

(WebCore::StyleBuilder::StyleBuilder):

  • rendering/RenderFlexibleBox.cpp:

(WebCore):
(RenderFlexibleBox::OrderHashTraits):
(WebCore::RenderFlexibleBox::OrderHashTraits::emptyValue):
(WebCore::RenderFlexibleBox::OrderHashTraits::constructDeletedValue):
(WebCore::RenderFlexibleBox::OrderHashTraits::isDeletedValue):
(RenderFlexibleBox::OrderIterator):

  • rendering/RenderFlexibleBox.h:
  • rendering/style/RenderStyle.h:
  • rendering/style/StyleRareNonInheritedData.h:

(StyleRareNonInheritedData):

LayoutTests:

Update tests.

  • css3/flexbox/css-properties-expected.txt:
  • css3/flexbox/css-properties.html:
  • css3/flexbox/flex-order.html:
Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r124258 r124276  
     12012-07-31  Tony Chang  <tony@chromium.org>
     2
     3        -webkit-order should take an integer, not a number
     4        https://bugs.webkit.org/show_bug.cgi?id=92688
     5
     6        Reviewed by Ojan Vafai.
     7
     8        Update tests.
     9
     10        * css3/flexbox/css-properties-expected.txt:
     11        * css3/flexbox/css-properties.html:
     12        * css3/flexbox/flex-order.html:
     13
    1142012-07-31  Luke Macpherson   <macpherson@chromium.org>
    215
  • trunk/LayoutTests/css3/flexbox/css-properties-expected.txt

    r121026 r124276  
    1414PASS flexitem.style.webkitOrder is "0"
    1515PASS flexitem.style.webkitOrder is "0"
    16 PASS flexitem.style.webkitOrder is "1.5"
     16PASS flexitem.style.webkitOrder is "0"
    1717PASS flexitem.style.webkitOrder is ""
    1818PASS flexbox.style.webkitJustifyContent is ""
  • trunk/LayoutTests/css3/flexbox/css-properties.html

    r121026 r124276  
    4141shouldBeEqualToString('flexitem.style.webkitOrder', '0');
    4242
     43// -webkit-order must be an integer.
     44flexitem.style.webkitOrder = 1.5;
     45shouldBeEqualToString('flexitem.style.webkitOrder', '0');
     46
    4347flexitem.style.webkitOrder = "test";
    4448shouldBeEqualToString('flexitem.style.webkitOrder', '0');
    45 
    46 flexitem.style.webkitOrder = 1.5;
    47 shouldBeEqualToString('flexitem.style.webkitOrder', '1.5');
    4849
    4950flexitem.style.webkitOrder = '';
  • trunk/LayoutTests/css3/flexbox/flex-order.html

    r120100 r124276  
    7373</div>
    7474
    75 <!-- Decimal numbers are OK. -->
     75<!-- Floating numbers are ignored and we use the default of 1 instead. -->
    7676<div class="horizontal-box">
    77   <div class="fourth" style="-webkit-order: 2.5"></div>
    78   <div class="third"  style="-webkit-order: 1.1"></div>
    79   <div class="first"  style="-webkit-order: -1.7"></div>
    80   <div class="second" style=""></div>
     77  <div class="second" style="-webkit-order: 2.5"></div>
     78  <div class="fourth" style="-webkit-order: 2"></div>
     79  <div class="first"  style="-webkit-order: -1"></div>
     80  <div class="third" style=""></div>
    8181</div>
    8282
     
    8888</div>
    8989
    90 <!-- Values greater than what can be stored in a float are clamped. -->
     90<!-- Values greater than what can be stored in an int are clamped from
     91     -2,147,483,646 (int min + 2) to 2,147,483,647. -->
    9192<div class="horizontal-box">
    92   <div class="third"  style="-webkit-order: 99999999999999999999999999999999999999999"></div>
    93   <div class="fourth" style="-webkit-order: 88888888888888888888888888888888888888888"></div>
     93  <div class="third"  style="-webkit-order: 4000000000"></div>
     94  <div class="fourth" style="-webkit-order: 3000000000"></div>
    9495  <div class="first"  style=""></div>
    9596  <div class="second" style="-webkit-order: 2147483646"></div>
     
    9798
    9899<div class="horizontal-box">
    99   <div class="fourth" style="-webkit-order: 4000000000"></div>
     100  <div class="second" style="-webkit-order: 4000000000"></div>
    100101  <div class="third"  style="-webkit-order: 3000000000"></div>
    101102  <div class="first"  style=""></div>
    102   <div class="second" style="-webkit-order: 2147483647"></div>
     103  <div class="fourth" style="-webkit-order: 2147483647"></div>
    103104</div>
    104105
    105106<div class="horizontal-box">
    106   <div class="first"  style="-webkit-order: -99999999999999999999999999999999999999999"></div>
    107   <div class="second" style="-webkit-order: -88888888888888888888888888888888888888888"></div>
    108   <div class="third"  style="-webkit-order: -77777777777777777777777777777777777777777"></div>
     107  <div class="third"  style="-webkit-order: -2147483645"></div>
     108  <div class="first"  style="-webkit-order: -2147483646"></div>
     109  <div class="second" style="-webkit-order: -2147483647"></div>
    109110  <div class="fourth" style=""></div>
    110111</div>
  • trunk/Source/WebCore/ChangeLog

    r124275 r124276  
     12012-07-31  Tony Chang  <tony@chromium.org>
     2
     3        -webkit-order should take an integer, not a number
     4        https://bugs.webkit.org/show_bug.cgi?id=92688
     5
     6        Reviewed by Ojan Vafai.
     7
     8        The spec changed back from floats to integers:
     9        http://lists.w3.org/Archives/Public/www-style/2012Jul/0607.html
     10
     11        Tests: css3/flexbox/css-properties.html: Updated.
     12               css3/flexbox/flex-order.html: Test cases modified.
     13
     14
     15        * css/CSSComputedStyleDeclaration.cpp:
     16        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
     17        * css/CSSParser.cpp:
     18        (WebCore::CSSParser::parseValue):
     19        * css/StyleBuilder.cpp:
     20        (WebCore::StyleBuilder::StyleBuilder):
     21        * rendering/RenderFlexibleBox.cpp:
     22        (WebCore):
     23        (RenderFlexibleBox::OrderHashTraits):
     24        (WebCore::RenderFlexibleBox::OrderHashTraits::emptyValue):
     25        (WebCore::RenderFlexibleBox::OrderHashTraits::constructDeletedValue):
     26        (WebCore::RenderFlexibleBox::OrderHashTraits::isDeletedValue):
     27        (RenderFlexibleBox::OrderIterator):
     28        * rendering/RenderFlexibleBox.h:
     29        * rendering/style/RenderStyle.h:
     30        * rendering/style/StyleRareNonInheritedData.h:
     31        (StyleRareNonInheritedData):
     32
    1332012-07-31  James Robinson  <jamesr@chromium.org>
    234
  • trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp

    r123379 r124276  
    16901690            return cssValuePool().createValue(style->justifyContent());
    16911691        case CSSPropertyWebkitOrder:
    1692             return cssValuePool().createValue(style->order());
     1692            return cssValuePool().createValue(style->order(), CSSPrimitiveValue::CSS_NUMBER);
    16931693#endif
    16941694        case CSSPropertyFloat:
  • trunk/Source/WebCore/css/CSSParser.cpp

    r124233 r124276  
    22922292        break;
    22932293    case CSSPropertyWebkitOrder:
    2294         validPrimitive = validUnit(value, FNumber);
     2294        if (validUnit(value, FInteger, CSSStrictMode)) {
     2295            // We restrict the smallest value to int min + 2 because we use int min and int min + 1 as special values in a hash set.
     2296            parsedValue = cssValuePool().createValue(max(static_cast<double>(std::numeric_limits<int>::min() + 2), value->fValue),
     2297                                                             static_cast<CSSPrimitiveValue::UnitTypes>(value->unit));
     2298            m_valueList->next();
     2299        }
    22952300        break;
    22962301#endif
  • trunk/Source/WebCore/css/StyleBuilder.cpp

    r122896 r124276  
    19971997    setPropertyHandler(CSSPropertyWebkitFlexWrap, ApplyPropertyDefault<EFlexWrap, &RenderStyle::flexWrap, EFlexWrap, &RenderStyle::setFlexWrap, EFlexWrap, &RenderStyle::initialFlexWrap>::createHandler());
    19981998    setPropertyHandler(CSSPropertyWebkitJustifyContent, ApplyPropertyDefault<EJustifyContent, &RenderStyle::justifyContent, EJustifyContent, &RenderStyle::setJustifyContent, EJustifyContent, &RenderStyle::initialJustifyContent>::createHandler());
    1999     setPropertyHandler(CSSPropertyWebkitOrder, ApplyPropertyDefault<float, &RenderStyle::order, float, &RenderStyle::setOrder, float, &RenderStyle::initialOrder>::createHandler());
     1999    setPropertyHandler(CSSPropertyWebkitOrder, ApplyPropertyDefault<int, &RenderStyle::order, int, &RenderStyle::setOrder, int, &RenderStyle::initialOrder>::createHandler());
    20002000#endif
    20012001#if ENABLE(CSS_REGIONS)
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp

    r124168 r124276  
    4040namespace WebCore {
    4141
     42// Normally, -1 and 0 are not valid in a HashSet, but these are relatively likely order: values. Instead,
     43// we make the two smallest int values invalid order: values (in the css parser code we clamp them to
     44// int min + 2).
     45struct RenderFlexibleBox::OrderHashTraits : WTF::GenericHashTraits<int> {
     46    static const bool emptyValueIsZero = false;
     47    static int emptyValue() { return std::numeric_limits<int>::min(); }
     48    static void constructDeletedValue(int& slot) { slot = std::numeric_limits<int>::min() + 1; }
     49    static bool isDeletedValue(int value) { return value == std::numeric_limits<int>::min() + 1; }
     50};
     51
    4252class RenderFlexibleBox::OrderIterator {
    4353public:
     
    90100    RenderFlexibleBox* m_flexibleBox;
    91101    RenderBox* m_currentChild;
    92     Vector<float> m_orderValues;
    93     Vector<float>::const_iterator m_orderValuesIterator;
     102    Vector<int> m_orderValues;
     103    Vector<int>::const_iterator m_orderValuesIterator;
    94104};
    95105
  • trunk/Source/WebCore/rendering/RenderFlexibleBox.h

    r123909 r124276  
    6363    };
    6464
    65     typedef HashSet<float> OrderHashSet;
     65    struct OrderHashTraits;
     66    typedef HashSet<int, DefaultHash<int>::Hash, OrderHashTraits> OrderHashSet;
    6667
    6768    class OrderIterator;
  • trunk/Source/WebCore/rendering/style/RenderStyle.h

    r123379 r124276  
    799799    EBoxPack boxPack() const { return static_cast<EBoxPack>(rareNonInheritedData->m_deprecatedFlexibleBox->pack); }
    800800
    801     float order() const { return rareNonInheritedData->m_order; }
     801    int order() const { return rareNonInheritedData->m_order; }
    802802    float flexGrow() const { return rareNonInheritedData->m_flexibleBox->m_flexGrow; }
    803803    float flexShrink() const { return rareNonInheritedData->m_flexibleBox->m_flexShrink; }
     
    12691269    void setFlexShrink(float f) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexShrink, f); }
    12701270    void setFlexBasis(Length length) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexBasis, length); }
    1271     void setOrder(float o) { SET_VAR(rareNonInheritedData, m_order, o); }
     1271    void setOrder(int o) { SET_VAR(rareNonInheritedData, m_order, o); }
    12721272    void setAlignContent(EAlignContent p) { SET_VAR(rareNonInheritedData, m_alignContent, p); }
    12731273    void setAlignItems(EAlignItems a) { SET_VAR(rareNonInheritedData, m_alignItems, a); }
     
    16111611    static float initialFlexShrink() { return 1; }
    16121612    static Length initialFlexBasis() { return Length(Auto); }
    1613     static float initialOrder() { return 0; }
     1613    static int initialOrder() { return 0; }
    16141614    static EAlignContent initialAlignContent() { return AlignContentStretch; }
    16151615    static EAlignItems initialAlignItems() { return AlignStretch; }
  • trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h

    r122773 r124276  
    147147    Color m_visitedLinkBorderBottomColor;
    148148
    149     float m_order;
     149    int m_order;
    150150
    151151    AtomicString m_flowThread;
Note: See TracChangeset for help on using the changeset viewer.