Index: base/file_descriptor_store.h |
diff --git a/base/file_descriptor_store.h b/base/file_descriptor_store.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f0b2f3e1be9e8b52de764a10e43b7641277ca08a |
--- /dev/null |
+++ b/base/file_descriptor_store.h |
@@ -0,0 +1,70 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef BASE_FILE_DESCRIPTOR_STORE_H_ |
+#define BASE_FILE_DESCRIPTOR_STORE_H_ |
+ |
+#include <stdint.h> |
+ |
+#include <vector> |
+ |
+#include "base/files/memory_mapped_file.h" |
+#include "base/memory/singleton.h" |
+ |
+namespace base { |
+ |
+// The file descriptor store is used to associate file descriptors with keys |
+// that must be unique. |
+// It is used to share file descriptors from a process to its child. |
+class BASE_EXPORT FileDescriptorStore { |
+ public: |
+ struct Descriptor { |
+ Descriptor(const std::string& key, int fd); |
+ Descriptor(const std::string& key, |
+ int fd, |
+ base::MemoryMappedFile::Region region); |
+ |
+ // Globally unique key. |
+ std::string key; |
+ // Actual FD. |
+ int fd; |
+ // Optional region, defaults to kWholeFile. |
+ base::MemoryMappedFile::Region region; |
+ }; |
+ typedef std::vector<Descriptor> Mapping; |
+ |
+ // Returns the singleton instance of FileDescriptorStore. |
+ static FileDescriptorStore* GetInstance(); |
+ |
+ // Gets a descriptor given a key. It is a fatal error if the key is not known. |
+ int Get(const std::string& key) const; |
+ |
+ // Gets a descriptor given a key. Returns -1 on error. |
+ int MaybeGet(const std::string& key) const; |
+ |
+ // Gets a region given a key. It is a fatal error if the key is not known. |
+ base::MemoryMappedFile::Region GetRegion(const std::string& key) const; |
+ |
+ // Sets the descriptor for the given |key|. This sets the region associated |
+ // with |key| to kWholeFile. |
+ void Set(const std::string& key, int fd); |
+ |
+ // Sets the descriptor and |region| for the given |key|. |
+ void Set(const std::string& key, |
+ int fd, |
+ base::MemoryMappedFile::Region region); |
+ |
+ void Reset(const Mapping& mapping); |
+ |
+ private: |
+ friend struct DefaultSingletonTraits<FileDescriptorStore>; |
+ FileDescriptorStore(); |
+ ~FileDescriptorStore(); |
+ |
+ Mapping descriptors_; |
+}; |
+ |
+} // namespace base |
+ |
+#endif // BASE_FILE_DESCRIPTOR_STORE_H_ |