Home | History | Annotate | Download | only in common
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "content/common/content_param_traits.h"
      6 
      7 #include "base/strings/string_number_conversions.h"
      8 #include "content/common/input/web_input_event_traits.h"
      9 #include "net/base/ip_endpoint.h"
     10 #include "ui/gfx/range/range.h"
     11 
     12 namespace IPC {
     13 
     14 void ParamTraits<gfx::Range>::Write(Message* m, const gfx::Range& r) {
     15   m->WriteUInt64(r.start());
     16   m->WriteUInt64(r.end());
     17 }
     18 
     19 bool ParamTraits<gfx::Range>::Read(const Message* m,
     20                                   PickleIterator* iter,
     21                                   gfx::Range* r) {
     22   uint64 start, end;
     23   if (!m->ReadUInt64(iter, &start) || !m->ReadUInt64(iter, &end))
     24     return false;
     25   r->set_start(start);
     26   r->set_end(end);
     27   return true;
     28 }
     29 
     30 void ParamTraits<gfx::Range>::Log(const gfx::Range& r, std::string* l) {
     31   l->append(base::StringPrintf("(%" PRIuS ", %" PRIuS ")", r.start(), r.end()));
     32 }
     33 
     34 void ParamTraits<WebInputEventPointer>::Write(Message* m, const param_type& p) {
     35   m->WriteData(reinterpret_cast<const char*>(p), p->size);
     36 }
     37 
     38 bool ParamTraits<WebInputEventPointer>::Read(const Message* m,
     39                                              PickleIterator* iter,
     40                                              param_type* r) {
     41   const char* data;
     42   int data_length;
     43   if (!m->ReadData(iter, &data, &data_length)) {
     44     NOTREACHED();
     45     return false;
     46   }
     47   if (data_length < static_cast<int>(sizeof(blink::WebInputEvent))) {
     48     NOTREACHED();
     49     return false;
     50   }
     51   param_type event = reinterpret_cast<param_type>(data);
     52   // Check that the data size matches that of the event.
     53   if (data_length != static_cast<int>(event->size)) {
     54     NOTREACHED();
     55     return false;
     56   }
     57   const size_t expected_size_for_type =
     58       content::WebInputEventTraits::GetSize(event->type);
     59   if (data_length != static_cast<int>(expected_size_for_type)) {
     60     NOTREACHED();
     61     return false;
     62   }
     63   *r = event;
     64   return true;
     65 }
     66 
     67 void ParamTraits<WebInputEventPointer>::Log(const param_type& p,
     68                                             std::string* l) {
     69   l->append("(");
     70   LogParam(p->size, l);
     71   l->append(", ");
     72   LogParam(p->type, l);
     73   l->append(", ");
     74   LogParam(p->timeStampSeconds, l);
     75   l->append(")");
     76 }
     77 
     78 }  // namespace IPC
     79 
     80 // Generate param traits write methods.
     81 #include "ipc/param_traits_write_macros.h"
     82 namespace IPC {
     83 #undef CONTENT_COMMON_CONTENT_PARAM_TRAITS_MACROS_H_
     84 #include "content/common/content_param_traits_macros.h"
     85 }  // namespace IPC
     86 
     87 // Generate param traits read methods.
     88 #include "ipc/param_traits_read_macros.h"
     89 namespace IPC {
     90 #undef CONTENT_COMMON_CONTENT_PARAM_TRAITS_MACROS_H_
     91 #include "content/common/content_param_traits_macros.h"
     92 }  // namespace IPC
     93 
     94 // Generate param traits log methods.
     95 #include "ipc/param_traits_log_macros.h"
     96 namespace IPC {
     97 #undef CONTENT_COMMON_CONTENT_PARAM_TRAITS_MACROS_H_
     98 #include "content/common/content_param_traits_macros.h"
     99 }  // namespace IPC
    100