Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: components/nacl/browser/nacl_process_host.cc

Issue 469423002: NaCl: Send fatal log messages via shared memory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 // The process failed to launch for some reason. 329 // The process failed to launch for some reason.
330 // Don't keep the renderer hanging. 330 // Don't keep the renderer hanging.
331 reply_msg_->set_reply_error(); 331 reply_msg_->set_reply_error();
332 nacl_host_message_filter_->Send(reply_msg_); 332 nacl_host_message_filter_->Send(reply_msg_);
333 } 333 }
334 #if defined(OS_WIN) 334 #if defined(OS_WIN)
335 if (process_launched_by_broker_) { 335 if (process_launched_by_broker_) {
336 NaClBrokerService::GetInstance()->OnLoaderDied(); 336 NaClBrokerService::GetInstance()->OnLoaderDied();
337 } 337 }
338 #endif 338 #endif
339
340 if (base::SharedMemory::IsHandleValid(crash_info_shmem_plugin_handle_))
341 base::SharedMemory::CloseHandle(crash_info_shmem_plugin_handle_);
Mark Seaborn 2014/08/17 20:13:45 Is this a handle in another process's handle names
teravest 2014/08/18 16:16:26 Good point. I've changed this to only share the sh
342 if (base::SharedMemory::IsHandleValid(crash_info_shmem_renderer_handle_))
343 base::SharedMemory::CloseHandle(crash_info_shmem_renderer_handle_);
339 } 344 }
340 345
341 void NaClProcessHost::OnProcessCrashed(int exit_status) { 346 void NaClProcessHost::OnProcessCrashed(int exit_status) {
342 if (enable_crash_throttling_ && 347 if (enable_crash_throttling_ &&
343 !CommandLine::ForCurrentProcess()->HasSwitch( 348 !CommandLine::ForCurrentProcess()->HasSwitch(
344 switches::kDisablePnaclCrashThrottling)) { 349 switches::kDisablePnaclCrashThrottling)) {
345 NaClBrowser::GetInstance()->OnProcessCrashed(); 350 NaClBrowser::GetInstance()->OnProcessCrashed();
346 } 351 }
347 } 352 }
348 353
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 SendErrorToRenderer("NaClSocketPair() failed"); 472 SendErrorToRenderer("NaClSocketPair() failed");
468 delete this; 473 delete this;
469 return; 474 return;
470 } 475 }
471 internal_->socket_for_renderer = pair[0]; 476 internal_->socket_for_renderer = pair[0];
472 internal_->socket_for_sel_ldr = pair[1]; 477 internal_->socket_for_sel_ldr = pair[1];
473 SetCloseOnExec(pair[0]); 478 SetCloseOnExec(pair[0]);
474 SetCloseOnExec(pair[1]); 479 SetCloseOnExec(pair[1]);
475 } 480 }
476 481
482 // Create a shared memory region that the renderer and plugin share for
483 // reporting crash information.
484 {
485 base::SharedMemory crash_info_shmem;
486 if (crash_info_shmem.CreateAnonymous(kNaClCrashInfoShmemSize)) {
487 crash_info_shmem.ShareToProcess(process_->GetData().handle,
Mark Seaborn 2014/08/17 20:13:45 Should this check for an error?
teravest 2014/08/18 16:16:26 I've added error checking at the ShareToProcess()
488 &crash_info_shmem_plugin_handle_);
489 crash_info_shmem.ShareToProcess(nacl_host_message_filter_->PeerHandle(),
490 &crash_info_shmem_renderer_handle_);
491 }
492 }
493
477 // Launch the process 494 // Launch the process
478 if (!LaunchSelLdr()) { 495 if (!LaunchSelLdr()) {
479 delete this; 496 delete this;
480 } 497 }
481 } 498 }
482 499
483 void NaClProcessHost::OnChannelConnected(int32 peer_pid) { 500 void NaClProcessHost::OnChannelConnected(int32 peer_pid) {
484 if (!CommandLine::ForCurrentProcess()->GetSwitchValuePath( 501 if (!CommandLine::ForCurrentProcess()->GetSwitchValuePath(
485 switches::kNaClGdb).empty()) { 502 switches::kNaClGdb).empty()) {
486 LaunchNaClGdb(); 503 LaunchNaClGdb();
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 imc_handle_for_renderer = imc_handle; 752 imc_handle_for_renderer = imc_handle;
736 #endif 753 #endif
737 754
738 const ChildProcessData& data = process_->GetData(); 755 const ChildProcessData& data = process_->GetData();
739 SendMessageToRenderer( 756 SendMessageToRenderer(
740 NaClLaunchResult(imc_handle_for_renderer, 757 NaClLaunchResult(imc_handle_for_renderer,
741 ppapi_channel_handle, 758 ppapi_channel_handle,
742 trusted_channel_handle, 759 trusted_channel_handle,
743 manifest_service_channel_handle, 760 manifest_service_channel_handle,
744 base::GetProcId(data.handle), 761 base::GetProcId(data.handle),
745 data.id), 762 data.id,
763 crash_info_shmem_renderer_handle_),
746 std::string() /* error_message */); 764 std::string() /* error_message */);
747 internal_->socket_for_renderer = NACL_INVALID_HANDLE; 765 internal_->socket_for_renderer = NACL_INVALID_HANDLE;
766 crash_info_shmem_renderer_handle_ = base::SharedMemory::NULLHandle();
748 return true; 767 return true;
749 } 768 }
750 769
751 void NaClProcessHost::SendErrorToRenderer(const std::string& error_message) { 770 void NaClProcessHost::SendErrorToRenderer(const std::string& error_message) {
752 LOG(ERROR) << "NaCl process launch failed: " << error_message; 771 LOG(ERROR) << "NaCl process launch failed: " << error_message;
753 SendMessageToRenderer(NaClLaunchResult(), error_message); 772 SendMessageToRenderer(NaClLaunchResult(), error_message);
754 } 773 }
755 774
756 void NaClProcessHost::SendMessageToRenderer( 775 void NaClProcessHost::SendMessageToRenderer(
757 const NaClLaunchResult& result, 776 const NaClLaunchResult& result,
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
893 #endif 912 #endif
894 } 913 }
895 914
896 if (!uses_nonsfi_mode_) { 915 if (!uses_nonsfi_mode_) {
897 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE; 916 internal_->socket_for_sel_ldr = NACL_INVALID_HANDLE;
898 } 917 }
899 918
900 params.nexe_file = IPC::TakeFileHandleForProcess(nexe_file_.Pass(), 919 params.nexe_file = IPC::TakeFileHandleForProcess(nexe_file_.Pass(),
901 process_->GetData().handle); 920 process_->GetData().handle);
902 921
922 params.crash_info_shmem_handle = crash_info_shmem_plugin_handle_;
923 crash_info_shmem_plugin_handle_ = base::SharedMemory::NULLHandle();
924
903 process_->Send(new NaClProcessMsg_Start(params)); 925 process_->Send(new NaClProcessMsg_Start(params));
904 return true; 926 return true;
905 } 927 }
906 928
907 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is 929 // This method is called when NaClProcessHostMsg_PpapiChannelCreated is
908 // received. 930 // received.
909 void NaClProcessHost::OnPpapiChannelsCreated( 931 void NaClProcessHost::OnPpapiChannelsCreated(
910 const IPC::ChannelHandle& browser_channel_handle, 932 const IPC::ChannelHandle& browser_channel_handle,
911 const IPC::ChannelHandle& ppapi_renderer_channel_handle, 933 const IPC::ChannelHandle& ppapi_renderer_channel_handle,
912 const IPC::ChannelHandle& trusted_renderer_channel_handle, 934 const IPC::ChannelHandle& trusted_renderer_channel_handle,
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 process_handle.Take(), info, 1169 process_handle.Take(), info,
1148 base::MessageLoopProxy::current(), 1170 base::MessageLoopProxy::current(),
1149 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker, 1171 base::Bind(&NaClProcessHost::OnDebugExceptionHandlerLaunchedByBroker,
1150 weak_factory_.GetWeakPtr())); 1172 weak_factory_.GetWeakPtr()));
1151 return true; 1173 return true;
1152 } 1174 }
1153 } 1175 }
1154 #endif 1176 #endif
1155 1177
1156 } // namespace nacl 1178 } // namespace nacl
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698