Bug 1464288 - Make sure PreProcessDisplayLists logic for switching AGRs matches what ComputeRebuildRegion uses. r?miko
MozReview-Commit-ID: F6N0XLCpuEe
--- a/layout/painting/RetainedDisplayListBuilder.cpp
+++ b/layout/painting/RetainedDisplayListBuilder.cpp
@@ -70,17 +70,18 @@ MarkFramesWithItemsAndImagesModified(nsD
MarkFramesWithItemsAndImagesModified(i->GetChildren());
}
}
}
static AnimatedGeometryRoot*
SelectAGRForFrame(nsIFrame* aFrame, AnimatedGeometryRoot* aParentAGR)
{
- if (!aFrame->IsStackingContext()) {
+ if (!aFrame->IsStackingContext() ||
+ !aFrame->IsFixedPosContainingBlock()) {
return aParentAGR;
}
if (!aFrame->HasOverrideDirtyRegion()) {
return nullptr;
}
nsDisplayListBuilder::DisplayListBuildingData* data =
new file mode 100644
--- /dev/null
+++ b/layout/reftests/display-list/1464288-1.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html reftest-async-scroll
+ reftest-displayport-x="0" reftest-displayport-y="0"
+ reftest-displayport-w="800" reftest-displayport-h="2000"
+ reftest-async-scroll-x="0" reftest-async-scroll-y="400"
+ class="reftest-wait">
+<head>
+
+<style>
+
+body {
+ margin: 0;
+ height: 4000px;
+ overflow:hidden;
+}
+
+div {
+ left: 200px;
+ top: 200px;
+ width: 200px;
+ height: 200px;
+}
+
+.scrolled {
+ position: absolute;
+ z-index: 1;
+}
+
+.fixed {
+ position: fixed;
+ background-color: red;
+}
+
+</style>
+</head>
+<body>
+
+<div style="opacity:0.5">
+ <div class="scrolled" style="top: 200px; background-color: green"></div>
+ <div class="scrolled" style="top: 600px; background-color:blue" id="scrolled"></div>
+ <div class="fixed" style="top: 200px"></div>
+ <div class="fixed" id="fixed" style="top: 200px; width: 100px; height: 100px; z-index: 2; background-color: orange"></div>
+</div>
+
+</body>
+
+<script>
+function doTest() {
+ document.getElementById("fixed").style.backgroundColor = "red";
+ document.documentElement.removeAttribute("class");
+}
+
+window.addEventListener("MozReftestInvalidate", doTest);
+</script>
+</html>
new file mode 100644
--- /dev/null
+++ b/layout/reftests/display-list/1464288-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+body {
+ margin: 0;
+}
+
+div {
+ left: 200px;
+ top: 200px;
+ position:absolute;
+}
+</style>
+</head>
+<body>
+<div style="opacity:0.5; position:static">
+ <div style="width: 200px; height: 200px; background-color: blue;"></div>
+ <div style="width: 100px; height: 100px; background-color: red;"></div>
+</div>
+</body>
+</html>
--- a/layout/reftests/display-list/reftest.list
+++ b/layout/reftests/display-list/reftest.list
@@ -28,8 +28,9 @@ skip-if(!asyncPan) == 1437374-1.html 143
== 1443027-1.html 1443027-ref.html
== 1443027-2.html 1443027-ref.html
== 1443027-3.html 1443027-3-ref.html
== 1451971-1.html 1451971-ref.html
== 1453541-1.html 1453541-ref.html
== 1453541-2.html 1453541-ref.html
== 1452805-1.html 1452805-ref.html
== 1461231-1.html about:blank
+fuzzy(2,40000) skip-if(!asyncPan) == 1464288-1.html 1464288-ref.html