| 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 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 662 if (!nacl_browser->IsReady()) { | 662 if (!nacl_browser->IsReady()) { |
| 663 SendErrorToRenderer("could not acquire shared resources needed by NaCl"); | 663 SendErrorToRenderer("could not acquire shared resources needed by NaCl"); |
| 664 delete this; | 664 delete this; |
| 665 } else if (!StartNaClExecution()) { | 665 } else if (!StartNaClExecution()) { |
| 666 delete this; | 666 delete this; |
| 667 } | 667 } |
| 668 } | 668 } |
| 669 | 669 |
| 670 bool NaClProcessHost::ReplyToRenderer( | 670 bool NaClProcessHost::ReplyToRenderer( |
| 671 const IPC::ChannelHandle& ppapi_channel_handle, | 671 const IPC::ChannelHandle& ppapi_channel_handle, |
| 672 const IPC::ChannelHandle& trusted_channel_handle) { | 672 const IPC::ChannelHandle& trusted_channel_handle, |
| 673 const IPC::ChannelHandle& embedder_service_channel_handle) { |
| 673 #if defined(OS_WIN) | 674 #if defined(OS_WIN) |
| 674 // If we are on 64-bit Windows, the NaCl process's sandbox is | 675 // If we are on 64-bit Windows, the NaCl process's sandbox is |
| 675 // managed by a different process from the renderer's sandbox. We | 676 // managed by a different process from the renderer's sandbox. We |
| 676 // need to inform the renderer's sandbox about the NaCl process so | 677 // need to inform the renderer's sandbox about the NaCl process so |
| 677 // that the renderer can send handles to the NaCl process using | 678 // that the renderer can send handles to the NaCl process using |
| 678 // BrokerDuplicateHandle(). | 679 // BrokerDuplicateHandle(). |
| 679 if (RunningOnWOW64()) { | 680 if (RunningOnWOW64()) { |
| 680 if (!content::BrokerAddTargetPeer(process_->GetData().handle)) { | 681 if (!content::BrokerAddTargetPeer(process_->GetData().handle)) { |
| 681 SendErrorToRenderer("BrokerAddTargetPeer() failed"); | 682 SendErrorToRenderer("BrokerAddTargetPeer() failed"); |
| 682 return false; | 683 return false; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 708 imc_handle.fd = internal_->socket_for_renderer; | 709 imc_handle.fd = internal_->socket_for_renderer; |
| 709 imc_handle.auto_close = true; | 710 imc_handle.auto_close = true; |
| 710 imc_handle_for_renderer = imc_handle; | 711 imc_handle_for_renderer = imc_handle; |
| 711 #endif | 712 #endif |
| 712 | 713 |
| 713 const ChildProcessData& data = process_->GetData(); | 714 const ChildProcessData& data = process_->GetData(); |
| 714 SendMessageToRenderer( | 715 SendMessageToRenderer( |
| 715 NaClLaunchResult(imc_handle_for_renderer, | 716 NaClLaunchResult(imc_handle_for_renderer, |
| 716 ppapi_channel_handle, | 717 ppapi_channel_handle, |
| 717 trusted_channel_handle, | 718 trusted_channel_handle, |
| 719 embedder_service_channel_handle, |
| 718 base::GetProcId(data.handle), | 720 base::GetProcId(data.handle), |
| 719 data.id), | 721 data.id), |
| 720 std::string() /* error_message */); | 722 std::string() /* error_message */); |
| 721 internal_->socket_for_renderer = NACL_INVALID_HANDLE; | 723 internal_->socket_for_renderer = NACL_INVALID_HANDLE; |
| 722 return true; | 724 return true; |
| 723 } | 725 } |
| 724 | 726 |
| 725 void NaClProcessHost::SendErrorToRenderer(const std::string& error_message) { | 727 void NaClProcessHost::SendErrorToRenderer(const std::string& error_message) { |
| 726 LOG(ERROR) << "NaCl process launch failed: " << error_message; | 728 LOG(ERROR) << "NaCl process launch failed: " << error_message; |
| 727 SendMessageToRenderer(NaClLaunchResult(), error_message); | 729 SendMessageToRenderer(NaClLaunchResult(), error_message); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 | 849 |
| 848 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; | 850 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; |
| 849 return true; | 851 return true; |
| 850 } | 852 } |
| 851 | 853 |
| 852 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is | 854 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is |
| 853 // received. | 855 // received. |
| 854 void NaClProcessHost::OnPpapiChannelsCreated( | 856 void NaClProcessHost::OnPpapiChannelsCreated( |
| 855 const IPC::ChannelHandle& browser_channel_handle, | 857 const IPC::ChannelHandle& browser_channel_handle, |
| 856 const IPC::ChannelHandle& ppapi_renderer_channel_handle, | 858 const IPC::ChannelHandle& ppapi_renderer_channel_handle, |
| 857 const IPC::ChannelHandle& trusted_renderer_channel_handle) { | 859 const IPC::ChannelHandle& trusted_renderer_channel_handle, |
| 860 const IPC::ChannelHandle& embedder_service_channel_handle) { |
| 858 if (!enable_ppapi_proxy()) { | 861 if (!enable_ppapi_proxy()) { |
| 859 ReplyToRenderer(IPC::ChannelHandle(), trusted_renderer_channel_handle); | 862 ReplyToRenderer(IPC::ChannelHandle(), |
| 863 trusted_renderer_channel_handle, |
| 864 embedder_service_channel_handle); |
| 860 return; | 865 return; |
| 861 } | 866 } |
| 862 | 867 |
| 863 if (!ipc_proxy_channel_.get()) { | 868 if (!ipc_proxy_channel_.get()) { |
| 864 DCHECK_EQ(PROCESS_TYPE_NACL_LOADER, process_->GetData().process_type); | 869 DCHECK_EQ(PROCESS_TYPE_NACL_LOADER, process_->GetData().process_type); |
| 865 | 870 |
| 866 ipc_proxy_channel_.reset( | 871 ipc_proxy_channel_.reset( |
| 867 new IPC::ChannelProxy(browser_channel_handle, | 872 new IPC::ChannelProxy(browser_channel_handle, |
| 868 IPC::Channel::MODE_CLIENT, | 873 IPC::Channel::MODE_CLIENT, |
| 869 NULL, | 874 NULL, |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 ppapi_host_->GetPpapiHost()->AddHostFactoryFilter( | 908 ppapi_host_->GetPpapiHost()->AddHostFactoryFilter( |
| 904 scoped_ptr<ppapi::host::HostFactory>( | 909 scoped_ptr<ppapi::host::HostFactory>( |
| 905 NaClBrowser::GetDelegate()->CreatePpapiHostFactory( | 910 NaClBrowser::GetDelegate()->CreatePpapiHostFactory( |
| 906 ppapi_host_.get()))); | 911 ppapi_host_.get()))); |
| 907 | 912 |
| 908 // Send a message to initialize the IPC dispatchers in the NaCl plugin. | 913 // Send a message to initialize the IPC dispatchers in the NaCl plugin. |
| 909 ipc_proxy_channel_->Send(new PpapiMsg_InitializeNaClDispatcher(args)); | 914 ipc_proxy_channel_->Send(new PpapiMsg_InitializeNaClDispatcher(args)); |
| 910 | 915 |
| 911 // Let the renderer know that the IPC channels are established. | 916 // Let the renderer know that the IPC channels are established. |
| 912 ReplyToRenderer(ppapi_renderer_channel_handle, | 917 ReplyToRenderer(ppapi_renderer_channel_handle, |
| 913 trusted_renderer_channel_handle); | 918 trusted_renderer_channel_handle, |
| 919 embedder_service_channel_handle); |
| 914 } else { | 920 } else { |
| 915 // Attempt to open more than 1 browser channel is not supported. | 921 // Attempt to open more than 1 browser channel is not supported. |
| 916 // Shut down the NaCl process. | 922 // Shut down the NaCl process. |
| 917 process_->GetHost()->ForceShutdown(); | 923 process_->GetHost()->ForceShutdown(); |
| 918 } | 924 } |
| 919 } | 925 } |
| 920 | 926 |
| 921 bool NaClProcessHost::StartWithLaunchedProcess() { | 927 bool NaClProcessHost::StartWithLaunchedProcess() { |
| 922 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); | 928 NaClBrowser* nacl_browser = NaClBrowser::GetInstance(); |
| 923 | 929 |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1084 process_handle.Take(), info, | 1090 process_handle.Take(), info, |
| 1085 base::MessageLoopProxy::current(), | 1091 base::MessageLoopProxy::current(), |
| 1086 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, | 1092 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, |
| 1087 weak_factory_.GetWeakPtr())); | 1093 weak_factory_.GetWeakPtr())); |
| 1088 return true; | 1094 return true; |
| 1089 } | 1095 } |
| 1090 } | 1096 } |
| 1091 #endif | 1097 #endif |
| 1092 | 1098 |
| 1093 } // namespace nacl | 1099 } // namespace nacl |
| OLD | NEW |