Index: ppapi/proxy/serialized_structs.h |
=================================================================== |
--- ppapi/proxy/serialized_structs.h (revision 154143) |
+++ ppapi/proxy/serialized_structs.h (working copy) |
@@ -107,7 +107,7 @@ |
// them in NaClIPCAdapter for use in NaCl. |
class PPAPI_PROXY_EXPORT SerializedHandle { |
public: |
- enum Type { INVALID, SHARED_MEMORY, SOCKET }; |
+ enum Type { INVALID, SHARED_MEMORY, SOCKET, CHANNEL_HANDLE }; |
struct Header { |
Header() : type(INVALID), size(0) {} |
Header(Type type_arg, uint32_t size_arg) |
@@ -124,15 +124,14 @@ |
// Create a shared memory handle. |
SerializedHandle(const base::SharedMemoryHandle& handle, uint32_t size); |
- // Create a socket handle. |
- // TODO(dmichael): If we have other ways to use FDs later, this would be |
- // ambiguous. |
- explicit SerializedHandle( |
- const IPC::PlatformFileForTransit& socket_descriptor); |
+ // Create a socket or channel handle. |
+ SerializedHandle(const Type type, |
+ const IPC::PlatformFileForTransit& descriptor); |
Type type() const { return type_; } |
bool is_shmem() const { return type_ == SHARED_MEMORY; } |
bool is_socket() const { return type_ == SOCKET; } |
+ bool is_channel_handle() const { return type_ == CHANNEL_HANDLE; } |
const base::SharedMemoryHandle& shmem() const { |
DCHECK(is_shmem()); |
return shm_handle_; |
@@ -142,7 +141,7 @@ |
return size_; |
} |
const IPC::PlatformFileForTransit& descriptor() const { |
- DCHECK(is_socket()); |
+ DCHECK(is_socket() || is_channel_handle()); |
return descriptor_; |
} |
void set_shmem(const base::SharedMemoryHandle& handle, uint32_t size) { |
@@ -159,12 +158,22 @@ |
shm_handle_ = base::SharedMemory::NULLHandle(); |
size_ = 0; |
} |
+ void set_channel_handle(const IPC::PlatformFileForTransit& descriptor) { |
+ type_ = CHANNEL_HANDLE; |
+ |
+ descriptor_ = descriptor; |
+ shm_handle_ = base::SharedMemory::NULLHandle(); |
+ size_ = 0; |
+ } |
void set_null_shmem() { |
set_shmem(base::SharedMemory::NULLHandle(), 0); |
} |
void set_null_socket() { |
set_socket(IPC::InvalidPlatformFileForTransit()); |
} |
+ void set_null_channel_handle() { |
+ set_channel_handle(IPC::InvalidPlatformFileForTransit()); |
+ } |
bool IsHandleValid() const; |
Header header() const { |
@@ -189,7 +198,7 @@ |
base::SharedMemoryHandle shm_handle_; |
uint32_t size_; |
- // This is valid if type == SOCKET. |
+ // This is valid if type == SOCKET || type == CHANNEL_HANDLE. |
IPC::PlatformFileForTransit descriptor_; |
}; |