| Index: mojo/public/cpp/bindings/lib/serialization_context.h
|
| diff --git a/mojo/public/cpp/bindings/lib/serialization_context.h b/mojo/public/cpp/bindings/lib/serialization_context.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..48d37cf713af4dced20094f408cfe1987d3e538e
|
| --- /dev/null
|
| +++ b/mojo/public/cpp/bindings/lib/serialization_context.h
|
| @@ -0,0 +1,75 @@
|
| +// 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.
|
| +
|
| +#ifndef MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_SERIALIZATION_CONTEXT_H_
|
| +#define MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_SERIALIZATION_CONTEXT_H_
|
| +
|
| +#include <stddef.h>
|
| +
|
| +#include <memory>
|
| +#include <queue>
|
| +#include <vector>
|
| +
|
| +#include "base/macros.h"
|
| +#include "base/memory/ref_counted.h"
|
| +#include "mojo/public/cpp/bindings/lib/bindings_internal.h"
|
| +#include "mojo/public/cpp/system/handle.h"
|
| +
|
| +namespace mojo {
|
| +namespace internal {
|
| +
|
| +class MultiplexRouter;
|
| +
|
| +// A container for handles during serialization/deserialization.
|
| +class SerializedHandleVector {
|
| + public:
|
| + SerializedHandleVector();
|
| + ~SerializedHandleVector();
|
| +
|
| + size_t size() const { return handles_.size(); }
|
| +
|
| + // Adds a handle to the handle list and returns its index for encoding.
|
| + Handle_Data AddHandle(mojo::Handle handle);
|
| +
|
| + // Takes a handle from the list of serialized handle data.
|
| + mojo::Handle TakeHandle(const Handle_Data& encoded_handle);
|
| +
|
| + // Takes a handle from the list of serialized handle data and returns it in
|
| + // |*out_handle| as a specific scoped handle type.
|
| + template <typename T>
|
| + ScopedHandleBase<T> TakeHandleAs(const Handle_Data& encoded_handle) {
|
| + return MakeScopedHandle(T(TakeHandle(encoded_handle).value()));
|
| + }
|
| +
|
| + // Swaps all owned handles out with another Handle vector.
|
| + void Swap(std::vector<mojo::Handle>* other);
|
| +
|
| + private:
|
| + // Handles are owned by this object.
|
| + std::vector<mojo::Handle> handles_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SerializedHandleVector);
|
| +};
|
| +
|
| +// Context information for serialization/deserialization routines.
|
| +struct SerializationContext {
|
| + SerializationContext();
|
| + explicit SerializationContext(scoped_refptr<MultiplexRouter> in_router);
|
| +
|
| + ~SerializationContext();
|
| +
|
| + // Used to serialize/deserialize associated interface pointers and requests.
|
| + scoped_refptr<MultiplexRouter> router;
|
| +
|
| + // Opaque context pointers returned by StringTraits::SetUpContext().
|
| + std::unique_ptr<std::queue<void*>> custom_contexts;
|
| +
|
| + // Stashes handles encoded in a message by index.
|
| + SerializedHandleVector handles;
|
| +};
|
| +
|
| +} // namespace internal
|
| +} // namespace mojo
|
| +
|
| +#endif // MOJO_PUBLIC_CPP_BINDINGS_LIB_BINDINGS_SERIALIZATION_CONTEXT_H_
|
|
|