Commit 7b78300c authored by fs@opera.com's avatar fs@opera.com

Adjust error-handling for invalid filter primitive references

When a filter primitive has an 'in' (or, where applicable, 'in2') attribute
that references a non-existent result, treat that reference as having the
default value (==no value) instead of producing an error.
This aligns with Presto and IE.

BUG=411833

Review URL: https://codereview.chromium.org/558693002

git-svn-id: svn://svn.chromium.org/blink/trunk@181733 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 0b3e5ace
...@@ -1247,6 +1247,8 @@ crbug.com/392706 virtual/threaded/animations/play-state-initially-paused.html [ ...@@ -1247,6 +1247,8 @@ crbug.com/392706 virtual/threaded/animations/play-state-initially-paused.html [
crbug.com/389594 svg/filters/feBlend-all-modes.html [ NeedsManualRebaseline ] crbug.com/389594 svg/filters/feBlend-all-modes.html [ NeedsManualRebaseline ]
crbug.com/411833 svg/filters/feMerge-wrong-input.svg [ NeedsRebaseline ]
# V8 3.28.19 # V8 3.28.19
crbug.com/392762 fast/js/nested-object-gc.html [ Pass Crash ] crbug.com/392762 fast/js/nested-object-gc.html [ Pass Crash ]
......
<!DOCTYPE html>
<div style="width: 400px; height: 100px; background-color: green"></div>
<!DOCTYPE html>
<svg width="400" height="100">
<filter id="notFirst">
<feFlood flood-color="green"/>
<feComposite in2="SourceGraphic" in="unknown" operator="atop"/>
</filter>
<filter id="notFirstEmpty">
<feFlood flood-color="green"/>
<feComposite in2="SourceGraphic" in="" operator="atop"/>
</filter>
<filter id="first">
<feComposite in2="SourceGraphic" in="unknown" operator="atop"/>
</filter>
<filter id="firstEmpty">
<feComposite in2="SourceGraphic" in="" operator="atop"/>
</filter>
<rect width="100" height="100" fill="red" filter="url(#notFirst)"/>
<rect x="100" width="100" height="100" fill="red" filter="url(#notFirstEmpty)"/>
<rect x="200" width="100" height="100" fill="green" filter="url(#first)"/>
<rect x="300" width="100" height="100" fill="green" filter="url(#firstEmpty)"/>
</svg>
...@@ -48,17 +48,18 @@ void SVGFilterBuilder::add(const AtomicString& id, PassRefPtr<FilterEffect> effe ...@@ -48,17 +48,18 @@ void SVGFilterBuilder::add(const AtomicString& id, PassRefPtr<FilterEffect> effe
FilterEffect* SVGFilterBuilder::getEffectById(const AtomicString& id) const FilterEffect* SVGFilterBuilder::getEffectById(const AtomicString& id) const
{ {
if (id.isEmpty()) { if (!id.isEmpty()) {
if (m_lastEffect) if (FilterEffect* builtinEffect = m_builtinEffects.get(id))
return m_lastEffect.get(); return builtinEffect;
return m_builtinEffects.get(SourceGraphic::effectName()); if (FilterEffect* namedEffect = m_namedEffects.get(id))
return namedEffect;
} }
if (m_builtinEffects.contains(id)) if (m_lastEffect)
return m_builtinEffects.get(id); return m_lastEffect.get();
return m_namedEffects.get(id); return m_builtinEffects.get(SourceGraphic::effectName());
} }
void SVGFilterBuilder::appendEffectToEffectReferences(PassRefPtr<FilterEffect> prpEffect, RenderObject* object) void SVGFilterBuilder::appendEffectToEffectReferences(PassRefPtr<FilterEffect> prpEffect, RenderObject* object)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment