| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browser/nacl_process_host.h" | 5 #include "components/nacl/browser/nacl_process_host.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 IPC_MESSAGE_HANDLER(NaClProcessMsg_QueryKnownToValidate, | 647 IPC_MESSAGE_HANDLER(NaClProcessMsg_QueryKnownToValidate, |
| 648 OnQueryKnownToValidate) | 648 OnQueryKnownToValidate) |
| 649 IPC_MESSAGE_HANDLER(NaClProcessMsg_SetKnownToValidate, | 649 IPC_MESSAGE_HANDLER(NaClProcessMsg_SetKnownToValidate, |
| 650 OnSetKnownToValidate) | 650 OnSetKnownToValidate) |
| 651 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClProcessMsg_ResolveFileToken, | 651 IPC_MESSAGE_HANDLER_DELAY_REPLY(NaClProcessMsg_ResolveFileToken, |
| 652 OnResolveFileToken) | 652 OnResolveFileToken) |
| 653 #if defined(OS_WIN) | 653 #if defined(OS_WIN) |
| 654 IPC_MESSAGE_HANDLER_DELAY_REPLY( | 654 IPC_MESSAGE_HANDLER_DELAY_REPLY( |
| 655 NaClProcessMsg_AttachDebugExceptionHandler, | 655 NaClProcessMsg_AttachDebugExceptionHandler, |
| 656 OnAttachDebugExceptionHandler) | 656 OnAttachDebugExceptionHandler) |
| 657 IPC_MESSAGE_HANDLER(NaClProcessHostMsg_DebugStubPortSelected, |
| 658 OnDebugStubPortSelected) |
| 657 #endif | 659 #endif |
| 658 IPC_MESSAGE_HANDLER(NaClProcessHostMsg_PpapiChannelsCreated, | 660 IPC_MESSAGE_HANDLER(NaClProcessHostMsg_PpapiChannelsCreated, |
| 659 OnPpapiChannelsCreated) | 661 OnPpapiChannelsCreated) |
| 660 IPC_MESSAGE_UNHANDLED(handled = false) | 662 IPC_MESSAGE_UNHANDLED(handled = false) |
| 661 IPC_END_MESSAGE_MAP() | 663 IPC_END_MESSAGE_MAP() |
| 662 } | 664 } |
| 663 return handled; | 665 return handled; |
| 664 } | 666 } |
| 665 | 667 |
| 666 void NaClProcessHost::OnProcessLaunched() { | 668 void NaClProcessHost::OnProcessLaunched() { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 DCHECK(reply_msg_); | 750 DCHECK(reply_msg_); |
| 749 if (nacl_host_message_filter_ != NULL && reply_msg_ != NULL) { | 751 if (nacl_host_message_filter_ != NULL && reply_msg_ != NULL) { |
| 750 NaClHostMsg_LaunchNaCl::WriteReplyParams( | 752 NaClHostMsg_LaunchNaCl::WriteReplyParams( |
| 751 reply_msg_, result, error_message); | 753 reply_msg_, result, error_message); |
| 752 nacl_host_message_filter_->Send(reply_msg_); | 754 nacl_host_message_filter_->Send(reply_msg_); |
| 753 nacl_host_message_filter_ = NULL; | 755 nacl_host_message_filter_ = NULL; |
| 754 reply_msg_ = NULL; | 756 reply_msg_ = NULL; |
| 755 } | 757 } |
| 756 } | 758 } |
| 757 | 759 |
| 760 void NaClProcessHost::SetDebugStubPort(uint16_t port) { |
| 761 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); |
| 762 if (nacl_browser->HasGdbDebugStubPortListener()) { |
| 763 nacl_browser->FireGdbDebugStubPortOpened(port); |
| 764 } |
| 765 // Set debug stub port on the process object. |
| 766 process_->SetNaClDebugStubPort(port); |
| 767 } |
| 768 |
| 769 #if defined(OS_POSIX) |
| 758 // TCP port we chose for NaCl debug stub. It can be any other number. | 770 // TCP port we chose for NaCl debug stub. It can be any other number. |
| 759 static const int kInitialDebugStubPort = 4014; | 771 static const int kInitialDebugStubPort = 4014; |
| 760 | 772 |
| 761 #if defined(OS_POSIX) | |
| 762 net::SocketDescriptor NaClProcessHost::GetDebugStubSocketHandle() { | 773 net::SocketDescriptor NaClProcessHost::GetDebugStubSocketHandle() { |
| 763 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); | |
| 764 net::SocketDescriptor s = net::kInvalidSocket; | 774 net::SocketDescriptor s = net::kInvalidSocket; |
| 765 // We always try to allocate the default port first. If this fails, we then | 775 // We always try to allocate the default port first. If this fails, we then |
| 766 // allocate any available port. | 776 // allocate any available port. |
| 767 // On success, if the test system has register a handler | 777 // On success, if the test system has register a handler |
| 768 // (GdbDebugStubPortListener), we fire a notification. | 778 // (GdbDebugStubPortListener), we fire a notification. |
| 769 int port = kInitialDebugStubPort; | 779 int port = kInitialDebugStubPort; |
| 770 s = net::TCPListenSocket::CreateAndBind("127.0.0.1", port); | 780 s = net::TCPListenSocket::CreateAndBind("127.0.0.1", port); |
| 771 if (s == net::kInvalidSocket) { | 781 if (s == net::kInvalidSocket) { |
| 772 s = net::TCPListenSocket::CreateAndBindAnyPort("127.0.0.1", &port); | 782 s = net::TCPListenSocket::CreateAndBindAnyPort("127.0.0.1", &port); |
| 773 } | 783 } |
| 774 if (s != net::kInvalidSocket) { | 784 if (s != net::kInvalidSocket) { |
| 775 if (nacl_browser->HasGdbDebugStubPortListener()) { | 785 SetDebugStubPort(port); |
| 776 nacl_browser->FireGdbDebugStubPortOpened(port); | |
| 777 } | |
| 778 } | 786 } |
| 779 // Set debug stub port on the process object. | |
| 780 process_->SetNaClDebugStubPort(port); | |
| 781 if (s == net::kInvalidSocket) { | 787 if (s == net::kInvalidSocket) { |
| 782 LOG(ERROR) << "failed to open socket for debug stub"; | 788 LOG(ERROR) << "failed to open socket for debug stub"; |
| 783 return net::kInvalidSocket; | 789 return net::kInvalidSocket; |
| 784 } else { | 790 } else { |
| 785 LOG(WARNING) << "debug stub on port " << port; | 791 LOG(WARNING) << "debug stub on port " << port; |
| 786 } | 792 } |
| 787 if (listen(s, 1)) { | 793 if (listen(s, 1)) { |
| 788 LOG(ERROR) << "listen() failed on debug stub socket"; | 794 LOG(ERROR) << "listen() failed on debug stub socket"; |
| 789 if (IGNORE_EINTR(close(s)) < 0) | 795 if (IGNORE_EINTR(close(s)) < 0) |
| 790 PLOG(ERROR) << "failed to close debug stub socket"; | 796 PLOG(ERROR) << "failed to close debug stub socket"; |
| 791 return net::kInvalidSocket; | 797 return net::kInvalidSocket; |
| 792 } | 798 } |
| 793 return s; | 799 return s; |
| 794 } | 800 } |
| 795 #endif | 801 #endif |
| 796 | 802 |
| 803 #if defined(OS_WIN) |
| 804 void NaClProcessHost::OnDebugStubPortSelected(uint16_t debug_stub_port) { |
| 805 CHECK(!uses_nonsfi_mode_); |
| 806 SetDebugStubPort(debug_stub_port); |
| 807 } |
| 808 #endif |
| 809 |
| 797 bool NaClProcessHost::StartNaClExecution() { | 810 bool NaClProcessHost::StartNaClExecution() { |
| 798 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); | 811 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); |
| 799 | 812 |
| 800 NaClStartParams params; | 813 NaClStartParams params; |
| 801 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); | 814 params.validation_cache_enabled = nacl_browser->ValidationCacheIsEnabled(); |
| 802 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); | 815 params.validation_cache_key = nacl_browser->GetValidationCacheKey(); |
| 803 params.version = NaClBrowser::GetDelegate()->GetVersionString(); | 816 params.version = NaClBrowser::GetDelegate()->GetVersionString(); |
| 804 params.enable_exception_handling = enable_exception_handling_; | 817 params.enable_exception_handling = enable_exception_handling_; |
| 805 params.enable_debug_stub = enable_debug_stub_ && | 818 params.enable_debug_stub = enable_debug_stub_ && |
| 806 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); | 819 NaClBrowser::GetDelegate()->URLMatchesDebugPatterns(manifest_url_); |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1108 process_handle.Take(), info, | 1121 process_handle.Take(), info, |
| 1109 base::MessageLoopProxy::current(), | 1122 base::MessageLoopProxy::current(), |
| 1110 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 1123 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
| 1111 weak_factory_.GetWeakPtr())); | 1124 weak_factory_.GetWeakPtr())); |
| 1112 return true; | 1125 return true; |
| 1113 } | 1126 } |
| 1114 } | 1127 } |
| 1115 #endif | 1128 #endif |
| 1116 | 1129 |
| 1117 } // namespace nacl | 1130 } // namespace nacl |
| OLD | NEW |