зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1253683 - Add a test. r=tnikkel
MozReview-Commit-ID: Cn3paFTFo1O --HG-- extra : rebase_source : 58868e2aef582b4fb12d5dd8af72996863d3fc13
This commit is contained in:
Родитель
63a50e8725
Коммит
20ce0084db
|
@ -81,6 +81,25 @@ function findRcdNode(apzcTree) {
|
|||
return null;
|
||||
}
|
||||
|
||||
// Return whether an element whose id includes |elementId| has been layerized.
|
||||
// Assumes |elementId| will be present in the content description for the
|
||||
// element, and not in the content descriptions of other elements.
|
||||
function isLayerized(elementId) {
|
||||
var contentTestData = SpecialPowers.getDOMWindowUtils(window).getContentAPZTestData();
|
||||
ok(contentTestData.paints.length > 0, "expected at least one paint");
|
||||
var seqno = contentTestData.paints[contentTestData.paints.length - 1].sequenceNumber;
|
||||
contentTestData = convertTestData(contentTestData);
|
||||
var paint = contentTestData.paints[seqno];
|
||||
for (var scrollId in paint) {
|
||||
if ("contentDescription" in paint[scrollId]) {
|
||||
if (paint[scrollId]["contentDescription"].includes(elementId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function flushApzRepaints(aCallback, aWindow = window) {
|
||||
if (!aCallback) {
|
||||
throw "A callback must be provided!";
|
||||
|
|
|
@ -52,3 +52,5 @@ skip-if = (toolkit == 'android') # wheel events not supported on mobile
|
|||
[test_group_mouseevents.html]
|
||||
[test_touch_listeners_impacting_wheel.html]
|
||||
skip-if = (toolkit == 'android') || (toolkit == 'cocoa') # wheel events not supported on mobile, and synthesized wheel smooth-scrolling not supported on OS X
|
||||
[test_bug1253683.html]
|
||||
skip-if = (os == 'android') || (os == 'b2g') # uses wheel events which are not supported on mobile
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=1253683
|
||||
-->
|
||||
<head>
|
||||
<title>Test to ensure non-scrollable frames don't get layerized</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/paint_listener.js"></script>
|
||||
<script type="application/javascript" src="apz_test_native_event_utils.js"></script>
|
||||
<script type="application/javascript" src="apz_test_utils.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<p id="display"></p>
|
||||
<div id="container" style="height: 500px; overflow:scroll">
|
||||
<pre id="no_layer" style="background-color: #f5f5f5; margin: 15px; padding: 15px; margin-top: 100px; border: 1px solid #eee; overflow:scroll">sample code here</pre>
|
||||
<div style="height: 5000px">spacer to make the 'container' div the root scrollable element</div>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript;version=1.7">
|
||||
|
||||
function* test(testDriver) {
|
||||
var container = document.getElementById('container');
|
||||
var no_layer = document.getElementById('no_layer');
|
||||
|
||||
// Check initial state
|
||||
is(container.scrollTop, 0, "Initial scrollY should be 0");
|
||||
ok(!isLayerized('no_layer'), "initially 'no_layer' should not be layerized");
|
||||
|
||||
// Scrolling over outer1 should layerize outer1, but not inner1.
|
||||
yield moveMouseAndScrollWheelOver(no_layer, 10, 10, testDriver, true);
|
||||
yield waitForAllPaints(function() {
|
||||
flushApzRepaints(testDriver);
|
||||
});
|
||||
|
||||
ok(container.scrollTop > 0, "We should have scrolled the body");
|
||||
ok(!isLayerized('no_layer'), "no_layer should still not be layerized");
|
||||
}
|
||||
|
||||
if (isApzEnabled()) {
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
// Turn off displayport expiry so that we don't miss failures where the
|
||||
// displayport is set and expired before we check for layerization.
|
||||
// Also enable APZ test logging, since we use that data to determine whether
|
||||
// a scroll frame was layerized.
|
||||
pushPrefs([["apz.displayport_expiry_ms", 0],
|
||||
["apz.test.logging_enabled", true]])
|
||||
.then(waitUntilApzStable)
|
||||
.then(runContinuation(test))
|
||||
.then(SimpleTest.finish);
|
||||
}
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -58,29 +58,8 @@ function scrollWheelOver(element, waitForScroll, testDriver) {
|
|||
moveMouseAndScrollWheelOver(element, 10, 10, testDriver, waitForScroll);
|
||||
}
|
||||
|
||||
var utils;
|
||||
|
||||
const DISPLAYPORT_EXPIRY = 100;
|
||||
|
||||
// Return whether the element with id |elementId| has been layerized.
|
||||
// Assumes |elementId| will be present in the content description for the
|
||||
// element, and not in the content descriptions of other elements.
|
||||
function isLayerized(elementId) {
|
||||
var contentTestData = utils.getContentAPZTestData();
|
||||
ok(contentTestData.paints.length > 0, "expected at least one paint");
|
||||
var seqno = contentTestData.paints[contentTestData.paints.length - 1].sequenceNumber;
|
||||
contentTestData = convertTestData(contentTestData);
|
||||
var paint = contentTestData.paints[seqno];
|
||||
for (var scrollId in paint) {
|
||||
if ("contentDescription" in paint[scrollId]) {
|
||||
if (paint[scrollId]["contentDescription"].includes(elementId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// This helper function produces another helper function, which, when invoked,
|
||||
// invokes the provided testDriver argument in a setTimeout 0. This is really
|
||||
// just useful in cases when there are no paints pending, because then
|
||||
|
@ -94,8 +73,6 @@ function asyncWrapper(testDriver) {
|
|||
}
|
||||
|
||||
function* test(testDriver) {
|
||||
utils = SpecialPowers.getDOMWindowUtils(window);
|
||||
|
||||
// Initially, nothing should be layerized.
|
||||
ok(!isLayerized('outer1'), "initially 'outer1' should not be layerized");
|
||||
ok(!isLayerized('inner1'), "initially 'inner1' should not be layerized");
|
||||
|
|
Загрузка…
Ссылка в новой задаче