diff --git a/feature-policy/experimental-features/resources/feature-policy-vertical-scroll.html b/feature-policy/experimental-features/resources/feature-policy-vertical-scroll.html
new file mode 100644
index 00000000000000..2b8253850cf12d
--- /dev/null
+++ b/feature-policy/experimental-features/resources/feature-policy-vertical-scroll.html
@@ -0,0 +1,35 @@
+
+
+
+
+
diff --git a/feature-policy/experimental-features/resources/vertical_scroll_common.js b/feature-policy/experimental-features/resources/vertical_scroll_common.js
new file mode 100644
index 00000000000000..be026f12acbedb
--- /dev/null
+++ b/feature-policy/experimental-features/resources/vertical_scroll_common.js
@@ -0,0 +1,57 @@
+// Common method used in vertical scrolling tests.
+const same_origin_url = "/feature-policy/experimental-features/resources/feature-policy-vertical-scroll.html";
+const cross_origin_url = "https://{{domains[www]}}:{{ports[https][0]}}" + same_origin_url;
+const large_number = 1000000;
+const visible_rect = new DOMRect(0, 0, window.innerWidth, window.innerHeight);
+
+function rect_contains(rect, x, y) {
+ return (rect.left <= x) && (rect.right >= x) &&
+ (rect.top <= y) && (rect.bottom >= y);
+}
+
+function rect_intersects(rect1, rect2) {
+ return rect_contains(rect1, rect2.left, rect2.top) ||
+ rect_contains(rect1, rect2.left, rect2.bottom) ||
+ rect_contains(rect1, rect2.right, rect2.top) ||
+ rect_contains(rect1, rect2.right, rect2.bottom);
+}
+
+function iframe() {
+ return document.querySelector("iframe");
+}
+
+// Returns a promise which is resolved when the