blob: 6d3fa02f465236e903b54445ca1c8700cce15aa2 [file]
// 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.
#include "ppapi/proxy/resource_message_params.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/proxy/ppapi_messages.h"
namespace ppapi {
namespace proxy {
ResourceMessageParams::ResourceMessageParams()
: pp_resource_(0),
sequence_(0) {
}
ResourceMessageParams::ResourceMessageParams(PP_Resource resource,
int32_t sequence)
: pp_resource_(resource),
sequence_(sequence) {
}
ResourceMessageParams::~ResourceMessageParams() {
}
void ResourceMessageParams::Serialize(IPC::Message* msg) const {
IPC::ParamTraits<PP_Resource>::Write(msg, pp_resource_);
IPC::ParamTraits<int32_t>::Write(msg, sequence_);
IPC::ParamTraits<std::vector<SerializedHandle> >::Write(msg, handles_);
}
bool ResourceMessageParams::Deserialize(const IPC::Message* msg,
PickleIterator* iter) {
return IPC::ParamTraits<PP_Resource>::Read(msg, iter, &pp_resource_) &&
IPC::ParamTraits<int32_t>::Read(msg, iter, &sequence_) &&
IPC::ParamTraits<std::vector<SerializedHandle> >::Read(
msg, iter, &handles_);
}
const SerializedHandle* ResourceMessageParams::GetHandleOfTypeAtIndex(
size_t index,
SerializedHandle::Type type) const {
if (handles_.size() <= index)
return NULL;
if (handles_[index].type() != type)
return NULL;
return &handles_[index];
}
bool ResourceMessageParams::GetSharedMemoryHandleAtIndex(
size_t index,
base::SharedMemoryHandle* handle) const {
const SerializedHandle* serialized = GetHandleOfTypeAtIndex(
index, SerializedHandle::SHARED_MEMORY);
if (!serialized)
return false;
*handle = serialized->shmem();
return true;
}
bool ResourceMessageParams::GetSocketHandleAtIndex(
size_t index,
IPC::PlatformFileForTransit* handle) const {
const SerializedHandle* serialized = GetHandleOfTypeAtIndex(
index, SerializedHandle::SOCKET);
if (!serialized)
return false;
*handle = serialized->descriptor();
return true;
}
void ResourceMessageParams::AppendHandle(const SerializedHandle& handle) {
handles_.push_back(handle);
}
ResourceMessageCallParams::ResourceMessageCallParams()
: ResourceMessageParams(),
has_callback_(0) {
}
ResourceMessageCallParams::ResourceMessageCallParams(PP_Resource resource,
int32_t sequence)
: ResourceMessageParams(resource, sequence),
has_callback_(0) {
}
ResourceMessageCallParams::~ResourceMessageCallParams() {
}
void ResourceMessageCallParams::Serialize(IPC::Message* msg) const {
ResourceMessageParams::Serialize(msg);
IPC::ParamTraits<bool>::Write(msg, has_callback_);
}
bool ResourceMessageCallParams::Deserialize(const IPC::Message* msg,
PickleIterator* iter) {
if (!ResourceMessageParams::Deserialize(msg, iter))
return false;
return IPC::ParamTraits<bool>::Read(msg, iter, &has_callback_);
}
ResourceMessageReplyParams::ResourceMessageReplyParams()
: ResourceMessageParams(),
result_(PP_OK) {
}
ResourceMessageReplyParams::ResourceMessageReplyParams(PP_Resource resource,
int32_t sequence)
: ResourceMessageParams(resource, sequence),
result_(PP_OK) {
}
ResourceMessageReplyParams::~ResourceMessageReplyParams() {
}
void ResourceMessageReplyParams::Serialize(IPC::Message* msg) const {
ResourceMessageParams::Serialize(msg);
IPC::ParamTraits<int32_t>::Write(msg, result_);
}
bool ResourceMessageReplyParams::Deserialize(const IPC::Message* msg,
PickleIterator* iter) {
if (!ResourceMessageParams::Deserialize(msg, iter))
return false;
return IPC::ParamTraits<int32_t>::Read(msg, iter, &result_);
}
} // namespace proxy
} // namespace ppapi