mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 870205 - Fix intermittent browser_bug295977_autoscroll_overflow.js. r=neil
This commit is contained in:
parent
3fccb7fce6
commit
1d611b64cf
@ -9,7 +9,7 @@ function test()
|
||||
const expectScrollBoth = 3;
|
||||
|
||||
var allTests = [
|
||||
{dataUri: 'data:text/html,<body><style type="text/css">div { display: inline-block; }</style>\
|
||||
{dataUri: 'data:text/html,<html><head><meta charset="utf-8"></head><body><style type="text/css">div { display: inline-block; }</style>\
|
||||
<div id="a" style="width: 100px; height: 100px; overflow: hidden;"><div style="width: 200px; height: 200px;"></div></div>\
|
||||
<div id="b" style="width: 100px; height: 100px; overflow: auto;"><div style="width: 200px; height: 200px;"></div></div>\
|
||||
<div id="c" style="width: 100px; height: 100px; overflow-x: auto; overflow-y: hidden;"><div style="width: 200px; height: 200px;"></div></div>\
|
||||
@ -23,7 +23,7 @@ function test()
|
||||
<div id="g" style="width: 99px; height: 99px; border: 10px solid black; margin: 10px; overflow: auto;"><div style="width: 100px; height: 100px;"></div></div>\
|
||||
<div id="h" style="width: 100px; height: 100px; overflow: -moz-hidden-unscrollable;"><div style="width: 200px; height: 200px;"></div></div>\
|
||||
<iframe id="iframe" style="display: none;"></iframe>\
|
||||
</body>'},
|
||||
</body></html>'},
|
||||
{elem: 'a', expected: expectScrollNone},
|
||||
{elem: 'b', expected: expectScrollBoth},
|
||||
{elem: 'c', expected: expectScrollHori},
|
||||
@ -32,11 +32,11 @@ function test()
|
||||
{elem: 'f', expected: expectScrollNone},
|
||||
{elem: 'g', expected: expectScrollBoth},
|
||||
{elem: 'h', expected: expectScrollNone},
|
||||
{dataUri: 'data:text/html,<html><body id="i" style="overflow-y: scroll"><div style="height: 2000px"></div>\
|
||||
{dataUri: 'data:text/html,<html><head><meta charset="utf-8"></head><body id="i" style="overflow-y: scroll"><div style="height: 2000px"></div>\
|
||||
<iframe id="iframe" style="display: none;"></iframe>\
|
||||
</body></html>'},
|
||||
{elem: 'i', expected: expectScrollVert}, // bug 695121
|
||||
{dataUri: 'data:text/html,<html><style>html, body { width: 100%; height: 100%; overflow-x: hidden; overflow-y: scroll; }</style>\
|
||||
{dataUri: 'data:text/html,<html><head><meta charset="utf-8"></head><style>html, body { width: 100%; height: 100%; overflow-x: hidden; overflow-y: scroll; }</style>\
|
||||
<body id="j"><div style="height: 2000px"></div>\
|
||||
<iframe id="iframe" style="display: none;"></iframe>\
|
||||
</body></html>'},
|
||||
@ -58,14 +58,35 @@ function test()
|
||||
}
|
||||
|
||||
var elem = doc.getElementById(test.elem);
|
||||
// Skip the first callback as it's the same callback that the browser
|
||||
// uses to kick off the scrolling.
|
||||
var skipFrames = 1;
|
||||
var checkScroll = function () {
|
||||
if (skipFrames--) {
|
||||
|
||||
let firstTimestamp = undefined;
|
||||
function checkScroll(timestamp) {
|
||||
if (firstTimestamp === undefined) {
|
||||
firstTimestamp = timestamp;
|
||||
}
|
||||
|
||||
// This value is calculated similarly to the value of the same name in
|
||||
// ClickEventHandler.autoscrollLoop, except here it's cumulative across
|
||||
// all frames after the first one instead of being based only on the
|
||||
// current frame.
|
||||
let timeCompensation = (timestamp - firstTimestamp) / 20;
|
||||
info("timestamp=" + timestamp + " firstTimestamp=" + firstTimestamp +
|
||||
" timeCompensation=" + timeCompensation);
|
||||
|
||||
// Try to wait until enough time has passed to allow the scroll to happen.
|
||||
// autoscrollLoop incrementally scrolls during each animation frame, but
|
||||
// due to how its calculations work, when a frame is very close to the
|
||||
// previous frame, no scrolling may actually occur during that frame.
|
||||
// After 20ms's worth of frames, timeCompensation will be 1, making it
|
||||
// more likely that the accumulated scroll in autoscrollLoop will be >= 1,
|
||||
// although it also depends on acceleration, which here in this test
|
||||
// should be > 1 due to how it synthesizes mouse events below.
|
||||
if (timeCompensation < 1) {
|
||||
window.mozRequestAnimationFrame(checkScroll);
|
||||
return;
|
||||
}
|
||||
|
||||
// Close the autoscroll popup by synthesizing Esc.
|
||||
EventUtils.synthesizeKey("VK_ESCAPE", {}, gBrowser.contentWindow);
|
||||
var scrollVert = test.expected & expectScrollVert;
|
||||
ok((scrollVert && elem.scrollTop > 0) ||
|
||||
@ -83,6 +104,8 @@ function test()
|
||||
EventUtils.synthesizeMouse(elem, 50, 50, { button: 1 },
|
||||
gBrowser.contentWindow);
|
||||
|
||||
// This ensures bug 605127 is fixed: pagehide in an unrelated document
|
||||
// should not cancel the autoscroll.
|
||||
var iframe = gBrowser.contentDocument.getElementById("iframe");
|
||||
var e = iframe.contentDocument.createEvent("pagetransition");
|
||||
e.initPageTransitionEvent("pagehide", true, true, false);
|
||||
@ -92,11 +115,8 @@ function test()
|
||||
EventUtils.synthesizeMouse(elem, 100, 100,
|
||||
{ type: "mousemove", clickCount: "0" },
|
||||
gBrowser.contentWindow);
|
||||
/*
|
||||
* if scrolling didn’t work, we wouldn’t do any redraws and thus time out.
|
||||
* so request and force redraws to get the chance to check for scrolling at
|
||||
* all.
|
||||
*/
|
||||
|
||||
// Start checking for the scroll.
|
||||
window.mozRequestAnimationFrame(checkScroll);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user