| 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
|
|
|