blob: 249b01cace31828b43c4f1de6d45d730be326a0b [file] [log] [blame]
// 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 <cstring>
#include <string>
#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 <typename T>
bool SerializeBlockInfo(const T& block_info,
std::string* serialized_block_info) {
if (!serialized_block_info)
return false;
serialized_block_info->assign(reinterpret_cast<const char*>(&block_info),
sizeof(block_info));
if (serialized_block_info->size() != sizeof(block_info))
return false;
return true;
}
template <typename T>
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_