15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_param_traits.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string.h> // For memcpy 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_resource.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/serialized_var.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/serialized_flash_menu.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/host_resource.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/shared_impl/private/ppb_x509_certificate_private_shared.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Deserializes a vector from IPC. This special version must be used instead 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of the default IPC version when the vector contains a SerializedVar, either 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// directly or indirectly (i.e. a vector of objects that have a SerializedVar 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// inside them). 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The default vector deserializer does resize and then we deserialize into 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// those allocated slots. However, the implementation of vector (at least in 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// GCC's implementation), creates a new empty object using the default 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// constructor, and then sets the rest of the items to that empty one using the 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// copy constructor. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Since we allocate the inner class when you call the default constructor and 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// transfer the inner class when you do operator=, the entire vector will end 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// up referring to the same inner class. Deserializing into this will just end 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// up overwriting the same item over and over, since all the SerializedVars 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// will refer to the same thing. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The solution is to make a new object for each deserialized item, and then 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// add it to the vector one at a time. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ReadVectorWithoutCopy(const Message* m, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<T>* output) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This part is just a copy of the the default ParamTraits vector Read(). 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ReadLength() checks for < 0 itself. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!m->ReadLength(iter, &size)) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resizing beforehand is not safe, see BUG 1006367 for details. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (INT_MAX / sizeof(T) <= static_cast<size_t>(size)) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output->reserve(size); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < size; i++) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) T cur; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &cur)) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) output->push_back(cur); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This serializes the vector of items to the IPC message in exactly the same 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// way as the "regular" IPC vector serializer does. But having the code here 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// saves us from having to copy this code into all ParamTraits that use the 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ReadVectorWithoutCopy function for deserializing. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WriteVectorWithoutCopy(Message* m, const std::vector<T>& p) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, static_cast<int>(p.size())); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < p.size(); i++) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p[i]); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PP_Bool --------------------------------------------------------------------- 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<PP_Bool>::Write(Message* m, const param_type& p) { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<bool>::Write(m, PP_ToBool(p)); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<PP_Bool>::Read(const Message* m, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We specifically want to be strict here about what types of input we accept, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which ParamTraits<bool> does for us. We don't want to deserialize "2" into 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a PP_Bool, for example. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool result = false; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ParamTraits<bool>::Read(m, iter, &result)) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *r = PP_FromBool(result); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<PP_Bool>::Log(const param_type& p, std::string* l) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PP_NetAddress_Private ------------------------------------------------------- 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<PP_NetAddress_Private>::Write(Message* m, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteParam(m, p.size); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m->WriteBytes(p.data, static_cast<int>(p.size)); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<PP_NetAddress_Private>::Read(const Message* m, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* p) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 size; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ReadParam(m, iter, &size)) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (size > sizeof(p->data)) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p->size = size; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* data; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!m->ReadBytes(iter, &data, size)) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) memcpy(p->data, data, size); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<PP_NetAddress_Private>::Log(const param_type& p, 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("<PP_NetAddress_Private ("); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LogParam(p.size, l); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append(" bytes)>"); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// HostResource ---------------------------------------------------------------- 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::HostResource>::Write(Message* m, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Instance>::Write(m, p.instance()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Resource>::Write(m, p.host_resource()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::HostResource>::Read(const Message* m, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Instance instance; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Resource resource; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ParamTraits<PP_Instance>::Read(m, iter, &instance) || 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !ParamTraits<PP_Resource>::Read(m, iter, &resource)) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r->SetHostResource(instance, resource); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::HostResource>::Log(const param_type& p, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SerializedVar --------------------------------------------------------------- 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedVar>::Write(Message* m, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.WriteToMessage(m); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::proxy::SerializedVar>::Read(const Message* m, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return r->ReadFromMessage(m, iter); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedVar>::Log(const param_type& p, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// std::vector<SerializedVar> -------------------------------------------------- 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits< std::vector<ppapi::proxy::SerializedVar> >::Write( 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteVectorWithoutCopy(m, p); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits< std::vector<ppapi::proxy::SerializedVar> >::Read( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Message* m, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ReadVectorWithoutCopy(m, iter, r); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits< std::vector<ppapi::proxy::SerializedVar> >::Log( 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ppapi::PpapiPermissions ----------------------------------------------------- 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::PpapiPermissions>::Write(Message* m, 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<uint32_t>::Write(m, p.GetBits()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::PpapiPermissions>::Read(const Message* m, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t bits; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ParamTraits<uint32_t>::Read(m, iter, &bits)) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *r = ppapi::PpapiPermissions(bits); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::PpapiPermissions>::Log(const param_type& p, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SerializedHandle ------------------------------------------------------------ 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedHandle>::Write(Message* m, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::proxy::SerializedHandle::WriteHeader(p.header(), m); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (p.type()) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ppapi::proxy::SerializedHandle::SHARED_MEMORY: 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<base::SharedMemoryHandle>::Write(m, p.shmem()); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ppapi::proxy::SerializedHandle::SOCKET: 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case ppapi::proxy::SerializedHandle::FILE: 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<IPC::PlatformFileForTransit>::Write(m, p.descriptor()); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ppapi::proxy::SerializedHandle::INVALID: 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No default so the compiler will warn on new types. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::proxy::SerializedHandle>::Read(const Message* m, 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::proxy::SerializedHandle::Header header; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!ppapi::proxy::SerializedHandle::ReadHeader(iter, &header)) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (header.type) { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ppapi::proxy::SerializedHandle::SHARED_MEMORY: { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::SharedMemoryHandle handle; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ParamTraits<base::SharedMemoryHandle>::Read(m, iter, &handle)) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r->set_shmem(handle, header.size); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ppapi::proxy::SerializedHandle::SOCKET: { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::PlatformFileForTransit socket; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ParamTraits<IPC::PlatformFileForTransit>::Read(m, iter, &socket)) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r->set_socket(socket); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) case ppapi::proxy::SerializedHandle::FILE: { 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC::PlatformFileForTransit desc; 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (ParamTraits<IPC::PlatformFileForTransit>::Read(m, iter, &desc)) { 2745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) r->set_file_handle(desc, header.open_flags, header.file_io); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) break; 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case ppapi::proxy::SerializedHandle::INVALID: 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No default so the compiler will warn us if a new type is added. 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedHandle>::Log(const param_type& p, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPBURLLoader_UpdateProgress_Params ------------------------------------------ 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::PPBURLLoader_UpdateProgress_Params>::Write( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Instance>::Write(m, p.instance); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<ppapi::HostResource>::Write(m, p.resource); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Write(m, p.bytes_sent); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Write(m, p.total_bytes_to_be_sent); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Write(m, p.bytes_received); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Write(m, p.total_bytes_to_be_received); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::proxy::PPBURLLoader_UpdateProgress_Params>::Read( 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Message* m, 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Instance>::Read(m, iter, &r->instance) && 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<ppapi::HostResource>::Read(m, iter, &r->resource) && 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Read(m, iter, &r->bytes_sent) && 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Read(m, iter, &r->total_bytes_to_be_sent) && 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Read(m, iter, &r->bytes_received) && 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int64_t>::Read(m, iter, &r->total_bytes_to_be_received); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::PPBURLLoader_UpdateProgress_Params>::Log( 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_NACL) && !defined(NACL_WIN64) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPBFlash_DrawGlyphs_Params -------------------------------------------------- 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params>::Write( 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Instance>::Write(m, p.instance); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<ppapi::HostResource>::Write(m, p.image_data); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<ppapi::proxy::SerializedFontDescription>::Write(m, p.font_desc); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<uint32_t>::Write(m, p.color); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Point>::Write(m, p.position); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Rect>::Write(m, p.clip); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[0][0]); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[0][1]); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[0][2]); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[1][0]); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[1][1]); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[1][2]); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[2][0]); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[2][1]); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Write(m, p.transformation[2][2]); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Bool>::Write(m, p.allow_subpixel_aa); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<std::vector<uint16_t> >::Write(m, p.glyph_indices); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<std::vector<PP_Point> >::Write(m, p.glyph_advances); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params>::Read( 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Message* m, 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Instance>::Read(m, iter, &r->instance) && 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<ppapi::HostResource>::Read(m, iter, &r->image_data) && 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<ppapi::proxy::SerializedFontDescription>::Read(m, iter, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &r->font_desc) && 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<uint32_t>::Read(m, iter, &r->color) && 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Point>::Read(m, iter, &r->position) && 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Rect>::Read(m, iter, &r->clip) && 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[0][0]) && 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[0][1]) && 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[0][2]) && 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[1][0]) && 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[1][1]) && 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[1][2]) && 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[2][0]) && 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[2][1]) && 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<float>::Read(m, iter, &r->transformation[2][2]) && 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Bool>::Read(m, iter, &r->allow_subpixel_aa) && 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<std::vector<uint16_t> >::Read(m, iter, &r->glyph_indices) && 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<std::vector<PP_Point> >::Read(m, iter, &r->glyph_advances) && 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) r->glyph_indices.size() == r->glyph_advances.size(); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::PPBFlash_DrawGlyphs_Params>::Log( 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SerializedDirEntry ---------------------------------------------------------- 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedDirEntry>::Write(Message* m, 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<std::string>::Write(m, p.name); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<bool>::Write(m, p.is_dir); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::proxy::SerializedDirEntry>::Read(const Message* m, 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ParamTraits<std::string>::Read(m, iter, &r->name) && 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<bool>::Read(m, iter, &r->is_dir); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedDirEntry>::Log(const param_type& p, 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ppapi::proxy::SerializedFontDescription ------------------------------------- 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedFontDescription>::Write( 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<std::string>::Write(m, p.face); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Write(m, p.family); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<uint32_t>::Write(m, p.size); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Write(m, p.weight); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Bool>::Write(m, p.italic); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Bool>::Write(m, p.small_caps); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Write(m, p.letter_spacing); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Write(m, p.word_spacing); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::proxy::SerializedFontDescription>::Read( 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Message* m, 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<std::string>::Read(m, iter, &r->face) && 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Read(m, iter, &r->family) && 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<uint32_t>::Read(m, iter, &r->size) && 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Read(m, iter, &r->weight) && 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Bool>::Read(m, iter, &r->italic) && 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<PP_Bool>::Read(m, iter, &r->small_caps) && 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Read(m, iter, &r->letter_spacing) && 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParamTraits<int32_t>::Read(m, iter, &r->word_spacing); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedFontDescription>::Log( 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // !defined(OS_NACL) && !defined(NACL_WIN64) 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ppapi::proxy::SerializedTrueTypeFontDesc ------------------------------------ 4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc>::Write( 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Message* m, 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const param_type& p) { 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<std::string>::Write(m, p.family); 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontFamily_Dev>::Write(m, p.generic_family); 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontStyle_Dev>::Write(m, p.style); 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontWeight_Dev>::Write(m, p.weight); 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontWidth_Dev>::Write(m, p.width); 4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontCharset_Dev>::Write(m, p.charset); 4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc>::Read( 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Message* m, 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator* iter, 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param_type* r) { 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<std::string>::Read(m, iter, &r->family) && 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontFamily_Dev>::Read(m, iter, 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &r->generic_family) && 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontStyle_Dev>::Read(m, iter, &r->style) && 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontWeight_Dev>::Read(m, iter, &r->weight) && 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontWidth_Dev>::Read(m, iter, &r->width) && 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ParamTraits<PP_TrueTypeFontCharset_Dev>::Read(m, iter, &r->charset); 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc>::Log( 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const param_type& p, 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* l) { 4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_NACL) && !defined(NACL_WIN64) 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// ppapi::PepperFilePath ------------------------------------------------------- 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<ppapi::PepperFilePath>::Write(Message* m, 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const param_type& p) { 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, static_cast<unsigned>(p.domain())); 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteParam(m, p.path()); 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool ParamTraits<ppapi::PepperFilePath>::Read(const Message* m, 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PickleIterator* iter, 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) param_type* p) { 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned domain; 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!ReadParam(m, iter, &domain) || !ReadParam(m, iter, &path)) 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (domain > ppapi::PepperFilePath::DOMAIN_MAX_VALID) 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *p = ppapi::PepperFilePath( 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<ppapi::PepperFilePath::Domain>(domain), path); 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ParamTraits<ppapi::PepperFilePath>::Log(const param_type& p, 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* l) { 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append("("); 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(static_cast<unsigned>(p.domain()), l); 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(", "); 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LogParam(p.path(), l); 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l->append(")"); 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SerializedFlashMenu --------------------------------------------------------- 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedFlashMenu>::Write( 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.WriteToMessage(m); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::proxy::SerializedFlashMenu>::Read(const Message* m, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return r->ReadFromMessage(m, iter); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::proxy::SerializedFlashMenu>::Log(const param_type& p, 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_NACL) && !defined(NACL_WIN64) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PPB_X509Certificate_Fields -------------------------------------------------- 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::PPB_X509Certificate_Fields>::Write( 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Message* m, 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const param_type& p) { 545eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParamTraits<base::ListValue>::Write(m, p.values_); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<ppapi::PPB_X509Certificate_Fields>::Read(const Message* m, 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator* iter, 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) param_type* r) { 552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return ParamTraits<base::ListValue>::Read(m, iter, &(r->values_)); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ParamTraits<ppapi::PPB_X509Certificate_Fields>::Log(const param_type& p, 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* l) { 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 560eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// ppapi::SocketOptionData ----------------------------------------------------- 561eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 562eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 563eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ParamTraits<ppapi::SocketOptionData>::Write(Message* m, 564eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const param_type& p) { 565eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ppapi::SocketOptionData::Type type = p.GetType(); 566eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParamTraits<int32_t>::Write(m, static_cast<int32_t>(type)); 567eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switch (type) { 568eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ppapi::SocketOptionData::TYPE_INVALID: { 569eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch break; 570eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 571eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ppapi::SocketOptionData::TYPE_BOOL: { 572eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool out_value = false; 573eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool result = p.GetBool(&out_value); 574eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Suppress unused variable warnings. 575eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<void>(result); 576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(result); 577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 578eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParamTraits<bool>::Write(m, out_value); 579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch break; 580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ppapi::SocketOptionData::TYPE_INT32: { 582eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32_t out_value = 0; 583eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool result = p.GetInt32(&out_value); 584eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Suppress unused variable warnings. 585eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static_cast<void>(result); 586eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DCHECK(result); 587eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParamTraits<int32_t>::Write(m, out_value); 589eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch break; 590eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 591eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // No default so the compiler will warn on new types. 592eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 593eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 594eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 595eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 596eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool ParamTraits<ppapi::SocketOptionData>::Read(const Message* m, 597eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PickleIterator* iter, 598eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch param_type* r) { 599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch *r = ppapi::SocketOptionData(); 600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32_t type = 0; 601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!ParamTraits<int32_t>::Read(m, iter, &type)) 602eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (type != ppapi::SocketOptionData::TYPE_INVALID && 604eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch type != ppapi::SocketOptionData::TYPE_BOOL && 605eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch type != ppapi::SocketOptionData::TYPE_INT32) { 606eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 608eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch switch (static_cast<ppapi::SocketOptionData::Type>(type)) { 609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ppapi::SocketOptionData::TYPE_INVALID: { 610eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return true; 611eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 612eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ppapi::SocketOptionData::TYPE_BOOL: { 613eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool value = false; 614eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!ParamTraits<bool>::Read(m, iter, &value)) 615eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 616eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->SetBool(value); 617eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return true; 618eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 619eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case ppapi::SocketOptionData::TYPE_INT32: { 620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int32_t value = 0; 621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (!ParamTraits<int32_t>::Read(m, iter, &value)) 622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch r->SetInt32(value); 624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return true; 625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // No default so the compiler will warn on new types. 627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 628eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 632eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid ParamTraits<ppapi::SocketOptionData>::Log(const param_type& p, 633eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::string* l) { 634eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 635eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 636f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// ppapi::CompositorLayerData -------------------------------------------------- 637f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 638f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static 639f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ParamTraits<ppapi::CompositorLayerData::Transform>::Write( 640f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Message* m, 641f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const param_type& p) { 642f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t i = 0; i < arraysize(p.matrix); i++) 643f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ParamTraits<float>::Write(m, p.matrix[i]); 644f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 645f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 646f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static 647f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)bool ParamTraits<ppapi::CompositorLayerData::Transform>::Read( 648f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const Message* m, 649f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) PickleIterator* iter, 650f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) param_type* r) { 651f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t i = 0; i < arraysize(r->matrix);i++) { 652f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!ParamTraits<float>::Read(m, iter, &r->matrix[i])) 653f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return false; 654f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 655f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return true; 656f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 657f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 658f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ParamTraits<ppapi::CompositorLayerData::Transform>::Log( 659f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const param_type& p, 660f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string* l) { 661f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 662f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace IPC 664