Index: third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp |
diff --git a/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp b/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp |
index cdb4359d89b9676489ab52204bc743e595519453..d9caa3354bec6167ef1b8d950707d897c9a9dc67 100644 |
--- a/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp |
+++ b/third_party/WebKit/Source/core/css/resolver/StyleBuilderCustom.cpp |
@@ -168,7 +168,7 @@ void StyleBuilderFunctions::applyInheritCSSPropertyColor(StyleResolverState& sta |
void StyleBuilderFunctions::applyValueCSSPropertyColor(StyleResolverState& state, const CSSValue& value) |
{ |
// As per the spec, 'color: currentColor' is treated as 'color: inherit' |
- if (value.isPrimitiveValue() && toCSSPrimitiveValue(value).getValueID() == CSSValueCurrentcolor) { |
+ if (value.isIdentifierValue() && toCSSIdentifierValue(value).getValueID() == CSSValueCurrentcolor) { |
applyInheritCSSPropertyColor(state); |
return; |
} |
@@ -231,17 +231,17 @@ void StyleBuilderFunctions::applyValueCSSPropertyCursor(StyleResolverState& stat |
state.style()->addCursor(state.styleImage(CSSPropertyCursor, image), hotSpotSpecified, hotSpot); |
} else { |
- state.style()->setCursor(toCSSPrimitiveValue(item).convertTo<ECursor>()); |
+ state.style()->setCursor(toCSSIdentifierValue(item).convertTo<ECursor>()); |
} |
} |
} else { |
- state.style()->setCursor(toCSSPrimitiveValue(value).convertTo<ECursor>()); |
+ state.style()->setCursor(toCSSIdentifierValue(value).convertTo<ECursor>()); |
} |
} |
void StyleBuilderFunctions::applyValueCSSPropertyDirection(StyleResolverState& state, const CSSValue& value) |
{ |
- state.style()->setDirection(toCSSPrimitiveValue(value).convertTo<TextDirection>()); |
+ state.style()->setDirection(toCSSIdentifierValue(value).convertTo<TextDirection>()); |
} |
void StyleBuilderFunctions::applyInitialCSSPropertyGridTemplateAreas(StyleResolverState& state) |
@@ -260,9 +260,9 @@ void StyleBuilderFunctions::applyInheritCSSPropertyGridTemplateAreas(StyleResolv |
void StyleBuilderFunctions::applyValueCSSPropertyGridTemplateAreas(StyleResolverState& state, const CSSValue& value) |
{ |
- if (value.isPrimitiveValue()) { |
+ if (value.isIdentifierValue()) { |
// FIXME: Shouldn't we clear the grid-area values |
- DCHECK_EQ(toCSSPrimitiveValue(value).getValueID(), CSSValueNone); |
+ DCHECK_EQ(toCSSIdentifierValue(value).getValueID(), CSSValueNone); |
return; |
} |
@@ -302,28 +302,28 @@ void StyleBuilderFunctions::applyInheritCSSPropertyOutlineStyle(StyleResolverSta |
void StyleBuilderFunctions::applyValueCSSPropertyOutlineStyle(StyleResolverState& state, const CSSValue& value) |
{ |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
- state.style()->setOutlineStyleIsAuto(primitiveValue.convertTo<OutlineIsAuto>()); |
- state.style()->setOutlineStyle(primitiveValue.convertTo<EBorderStyle>()); |
+ const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
+ state.style()->setOutlineStyleIsAuto(identifierValue.convertTo<OutlineIsAuto>()); |
+ state.style()->setOutlineStyle(identifierValue.convertTo<EBorderStyle>()); |
} |
void StyleBuilderFunctions::applyValueCSSPropertyResize(StyleResolverState& state, const CSSValue& value) |
{ |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
+ const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
EResize r = RESIZE_NONE; |
- if (primitiveValue.getValueID() == CSSValueAuto) { |
+ if (identifierValue.getValueID() == CSSValueAuto) { |
if (Settings* settings = state.document().settings()) |
r = settings->textAreasAreResizable() ? RESIZE_BOTH : RESIZE_NONE; |
} else { |
- r = primitiveValue.convertTo<EResize>(); |
+ r = identifierValue.convertTo<EResize>(); |
} |
state.style()->setResize(r); |
} |
static float mmToPx(float mm) { return mm * cssPixelsPerMillimeter; } |
static float inchToPx(float inch) { return inch * cssPixelsPerInch; } |
-static FloatSize getPageSizeFromName(const CSSPrimitiveValue& pageSizeName) |
+static FloatSize getPageSizeFromName(const CSSIdentifierValue& pageSizeName) |
{ |
switch (pageSizeName.getValueID()) { |
case CSSValueA5: |
@@ -358,32 +358,33 @@ void StyleBuilderFunctions::applyValueCSSPropertySize(StyleResolverState& state, |
const CSSValueList& list = toCSSValueList(value); |
if (list.length() == 2) { |
// <length>{2} | <page-size> <orientation> |
- const CSSPrimitiveValue& first = toCSSPrimitiveValue(list.item(0)); |
- const CSSPrimitiveValue& second = toCSSPrimitiveValue(list.item(1)); |
- if (first.isLength()) { |
+ const CSSValue& first = list.item(0); |
+ const CSSValue& second = list.item(1); |
+ if (first.isPrimitiveValue() && toCSSPrimitiveValue(first).isLength()) { |
// <length>{2} |
- size = FloatSize(first.computeLength<float>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0)), |
- second.computeLength<float>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0))); |
+ size = FloatSize(toCSSPrimitiveValue(first).computeLength<float>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0)), |
+ toCSSPrimitiveValue(second).computeLength<float>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0))); |
} else { |
// <page-size> <orientation> |
- size = getPageSizeFromName(first); |
+ size = getPageSizeFromName(toCSSIdentifierValue(first)); |
- DCHECK(second.getValueID() == CSSValueLandscape || second.getValueID() == CSSValuePortrait); |
- if (second.getValueID() == CSSValueLandscape) |
+ DCHECK(toCSSIdentifierValue(second).getValueID() == CSSValueLandscape || toCSSIdentifierValue(second).getValueID() == CSSValuePortrait); |
+ if (toCSSIdentifierValue(second).getValueID() == CSSValueLandscape) |
size = size.transposedSize(); |
} |
pageSizeType = PAGE_SIZE_RESOLVED; |
} else { |
DCHECK_EQ(list.length(), 1U); |
// <length> | auto | <page-size> | [ portrait | landscape] |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(list.item(0)); |
- if (primitiveValue.isLength()) { |
+ const CSSValue& first = list.item(0); |
+ if (first.isPrimitiveValue() && toCSSPrimitiveValue(first).isLength()) { |
// <length> |
pageSizeType = PAGE_SIZE_RESOLVED; |
- float width = primitiveValue.computeLength<float>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0)); |
+ float width = toCSSPrimitiveValue(first).computeLength<float>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0)); |
size = FloatSize(width, width); |
} else { |
- switch (primitiveValue.getValueID()) { |
+ const CSSIdentifierValue& ident = toCSSIdentifierValue(first); |
+ switch (ident.getValueID()) { |
case CSSValueAuto: |
pageSizeType = PAGE_SIZE_AUTO; |
break; |
@@ -396,7 +397,7 @@ void StyleBuilderFunctions::applyValueCSSPropertySize(StyleResolverState& state, |
default: |
// <page-size> |
pageSizeType = PAGE_SIZE_RESOLVED; |
- size = getPageSizeFromName(primitiveValue); |
+ size = getPageSizeFromName(ident); |
} |
} |
} |
@@ -440,14 +441,14 @@ void StyleBuilderFunctions::applyValueCSSPropertySnapHeight(StyleResolverState& |
void StyleBuilderFunctions::applyValueCSSPropertyTextAlign(StyleResolverState& state, const CSSValue& value) |
{ |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
- if (primitiveValue.isValueID() && primitiveValue.getValueID() != CSSValueWebkitMatchParent) { |
+ if (value.isIdentifierValue() && toCSSIdentifierValue(value).getValueID() != CSSValueWebkitMatchParent) { |
// Special case for th elements - UA stylesheet text-align does not apply if parent's computed value for text-align is not its initial value |
// https://html.spec.whatwg.org/multipage/rendering.html#tables-2 |
- if (primitiveValue.getValueID() == CSSValueInternalCenter && state.parentStyle()->textAlign() != ComputedStyle::initialTextAlign()) |
+ const CSSIdentifierValue& identValue = toCSSIdentifierValue(value); |
+ if (identValue.getValueID() == CSSValueInternalCenter && state.parentStyle()->textAlign() != ComputedStyle::initialTextAlign()) |
state.style()->setTextAlign(state.parentStyle()->textAlign()); |
else |
- state.style()->setTextAlign(primitiveValue.convertTo<ETextAlign>()); |
+ state.style()->setTextAlign(identValue.convertTo<ETextAlign>()); |
} |
else if (state.parentStyle()->textAlign() == TASTART) |
state.style()->setTextAlign(state.parentStyle()->isLeftToRightDirection() ? LEFT : RIGHT); |
@@ -478,15 +479,15 @@ void StyleBuilderFunctions::applyValueCSSPropertyTextIndent(StyleResolverState& |
TextIndentType textIndentTypeValue = ComputedStyle::initialTextIndentType(); |
for (auto& listValue : toCSSValueList(value)) { |
- const CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(listValue.get()); |
- if (!primitiveValue->getValueID()) |
- lengthOrPercentageValue = primitiveValue->convertToLength(state.cssToLengthConversionData()); |
- else if (primitiveValue->getValueID() == CSSValueEachLine) |
+ if (listValue->isPrimitiveValue()) { |
+ lengthOrPercentageValue = toCSSPrimitiveValue(*listValue).convertToLength(state.cssToLengthConversionData()); |
+ } else if (toCSSIdentifierValue(*listValue).getValueID() == CSSValueEachLine) { |
textIndentLineValue = TextIndentEachLine; |
- else if (primitiveValue->getValueID() == CSSValueHanging) |
+ } else if (toCSSIdentifierValue(*listValue).getValueID() == CSSValueHanging) { |
textIndentTypeValue = TextIndentHanging; |
- else |
+ } else { |
NOTREACHED(); |
+ } |
} |
state.style()->setTextIndent(lengthOrPercentageValue); |
@@ -512,12 +513,10 @@ void StyleBuilderFunctions::applyInheritCSSPropertyVerticalAlign(StyleResolverSt |
void StyleBuilderFunctions::applyValueCSSPropertyVerticalAlign(StyleResolverState& state, const CSSValue& value) |
{ |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
- |
- if (primitiveValue.getValueID()) |
- state.style()->setVerticalAlign(primitiveValue.convertTo<EVerticalAlign>()); |
+ if (value.isIdentifierValue()) |
+ state.style()->setVerticalAlign(toCSSIdentifierValue(value).convertTo<EVerticalAlign>()); |
else |
- state.style()->setVerticalAlignLength(primitiveValue.convertToLength(state.cssToLengthConversionData())); |
+ state.style()->setVerticalAlignLength(toCSSPrimitiveValue(value).convertToLength(state.cssToLengthConversionData())); |
} |
static void resetEffectiveZoom(StyleResolverState& state) |
@@ -540,27 +539,32 @@ void StyleBuilderFunctions::applyInheritCSSPropertyZoom(StyleResolverState& stat |
void StyleBuilderFunctions::applyValueCSSPropertyZoom(StyleResolverState& state, const CSSValue& value) |
{ |
- SECURITY_DCHECK(value.isPrimitiveValue()); |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
- |
- if (primitiveValue.getValueID() == CSSValueNormal) { |
- resetEffectiveZoom(state); |
- state.setZoom(ComputedStyle::initialZoom()); |
- } else if (primitiveValue.getValueID() == CSSValueReset) { |
- state.setEffectiveZoom(ComputedStyle::initialZoom()); |
- state.setZoom(ComputedStyle::initialZoom()); |
- } else if (primitiveValue.getValueID() == CSSValueDocument) { |
- float docZoom = state.rootElementStyle() ? state.rootElementStyle()->zoom() : ComputedStyle::initialZoom(); |
- state.setEffectiveZoom(docZoom); |
- state.setZoom(docZoom); |
- } else if (primitiveValue.isPercentage()) { |
- resetEffectiveZoom(state); |
- if (float percent = primitiveValue.getFloatValue()) |
- state.setZoom(percent / 100.0f); |
- } else if (primitiveValue.isNumber()) { |
- resetEffectiveZoom(state); |
- if (float number = primitiveValue.getFloatValue()) |
- state.setZoom(number); |
+ SECURITY_DCHECK(value.isPrimitiveValue() || value.isIdentifierValue()); |
+ |
+ if (value.isIdentifierValue()) { |
+ const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
+ if (identifierValue.getValueID() == CSSValueNormal) { |
+ resetEffectiveZoom(state); |
+ state.setZoom(ComputedStyle::initialZoom()); |
+ } else if (identifierValue.getValueID() == CSSValueReset) { |
+ state.setEffectiveZoom(ComputedStyle::initialZoom()); |
+ state.setZoom(ComputedStyle::initialZoom()); |
+ } else if (identifierValue.getValueID() == CSSValueDocument) { |
+ float docZoom = state.rootElementStyle() ? state.rootElementStyle()->zoom() : ComputedStyle::initialZoom(); |
+ state.setEffectiveZoom(docZoom); |
+ state.setZoom(docZoom); |
+ } |
+ } else if (value.isPrimitiveValue()) { |
+ const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
+ if (primitiveValue.isPercentage()) { |
+ resetEffectiveZoom(state); |
+ if (float percent = primitiveValue.getFloatValue()) |
+ state.setZoom(percent / 100.0f); |
+ } else if (primitiveValue.isNumber()) { |
+ resetEffectiveZoom(state); |
+ if (float number = primitiveValue.getFloatValue()) |
+ state.setZoom(number); |
+ } |
} |
} |
@@ -591,7 +595,7 @@ void StyleBuilderFunctions::applyValueCSSPropertyWebkitTextEmphasisStyle(StyleRe |
const CSSValueList& list = toCSSValueList(value); |
DCHECK_EQ(list.length(), 2U); |
for (unsigned i = 0; i < 2; ++i) { |
- const CSSPrimitiveValue& value = toCSSPrimitiveValue(list.item(i)); |
+ const CSSIdentifierValue& value = toCSSIdentifierValue(list.item(i)); |
if (value.getValueID() == CSSValueFilled || value.getValueID() == CSSValueOpen) |
state.style()->setTextEmphasisFill(value.convertTo<TextEmphasisFill>()); |
else |
@@ -608,16 +612,16 @@ void StyleBuilderFunctions::applyValueCSSPropertyWebkitTextEmphasisStyle(StyleRe |
return; |
} |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
+ const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
state.style()->setTextEmphasisCustomMark(nullAtom); |
- if (primitiveValue.getValueID() == CSSValueFilled || primitiveValue.getValueID() == CSSValueOpen) { |
- state.style()->setTextEmphasisFill(primitiveValue.convertTo<TextEmphasisFill>()); |
+ if (identifierValue.getValueID() == CSSValueFilled || identifierValue.getValueID() == CSSValueOpen) { |
+ state.style()->setTextEmphasisFill(identifierValue.convertTo<TextEmphasisFill>()); |
state.style()->setTextEmphasisMark(TextEmphasisMarkAuto); |
} else { |
state.style()->setTextEmphasisFill(TextEmphasisFillFilled); |
- state.style()->setTextEmphasisMark(primitiveValue.convertTo<TextEmphasisMark>()); |
+ state.style()->setTextEmphasisMark(identifierValue.convertTo<TextEmphasisMark>()); |
} |
} |
@@ -643,16 +647,16 @@ void StyleBuilderFunctions::applyValueCSSPropertyWillChange(StyleResolverState& |
bool willChangeScrollPosition = false; |
Vector<CSSPropertyID> willChangeProperties; |
- if (value.isPrimitiveValue()) { |
- DCHECK_EQ(toCSSPrimitiveValue(value).getValueID(), CSSValueAuto); |
+ if (value.isIdentifierValue()) { |
+ DCHECK_EQ(toCSSIdentifierValue(value).getValueID(), CSSValueAuto); |
} else { |
DCHECK(value.isValueList()); |
for (auto& willChangeValue : toCSSValueList(value)) { |
if (willChangeValue->isCustomIdentValue()) |
willChangeProperties.append(toCSSCustomIdentValue(*willChangeValue).valueAsPropertyID()); |
- else if (toCSSPrimitiveValue(*willChangeValue).getValueID() == CSSValueContents) |
+ else if (toCSSIdentifierValue(*willChangeValue).getValueID() == CSSValueContents) |
willChangeContents = true; |
- else if (toCSSPrimitiveValue(*willChangeValue).getValueID() == CSSValueScrollPosition) |
+ else if (toCSSIdentifierValue(*willChangeValue).getValueID() == CSSValueScrollPosition) |
willChangeScrollPosition = true; |
else |
NOTREACHED(); |
@@ -677,8 +681,8 @@ void StyleBuilderFunctions::applyInheritCSSPropertyContent(StyleResolverState&) |
void StyleBuilderFunctions::applyValueCSSPropertyContent(StyleResolverState& state, const CSSValue& value) |
{ |
- if (value.isPrimitiveValue()) { |
- DCHECK(toCSSPrimitiveValue(value).getValueID() == CSSValueNormal || toCSSPrimitiveValue(value).getValueID() == CSSValueNone); |
+ if (value.isIdentifierValue()) { |
+ DCHECK(toCSSIdentifierValue(value).getValueID() == CSSValueNormal || toCSSIdentifierValue(value).getValueID() == CSSValueNone); |
state.style()->setContent(nullptr); |
return; |
} |
@@ -697,9 +701,9 @@ void StyleBuilderFunctions::applyValueCSSPropertyContent(StyleResolverState& sta |
listStyleType = static_cast<EListStyleType>(listStyleIdent - CSSValueDisc); |
std::unique_ptr<CounterContent> counter = wrapUnique(new CounterContent(AtomicString(counterValue->identifier()), listStyleType, AtomicString(counterValue->separator()))); |
nextContent = ContentData::create(std::move(counter)); |
- } else if (item->isPrimitiveValue()) { |
+ } else if (item->isIdentifierValue()) { |
QuoteType quoteType; |
- switch (toCSSPrimitiveValue(*item).getValueID()) { |
+ switch (toCSSIdentifierValue(*item).getValueID()) { |
default: |
NOTREACHED(); |
case CSSValueOpenQuote: |
@@ -753,8 +757,8 @@ void StyleBuilderFunctions::applyValueCSSPropertyContent(StyleResolverState& sta |
void StyleBuilderFunctions::applyValueCSSPropertyWebkitLocale(StyleResolverState& state, const CSSValue& value) |
{ |
- if (value.isPrimitiveValue()) { |
- DCHECK_EQ(toCSSPrimitiveValue(value).getValueID(), CSSValueAuto); |
+ if (value.isIdentifierValue()) { |
+ DCHECK_EQ(toCSSIdentifierValue(value).getValueID(), CSSValueAuto); |
state.fontBuilder().setLocale(nullptr); |
} else { |
state.fontBuilder().setLocale(LayoutLocale::get(AtomicString(toCSSStringValue(value).value()))); |
@@ -771,29 +775,29 @@ void StyleBuilderFunctions::applyInheritCSSPropertyWebkitAppRegion(StyleResolver |
void StyleBuilderFunctions::applyValueCSSPropertyWebkitAppRegion(StyleResolverState& state, const CSSValue& value) |
{ |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
- state.style()->setDraggableRegionMode(primitiveValue.getValueID() == CSSValueDrag ? DraggableRegionDrag : DraggableRegionNoDrag); |
+ const CSSIdentifierValue& identifierValue = toCSSIdentifierValue(value); |
+ state.style()->setDraggableRegionMode(identifierValue.getValueID() == CSSValueDrag ? DraggableRegionDrag : DraggableRegionNoDrag); |
state.document().setHasAnnotatedRegions(true); |
} |
void StyleBuilderFunctions::applyValueCSSPropertyWritingMode(StyleResolverState& state, const CSSValue& value) |
{ |
- state.setWritingMode(toCSSPrimitiveValue(value).convertTo<WritingMode>()); |
+ state.setWritingMode(toCSSIdentifierValue(value).convertTo<WritingMode>()); |
} |
void StyleBuilderFunctions::applyValueCSSPropertyWebkitWritingMode(StyleResolverState& state, const CSSValue& value) |
{ |
- state.setWritingMode(toCSSPrimitiveValue(value).convertTo<WritingMode>()); |
+ state.setWritingMode(toCSSIdentifierValue(value).convertTo<WritingMode>()); |
} |
void StyleBuilderFunctions::applyValueCSSPropertyTextOrientation(StyleResolverState& state, const CSSValue& value) |
{ |
- state.setTextOrientation(toCSSPrimitiveValue(value).convertTo<TextOrientation>()); |
+ state.setTextOrientation(toCSSIdentifierValue(value).convertTo<TextOrientation>()); |
} |
void StyleBuilderFunctions::applyValueCSSPropertyWebkitTextOrientation(StyleResolverState& state, const CSSValue& value) |
{ |
- state.setTextOrientation(toCSSPrimitiveValue(value).convertTo<TextOrientation>()); |
+ state.setTextOrientation(toCSSIdentifierValue(value).convertTo<TextOrientation>()); |
} |
void StyleBuilderFunctions::applyValueCSSPropertyVariable(StyleResolverState& state, const CSSValue& value) |
@@ -887,13 +891,12 @@ void StyleBuilderFunctions::applyInheritCSSPropertyBaselineShift(StyleResolverSt |
void StyleBuilderFunctions::applyValueCSSPropertyBaselineShift(StyleResolverState& state, const CSSValue& value) |
{ |
SVGComputedStyle& svgStyle = state.style()->accessSVGStyle(); |
- const CSSPrimitiveValue& primitiveValue = toCSSPrimitiveValue(value); |
- if (!primitiveValue.isValueID()) { |
+ if (!value.isIdentifierValue()) { |
svgStyle.setBaselineShift(BS_LENGTH); |
- svgStyle.setBaselineShiftValue(StyleBuilderConverter::convertLength(state, primitiveValue)); |
+ svgStyle.setBaselineShiftValue(StyleBuilderConverter::convertLength(state, toCSSPrimitiveValue(value))); |
return; |
} |
- switch (primitiveValue.getValueID()) { |
+ switch (toCSSIdentifierValue(value).getValueID()) { |
case CSSValueBaseline: |
svgStyle.setBaselineShift(BS_LENGTH); |
svgStyle.setBaselineShiftValue(Length(Fixed)); |