| Index: Source/core/rendering/RenderBoxModelObject.cpp | 
| diff --git a/Source/core/rendering/RenderBoxModelObject.cpp b/Source/core/rendering/RenderBoxModelObject.cpp | 
| index 6602390029017c981f68ed01a600298b771d8dd3..85522fa6958d626cb6faa6b1bb3d7a0128f955c6 100644 | 
| --- a/Source/core/rendering/RenderBoxModelObject.cpp | 
| +++ b/Source/core/rendering/RenderBoxModelObject.cpp | 
| @@ -2499,9 +2499,9 @@ void RenderBoxModelObject::paintBoxShadow(const PaintInfo& info, const LayoutRec | 
| if (shadow.style() != shadowStyle) | 
| continue; | 
|  | 
| -        IntSize shadowOffset(shadow.x(), shadow.y()); | 
| -        int shadowBlur = shadow.blur(); | 
| -        int shadowSpread = shadow.spread(); | 
| +        FloatSize shadowOffset(shadow.x(), shadow.y()); | 
| +        float shadowBlur = shadow.blur(); | 
| +        float shadowSpread = shadow.spread(); | 
|  | 
| if (shadowOffset.isZero() && !shadowBlur && !shadowSpread) | 
| continue; | 
| @@ -2509,12 +2509,12 @@ void RenderBoxModelObject::paintBoxShadow(const PaintInfo& info, const LayoutRec | 
| const Color& shadowColor = resolveColor(shadow.color()); | 
|  | 
| if (shadow.style() == Normal) { | 
| -            RoundedRect fillRect = border; | 
| +            FloatRect fillRect = border.rect(); | 
| fillRect.inflate(shadowSpread); | 
| if (fillRect.isEmpty()) | 
| continue; | 
|  | 
| -            IntRect shadowRect(border.rect()); | 
| +            FloatRect shadowRect(border.rect()); | 
| shadowRect.inflate(shadowBlur + shadowSpread); | 
| shadowRect.move(shadowOffset); | 
|  | 
| @@ -2535,6 +2535,8 @@ void RenderBoxModelObject::paintBoxShadow(const PaintInfo& info, const LayoutRec | 
| context->clipOutRoundedRect(rectToClipOut); | 
| } | 
| } else { | 
| +                    // This IntRect is correct even with fractional shadows, because it is used for the rectangle | 
| +                    // of the box itself, which is always pixel-aligned. | 
| IntRect rectToClipOut = border.rect(); | 
|  | 
| // If the box is opaque, it is unnecessary to clip it out. However, doing so saves time | 
| @@ -2562,20 +2564,25 @@ void RenderBoxModelObject::paintBoxShadow(const PaintInfo& info, const LayoutRec | 
| context->setDrawLooper(drawLooper); | 
|  | 
| if (hasBorderRadius) { | 
| -                RoundedRect influenceRect(shadowRect, border.radii()); | 
| +                RoundedRect influenceRect(pixelSnappedIntRect(LayoutRect(shadowRect)), border.radii()); | 
| influenceRect.expandRadii(2 * shadowBlur + shadowSpread); | 
| if (allCornersClippedOut(influenceRect, info.rect)) | 
| -                    context->fillRect(fillRect.rect(), Color::black); | 
| +                    context->fillRect(fillRect, Color::black); | 
| else { | 
| -                    fillRect.expandRadii(shadowSpread); | 
| -                    if (!fillRect.isRenderable()) | 
| -                        fillRect.adjustRadii(); | 
| -                    context->fillRoundedRect(fillRect, Color::black); | 
| +                    // TODO: support non-integer shadows - crbug.com/334829 | 
| +                    RoundedRect roundedFillRect = border; | 
| +                    roundedFillRect.inflate(shadowSpread); | 
| + | 
| +                    roundedFillRect.expandRadii(shadowSpread); | 
| +                    if (!roundedFillRect.isRenderable()) | 
| +                        roundedFillRect.adjustRadii(); | 
| +                    context->fillRoundedRect(roundedFillRect, Color::black); | 
| } | 
| } else { | 
| -                context->fillRect(fillRect.rect(), Color::black); | 
| +                context->fillRect(fillRect, Color::black); | 
| } | 
| } else { | 
| +            // The inset shadow case. | 
| GraphicsContext::Edges clippedEdges = GraphicsContext::NoEdge; | 
| if (!includeLogicalLeftEdge) { | 
| if (isHorizontal) | 
| @@ -2589,7 +2596,8 @@ void RenderBoxModelObject::paintBoxShadow(const PaintInfo& info, const LayoutRec | 
| else | 
| clippedEdges |= GraphicsContext::BottomEdge; | 
| } | 
| -            context->drawInnerShadow(border, shadowColor, shadowOffset, shadowBlur, shadowSpread, clippedEdges); | 
| +            // TODO: support non-integer shadows - crbug.com/334828 | 
| +            context->drawInnerShadow(border, shadowColor, flooredIntSize(shadowOffset), shadowBlur, shadowSpread, clippedEdges); | 
| } | 
| } | 
| } | 
|  |