| Index: third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
 | 
| diff --git a/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp b/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
 | 
| index 1b5f60c7b2725cb7b309c48a587378a669e0b253..4d8dbdf5802d6b662cad33a2489f881d0ede8658 100644
 | 
| --- a/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
 | 
| +++ b/third_party/WebKit/Source/platform/graphics/filters/FilterEffect.cpp
 | 
| @@ -56,40 +56,40 @@ FloatRect FilterEffect::absoluteBounds() const
 | 
|      return getFilter()->mapLocalRectToAbsoluteRect(computedBounds);
 | 
|  }
 | 
|  
 | 
| -FloatRect FilterEffect::determineAbsolutePaintRect(const FloatRect& originalRequestedRect) const
 | 
| +FloatRect FilterEffect::mapInputs(const FloatRect& rect) const
 | 
|  {
 | 
| -    FloatRect requestedRect = originalRequestedRect;
 | 
| -    // Filters in SVG clip to primitive subregion, while CSS doesn't.
 | 
| -    if (clipsToBounds())
 | 
| -        requestedRect.intersect(absoluteBounds());
 | 
| -
 | 
| -    FloatRect inputRect = mapPaintRect(requestedRect, false);
 | 
| +    if (!m_inputEffects.size()) {
 | 
| +        if (clipsToBounds())
 | 
| +            return absoluteBounds();
 | 
| +        return rect;
 | 
| +    }
 | 
|      FloatRect inputUnion;
 | 
| -    unsigned size = m_inputEffects.size();
 | 
| +    for (const auto& effect : m_inputEffects)
 | 
| +        inputUnion.unite(effect->mapRect(rect));
 | 
| +    return inputUnion;
 | 
| +}
 | 
|  
 | 
| -    for (unsigned i = 0; i < size; ++i)
 | 
| -        inputUnion.unite(m_inputEffects.at(i)->determineAbsolutePaintRect(inputRect));
 | 
| -    inputUnion = mapPaintRect(inputUnion, true);
 | 
| +FloatRect FilterEffect::mapEffect(const FloatRect& rect) const
 | 
| +{
 | 
| +    return rect;
 | 
| +}
 | 
|  
 | 
| -    if (affectsTransparentPixels() || !size) {
 | 
| -        inputUnion = requestedRect;
 | 
| -    } else {
 | 
| -        // Rect may have inflated. Re-intersect with request.
 | 
| -        inputUnion.intersect(requestedRect);
 | 
| -    }
 | 
| -    return inputUnion;
 | 
| +FloatRect FilterEffect::applyBounds(const FloatRect& rect) const
 | 
| +{
 | 
| +    // Filters in SVG clip to primitive subregion, while CSS doesn't.
 | 
| +    if (!clipsToBounds())
 | 
| +        return rect;
 | 
| +    FloatRect bounds = absoluteBounds();
 | 
| +    if (affectsTransparentPixels())
 | 
| +        return bounds;
 | 
| +    return intersection(rect, bounds);
 | 
|  }
 | 
|  
 | 
| -FloatRect FilterEffect::mapRectRecursive(const FloatRect& rect) const
 | 
| +FloatRect FilterEffect::mapRect(const FloatRect& rect) const
 | 
|  {
 | 
| -    FloatRect result;
 | 
| -    if (m_inputEffects.size() > 0) {
 | 
| -        result = m_inputEffects.at(0)->mapRectRecursive(rect);
 | 
| -        for (unsigned i = 1; i < m_inputEffects.size(); ++i)
 | 
| -            result.unite(m_inputEffects.at(i)->mapRectRecursive(rect));
 | 
| -    } else
 | 
| -        result = rect;
 | 
| -    return mapRect(result);
 | 
| +    FloatRect result = mapInputs(rect);
 | 
| +    result = mapEffect(result);
 | 
| +    return applyBounds(result);
 | 
|  }
 | 
|  
 | 
|  FilterEffect* FilterEffect::inputEffect(unsigned number) const
 | 
| 
 |