Skip to content

Commit

Permalink
No vertical scroll if kVerticalScroll disabled
Browse files Browse the repository at this point in the history
'vertical-scroll' policy is a policy-controlled feature which allows
developers to control scrollability of their web pages and disallow
embedded content from blocking vertical scrolling. In line with the
implementation of the feature, this CL ensures that any content inside
a document which has the feature disabled will not be able to consume
vertical scroll deltas.

Note that the current implementation of the policy only deals with
methods of blocking input from turning into scroll gesture. This CL
complements that  controlling the consumption of such gestures.

Bug: 853485
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_slimming_paint_v2;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I7db68e5897998ba29f2ad75cef44660563d6b95b
Reviewed-on: https://chromium-review.googlesource.com/c/1252530
Reviewed-by: David Bokan <[email protected]>
Reviewed-by: Ehsan Karamad <[email protected]>
Commit-Queue: Ehsan Karamad <[email protected]>
Cr-Commit-Position: refs/heads/master@{#598035}
  • Loading branch information
ehsan-karamad authored and chromium-wpt-export-bot committed Oct 9, 2018
1 parent 0ba93eb commit caff176
Show file tree
Hide file tree
Showing 2 changed files with 129 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<style>
body, html {
height: 100%;
width: 100%;
}
#spacer {
width: 1500px;
height: 1500px;
background-color: red;
}
</style>
<body>
<p>This page is scrollable.</p>
<div id="spacer"></div>
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<!doctype html>
<meta name="timeout" content="long">
<title>vertical-scroll test for touch-action</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/feature-policy/experimental-features/resources/common.js"></script>
<script src="/feature-policy/experimental-features/resources/vertical-scroll.js"></script>
<style>
html, body {
height: 100%;
width: 100%;
}

iframe {
width: 90%;
height: 90%;
margin: 0;
padding: 0;
}

.spacer {
width: 100%;
height: 100%;
margin: 100%;
}
</style>
<iframe></iframe>
<br/>
<p>Spacers below to make page scrollable</p>
<br/>
<div class="spacer"></div>
<div class="spacer"></div>
<p> EOF </p>

<script>
"use strict";

let url = url_base + "vertical-scroll-scrollable-content.html";
let iframeElement = document.querySelector("iframe");

// Wait for the helper scripts to load.
promise_test(async() => {
if (window.input_api_ready)
return Promise.resolve();
await new Promise( (r) => {
window.resolve_on_input_api_ready = r;
});
}, "Make sure input injection API is ready.");

// Sanity-check: Verify we can scroll using the test-API (empty <iframe>).
promise_test(async() => {
window.scrollTo(0, 0);

await inject_input("down");
assert_greater_than(window.scrollY, 0, "Page must have scrolled down.");

await inject_input("right");
assert_greater_than(window.scrollX, 0, "Page must have scrolled right.");
}, "Verify that the page normally scrolls.");

// Sanity-check: <iframe> normally scrolls.
promise_test(async() => {
// Make sure <window> can scroll both towards right and bottom.
window.scrollTo(0, 0);

await loadUrlInIframe(iframeElement, url);
iframeElement.contentWindow.scrollTo(0, 0);

await inject_input("down");
assert_greater_than(
iframeElement.contentWindow.scrollY,
0,
"<iframe> must have scrolled down.");


// Apply the scroll gesture.
await inject_input("right");
assert_greater_than(
iframeElement.contentWindow.scrollX,
0,
"<iframe> must have scrolled right.");

}, "Verify that the <iframe> normally scrolls.");

// Disable 'vertical-scroll': <iframe> should only scroll horizontally.
promise_test(async() => {
window.scrollTo(0, 0);

// Disallow vertical scroll and reload the <iframe>.
setFeatureState(iframeElement, "vertical-scroll", "'none'");
await loadUrlInIframe(iframeElement, url);
iframeElement.contentWindow.scrollTo(0, 0);

// Apply the scroll gesture. Main frame should and <iframe> should not
// scroll vertically.
await inject_input("down");
assert_equals(iframeElement.contentWindow.scrollY,
0,
"<iframe> must not scroll vertically.");
assert_greater_than(window.scrollY,
0,
"Page must scroll vertically.");

window.scrollTo(0, 0);
iframeElement.contentWindow.scrollTo(0, 0);

await inject_input("right");
assert_greater_than(iframeElement.contentWindow.scrollX,
0,
"<iframe> must have scrolled right.");
}, "When 'vertical-scroll' is disabled in a document, scrollable contents " +
"can only *horizontally* scroll.");
</script>

0 comments on commit caff176

Please sign in to comment.