| 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 d41a8cfe79af2de57cee6ad81d6c7a4ea327bfc7..5f1a77734e78cc6881f45212d6dd7044236edb54 100644
|
| --- a/third_party/WebKit/Source/core/css/resolver/FilterOperationResolver.cpp
|
| +++ b/third_party/WebKit/Source/core/css/resolver/FilterOperationResolver.cpp
|
| @@ -31,6 +31,7 @@
|
| #include "core/css/CSSFunctionValue.h"
|
| #include "core/css/CSSPrimitiveValueMappings.h"
|
| #include "core/css/CSSShadowValue.h"
|
| +#include "core/css/CSSURIValue.h"
|
| #include "core/css/resolver/StyleResolverState.h"
|
| #include "core/frame/UseCounter.h"
|
| #include "core/layout/svg/ReferenceFilterBuilder.h"
|
| @@ -40,8 +41,6 @@ namespace blink {
|
| FilterOperation::OperationType FilterOperationResolver::filterOperationForType(CSSValueID type)
|
| {
|
| switch (type) {
|
| - case CSSValueUrl:
|
| - return FilterOperation::REFERENCE;
|
| case CSSValueGrayscale:
|
| return FilterOperation::GRAYSCALE;
|
| case CSSValueSepia:
|
| @@ -127,26 +126,28 @@ FilterOperations FilterOperationResolver::createFilterOperations(StyleResolverSt
|
|
|
| const CSSToLengthConversionData& conversionData = state.cssToLengthConversionData();
|
| for (auto& currValue : toCSSValueList(inValue)) {
|
| - const CSSFunctionValue* filterValue = toCSSFunctionValue(currValue.get());
|
| - FilterOperation::OperationType operationType = filterOperationForType(filterValue->functionType());
|
| - countFilterUse(operationType, state.document());
|
| - ASSERT(filterValue->length() <= 1);
|
| + if (currValue->isURIValue()) {
|
| + countFilterUse(FilterOperation::REFERENCE, state.document());
|
|
|
| - if (operationType == FilterOperation::REFERENCE) {
|
| - const CSSSVGDocumentValue& svgDocumentValue = toCSSSVGDocumentValue(filterValue->item(0));
|
| - KURL url = state.document().completeURL(svgDocumentValue.url());
|
| + const CSSURIValue& urlValue = toCSSURIValue(*currValue);
|
| + KURL url = state.document().completeURL(urlValue.url());
|
|
|
| - ReferenceFilterOperation* operation = ReferenceFilterOperation::create(svgDocumentValue.url(), AtomicString(url.fragmentIdentifier()));
|
| + ReferenceFilterOperation* operation = ReferenceFilterOperation::create(urlValue.url(), AtomicString(url.fragmentIdentifier()));
|
| if (!equalIgnoringFragmentIdentifier(url, state.document().url())) {
|
| - if (!svgDocumentValue.loadRequested())
|
| - state.elementStyleResources().addPendingSVGDocument(operation, &svgDocumentValue);
|
| - else if (svgDocumentValue.cachedSVGDocument())
|
| - ReferenceFilterBuilder::setDocumentResourceReference(operation, new DocumentResourceReference(svgDocumentValue.cachedSVGDocument()));
|
| + if (!urlValue.loadRequested())
|
| + state.elementStyleResources().addPendingSVGDocument(operation, &urlValue);
|
| + else if (urlValue.cachedDocument())
|
| + ReferenceFilterBuilder::setDocumentResourceReference(operation, new DocumentResourceReference(urlValue.cachedDocument()));
|
| }
|
| operations.operations().append(operation);
|
| continue;
|
| }
|
|
|
| + const CSSFunctionValue* filterValue = toCSSFunctionValue(currValue.get());
|
| + FilterOperation::OperationType operationType = filterOperationForType(filterValue->functionType());
|
| + countFilterUse(operationType, state.document());
|
| + DCHECK_LE(filterValue->length(), 1u);
|
| +
|
| const CSSPrimitiveValue* firstValue = filterValue->length() && filterValue->item(0).isPrimitiveValue() ? &toCSSPrimitiveValue(filterValue->item(0)) : nullptr;
|
| switch (filterValue->functionType()) {
|
| case CSSValueGrayscale:
|
|
|