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

Unified Diff: mojo/edk/embedder/platform_shared_buffer.cc

Issue 1995753002: [mojo-edk] Expose portable API for platform handle wrapping (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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
Index: mojo/edk/embedder/platform_shared_buffer.cc
diff --git a/mojo/edk/embedder/platform_shared_buffer.cc b/mojo/edk/embedder/platform_shared_buffer.cc
index 467e5e6a8a184204473264bb60690ce42f63b856..12f9940845a09b7139b05678dc148be18b28f69b 100644
--- a/mojo/edk/embedder/platform_shared_buffer.cc
+++ b/mojo/edk/embedder/platform_shared_buffer.cc
@@ -18,22 +18,6 @@
namespace mojo {
namespace edk {
-namespace {
-
-// Takes ownership of |memory_handle|.
-ScopedPlatformHandle SharedMemoryToPlatformHandle(
- base::SharedMemoryHandle memory_handle) {
-#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS))
- return ScopedPlatformHandle(PlatformHandle(memory_handle.fd));
-#elif defined(OS_WIN)
- return ScopedPlatformHandle(PlatformHandle(memory_handle.GetHandle()));
-#else
- return ScopedPlatformHandle(PlatformHandle(memory_handle.GetMemoryObject()));
-#endif
-}
-
-} // namespace
-
// static
PlatformSharedBuffer* PlatformSharedBuffer::Create(size_t num_bytes) {
DCHECK_GT(num_bytes, 0u);
@@ -101,6 +85,37 @@ PlatformSharedBuffer* PlatformSharedBuffer::CreateFromSharedMemoryHandle(
return rv;
}
+// static
+base::SharedMemoryHandle
+PlatformSharedBuffer::GetSharedMemoryHandleFromPlatformHandle(
+ MojoPlatformHandle platform_handle,
+ size_t size,
+ bool read_only) {
+#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS))
+ return base::SharedMemoryHandle(static_cast<int>(platform_handle),
+ false);
+#elif defined(OS_WIN)
+ return base::SharedMemoryHandle(static_cast<HANDLE>(platform_handle),
+ base::GetCurrentProcessHandle());
+#else
+ return base::SharedMemoryHandle(static_cast<mach_port_t>(platform_handle),
+ static_cast<mach_vm_size_t>(num_bytes),
+ base::GetCurrentProcId());
+#endif
+}
+
+// static
+PlatformHandle PlatformSharedBuffer::GetPlatformHandleFromSharedMemoryHandle(
+ base::SharedMemoryHandle memory_handle) {
+#if defined(OS_POSIX) && !(defined(OS_MACOSX) && !defined(OS_IOS))
+ return PlatformHandle(memory_handle.fd);
+#elif defined(OS_WIN)
+ return PlatformHandle(memory_handle.GetHandle());
+#else
+ return PlatformHandle(memory_handle.GetMemoryObject());
+#endif
+}
+
size_t PlatformSharedBuffer::GetNumBytes() const {
return num_bytes_;
}
@@ -161,7 +176,7 @@ ScopedPlatformHandle PlatformSharedBuffer::DuplicatePlatformHandle() {
if (handle == base::SharedMemory::NULLHandle())
return ScopedPlatformHandle();
- return SharedMemoryToPlatformHandle(handle);
+ return ScopedPlatformHandle(GetPlatformHandleFromSharedMemoryHandle(handle));
}
ScopedPlatformHandle PlatformSharedBuffer::PassPlatformHandle() {

Powered by Google App Engine
This is Rietveld 408576698