Bug 678938 - SMIL: Make sure current interval is properly cleared when doing a rewind; r=dholbert

This commit is contained in:
Brian Birtles 2011-09-02 08:15:44 +09:00
Родитель a6f99bfe9b
Коммит 7c2558cc34
3 изменённых файлов: 21 добавлений и 5 удалений

Просмотреть файл

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" class="reftest-wait">
<script>
window.addEventListener("load", function() {
setTimeout(function() {
document.documentElement.setCurrentTime(0);
document.documentElement.removeAttribute("class");
}, 0);
}, false);
</script>
<set id="c"/><set id="b" begin="c.begin; b.begin"/>
</svg>

После

Ширина:  |  Высота:  |  Размер: 346 B

Просмотреть файл

@ -37,7 +37,8 @@ load 615872-1.svg
load 650732-1.svg
load 665334-1.svg
load 669225-1.svg
load 670313-1.svg
load 669225-2.svg
load 670313-1.svg
load 678822-1.svg
load 678847-1.svg
load 678938-1.svg

Просмотреть файл

@ -758,10 +758,10 @@ nsSMILTimedElement::Rewind()
mSeekState == SEEK_BACKWARD_FROM_ACTIVE,
"Rewind in the middle of a forwards seek?");
ClearIntervals();
// ClearIntervals puts us in to the POSTACTIVE state but we're doing a full
// rewind so go back to the startup state
// Putting us in the startup state will ensure we skip doing any interval
// updates
mElementState = STATE_STARTUP;
ClearIntervals();
UnsetBeginSpec(RemoveNonDynamic);
UnsetEndSpec(RemoveNonDynamic);
@ -784,6 +784,8 @@ nsSMILTimedElement::Rewind()
mPrevRegisteredMilestone = sMaxMilestone;
RegisterMilestone();
NS_ABORT_IF_FALSE(!mCurrentInterval,
"Current interval is set at end of rewind");
}
namespace
@ -1332,7 +1334,9 @@ nsSMILTimedElement::ClearSpecs(TimeValueSpecList& aSpecs,
void
nsSMILTimedElement::ClearIntervals()
{
mElementState = STATE_POSTACTIVE;
if (mElementState != STATE_STARTUP) {
mElementState = STATE_POSTACTIVE;
}
mCurrentRepeatIteration = 0;
ResetCurrentInterval();