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

Side by Side Diff: ppapi/native_client/src/trusted/plugin/service_runtime.cc

Issue 177113009: Support non-SFI mode in NaCl manifest file. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 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
OLDNEW
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
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 nonsfi_enabled,
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 nonsfi_enabled_(nonsfi_enabled),
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
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 (nonsfi_enabled_) {
498 // In non-SFI mode, open_resource() has not yet been supported, so we
Mark Seaborn 2014/02/27 17:10:22 "is not yet supported"
hidehiko 2014/02/28 06:41:54 Done.
499 // do not need the reverse service. So, skip the initialization (with
500 // calling the completion callback).
501 // Note that there is on going work to replace SRPC by Chrome IPC (not only
Mark Seaborn 2014/02/27 17:10:22 You might link to the issue here...
hidehiko 2014/02/28 06:41:54 Done.
502 // for non-SFI mode, but also for SFI mode), and non-SFI mode will use
503 // Chrome IPC for open_resource() after the refacrogin is done.
Mark Seaborn 2014/02/27 17:10:22 "refactoring"
hidehiko 2014/02/28 06:41:54 Oops. Done.
504 rev_interface_->StartupInitializationComplete();
505 return true;
506 }
507
495 // Hook up the reverse service channel. We are the IMC client, but 508 // Hook up the reverse service channel. We are the IMC client, but
496 // provide SRPC service. 509 // provide SRPC service.
497 NaClDesc* out_conn_cap; 510 NaClDesc* out_conn_cap;
498 NaClSrpcResultCodes rpc_result = 511 NaClSrpcResultCodes rpc_result =
499 NaClSrpcInvokeBySignature(&command_channel_, 512 NaClSrpcInvokeBySignature(&command_channel_,
500 "reverse_setup::h", 513 "reverse_setup::h",
501 &out_conn_cap); 514 &out_conn_cap);
502 515
503 if (NACL_SRPC_RESULT_OK != rpc_result) { 516 if (NACL_SRPC_RESULT_OK != rpc_result) {
504 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_COMMUNICATION_REV_SETUP, 517 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_COMMUNICATION_REV_SETUP,
(...skipping 20 matching lines...) Expand all
525 return false; 538 return false;
526 } 539 }
527 return true; 540 return true;
528 } 541 }
529 542
530 bool ServiceRuntime::StartModule(ErrorInfo* error_info) { 543 bool ServiceRuntime::StartModule(ErrorInfo* error_info) {
531 // start the module. otherwise we cannot connect for multimedia 544 // start the module. otherwise we cannot connect for multimedia
532 // subsystem since that is handled by user-level code (not secure!) 545 // subsystem since that is handled by user-level code (not secure!)
533 // in libsrpc. 546 // in libsrpc.
534 int load_status = -1; 547 int load_status = -1;
535 NaClSrpcResultCodes rpc_result = 548 if (nonsfi_enabled_) {
536 NaClSrpcInvokeBySignature(&command_channel_, 549 // In non-SFI mode, we don't need to call start_module SRPC to launch
537 "start_module::i", 550 // the plugin.
538 &load_status); 551 load_status = LOAD_OK;
552 } else {
553 NaClSrpcResultCodes rpc_result =
554 NaClSrpcInvokeBySignature(&command_channel_,
555 "start_module::i",
556 &load_status);
539 557
540 if (NACL_SRPC_RESULT_OK != rpc_result) { 558 if (NACL_SRPC_RESULT_OK != rpc_result) {
541 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_START_MODULE, 559 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_START_MODULE,
542 "ServiceRuntime: could not start nacl module"); 560 "ServiceRuntime: could not start nacl module");
543 return false; 561 return false;
562 }
544 } 563 }
545 NaClLog(4, "ServiceRuntime::StartModule (load_status=%d)\n", 564
546 load_status); 565 NaClLog(4, "ServiceRuntime::StartModule (load_status=%d)\n", load_status);
547 if (main_service_runtime_) { 566 if (main_service_runtime_) {
548 plugin_->ReportSelLdrLoadStatus(load_status); 567 plugin_->ReportSelLdrLoadStatus(load_status);
549 } 568 }
550 if (LOAD_OK != load_status) { 569 if (LOAD_OK != load_status) {
551 error_info->SetReport( 570 error_info->SetReport(
552 PP_NACL_ERROR_SEL_LDR_START_STATUS, 571 PP_NACL_ERROR_SEL_LDR_START_STATUS,
553 NaClErrorString(static_cast<NaClErrorCode>(load_status))); 572 NaClErrorString(static_cast<NaClErrorCode>(load_status)));
554 return false; 573 return false;
555 } 574 }
556 return true; 575 return true;
(...skipping 22 matching lines...) Expand all
579 callback); 598 callback);
580 599
581 tmp_subprocess->Start(plugin_->pp_instance(), 600 tmp_subprocess->Start(plugin_->pp_instance(),
582 params.url.c_str(), 601 params.url.c_str(),
583 params.uses_irt, 602 params.uses_irt,
584 params.uses_ppapi, 603 params.uses_ppapi,
585 params.enable_dev_interfaces, 604 params.enable_dev_interfaces,
586 params.enable_dyncode_syscalls, 605 params.enable_dyncode_syscalls,
587 params.enable_exception_handling, 606 params.enable_exception_handling,
588 params.enable_crash_throttling, 607 params.enable_crash_throttling,
608 params.enable_nonsfi,
589 &start_sel_ldr_error_message_, 609 &start_sel_ldr_error_message_,
590 internal_callback); 610 internal_callback);
591 subprocess_.reset(tmp_subprocess.release()); 611 subprocess_.reset(tmp_subprocess.release());
592 } 612 }
593 613
594 void ServiceRuntime::StartSelLdrContinuation(int32_t pp_error, 614 void ServiceRuntime::StartSelLdrContinuation(int32_t pp_error,
595 pp::CompletionCallback callback) { 615 pp::CompletionCallback callback) {
596 if (pp_error != PP_OK) { 616 if (pp_error != PP_OK) {
597 NaClLog(LOG_ERROR, "ServiceRuntime::StartSelLdrContinuation " 617 NaClLog(LOG_ERROR, "ServiceRuntime::StartSelLdrContinuation "
598 " (start failed)\n"); 618 " (start failed)\n");
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 759
740 nacl::string ServiceRuntime::GetCrashLogOutput() { 760 nacl::string ServiceRuntime::GetCrashLogOutput() {
741 if (NULL != subprocess_.get()) { 761 if (NULL != subprocess_.get()) {
742 return subprocess_->GetCrashLogOutput(); 762 return subprocess_->GetCrashLogOutput();
743 } else { 763 } else {
744 return std::string(); 764 return std::string();
745 } 765 }
746 } 766 }
747 767
748 } // namespace plugin 768 } // namespace plugin
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698