Description
Rik Cabanier
2011-03-09 14:42:30 PST
Created attachment 85242 [details]
First pass to get the results of the other platforms
As discussed with David Hyatt Created attachment 85257 [details]
First pass to get the results of the other platforms
Created attachment 85432 [details]
test to see if the build bots can integrate my change
Attachment 85432 [details] did not pass style-queue:
Failed to run "['Tools/Scripts/check-webkit-style', '--diff-files', u'LayoutTests/ChangeLog', u'LayoutTests/plat..." exit_code: 1
Source/WebCore/ChangeLog:7: Line contains tab character. [whitespace/tab] [5]
Total errors found: 1 in 10 files
If any of these errors are false positives, please file a bug against check-webkit-style.
Created attachment 85482 [details]
First pass to get the results of the other platforms
Comment on attachment 85482 [details] First pass to get the results of the other platforms View in context: https://bugs.webkit.org/attachment.cgi?id=85482&action=review > Source/WebCore/rendering/AutoTableLayout.cpp:272 > + // if there was no remaining percent, maxWidth is invalid. > + if (!remainingPercent && maxNonPercent) > + maxWidth = intMaxForLength; This seems like a logic change... is there a test to go with it? > Source/WebCore/rendering/FixedTableLayout.cpp:239 > + float totalRawPercent = 0; Seems like this could be renamed to remove the "Raw" word. > LayoutTests/ChangeLog:8 > + * platform/mac/fast/css/percentage-non-integer-expected.txt: Missing a pixel result for the test? Created attachment 85532 [details]
Update patch. Fixed variable name per David Hyatt
Created attachment 85536 [details]
updated checksum file
Created attachment 85538 [details]
Update patch. Fixed variable name per David Hyatt + updated pixel test
Comment on attachment 85538 [details]
Update patch. Fixed variable name per David Hyatt + updated pixel test
r=me
The commit-queue encountered the following flaky tests while processing attachment 85538 [details]: animations/suspend-resume-animation.html bug 48161 (author: cmarrin@apple.com) The commit-queue is continuing to process your patch. Comment on attachment 85538 [details] Update patch. Fixed variable name per David Hyatt + updated pixel test Clearing flags on attachment: 85538 Committed r81097: <http://trac.webkit.org/changeset/81097> All reviewed patches have been landed. Closing bug. http://trac.webkit.org/changeset/81097 might have broken Leopard Intel Release (Build) I rolled this out in r81103 due to the fact it breaks the 32-bit Mac build and caused assertions failures on the Windows Debug build bot. (In reply to comment #16) > I rolled this out in r81103 due to the fact it breaks the 32-bit Mac build and caused assertions failures on the Windows Debug build bot. I found the mac leopard issue but am unable to find the windows debug issue. Where is the failure log located? Created attachment 85957 [details]
fixes for mac leopard
Created attachment 85966 [details]
Fixes for max leopard
Created attachment 85969 [details]
Fixes for max leopard
Created attachment 85971 [details]
Fixes for max leopard
Created attachment 86072 [details]
Fixed for mac 32 bit
Created attachment 86075 [details]
Fixes for mac 32bit
Comment on attachment 86075 [details] Fixes for mac 32bit View in context: https://bugs.webkit.org/attachment.cgi?id=86075&action=review > Source/WebCore/page/animation/AnimationBase.cpp:116 > + return to.blend(from, static_cast<float>(progress)); This should use narrowPrecisionToFloat() > Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp:35 > + return TranslateTransformOperation::create(Length(m_x.type()).blend(m_x, static_cast<float>(progress)), > + Length(m_y.type()).blend(m_y, static_cast<float>(progress)), > + Length(m_z.type()).blend(m_z, static_cast<float>(progress)), m_type); Ditto > Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp:41 > + return TranslateTransformOperation::create(m_x.blend(fromX, static_cast<float>(progress)), m_y.blend(fromY, static_cast<float>(progress)), m_z.blend(fromZ, static_cast<float>(progress)), m_type); Ditto Created attachment 86214 [details]
used narrowPrecisionToFloat per Simon's review notes
Comment on attachment 86214 [details] used narrowPrecisionToFloat per Simon's review notes View in context: https://bugs.webkit.org/attachment.cgi?id=86214&action=review > Source/WebCore/platform/Length.h:76 > + m_floatValue = static_cast<float>(m_floatValue*v); > + else > + m_intValue = static_cast<int>(m_intValue*v); Spaces around the * please. > Source/WebCore/platform/Length.h:170 > + if (m_isFloat) > + return !m_floatValue; > + > + return !m_intValue; Maybe slightly cleaner as return m_isFloat ? !m_floatValue : !m_intValue; > Source/WebCore/platform/Length.h:196 > + float fromPercent = from.isZero() ? 0.f : from.percent(); > + float toPercent = isZero() ? 0.f : percent(); Is the 0.f required to fix a compiler issue? If not, stick with 0. > Source/WebCore/platform/Length.h:201 > + float fromValue = from.isZero() ? 0.f : from.value(); > + float toValue = isZero() ? 0.f : value(); Ditto. > Source/WebCore/rendering/AutoTableLayout.cpp:235 > + const float epsilon = 1 / 128.0f; It's not obvious why you chose 1/128 here. Created attachment 86334 [details]
updated per Simon's review
Comment on attachment 86334 [details] updated per Simon's review >Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 80665) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,42 @@ >+2011-03-09 Rik Cabanier <cabanier@adobe.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ bug 56052: percentages are incorrectly rounded in WebKit >+ https://bugs.webkit.org/show_bug.cgi?id=56052 >+ >+ test: fast/css/percentage-non-integer.html >+ >+ * css/CSSStyleSelector.cpp: >+ (WebCore::CSSStyleSelector::applyProperty): >+ * page/PrintContext.cpp: >+ (WebCore::PrintContext::pageProperty): >+ * platform/Length.h: >+ (WebCore::Length::Length): >+ (WebCore::Length::operator*=): >+ (WebCore::Length::value): >+ (WebCore::Length::percent): >+ (WebCore::Length::setValue): >+ (WebCore::Length::calcValue): >+ (WebCore::Length::calcMinValue): >+ (WebCore::Length::isUndefined): >+ (WebCore::Length::isZero): >+ (WebCore::Length::isPositive): >+ (WebCore::Length::isNegative): >+ * rendering/AutoTableLayout.cpp: >+ (WebCore::AutoTableLayout::recalcColumn): >+ (WebCore::AutoTableLayout::computePreferredLogicalWidths): >+ (WebCore::AutoTableLayout::calcEffectiveLogicalWidth): >+ (WebCore::AutoTableLayout::layout): >+ * rendering/FixedTableLayout.cpp: >+ (WebCore::FixedTableLayout::calcWidthArray): >+ (WebCore::FixedTableLayout::layout): >+ * rendering/RenderTableSection.cpp: >+ (WebCore::RenderTableSection::addCell): >+ (WebCore::RenderTableSection::layoutRows): >+ * rendering/style/BorderData.h: >+ (WebCore::BorderData::hasBorderRadius): >+ > 2011-03-09 James Robinson <jamesr@chromium.org> > > Reviewed by Kenneth Russell. >Index: Source/WebCore/css/CSSStyleSelector.cpp >=================================================================== >--- Source/WebCore/css/CSSStyleSelector.cpp (revision 80381) >+++ Source/WebCore/css/CSSStyleSelector.cpp (working copy) >@@ -5332,8 +5332,8 @@ void CSSStyleSelector::applyProperty(int > radiusHeight = Length(pair->second()->getDoubleValue(), Percent); > else > radiusHeight = Length(max(intMinForLength, min(intMaxForLength, pair->second()->computeLengthInt(style(), m_rootElementStyle, zoomFactor))), Fixed); >- int width = radiusWidth.rawValue(); >- int height = radiusHeight.rawValue(); >+ int width = radiusWidth.value(); >+ int height = radiusHeight.value(); > if (width < 0 || height < 0) > return; > if (width == 0) >Index: Source/WebCore/page/PrintContext.cpp >=================================================================== >--- Source/WebCore/page/PrintContext.cpp (revision 80381) >+++ Source/WebCore/page/PrintContext.cpp (working copy) >@@ -282,16 +282,16 @@ String PrintContext::pageProperty(Frame* > if (!strcmp(propertyName, "margin-left")) { > if (style->marginLeft().isAuto()) > return String("auto"); >- return String::number(style->marginLeft().rawValue()); >+ return String::number(style->marginLeft().value()); > } > if (!strcmp(propertyName, "line-height")) >- return String::number(style->lineHeight().rawValue()); >+ return String::number(style->lineHeight().value()); > if (!strcmp(propertyName, "font-size")) > return String::number(style->fontDescription().computedPixelSize()); > if (!strcmp(propertyName, "font-family")) > return style->fontDescription().family().family().string(); > if (!strcmp(propertyName, "size")) >- return makeString(String::number(style->pageSize().width().rawValue()), ' ', String::number(style->pageSize().height().rawValue())); >+ return makeString(String::number(style->pageSize().width().value()), ' ', String::number(style->pageSize().height().value())); > > return makeString("pageProperty() unimplemented for: ", propertyName); > } >Index: Source/WebCore/page/animation/AnimationBase.cpp >=================================================================== >--- Source/WebCore/page/animation/AnimationBase.cpp (revision 80381) >+++ Source/WebCore/page/animation/AnimationBase.cpp (working copy) >@@ -113,7 +113,7 @@ static inline Color blendFunc(const Anim > > static inline Length blendFunc(const AnimationBase*, const Length& from, const Length& to, double progress) > { >- return to.blend(from, progress); >+ return to.blend(from, narrowPrecisionToFloat(progress)); > } > > static inline LengthSize blendFunc(const AnimationBase* anim, const LengthSize& from, const LengthSize& to, double progress) >Index: Source/WebCore/platform/Length.h >=================================================================== >--- Source/WebCore/platform/Length.h (revision 80381) >+++ Source/WebCore/platform/Length.h (working copy) >@@ -1,6 +1,7 @@ > /* > Copyright (C) 1999 Lars Knoll (knoll@kde.org) > Copyright (C) 2006, 2008 Apple Inc. All rights reserved. >+ Copyright (C) 2011 Rik Cabanier (cabanier@adobe.com) > > This library is free software; you can redistribute it and/or > modify it under the terms of the GNU Library General Public >@@ -30,7 +31,6 @@ > namespace WebCore { > > const int undefinedLength = -1; >-const int percentScaleFactor = 128; > const int intMaxForLength = 0x7ffffff; // max value for a 28-bit int > const int intMinForLength = (-0x7ffffff - 1); // min value for a 28-bit int > >@@ -52,34 +52,40 @@ public: > Length(int v, LengthType t, bool q = false) > : m_intValue(v), m_quirk(q), m_type(t), m_isFloat(false) > { >- ASSERT(t != Percent); >+ } >+ >+ Length(float v, LengthType t, bool q = false) >+ : m_floatValue(v), m_quirk(q), m_type(t), m_isFloat(true) >+ { > } > > Length(double v, LengthType t, bool q = false) >- : m_quirk(q), m_type(t), m_isFloat(false) >- { >- if (m_type == Percent) >- m_intValue = static_cast<int>(v*percentScaleFactor); >- else { >- m_isFloat = true; >- m_floatValue = static_cast<float>(v); >- } >+ : m_quirk(q), m_type(t), m_isFloat(true) >+ { >+ m_floatValue = static_cast<float>(v); > } > > bool operator==(const Length& o) const { return (getFloatValue() == o.getFloatValue()) && (m_type == o.m_type) && (m_quirk == o.m_quirk); } > bool operator!=(const Length& o) const { return (getFloatValue() != o.getFloatValue()) || (m_type != o.m_type) || (m_quirk != o.m_quirk); } > >+ const Length& operator*=(float v) >+ { >+ if (m_isFloat) >+ m_floatValue = static_cast<float>(m_floatValue * v); >+ else >+ m_intValue = static_cast<int>(m_intValue * v); >+ >+ return *this; >+ } >+ > int value() const { >- ASSERT(type() != Percent); >- return rawValue(); >+ return getIntValue(); > } > >- int rawValue() const { return getIntValue(); } >- >- double percent() const >+ float percent() const > { > ASSERT(type() == Percent); >- return static_cast<double>(rawValue()) / percentScaleFactor; >+ return getFloatValue(); > } > > LengthType type() const { return static_cast<LengthType>(m_type); } >@@ -94,18 +100,17 @@ public: > > void setValue(int value) > { >- ASSERT(!value || type() != Percent); > setValue(Fixed, value); > } > >- void setValue(LengthType t, double value) >+ void setValue(LengthType t, float value) > { > m_type = t; >- m_floatValue = static_cast<float>(value); >+ m_floatValue = value; > m_isFloat = true; > } > >- void setValue(double value) >+ void setValue(float value) > { > *this = Length(value, Fixed); > } >@@ -119,7 +124,7 @@ public: > case Percent: > if (roundPercentages) > return static_cast<int>(round(maxValue * percent() / 100.0)); >- return maxValue * rawValue() / (100 * percentScaleFactor); >+ return static_cast<int>(maxValue * percent() / 100.0); > case Auto: > return maxValue; > default: >@@ -135,7 +140,7 @@ public: > case Percent: > if (roundPercentages) > return static_cast<int>(round(maxValue * percent() / 100.0)); >- return maxValue * rawValue() / (100 * percentScaleFactor); >+ return static_cast<int>(maxValue * percent() / 100.0); > case Auto: > default: > return 0; >@@ -156,10 +161,16 @@ public: > } > } > >- bool isUndefined() const { return rawValue() == undefinedLength; } >- bool isZero() const { return !getIntValue(); } >- bool isPositive() const { return rawValue() > 0; } >- bool isNegative() const { return rawValue() < 0; } >+ bool isUndefined() const { return value() == undefinedLength; } >+ bool isZero() const >+ { >+ return m_isFloat ? !m_floatValue : !m_intValue; >+ } >+ bool isPositive() const { return getFloatValue() > 0; } >+ bool isNegative() const { return getFloatValue() < 0; } > > bool isAuto() const { return type() == Auto; } > bool isRelative() const { return type() == Relative; } >@@ -167,7 +178,7 @@ public: > bool isFixed() const { return type() == Fixed; } > bool isIntrinsicOrAuto() const { return type() == Auto || type() == MinIntrinsic || type() == Intrinsic; } > >- Length blend(const Length& from, double progress) const >+ Length blend(const Length& from, float progress) const > { > // Blend two lengths to produce a new length that is in between them. Used for animation. > if (!from.isZero() && !isZero() && from.type() != type()) >@@ -181,29 +192,25 @@ public: > resultType = from.type(); > > if (resultType == Percent) { >- double fromPercent = from.isZero() ? 0. : from.percent(); >- double toPercent = isZero() ? 0. : percent(); >+ float fromPercent = from.isZero() ? 0 : from.percent(); >+ float toPercent = isZero() ? 0 : percent(); > return Length(fromPercent + (toPercent - fromPercent) * progress, Percent); > } > >- double fromValue = from.isZero() ? 0 : from.value(); >- double toValue = isZero() ? 0 : value(); >+ float fromValue = from.isZero() ? 0 : from.value(); >+ float toValue = isZero() ? 0 : value(); > return Length(fromValue + (toValue - fromValue) * progress, resultType); > } > > private: > int getIntValue() const > { >- if (m_isFloat) >- return static_cast<int>(m_floatValue); >- return m_intValue; >+ return m_isFloat ? static_cast<int>(m_floatValue) : m_intValue; > } > > float getFloatValue() const > { >- if (m_isFloat) >- return m_floatValue; >- return m_intValue; >+ return m_isFloat ? m_floatValue : m_intValue; > } > > union { >Index: Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp >=================================================================== >--- Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp (revision 80381) >+++ Source/WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp (working copy) >@@ -21,6 +21,7 @@ > > #include "config.h" > #include "TranslateTransformOperation.h" >+#include "FloatConversion.h" > > namespace WebCore { > >@@ -30,15 +31,15 @@ PassRefPtr<TransformOperation> Translate > return this; > > if (blendToIdentity) >- return TranslateTransformOperation::create(Length(m_x.type()).blend(m_x, progress), >- Length(m_y.type()).blend(m_y, progress), >- Length(m_z.type()).blend(m_z, progress), m_type); >+ return TranslateTransformOperation::create(Length(m_x.type()).blend(m_x, narrowPrecisionToFloat(progress)), >+ Length(m_y.type()).blend(m_y, narrowPrecisionToFloat(progress)), >+ Length(m_z.type()).blend(m_z, narrowPrecisionToFloat(progress)), m_type); > > const TranslateTransformOperation* fromOp = static_cast<const TranslateTransformOperation*>(from); > Length fromX = fromOp ? fromOp->m_x : Length(m_x.type()); > Length fromY = fromOp ? fromOp->m_y : Length(m_y.type()); > Length fromZ = fromOp ? fromOp->m_z : Length(m_z.type()); >- return TranslateTransformOperation::create(m_x.blend(fromX, progress), m_y.blend(fromY, progress), m_z.blend(fromZ, progress), m_type); >+ return TranslateTransformOperation::create(m_x.blend(fromX, narrowPrecisionToFloat(progress)), m_y.blend(fromY, narrowPrecisionToFloat(progress)), m_z.blend(fromZ, narrowPrecisionToFloat(progress)), m_type); > } > > } // namespace WebCore >Index: Source/WebCore/rendering/AutoTableLayout.cpp >=================================================================== >--- Source/WebCore/rendering/AutoTableLayout.cpp (revision 80381) >+++ Source/WebCore/rendering/AutoTableLayout.cpp (working copy) >@@ -81,7 +81,7 @@ void AutoTableLayout::recalcColumn(int e > > Length cellLogicalWidth = cell->styleOrColLogicalWidth(); > // FIXME: What is this arbitrary value? >- if (cellLogicalWidth.rawValue() > 32760) >+ if (cellLogicalWidth.value() > 32760) > cellLogicalWidth.setValue(32760); > if (cellLogicalWidth.isNegative()) > cellLogicalWidth.setValue(0); >@@ -105,13 +105,13 @@ void AutoTableLayout::recalcColumn(int e > break; > case Percent: > m_hasPercent = true; >- if (cellLogicalWidth.isPositive() && (!columnLayout.logicalWidth.isPercent() || cellLogicalWidth.rawValue() > columnLayout.logicalWidth.rawValue())) >+ if (cellLogicalWidth.isPositive() && (!columnLayout.logicalWidth.isPercent() || cellLogicalWidth.value() > columnLayout.logicalWidth.value())) > columnLayout.logicalWidth = cellLogicalWidth; > break; > case Relative: > // FIXME: Need to understand this case and whether it makes sense to compare values > // which are not necessarily of the same type. >- if (cellLogicalWidth.isAuto() || (cellLogicalWidth.isRelative() && cellLogicalWidth.value() > columnLayout.logicalWidth.rawValue())) >+ if (cellLogicalWidth.isAuto() || (cellLogicalWidth.isRelative() && cellLogicalWidth.value() > columnLayout.logicalWidth.value())) > columnLayout.logicalWidth = cellLogicalWidth; > default: > break; >@@ -232,16 +232,16 @@ void AutoTableLayout::computePreferredLo > > // We substitute 0 percent by (epsilon / percentScaleFactor) percent in two places below to avoid division by zero. > // FIXME: Handle the 0% cases properly. >- const int epsilon = 1; >+ const float epsilon = 1 / 128.0f; > >- int remainingPercent = 100 * percentScaleFactor; >+ float remainingPercent = 100; > for (size_t i = 0; i < m_layoutStruct.size(); ++i) { > minWidth += m_layoutStruct[i].effectiveMinLogicalWidth; > maxWidth += m_layoutStruct[i].effectiveMaxLogicalWidth; > if (scaleColumns) { > if (m_layoutStruct[i].effectiveLogicalWidth.isPercent()) { >- int percent = min(m_layoutStruct[i].effectiveLogicalWidth.rawValue(), remainingPercent); >- float logicalWidth = static_cast<float>(m_layoutStruct[i].effectiveMaxLogicalWidth) * 100 * percentScaleFactor / max(percent, epsilon); >+ float percent = min(static_cast<float>(m_layoutStruct[i].effectiveLogicalWidth.percent()), remainingPercent); >+ float logicalWidth = static_cast<float>(m_layoutStruct[i].effectiveMaxLogicalWidth) * 100 / max(percent, epsilon); > maxPercent = max(logicalWidth, maxPercent); > remainingPercent -= percent; > } else >@@ -250,7 +250,7 @@ void AutoTableLayout::computePreferredLo > } > > if (scaleColumns) { >- maxNonPercent = maxNonPercent * 100 * percentScaleFactor / max(remainingPercent, epsilon); >+ maxNonPercent = maxNonPercent * 100 / max(remainingPercent, epsilon); > maxWidth = max(maxWidth, static_cast<int>(min(maxNonPercent, INT_MAX / 2.0f))); > maxWidth = max(maxWidth, static_cast<int>(min(maxPercent, INT_MAX / 2.0f))); > } >@@ -266,6 +266,10 @@ void AutoTableLayout::computePreferredLo > minWidth = max(minWidth, tableLogicalWidth.value()); > maxWidth = minWidth; > } >+ >+ // if there was no remaining percent, maxWidth is invalid. >+ if (!remainingPercent && maxNonPercent) >+ maxWidth = intMaxForLength; > } > > /* >@@ -300,7 +304,7 @@ int AutoTableLayout::calcEffectiveLogica > size_t lastCol = effCol; > int cellMinLogicalWidth = cell->minPreferredLogicalWidth() + spacingInRowDirection; > float cellMaxLogicalWidth = cell->maxPreferredLogicalWidth() + spacingInRowDirection; >- int totalPercent = 0; >+ float totalPercent = 0; > int spanMinLogicalWidth = 0; > float spanMaxLogicalWidth = 0; > bool allColsArePercent = true; >@@ -312,7 +316,7 @@ int AutoTableLayout::calcEffectiveLogica > Layout& columnLayout = m_layoutStruct[lastCol]; > switch (columnLayout.logicalWidth.type()) { > case Percent: >- totalPercent += columnLayout.logicalWidth.rawValue(); >+ totalPercent += columnLayout.logicalWidth.percent(); > allColsAreFixed = false; > break; > case Fixed: >@@ -339,7 +343,7 @@ int AutoTableLayout::calcEffectiveLogica > columnLayout.effectiveLogicalWidth = Length(); > allColsArePercent = false; > } else >- totalPercent += columnLayout.effectiveLogicalWidth.rawValue(); >+ totalPercent += columnLayout.effectiveLogicalWidth.percent(); > allColsAreFixed = false; > } > if (!columnLayout.emptyCellsOnly) >@@ -354,14 +358,14 @@ int AutoTableLayout::calcEffectiveLogica > > // adjust table max width if needed > if (cellLogicalWidth.isPercent()) { >- if (totalPercent > cellLogicalWidth.rawValue() || allColsArePercent) { >+ if (totalPercent > cellLogicalWidth.percent() || allColsArePercent) { > // can't satify this condition, treat as variable > cellLogicalWidth = Length(); > } else { >- maxLogicalWidth = max(maxLogicalWidth, max(spanMaxLogicalWidth, cellMaxLogicalWidth) * 100 * percentScaleFactor / cellLogicalWidth.rawValue()); >+ maxLogicalWidth = max(maxLogicalWidth, static_cast<float>(max(spanMaxLogicalWidth, cellMaxLogicalWidth) * 100 / cellLogicalWidth.percent())); > > // all non percent columns in the span get percent values to sum up correctly. >- int percentMissing = cellLogicalWidth.rawValue() - totalPercent; >+ float percentMissing = cellLogicalWidth.percent() - totalPercent; > float totalWidth = 0; > for (unsigned pos = effCol; pos < lastCol; ++pos) { > if (!m_layoutStruct[pos].effectiveLogicalWidth.isPercent()) >@@ -370,7 +374,7 @@ int AutoTableLayout::calcEffectiveLogica > > for (unsigned pos = effCol; pos < lastCol && totalWidth > 0; ++pos) { > if (!m_layoutStruct[pos].effectiveLogicalWidth.isPercent()) { >- int percent = static_cast<int>(percentMissing * static_cast<float>(m_layoutStruct[pos].effectiveMaxLogicalWidth) / totalWidth); >+ float percent = percentMissing * static_cast<float>(m_layoutStruct[pos].effectiveMaxLogicalWidth) / totalWidth; > totalWidth -= m_layoutStruct[pos].effectiveMaxLogicalWidth; > percentMissing -= percent; > if (percent > 0) >@@ -491,7 +495,7 @@ void AutoTableLayout::layout() > int numFixed = 0; > float totalAuto = 0; > float totalFixed = 0; >- int totalPercent = 0; >+ float totalPercent = 0; > int allocAuto = 0; > unsigned numAutoEmptyCellsOnly = 0; > >@@ -504,7 +508,7 @@ void AutoTableLayout::layout() > switch (logicalWidth.type()) { > case Percent: > havePercent = true; >- totalPercent += logicalWidth.rawValue(); >+ totalPercent += logicalWidth.percent(); > break; > case Relative: > totalRelative += logicalWidth.value(); >@@ -538,9 +542,9 @@ void AutoTableLayout::layout() > m_layoutStruct[i].computedLogicalWidth = cellLogicalWidth; > } > } >- if (totalPercent > 100 * percentScaleFactor) { >+ if (totalPercent > 100) { > // remove overallocated space from the last columns >- int excess = tableLogicalWidth * (totalPercent - 100 * percentScaleFactor) / (100 * percentScaleFactor); >+ int excess = tableLogicalWidth * (totalPercent - 100) / 100; > for (int i = nEffCols - 1; i >= 0; --i) { > if (m_layoutStruct[i].effectiveLogicalWidth.isPercent()) { > int cellLogicalWidth = m_layoutStruct[i].computedLogicalWidth; >@@ -607,13 +611,13 @@ void AutoTableLayout::layout() > } > > // spread over percent colums >- if (available > 0 && m_hasPercent && totalPercent < 100 * percentScaleFactor) { >+ if (available > 0 && m_hasPercent && totalPercent < 100) { > for (size_t i = 0; i < nEffCols; ++i) { > Length& logicalWidth = m_layoutStruct[i].effectiveLogicalWidth; > if (logicalWidth.isPercent()) { >- int cellLogicalWidth = available * logicalWidth.rawValue() / totalPercent; >+ int cellLogicalWidth = available * logicalWidth.percent() / totalPercent; > available -= cellLogicalWidth; >- totalPercent -= logicalWidth.rawValue(); >+ totalPercent -= logicalWidth.percent(); > m_layoutStruct[i].computedLogicalWidth += cellLogicalWidth; > if (!available || !totalPercent) > break; >Index: Source/WebCore/rendering/FixedTableLayout.cpp >=================================================================== >--- Source/WebCore/rendering/FixedTableLayout.cpp (revision 80381) >+++ Source/WebCore/rendering/FixedTableLayout.cpp (working copy) >@@ -118,7 +118,8 @@ int FixedTableLayout::calcWidthArray(int > spanInCurrentEffectiveColumn = m_table->spanOfEffCol(currentEffectiveColumn); > } > if ((w.isFixed() || w.isPercent()) && w.isPositive()) { >- m_width[currentEffectiveColumn].setValue(w.type(), w.rawValue() * spanInCurrentEffectiveColumn); >+ m_width[currentEffectiveColumn] = w; >+ m_width[currentEffectiveColumn] *= spanInCurrentEffectiveColumn; > usedWidth += effWidth * spanInCurrentEffectiveColumn; > } > span -= spanInCurrentEffectiveColumn; >@@ -164,10 +165,11 @@ int FixedTableLayout::calcWidthArray(int > int usedSpan = 0; > int i = 0; > while (usedSpan < span && cCol + i < nEffCols) { >- int eSpan = m_table->spanOfEffCol(cCol + i); >+ float eSpan = m_table->spanOfEffCol(cCol + i); > // Only set if no col element has already set it. > if (m_width[cCol + i].isAuto() && w.type() != Auto) { >- m_width[cCol + i].setValue(w.type(), w.rawValue() * eSpan / span); >+ m_width[cCol + i] = w; >+ m_width[cCol + i] *= eSpan / span; > usedWidth += effWidth * eSpan / span; > } > usedSpan += eSpan; >@@ -234,7 +236,7 @@ void FixedTableLayout::layout() > int autoSpan = 0; > int totalFixedWidth = 0; > int totalPercentWidth = 0; >- int totalRawPercent = 0; >+ float totalPercent = 0; > > // Compute requirements and try to satisfy fixed and percent widths. > // Percentages are of the table's width, so for example >@@ -247,7 +249,7 @@ void FixedTableLayout::layout() > } else if (m_width[i].isPercent()) { > calcWidth[i] = m_width[i].calcValue(tableLogicalWidth); > totalPercentWidth += calcWidth[i]; >- totalRawPercent += m_width[i].rawValue(); >+ totalPercent += m_width[i].percent(); > } else if (m_width[i].isAuto()) { > numAuto++; > autoSpan += m_table->spanOfEffCol(i); >@@ -270,11 +272,11 @@ void FixedTableLayout::layout() > } > } > } >- if (totalRawPercent) { >+ if (totalPercent) { > totalPercentWidth = 0; > for (int i = 0; i < nEffCols; i++) { > if (m_width[i].isPercent()) { >- calcWidth[i] = m_width[i].rawValue() * (tableLogicalWidth - totalFixedWidth) / totalRawPercent; >+ calcWidth[i] = m_width[i].percent() * (tableLogicalWidth - totalFixedWidth) / totalPercent; > totalPercentWidth += calcWidth[i]; > } > } >Index: Source/WebCore/rendering/RenderTableSection.cpp >=================================================================== >--- Source/WebCore/rendering/RenderTableSection.cpp (revision 80381) >+++ Source/WebCore/rendering/RenderTableSection.cpp (working copy) >@@ -199,7 +199,7 @@ void RenderTableSection::addCell(RenderT > switch (logicalHeight.type()) { > case Percent: > if (!(cRowLogicalHeight.isPercent()) || >- (cRowLogicalHeight.isPercent() && cRowLogicalHeight.rawValue() < logicalHeight.rawValue())) >+ (cRowLogicalHeight.isPercent() && cRowLogicalHeight.percent() < logicalHeight.percent())) > m_grid[m_cRow].logicalHeight = logicalHeight; > break; > case Fixed: >@@ -434,22 +434,22 @@ int RenderTableSection::layoutRows(int t > if (m_grid[r].logicalHeight.isAuto()) > numAuto++; > else if (m_grid[r].logicalHeight.isPercent()) >- totalPercent += m_grid[r].logicalHeight.rawValue(); >+ totalPercent += m_grid[r].logicalHeight.percent(); > } > if (totalPercent) { > // try to satisfy percent > int add = 0; >- totalPercent = min(totalPercent, 100 * percentScaleFactor); >+ totalPercent = min(totalPercent, 100); > int rh = m_rowPos[1] - m_rowPos[0]; > for (int r = 0; r < totalRows; r++) { > if (totalPercent > 0 && m_grid[r].logicalHeight.isPercent()) { >- int toAdd = min(dh, (totalHeight * m_grid[r].logicalHeight.rawValue() / (100 * percentScaleFactor)) - rh); >+ int toAdd = min(dh, static_cast<int>((totalHeight * m_grid[r].logicalHeight.percent() / 100) - rh)); > // If toAdd is negative, then we don't want to shrink the row (this bug > // affected Outlook Web Access). > toAdd = max(0, toAdd); > add += toAdd; > dh -= toAdd; >- totalPercent -= m_grid[r].logicalHeight.rawValue(); >+ totalPercent -= m_grid[r].logicalHeight.percent(); > } > if (r < totalRows - 1) > rh = m_rowPos[r + 2] - m_rowPos[r + 1]; >Index: Source/WebCore/rendering/style/BorderData.h >=================================================================== >--- Source/WebCore/rendering/style/BorderData.h (revision 80381) >+++ Source/WebCore/rendering/style/BorderData.h (working copy) >@@ -49,13 +49,13 @@ public: > > bool hasBorderRadius() const > { >- if (m_topLeft.width().rawValue() > 0) >+ if (!m_topLeft.width().isZero()) > return true; >- if (m_topRight.width().rawValue() > 0) >+ if (!m_topRight.width().isZero()) > return true; >- if (m_bottomLeft.width().rawValue() > 0) >+ if (!m_bottomLeft.width().isZero()) > return true; >- if (m_bottomRight.width().rawValue() > 0) >+ if (!m_bottomRight.width().isZero()) > return true; > return false; > } >Index: LayoutTests/ChangeLog >=================================================================== >--- LayoutTests/ChangeLog (revision 80665) >+++ LayoutTests/ChangeLog (working copy) >@@ -1,3 +1,12 @@ >+2011-03-09 Rik Cabanier <cabanier@gmail.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ bug 56052: percentages are incorrectly rounded in WebKit >+ https://bugs.webkit.org/show_bug.cgi?id=56052 >+ >+ * platform/mac/fast/css/percentage-non-integer-expected.txt: >+ > 2011-03-09 James Robinson <jamesr@chromium.org> > > Reviewed by Kenneth Russell. >Index: LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.checksum >=================================================================== >--- LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.checksum (revision 80381) >+++ LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.checksum (working copy) >@@ -1 +1 @@ >-414caaa2ee09823fcc6b1200d30ec127 >\ No newline at end of file >+c6d9055341a9904929ccc49476c7bd9e >\ No newline at end of file >Index: LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.txt >=================================================================== >--- LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.txt (revision 80381) >+++ LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.txt (working copy) >@@ -29,7 +29,7 @@ layer at (0,0) size 800x585 > RenderBlock {DIV} at (0,44) size 910x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,48) size 910x4 >- RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] >+ RenderBlock {DIV} at (0,0) size 101x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,52) size 900x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,56) size 890x4 >@@ -49,7 +49,7 @@ layer at (0,0) size 800x585 > RenderBlock {DIV} at (0,84) size 840x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,88) size 835x4 >- RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] >+ RenderBlock {DIV} at (0,0) size 101x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,92) size 825x4 > RenderBlock {DIV} at (0,0) size 100x4 [bgcolor=#0000007F] > RenderBlock {DIV} at (0,96) size 815x4 >@@ -84,61 +84,61 @@ layer at (8,126) size 1000x20 > RenderTable {TABLE} at (0,0) size 1000x20 > RenderTableSection {TBODY} at (0,0) size 1000x20 > RenderTableRow {TR} at (0,0) size 1000x20 >- RenderTableCell {TD} at (0,1) size 11x18 [bgcolor=#0000007F] [r=0 c=0 rs=1 cs=1] >+ RenderTableCell {TD} at (0,1) size 12x18 [bgcolor=#0000007F] [r=0 c=0 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (11,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=1 rs=1 cs=1] >+ RenderTableCell {TD} at (12,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=1 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (21,1) size 13x18 [bgcolor=#0000007F] [r=0 c=2 rs=1 cs=1] >+ RenderTableCell {TD} at (22,1) size 13x18 [bgcolor=#0000007F] [r=0 c=2 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (34,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=3 rs=1 cs=1] >+ RenderTableCell {TD} at (35,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=3 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (44,1) size 15x18 [bgcolor=#0000007F] [r=0 c=4 rs=1 cs=1] >+ RenderTableCell {TD} at (45,1) size 16x18 [bgcolor=#0000007F] [r=0 c=4 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (59,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=5 rs=1 cs=1] >+ RenderTableCell {TD} at (61,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=5 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (69,1) size 17x18 [bgcolor=#0000007F] [r=0 c=6 rs=1 cs=1] >+ RenderTableCell {TD} at (71,1) size 17x18 [bgcolor=#0000007F] [r=0 c=6 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (86,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=7 rs=1 cs=1] >+ RenderTableCell {TD} at (88,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=7 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (96,1) size 20x18 [bgcolor=#0000007F] [r=0 c=8 rs=1 cs=1] >+ RenderTableCell {TD} at (98,1) size 20x18 [bgcolor=#0000007F] [r=0 c=8 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (116,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=9 rs=1 cs=1] >+ RenderTableCell {TD} at (118,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=9 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (126,1) size 21x18 [bgcolor=#0000007F] [r=0 c=10 rs=1 cs=1] >+ RenderTableCell {TD} at (128,1) size 22x18 [bgcolor=#0000007F] [r=0 c=10 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (147,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=11 rs=1 cs=1] >+ RenderTableCell {TD} at (150,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=11 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (157,1) size 23x18 [bgcolor=#0000007F] [r=0 c=12 rs=1 cs=1] >+ RenderTableCell {TD} at (160,1) size 24x18 [bgcolor=#0000007F] [r=0 c=12 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (180,10) size 10x0 [bgcolor=#00FF007F] [r=0 c=13 rs=1 cs=1] >- RenderTableCell {TD} at (190,1) size 25x18 [bgcolor=#0000007F] [r=0 c=14 rs=1 cs=1] >+ RenderTableCell {TD} at (184,10) size 10x0 [bgcolor=#00FF007F] [r=0 c=13 rs=1 cs=1] >+ RenderTableCell {TD} at (194,1) size 25x18 [bgcolor=#0000007F] [r=0 c=14 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (215,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=15 rs=1 cs=1] >+ RenderTableCell {TD} at (219,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=15 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (225,1) size 27x18 [bgcolor=#0000007F] [r=0 c=16 rs=1 cs=1] >+ RenderTableCell {TD} at (229,1) size 27x18 [bgcolor=#0000007F] [r=0 c=16 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (252,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=17 rs=1 cs=1] >+ RenderTableCell {TD} at (256,1) size 10x18 [bgcolor=#00FF007F] [r=0 c=17 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (262,1) size 30x18 [bgcolor=#0000007F] [r=0 c=18 rs=1 cs=1] >+ RenderTableCell {TD} at (266,1) size 30x18 [bgcolor=#0000007F] [r=0 c=18 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >- RenderTableCell {TD} at (292,1) size 708x18 [r=0 c=19 rs=1 cs=1] >+ RenderTableCell {TD} at (296,1) size 704x18 [r=0 c=19 rs=1 cs=1] > RenderText {#text} at (0,0) size 4x18 > text run at (0,0) width 4: " " >Index: LayoutTests/platform/mac/fast/css/percentage-non-integer-expected.png >=================================================================== >Cannot display: file marked as a binary type. >svn:mime-type = image/png > >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 >IECAAAECiwkIIIt5WZoAAQIECBAgQIAAgSUEBJAl8P4cq548efLP8bAekwABAgQIECBAgMAkAgLI >JIw2QoAAAQIECBAgQIDAaxEQQF6LkmUIECBAgAABAgQIEJhEQACZhNFGCBAgQIAAAQIECBB4LQIr >W/1yuQVXTq5c7m73XWWBrbsvO66rXI2HI0CAAAECBAgQILCYgCMgi3lZmgABAgQIECBAgACBJQQE >kCXwrEqAAAECBAgQIECAwGICAshiXpYmQIAAAQIECBAgQGAJAQFkCTyrEiBAgAABAgQIECCwmIAA >spiXpQkQIECAAAECBAgQWEJAAFkCz6oECBAgQIAAAQIECCwmIIAs5mVpAgQIECBAgAABAgSWELji >3wFZYttWJUCAAAECBAgQIECAwA4BR0B2cPiCAAECBAgQIECAAIHdFBBAdlPXtgkQIECAAAECBAgQ >2CEggOzg8AUBAgQIECBAgAABArspIIDspq5tEyBAgAABAgQIECCwQ0AA2cHhCwIECBAgQIAAAQIE >dlNAANlNXdsmQIAAAQIECBAgQGCHgACyg8MXBAgQIECAAAECBAjspoAAspu6tk2AAAECBAgQIECA >wA4BAWQHhy8IECBAgAABAgQIENhNAQFkN3VtmwABAgQIECBAgACBHQICyA4OXxAgQIAAAQIECBAg >sJsCAshu6to2AQIECBAgQIAAAQI7BASQHRy+IECAAAECBAgQIEBgNwUEkN3UtW0CBAgQIECAAAEC >BHYICCA7OHxBgAABAgQIECBAgMBuCgggu6lr2wQIECBAgAABAgQI7BAQQHZw+IIAAQIECBAgQIAA >gd0UmF1p4ysnV660yJ/uv6d/evefvpz7WSx3cu69l74j1tmtbY+PGI8Rlys9zj3DUov38Mpqw9W4 >javxWBkeN2oYe47PL9f39uUW/T6JbV/ucs9Fd86r4+Llpq4jyrj4Mf6ctUQ9cbln+PdP/2So6U/V >DJ/ds63Iu++eV+BFK/mSAAECBAgQSCPgCEiaUSiEAAECBAgQIECAwN4XEED2/ox1SIAAAQIECBAg >QCCNgACSZhQKIUCAAAECBAgQILD3BQSQvT9jHRIgQIAAAQIECBBIIyCApBmFQggQIECAAAECBAjs >fQEBZO/PWIcECBAgQIAAAQIE0ggIIGlGoRACBAgQIECAAAECe19AANn7M9YhAQIECBAgQIAAgTQC >AkiaUSiEAAECBAgQIECAwN4XEED2/ox1SIAAAQIECBAgQCCNgACSZhQKIUCAAAECBAgQILD3BQSQ >vT9jHRIgQIAAAQIECBBIIyCApBmFQggQIECAAAECBAjsfQEBZO/PWIcECBAgQIAAAQIE0ggIIGlG >oRACBAgQIECAAAECe19AANn7M9YhAQIECBAgQIAAgTQCAkiaUSiEAAECBAgQIECAwN4XEED2/ox1 >SIAAAQIECBAgQCCNgACSZhQKIUCAAAECBAgQILD3BVa2+mXvt6lDAgQIECBAgAABAgQyCDgCkmEK >aiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQI >ECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQI >ECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQI >EMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUE >BJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJh >CmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsE >CBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIE >CBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIE >CBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJF >BASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACS >YQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqb >BAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAEC >BAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAEC >BAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAEC >RQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AA >kmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxa >mwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQAB >AgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAAB >AgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAAB >AkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOA >AJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoM >WpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEA >AQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAA >AQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAA >AQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCD >gACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECK >DFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiB >AAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECA >AAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECA >AAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAg >g4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBA >igxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimo >gQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBA >gAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBA >gAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBA >IIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQ >QIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYp >qIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIg >QIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAg >QIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAg >QCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQR >EECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiG >KaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0S >IECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQ >IECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQ >IEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgU >ERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJI >himogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmht >EiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQI >ECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQI >ECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQI >FBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAIC >SIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJo >bRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIE >CBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIE >CBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIE >CBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwC >AkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACky >aG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYC >BAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAEC >BAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAEC >BAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEM >AgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAAp >MmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAG >AgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAAB >AgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAAB >AgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACB >DAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAA >KTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaag >BgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAA >AQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAA >AQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAA >gQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERA >ACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmm >oAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmA >AAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECA >AAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECA >AIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBE >QAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZ >pqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJ >gAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBA >gAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBA >gACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQ >REAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAgg >GaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1 >SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAg >QIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAg >QIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAg >UERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggI >IBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECFY6WxkAABdpSURB >VBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIE >CBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJF >BASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACS >YQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqb >BAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAEC >BAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAEC >BAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAEC >RQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AA >kmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxa >mwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQAB >AgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAAB >AgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAAB >AkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOA >AJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoM >WpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEA >AQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAA >AQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAA >AQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCD >gACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECK >DFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiB >AAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECA >AAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECA >AAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAg >g4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBA >igxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimo >gQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBA >gAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBA >gAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBA >IIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQ >QIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYp >qIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIg >QIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAg >QIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJIhimogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAg >QCCDgACSYQpqIECAAAECBAgQIFBEQAApMmhtEiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQR >EECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQIECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiG >KaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQIECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0S >IECAAAECBAgQyCAggGSYghoIECBAgAABAgQIFBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQ >IECAAAECRQQEkCKD1iYBAgQIECBAgACBDAICSIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQ >IEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJobRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgU >ERBAigxamwQIECBAgAABAgQyCAggGaagBgIECBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMAgJI >himogQABAgQIECBAgEARAQGkyKC1SYAAAQIECBAgQCCDgACSYQpqIECAAAECBAgQIFBEQAApMmht >EiBAgAABAgQIEMggIIBkmIIaCBAgQIAAAQIECBQREECKDFqbBAgQIECAAAECBDIICCAZpqAGAgQI >ECBAgAABAkUEBJAig9YmAQIECBAgQIAAgQwCAkiGKaiBAAECBAgQIECAQBEBAaTIoLVJgAABAgQI >ECBAIIOAAJJhCmogQIAAAQIECBAgUERAACkyaG0SIECAAAECBAgQyCAggGSYghoIECBAgAABAgQI >FBEQQIoMWpsECBAgQIAAAQIEMggIIBmmoAYCBAgQIECAAAECRQQEkCKD1iYBAgQIECBAgACBDAIC >SIYpqIEAAQIECBAgQIBAEQEBpMigtUmAAAECBAgQIEAgg4AAkmEKaiBAgAABAgQIECBQREAAKTJo >bRIgQIAAAQIECBDIICCAZJiCGggQIECAAAECBAgUERBAigxamwQIECBAgAABAgQyCAggGaagBgIE >CBAgQIAAAQJFBASQIoPWJgECBAgQIECAAIEMArPvfve7bTabtbW1tba+vj7UtLW11VZXV9v58+db >fB6Xs2fPttOnT1+4LZZ3IUCAAAECBAgQeLVA7EetrKwM+1jx+fjx6iXdQmB6gXPnzg378OP3YOzr >j/v14z5+3Ddexv39+Dru3/71uMx4/dhjj7Wbb755/PJV17HdeKztl7GeuN7c3GyzjY2N9pa3vGV4 >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 >j8ge/w9MMxM6KtjTlQAAAABJRU5ErkJggg== > Created attachment 86335 [details]
updated per Simon's review
Rik: How did you spam the bug like that? Did a tool go haywire? In any case, we should open a new bug for this (and we can dupe this one against that). But this bug should be closed now that it's impossible to read. (In reply to comment #30) > Rik: How did you spam the bug like that? Did a tool go haywire? > > In any case, we should open a new bug for this (and we can dupe this one against that). > > But this bug should be closed now that it's impossible to read. Yes. Please close the bug and I'll open a new one. I click on "edit attachment as comment" and submitted by accident :-( *** This bug has been marked as a duplicate of bug 56758 *** http://trac.webkit.org/changeset/81625 might have broken Qt Linux Release The following tests are not passing: css2.1/t09-c5526c-display-00-e.html This caused https://bugs.webkit.org/show_bug.cgi?id=59138 Comment on attachment 86335 [details] updated per Simon's review View in context: https://bugs.webkit.org/attachment.cgi?id=86335&action=review > Source/WebCore/platform/Length.h:198 > + float fromValue = from.isZero() ? 0 : from.value(); This causes: Source\WebCore\platform\Length.h(196) : warning C4244: 'initializing' : conversion from 'int' to 'float', possible loss of data This is genuine since value() returns an int. Either change the type to int or use getFloatValue() or the thing that is the more sensible here as I'm not familiar with this code. (In reply to comment #35) > (From update of attachment 86335 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=86335&action=review > > > Source/WebCore/platform/Length.h:198 > > + float fromValue = from.isZero() ? 0 : from.value(); > > This causes: > Source\WebCore\platform\Length.h(196) : warning C4244: 'initializing' : conversion from 'int' to 'float', possible loss of data > > This is genuine since value() returns an int. Either change the type to int or use getFloatValue() or the thing that is the more sensible here as I'm not familiar with this code. What platform are you seeing this on? |