| Index: third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| diff --git a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| index c44f731220e1586fb447203da300f79dff3e1419..57e405eba1a1298b0d4318878acd5abe834d81f7 100644
|
| --- a/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| +++ b/third_party/WebKit/Source/modules/canvas2d/CanvasRenderingContext2DState.cpp
|
| @@ -295,7 +295,7 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
|
| return nullptr;
|
|
|
| // StyleResolverState cannot be used in frame-less documents.
|
| - if (!styleResolutionHost->document().frame())
|
| + if (styleResolutionHost && !styleResolutionHost->document().frame())
|
| return nullptr;
|
|
|
| if (!m_resolvedFilter) {
|
| @@ -303,11 +303,21 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
|
| // Must set font in case the filter uses any font-relative units (em, ex)
|
| filterStyle->setFont(m_fontForFilter);
|
|
|
| - StyleResolverState resolverState(styleResolutionHost->document(), styleResolutionHost, filterStyle.get());
|
| - resolverState.setStyle(filterStyle);
|
| + if (styleResolutionHost) {
|
| + StyleResolverState resolverState(styleResolutionHost->document(), styleResolutionHost, filterStyle.get());
|
| + resolverState.setStyle(filterStyle);
|
| +
|
| + StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterValue);
|
| + resolverState.loadPendingResources();
|
| + } else {
|
| + StyleResolverState resolverState(filterStyle.get());
|
| + resolverState.setStyle(filterStyle);
|
| +
|
| + StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterValue);
|
| + resolverState.loadPendingResources();
|
| + }
|
| +
|
|
|
| - StyleBuilder::applyProperty(CSSPropertyFilter, resolverState, *m_filterValue);
|
| - resolverState.loadPendingResources();
|
| FilterEffectBuilder* filterEffectBuilder = FilterEffectBuilder::create();
|
|
|
| // We can't reuse m_fillPaint and m_strokePaint for the filter, since these incorporate
|
| @@ -325,7 +335,7 @@ SkImageFilter* CanvasRenderingContext2DState::getFilter(Element* styleResolution
|
| if (FilterEffect* lastEffect = filterEffectBuilder->lastEffect()) {
|
| lastEffect->determineMaximumEffectRect(DetermineMaxEffectRectNone);
|
| m_resolvedFilter = SkiaImageFilterBuilder::build(lastEffect, ColorSpaceDeviceRGB);
|
| - if (m_resolvedFilter) {
|
| + if (styleResolutionHost && m_resolvedFilter) {
|
| updateFilterReferences(toHTMLCanvasElement(styleResolutionHost), context, filterStyle->filter());
|
| if (lastEffect->originTainted())
|
| context->setOriginTainted();
|
|
|