summaryrefslogtreecommitdiffstats
path: root/content/common/content_param_traits.cc
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-14 00:09:09 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-14 00:09:09 +0000
commit0dea165d01ba35a3880e40a455657442655a6063 (patch)
treef82b50ef76eb704ea342aadbcaddb9bb1c6f1fc4 /content/common/content_param_traits.cc
parentd219a19a5139d4917440c730c64b19c13b486291 (diff)
downloadchromium_src-0dea165d01ba35a3880e40a455657442655a6063.zip
chromium_src-0dea165d01ba35a3880e40a455657442655a6063.tar.gz
chromium_src-0dea165d01ba35a3880e40a455657442655a6063.tar.bz2
ipc: Use existing [de]serializer for WebInputEvent.
There is an existing serializer/deserializer for WebInputEvent (used for plugins). Use that everywhere else, instead of reading/writing directly into the IPC message. BUG=164682 Review URL: https://codereview.chromium.org/11471022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173012 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/common/content_param_traits.cc')
-rw-r--r--content/common/content_param_traits.cc61
1 files changed, 61 insertions, 0 deletions
diff --git a/content/common/content_param_traits.cc b/content/common/content_param_traits.cc
index df91adb..bc78659 100644
--- a/content/common/content_param_traits.cc
+++ b/content/common/content_param_traits.cc
@@ -11,6 +11,25 @@
#include "webkit/plugins/npapi/plugin_host.h"
#include "ui/base/range/range.h"
+namespace {
+
+int WebInputEventSizeForType(WebKit::WebInputEvent::Type type) {
+ if (WebKit::WebInputEvent::isMouseEventType(type))
+ return sizeof(WebKit::WebMouseEvent);
+ if (type == WebKit::WebInputEvent::MouseWheel)
+ return sizeof(WebKit::WebMouseWheelEvent);
+ if (WebKit::WebInputEvent::isKeyboardEventType(type))
+ return sizeof(WebKit::WebKeyboardEvent);
+ if (WebKit::WebInputEvent::isTouchEventType(type))
+ return sizeof(WebKit::WebTouchEvent);
+ if (WebKit::WebInputEvent::isGestureEventType(type))
+ return sizeof(WebKit::WebGestureEvent);
+ NOTREACHED() << "Unknown webkit event type " << type;
+ return 0;
+}
+
+} // namespace
+
namespace content {
NPIdentifier_Param::NPIdentifier_Param()
@@ -169,6 +188,48 @@ void ParamTraits<ui::Range>::Log(const ui::Range& r, std::string* l) {
l->append(base::StringPrintf("(%"PRIuS", %"PRIuS")", r.start(), r.end()));
}
+void ParamTraits<WebInputEventPointer>::Write(Message* m, const param_type& p) {
+ m->WriteData(reinterpret_cast<const char*>(p), p->size);
+}
+
+bool ParamTraits<WebInputEventPointer>::Read(const Message* m,
+ PickleIterator* iter,
+ param_type* r) {
+ const char* data;
+ int data_length;
+ if (!m->ReadData(iter, &data, &data_length)) {
+ NOTREACHED();
+ return false;
+ }
+ if (data_length < static_cast<int>(sizeof(WebKit::WebInputEvent))) {
+ NOTREACHED();
+ return false;
+ }
+ param_type event = reinterpret_cast<param_type>(data);
+ // Check that the data size matches that of the event.
+ if (data_length != static_cast<int>(event->size)) {
+ NOTREACHED();
+ return false;
+ }
+ if (data_length != WebInputEventSizeForType(event->type)) {
+ NOTREACHED();
+ return false;
+ }
+ *r = event;
+ return true;
+}
+
+void ParamTraits<WebInputEventPointer>::Log(const param_type& p,
+ std::string* l) {
+ l->append("(");
+ LogParam(p->size, l);
+ l->append(", ");
+ LogParam(p->type, l);
+ l->append(", ");
+ LogParam(p->timeStampSeconds, l);
+ l->append(")");
+}
+
} // namespace IPC
// Generate param traits write methods.