| 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 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 NaClLog(4, "PluginReverseInterface::AddTempQuotaManagedFile: " | 444 NaClLog(4, "PluginReverseInterface::AddTempQuotaManagedFile: " |
| 445 "(file_id='%s')\n", file_id.c_str()); | 445 "(file_id='%s')\n", file_id.c_str()); |
| 446 uint64_t file_key = STRTOULL(file_id.c_str(), NULL, 10); | 446 uint64_t file_key = STRTOULL(file_id.c_str(), NULL, 10); |
| 447 nacl::MutexLocker take(&mu_); | 447 nacl::MutexLocker take(&mu_); |
| 448 quota_files_.insert(file_key); | 448 quota_files_.insert(file_key); |
| 449 } | 449 } |
| 450 | 450 |
| 451 ServiceRuntime::ServiceRuntime(Plugin* plugin, | 451 ServiceRuntime::ServiceRuntime(Plugin* plugin, |
| 452 const Manifest* manifest, | 452 const Manifest* manifest, |
| 453 bool main_service_runtime, | 453 bool main_service_runtime, |
| 454 bool uses_nonsfi_mode, |
| 454 pp::CompletionCallback init_done_cb, | 455 pp::CompletionCallback init_done_cb, |
| 455 pp::CompletionCallback crash_cb) | 456 pp::CompletionCallback crash_cb) |
| 456 : plugin_(plugin), | 457 : plugin_(plugin), |
| 457 main_service_runtime_(main_service_runtime), | 458 main_service_runtime_(main_service_runtime), |
| 459 uses_nonsfi_mode_(uses_nonsfi_mode), |
| 458 reverse_service_(NULL), | 460 reverse_service_(NULL), |
| 459 anchor_(new nacl::WeakRefAnchor()), | 461 anchor_(new nacl::WeakRefAnchor()), |
| 460 rev_interface_(new PluginReverseInterface(anchor_, plugin, | 462 rev_interface_(new PluginReverseInterface(anchor_, plugin, |
| 461 manifest, | 463 manifest, |
| 462 this, | 464 this, |
| 463 init_done_cb, crash_cb)), | 465 init_done_cb, crash_cb)), |
| 464 exit_status_(-1), | 466 exit_status_(-1), |
| 465 start_sel_ldr_done_(false), | 467 start_sel_ldr_done_(false), |
| 466 callback_factory_(this) { | 468 callback_factory_(this) { |
| 467 NaClSrpcChannelInitialize(&command_channel_); | 469 NaClSrpcChannelInitialize(&command_channel_); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 485 | 487 |
| 486 if (!subprocess_->LoadModule(&command_channel_, nacl_desc)) { | 488 if (!subprocess_->LoadModule(&command_channel_, nacl_desc)) { |
| 487 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_COMMUNICATION_CMD_CHANNEL, | 489 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_COMMUNICATION_CMD_CHANNEL, |
| 488 "ServiceRuntime: load module failed"); | 490 "ServiceRuntime: load module failed"); |
| 489 return false; | 491 return false; |
| 490 } | 492 } |
| 491 return true; | 493 return true; |
| 492 } | 494 } |
| 493 | 495 |
| 494 bool ServiceRuntime::InitReverseService(ErrorInfo* error_info) { | 496 bool ServiceRuntime::InitReverseService(ErrorInfo* error_info) { |
| 497 if (uses_nonsfi_mode_) { |
| 498 // In non-SFI mode, open_resource() is not yet supported, so we do not |
| 499 // need the reverse service. So, skip the initialization (with calling |
| 500 // the completion callback). |
| 501 // Note that there is on going work to replace SRPC by Chrome IPC (not only |
| 502 // for non-SFI mode, but also for SFI mode) (crbug.com/333950), |
| 503 // and non-SFI mode will use Chrome IPC for open_resource() after the |
| 504 // refactoring is done. |
| 505 rev_interface_->StartupInitializationComplete(); |
| 506 return true; |
| 507 } |
| 508 |
| 495 // Hook up the reverse service channel. We are the IMC client, but | 509 // Hook up the reverse service channel. We are the IMC client, but |
| 496 // provide SRPC service. | 510 // provide SRPC service. |
| 497 NaClDesc* out_conn_cap; | 511 NaClDesc* out_conn_cap; |
| 498 NaClSrpcResultCodes rpc_result = | 512 NaClSrpcResultCodes rpc_result = |
| 499 NaClSrpcInvokeBySignature(&command_channel_, | 513 NaClSrpcInvokeBySignature(&command_channel_, |
| 500 "reverse_setup::h", | 514 "reverse_setup::h", |
| 501 &out_conn_cap); | 515 &out_conn_cap); |
| 502 | 516 |
| 503 if (NACL_SRPC_RESULT_OK != rpc_result) { | 517 if (NACL_SRPC_RESULT_OK != rpc_result) { |
| 504 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_COMMUNICATION_REV_SETUP, | 518 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_COMMUNICATION_REV_SETUP, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 525 return false; | 539 return false; |
| 526 } | 540 } |
| 527 return true; | 541 return true; |
| 528 } | 542 } |
| 529 | 543 |
| 530 bool ServiceRuntime::StartModule(ErrorInfo* error_info) { | 544 bool ServiceRuntime::StartModule(ErrorInfo* error_info) { |
| 531 // start the module. otherwise we cannot connect for multimedia | 545 // start the module. otherwise we cannot connect for multimedia |
| 532 // subsystem since that is handled by user-level code (not secure!) | 546 // subsystem since that is handled by user-level code (not secure!) |
| 533 // in libsrpc. | 547 // in libsrpc. |
| 534 int load_status = -1; | 548 int load_status = -1; |
| 535 NaClSrpcResultCodes rpc_result = | 549 if (uses_nonsfi_mode_) { |
| 536 NaClSrpcInvokeBySignature(&command_channel_, | 550 // In non-SFI mode, we don't need to call start_module SRPC to launch |
| 537 "start_module::i", | 551 // the plugin. |
| 538 &load_status); | 552 load_status = LOAD_OK; |
| 553 } else { |
| 554 NaClSrpcResultCodes rpc_result = |
| 555 NaClSrpcInvokeBySignature(&command_channel_, |
| 556 "start_module::i", |
| 557 &load_status); |
| 539 | 558 |
| 540 if (NACL_SRPC_RESULT_OK != rpc_result) { | 559 if (NACL_SRPC_RESULT_OK != rpc_result) { |
| 541 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_START_MODULE, | 560 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_START_MODULE, |
| 542 "ServiceRuntime: could not start nacl module"); | 561 "ServiceRuntime: could not start nacl module"); |
| 543 return false; | 562 return false; |
| 563 } |
| 544 } | 564 } |
| 545 NaClLog(4, "ServiceRuntime::StartModule (load_status=%d)\n", | 565 |
| 546 load_status); | 566 NaClLog(4, "ServiceRuntime::StartModule (load_status=%d)\n", load_status); |
| 547 if (main_service_runtime_) { | 567 if (main_service_runtime_) { |
| 548 plugin_->ReportSelLdrLoadStatus(load_status); | 568 plugin_->ReportSelLdrLoadStatus(load_status); |
| 549 } | 569 } |
| 550 if (LOAD_OK != load_status) { | 570 if (LOAD_OK != load_status) { |
| 551 error_info->SetReport( | 571 error_info->SetReport( |
| 552 PP_NACL_ERROR_SEL_LDR_START_STATUS, | 572 PP_NACL_ERROR_SEL_LDR_START_STATUS, |
| 553 NaClErrorString(static_cast<NaClErrorCode>(load_status))); | 573 NaClErrorString(static_cast<NaClErrorCode>(load_status))); |
| 554 return false; | 574 return false; |
| 555 } | 575 } |
| 556 return true; | 576 return true; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 575 return; | 595 return; |
| 576 } | 596 } |
| 577 pp::CompletionCallback internal_callback = | 597 pp::CompletionCallback internal_callback = |
| 578 callback_factory_.NewCallback(&ServiceRuntime::StartSelLdrContinuation, | 598 callback_factory_.NewCallback(&ServiceRuntime::StartSelLdrContinuation, |
| 579 callback); | 599 callback); |
| 580 | 600 |
| 581 tmp_subprocess->Start(plugin_->pp_instance(), | 601 tmp_subprocess->Start(plugin_->pp_instance(), |
| 582 params.url.c_str(), | 602 params.url.c_str(), |
| 583 params.uses_irt, | 603 params.uses_irt, |
| 584 params.uses_ppapi, | 604 params.uses_ppapi, |
| 605 params.uses_nonsfi_mode, |
| 585 params.enable_dev_interfaces, | 606 params.enable_dev_interfaces, |
| 586 params.enable_dyncode_syscalls, | 607 params.enable_dyncode_syscalls, |
| 587 params.enable_exception_handling, | 608 params.enable_exception_handling, |
| 588 params.enable_crash_throttling, | 609 params.enable_crash_throttling, |
| 589 &start_sel_ldr_error_message_, | 610 &start_sel_ldr_error_message_, |
| 590 internal_callback); | 611 internal_callback); |
| 591 subprocess_.reset(tmp_subprocess.release()); | 612 subprocess_.reset(tmp_subprocess.release()); |
| 592 } | 613 } |
| 593 | 614 |
| 594 void ServiceRuntime::StartSelLdrContinuation(int32_t pp_error, | 615 void ServiceRuntime::StartSelLdrContinuation(int32_t pp_error, |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 739 | 760 |
| 740 nacl::string ServiceRuntime::GetCrashLogOutput() { | 761 nacl::string ServiceRuntime::GetCrashLogOutput() { |
| 741 if (NULL != subprocess_.get()) { | 762 if (NULL != subprocess_.get()) { |
| 742 return subprocess_->GetCrashLogOutput(); | 763 return subprocess_->GetCrashLogOutput(); |
| 743 } else { | 764 } else { |
| 744 return std::string(); | 765 return std::string(); |
| 745 } | 766 } |
| 746 } | 767 } |
| 747 | 768 |
| 748 } // namespace plugin | 769 } // namespace plugin |
| OLD | NEW |