Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/nacl/loader/nacl_ipc_adapter.h" | 5 #include "components/nacl/loader/nacl_ipc_adapter.h" |
| 6 | 6 |
| 7 #include <limits.h> | 7 #include <limits.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 220 NaClDescUnref(desc_); | 220 NaClDescUnref(desc_); |
| 221 } | 221 } |
| 222 | 222 |
| 223 NaClDesc* desc() { return desc_; } | 223 NaClDesc* desc() { return desc_; } |
| 224 | 224 |
| 225 private: | 225 private: |
| 226 NaClDesc* desc_; | 226 NaClDesc* desc_; |
| 227 DISALLOW_COPY_AND_ASSIGN(NaClDescWrapper); | 227 DISALLOW_COPY_AND_ASSIGN(NaClDescWrapper); |
| 228 }; | 228 }; |
| 229 | 229 |
| 230 scoped_ptr<NaClDescWrapper> MakeShmNaClDesc( | |
| 231 const base::SharedMemoryHandle& handle, | |
| 232 size_t size) { | |
| 233 #if defined(OS_MACOSX) | |
| 234 if (handle.GetType() == base::SharedMemoryHandle::MACH) { | |
| 235 return scoped_ptr<NaClDescWrapper>(new NaClDescWrapper( | |
| 236 NaClDescImcShmMachMake(handle.GetMemoryObject(), size))); | |
| 237 } | |
| 238 CHECK_EQ(base::SharedMemoryHandle::POSIX, handle.GetType()); | |
| 239 #endif | |
| 240 | |
| 241 return scoped_ptr<NaClDescWrapper>(new NaClDescWrapper(NaClDescImcShmMake( | |
| 242 #if defined(OS_WIN) | |
| 243 handle.GetHandle(), | |
| 244 #else | |
| 245 base::SharedMemory::GetFdFromSharedMemoryHandle(handle), | |
| 246 #endif | |
| 247 size))); | |
| 248 } | |
| 249 | |
| 230 } // namespace | 250 } // namespace |
| 231 | 251 |
| 232 class NaClIPCAdapter::RewrittenMessage | 252 class NaClIPCAdapter::RewrittenMessage |
| 233 : public base::RefCounted<RewrittenMessage> { | 253 : public base::RefCounted<RewrittenMessage> { |
| 234 public: | 254 public: |
| 235 RewrittenMessage(); | 255 RewrittenMessage(); |
| 236 | 256 |
| 237 bool is_consumed() const { return data_read_cursor_ == data_len_; } | 257 bool is_consumed() const { return data_read_cursor_ == data_len_; } |
| 238 | 258 |
| 239 void SetData(const NaClIPCAdapter::NaClMessageHeader& header, | 259 void SetData(const NaClIPCAdapter::NaClMessageHeader& header, |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 534 return false; | 554 return false; |
| 535 | 555 |
| 536 // Now add any descriptors we found to rewritten_msg. |handles| is usually | 556 // Now add any descriptors we found to rewritten_msg. |handles| is usually |
| 537 // empty, unless we read a message containing a FD or handle. | 557 // empty, unless we read a message containing a FD or handle. |
| 538 for (Handles::const_iterator iter = handles.begin(); | 558 for (Handles::const_iterator iter = handles.begin(); |
| 539 iter != handles.end(); | 559 iter != handles.end(); |
| 540 ++iter) { | 560 ++iter) { |
| 541 scoped_ptr<NaClDescWrapper> nacl_desc; | 561 scoped_ptr<NaClDescWrapper> nacl_desc; |
| 542 switch (iter->type()) { | 562 switch (iter->type()) { |
| 543 case ppapi::proxy::SerializedHandle::SHARED_MEMORY: { | 563 case ppapi::proxy::SerializedHandle::SHARED_MEMORY: { |
| 544 const base::SharedMemoryHandle& shm_handle = iter->shmem(); | 564 nacl_desc = |
|
Mark Seaborn
2015/11/20 21:57:19
Nit: the other cases do nacl_desc.reset() (though
erikchen
2015/11/20 22:00:46
nacl_desc.reset() is being used on a raw pointer.
Mark Seaborn
2015/11/20 22:42:36
OK, please leave it as it is, then. I hadn't real
| |
| 545 uint32_t size = iter->size(); | 565 MakeShmNaClDesc(iter->shmem(), static_cast<size_t>(iter->size())); |
| 546 nacl_desc.reset(new NaClDescWrapper(NaClDescImcShmMake( | |
| 547 #if defined(OS_WIN) | |
| 548 shm_handle.GetHandle(), | |
| 549 #else | |
| 550 base::SharedMemory::GetFdFromSharedMemoryHandle(shm_handle), | |
| 551 #endif | |
| 552 static_cast<size_t>(size)))); | |
| 553 break; | 566 break; |
| 554 } | 567 } |
| 555 case ppapi::proxy::SerializedHandle::SOCKET: { | 568 case ppapi::proxy::SerializedHandle::SOCKET: { |
| 556 nacl_desc.reset(new NaClDescWrapper(NaClDescSyncSocketMake( | 569 nacl_desc.reset(new NaClDescWrapper(NaClDescSyncSocketMake( |
| 557 #if defined(OS_WIN) | 570 #if defined(OS_WIN) |
| 558 iter->descriptor() | 571 iter->descriptor() |
| 559 #else | 572 #else |
| 560 iter->descriptor().fd | 573 iter->descriptor().fd |
| 561 #endif | 574 #endif |
| 562 ))); | 575 ))); |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 827 header.flags = msg.flags(); | 840 header.flags = msg.flags(); |
| 828 header.num_fds = static_cast<uint16>(rewritten_msg->desc_count()); | 841 header.num_fds = static_cast<uint16>(rewritten_msg->desc_count()); |
| 829 | 842 |
| 830 rewritten_msg->SetData(header, msg.payload(), msg.payload_size()); | 843 rewritten_msg->SetData(header, msg.payload(), msg.payload_size()); |
| 831 locked_data_.to_be_received_.push(rewritten_msg); | 844 locked_data_.to_be_received_.push(rewritten_msg); |
| 832 } | 845 } |
| 833 | 846 |
| 834 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags) { | 847 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags) { |
| 835 return TranslatePepperFileReadWriteOpenFlags(pp_open_flags); | 848 return TranslatePepperFileReadWriteOpenFlags(pp_open_flags); |
| 836 } | 849 } |
| OLD | NEW |