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(); |