Home | History | Annotate | Download | only in system
      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