| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 #ifndef MOJO_SYSTEM_SHARED_BUFFER_DISPATCHER_H_ | |
| 6 #define MOJO_SYSTEM_SHARED_BUFFER_DISPATCHER_H_ | |
| 7 | |
| 8 #include "base/macros.h" | |
| 9 #include "mojo/embedder/platform_shared_buffer.h" | |
| 10 #include "mojo/system/memory.h" | |
| 11 #include "mojo/system/simple_dispatcher.h" | |
| 12 #include "mojo/system/system_impl_export.h" | |
| 13 | |
| 14 namespace mojo { | |
| 15 | |
| 16 namespace embedder { | |
| 17 class PlatformSupport; | |
| 18 } | |
| 19 | |
| 20 namespace system { | |
| 21 | |
| 22 // TODO(vtl): We derive from SimpleDispatcher, even though we don't currently | |
| 23 // have anything that's waitable. I want to add a "transferrable" wait flag | |
| 24 // (which would entail overriding |GetHandleSignalsStateImplNoLock()|, etc.). | |
| 25 class MOJO_SYSTEM_IMPL_EXPORT SharedBufferDispatcher : public SimpleDispatcher { | |
| 26 public: | |
| 27 // The default options to use for |MojoCreateSharedBuffer()|. (Real uses | |
| 28 // should obtain this via |ValidateCreateOptions()| with a null |in_options|; | |
| 29 // this is exposed directly for testing convenience.) | |
| 30 static const MojoCreateSharedBufferOptions kDefaultCreateOptions; | |
| 31 | |
| 32 // Validates and/or sets default options for |MojoCreateSharedBufferOptions|. | |
| 33 // If non-null, |in_options| must point to a struct of at least | |
| 34 // |in_options->struct_size| bytes. |out_options| must point to a (current) | |
| 35 // |MojoCreateSharedBufferOptions| and will be entirely overwritten on success | |
| 36 // (it may be partly overwritten on failure). | |
| 37 static MojoResult ValidateCreateOptions( | |
| 38 UserPointer<const MojoCreateSharedBufferOptions> in_options, | |
| 39 MojoCreateSharedBufferOptions* out_options); | |
| 40 | |
| 41 // Static factory method: |validated_options| must be validated (obviously). | |
| 42 // On failure, |*result| will be left as-is. | |
| 43 static MojoResult Create( | |
| 44 embedder::PlatformSupport* platform_support, | |
| 45 const MojoCreateSharedBufferOptions& validated_options, | |
| 46 uint64_t num_bytes, | |
| 47 scoped_refptr<SharedBufferDispatcher>* result); | |
| 48 | |
| 49 // |Dispatcher| public methods: | |
| 50 virtual Type GetType() const override; | |
| 51 | |
| 52 // The "opposite" of |SerializeAndClose()|. (Typically this is called by | |
| 53 // |Dispatcher::Deserialize()|.) | |
| 54 static scoped_refptr<SharedBufferDispatcher> Deserialize( | |
| 55 Channel* channel, | |
| 56 const void* source, | |
| 57 size_t size, | |
| 58 embedder::PlatformHandleVector* platform_handles); | |
| 59 | |
| 60 private: | |
| 61 explicit SharedBufferDispatcher( | |
| 62 scoped_refptr<embedder::PlatformSharedBuffer> shared_buffer_); | |
| 63 virtual ~SharedBufferDispatcher(); | |
| 64 | |
| 65 // Validates and/or sets default options for | |
| 66 // |MojoDuplicateBufferHandleOptions|. If non-null, |in_options| must point to | |
| 67 // a struct of at least |in_options->struct_size| bytes. |out_options| must | |
| 68 // point to a (current) |MojoDuplicateBufferHandleOptions| and will be | |
| 69 // entirely overwritten on success (it may be partly overwritten on failure). | |
| 70 static MojoResult ValidateDuplicateOptions( | |
| 71 UserPointer<const MojoDuplicateBufferHandleOptions> in_options, | |
| 72 MojoDuplicateBufferHandleOptions* out_options); | |
| 73 | |
| 74 // |Dispatcher| protected methods: | |
| 75 virtual void CloseImplNoLock() override; | |
| 76 virtual scoped_refptr<Dispatcher> | |
| 77 CreateEquivalentDispatcherAndCloseImplNoLock() override; | |
| 78 virtual MojoResult DuplicateBufferHandleImplNoLock( | |
| 79 UserPointer<const MojoDuplicateBufferHandleOptions> options, | |
| 80 scoped_refptr<Dispatcher>* new_dispatcher) override; | |
| 81 virtual MojoResult MapBufferImplNoLock( | |
| 82 uint64_t offset, | |
| 83 uint64_t num_bytes, | |
| 84 MojoMapBufferFlags flags, | |
| 85 scoped_ptr<embedder::PlatformSharedBufferMapping>* mapping) override; | |
| 86 virtual void StartSerializeImplNoLock(Channel* channel, | |
| 87 size_t* max_size, | |
| 88 size_t* max_platform_handles) override; | |
| 89 virtual bool EndSerializeAndCloseImplNoLock( | |
| 90 Channel* channel, | |
| 91 void* destination, | |
| 92 size_t* actual_size, | |
| 93 embedder::PlatformHandleVector* platform_handles) override; | |
| 94 | |
| 95 scoped_refptr<embedder::PlatformSharedBuffer> shared_buffer_; | |
| 96 | |
| 97 DISALLOW_COPY_AND_ASSIGN(SharedBufferDispatcher); | |
| 98 }; | |
| 99 | |
| 100 } // namespace system | |
| 101 } // namespace mojo | |
| 102 | |
| 103 #endif // MOJO_SYSTEM_SHARED_BUFFER_DISPATCHER_H_ | |
| OLD | NEW |