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 #include <tuple> | 9 #include <tuple> |
10 #include <utility> | 10 #include <utility> |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 scoped_ptr<NaClDescWrapper> nacl_desc; | 563 scoped_ptr<NaClDescWrapper> nacl_desc; |
564 switch (iter->type()) { | 564 switch (iter->type()) { |
565 case ppapi::proxy::SerializedHandle::SHARED_MEMORY: { | 565 case ppapi::proxy::SerializedHandle::SHARED_MEMORY: { |
566 nacl_desc = | 566 nacl_desc = |
567 MakeShmNaClDesc(iter->shmem(), static_cast<size_t>(iter->size())); | 567 MakeShmNaClDesc(iter->shmem(), static_cast<size_t>(iter->size())); |
568 break; | 568 break; |
569 } | 569 } |
570 case ppapi::proxy::SerializedHandle::SOCKET: { | 570 case ppapi::proxy::SerializedHandle::SOCKET: { |
571 nacl_desc.reset(new NaClDescWrapper(NaClDescSyncSocketMake( | 571 nacl_desc.reset(new NaClDescWrapper(NaClDescSyncSocketMake( |
572 #if defined(OS_WIN) | 572 #if defined(OS_WIN) |
573 iter->descriptor() | 573 iter->descriptor().GetHandle() |
574 #else | 574 #else |
575 iter->descriptor().fd | 575 iter->descriptor().fd |
576 #endif | 576 #endif |
577 ))); | 577 ))); |
578 break; | 578 break; |
579 } | 579 } |
580 case ppapi::proxy::SerializedHandle::FILE: { | 580 case ppapi::proxy::SerializedHandle::FILE: { |
581 // Create the NaClDesc for the file descriptor. If quota checking is | 581 // Create the NaClDesc for the file descriptor. If quota checking is |
582 // required, wrap it in a NaClDescQuota. | 582 // required, wrap it in a NaClDescQuota. |
583 NaClDesc* desc = NaClDescIoMakeFromHandle( | 583 NaClDesc* desc = NaClDescIoMakeFromHandle( |
584 #if defined(OS_WIN) | 584 #if defined(OS_WIN) |
585 iter->descriptor(), | 585 iter->descriptor().GetHandle(), |
586 #else | 586 #else |
587 iter->descriptor().fd, | 587 iter->descriptor().fd, |
588 #endif | 588 #endif |
589 TranslatePepperFileReadWriteOpenFlags(iter->open_flags())); | 589 TranslatePepperFileReadWriteOpenFlags(iter->open_flags())); |
590 if (desc && iter->file_io()) { | 590 if (desc && iter->file_io()) { |
591 desc = MakeNaClDescQuota( | 591 desc = MakeNaClDescQuota( |
592 locked_data_.nacl_msg_scanner_.GetFile(iter->file_io()), | 592 locked_data_.nacl_msg_scanner_.GetFile(iter->file_io()), |
593 desc); | 593 desc); |
594 } | 594 } |
595 if (desc) | 595 if (desc) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
652 // original FD to the client without making a validated NaClDesc. | 652 // original FD to the client without making a validated NaClDesc. |
653 // However, we must rewrite the message to clear the file tokens. | 653 // However, we must rewrite the message to clear the file tokens. |
654 base::PickleIterator iter = IPC::SyncMessage::GetDataIterator(&orig_msg); | 654 base::PickleIterator iter = IPC::SyncMessage::GetDataIterator(&orig_msg); |
655 ppapi::proxy::SerializedHandle sh; | 655 ppapi::proxy::SerializedHandle sh; |
656 | 656 |
657 // We know that this can be read safely; see the original read in | 657 // We know that this can be read safely; see the original read in |
658 // OnMessageReceived(). | 658 // OnMessageReceived(). |
659 CHECK(IPC::ReadParam(&orig_msg, &iter, &sh)); | 659 CHECK(IPC::ReadParam(&orig_msg, &iter, &sh)); |
660 scoped_ptr<IPC::Message> new_msg = CreateOpenResourceReply(orig_msg, sh); | 660 scoped_ptr<IPC::Message> new_msg = CreateOpenResourceReply(orig_msg, sh); |
661 | 661 |
662 scoped_ptr<NaClDescWrapper> desc_wrapper(new NaClDescWrapper( | 662 scoped_ptr<NaClDescWrapper> desc_wrapper( |
663 NaClDescIoMakeFromHandle( | 663 new NaClDescWrapper(NaClDescIoMakeFromHandle( |
664 #if defined(OS_WIN) | 664 #if defined(OS_WIN) |
665 sh.descriptor(), | 665 sh.descriptor().GetHandle(), |
666 #else | 666 #else |
667 sh.descriptor().fd, | 667 sh.descriptor().fd, |
668 #endif | 668 #endif |
669 NACL_ABI_O_RDONLY))); | 669 NACL_ABI_O_RDONLY))); |
670 | 670 |
671 scoped_refptr<RewrittenMessage> rewritten_msg(new RewrittenMessage); | 671 scoped_refptr<RewrittenMessage> rewritten_msg(new RewrittenMessage); |
672 rewritten_msg->AddDescriptor(desc_wrapper.release()); | 672 rewritten_msg->AddDescriptor(desc_wrapper.release()); |
673 { | 673 { |
674 base::AutoLock lock(lock_); | 674 base::AutoLock lock(lock_); |
675 SaveMessage(*new_msg, rewritten_msg.get()); | 675 SaveMessage(*new_msg, rewritten_msg.get()); |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 header.flags = msg.flags(); | 841 header.flags = msg.flags(); |
842 header.num_fds = static_cast<uint16_t>(rewritten_msg->desc_count()); | 842 header.num_fds = static_cast<uint16_t>(rewritten_msg->desc_count()); |
843 | 843 |
844 rewritten_msg->SetData(header, msg.payload(), msg.payload_size()); | 844 rewritten_msg->SetData(header, msg.payload(), msg.payload_size()); |
845 locked_data_.to_be_received_.push(rewritten_msg); | 845 locked_data_.to_be_received_.push(rewritten_msg); |
846 } | 846 } |
847 | 847 |
848 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags) { | 848 int TranslatePepperFileReadWriteOpenFlagsForTesting(int32_t pp_open_flags) { |
849 return TranslatePepperFileReadWriteOpenFlags(pp_open_flags); | 849 return TranslatePepperFileReadWriteOpenFlags(pp_open_flags); |
850 } | 850 } |
OLD | NEW |