Commit dbd21124 authored by Lan Wei's avatar Lan Wei Committed by Commit Bot

Use gpuBenchmarking.smoothScrollByXY in mouse-wheel-main-frame-event.html

After we finish the scroll unification, the scrolls happens mainly on
the compositor thread, and the scroll code in the main thread will be
removed. eventSender sends the scroll events to main thread, so it
would not work after the scroll unification. We should replace
eventSender.continuousMouseScrollBy with
gpuBenchmarking.smoothScrollByXY in
fast/events/mouse-wheel-main-frame-event.html.

Bug: 1047176
Change-Id: I5746dc6504e15984862957c670c458979afe5b4a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2332327Reviewed-by: default avatarDavid Bokan <bokan@chromium.org>
Commit-Queue: Lan Wei <lanwei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#795681}
parent 6a8832a6
...@@ -3069,4 +3069,128 @@ TEST_F(EventHandlerSimTest, TestNoCrashOnMouseWheelZeroDelta) { ...@@ -3069,4 +3069,128 @@ TEST_F(EventHandlerSimTest, TestNoCrashOnMouseWheelZeroDelta) {
GetDocument().View()->LayoutViewport()->GetScrollOffset().Width()); GetDocument().View()->LayoutViewport()->GetScrollOffset().Width());
} }
// The mouse wheel events which have the phases of "MayBegin" or "Cancel"
// should fire wheel events to the DOM.
TEST_F(EventHandlerSimTest, TestNoWheelEventWithPhaseMayBeginAndCancel) {
WebView().MainFrameWidget()->Resize(WebSize(800, 600));
SimRequest request("https://example.com/test.html", "text/html");
LoadURL("https://example.com/test.html");
request.Complete(R"HTML(
<!DOCTYPE html>
<body>
<div id="area" style="width:100px;height:100px">
</div>
<p id='log'>no wheel event</p>
</body>
<script>
document.addEventListener('wheel', (e) => {
let log = document.getElementById('log');
log.innerText = 'received wheel event, deltaX: ' + e.deltaX + ' deltaY: ' + e.deltaY;
});
</script>
)HTML");
Compositor().BeginFrame();
// Set mouse position and active web view.
InitializeMousePositionAndActivateView(50, 50);
Compositor().BeginFrame();
WebElement element = GetDocument().getElementById("log");
WebMouseWheelEvent wheel_event(
blink::WebInputEvent::Type::kMouseWheel,
blink::WebInputEvent::kNoModifiers,
blink::WebInputEvent::GetStaticTimeStampForTests());
wheel_event.SetPositionInScreen(50, 50);
wheel_event.delta_x = 0;
wheel_event.delta_y = 0;
wheel_event.phase = WebMouseWheelEvent::kPhaseMayBegin;
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("no wheel event", element.InnerHTML().Utf8());
wheel_event.phase = WebMouseWheelEvent::kPhaseCancelled;
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("no wheel event", element.InnerHTML().Utf8());
}
// The mouse wheel events which have the phases of "End" should fire wheel
// events to the DOM, but for other phases like "Begin", "Change" and
// "Stationary", there should be wheels evnets fired to the DOM.
TEST_F(EventHandlerSimTest, TestWheelEventsWithDifferentPhases) {
WebView().MainFrameWidget()->Resize(WebSize(800, 600));
SimRequest request("https://example.com/test.html", "text/html");
LoadURL("https://example.com/test.html");
request.Complete(R"HTML(
<!DOCTYPE html>
<body>
<div id="area" style="width:100px;height:100px">
</div>
<p id='log'>no wheel event</p>
</body>
<script>
document.addEventListener('wheel', (e) => {
let log = document.getElementById('log');
log.innerText = 'received wheel event, deltaX: ' + e.deltaX + ' deltaY: ' + e.deltaY;
});
</script>
)HTML");
Compositor().BeginFrame();
// Set mouse position and active web view.
InitializeMousePositionAndActivateView(50, 50);
Compositor().BeginFrame();
auto* element = GetDocument().getElementById("log");
WebMouseWheelEvent wheel_event(
blink::WebInputEvent::Type::kMouseWheel,
blink::WebInputEvent::kNoModifiers,
blink::WebInputEvent::GetStaticTimeStampForTests());
wheel_event.SetPositionInScreen(50, 50);
wheel_event.delta_x = 0;
wheel_event.delta_y = 0;
wheel_event.phase = WebMouseWheelEvent::kPhaseMayBegin;
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("no wheel event", element->innerHTML().Utf8());
wheel_event.delta_y = -1;
wheel_event.phase = WebMouseWheelEvent::kPhaseBegan;
element->setInnerHTML("no wheel event");
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("received wheel event, deltaX: 0 deltaY: 1",
element->innerHTML().Utf8());
wheel_event.delta_y = -2;
wheel_event.phase = WebMouseWheelEvent::kPhaseChanged;
element->setInnerHTML("no wheel event");
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("received wheel event, deltaX: 0 deltaY: 2",
element->innerHTML().Utf8());
wheel_event.delta_y = -3;
wheel_event.phase = WebMouseWheelEvent::kPhaseChanged;
element->setInnerHTML("no wheel event");
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("received wheel event, deltaX: 0 deltaY: 3",
element->innerHTML().Utf8());
wheel_event.delta_y = -4;
wheel_event.phase = WebMouseWheelEvent::kPhaseStationary;
element->setInnerHTML("no wheel event");
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("received wheel event, deltaX: 0 deltaY: 4",
element->innerHTML().Utf8());
wheel_event.delta_y = -5;
wheel_event.phase = WebMouseWheelEvent::kPhaseChanged;
element->setInnerHTML("no wheel event");
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("received wheel event, deltaX: 0 deltaY: 5",
element->innerHTML().Utf8());
wheel_event.delta_y = 0;
wheel_event.phase = WebMouseWheelEvent::kPhaseEnded;
element->setInnerHTML("no wheel event");
GetDocument().GetFrame()->GetEventHandler().HandleWheelEvent(wheel_event);
EXPECT_EQ("no wheel event", element->innerHTML().Utf8());
}
} // namespace blink } // namespace blink
<!DOCTYPE html>
<title>MouseWheel: Scroll shouldn't fire extra events for certain phase</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
function mouseScrollByPixel(x, y, phase) {
if (!window.eventSender)
return;
const isMac = navigator.platform.indexOf('Mac') != -1;
if (!isMac) {
// Other platforms don't have Phase info yet.
if (phase == 'phaseEnded' || phase == 'phaseCancelled' || phase == 'phaseMayBegin')
return;
phase = 'phaseNone';
}
eventSender.continuousMouseScrollBy(x, y, false, true, 0, false, phase);
}
test(function() {
if (!window.eventSender) {
document.write('This test requires eventSender');
return;
}
var event_log = '';
document.addEventListener('wheel', function(event) {
event_log += `(${event.deltaX},${event.deltaY},${event.deltaZ})`;
});
eventSender.mouseMoveTo(50, 50);
mouseScrollByPixel(0, 0, 'phaseMayBegin');
mouseScrollByPixel(0, -1, 'phaseBegan');
mouseScrollByPixel(0, -2, 'phaseChanged');
mouseScrollByPixel(0, -3, 'phaseChanged');
mouseScrollByPixel(0, -4, 'phaseStationary');
mouseScrollByPixel(0, -5, 'phaseChanged');
mouseScrollByPixel(0, 0, 'phaseEnded');
assert_equals(event_log, '(0,1,0)(0,2,0)(0,3,0)(0,4,0)(0,5,0)');
}, 'Simulate track-pad two finger scroll');
test(function() {
if (!window.eventSender) {
document.write('This test requires eventSender');
return;
}
var event_log = '';
document.addEventListener('wheel', function(event) {
event_log += `(${event.deltaX},${event.deltaY},${event.deltaZ})`;
});
eventSender.mouseMoveTo(50, 50);
mouseScrollByPixel(0, 0, 'phaseMayBegin');
mouseScrollByPixel(0, 0, 'phaseCancelled');
assert_equals(event_log, '');
}, 'Simulate track-pad two finger touch and release');
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment