Skip `content-visibility: hidden` content in display lists
Differential Revision: https://phabricator.services.mozilla.com/D142341
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1761995
gecko-commit: ae2ee4d99f50c99802242dcfd5acbabd44553575
gecko-reviewers: emilio
diff --git a/css/css-contain/content-visibility/content-visibility-canvas-ref.html b/css/css-contain/content-visibility/content-visibility-canvas-ref.html
new file mode 100644
index 0000000..dbedcf1
--- /dev/null
+++ b/css/css-contain/content-visibility/content-visibility-canvas-ref.html
@@ -0,0 +1,17 @@
+<!doctype HTML>
+<html>
+<meta charset="utf8">
+<title>Content Visibility: hidden canvas (reference)</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+
+<style>
+div {
+ width: 200px;
+ height: 200px;
+ background: green;
+ border: 1px solid black;
+}
+</style>
+
+<div></div>
diff --git a/css/css-contain/content-visibility/content-visibility-canvas.html b/css/css-contain/content-visibility/content-visibility-canvas.html
new file mode 100644
index 0000000..fe46948
--- /dev/null
+++ b/css/css-contain/content-visibility/content-visibility-canvas.html
@@ -0,0 +1,43 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: hidden canvas</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="content-visibility-canvas-ref.html">
+<meta name="assert" content="content-visibility hidden canvas element does not paint replaced content">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+canvas {
+ width: 200px;
+ height: 200px;
+ background: green;
+ border: 1px solid black;
+}
+.hidden {
+ content-visibility: hidden;
+}
+</style>
+
+<canvas id="canvas">
+</canvas>
+
+<script>
+async function runTest() {
+ var context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, canvas.width, canvas.height);
+
+ canvas.classList.add("hidden");
+ requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => {
+ requestAnimationFrame(() => {
+ requestAnimationFrame(runTest);
+ });
+};
+</script>
+</html>
diff --git a/css/css-contain/content-visibility/content-visibility-video-ref.html b/css/css-contain/content-visibility/content-visibility-video-ref.html
new file mode 100644
index 0000000..5e1e9bd
--- /dev/null
+++ b/css/css-contain/content-visibility/content-visibility-video-ref.html
@@ -0,0 +1,17 @@
+<!doctype HTML>
+<html>
+<meta charset="utf8">
+<title>Content Visibility: hidden video (reference)</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+
+<style>
+div {
+ width: 200px;
+ height: 200px;
+ background: green;
+ border: 1px solid black;
+}
+</style>
+
+<div></div>
diff --git a/css/css-contain/content-visibility/content-visibility-video.html b/css/css-contain/content-visibility/content-visibility-video.html
new file mode 100644
index 0000000..bed5954
--- /dev/null
+++ b/css/css-contain/content-visibility/content-visibility-video.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<meta charset="utf-8">
+<title>Content Visibility: hidden video</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+<link rel="match" href="content-visibility-video-ref.html">
+<meta name="assert" content="content-visibility hidden video element does not paint replaced content">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+video {
+ width: 200px;
+ height: 200px;
+ background: green;
+ border: 1px solid black;
+}
+.hidden {
+ content-visibility: hidden;
+}
+</style>
+
+<body>
+ <video id="video" poster="../support/blue-100x100.png" src="../support/white.webm" controls></video>
+</body>
+
+<script>
+async function runTest() {
+ video.classList.add("hidden");
+ video.play();
+ requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => {
+ requestAnimationFrame(() => {
+ requestAnimationFrame(runTest);
+ });
+};
+</script>
+</html>