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

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc

Issue 503883004: Don't pass touches to gesture recognizer for async acks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix bug, add test. Created 6 years, 4 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
Index: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 8fa46d90ca99edc31a0cfab03bbe53d2715a83be..839bb474fd2f521272d8981cde40c9255e03b070 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -39,6 +39,7 @@
#include "ui/aura/env.h"
#include "ui/aura/layout_manager.h"
#include "ui/aura/test/aura_test_helper.h"
+#include "ui/aura/test/aura_test_utils.h"
#include "ui/aura/test/test_cursor_client.h"
#include "ui/aura/test/test_screen.h"
#include "ui/aura/test/test_window_delegate.h"
@@ -217,11 +218,36 @@ class FakeFrameSubscriber : public RenderWidgetHostViewFrameSubscriber {
base::Callback<void(bool)> callback_;
};
+class FakeWindowEventDispatcher : public aura::WindowEventDispatcher {
+ public:
+ FakeWindowEventDispatcher(aura::WindowTreeHost* host)
+ : WindowEventDispatcher(host),
+ processed_touch_event_count_(0) {}
+ virtual void ProcessedTouchEvent(aura::Window* window,
+ ui::EventResult result) OVERRIDE {
+ WindowEventDispatcher::ProcessedTouchEvent(window, result);
+ processed_touch_event_count_++;
+ }
+
+ size_t processed_touch_event_count() {
+ return processed_touch_event_count_;
+ }
+
+ private:
+ size_t processed_touch_event_count_;
+};
+
class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura {
public:
FakeRenderWidgetHostViewAura(RenderWidgetHost* widget)
: RenderWidgetHostViewAura(widget), has_resize_lock_(false) {}
+ void UseFakeDispatcher() {
+ dispatcher_ = new FakeWindowEventDispatcher(window()->GetHost());
+ aura::test::WindowTreeHostTestApi host(window()->GetHost());
+ host.set_dispatcher(dispatcher_);
+ }
+
virtual ~FakeRenderWidgetHostViewAura() {}
virtual scoped_ptr<ResizeLock> CreateResizeLock(
@@ -273,6 +299,7 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura {
bool has_resize_lock_;
gfx::Size last_frame_size_;
scoped_ptr<cc::CopyOutputRequest> last_copy_request_;
+ FakeWindowEventDispatcher* dispatcher_;
};
// A layout manager that always resizes a child to the root window size.
@@ -367,6 +394,15 @@ class RenderWidgetHostViewAuraTest : public testing::Test {
virtual void TearDown() { TearDownEnvironment(); }
+ void SendInputEventACK(WebInputEvent::Type type,
+ InputEventAckState ack_result) {
+ InputHostMsg_HandleInputEvent_ACK_Params ack;
+ ack.type = type;
+ ack.state = ack_result;
+ InputHostMsg_HandleInputEvent_ACK response(0, ack);
+ widget_host_->OnMessageReceived(response);
+ }
+
protected:
base::MessageLoopForUI message_loop_;
BrowserThreadImpl browser_thread_for_ui_;
@@ -520,15 +556,6 @@ class RenderWidgetHostViewAuraOverscrollTest
velocityX, velocityY, sourceDevice));
}
- void SendInputEventACK(WebInputEvent::Type type,
- InputEventAckState ack_result) {
- InputHostMsg_HandleInputEvent_ACK_Params ack;
- ack.type = type;
- ack.state = ack_result;
- InputHostMsg_HandleInputEvent_ACK response(0, ack);
- widget_host_->OnMessageReceived(response);
- }
-
bool ScrollStateIsContentScrolling() const {
return scroll_state() == OverscrollController::STATE_CONTENT_SCROLLING;
}
@@ -2753,4 +2780,27 @@ TEST_F(RenderWidgetHostViewAuraOverscrollTest, OverscrollResetsOnBlur) {
EXPECT_EQ(3U, sink_->message_count());
}
+// Ensures that the mapping from ui::TouchEvent to blink::WebTouchEvent doesn't
+// lose track of the number of acks required.
+TEST_F(RenderWidgetHostViewAuraTest, CorrectNumberOfAcksAreDispatched) {
+ view_->InitAsFullscreen(parent_view_);
+ view_->Show();
+ view_->UseFakeDispatcher();
+
+ ui::TouchEvent press1(
+ ui::ET_TOUCH_PRESSED, gfx::Point(30, 30), 0, ui::EventTimeForNow());
+
+ view_->OnTouchEvent(&press1);
+ SendInputEventACK(blink::WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_CONSUMED);
+
+ ui::TouchEvent press2(
+ ui::ET_TOUCH_PRESSED, gfx::Point(20, 20), 1, ui::EventTimeForNow());
+ view_->OnTouchEvent(&press2);
+ SendInputEventACK(blink::WebInputEvent::TouchStart,
+ INPUT_EVENT_ACK_STATE_CONSUMED);
+
+ EXPECT_EQ(2U, view_->dispatcher_->processed_touch_event_count());
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698