Index: base/memory/shared_memory_handle.h |
diff --git a/base/memory/shared_memory_handle.h b/base/memory/shared_memory_handle.h |
index dc33eeafa11faef22f73be0d44dd30447e43118b..3834d868128c6f3cfdd24f6153d832975d2be1ef 100644 |
--- a/base/memory/shared_memory_handle.h |
+++ b/base/memory/shared_memory_handle.h |
@@ -152,6 +152,8 @@ class BASE_EXPORT SharedMemoryHandle { |
void SetOwnershipPassesToIPC(bool ownership_passes); |
bool OwnershipPassesToIPC() const; |
+ bool GetUniqueID(SharedMemoryHandleID* id) const; |
+ |
private: |
friend class SharedMemory; |
@@ -186,6 +188,43 @@ class BASE_EXPORT SharedMemoryHandle { |
}; |
#endif |
+#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS)) |
+struct SharedMemoryHandleID { |
+ dev_t device_id; |
+ ino_t file_id; |
+}; |
+#elif defined(OS_MACOSX) |
+struct SharedMemoryHandleID { |
+ // TODO: On macOS, this might be mach_port_t. |
+ dev_t device_id; |
+ ino_t file_id; |
+}; |
+#elif defined(OS_WIN) |
+struct SharedMemoryHandleID { |
+ DWORD device_id; // BY_HANDLE_FILE_INFORMATION.dwVolumeSerialNumber |
+ intt64_t file_id; // BY_HANDLE_FILE_INFORMATION.nFileIndexHigh and Low |
+}; |
+#endif |
+ |
+bool GetIDFromSharedMemoryHandle(const SharedMemoryHandle& handle, |
+ SharedMemoryHandleID* id); |
+ |
+std::string GetSharedMemoryHandleIDString(const SharedMemoryHandleID& id); |
+ |
+struct SharedMemoryHandleIDHash { |
+ std::size_t operator()(const SharedMemoryHandleID& id) const { |
+ return std::hash<int64_t>()(static_cast<int64_t>(id.device_id)) ^ |
+ std::hash<int64_t>()(static_cast<int64_t>(id.file_id)); |
+ } |
+}; |
+ |
+struct SharedMemoryHandleIDEqual { |
+ bool operator()(const SharedMemoryHandleID& lhs, |
+ const SharedMemoryHandleID& rhs) const { |
+ return lhs.device_id == rhs.device_id && lhs.file_id == rhs.file_id; |
+ } |
+}; |
+ |
} // namespace base |
#endif // BASE_MEMORY_SHARED_MEMORY_HANDLE_H_ |