1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/public/cpp/bindings/lib/serialization_context.h" 6 7 #include <limits> 8 9 #include "base/logging.h" 10 #include "mojo/public/cpp/bindings/associated_group_controller.h" 11 #include "mojo/public/cpp/system/core.h" 12 13 namespace mojo { 14 namespace internal { 15 SerializedHandleVector()16SerializedHandleVector::SerializedHandleVector() {} 17 ~SerializedHandleVector()18SerializedHandleVector::~SerializedHandleVector() { 19 for (auto handle : handles_) { 20 if (handle.is_valid()) { 21 MojoResult rv = MojoClose(handle.value()); 22 DCHECK_EQ(rv, MOJO_RESULT_OK); 23 } 24 } 25 } 26 AddHandle(mojo::Handle handle)27Handle_Data SerializedHandleVector::AddHandle(mojo::Handle handle) { 28 Handle_Data data; 29 if (!handle.is_valid()) { 30 data.value = kEncodedInvalidHandleValue; 31 } else { 32 DCHECK_LT(handles_.size(), std::numeric_limits<uint32_t>::max()); 33 data.value = static_cast<uint32_t>(handles_.size()); 34 handles_.push_back(handle); 35 } 36 return data; 37 } 38 TakeHandle(const Handle_Data & encoded_handle)39mojo::Handle SerializedHandleVector::TakeHandle( 40 const Handle_Data& encoded_handle) { 41 if (!encoded_handle.is_valid()) 42 return mojo::Handle(); 43 DCHECK_LT(encoded_handle.value, handles_.size()); 44 return FetchAndReset(&handles_[encoded_handle.value]); 45 } 46 Swap(std::vector<mojo::Handle> * other)47void SerializedHandleVector::Swap(std::vector<mojo::Handle>* other) { 48 handles_.swap(*other); 49 } 50 SerializationContext()51SerializationContext::SerializationContext() {} 52 SerializationContext(scoped_refptr<AssociatedGroupController> in_group_controller)53SerializationContext::SerializationContext( 54 scoped_refptr<AssociatedGroupController> in_group_controller) 55 : group_controller(std::move(in_group_controller)) {} 56 ~SerializationContext()57SerializationContext::~SerializationContext() { 58 DCHECK(!custom_contexts || custom_contexts->empty()); 59 } 60 61 } // namespace internal 62 } // namespace mojo 63