• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    // |SimpleDispatcher| method:
54    virtual HandleSignalsState GetHandleSignalsStateNoLock() const OVERRIDE;
55  
56    embedder::ScopedPlatformHandle platform_handle_;
57  
58    DISALLOW_COPY_AND_ASSIGN(PlatformHandleDispatcher);
59  };
60  
61  }  // namespace system
62  }  // namespace mojo
63  
64  #endif  // MOJO_SYSTEM_PLATFORM_HANDLE_DISPATCHER_H_
65