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_PLATFORM_HANDLE_DISPATCHER_H_ 6 #define MOJO_SYSTEM_PLATFORM_HANDLE_DISPATCHER_H_ 7 8 #include "base/macros.h" 9 #include "mojo/embedder/scoped_platform_handle.h" 10 #include "mojo/system/simple_dispatcher.h" 11 #include "mojo/system/system_impl_export.h" 12 13 namespace mojo { 14 namespace system { 15 16 // A dispatcher that simply wraps/transports a |PlatformHandle| (only for use by 17 // the embedder). 18 class MOJO_SYSTEM_IMPL_EXPORT PlatformHandleDispatcher 19 : public SimpleDispatcher { 20 public: 21 explicit PlatformHandleDispatcher( 22 embedder::ScopedPlatformHandle platform_handle); 23 24 embedder::ScopedPlatformHandle PassPlatformHandle(); 25 26 // |Dispatcher| public methods: 27 virtual Type GetType() const OVERRIDE; 28 29 // The "opposite" of |SerializeAndClose()|. (Typically this is called by 30 // |Dispatcher::Deserialize()|.) 31 static scoped_refptr<PlatformHandleDispatcher> Deserialize( 32 Channel* channel, 33 const void* source, 34 size_t size, 35 embedder::PlatformHandleVector* platform_handles); 36 37 private: 38 virtual ~PlatformHandleDispatcher(); 39 40 // |Dispatcher| protected methods: 41 virtual void CloseImplNoLock() OVERRIDE; 42 virtual scoped_refptr<Dispatcher> 43 CreateEquivalentDispatcherAndCloseImplNoLock() OVERRIDE; 44 virtual void StartSerializeImplNoLock(Channel* channel, 45 size_t* max_size, 46 size_t* max_platform_handles) OVERRIDE; 47 virtual bool EndSerializeAndCloseImplNoLock( 48 Channel* channel, 49 void* destination, 50 size_t* actual_size, 51 embedder::PlatformHandleVector* platform_handles) OVERRIDE; 52 53 embedder::ScopedPlatformHandle platform_handle_; 54 55 DISALLOW_COPY_AND_ASSIGN(PlatformHandleDispatcher); 56 }; 57 58 } // namespace system 59 } // namespace mojo 60 61 #endif // MOJO_SYSTEM_PLATFORM_HANDLE_DISPATCHER_H_ 62