#include "base/auto_reset.h"
#include "base/command_line.h"
#include "base/run_loop.h"
+#include "content/browser/gpu/compositor_util.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/input/synthetic_web_input_event_builders.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/common/content_switches.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
-#include "content/test/content_browser_test.h"
-#include "content/test/content_browser_test_utils.h"
#include "third_party/WebKit/public/web/WebInputEvent.h"
#include "ui/events/event_switches.h"
#include "ui/events/latency_info.h"
class InputEventMessageFilter : public BrowserMessageFilter {
public:
InputEventMessageFilter()
- : type_(WebInputEvent::Undefined),
+ : BrowserMessageFilter(InputMsgStart),
+ type_(WebInputEvent::Undefined),
state_(INPUT_EVENT_ACK_STATE_UNKNOWN) {}
void WaitForAck(WebInputEvent::Type type) {
InputEventAckState last_ack_state() const { return state_; }
protected:
- virtual ~InputEventMessageFilter() {}
+ ~InputEventMessageFilter() override {}
private:
void ReceivedEventAck(WebInputEvent::Type type, InputEventAckState state) {
}
// BrowserMessageFilter:
- virtual bool OnMessageReceived(const IPC::Message& message,
- bool* message_was_ok) OVERRIDE {
+ bool OnMessageReceived(const IPC::Message& message) override {
if (message.type() == InputHostMsg_HandleInputEvent_ACK::ID) {
- ui::LatencyInfo latency;
- WebInputEvent::Type type = WebInputEvent::Undefined;
- InputEventAckState ack = INPUT_EVENT_ACK_STATE_UNKNOWN;
- InputHostMsg_HandleInputEvent_ACK::Read(&message, &type, &ack, &latency);
+ InputHostMsg_HandleInputEvent_ACK::Param params;
+ InputHostMsg_HandleInputEvent_ACK::Read(&message, ¶ms);
+ WebInputEvent::Type type = params.a.type;
+ InputEventAckState ack = params.a.state;
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&InputEventMessageFilter::ReceivedEventAck,
this, type, ack));
DISALLOW_COPY_AND_ASSIGN(InputEventMessageFilter);
};
-class TouchInputBrowserTest : public ContentBrowserTest,
- public testing::WithParamInterface<std::string> {
+class TouchInputBrowserTest : public ContentBrowserTest {
public:
TouchInputBrowserTest() {}
- virtual ~TouchInputBrowserTest() {}
+ ~TouchInputBrowserTest() override {}
RenderWidgetHostImpl* GetWidgetHost() {
return RenderWidgetHostImpl::From(shell()->web_contents()->
GiveItSomeTime();
filter_ = new InputEventMessageFilter();
- host->GetProcess()->AddFilter(filter_);
+ host->GetProcess()->AddFilter(filter_.get());
}
- virtual void SetUpCommandLine(CommandLine* cmd) OVERRIDE {
+ void SetUpCommandLine(CommandLine* cmd) override {
cmd->AppendSwitchASCII(switches::kTouchEvents,
switches::kTouchEventsEnabled);
- cmd->AppendSwitch(GetParam());
}
scoped_refptr<InputEventMessageFilter> filter_;
};
-// Touch input event tests don't work on Mac with the legacy software renderer.
-// These can be enabled when software compositing is enabled.
-// http://crbug.com/268038
#if defined(OS_MACOSX)
+// TODO(ccameron): Failing on mac: crbug.com/346363
#define MAYBE_TouchNoHandler DISABLED_TouchNoHandler
#else
#define MAYBE_TouchNoHandler TouchNoHandler
#endif
-IN_PROC_BROWSER_TEST_P(TouchInputBrowserTest, MAYBE_TouchNoHandler) {
+IN_PROC_BROWSER_TEST_F(TouchInputBrowserTest, MAYBE_TouchNoHandler) {
LoadURLAndAddFilter();
SyntheticWebTouchEvent touch;
GetWidgetHost()->ForwardTouchEventWithLatencyInfo(touch, ui::LatencyInfo());
filter()->WaitForAck(WebInputEvent::TouchStart);
- if (GetParam() == std::string(switches::kEnableThreadedCompositing)) {
- EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
- filter()->last_ack_state());
- } else {
- // http://crbug.com/326232: This should be NO_CONSUMER_EXISTS once
- // WebViewImpl::hasTouchEventHandlersAt() is implemented.
- EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, filter()->last_ack_state());
- }
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
+ filter()->last_ack_state());
// If a touch-press is acked with NO_CONSUMER_EXISTS, then subsequent
// touch-points don't need to be dispatched until the touch point is released.
touch.ResetPoints();
}
-// Touch input event tests don't work on Mac with the legacy software renderer.
-// These can be enabled when software compositing is enabled.
-// http://crbug.com/268038
-#if defined(OS_MACOSX)
-#define MAYBE_TouchHandlerNoConsume DISABLED_TouchHandlerNoConsume
-#else
-#define MAYBE_TouchHandlerNoConsume TouchHandlerNoConsume
-#endif
-IN_PROC_BROWSER_TEST_P(TouchInputBrowserTest, MAYBE_TouchHandlerNoConsume) {
+IN_PROC_BROWSER_TEST_F(TouchInputBrowserTest, TouchHandlerNoConsume) {
LoadURLAndAddFilter();
SyntheticWebTouchEvent touch;
touch.ResetPoints();
}
-// Touch input event tests don't work on Mac with the legacy software renderer.
-// These can be enabled when software compositing is enabled.
-// http://crbug.com/268038
-#if defined(OS_MACOSX)
-#define MAYBE_TouchHandlerConsume DISABLED_TouchHandlerConsume
-#else
-#define MAYBE_TouchHandlerConsume TouchHandlerConsume
-#endif
-IN_PROC_BROWSER_TEST_P(TouchInputBrowserTest, MAYBE_TouchHandlerConsume) {
+IN_PROC_BROWSER_TEST_F(TouchInputBrowserTest, TouchHandlerConsume) {
LoadURLAndAddFilter();
SyntheticWebTouchEvent touch;
filter()->WaitForAck(WebInputEvent::TouchEnd);
}
-// Touch input event tests don't work on Mac with the legacy software renderer.
-// These can be enabled when software compositing is enabled.
-// http://crbug.com/268038
#if defined(OS_MACOSX)
+// TODO(ccameron): Failing on mac: crbug.com/346363
#define MAYBE_MultiPointTouchPress DISABLED_MultiPointTouchPress
#else
#define MAYBE_MultiPointTouchPress MultiPointTouchPress
#endif
-IN_PROC_BROWSER_TEST_P(TouchInputBrowserTest, MAYBE_MultiPointTouchPress) {
+IN_PROC_BROWSER_TEST_F(TouchInputBrowserTest, MAYBE_MultiPointTouchPress) {
LoadURLAndAddFilter();
SyntheticWebTouchEvent touch;
touch.PressPoint(25, 25);
GetWidgetHost()->ForwardTouchEventWithLatencyInfo(touch, ui::LatencyInfo());
filter()->WaitForAck(WebInputEvent::TouchStart);
- if (GetParam() == std::string(switches::kEnableThreadedCompositing)) {
- EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
- filter()->last_ack_state());
- } else {
- // http://crbug.com/326232: This should be NO_CONSUMER_EXISTS once
- // WebViewImpl::hasTouchEventHandlersAt() is implemented.
- EXPECT_EQ(INPUT_EVENT_ACK_STATE_NOT_CONSUMED, filter()->last_ack_state());
- }
+ EXPECT_EQ(INPUT_EVENT_ACK_STATE_NO_CONSUMER_EXISTS,
+ filter()->last_ack_state());
touch.PressPoint(25, 125);
GetWidgetHost()->ForwardTouchEventWithLatencyInfo(touch, ui::LatencyInfo());
EXPECT_EQ(INPUT_EVENT_ACK_STATE_CONSUMED, filter()->last_ack_state());
}
-INSTANTIATE_TEST_CASE_P(WithoutInputHandlerProxy, TouchInputBrowserTest,
- ::testing::Values(std::string(switches::kDisableThreadedCompositing)));
-
-#if !defined(OS_MACOSX)
-INSTANTIATE_TEST_CASE_P(WithInputHandlerProxy, TouchInputBrowserTest,
- ::testing::Values(std::string(switches::kEnableThreadedCompositing)));
-#endif
-
} // namespace content