Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: mojo/public/cpp/bindings/lib/serialization_util.h

Issue 1955123003: Mojo C++ bindings: switch the remaining callsites of the old serialization interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@24_union_and_others
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_SERIALIZATION_H_ 5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_SERIALIZATION_UTIL_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_SERIALIZATION_H_ 6 #define MOJO_PUBLIC_CPP_BINDINGS_LIB_SERIALIZATION_UTIL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
11 #include <queue> 11 #include <queue>
12 #include <vector>
13 12
13 #include "base/logging.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ref_counted.h"
16 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h" 15 #include "mojo/public/cpp/bindings/associated_interface_ptr_info.h"
17 #include "mojo/public/cpp/bindings/interface_ptr.h" 16 #include "mojo/public/cpp/bindings/interface_ptr.h"
18 #include "mojo/public/cpp/bindings/lib/bindings_internal.h" 17 #include "mojo/public/cpp/bindings/lib/bindings_internal.h"
19 #include "mojo/public/cpp/system/core.h" 18 #include "mojo/public/cpp/bindings/lib/serialization_context.h"
20 #include "mojo/public/cpp/system/handle.h" 19 #include "mojo/public/cpp/system/handle.h"
21 20
22 namespace mojo { 21 namespace mojo {
23 namespace internal { 22 namespace internal {
24 23
25 struct SerializationContext;
26 class MultiplexRouter; 24 class MultiplexRouter;
27 25
28 size_t Align(size_t size); 26 size_t Align(size_t size);
29 char* AlignPointer(char* ptr); 27 char* AlignPointer(char* ptr);
30 28
31 bool IsAligned(const void* ptr); 29 bool IsAligned(const void* ptr);
32 30
33 // Pointers are encoded as relative offsets. The offsets are relative to the 31 // Pointers are encoded as relative offsets. The offsets are relative to the
34 // address of where the offset value is stored, such that the pointer may be 32 // address of where the offset value is stored, such that the pointer may be
35 // recovered with the expression: 33 // recovered with the expression:
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 inline void AssociatedInterfaceDataToPtrInfo( 77 inline void AssociatedInterfaceDataToPtrInfo(
80 AssociatedInterface_Data* input, 78 AssociatedInterface_Data* input,
81 AssociatedInterfacePtrInfo<T>* output, 79 AssociatedInterfacePtrInfo<T>* output,
82 MultiplexRouter* router) { 80 MultiplexRouter* router) {
83 AssociatedInterfacePtrInfoHelper::SetHandle( 81 AssociatedInterfacePtrInfoHelper::SetHandle(
84 output, 82 output,
85 router->CreateLocalEndpointHandle(FetchAndReset(&input->interface_id))); 83 router->CreateLocalEndpointHandle(FetchAndReset(&input->interface_id)));
86 output->set_version(input->version); 84 output->set_version(input->version);
87 } 85 }
88 86
89 // A container for handles during serialization/deserialization.
90 class SerializedHandleVector {
91 public:
92 SerializedHandleVector();
93 ~SerializedHandleVector();
94
95 size_t size() const { return handles_.size(); }
96
97 // Adds a handle to the handle list and returns its index for encoding.
98 Handle_Data AddHandle(mojo::Handle handle);
99
100 // Takes a handle from the list of serialized handle data.
101 mojo::Handle TakeHandle(const Handle_Data& encoded_handle);
102
103 // Takes a handle from the list of serialized handle data and returns it in
104 // |*out_handle| as a specific scoped handle type.
105 template <typename T>
106 ScopedHandleBase<T> TakeHandleAs(const Handle_Data& encoded_handle) {
107 return MakeScopedHandle(T(TakeHandle(encoded_handle).value()));
108 }
109
110 // Swaps all owned handles out with another Handle vector.
111 void Swap(std::vector<mojo::Handle>* other);
112
113 private:
114 // Handles are owned by this object.
115 std::vector<mojo::Handle> handles_;
116
117 DISALLOW_COPY_AND_ASSIGN(SerializedHandleVector);
118 };
119
120 // Context information for serialization/deserialization routines.
121 struct SerializationContext {
122 SerializationContext();
123 explicit SerializationContext(scoped_refptr<MultiplexRouter> in_router);
124
125 ~SerializationContext();
126
127 // Used to serialize/deserialize associated interface pointers and requests.
128 scoped_refptr<MultiplexRouter> router;
129
130 // Opaque context pointers returned by StringTraits::SetUpContext().
131 std::unique_ptr<std::queue<void*>> custom_contexts;
132
133 // Stashes handles encoded in a message by index.
134 SerializedHandleVector handles;
135 };
136
137 template <typename T> 87 template <typename T>
138 inline void InterfacePointerToData(InterfacePtr<T> input, 88 inline void InterfacePointerToData(InterfacePtr<T> input,
139 Interface_Data* output, 89 Interface_Data* output,
140 SerializationContext* context) { 90 SerializationContext* context) {
141 InterfacePtrInfo<T> info = input.PassInterface(); 91 InterfacePtrInfo<T> info = input.PassInterface();
142 output->handle = context->handles.AddHandle(info.PassHandle().release()); 92 output->handle = context->handles.AddHandle(info.PassHandle().release());
143 output->version = info.version(); 93 output->version = info.version();
144 } 94 }
145 95
146 template <typename T> 96 template <typename T>
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 template <typename ReturnType, typename ParamType, typename MaybeConstUserType> 206 template <typename ReturnType, typename ParamType, typename MaybeConstUserType>
257 ReturnType CallWithContext(ReturnType (*f)(ParamType), 207 ReturnType CallWithContext(ReturnType (*f)(ParamType),
258 MaybeConstUserType& input, 208 MaybeConstUserType& input,
259 void* context) { 209 void* context) {
260 return f(input); 210 return f(input);
261 } 211 }
262 212
263 } // namespace internal 213 } // namespace internal
264 } // namespace mojo 214 } // namespace mojo
265 215
266 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_SERIALIZATION_H_ 216 #endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_SERIALIZATION_UTIL_H_
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/serialization_forward.h ('k') | mojo/public/cpp/bindings/lib/serialization_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698