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 #ifdef _MSC_VER | 5 #ifdef _MSC_VER |
6 // Do not warn about use of std::copy with raw pointers. | 6 // Do not warn about use of std::copy with raw pointers. |
7 #pragma warning(disable : 4996) | 7 #pragma warning(disable : 4996) |
8 #endif | 8 #endif |
9 | 9 |
10 #include "ppapi/native_client/src/trusted/plugin/plugin.h" | 10 #include "ppapi/native_client/src/trusted/plugin/plugin.h" |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 } else if (ipc_result == PP_EXTERNAL_PLUGIN_ERROR_INSTANCE) { | 428 } else if (ipc_result == PP_EXTERNAL_PLUGIN_ERROR_INSTANCE) { |
429 error_info->SetReport(PP_NACL_ERROR_START_PROXY_INSTANCE, | 429 error_info->SetReport(PP_NACL_ERROR_START_PROXY_INSTANCE, |
430 "could not create instance."); | 430 "could not create instance."); |
431 return false; | 431 return false; |
432 } | 432 } |
433 PLUGIN_PRINTF(("Plugin::LoadNaClModule (%s)\n", | 433 PLUGIN_PRINTF(("Plugin::LoadNaClModule (%s)\n", |
434 main_subprocess_.detailed_description().c_str())); | 434 main_subprocess_.detailed_description().c_str())); |
435 return true; | 435 return true; |
436 } | 436 } |
437 | 437 |
438 NaClSubprocess* Plugin::LoadHelperNaClModule(nacl::DescWrapper* wrapper, | 438 NaClSubprocess* Plugin::LoadHelperNaClModule(const nacl::string& helper_url, |
| 439 nacl::DescWrapper* wrapper, |
439 const Manifest* manifest, | 440 const Manifest* manifest, |
440 ErrorInfo* error_info) { | 441 ErrorInfo* error_info) { |
441 nacl::scoped_ptr<NaClSubprocess> nacl_subprocess( | 442 nacl::scoped_ptr<NaClSubprocess> nacl_subprocess( |
442 new NaClSubprocess("helper module", NULL, NULL)); | 443 new NaClSubprocess("helper module", NULL, NULL)); |
443 if (NULL == nacl_subprocess.get()) { | 444 if (NULL == nacl_subprocess.get()) { |
444 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_INIT, | 445 error_info->SetReport(PP_NACL_ERROR_SEL_LDR_INIT, |
445 "unable to allocate helper subprocess."); | 446 "unable to allocate helper subprocess."); |
446 return NULL; | 447 return NULL; |
447 } | 448 } |
448 | 449 |
449 // Do not report UMA stats for translator-related nexes. | 450 // Do not report UMA stats for translator-related nexes. |
450 // TODO(sehr): define new UMA stats for translator related nexe events. | 451 // TODO(sehr): define new UMA stats for translator related nexe events. |
451 // NOTE: The PNaCl translator nexes are not built to use the IRT. This is | 452 // NOTE: The PNaCl translator nexes are not built to use the IRT. This is |
452 // done to save on address space and swap space. | 453 // done to save on address space and swap space. |
453 // TODO(jvoung): See if we still need the uses_ppapi variable, now that | 454 // TODO(jvoung): See if we still need the uses_ppapi variable, now that |
454 // LaunchSelLdr always happens on the main thread. | 455 // LaunchSelLdr always happens on the main thread. |
455 SelLdrStartParams params(manifest_base_url(), | 456 SelLdrStartParams params(helper_url, |
456 false /* uses_irt */, | 457 false /* uses_irt */, |
457 false /* uses_ppapi */, | 458 false /* uses_ppapi */, |
458 enable_dev_interfaces_, | 459 enable_dev_interfaces_, |
459 false /* enable_dyncode_syscalls */, | 460 false /* enable_dyncode_syscalls */, |
460 false /* enable_exception_handling */, | 461 false /* enable_exception_handling */, |
461 true /* enable_crash_throttling */); | 462 true /* enable_crash_throttling */); |
462 if (!LoadNaClModuleFromBackgroundThread(wrapper, nacl_subprocess.get(), | 463 if (!LoadNaClModuleFromBackgroundThread(wrapper, nacl_subprocess.get(), |
463 manifest, params)) { | 464 manifest, params)) { |
464 return NULL; | 465 return NULL; |
465 } | 466 } |
466 // We need not wait for the init_done callback. We can block | 467 // We need not wait for the init_done callback. We can block |
467 // here in StartSrpcServices, since helper NaCl modules | 468 // here in StartSrpcServices, since helper NaCl modules |
468 // are spawned from a private thread. | 469 // are spawned from a private thread. |
469 // | 470 // |
470 // TODO(bsy): if helper module crashes, we should abort. | 471 // TODO(bsy): if helper module crashes, we should abort. |
471 // crash_cb is not used here, so we are relying on crashes | 472 // crash_cb is not used here, so we are relying on crashes |
472 // being detected in StartSrpcServices or later. | 473 // being detected in StartSrpcServices or later. |
473 // | 474 // |
474 // NB: More refactoring might be needed, however, if helper | 475 // NB: More refactoring might be needed, however, if helper |
475 // NaCl modules have their own manifest. Currently the | 476 // NaCl modules have their own manifest. Currently the |
476 // manifest is a per-plugin-instance object, not a per | 477 // manifest is a per-plugin-instance object, not a per |
477 // NaClSubprocess object. | 478 // NaClSubprocess object. |
478 if (!nacl_subprocess->StartSrpcServices()) { | 479 if (!nacl_subprocess->StartSrpcServices()) { |
479 error_info->SetReport(PP_NACL_ERROR_SRPC_CONNECTION_FAIL, | 480 error_info->SetReport(PP_NACL_ERROR_SRPC_CONNECTION_FAIL, |
480 "SRPC connection failure for " + | 481 "SRPC connection failure for " + |
481 nacl_subprocess->description()); | 482 nacl_subprocess->description()); |
482 return NULL; | 483 return NULL; |
483 } | 484 } |
484 | 485 |
485 PLUGIN_PRINTF(("Plugin::LoadHelperNaClModule (%s)\n", | 486 PLUGIN_PRINTF(("Plugin::LoadHelperNaClModule (%s, %s)\n", |
| 487 helper_url.c_str(), |
486 nacl_subprocess.get()->detailed_description().c_str())); | 488 nacl_subprocess.get()->detailed_description().c_str())); |
487 | 489 |
488 return nacl_subprocess.release(); | 490 return nacl_subprocess.release(); |
489 } | 491 } |
490 | 492 |
491 std::string Plugin::LookupArgument(const std::string& key) const { | 493 std::string Plugin::LookupArgument(const std::string& key) const { |
492 std::map<std::string, std::string>::const_iterator it = args_.find(key); | 494 std::map<std::string, std::string>::const_iterator it = args_.find(key); |
493 if (it != args_.end()) | 495 if (it != args_.end()) |
494 return it->second; | 496 return it->second; |
495 return std::string(); | 497 return std::string(); |
(...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1477 DCHECK(pp::Module::Get()->core()->IsMainThread()); | 1479 DCHECK(pp::Module::Get()->core()->IsMainThread()); |
1478 DCHECK(nacl_interface_); | 1480 DCHECK(nacl_interface_); |
1479 exit_status_ = exit_status; | 1481 exit_status_ = exit_status; |
1480 nacl_interface_->SetReadOnlyProperty(pp_instance(), | 1482 nacl_interface_->SetReadOnlyProperty(pp_instance(), |
1481 pp::Var("exitStatus").pp_var(), | 1483 pp::Var("exitStatus").pp_var(), |
1482 pp::Var(exit_status_).pp_var()); | 1484 pp::Var(exit_status_).pp_var()); |
1483 } | 1485 } |
1484 | 1486 |
1485 | 1487 |
1486 } // namespace plugin | 1488 } // namespace plugin |
OLD | NEW |