Chromium Code Reviews| Index: third_party/WebKit/Source/core/css/resolver/FilterOperationResolver.cpp |
| diff --git a/third_party/WebKit/Source/core/css/resolver/FilterOperationResolver.cpp b/third_party/WebKit/Source/core/css/resolver/FilterOperationResolver.cpp |
| index 6ac699796981b0e6edd8f111ba41b2c62cdfb1a5..4db7b30903145b9476952c60983a3302fc5ceebb 100644 |
| --- a/third_party/WebKit/Source/core/css/resolver/FilterOperationResolver.cpp |
| +++ b/third_party/WebKit/Source/core/css/resolver/FilterOperationResolver.cpp |
| @@ -117,7 +117,7 @@ static void countFilterUse(FilterOperation::OperationType operationType, |
| } |
| FilterOperations FilterOperationResolver::createFilterOperations( |
| - StyleResolverState& state, |
| + StyleResolverState* state, |
| const CSSValue& inValue) { |
| FilterOperations operations; |
| @@ -126,15 +126,28 @@ FilterOperations FilterOperationResolver::createFilterOperations( |
| return operations; |
| } |
| - const CSSToLengthConversionData& conversionData = |
| - state.cssToLengthConversionData(); |
| + const CSSToLengthConversionData* conversionData; |
| + if (state) { |
| + conversionData = &(state->cssToLengthConversionData()); |
| + } else { |
| + FontDescription fontDescription; |
| + Font font(fontDescription); |
| + static CSSToLengthConversionData::FontSizes fontSizes(10, 16, &font); |
|
Justin Novosad
2016/11/08 20:59:23
These hard-coded values should be in constants. A
fserb
2017/01/17 17:58:44
Couldn't find it anywhere. The default on CSS Font
|
| + static CSSToLengthConversionData::ViewportSize viewportSize(1024, 768); |
| + static CSSToLengthConversionData baseData(&ComputedStyle::initialStyle(), |
|
esprehn
2016/11/22 01:38:37
I don't think you can do this, any number of worke
fserb
2017/01/17 17:58:44
I've removed the statics.
|
| + fontSizes, viewportSize, 1); |
| + conversionData = &baseData; |
| + } |
| + |
| for (auto& currValue : toCSSValueList(inValue)) { |
| if (currValue->isURIValue()) { |
| - countFilterUse(FilterOperation::REFERENCE, state.document()); |
| + if (!state) |
|
Justin Novosad
2016/11/08 20:59:23
Add a comment here to explain the the !state case
fserb
2017/01/17 17:58:44
done.
|
| + continue; |
| + countFilterUse(FilterOperation::REFERENCE, state->document()); |
| const CSSURIValue& urlValue = toCSSURIValue(*currValue); |
| SVGElementProxy& elementProxy = |
| - state.elementStyleResources().cachedOrPendingFromValue(urlValue); |
| + state->elementStyleResources().cachedOrPendingFromValue(urlValue); |
| operations.operations().append( |
| ReferenceFilterOperation::create(urlValue.value(), elementProxy)); |
| continue; |
| @@ -143,7 +156,8 @@ FilterOperations FilterOperationResolver::createFilterOperations( |
| const CSSFunctionValue* filterValue = toCSSFunctionValue(currValue.get()); |
| FilterOperation::OperationType operationType = |
| filterOperationForType(filterValue->functionType()); |
| - countFilterUse(operationType, state.document()); |
| + if (state) |
| + countFilterUse(operationType, state->document()); |
|
esprehn
2016/11/22 01:38:37
I think you actually want to take an ExecutionCont
fserb
2017/01/17 17:58:44
added TODO.
|
| DCHECK_LE(filterValue->length(), 1u); |
| const CSSPrimitiveValue* firstValue = |
| @@ -193,22 +207,26 @@ FilterOperations FilterOperationResolver::createFilterOperations( |
| } |
| case CSSValueBlur: { |
| Length stdDeviation = Length(0, Fixed); |
| - if (filterValue->length() >= 1) |
| - stdDeviation = firstValue->convertToLength(conversionData); |
| + if (filterValue->length() >= 1) { |
| + stdDeviation = firstValue->convertToLength(*conversionData); |
| + } |
| operations.operations().append( |
| BlurFilterOperation::create(stdDeviation)); |
| break; |
| } |
| case CSSValueDropShadow: { |
| const CSSShadowValue& item = toCSSShadowValue(filterValue->item(0)); |
| - IntPoint location(item.x->computeLength<int>(conversionData), |
| - item.y->computeLength<int>(conversionData)); |
| - int blur = |
| - item.blur ? item.blur->computeLength<int>(conversionData) : 0; |
| + IntPoint location; |
| + int blur; |
| + |
| + location = IntPoint(item.x->computeLength<int>(*conversionData), |
| + item.y->computeLength<int>(*conversionData)); |
| + blur = item.blur ? item.blur->computeLength<int>(*conversionData) : 0; |
| Color shadowColor = Color::black; |
|
esprehn
2016/11/22 01:38:37
This is going to force all shadows to be black, th
fserb
2017/01/17 17:58:44
yep. This code got refactored on StyleBuilderConve
|
| - if (item.color) |
| - shadowColor = state.document().textLinkColors().colorFromCSSValue( |
| - *item.color, state.style()->color()); |
| + if (item.color && state) { |
| + shadowColor = state->document().textLinkColors().colorFromCSSValue( |
| + *item.color, state->style()->color()); |
| + } |
| operations.operations().append( |
| DropShadowFilterOperation::create(location, blur, shadowColor)); |