// Copyright (c) 2012 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. #ifndef PPAPI_PROXY_CONTENT_DECRYPTOR_PRIVATE_SERIALIZER_H_ #define PPAPI_PROXY_CONTENT_DECRYPTOR_PRIVATE_SERIALIZER_H_ #include #include #include "ppapi/c/private/pp_content_decryptor.h" namespace ppapi { namespace proxy { // Serialization/deserialization utility functions for storing/extracting // PP_DecryptedBlockInfo, PP_EncryptedBlockInfo, and PP_DecompressedFrameInfo // structs within std::string's for passing through IPC. Both functions return // true upon success, and false upon failure. // // Note, these functions check the size of |block_info| against the size of // the "serialized" data stored within |serialized_block_info|, and will report // failure if expectations are not met. Use of CHECK/DCHECK has been avoided // because the functions are intended for use on both sides of the IPC proxy. template bool SerializeBlockInfo(const T& block_info, std::string* serialized_block_info) { if (!serialized_block_info) return false; serialized_block_info->assign(reinterpret_cast(&block_info), sizeof(block_info)); if (serialized_block_info->size() != sizeof(block_info)) return false; return true; } template bool DeserializeBlockInfo(const std::string& serialized_block_info, T* block_info) { if (!block_info) return false; if (serialized_block_info.size() != sizeof(*block_info)) return false; std::memcpy(block_info, serialized_block_info.data(), sizeof(*block_info)); return true; } } // namespace proxy } // namespace ppapi #endif // PPAPI_PROXY_CONTENT_DECRYPTOR_PRIVATE_SERIALIZER_H_