Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Unified Diff: content/browser/site_per_process_browsertest.cc

Issue 2842203002: Forward GestureFlingStart in OOPIF, re-enable DCHECK. (Closed)
Patch Set: Add test. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/render_widget_host_input_event_router.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/site_per_process_browsertest.cc
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
index fdf7ab570a71aca6ab23acee05238327fdda4a6a..670f358515fe7a03766b93e0b1d1db96bd3a5273 100644
--- a/content/browser/site_per_process_browsertest.cc
+++ b/content/browser/site_per_process_browsertest.cc
@@ -938,38 +938,40 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, TitleAfterCrossSiteIframe) {
}
// Class to detect incoming GestureScrollEnd acks for bubbling tests.
-class GestureScrollEndObserver
+class InputEventAckWaiter
: public content::RenderWidgetHost::InputEventObserver {
public:
- GestureScrollEndObserver()
+ InputEventAckWaiter(blink::WebInputEvent::Type ack_type_waiting_for)
: message_loop_runner_(new content::MessageLoopRunner),
- gesture_scroll_end_ack_received_(false) {}
- ~GestureScrollEndObserver() override {}
+ ack_type_waiting_for_(ack_type_waiting_for),
+ desired_ack_type_received_(false) {}
+ ~InputEventAckWaiter() override {}
void OnInputEventAck(const blink::WebInputEvent& event) override {
- if (event.GetType() == blink::WebInputEvent::kGestureScrollEnd) {
- gesture_scroll_end_ack_received_ = true;
+ if (event.GetType() == ack_type_waiting_for_) {
+ desired_ack_type_received_ = true;
if (message_loop_runner_->loop_running())
message_loop_runner_->Quit();
}
}
void Wait() {
- if (!gesture_scroll_end_ack_received_) {
+ if (!desired_ack_type_received_) {
message_loop_runner_->Run();
}
}
void Reset() {
- gesture_scroll_end_ack_received_ = false;
+ desired_ack_type_received_ = false;
message_loop_runner_ = new content::MessageLoopRunner;
}
private:
scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
- bool gesture_scroll_end_ack_received_;
+ blink::WebInputEvent::Type ack_type_waiting_for_;
+ bool desired_ack_type_received_;
- DISALLOW_COPY_AND_ASSIGN(GestureScrollEndObserver);
+ DISALLOW_COPY_AND_ASSIGN(InputEventAckWaiter);
};
// Class to sniff incoming IPCs for FrameHostMsg_FrameRectChanged messages.
@@ -1119,6 +1121,70 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
EXPECT_LT(update_rect.y(), bounds.y() - rwhv_root->GetViewBounds().y());
}
+IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
kenrb 2017/04/27 20:47:23 This test should have a description.
+ GestureFlingStartEventsBubble) {
+ GURL main_url(embedded_test_server()->GetURL(
+ "a.com", "/cross_site_iframe_factory.html?a(b)"));
+ EXPECT_TRUE(NavigateToURL(shell(), main_url));
+
+ FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
+ ->GetFrameTree()
+ ->root();
+ ASSERT_EQ(1U, root->child_count());
+
+ FrameTreeNode* child_iframe_node = root->child_at(0);
+
+ std::unique_ptr<InputEventAckWaiter> gesture_fling_start_ack_observer =
+ base::MakeUnique<InputEventAckWaiter>(
+ blink::WebInputEvent::kGestureFlingStart);
+ root->current_frame_host()->GetRenderWidgetHost()->AddInputEventObserver(
+ gesture_fling_start_ack_observer.get());
+
+ RenderWidgetHost* child_rwh =
+ child_iframe_node->current_frame_host()->GetRenderWidgetHost();
+
+ WaitForChildFrameSurfaceReady(child_iframe_node->current_frame_host());
+
+ gesture_fling_start_ack_observer->Reset();
+ // Send a GSB, GSU, GFS sequence and verify that the GFS bubbles.
+ blink::WebGestureEvent gesture_scroll_begin(
+ blink::WebGestureEvent::kGestureScrollBegin,
+ blink::WebInputEvent::kNoModifiers,
+ blink::WebInputEvent::kTimeStampForTesting);
+ gesture_scroll_begin.source_device = blink::kWebGestureDeviceTouchscreen;
+ gesture_scroll_begin.data.scroll_begin.delta_hint_units =
+ blink::WebGestureEvent::ScrollUnits::kPrecisePixels;
+ gesture_scroll_begin.data.scroll_begin.delta_x_hint = 0.f;
+ gesture_scroll_begin.data.scroll_begin.delta_y_hint = 5.f;
+
+ child_rwh->ForwardGestureEvent(gesture_scroll_begin);
+
+ blink::WebGestureEvent gesture_scroll_update(
+ blink::WebGestureEvent::kGestureScrollUpdate,
+ blink::WebInputEvent::kNoModifiers,
+ blink::WebInputEvent::kTimeStampForTesting);
+ gesture_scroll_update.source_device = blink::kWebGestureDeviceTouchscreen;
+ gesture_scroll_update.data.scroll_update.delta_units =
+ blink::WebGestureEvent::ScrollUnits::kPrecisePixels;
+ gesture_scroll_update.data.scroll_update.delta_x = 0.f;
+ gesture_scroll_update.data.scroll_update.delta_y = 5.f;
+ gesture_scroll_update.data.scroll_update.velocity_y = 5.f;
+
+ child_rwh->ForwardGestureEvent(gesture_scroll_update);
+
+ blink::WebGestureEvent gesture_fling_start(
+ blink::WebGestureEvent::kGestureFlingStart,
+ blink::WebInputEvent::kNoModifiers,
+ blink::WebInputEvent::kTimeStampForTesting);
+ gesture_fling_start.source_device = blink::kWebGestureDeviceTouchscreen;
+ gesture_fling_start.data.fling_start.velocity_x = 0.f;
+ gesture_fling_start.data.fling_start.velocity_y = 5.f;
+
+ child_rwh->ForwardGestureEvent(gesture_fling_start);
+
+ gesture_fling_start_ack_observer->Wait();
kenrb 2017/04/27 20:47:23 Since there are no EXPECT statements in the later
+}
+
// Test that scrolling a nested out-of-process iframe bubbles unused scroll
// delta to a parent frame.
#if defined(OS_ANDROID)
@@ -1149,8 +1215,9 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
parent_iframe_node->current_frame_host()->GetProcess()->AddFilter(
filter.get());
- std::unique_ptr<GestureScrollEndObserver> ack_observer =
- base::MakeUnique<GestureScrollEndObserver>();
+ std::unique_ptr<InputEventAckWaiter> ack_observer =
+ base::MakeUnique<InputEventAckWaiter>(
+ blink::WebInputEvent::kGestureScrollEnd);
parent_iframe_node->current_frame_host()
->GetRenderWidgetHost()
->AddInputEventObserver(ack_observer.get());
« no previous file with comments | « content/browser/renderer_host/render_widget_host_input_event_router.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698