Bug 1461812 - Make sure we fully cleanup any partially constructed display lists when returning a failure from AttemptPartialUpdate. r=miko

MozReview-Commit-ID: DJBG6UFcoyR

--HG--
extra : rebase_source : 38e33ad785556b92b8058f00a85d48c27fb4d2e3
This commit is contained in:
Matt Woodrow 2018-05-16 12:55:08 +12:00
Родитель 9ab2784516
Коммит 5412f4e50b
4 изменённых файлов: 24 добавлений и 9 удалений

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

@ -0,0 +1,19 @@
<style>
:not(feConvolveMatrix) {
width: -moz-max-content;
column-width: 0em;
text-indent: 1pt;
}
.cl {
padding-bottom: 93vw;
}
</style>
<script>
function go() {
b.appendChild(a);
}
</script>
<marquee id="b">4H</marquee>
<details class="cl">
<summary id="a" style="mix-blend-mode:color-dodge">A</summary>
<style onload="go()">

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

@ -531,3 +531,4 @@ load 1453702.html
load 1453342.html
load 1453196.html
pref(dom.webcomponents.shadowdom.enabled,true) load 1414303.html
load 1461812.html

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

@ -463,11 +463,6 @@ public:
bool mResultIsModified;
};
void RetainedDisplayList::ClearDAG()
{
mDAG.Clear();
}
/**
* Takes two display lists and merges them into an output list.
*
@ -1119,7 +1114,7 @@ RetainedDisplayListBuilder::AttemptPartialUpdate(
&modifiedAGR, framesWithProps.Frames()) ||
!PreProcessDisplayList(&mList, modifiedAGR)) {
mBuilder.LeavePresShell(mBuilder.RootReferenceFrame(), List());
mList.ClearDAG();
mList.DeleteAll(&mBuilder);
return PartialUpdateResult::Failed;
}
@ -1157,7 +1152,8 @@ RetainedDisplayListBuilder::AttemptPartialUpdate(
if (mBuilder.PartialBuildFailed()) {
mBuilder.SetPartialBuildFailed(false);
mBuilder.LeavePresShell(mBuilder.RootReferenceFrame(), List());
mList.ClearDAG();
mList.DeleteAll(&mBuilder);
modifiedDL.DeleteAll(&mBuilder);
return PartialUpdateResult::Failed;
}

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

@ -3474,11 +3474,10 @@ public:
}
}
mOldItems.Clear();
mDAG.Clear();
nsDisplayList::DeleteAll(aBuilder);
}
void ClearDAG();
DirectedAcyclicGraph<MergedListUnits> mDAG;
// Temporary state initialized during the preprocess pass