1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file.
4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef MOJO_SYSTEM_MAPPING_TABLE_H_
6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define MOJO_SYSTEM_MAPPING_TABLE_H_
7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <stdint.h>
9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <vector>
11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/containers/hash_tables.h"
13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/macros.h"
14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/memory/scoped_ptr.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "mojo/public/c/system/types.h"
16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "mojo/system/system_impl_export.h"
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace mojo {
19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace system {
20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochclass Core;
22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass RawSharedBufferMapping;
23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Test-only function (defined/used in embedder/test_embedder.cc). Declared here
25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// so it can be friended.
26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace internal {
27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochbool ShutdownCheckNoLeaks(Core*);
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// This class provides the (global) table of memory mappings (owned by |Core|),
31a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// which maps mapping base addresses to |RawSharedBuffer::Mapping|s.
32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch//
33a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// This class is NOT thread-safe; locking is left to |Core|.
34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass MOJO_SYSTEM_IMPL_EXPORT MappingTable {
35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public:
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  MappingTable();
37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  ~MappingTable();
38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  // Tries to add a mapping. (Takes ownership of the mapping in all cases; on
40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  // failure, it will be destroyed.)
41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  MojoResult AddMapping(scoped_ptr<RawSharedBufferMapping> mapping);
42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  MojoResult RemoveMapping(void* address);
43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch private:
45a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  friend bool internal::ShutdownCheckNoLeaks(Core*);
46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  typedef base::hash_map<uintptr_t, RawSharedBufferMapping*>
48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      AddressToMappingMap;
49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  AddressToMappingMap address_to_mapping_map_;
50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DISALLOW_COPY_AND_ASSIGN(MappingTable);
52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch};
53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}  // namespace system
55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}  // namespace mojo
56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif  // MOJO_SYSTEM_MAPPING_TABLE_H_
58