| Index: content/common/input/input_param_traits.cc
|
| diff --git a/content/common/input/input_param_traits.cc b/content/common/input/input_param_traits.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1840398876befbda50096e9603791ce29300142b
|
| --- /dev/null
|
| +++ b/content/common/input/input_param_traits.cc
|
| @@ -0,0 +1,174 @@
|
| +// 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/input_param_traits.h"
|
| +
|
| +#include "content/common/content_param_traits.h"
|
| +#include "content/common/input/input_event_disposition.h"
|
| +#include "content/common/input/ipc_input_event_payload.h"
|
| +#include "content/common/input/web_input_event_payload.h"
|
| +#include "content/common/input_messages.h"
|
| +
|
| +namespace IPC {
|
| +namespace {
|
| +template <typename PayloadType>
|
| +scoped_ptr<content::InputEvent::Payload> ReadPayload(const Message* m,
|
| + PickleIterator* iter) {
|
| + scoped_ptr<PayloadType> event = PayloadType::Create();
|
| + if (!ReadParam(m, iter, event.get()))
|
| + return scoped_ptr<content::InputEvent::Payload>();
|
| + return event.template PassAs<content::InputEvent::Payload>();
|
| +}
|
| +} // namespace
|
| +
|
| +void ParamTraits<content::EventPacket>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.id());
|
| + WriteParam(m, p.events());
|
| +}
|
| +
|
| +bool ParamTraits<content::EventPacket>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + int64 id;
|
| + content::EventPacket::InputEvents events;
|
| + if (!ReadParam(m, iter, &id) ||
|
| + !ReadParam(m, iter, &events))
|
| + return false;
|
| +
|
| + p->set_id(id);
|
| + bool events_added_successfully = true;
|
| + for (size_t i = 0; i < events.size(); ++i) {
|
| + // Take ownership of all events.
|
| + scoped_ptr<content::InputEvent> event(events[i]);
|
| + if (!events_added_successfully)
|
| + continue;
|
| + if (!p->Add(event.Pass()))
|
| + events_added_successfully = false;
|
| + }
|
| + events.weak_clear();
|
| + return events_added_successfully;
|
| +}
|
| +
|
| +void ParamTraits<content::EventPacket>::Log(const param_type& p,
|
| + std::string* l) {
|
| + l->append("EventPacket((");
|
| + LogParam(p.id(), l);
|
| + l->append("), Events(");
|
| + LogParam(p.events(), l);
|
| + l->append("))");
|
| +}
|
| +
|
| +void ParamTraits<content::InputEvent>::Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.id());
|
| + WriteParam(m, !!p.payload());
|
| + if (!p.valid())
|
| + return;
|
| +
|
| + content::InputEvent::Payload::Type payload_type = p.payload()->GetType();
|
| + WriteParam(m, payload_type);
|
| + switch (payload_type) {
|
| + case content::InputEvent::Payload::IPC_MESSAGE:
|
| + WriteParam(m, *content::IPCInputEventPayload::Cast(p.payload()));
|
| + break;
|
| + case content::InputEvent::Payload::WEB_INPUT_EVENT:
|
| + WriteParam(m, *content::WebInputEventPayload::Cast(p.payload()));
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| +}
|
| +
|
| +bool ParamTraits<content::InputEvent>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + int64 id;
|
| + bool has_payload = false;
|
| + content::InputEvent::Payload::Type payload_type;
|
| + if (!ReadParam(m, iter, &id) ||
|
| + !ReadParam(m, iter, &has_payload) ||
|
| + !id ||
|
| + !has_payload ||
|
| + !ReadParam(m, iter, &payload_type))
|
| + return false;
|
| +
|
| + scoped_ptr<content::InputEvent::Payload> payload;
|
| + switch (payload_type) {
|
| + case content::InputEvent::Payload::IPC_MESSAGE:
|
| + payload = ReadPayload<content::IPCInputEventPayload>(m, iter);
|
| + break;
|
| + case content::InputEvent::Payload::WEB_INPUT_EVENT:
|
| + payload = ReadPayload<content::WebInputEventPayload>(m, iter);
|
| + break;
|
| + default:
|
| + NOTREACHED() << "Invalid InputEvent::Payload type.";
|
| + return false;
|
| + }
|
| + return p->Initialize(id, payload.Pass());
|
| +}
|
| +
|
| +void ParamTraits<content::InputEvent>::Log(const param_type& p,
|
| + std::string* l) {
|
| + l->append("InputEvent((");
|
| + LogParam(p.id(), l);
|
| + l->append("), Payload (");
|
| + const content::InputEvent::Payload* payload = p.payload();
|
| + if (payload) {
|
| + switch (payload->GetType()) {
|
| + case content::InputEvent::Payload::IPC_MESSAGE:
|
| + LogParam(*content::IPCInputEventPayload::Cast(payload), l);
|
| + break;
|
| + case content::InputEvent::Payload::WEB_INPUT_EVENT:
|
| + LogParam(*content::WebInputEventPayload::Cast(payload), l);
|
| + break;
|
| + default:
|
| + NOTREACHED() << "Invalid InputEvent::Payload type.";
|
| + l->append("INVALID");
|
| + break;
|
| + }
|
| + } else {
|
| + l->append("NULL");
|
| + }
|
| + l->append("))");
|
| +}
|
| +
|
| +void ParamTraits<content::WebInputEventPayload>::Write(Message* m,
|
| + const param_type& p) {
|
| + bool valid_web_event = !!p.web_event();
|
| + WriteParam(m, valid_web_event);
|
| + if (valid_web_event)
|
| + WriteParam(m, p.web_event());
|
| + WriteParam(m, p.latency_info());
|
| + WriteParam(m, p.is_keyboard_shortcut());
|
| +}
|
| +
|
| +bool ParamTraits<content::WebInputEventPayload>::Read(const Message* m,
|
| + PickleIterator* iter,
|
| + param_type* p) {
|
| + bool valid_web_event;
|
| + WebInputEventPointer web_input_event_pointer;
|
| + ui::LatencyInfo latency_info;
|
| + bool is_keyboard_shortcut;
|
| + if (!ReadParam(m, iter, &valid_web_event) ||
|
| + !valid_web_event ||
|
| + !ReadParam(m, iter, &web_input_event_pointer) ||
|
| + !ReadParam(m, iter, &latency_info) ||
|
| + !ReadParam(m, iter, &is_keyboard_shortcut))
|
| + return false;
|
| +
|
| + p->Initialize(*web_input_event_pointer, latency_info, is_keyboard_shortcut);
|
| + return true;
|
| +}
|
| +
|
| +void ParamTraits<content::WebInputEventPayload>::Log(const param_type& p,
|
| + std::string* l) {
|
| + l->append("WebInputEventPayload(");
|
| + LogParam(p.web_event(), l);
|
| + l->append(", ");
|
| + LogParam(p.latency_info(), l);
|
| + l->append(", ");
|
| + LogParam(p.is_keyboard_shortcut(), l);
|
| + l->append(")");
|
| +}
|
| +
|
| +} // namespace IPC
|
|
|