Commit 437b8ad4 authored by Sahel Sharify's avatar Sahel Sharify Committed by Commit Bot

Reland "Added Fling Bubbling browsertests."

This is a reland of f24f12dd

This cl is using RenderFrameDeletedObserver to avoid crbug.com/889002
which is the cause of the crashes in flakiness dashboard:
https://chromium-swarm.appspot.com/task?id=409ddad025e7a610&refresh=10&show_raw=1


Original change's description:
> Added Fling Bubbling browsertests.
>
> The tests were initially landed in the following cl:
> https://chromium-review.googlesource.com/c/chromium/src/+/1278963
>
> The logic of the cl is re-landed in a separate cl(r599781) to give it
> more time to bake. This cl re-lands the browser tests after applying
> the following changes:
>
> 1- Addressed renaming nit.
> 2- Used MainThreadFrameObserver to make sure that compositor is synced
> after scrolling on main thread.
>
> Bug: 894703
> Change-Id: I25d6dbf7f216bbedecb6673d6c2819dcd1d82d55
> Reviewed-on: https://chromium-review.googlesource.com/c/1286875
> Reviewed-by: Charlie Reis <creis@chromium.org>
> Reviewed-by: Kevin McNee <mcnee@chromium.org>
> Commit-Queue: Sahel Sharify <sahel@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#600509}

Bug: 894703
Change-Id: I07b802b807c93beb684378e2fe18357fabf3ecbe
Reviewed-on: https://chromium-review.googlesource.com/c/1289515Reviewed-by: default avatarCharlie Reis <creis@chromium.org>
Commit-Queue: Sahel Sharify <sahel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#600931}
parent 77f7e421
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "build/build_config.h"
#include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h" #include "content/browser/renderer_host/input/synthetic_smooth_scroll_gesture.h"
#include "content/browser/web_contents/web_contents_impl.h" #include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/test/browser_test_utils.h" #include "content/public/test/browser_test_utils.h"
...@@ -74,6 +75,11 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest { ...@@ -74,6 +75,11 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest {
shell()->web_contents()->GetRenderViewHost()->GetWidget()); shell()->web_contents()->GetRenderViewHost()->GetWidget());
} }
void SynchronizeThreads() {
MainThreadFrameObserver observer(GetWidgetHost());
observer.Wait();
}
void LoadURL(const std::string& page_data) { void LoadURL(const std::string& page_data) {
const GURL data_url("data:text/html," + page_data); const GURL data_url("data:text/html," + page_data);
NavigateToURL(shell(), data_url); NavigateToURL(shell(), data_url);
...@@ -84,25 +90,29 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest { ...@@ -84,25 +90,29 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest {
base::string16 ready_title(base::ASCIIToUTF16("ready")); base::string16 ready_title(base::ASCIIToUTF16("ready"));
TitleWatcher watcher(shell()->web_contents(), ready_title); TitleWatcher watcher(shell()->web_contents(), ready_title);
ignore_result(watcher.WaitAndGetTitle()); ignore_result(watcher.WaitAndGetTitle());
SynchronizeThreads();
MainThreadFrameObserver main_thread_sync(host);
main_thread_sync.Wait();
} }
void LoadPageWithOOPIF() { void LoadPageWithOOPIF() {
// navigate main frame to URL. // navigate main frame to URL.
GURL main_url(embedded_test_server()->GetURL( GURL main_url(embedded_test_server()->GetURL(
"a.com", "/frame_tree/page_with_positioned_frame.html")); "a.com", "/frame_tree/scrollable_page_with_positioned_frame.html"));
EXPECT_TRUE(NavigateToURL(shell(), main_url)); EXPECT_TRUE(NavigateToURL(shell(), main_url));
// Navigate oopif to URL.
FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
->GetFrameTree() ->GetFrameTree()
->root(); ->root();
ASSERT_EQ(1U, root->child_count()); ASSERT_EQ(1U, root->child_count());
// Navigate oopif to URL.
FrameTreeNode* iframe_node = root->child_at(0); FrameTreeNode* iframe_node = root->child_at(0);
GURL iframe_url(embedded_test_server()->GetURL("b.com", "/tall_page.html")); GURL iframe_url(embedded_test_server()->GetURL("b.com", "/tall_page.html"));
NavigateFrameToURL(iframe_node, iframe_url); {
RenderFrameDeletedObserver deleted_observer(
iframe_node->current_frame_host());
NavigateFrameToURL(iframe_node, iframe_url);
deleted_observer.WaitUntilDeleted();
}
WaitForHitTestDataOrChildSurfaceReady(iframe_node->current_frame_host()); WaitForHitTestDataOrChildSurfaceReady(iframe_node->current_frame_host());
FrameTreeVisualizer visualizer; FrameTreeVisualizer visualizer;
...@@ -119,17 +129,29 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest { ...@@ -119,17 +129,29 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest {
iframe_node->current_frame_host()->GetRenderWidgetHost()->GetView()); iframe_node->current_frame_host()->GetRenderWidgetHost()->GetView());
} }
void SimulateTouchscreenFling(RenderWidgetHostImpl* render_widget_host) { void SimulateTouchscreenFling(
RenderWidgetHostImpl* render_widget_host,
RenderWidgetHostImpl* parent_render_widget_host = nullptr,
const gfx::Vector2dF& fling_velocity = gfx::Vector2dF(0.f, -2000.f)) {
DCHECK(render_widget_host); DCHECK(render_widget_host);
// Send a GSB to start scrolling sequence. // Send a GSB to start scrolling sequence. In case of scroll bubbling wait
// for the parent to receive the GSB before sending the GFS.
auto input_msg_watcher =
parent_render_widget_host
? std::make_unique<InputMsgWatcher>(
parent_render_widget_host,
blink::WebInputEvent::kGestureScrollBegin)
: std::make_unique<InputMsgWatcher>(
render_widget_host,
blink::WebInputEvent::kGestureScrollBegin);
blink::WebGestureEvent gesture_scroll_begin( blink::WebGestureEvent gesture_scroll_begin(
blink::WebGestureEvent::kGestureScrollBegin, blink::WebGestureEvent::kGestureScrollBegin,
blink::WebInputEvent::kNoModifiers, ui::EventTimeForNow()); blink::WebInputEvent::kNoModifiers, ui::EventTimeForNow());
gesture_scroll_begin.SetSourceDevice(blink::kWebGestureDeviceTouchscreen); gesture_scroll_begin.SetSourceDevice(blink::kWebGestureDeviceTouchscreen);
gesture_scroll_begin.data.scroll_begin.delta_hint_units = gesture_scroll_begin.data.scroll_begin.delta_hint_units =
blink::WebGestureEvent::ScrollUnits::kPrecisePixels; blink::WebGestureEvent::ScrollUnits::kPrecisePixels;
gesture_scroll_begin.data.scroll_begin.delta_x_hint = 0.f; gesture_scroll_begin.data.scroll_begin.delta_x_hint = fling_velocity.x();
gesture_scroll_begin.data.scroll_begin.delta_y_hint = -5.f; gesture_scroll_begin.data.scroll_begin.delta_y_hint = fling_velocity.y();
const gfx::PointF scroll_location_in_widget(1, 1); const gfx::PointF scroll_location_in_widget(1, 1);
const gfx::PointF scroll_location_in_root = const gfx::PointF scroll_location_in_root =
child_view_ ? child_view_->TransformPointToRootCoordSpaceF( child_view_ ? child_view_->TransformPointToRootCoordSpaceF(
...@@ -142,26 +164,39 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest { ...@@ -142,26 +164,39 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest {
gesture_scroll_begin.SetPositionInWidget(scroll_location_in_widget); gesture_scroll_begin.SetPositionInWidget(scroll_location_in_widget);
gesture_scroll_begin.SetPositionInScreen(scroll_location_in_screen); gesture_scroll_begin.SetPositionInScreen(scroll_location_in_screen);
render_widget_host->ForwardGestureEvent(gesture_scroll_begin); render_widget_host->ForwardGestureEvent(gesture_scroll_begin);
input_msg_watcher->GetAckStateWaitIfNecessary();
// Send a GFS. // Send a GFS.
blink::WebGestureEvent gesture_fling_start( blink::WebGestureEvent gesture_fling_start(
blink::WebGestureEvent::kGestureFlingStart, blink::WebGestureEvent::kGestureFlingStart,
blink::WebInputEvent::kNoModifiers, ui::EventTimeForNow()); blink::WebInputEvent::kNoModifiers, ui::EventTimeForNow());
gesture_fling_start.SetSourceDevice(blink::kWebGestureDeviceTouchscreen); gesture_fling_start.SetSourceDevice(blink::kWebGestureDeviceTouchscreen);
gesture_fling_start.data.fling_start.velocity_x = 0.f; gesture_fling_start.data.fling_start.velocity_x = fling_velocity.x();
gesture_fling_start.data.fling_start.velocity_y = -2000.f; gesture_fling_start.data.fling_start.velocity_y = fling_velocity.y();
gesture_fling_start.SetPositionInWidget(scroll_location_in_widget); gesture_fling_start.SetPositionInWidget(scroll_location_in_widget);
gesture_fling_start.SetPositionInScreen(scroll_location_in_screen); gesture_fling_start.SetPositionInScreen(scroll_location_in_screen);
render_widget_host->ForwardGestureEvent(gesture_fling_start); render_widget_host->ForwardGestureEvent(gesture_fling_start);
} }
void SimulateTouchpadFling(RenderWidgetHostImpl* render_widget_host) { void SimulateTouchpadFling(
RenderWidgetHostImpl* render_widget_host,
RenderWidgetHostImpl* parent_render_widget_host = nullptr,
const gfx::Vector2dF& fling_velocity = gfx::Vector2dF(0.f, -2000.f)) {
DCHECK(render_widget_host); DCHECK(render_widget_host);
// Send a wheel event to start scrolling sequence. // Send a wheel event to start scrolling sequence. In case of scroll
auto input_msg_watcher = std::make_unique<InputMsgWatcher>( // bubbling wait for the parent to receive the GSB before sending the GFS.
GetWidgetHost(), blink::WebInputEvent::kMouseWheel); auto input_msg_watcher =
parent_render_widget_host
? std::make_unique<InputMsgWatcher>(
parent_render_widget_host,
blink::WebInputEvent::kGestureScrollBegin)
: std::make_unique<InputMsgWatcher>(
render_widget_host,
blink::WebInputEvent::kGestureScrollBegin);
blink::WebMouseWheelEvent wheel_event = blink::WebMouseWheelEvent wheel_event =
SyntheticWebMouseWheelEventBuilder::Build(10, 10, 0, -53, 0, true); SyntheticWebMouseWheelEventBuilder::Build(
10, 10, fling_velocity.x() / 1000, fling_velocity.y() / 1000, 0,
true);
wheel_event.phase = blink::WebMouseWheelEvent::kPhaseBegan; wheel_event.phase = blink::WebMouseWheelEvent::kPhaseBegan;
const gfx::PointF position_in_widget(1, 1); const gfx::PointF position_in_widget(1, 1);
const gfx::PointF position_in_root = const gfx::PointF position_in_root =
...@@ -175,15 +210,15 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest { ...@@ -175,15 +210,15 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest {
wheel_event.SetPositionInWidget(position_in_widget); wheel_event.SetPositionInWidget(position_in_widget);
wheel_event.SetPositionInScreen(position_in_screen); wheel_event.SetPositionInScreen(position_in_screen);
render_widget_host->ForwardWheelEvent(wheel_event); render_widget_host->ForwardWheelEvent(wheel_event);
input_msg_watcher->WaitForAck(); input_msg_watcher->GetAckStateWaitIfNecessary();
// Send a GFS. // Send a GFS.
blink::WebGestureEvent gesture_fling_start( blink::WebGestureEvent gesture_fling_start(
blink::WebGestureEvent::kGestureFlingStart, blink::WebGestureEvent::kGestureFlingStart,
blink::WebInputEvent::kNoModifiers, ui::EventTimeForNow()); blink::WebInputEvent::kNoModifiers, ui::EventTimeForNow());
gesture_fling_start.SetSourceDevice(blink::kWebGestureDeviceTouchpad); gesture_fling_start.SetSourceDevice(blink::kWebGestureDeviceTouchpad);
gesture_fling_start.data.fling_start.velocity_x = 0.f; gesture_fling_start.data.fling_start.velocity_x = fling_velocity.x();
gesture_fling_start.data.fling_start.velocity_y = -2000.f; gesture_fling_start.data.fling_start.velocity_y = fling_velocity.y();
gesture_fling_start.SetPositionInWidget(position_in_widget); gesture_fling_start.SetPositionInWidget(position_in_widget);
gesture_fling_start.SetPositionInScreen(position_in_screen); gesture_fling_start.SetPositionInScreen(position_in_screen);
render_widget_host->ForwardGestureEvent(gesture_fling_start); render_widget_host->ForwardGestureEvent(gesture_fling_start);
...@@ -212,25 +247,36 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest { ...@@ -212,25 +247,36 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest {
run_loop.Run(); run_loop.Run();
} }
void WaitForChildScroll() { void WaitForFrameScroll(FrameTreeNode* frame_node,
FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) int target_scroll_offset = 100,
->GetFrameTree() bool upward = false) {
->root(); DCHECK(frame_node);
ASSERT_EQ(1U, root->child_count()); double scroll_top =
FrameTreeNode* iframe_node = root->child_at(0); EvalJs(frame_node->current_frame_host(), "window.scrollY")
int scroll_top = EvalJs(iframe_node->current_frame_host(), "window.scrollY") .ExtractDouble();
.ExtractDouble();
// scrollTop > 0 is not enough since the first progressFling is called from // scrollTop > 0 is not enough since the first progressFling is called from
// FlingController::ProcessGestureFlingStart. Wait for scrollTop to exceed // FlingController::ProcessGestureFlingStart. Wait for scrollTop to reach
// 100 pixels to make sure that ProgressFling has been called through // target_scroll_offset to make sure that ProgressFling has been called
// FlingScheduler at least once. // through FlingScheduler at least once.
while (scroll_top < 100) { while ((upward && scroll_top > target_scroll_offset) ||
(!upward && scroll_top < target_scroll_offset)) {
GiveItSomeTime(); GiveItSomeTime();
scroll_top = EvalJs(iframe_node->current_frame_host(), "window.scrollY") scroll_top = EvalJs(frame_node->current_frame_host(), "window.scrollY")
.ExtractDouble(); .ExtractDouble();
} }
} }
FrameTreeNode* GetRootNode() {
return static_cast<WebContentsImpl*>(shell()->web_contents())
->GetFrameTree()
->root();
}
FrameTreeNode* GetChildNode() {
FrameTreeNode* root = GetRootNode();
return root->child_at(0);
}
std::unique_ptr<base::RunLoop> run_loop_; std::unique_ptr<base::RunLoop> run_loop_;
RenderWidgetHostViewBase* child_view_ = nullptr; RenderWidgetHostViewBase* child_view_ = nullptr;
RenderWidgetHostViewBase* root_view_ = nullptr; RenderWidgetHostViewBase* root_view_ = nullptr;
...@@ -239,6 +285,10 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest { ...@@ -239,6 +285,10 @@ class BrowserSideFlingBrowserTest : public ContentBrowserTest {
DISALLOW_COPY_AND_ASSIGN(BrowserSideFlingBrowserTest); DISALLOW_COPY_AND_ASSIGN(BrowserSideFlingBrowserTest);
}; };
// On Mac we don't have any touchscreen/touchpad fling events (GFS/GFC).
// Instead, the OS keeps sending wheel events when the user lifts their fingers
// from touchpad.
#if !defined(OS_MACOSX)
IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, TouchscreenFling) { IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, TouchscreenFling) {
LoadURL(kBrowserFlingDataURL); LoadURL(kBrowserFlingDataURL);
SimulateTouchscreenFling(GetWidgetHost()); SimulateTouchscreenFling(GetWidgetHost());
...@@ -257,8 +307,7 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, ...@@ -257,8 +307,7 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest,
GURL first_url(embedded_test_server()->GetURL( GURL first_url(embedded_test_server()->GetURL(
"b.a.com", "/scrollable_page_with_iframe.html")); "b.a.com", "/scrollable_page_with_iframe.html"));
EXPECT_TRUE(NavigateToURL(shell(), first_url)); EXPECT_TRUE(NavigateToURL(shell(), first_url));
MainThreadFrameObserver main_thread_sync1(GetWidgetHost()); SynchronizeThreads();
main_thread_sync1.Wait();
SimulateTouchscreenFling(GetWidgetHost()); SimulateTouchscreenFling(GetWidgetHost());
WaitForScroll(); WaitForScroll();
...@@ -266,8 +315,7 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, ...@@ -266,8 +315,7 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest,
GURL second_url( GURL second_url(
embedded_test_server()->GetURL("a.com", "/scrollable_page.html")); embedded_test_server()->GetURL("a.com", "/scrollable_page.html"));
NavigateToURL(shell(), second_url); NavigateToURL(shell(), second_url);
MainThreadFrameObserver main_thread_sync2(GetWidgetHost()); SynchronizeThreads();
main_thread_sync2.Wait();
// Wait for 100ms. Then check that the second page has not scrolled. // Wait for 100ms. Then check that the second page has not scrolled.
GiveItSomeTime(100); GiveItSomeTime(100);
...@@ -281,23 +329,89 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, ...@@ -281,23 +329,89 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest,
IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, TouchscreenFlingInOOPIF) { IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, TouchscreenFlingInOOPIF) {
LoadPageWithOOPIF(); LoadPageWithOOPIF();
SimulateTouchscreenFling(child_view_->host()); SimulateTouchscreenFling(child_view_->host());
WaitForChildScroll(); WaitForFrameScroll(GetChildNode());
} }
IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, TouchpadFlingInOOPIF) { IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, TouchpadFlingInOOPIF) {
LoadPageWithOOPIF(); LoadPageWithOOPIF();
SimulateTouchscreenFling(child_view_->host()); SimulateTouchpadFling(child_view_->host());
WaitForChildScroll(); WaitForFrameScroll(GetChildNode());
}
IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest,
TouchscreenFlingBubblesFromOOPIF) {
LoadPageWithOOPIF();
// Scroll the parent down so that it is scrollable upward.
EXPECT_TRUE(
ExecJs(GetRootNode()->current_frame_host(), "window.scrollTo(0, 20)"));
// We expect to have window.scrollY == 20 after scrolling but with zoom for
// dsf enabled on android we get window.scrollY == 19 (see
// https://crbug.com/891860).
WaitForFrameScroll(GetRootNode(), 19);
SynchronizeThreads();
// Fling and wait for the parent to scroll upward.
gfx::Vector2d fling_velocity(0, 2000);
SimulateTouchscreenFling(child_view_->host(), GetWidgetHost(),
fling_velocity);
WaitForFrameScroll(GetRootNode(), 15, true /* upward */);
}
// Flaky, probably because of https://crbug.com/892656
IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest,
DISABLED_TouchpadFlingBubblesFromOOPIF) {
LoadPageWithOOPIF();
// Scroll the parent down so that it is scrollable upward.
EXPECT_TRUE(
ExecJs(GetRootNode()->current_frame_host(), "window.scrollTo(0, 20)"));
// We expect to have window.scrollY == 20 after scrolling but with zoom for
// dsf enabled on android we get window.scrollY == 19 (see
// https://crbug.com/891860).
WaitForFrameScroll(GetRootNode(), 19);
SynchronizeThreads();
// Fling and wait for the parent to scroll upward.
gfx::Vector2d fling_velocity(0, 2000);
SimulateTouchpadFling(child_view_->host(), GetWidgetHost(), fling_velocity);
WaitForFrameScroll(GetRootNode(), 15, true /* upward */);
}
IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, GFCGetsBubbledFromOOPIF) {
LoadPageWithOOPIF();
// Scroll the parent down so that it is scrollable upward.
EXPECT_TRUE(
ExecJs(GetRootNode()->current_frame_host(), "window.scrollTo(0, 20)"));
// We expect to have window.scrollY == 20 after scrolling but with zoom for
// dsf enabled on android we get window.scrollY == 19 (see
// https://crbug.com/891860).
WaitForFrameScroll(GetRootNode(), 19);
SynchronizeThreads();
// Fling and wait for the parent to scroll upward.
gfx::Vector2d fling_velocity(0, 2000);
SimulateTouchscreenFling(child_view_->host(), GetWidgetHost(),
fling_velocity);
WaitForFrameScroll(GetRootNode(), 15, true /* upward */);
// Send a GFC to the child and wait for it to get bubbled.
auto input_msg_watcher = std::make_unique<InputMsgWatcher>(
GetWidgetHost(), blink::WebInputEvent::kGestureFlingCancel);
blink::WebGestureEvent gesture_fling_cancel(
blink::WebGestureEvent::kGestureFlingCancel,
blink::WebInputEvent::kNoModifiers, ui::EventTimeForNow());
gesture_fling_cancel.SetSourceDevice(blink::kWebGestureDeviceTouchscreen);
const gfx::PointF location_in_widget(1, 1);
const gfx::PointF location_in_root =
child_view_->TransformPointToRootCoordSpaceF(location_in_widget);
const gfx::PointF location_in_screen =
location_in_root + root_view_->GetViewBounds().OffsetFromOrigin();
gesture_fling_cancel.SetPositionInWidget(location_in_widget);
gesture_fling_cancel.SetPositionInScreen(location_in_screen);
child_view_->host()->ForwardGestureEvent(gesture_fling_cancel);
input_msg_watcher->GetAckStateWaitIfNecessary();
} }
// Disabled on MacOS because it doesn't support touchscreen scroll.
#if defined(OS_MACOSX)
#define MAYBE_ScrollEndGeneratedForFilteredFling \
DISABLED_ScrollEndGeneratedForFilteredFling
#else
// Flaky, see https://crbug.com/850455 // Flaky, see https://crbug.com/850455
#define MAYBE_ScrollEndGeneratedForFilteredFling \ #define MAYBE_ScrollEndGeneratedForFilteredFling \
DISABLED_ScrollEndGeneratedForFilteredFling DISABLED_ScrollEndGeneratedForFilteredFling
#endif
IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest,
MAYBE_ScrollEndGeneratedForFilteredFling) { MAYBE_ScrollEndGeneratedForFilteredFling) {
LoadURL(kTouchActionFilterDataURL); LoadURL(kTouchActionFilterDataURL);
...@@ -348,5 +462,6 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest, ...@@ -348,5 +462,6 @@ IN_PROC_BROWSER_TEST_F(BrowserSideFlingBrowserTest,
EXPECT_EQ(InputEventAckSource::BROWSER, EXPECT_EQ(InputEventAckSource::BROWSER,
scroll_end_watcher->last_event_ack_source()); scroll_end_watcher->last_event_ack_source());
} }
#endif // !defined(OS_MACOSX)
} // namespace content } // namespace content
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