Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / mojo / embedder / simple_platform_shared_buffer.h
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_SIMPLE_PLATFORM_SHARED_BUFFER_H_
6 #define MOJO_SYSTEM_SIMPLE_PLATFORM_SHARED_BUFFER_H_
7
8 #include <stddef.h>
9
10 #include "base/macros.h"
11 #include "mojo/embedder/platform_shared_buffer.h"
12 #include "mojo/system/system_impl_export.h"
13
14 namespace mojo {
15 namespace embedder {
16
17 // A simple implementation of |PlatformSharedBuffer|.
18 class MOJO_SYSTEM_IMPL_EXPORT SimplePlatformSharedBuffer
19     : public PlatformSharedBuffer {
20  public:
21   // Creates a shared buffer of size |num_bytes| bytes (initially zero-filled).
22   // |num_bytes| must be nonzero. Returns null on failure.
23   static SimplePlatformSharedBuffer* Create(size_t num_bytes);
24
25   static SimplePlatformSharedBuffer* CreateFromPlatformHandle(
26       size_t num_bytes,
27       ScopedPlatformHandle platform_handle);
28
29   // |PlatformSharedBuffer| implementation:
30   virtual size_t GetNumBytes() const OVERRIDE;
31   virtual scoped_ptr<PlatformSharedBufferMapping> Map(size_t offset,
32                                                       size_t length) OVERRIDE;
33   virtual bool IsValidMap(size_t offset, size_t length) OVERRIDE;
34   virtual scoped_ptr<PlatformSharedBufferMapping> MapNoCheck(
35       size_t offset,
36       size_t length) OVERRIDE;
37   virtual ScopedPlatformHandle DuplicatePlatformHandle() OVERRIDE;
38   virtual ScopedPlatformHandle PassPlatformHandle() OVERRIDE;
39
40  private:
41   explicit SimplePlatformSharedBuffer(size_t num_bytes);
42   virtual ~SimplePlatformSharedBuffer();
43
44   // Implemented in simple_platform_shared_buffer_{posix,win}.cc:
45
46   // This is called by |Create()| before this object is given to anyone.
47   bool Init();
48
49   // This is like |Init()|, but for |CreateFromPlatformHandle()|. (Note: It
50   // should verify that |platform_handle| is an appropriate handle for the
51   // claimed |num_bytes_|.)
52   bool InitFromPlatformHandle(ScopedPlatformHandle platform_handle);
53
54   // The platform-dependent part of |Map()|; doesn't check arguments.
55   scoped_ptr<PlatformSharedBufferMapping> MapImpl(size_t offset, size_t length);
56
57   const size_t num_bytes_;
58
59   // This is set in |Init()|/|InitFromPlatformHandle()| and never modified
60   // (except by |PassPlatformHandle()|; see the comments above its declaration),
61   // hence does not need to be protected by a lock.
62   ScopedPlatformHandle handle_;
63
64   DISALLOW_COPY_AND_ASSIGN(SimplePlatformSharedBuffer);
65 };
66
67 // An implementation of |PlatformSharedBufferMapping|, produced by
68 // |SimplePlatformSharedBuffer|.
69 class MOJO_SYSTEM_IMPL_EXPORT SimplePlatformSharedBufferMapping
70     : public PlatformSharedBufferMapping {
71  public:
72   virtual ~SimplePlatformSharedBufferMapping();
73
74   virtual void* GetBase() const OVERRIDE;
75   virtual size_t GetLength() const OVERRIDE;
76
77  private:
78   friend class SimplePlatformSharedBuffer;
79
80   SimplePlatformSharedBufferMapping(void* base,
81                                     size_t length,
82                                     void* real_base,
83                                     size_t real_length)
84       : base_(base),
85         length_(length),
86         real_base_(real_base),
87         real_length_(real_length) {}
88   void Unmap();
89
90   void* const base_;
91   const size_t length_;
92
93   void* const real_base_;
94   const size_t real_length_;
95
96   DISALLOW_COPY_AND_ASSIGN(SimplePlatformSharedBufferMapping);
97 };
98
99 }  // namespace embedder
100 }  // namespace mojo
101
102 #endif  // MOJO_SYSTEM_SIMPLE_PLATFORM_SHARED_BUFFER_H_