Home | History | Annotate | Download | only in common
      1 // Copyright 2014 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/gamepad_param_traits.h"
      6 
      7 #include "base/pickle.h"
      8 #include "base/strings/string16.h"
      9 #include "base/strings/utf_string_conversions.h"
     10 #include "ipc/ipc_message_utils.h"
     11 #include "third_party/WebKit/public/platform/WebGamepad.h"
     12 
     13 using blink::WebGamepad;
     14 
     15 namespace {
     16 
     17 void LogWebUCharString(
     18     const blink::WebUChar web_string[],
     19     const size_t array_size,
     20     std::string* log) {
     21   base::string16 utf16;
     22   utf16.reserve(array_size);
     23   for (size_t i = 0; i < array_size && web_string[i]; ++i) {
     24     utf16[i] = web_string[i];
     25   }
     26   log->append(base::UTF16ToUTF8(utf16));
     27 }
     28 
     29 }
     30 
     31 namespace IPC {
     32 
     33 void ParamTraits<WebGamepad>::Write(
     34     Message* m,
     35     const WebGamepad& p) {
     36   m->WriteData(reinterpret_cast<const char*>(&p), sizeof(WebGamepad));
     37 }
     38 
     39 bool ParamTraits<WebGamepad>::Read(
     40     const Message* m,
     41     PickleIterator* iter,
     42     WebGamepad* p) {
     43   int length;
     44   const char* data;
     45   if (!m->ReadData(iter, &data, &length) || length != sizeof(WebGamepad))
     46     return false;
     47   memcpy(p, data, sizeof(WebGamepad));
     48 
     49   return true;
     50 }
     51 
     52 void ParamTraits<WebGamepad>::Log(
     53     const WebGamepad& p,
     54     std::string* l) {
     55   l->append("WebGamepad(");
     56   LogParam(p.connected, l);
     57   LogWebUCharString(p.id, WebGamepad::idLengthCap, l);
     58   l->append(",");
     59   LogWebUCharString(p.mapping, WebGamepad::mappingLengthCap, l);
     60   l->append(",");
     61   LogParam(p.timestamp, l);
     62   l->append(",");
     63   LogParam(p.axesLength, l);
     64   l->append(", [");
     65   for (size_t i = 0; i < arraysize(p.axes); ++i) {
     66     l->append(base::StringPrintf("%f%s", p.axes[i],
     67         i < (arraysize(p.axes) - 1) ? ", " : "], "));
     68   }
     69   LogParam(p.buttonsLength, l);
     70   l->append(", [");
     71   for (size_t i = 0; i < arraysize(p.buttons); ++i) {
     72     l->append(base::StringPrintf("(%u, %f)%s",
     73         p.buttons[i].pressed, p.buttons[i].value,
     74         i < (arraysize(p.buttons) - 1) ? ", " : "], "));
     75   }
     76   l->append(")");
     77 }
     78 
     79 } // namespace IPC
     80