Backed out 2 changesets (bug 1661897) for mochitest failures on test_group_mouseevents.html . CLOSED TREE

Backed out changeset 34ee0403ab1e (bug 1661897)
Backed out changeset f83db4b41bf6 (bug 1661897)
This commit is contained in:
Narcis Beleuzu 2020-09-01 07:47:59 +03:00
Родитель f16141c258
Коммит b4560d9e94
4 изменённых файлов: 5 добавлений и 185 удалений

Просмотреть файл

@ -583,13 +583,6 @@ function synthesizeNativeMouseEvent(aTarget, aX, aY, aType, aObserver = null) {
return true;
}
// Promise-returning variant of synthesizeNativeMouseEvent
function promiseNativeMouseEvent(aTarget, aX, aY, aType) {
return new Promise(resolve => {
synthesizeNativeMouseEvent(aTarget, aX, aY, aType, resolve);
});
}
function synthesizeNativeClick(aElement, aX, aY, aObserver = null) {
var pt = coordinatesRelativeToScreen(aX, aY, aElement);
var utils = SpecialPowers.getDOMWindowUtils(
@ -652,8 +645,7 @@ function moveMouseAndScrollWheelOver(
dx,
dy,
testDriver,
waitForScroll = true,
scrollDelta = 10
waitForScroll = true
) {
return synthesizeNativeMouseMoveAndWaitForMoveEvent(
target,
@ -666,7 +658,7 @@ function moveMouseAndScrollWheelOver(
dx,
dy,
0,
-scrollDelta,
-10,
testDriver
);
} else {
@ -675,7 +667,7 @@ function moveMouseAndScrollWheelOver(
dx,
dy,
0,
-scrollDelta,
-10,
testDriver
);
}
@ -690,18 +682,10 @@ function promiseMoveMouseAndScrollWheelOver(
target,
dx,
dy,
waitForScroll = true,
scrollDelta = 10
waitForScroll = true
) {
return new Promise(resolve => {
moveMouseAndScrollWheelOver(
target,
dx,
dy,
resolve,
waitForScroll,
scrollDelta
);
moveMouseAndScrollWheelOver(target, dx, dy, resolve, waitForScroll);
});
}
@ -792,75 +776,6 @@ function* dragVerticalScrollbar(
};
}
// Synthesizes a native mouse drag, starting at offset (mouseX, mouseY) from
// the given target. The drag occurs in the given number of steps, to a final
// destination of (mouseX + distanceX, mouseY + distanceY) from the target.
// Returns a promise (wrapped in a function, so it doesn't execute immediately)
// that should be awaited after the mousemoves have been processed by the widget
// code, to end the drag. This is important otherwise the OS can sometimes
// reorder the events and the drag doesn't have the intended effect (see
// bug 1368603).
// Example usage:
// let dragFinisher = await promiseNativeMouseDrag(myElement, 0, 0);
// await myIndicationThatDragHadAnEffect;
// await dragFinisher();
async function promiseNativeMouseDrag(
target,
mouseX,
mouseY,
distanceX = 20,
distanceY = 20,
steps = 20
) {
var targetElement = elementForTarget(target);
dump(
"Starting drag at " +
mouseX +
", " +
mouseY +
" from top-left of #" +
targetElement.id +
"\n"
);
// Move the mouse to the target position
await promiseNativeMouseEvent(
target,
mouseX,
mouseY,
nativeMouseMoveEventMsg()
);
// mouse down
await promiseNativeMouseEvent(
target,
mouseX,
mouseY,
nativeMouseDownEventMsg()
);
// drag vertically by |increment| until we reach the specified distance
for (var s = 1; s <= steps; s++) {
let dx = distanceX * (s / steps);
let dy = distanceY * (s / steps);
dump(`Dragging to ${mouseX + dx}, ${mouseY + dy} from target\n`);
await promiseNativeMouseEvent(
target,
mouseX + dx,
mouseY + dy,
nativeMouseMoveEventMsg()
);
}
// and return a function-wrapped promise to call afterwards to finish the drag
return function() {
return promiseNativeMouseEvent(
target,
mouseX + distanceX,
mouseY + distanceY,
nativeMouseUpEventMsg()
);
};
}
// Synthesizes a native touch sequence of events corresponding to a pinch-zoom-in
// at the given focus point.
function* pinchZoomInTouchSequence(focusX, focusY) {

Просмотреть файл

@ -1,87 +0,0 @@
<!DOCTYPE HTML>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, minimum-scale=1.0">
<title>Tests that pending visual scroll positions on RSFs of non-RCDs get cleared properly</title>
<script src="apz_test_utils.js"></script>
<script src="apz_test_native_event_utils.js"></script>
<script src="/tests/SimpleTest/paint_listener.js"></script>
<body>
<iframe style="width: 300px; height: 300px" id="scroller"></iframe>
<script>
function populateScroller() {
let text = '<div id="line0">line 0</div><br>';
for (let i = 1; i < 100; i++) {
text += 'line ' + i + '<br>';
}
/* eslint-disable no-unsanitized/property */
document.querySelector('#scroller').contentDocument.body.innerHTML = text;
}
function reconstructScroller() {
let scroller = document.querySelector('#scroller');
scroller.style.display = 'none';
/* eslint-disable no-unused-vars */
let dummyToForceFlush = scroller.scrollTop;
scroller.style.display = '';
dummyToForceFlush = scroller.scrollTop;
}
async function test() {
let scroller = document.querySelector('#scroller');
let subwin = scroller.contentWindow;
populateScroller();
subwin.scrollTo(0, 100);
is(subwin.scrollY, 100, 'Scroller scrolled down to y=100');
// let the visual scroll position round-trip through APZ
await promiseApzFlushedRepaints();
// frame reconstruction does a ScrollToVisual. The bug is that the pending
// visual scroll offset update never gets cleared even though the paint
// transaction should clear it.
reconstructScroller();
await promiseApzFlushedRepaints();
// Scroll back up to the top using APZ-side scrolling, and wait for the APZ
// wheel animation to complete and the final scroll position to get synced
// back to the main thread.
await promiseMoveMouseAndScrollWheelOver(subwin, 10, 10, true, -100);
let utils = SpecialPowers.getDOMWindowUtils(window);
for (let i = 0; i < 60; i++) {
utils.advanceTimeAndRefresh(16);
}
utils.restoreNormalRefresh();
await promiseApzFlushedRepaints();
is(subwin.scrollY, 0, 'Scroller scrolled up to y=0');
// Do a mouse-drag-selection. I couldn't find any simpler way to reproduce
// the problem.
const kMouseMovePixels = 10;
let promiseMouseMovesDone = new Promise((resolve) => {
let mouseDownX = 0;
subwin.document.documentElement.addEventListener('mousedown', (e) => {
dump(`Got mousedown at ${e.screenX}\n`);
mouseDownX = e.screenX;
});
subwin.document.documentElement.addEventListener('mousemove', (e) => {
// Mousemove events can get squashed together so we check the coord
// instead.
dump(`Got mousemove at ${e.screenX}\n`);
if (e.screenX - mouseDownX >= kMouseMovePixels) {
resolve();
}
});
});
let line0 = subwin.document.querySelector('#line0');
let dragFinisher = await promiseNativeMouseDrag(line0, 1, 5, kMouseMovePixels, 0, kMouseMovePixels);
await promiseMouseMovesDone;
await dragFinisher();
is(subwin.scrollY, 0, 'Scroller should remain at y=0');
}
waitUntilApzStable()
.then(test)
.finally(subtestDone);
</script>

Просмотреть файл

@ -39,9 +39,6 @@ var subtests = [
{"file": "helper_bug1490393-2.html"},
// Scrollbar-dragging on scrollframes inside filters inside transforms
{"file": "helper_bug1550510.html"},
// Drag-select some text after reconstructing the RSF of a non-RCD to ensure
// the pending visual offset update doesn't get stuck
{"file": "helper_visualscroll_nonrcd_rsf.html"},
];
if (isApzEnabled()) {

Просмотреть файл

@ -9296,9 +9296,7 @@ ScrollMetadata nsLayoutUtils::ComputeScrollMetadata(
presShell->ScrollToVisual(presShell->GetVisualViewportOffset(),
FrameMetrics::eRestore, ScrollMode::Instant);
}
}
if (scrollableFrame->IsRootScrollFrameOfDocument()) {
if (const Maybe<PresShell::VisualScrollUpdate>& visualUpdate =
presShell->GetPendingVisualScrollUpdate()) {
metrics.SetVisualDestination(
@ -9306,9 +9304,6 @@ ScrollMetadata nsLayoutUtils::ComputeScrollMetadata(
metrics.SetVisualScrollUpdateType(visualUpdate->mUpdateType);
presShell->AcknowledgePendingVisualScrollUpdate();
}
}
if (aIsRootContent) {
// Expand the layout viewport to the size including the area covered by
// the dynamic toolbar in the case where the dynamic toolbar is being
// used, otherwise when the dynamic toolbar transitions on the compositor,