Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Unified Diff: base/memory/shared_memory_handle.h

Issue 2846893003: Used a single class for SharedMemoryHandle. (Closed)
Patch Set: Rebase. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | base/memory/shared_memory_handle_posix.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/shared_memory_handle.h
diff --git a/base/memory/shared_memory_handle.h b/base/memory/shared_memory_handle.h
index 942cba4f2bec02ed2d271c16801aaff8ef993e96..4af796bfa140a3f3c33f5506ea2a4aef9a625829 100644
--- a/base/memory/shared_memory_handle.h
+++ b/base/memory/shared_memory_handle.h
@@ -27,33 +27,18 @@ namespace base {
// SharedMemoryHandle is a platform specific type which represents
// the underlying OS handle to a shared memory segment.
-// TODO(erikchen): Refactor this to create a single class on all platforms,
-// rather than 3 separate class definitions that are very similar.
-// https://crbug.com/713763.
-#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS))
class BASE_EXPORT SharedMemoryHandle {
public:
// The default constructor returns an invalid SharedMemoryHandle.
SharedMemoryHandle();
- // This constructor is deprecated, as it fails to propagate the GUID, which
- // will be added in the near future.
- // TODO(rockot): Remove this constructor once Mojo supports GUIDs.
- // https://crbug.com/713763.
- explicit SharedMemoryHandle(const base::FileDescriptor& file_descriptor);
-
- // Creates a SharedMemoryHandle from an |fd| supplied from an external
- // service.
- static SharedMemoryHandle ImportHandle(int fd);
-
- // Returns the underlying OS resource.
- int GetHandle() const;
-
- // Takes ownership of the OS resource.
- void SetHandle(int fd);
+ // Standard copy constructor. The new instance shares the underlying OS
+ // primitives.
+ SharedMemoryHandle(const SharedMemoryHandle& handle);
- // Whether the underlying OS resource is valid.
- bool IsValid() const;
+ // Standard assignment operator. The updated instance shares the underlying
+ // OS primitives.
+ SharedMemoryHandle& operator=(const SharedMemoryHandle& handle);
// Closes the underlying OS resource.
// The fact that this method needs to be "const" is an artifact of the
@@ -63,77 +48,15 @@ class BASE_EXPORT SharedMemoryHandle {
// https://crbug.com/716072.
void Close() const;
- // Invalidates [but doesn't close] the underlying OS resource. This will leak
- // unless the caller is careful.
- int Release();
-
- // Duplicates the underlying OS resource.
- SharedMemoryHandle Duplicate() const;
-
- // If this returns true, then ownership of the underlying OS resource is
- // implicitly passed to the IPC subsystem during serialization.
+ // Whether ownership of the underlying OS resource is implicitly passed to
+ // the IPC subsystem during serialization.
void SetOwnershipPassesToIPC(bool ownership_passes);
bool OwnershipPassesToIPC() const;
- private:
- // This must be public to support serialization by Chrome IPC.
- FileDescriptor file_descriptor_;
-};
-#elif defined(OS_WIN)
-class BASE_EXPORT SharedMemoryHandle {
- public:
- // The default constructor returns an invalid SharedMemoryHandle.
- SharedMemoryHandle();
- SharedMemoryHandle(HANDLE h, base::ProcessId pid);
-
- // Standard copy constructor. The new instance shares the underlying OS
- // primitives.
- SharedMemoryHandle(const SharedMemoryHandle& handle);
-
- // Standard assignment operator. The updated instance shares the underlying
- // OS primitives.
- SharedMemoryHandle& operator=(const SharedMemoryHandle& handle);
-
- // Comparison operators.
- bool operator==(const SharedMemoryHandle& handle) const;
- bool operator!=(const SharedMemoryHandle& handle) const;
-
- // Closes the underlying OS resources.
- void Close() const;
-
- // Whether the underlying OS primitive is valid.
+ // Whether the underlying OS resource is valid.
bool IsValid() const;
- // Whether |pid_| is the same as the current process's id.
- bool BelongsToCurrentProcess() const;
-
- // Whether handle_ needs to be duplicated into the destination process when
- // an instance of this class is passed over a Chrome IPC channel.
- bool NeedsBrokering() const;
-
- void SetOwnershipPassesToIPC(bool ownership_passes);
- bool OwnershipPassesToIPC() const;
-
- HANDLE GetHandle() const;
- base::ProcessId GetPID() const;
-
- private:
- HANDLE handle_;
-
- // The process in which |handle_| is valid and can be used. If |handle_| is
- // invalid, this will be kNullProcessId.
- base::ProcessId pid_;
-
- // Whether passing this object as a parameter to an IPC message passes
- // ownership of |handle_| to the IPC stack. This is meant to mimic the
- // behavior of the |auto_close| parameter of FileDescriptor. This member only
- // affects attachment-brokered SharedMemoryHandles.
- // Defaults to |false|.
- bool ownership_passes_to_ipc_;
-};
-#else
-class BASE_EXPORT SharedMemoryHandle {
- public:
+#if defined(OS_MACOSX) && !defined(OS_IOS)
enum Type {
// The SharedMemoryHandle is backed by a POSIX fd.
POSIX,
@@ -141,9 +64,6 @@ class BASE_EXPORT SharedMemoryHandle {
MACH,
};
- // The default constructor returns an invalid SharedMemoryHandle.
- SharedMemoryHandle();
-
// Constructs a SharedMemoryHandle backed by the components of a
// FileDescriptor. The newly created instance has the same ownership semantics
// as base::FileDescriptor. This typically means that the SharedMemoryHandle
@@ -163,24 +83,12 @@ class BASE_EXPORT SharedMemoryHandle {
mach_vm_size_t size,
base::ProcessId pid);
- // Standard copy constructor. The new instance shares the underlying OS
- // primitives.
- SharedMemoryHandle(const SharedMemoryHandle& handle);
-
- // Standard assignment operator. The updated instance shares the underlying
- // OS primitives.
- SharedMemoryHandle& operator=(const SharedMemoryHandle& handle);
-
- // Duplicates the underlying OS resources.
- SharedMemoryHandle Duplicate() const;
-
// Comparison operators.
bool operator==(const SharedMemoryHandle& handle) const;
bool operator!=(const SharedMemoryHandle& handle) const;
- // Whether the underlying OS primitive is valid. Once the SharedMemoryHandle
- // is backed by a valid OS primitive, it becomes immutable.
- bool IsValid() const;
+ // Duplicates the underlying OS resources.
+ SharedMemoryHandle Duplicate() const;
// Exposed so that the SharedMemoryHandle can be transported between
// processes.
@@ -195,14 +103,49 @@ class BASE_EXPORT SharedMemoryHandle {
// On success, |memory| is an output variable that contains the start of the
// mapped memory.
bool MapAt(off_t offset, size_t bytes, void** memory, bool read_only);
+#elif defined(OS_WIN)
+ SharedMemoryHandle(HANDLE h, base::ProcessId pid);
- // Closes the underlying OS primitive.
- void Close() const;
+ // Comparison operators.
+ bool operator==(const SharedMemoryHandle& handle) const;
+ bool operator!=(const SharedMemoryHandle& handle) const;
- void SetOwnershipPassesToIPC(bool ownership_passes);
- bool OwnershipPassesToIPC() const;
+ // Whether |pid_| is the same as the current process's id.
+ bool BelongsToCurrentProcess() const;
+
+ // Whether handle_ needs to be duplicated into the destination process when
+ // an instance of this class is passed over a Chrome IPC channel.
+ bool NeedsBrokering() const;
+
+ HANDLE GetHandle() const;
+ base::ProcessId GetPID() const;
+#else
+ // This constructor is deprecated, as it fails to propagate the GUID, which
+ // will be added in the near future.
+ // TODO(rockot): Remove this constructor once Mojo supports GUIDs.
+ // https://crbug.com/713763.
+ explicit SharedMemoryHandle(const base::FileDescriptor& file_descriptor);
+
+ // Creates a SharedMemoryHandle from an |fd| supplied from an external
+ // service.
+ static SharedMemoryHandle ImportHandle(int fd);
+
+ // Returns the underlying OS resource.
+ int GetHandle() const;
+
+ // Takes ownership of the OS resource.
+ void SetHandle(int fd);
+
+ // Invalidates [but doesn't close] the underlying OS resource. This will leak
+ // unless the caller is careful.
+ int Release();
+
+ // Duplicates the underlying OS resource.
+ SharedMemoryHandle Duplicate() const;
+#endif
private:
+#if defined(OS_MACOSX) && !defined(OS_IOS)
friend class SharedMemory;
// Shared code between copy constructor and operator=.
@@ -233,8 +176,23 @@ class BASE_EXPORT SharedMemoryHandle {
bool ownership_passes_to_ipc_;
};
};
-};
+#elif defined(OS_WIN)
+ HANDLE handle_;
+
+ // The process in which |handle_| is valid and can be used. If |handle_| is
+ // invalid, this will be kNullProcessId.
+ base::ProcessId pid_;
+
+ // Whether passing this object as a parameter to an IPC message passes
+ // ownership of |handle_| to the IPC stack. This is meant to mimic the
+ // behavior of the |auto_close| parameter of FileDescriptor. This member only
+ // affects attachment-brokered SharedMemoryHandles.
+ // Defaults to |false|.
+ bool ownership_passes_to_ipc_;
+#else
+ FileDescriptor file_descriptor_;
#endif
+};
} // namespace base
« no previous file with comments | « no previous file | base/memory/shared_memory_handle_posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698