• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()16 SerializedHandleVector::SerializedHandleVector() {}
17 
~SerializedHandleVector()18 SerializedHandleVector::~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)27 Handle_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)39 mojo::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)47 void SerializedHandleVector::Swap(std::vector<mojo::Handle>* other) {
48   handles_.swap(*other);
49 }
50 
SerializationContext()51 SerializationContext::SerializationContext() {}
52 
SerializationContext(scoped_refptr<AssociatedGroupController> in_group_controller)53 SerializationContext::SerializationContext(
54     scoped_refptr<AssociatedGroupController> in_group_controller)
55     : group_controller(std::move(in_group_controller)) {}
56 
~SerializationContext()57 SerializationContext::~SerializationContext() {
58   DCHECK(!custom_contexts || custom_contexts->empty());
59 }
60 
61 }  // namespace internal
62 }  // namespace mojo
63