Do not scroll content with `content-visibility: hidden` ancestors into view

Differential Revision: https://phabricator.services.mozilla.com/D142563

bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1762407
gecko-commit: 9da4eda47412174b48f545b1a598a641d6180d1a
gecko-reviewers: emilio
diff --git a/css/css-contain/content-visibility/scrollIntoView-target-with-contents-hidden-ref.html b/css/css-contain/content-visibility/scrollIntoView-target-with-contents-hidden-ref.html
new file mode 100644
index 0000000..1b554d7
--- /dev/null
+++ b/css/css-contain/content-visibility/scrollIntoView-target-with-contents-hidden-ref.html
@@ -0,0 +1,34 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: scrollIntoView should scroll when target has content-visibility: hidden</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.spacer {
+  width: 150px;
+  height: 3000px;
+  background: lightblue;
+}
+#target {
+  width: 150px;
+  height: 150px;
+  background: lightgreen;
+}
+</style>
+
+<div class="spacer"></div>
+<div id="target"></div>
+
+<script>
+function runTest() {
+  document.getElementById("target").scrollIntoView();
+  requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => { requestAnimationFrame(runTest); };
+</script>
+</html>
diff --git a/css/css-contain/content-visibility/scrollIntoView-target-with-contents-hidden.html b/css/css-contain/content-visibility/scrollIntoView-target-with-contents-hidden.html
new file mode 100644
index 0000000..576702c
--- /dev/null
+++ b/css/css-contain/content-visibility/scrollIntoView-target-with-contents-hidden.html
@@ -0,0 +1,37 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: scrollIntoView should scroll when target has content-visibility: hidden</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="scrollIntoView-target-with-contents-hidden-ref.html">
+<meta name="assert" content="scrollIntoView works properly when used on target with content-visibility: hidden">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.spacer {
+  width: 150px;
+  height: 3000px;
+  background: lightblue;
+}
+#target {
+  width: 150px;
+  height: 150px;
+  background: lightgreen;
+  content-visibility: hidden;
+}
+</style>
+
+<div class="spacer"></div>
+<div id="target">hidden content</div>
+
+<script>
+function runTest() {
+  document.getElementById("target").scrollIntoView();
+  requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => { requestAnimationFrame(runTest); };
+</script>
+</html>
diff --git a/css/css-contain/content-visibility/scrollIntoView-with-focus-target-with-contents-hidden-ref.html b/css/css-contain/content-visibility/scrollIntoView-with-focus-target-with-contents-hidden-ref.html
new file mode 100644
index 0000000..8c45c7d
--- /dev/null
+++ b/css/css-contain/content-visibility/scrollIntoView-with-focus-target-with-contents-hidden-ref.html
@@ -0,0 +1,34 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: scrollIntoView should scroll when target has content-visibility: hidden</title>
+<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain/#content-visibility">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.spacer {
+  width: 150px;
+  height: 3000px;
+  background: lightblue;
+}
+#target {
+  width: 150px;
+  height: 150px;
+  background: lightgreen;
+}
+</style>
+
+<div class="spacer"></div>
+<div id="target" tabindex="0"></div>
+
+<script>
+function runTest() {
+  document.getElementById("target").focus();
+  requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => { requestAnimationFrame(runTest); };
+</script>
+</html>
diff --git a/css/css-contain/content-visibility/scrollIntoView-with-focus-target-with-contents-hidden.html b/css/css-contain/content-visibility/scrollIntoView-with-focus-target-with-contents-hidden.html
new file mode 100644
index 0000000..7816f4b
--- /dev/null
+++ b/css/css-contain/content-visibility/scrollIntoView-with-focus-target-with-contents-hidden.html
@@ -0,0 +1,37 @@
+<!doctype HTML>
+<html class="reftest-wait">
+<meta charset="utf8">
+<title>Content Visibility: scrollIntoView triggered by focus() should scroll when target has content-visibility: hidden</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="scrollIntoView-with-focus-target-with-contents-hidden-ref.html">
+<meta name="assert" content="scrollIntoView triggered by focus() works properly when used on target with content-visibility: hidden">
+
+<script src="/common/reftest-wait.js"></script>
+
+<style>
+.spacer {
+  width: 150px;
+  height: 3000px;
+  background: lightblue;
+}
+#target {
+  width: 150px;
+  height: 150px;
+  background: lightgreen;
+  content-visibility: hidden;
+}
+</style>
+
+<div class="spacer"></div>
+<div id="target" tabindex="0">hidden content</div>
+
+<script>
+function runTest() {
+  document.getElementById("target").focus();
+  requestAnimationFrame(takeScreenshot);
+}
+
+window.onload = () => { requestAnimationFrame(runTest); };
+</script>
+</html>