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 |