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

Unified Diff: base/memory/shared_memory.h

Issue 2845113005: Replace base::SharedMemory read-only methods with GetReadOnlyHandle. (Closed)
Patch Set: Comments from thakis. 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_android.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/shared_memory.h
diff --git a/base/memory/shared_memory.h b/base/memory/shared_memory.h
index 34cdc1ed16273befbaa8258f01777b95af33efaf..401e214175f190ea0e24e1f2042d3b51a0f2bb6c 100644
--- a/base/memory/shared_memory.h
+++ b/base/memory/shared_memory.h
@@ -80,8 +80,8 @@ class BASE_EXPORT SharedMemory {
// shared memory file.
//
// WARNING: This does not reduce the OS-level permissions on the handle; it
- // only affects how the SharedMemory will be mmapped. Use
- // ShareReadOnlyToProcess to drop permissions. TODO(jln,jyasskin): DCHECK
+ // only affects how the SharedMemory will be mmapped. Use
+ // GetReadOnlyHandle to drop permissions. TODO(jln,jyasskin): DCHECK
// that |read_only| matches the permissions of the handle.
SharedMemory(const SharedMemoryHandle& handle, bool read_only);
@@ -206,31 +206,14 @@ class BASE_EXPORT SharedMemory {
// It is safe to call Close repeatedly.
void Close();
- // Shares the shared memory to another process. Attempts to create a
- // platform-specific new_handle which can be used in a remote process to read
- // the shared memory file. new_handle is an output parameter to receive the
- // handle for use in the remote process.
- //
- // |*this| must have been initialized using one of the Create*() or Open()
- // methods with share_read_only=true. If it was constructed from a
- // SharedMemoryHandle, this call will CHECK-fail.
- //
- // Returns true on success, false otherwise.
- bool ShareReadOnlyToProcess(ProcessHandle process,
- SharedMemoryHandle* new_handle) {
- return ShareToProcessCommon(process, new_handle, false, SHARE_READONLY);
- }
-
- // Logically equivalent to:
- // bool ok = ShareReadOnlyToProcess(process, new_handle);
- // Close();
- // return ok;
- // Note that the memory is unmapped by calling this method, regardless of the
- // return value.
- bool GiveReadOnlyToProcess(ProcessHandle process,
- SharedMemoryHandle* new_handle) {
- return ShareToProcessCommon(process, new_handle, true, SHARE_READONLY);
- }
+ // Returns a read-only handle to this shared memory region. The caller takes
+ // ownership of the handle. For POSIX handles, CHECK-fails if the region
+ // wasn't Created or Opened with share_read_only=true, which is required to
+ // make the handle read-only. When the handle is passed to the IPC subsystem,
+ // that takes ownership of the handle. As such, it's not valid to pass the
+ // sample handle to the IPC subsystem twice. Returns an invalid handle on
+ // failure.
+ SharedMemoryHandle GetReadOnlyHandle();
// Shares the shared memory to another process. Attempts
// to create a platform-specific new_handle which can be
@@ -240,7 +223,7 @@ class BASE_EXPORT SharedMemory {
// Returns true on success, false otherwise.
bool ShareToProcess(ProcessHandle process,
SharedMemoryHandle* new_handle) {
- return ShareToProcessCommon(process, new_handle, false, SHARE_CURRENT_MODE);
+ return ShareToProcessCommon(process, new_handle, false);
}
// Logically equivalent to:
@@ -251,7 +234,7 @@ class BASE_EXPORT SharedMemory {
// return value.
bool GiveToProcess(ProcessHandle process,
SharedMemoryHandle* new_handle) {
- return ShareToProcessCommon(process, new_handle, true, SHARE_CURRENT_MODE);
+ return ShareToProcessCommon(process, new_handle, true);
}
#if defined(OS_POSIX) && (!defined(OS_MACOSX) || defined(OS_IOS)) && \
@@ -275,19 +258,13 @@ class BASE_EXPORT SharedMemory {
bool FilePathForMemoryName(const std::string& mem_name, FilePath* path);
#endif
- enum ShareMode {
- SHARE_READONLY,
- SHARE_CURRENT_MODE,
- };
-
#if defined(OS_MACOSX)
- bool Share(SharedMemoryHandle* new_handle, ShareMode share_mode);
+ bool Share(SharedMemoryHandle* new_handle);
#endif
bool ShareToProcessCommon(ProcessHandle process,
SharedMemoryHandle* new_handle,
- bool close_self,
- ShareMode);
+ bool close_self);
#if defined(OS_WIN)
// If true indicates this came from an external source so needs extra checks
@@ -295,20 +272,21 @@ class BASE_EXPORT SharedMemory {
bool external_section_;
std::wstring name_;
win::ScopedHandle mapped_file_;
-#elif defined(OS_MACOSX) && !defined(OS_IOS)
+#else
// The OS primitive that backs the shared memory region.
SharedMemoryHandle shm_;
+ // If valid, points to the same memory region as shm_, but with readonly
+ // permissions.
+ SharedMemoryHandle readonly_shm_;
+#endif
+
+#if defined(OS_MACOSX) && !defined(OS_IOS)
// The mechanism by which the memory is mapped. Only valid if |memory_| is not
// |nullptr|.
SharedMemoryHandle::Type mapped_memory_mechanism_;
-
- int readonly_mapped_file_;
-#elif defined(OS_POSIX)
- // The OS primitive that backs the shared memory region.
- SharedMemoryHandle shm_;
- int readonly_mapped_file_;
#endif
+
size_t mapped_size_;
void* memory_;
bool read_only_;
« no previous file with comments | « no previous file | base/memory/shared_memory_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698