OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 * Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #define NACL_LOG_MODULE_NAME "Plugin_ServiceRuntime" | 7 #define NACL_LOG_MODULE_NAME "Plugin_ServiceRuntime" |
8 | 8 |
9 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h" | 9 #include "ppapi/native_client/src/trusted/plugin/service_runtime.h" |
10 | 10 |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 if (main_service_runtime_) { | 679 if (main_service_runtime_) { |
680 ErrorInfo error_info; | 680 ErrorInfo error_info; |
681 error_info.SetReport( | 681 error_info.SetReport( |
682 PP_NACL_ERROR_SEL_LDR_CREATE_LAUNCHER, | 682 PP_NACL_ERROR_SEL_LDR_CREATE_LAUNCHER, |
683 "ServiceRuntime: failed to create sel_ldr launcher"); | 683 "ServiceRuntime: failed to create sel_ldr launcher"); |
684 plugin_->ReportLoadError(error_info); | 684 plugin_->ReportLoadError(error_info); |
685 } | 685 } |
686 pp::Module::Get()->core()->CallOnMainThread(0, callback, PP_ERROR_FAILED); | 686 pp::Module::Get()->core()->CallOnMainThread(0, callback, PP_ERROR_FAILED); |
687 return; | 687 return; |
688 } | 688 } |
689 pp::CompletionCallback internal_callback = | |
690 callback_factory_.NewCallback(&ServiceRuntime::StartSelLdrContinuation, | |
691 callback); | |
692 | 689 |
693 ManifestService* manifest_service = | 690 ManifestService* manifest_service = |
694 new ManifestService(anchor_->Ref(), rev_interface_); | 691 new ManifestService(anchor_->Ref(), rev_interface_); |
695 tmp_subprocess->Start(plugin_->pp_instance(), | 692 tmp_subprocess->Start(plugin_->pp_instance(), |
| 693 main_service_runtime_, |
696 params.url.c_str(), | 694 params.url.c_str(), |
697 params.uses_irt, | 695 params.uses_irt, |
698 params.uses_ppapi, | 696 params.uses_ppapi, |
699 params.uses_nonsfi_mode, | 697 params.uses_nonsfi_mode, |
700 params.enable_dev_interfaces, | 698 params.enable_dev_interfaces, |
701 params.enable_dyncode_syscalls, | 699 params.enable_dyncode_syscalls, |
702 params.enable_exception_handling, | 700 params.enable_exception_handling, |
703 params.enable_crash_throttling, | 701 params.enable_crash_throttling, |
704 &kManifestServiceVTable, | 702 &kManifestServiceVTable, |
705 manifest_service, | 703 manifest_service, |
706 &start_sel_ldr_error_message_, | 704 callback); |
707 internal_callback); | |
708 subprocess_.reset(tmp_subprocess.release()); | 705 subprocess_.reset(tmp_subprocess.release()); |
709 } | 706 } |
710 | 707 |
711 void ServiceRuntime::StartSelLdrContinuation(int32_t pp_error, | |
712 pp::CompletionCallback callback) { | |
713 if (pp_error != PP_OK) { | |
714 NaClLog(LOG_ERROR, "ServiceRuntime::StartSelLdrContinuation " | |
715 " (start failed)\n"); | |
716 if (main_service_runtime_) { | |
717 std::string error_message; | |
718 pp::Var var_error_message_cpp(pp::PASS_REF, start_sel_ldr_error_message_); | |
719 if (var_error_message_cpp.is_string()) { | |
720 error_message = var_error_message_cpp.AsString(); | |
721 } | |
722 ErrorInfo error_info; | |
723 error_info.SetReportWithConsoleOnlyError( | |
724 PP_NACL_ERROR_SEL_LDR_LAUNCH, | |
725 "ServiceRuntime: failed to start", | |
726 error_message); | |
727 plugin_->ReportLoadError(error_info); | |
728 } | |
729 } | |
730 pp::Module::Get()->core()->CallOnMainThread(0, callback, pp_error); | |
731 } | |
732 | |
733 bool ServiceRuntime::WaitForSelLdrStart() { | 708 bool ServiceRuntime::WaitForSelLdrStart() { |
734 // Time to wait on condvar (for browser to create a new sel_ldr process on | 709 // Time to wait on condvar (for browser to create a new sel_ldr process on |
735 // our behalf). Use 6 seconds to be *fairly* conservative. | 710 // our behalf). Use 6 seconds to be *fairly* conservative. |
736 // | 711 // |
737 // On surfaway, the CallOnMainThread above may never get scheduled | 712 // On surfaway, the CallOnMainThread above may never get scheduled |
738 // to unblock this condvar, or the IPC reply from the browser to renderer | 713 // to unblock this condvar, or the IPC reply from the browser to renderer |
739 // might get canceled/dropped. However, it is currently important to | 714 // might get canceled/dropped. However, it is currently important to |
740 // avoid waiting indefinitely because ~PnaclCoordinator will attempt to | 715 // avoid waiting indefinitely because ~PnaclCoordinator will attempt to |
741 // join() the PnaclTranslateThread, and the PnaclTranslateThread is waiting | 716 // join() the PnaclTranslateThread, and the PnaclTranslateThread is waiting |
742 // for the signal before exiting. | 717 // for the signal before exiting. |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
877 | 852 |
878 nacl::string ServiceRuntime::GetCrashLogOutput() { | 853 nacl::string ServiceRuntime::GetCrashLogOutput() { |
879 if (NULL != subprocess_.get()) { | 854 if (NULL != subprocess_.get()) { |
880 return subprocess_->GetCrashLogOutput(); | 855 return subprocess_->GetCrashLogOutput(); |
881 } else { | 856 } else { |
882 return std::string(); | 857 return std::string(); |
883 } | 858 } |
884 } | 859 } |
885 | 860 |
886 } // namespace plugin | 861 } // namespace plugin |
OLD | NEW |