| // 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 |