| Index: third_party/WebKit/Source/core/paint/SVGClipPainter.cpp | 
| diff --git a/third_party/WebKit/Source/core/paint/SVGClipPainter.cpp b/third_party/WebKit/Source/core/paint/SVGClipPainter.cpp | 
| index a3f295d6cdfd64e0d958a78c236de3e9b297fb20..3b9a9d5cebcd6fbc1c9040e0c31132ae8205c8ee 100644 | 
| --- a/third_party/WebKit/Source/core/paint/SVGClipPainter.cpp | 
| +++ b/third_party/WebKit/Source/core/paint/SVGClipPainter.cpp | 
| @@ -9,10 +9,12 @@ | 
| #include "core/layout/svg/SVGLayoutSupport.h" | 
| #include "core/layout/svg/SVGResources.h" | 
| #include "core/layout/svg/SVGResourcesCache.h" | 
| +#include "core/paint/ClipPathClipper.h" | 
| #include "core/paint/LayoutObjectDrawingRecorder.h" | 
| #include "core/paint/PaintInfo.h" | 
| #include "core/paint/TransformRecorder.h" | 
| #include "platform/graphics/paint/ClipPathDisplayItem.h" | 
| +#include "platform/graphics/paint/ClipPathRecorder.h" | 
| #include "platform/graphics/paint/CompositingRecorder.h" | 
| #include "platform/graphics/paint/DrawingDisplayItem.h" | 
| #include "platform/graphics/paint/PaintController.h" | 
| @@ -35,8 +37,8 @@ private: | 
| bool SVGClipPainter::prepareEffect(const LayoutObject& target, const FloatRect& targetBoundingBox, | 
| const FloatRect& paintInvalidationRect, const FloatPoint& layerPositionOffset, GraphicsContext& context, ClipperState& clipperState) | 
| { | 
| -    ASSERT(clipperState == ClipperNotApplied); | 
| -    ASSERT_WITH_SECURITY_IMPLICATION(!m_clip.needsLayout()); | 
| +    DCHECK_EQ(clipperState, ClipperState::NotApplied); | 
| +    SECURITY_DCHECK(!m_clip.needsLayout()); | 
|  | 
| m_clip.clearInvalidationMask(); | 
|  | 
| @@ -50,7 +52,7 @@ bool SVGClipPainter::prepareEffect(const LayoutObject& target, const FloatRect& | 
| // In this case, we need to apply the zoom scale explicitly - but only for clips with | 
| // userSpaceOnUse units (the zoom is accounted for objectBoundingBox-resolved lengths). | 
| if (!target.isSVG() && m_clip.clipPathUnits() == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) { | 
| -        ASSERT(m_clip.style()); | 
| +        DCHECK(m_clip.style()); | 
| animatedLocalTransform.scale(m_clip.style()->effectiveZoom()); | 
| } | 
|  | 
| @@ -60,13 +62,13 @@ bool SVGClipPainter::prepareEffect(const LayoutObject& target, const FloatRect& | 
| AffineTransform positionTransform; | 
| positionTransform.translate(layerPositionOffset.x(), layerPositionOffset.y()); | 
| clipPath.transform(positionTransform); | 
| -        clipperState = ClipperAppliedPath; | 
| +        clipperState = ClipperState::AppliedPath; | 
| context.getPaintController().createAndAppend<BeginClipPathDisplayItem>(target, clipPath); | 
| return true; | 
| } | 
|  | 
| // Fall back to masking. | 
| -    clipperState = ClipperAppliedMask; | 
| +    clipperState = ClipperState::AppliedMask; | 
|  | 
| // Begin compositing the clip mask. | 
| CompositingRecorder::beginCompositing(context, target, SkXfermode::kSrcOver_Mode, 1, &paintInvalidationRect); | 
| @@ -87,11 +89,11 @@ bool SVGClipPainter::prepareEffect(const LayoutObject& target, const FloatRect& | 
| void SVGClipPainter::finishEffect(const LayoutObject& target, GraphicsContext& context, ClipperState& clipperState) | 
| { | 
| switch (clipperState) { | 
| -    case ClipperAppliedPath: | 
| +    case ClipperState::AppliedPath: | 
| // Path-only clipping, no layers to restore but we need to emit an end to the clip path display item. | 
| context.getPaintController().endItem<EndClipPathDisplayItem>(target); | 
| break; | 
| -    case ClipperAppliedMask: | 
| +    case ClipperState::AppliedMask: | 
| // Transfer content -> clip mask (SrcIn) | 
| CompositingRecorder::endCompositing(context, target); | 
|  | 
| @@ -99,7 +101,7 @@ void SVGClipPainter::finishEffect(const LayoutObject& target, GraphicsContext& c | 
| CompositingRecorder::endCompositing(context, target); | 
| break; | 
| default: | 
| -        ASSERT_NOT_REACHED(); | 
| +        NOTREACHED(); | 
| } | 
| } | 
|  | 
| @@ -114,12 +116,10 @@ bool SVGClipPainter::drawClipAsMask(GraphicsContext& context, const LayoutObject | 
| { | 
| TransformRecorder recorder(maskContext, layoutObject, localTransform); | 
|  | 
| -        // Create a clipPathClipper if this clipPath is clipped by another clipPath. | 
| -        SVGResources* resources = SVGResourcesCache::cachedResourcesForLayoutObject(&m_clip); | 
| -        LayoutSVGResourceClipper* clipPathClipper = resources ? resources->clipper() : nullptr; | 
| -        ClipperState clipPathClipperState = ClipperNotApplied; | 
| -        if (clipPathClipper && !SVGClipPainter(*clipPathClipper).prepareEffect(m_clip, targetBoundingBox, targetPaintInvalidationRect, layerPositionOffset, maskContext, clipPathClipperState)) | 
| -            return false; | 
| +        // Apply any clip-path clipping this clipPath (nested shape/clipPath.) | 
| +        Optional<ClipPathClipper> nestedClipPathClipper; | 
| +        if (ClipPathOperation* clipPathOperation = m_clip.styleRef().svgStyle().clipPath()) | 
| +            nestedClipPathClipper.emplace(maskContext, *clipPathOperation, m_clip, targetBoundingBox, layerPositionOffset); | 
|  | 
| { | 
| AffineTransform contentTransform; | 
| @@ -132,9 +132,6 @@ bool SVGClipPainter::drawClipAsMask(GraphicsContext& context, const LayoutObject | 
| TransformRecorder contentTransformRecorder(maskContext, layoutObject, contentTransform); | 
| maskContext.getPaintController().createAndAppend<DrawingDisplayItem>(layoutObject, DisplayItem::kSVGClip, m_clip.createContentPicture()); | 
| } | 
| - | 
| -        if (clipPathClipper) | 
| -            SVGClipPainter(*clipPathClipper).finishEffect(m_clip, maskContext, clipPathClipperState); | 
| } | 
|  | 
| LayoutObjectDrawingRecorder drawingRecorder(context, layoutObject, DisplayItem::kSVGClip, targetPaintInvalidationRect); | 
|  |