// Copyright 2014 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/gamepad_param_traits.h" #include "base/pickle.h" #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "ipc/ipc_message_utils.h" #include "third_party/WebKit/public/platform/WebGamepad.h" using blink::WebGamepad; namespace { void LogWebUCharString( const blink::WebUChar web_string[], const size_t array_size, std::string* log) { base::string16 utf16; utf16.reserve(array_size); for (size_t i = 0; i < array_size && web_string[i]; ++i) { utf16[i] = web_string[i]; } log->append(base::UTF16ToUTF8(utf16)); } } namespace IPC { void ParamTraits::Write( Message* m, const WebGamepad& p) { m->WriteData(reinterpret_cast(&p), sizeof(WebGamepad)); } bool ParamTraits::Read( const Message* m, PickleIterator* iter, WebGamepad* p) { int length; const char* data; if (!iter->ReadData(&data, &length) || length != sizeof(WebGamepad)) return false; memcpy(p, data, sizeof(WebGamepad)); return true; } void ParamTraits::Log( const WebGamepad& p, std::string* l) { l->append("WebGamepad("); LogParam(p.connected, l); LogWebUCharString(p.id, WebGamepad::idLengthCap, l); l->append(","); LogWebUCharString(p.mapping, WebGamepad::mappingLengthCap, l); l->append(","); LogParam(p.timestamp, l); l->append(","); LogParam(p.axesLength, l); l->append(", ["); for (size_t i = 0; i < arraysize(p.axes); ++i) { l->append(base::StringPrintf("%f%s", p.axes[i], i < (arraysize(p.axes) - 1) ? ", " : "], ")); } LogParam(p.buttonsLength, l); l->append(", ["); for (size_t i = 0; i < arraysize(p.buttons); ++i) { l->append(base::StringPrintf("(%u, %f)%s", p.buttons[i].pressed, p.buttons[i].value, i < (arraysize(p.buttons) - 1) ? ", " : "], ")); } l->append(")"); } } // namespace IPC