blob: e2fd5c6e18a1863f994fce38391d977a0eb0b7bb [file] [log] [blame]
// Copyright 2016 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 "mojo/public/cpp/bindings/lib/serialization_context.h"
#include <limits>
#include "base/logging.h"
#include "mojo/public/cpp/system/core.h"
namespace mojo {
namespace internal {
SerializedHandleVector::SerializedHandleVector() {}
SerializedHandleVector::~SerializedHandleVector() {
for (auto handle : handles_) {
if (handle.is_valid()) {
MojoResult rv = MojoClose(handle.value());
DCHECK_EQ(rv, MOJO_RESULT_OK);
}
}
}
Handle_Data SerializedHandleVector::AddHandle(mojo::Handle handle) {
Handle_Data data;
if (!handle.is_valid()) {
data.value = kEncodedInvalidHandleValue;
} else {
DCHECK_LT(handles_.size(), std::numeric_limits<uint32_t>::max());
data.value = static_cast<uint32_t>(handles_.size());
handles_.push_back(handle);
}
return data;
}
mojo::Handle SerializedHandleVector::TakeHandle(
const Handle_Data& encoded_handle) {
if (!encoded_handle.is_valid())
return mojo::Handle();
DCHECK_LT(encoded_handle.value, handles_.size());
return FetchAndReset(&handles_[encoded_handle.value]);
}
void SerializedHandleVector::Swap(std::vector<mojo::Handle>* other) {
handles_.swap(*other);
}
SerializationContext::SerializationContext() {}
SerializationContext::~SerializationContext() {
DCHECK(!custom_contexts || custom_contexts->empty());
}
} // namespace internal
} // namespace mojo