diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-14 00:09:09 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-14 00:09:09 +0000 |
commit | 0dea165d01ba35a3880e40a455657442655a6063 (patch) | |
tree | f82b50ef76eb704ea342aadbcaddb9bb1c6f1fc4 /content/common/content_param_traits.cc | |
parent | d219a19a5139d4917440c730c64b19c13b486291 (diff) | |
download | chromium_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.cc | 61 |
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. |