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