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 13d986b9f51b8d5c67793e1097d8c600c33354ca..a3007178fa6960efc58dd81fb64b0b5ce7006a5a 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 |
@@ -19,6 +19,7 @@ |
#include "content/browser/compositor/resize_lock.h" |
#include "content/browser/compositor/test/no_transport_image_transport_factory.h" |
#include "content/browser/frame_host/render_widget_host_view_guest.h" |
+#include "content/browser/renderer_host/input/web_input_event_util.h" |
#include "content/browser/renderer_host/overscroll_controller.h" |
#include "content/browser/renderer_host/overscroll_controller_delegate.h" |
#include "content/browser/renderer_host/render_widget_host_delegate.h" |
@@ -268,9 +269,23 @@ class FakeRenderWidgetHostViewAura : public RenderWidgetHostViewAura { |
: ResizeLock(new_size, defer_compositor_lock) {} |
}; |
+ void OnTouchEvent(ui::TouchEvent* event) override { |
+ RenderWidgetHostViewAura::OnTouchEvent(event); |
+ if (pointer_state().GetPointerCount() > 0) { |
+ touch_event_.reset( |
+ new blink::WebTouchEvent(CreateWebTouchEventFromMotionEvent( |
+ pointer_state(), event->may_cause_scrolling()))); |
+ } else { |
+ // Never create a WebTouchEvent with 0 touch points. |
+ touch_event_.reset(); |
+ } |
+ } |
+ |
bool has_resize_lock_; |
gfx::Size last_frame_size_; |
scoped_ptr<cc::CopyOutputRequest> last_copy_request_; |
+ // null if there are 0 active touch points. |
+ scoped_ptr<blink::WebTouchEvent> touch_event_; |
}; |
// A layout manager that always resizes a child to the root window size. |
@@ -990,25 +1005,23 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
view_->OnTouchEvent(&press); |
EXPECT_FALSE(press.handled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_.type); |
- EXPECT_TRUE(view_->touch_event_.cancelable); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); |
+ EXPECT_TRUE(view_->touch_event_->cancelable); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StatePressed, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&move); |
EXPECT_FALSE(move.handled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_.type); |
- EXPECT_TRUE(view_->touch_event_.cancelable); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); |
+ EXPECT_TRUE(view_->touch_event_->cancelable); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StateMoved, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&release); |
EXPECT_FALSE(release.handled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchEnd, view_->touch_event_.type); |
- EXPECT_TRUE(view_->touch_event_.cancelable); |
- EXPECT_EQ(0U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(nullptr, view_->touch_event_); |
// Now install some touch-event handlers and do the same steps. The touch |
// events should now be consumed. However, the touch-event state should be |
@@ -1018,33 +1031,30 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
view_->OnTouchEvent(&press); |
EXPECT_TRUE(press.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_.type); |
- EXPECT_TRUE(view_->touch_event_.cancelable); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); |
+ EXPECT_TRUE(view_->touch_event_->cancelable); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StatePressed, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&move); |
EXPECT_TRUE(move.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_.type); |
- EXPECT_TRUE(view_->touch_event_.cancelable); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); |
+ EXPECT_TRUE(view_->touch_event_->cancelable); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StateMoved, |
- view_->touch_event_.touches[0].state); |
- |
+ view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&release); |
EXPECT_TRUE(release.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchEnd, view_->touch_event_.type); |
- EXPECT_TRUE(view_->touch_event_.cancelable); |
- EXPECT_EQ(0U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(nullptr, view_->touch_event_); |
// Now start a touch event, and remove the event-handlers before the release. |
view_->OnTouchEvent(&press); |
EXPECT_TRUE(press.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_.type); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StatePressed, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
widget_host_->OnMessageReceived(ViewHostMsg_HasTouchEventHandlers(0, false)); |
EXPECT_TRUE(widget_host_->ShouldForwardTouchEvent()); |
@@ -1060,17 +1070,16 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventState) { |
base::Time::NowFromSystemTime() - base::Time()); |
view_->OnTouchEvent(&move2); |
EXPECT_FALSE(move2.handled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_.type); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StateMoved, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
ui::TouchEvent release2(ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), 0, |
base::Time::NowFromSystemTime() - base::Time()); |
view_->OnTouchEvent(&release2); |
EXPECT_FALSE(release2.handled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchEnd, view_->touch_event_.type); |
- EXPECT_EQ(0U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(nullptr, view_->touch_event_); |
} |
// Checks that touch-events are queued properly when there is a touch-event |
@@ -1097,31 +1106,30 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventSyncAsync) { |
view_->OnTouchEvent(&press); |
EXPECT_TRUE(press.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_.type); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StatePressed, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&move); |
EXPECT_TRUE(move.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_.type); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StateMoved, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
// Send the same move event. Since the point hasn't moved, it won't affect the |
// queue. However, the view should consume the event. |
view_->OnTouchEvent(&move); |
EXPECT_TRUE(move.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_.type); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchMove, view_->touch_event_->type); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StateMoved, |
- view_->touch_event_.touches[0].state); |
+ view_->touch_event_->touches[0].state); |
view_->OnTouchEvent(&release); |
EXPECT_TRUE(release.synchronous_handling_disabled()); |
- EXPECT_EQ(blink::WebInputEvent::TouchEnd, view_->touch_event_.type); |
- EXPECT_EQ(0U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(nullptr, view_->touch_event_); |
} |
TEST_F(RenderWidgetHostViewAuraTest, PhysicalBackingSizeWithScale) { |
@@ -2114,15 +2122,15 @@ TEST_F(RenderWidgetHostViewAuraTest, TouchEventPositionsArentRounded) { |
ui::EventTimeForNow()); |
view_->OnTouchEvent(&press); |
- EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_.type); |
- EXPECT_TRUE(view_->touch_event_.cancelable); |
- EXPECT_EQ(1U, view_->touch_event_.touchesLength); |
+ EXPECT_EQ(blink::WebInputEvent::TouchStart, view_->touch_event_->type); |
+ EXPECT_TRUE(view_->touch_event_->cancelable); |
+ EXPECT_EQ(1U, view_->touch_event_->touchesLength); |
EXPECT_EQ(blink::WebTouchPoint::StatePressed, |
- view_->touch_event_.touches[0].state); |
- EXPECT_EQ(kX, view_->touch_event_.touches[0].screenPosition.x); |
- EXPECT_EQ(kX, view_->touch_event_.touches[0].position.x); |
- EXPECT_EQ(kY, view_->touch_event_.touches[0].screenPosition.y); |
- EXPECT_EQ(kY, view_->touch_event_.touches[0].position.y); |
+ view_->touch_event_->touches[0].state); |
+ EXPECT_EQ(kX, view_->touch_event_->touches[0].screenPosition.x); |
+ EXPECT_EQ(kX, view_->touch_event_->touches[0].position.x); |
+ EXPECT_EQ(kY, view_->touch_event_->touches[0].screenPosition.y); |
+ EXPECT_EQ(kY, view_->touch_event_->touches[0].position.y); |
} |
// Tests that scroll ACKs are correctly handled by the overscroll-navigation |