| Index: content/common/input/web_input_event_payload.cc
 | 
| diff --git a/content/common/input/web_input_event_payload.cc b/content/common/input/web_input_event_payload.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..145be332492671a36e72678bc7594493de5cbc4e
 | 
| --- /dev/null
 | 
| +++ b/content/common/input/web_input_event_payload.cc
 | 
| @@ -0,0 +1,98 @@
 | 
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#include "content/common/input/web_input_event_payload.h"
 | 
| +
 | 
| +#include "base/logging.h"
 | 
| +#include "third_party/WebKit/public/web/WebInputEvent.h"
 | 
| +
 | 
| +namespace content {
 | 
| +namespace {
 | 
| +static WebInputEventPayload::ScopedWebInputEvent CloneWebInputEvent(
 | 
| +    const WebKit::WebInputEvent& event) {
 | 
| +  WebInputEventPayload::ScopedWebInputEvent clone;
 | 
| +  if (WebKit::WebInputEvent::isMouseEventType(event.type))
 | 
| +    clone.reset(new WebKit::WebMouseEvent());
 | 
| +  else if (event.type == WebKit::WebInputEvent::MouseWheel)
 | 
| +    clone.reset(new WebKit::WebMouseWheelEvent());
 | 
| +  else if (WebKit::WebInputEvent::isKeyboardEventType(event.type))
 | 
| +    clone.reset(new WebKit::WebKeyboardEvent());
 | 
| +  else if (WebKit::WebInputEvent::isTouchEventType(event.type))
 | 
| +    clone.reset(new WebKit::WebTouchEvent());
 | 
| +  else if (WebKit::WebInputEvent::isGestureEventType(event.type))
 | 
| +    clone.reset(new WebKit::WebGestureEvent());
 | 
| +  else
 | 
| +    NOTREACHED() << "Unknown webkit event type " << event.type;
 | 
| +
 | 
| +  if (!clone)
 | 
| +    return clone.Pass();
 | 
| +
 | 
| +  DCHECK_EQ(event.size, clone->size);
 | 
| +  memcpy(clone.get(), &event, event.size);
 | 
| +  return clone.Pass();
 | 
| +}
 | 
| +}  // namespace
 | 
| +
 | 
| +WebInputEventPayload::WebInputEventDeleter::WebInputEventDeleter() {}
 | 
| +
 | 
| +void WebInputEventPayload::WebInputEventDeleter::operator()(
 | 
| +    WebKit::WebInputEvent* event) const {
 | 
| +  if (!event)
 | 
| +    return;
 | 
| +
 | 
| +  if (WebKit::WebInputEvent::isMouseEventType(event->type))
 | 
| +    delete static_cast<WebKit::WebMouseEvent*>(event);
 | 
| +  else if (event->type == WebKit::WebInputEvent::MouseWheel)
 | 
| +    delete static_cast<WebKit::WebMouseWheelEvent*>(event);
 | 
| +  else if (WebKit::WebInputEvent::isKeyboardEventType(event->type))
 | 
| +    delete static_cast<WebKit::WebKeyboardEvent*>(event);
 | 
| +  else if (WebKit::WebInputEvent::isTouchEventType(event->type))
 | 
| +    delete static_cast<WebKit::WebTouchEvent*>(event);
 | 
| +  else if (WebKit::WebInputEvent::isGestureEventType(event->type))
 | 
| +    delete static_cast<WebKit::WebGestureEvent*>(event);
 | 
| +  else
 | 
| +    NOTREACHED() << "Unknown webkit event type " << event->type;
 | 
| +}
 | 
| +
 | 
| +WebInputEventPayload::WebInputEventPayload() : is_keyboard_shortcut_(false) {}
 | 
| +
 | 
| +WebInputEventPayload::~WebInputEventPayload() {}
 | 
| +
 | 
| +scoped_ptr<WebInputEventPayload> WebInputEventPayload::Create() {
 | 
| +  return make_scoped_ptr(new WebInputEventPayload());
 | 
| +}
 | 
| +
 | 
| +scoped_ptr<WebInputEventPayload> WebInputEventPayload::Create(
 | 
| +    const WebKit::WebInputEvent& event,
 | 
| +    const ui::LatencyInfo& latency_info,
 | 
| +    bool is_keyboard_shortcut) {
 | 
| +  scoped_ptr<WebInputEventPayload> payload = Create();
 | 
| +  payload->Initialize(event, latency_info, is_keyboard_shortcut);
 | 
| +  return payload.Pass();
 | 
| +}
 | 
| +
 | 
| +const WebInputEventPayload* WebInputEventPayload::Cast(const Payload* payload) {
 | 
| +  DCHECK(payload);
 | 
| +  DCHECK_EQ(WEB_INPUT_EVENT, payload->GetType());
 | 
| +  return static_cast<const WebInputEventPayload*>(payload);
 | 
| +}
 | 
| +
 | 
| +InputEvent::Payload::Type WebInputEventPayload::GetType() const {
 | 
| +  return WEB_INPUT_EVENT;
 | 
| +}
 | 
| +
 | 
| +void WebInputEventPayload::Initialize(const WebKit::WebInputEvent& web_event,
 | 
| +                                      const ui::LatencyInfo& latency_info,
 | 
| +                                      bool is_keyboard_shortcut) {
 | 
| +  DCHECK(!web_event_) << "WebInputEventPayload already initialized";
 | 
| +  web_event_ = CloneWebInputEvent(web_event);
 | 
| +  latency_info_ = latency_info;
 | 
| +  is_keyboard_shortcut_ = is_keyboard_shortcut;
 | 
| +}
 | 
| +
 | 
| +bool WebInputEventPayload::CanCreateFollowupEvents() const {
 | 
| +  return WebKit::WebInputEvent::isTouchEventType(web_event()->type);
 | 
| +}
 | 
| +
 | 
| +}  // namespace content
 | 
| 
 |