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

Unified Diff: trunk/src/ppapi/native_client/src/trusted/plugin/plugin.cc

Issue 265393004: Revert 268280 "Pepper: Move manifest logic to components/nacl." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: trunk/src/ppapi/native_client/src/trusted/plugin/plugin.cc
===================================================================
--- trunk/src/ppapi/native_client/src/trusted/plugin/plugin.cc (revision 268294)
+++ trunk/src/ppapi/native_client/src/trusted/plugin/plugin.cc (working copy)
@@ -34,6 +34,7 @@
#include "ppapi/cpp/dev/url_util_dev.h"
#include "ppapi/cpp/module.h"
+#include "ppapi/native_client/src/trusted/plugin/json_manifest.h"
#include "ppapi/native_client/src/trusted/plugin/nacl_entry_points.h"
#include "ppapi/native_client/src/trusted/plugin/nacl_subprocess.h"
#include "ppapi/native_client/src/trusted/plugin/plugin_error.h"
@@ -135,11 +136,11 @@
bool Plugin::LoadNaClModuleFromBackgroundThread(
nacl::DescWrapper* wrapper,
NaClSubprocess* subprocess,
- int32_t manifest_id,
+ const Manifest* manifest,
const SelLdrStartParams& params) {
CHECK(!pp::Module::Get()->core()->IsMainThread());
ServiceRuntime* service_runtime =
- new ServiceRuntime(this, manifest_id, false, uses_nonsfi_mode_,
+ new ServiceRuntime(this, manifest, false, uses_nonsfi_mode_,
pp::BlockUntilComplete(), pp::BlockUntilComplete());
subprocess->set_service_runtime(service_runtime);
PLUGIN_PRINTF(("Plugin::LoadNaClModuleFromBackgroundThread "
@@ -227,7 +228,7 @@
enable_crash_throttling);
ErrorInfo error_info;
ServiceRuntime* service_runtime =
- new ServiceRuntime(this, manifest_id_, true, uses_nonsfi_mode,
+ new ServiceRuntime(this, manifest_.get(), true, uses_nonsfi_mode,
init_done_cb, crash_cb);
main_subprocess_.set_service_runtime(service_runtime);
PLUGIN_PRINTF(("Plugin::LoadNaClModule (service_runtime=%p)\n",
@@ -292,7 +293,7 @@
NaClSubprocess* Plugin::LoadHelperNaClModule(const nacl::string& helper_url,
nacl::DescWrapper* wrapper,
- int32_t manifest_id,
+ const Manifest* manifest,
ErrorInfo* error_info) {
nacl::scoped_ptr<NaClSubprocess> nacl_subprocess(
new NaClSubprocess("helper module", NULL, NULL));
@@ -319,7 +320,7 @@
false /* enable_exception_handling */,
true /* enable_crash_throttling */);
if (!LoadNaClModuleFromBackgroundThread(wrapper, nacl_subprocess.get(),
- manifest_id, params)) {
+ manifest, params)) {
return NULL;
}
// We need not wait for the init_done callback. We can block
@@ -369,7 +370,6 @@
wrapper_factory_(NULL),
time_of_last_progress_event_(0),
nexe_open_time_(-1),
- manifest_id_(-1),
nacl_interface_(NULL),
uma_interface_(this) {
PLUGIN_PRINTF(("Plugin::Plugin (this=%p, pp_instance=%"
@@ -580,19 +580,20 @@
if (!SetManifestObject(manifest_json))
return;
- PP_Var pp_program_url;
+ nacl::string program_url;
PP_PNaClOptions pnacl_options = {PP_FALSE, PP_FALSE, 2};
- PP_Bool uses_nonsfi_mode;
- if (nacl_interface_->GetManifestProgramURL(pp_instance(),
- manifest_id_, &pp_program_url, &pnacl_options, &uses_nonsfi_mode)) {
- std::string program_url = pp::Var(pp::PASS_REF, pp_program_url).AsString();
+ bool uses_nonsfi_mode;
+ ErrorInfo error_info;
+ if (manifest_->GetProgramURL(
+ &program_url, &pnacl_options, &uses_nonsfi_mode, &error_info)) {
// TODO(teravest): Make ProcessNaClManifest take responsibility for more of
// this function.
nacl_interface_->ProcessNaClManifest(pp_instance(), program_url.c_str());
- uses_nonsfi_mode_ = PP_ToBool(uses_nonsfi_mode);
+ uses_nonsfi_mode_ = uses_nonsfi_mode;
if (pnacl_options.translate) {
pp::CompletionCallback translate_callback =
callback_factory_.NewCallback(&Plugin::BitcodeDidTranslate);
+ // Will always call the callback on success or failure.
pnacl_coordinator_.reset(
PnaclCoordinator::BitcodeToNative(this,
program_url,
@@ -618,6 +619,8 @@
return;
}
}
+ // Failed to select the program and/or the translator.
+ ReportLoadError(error_info);
}
void Plugin::RequestNaClManifest(const nacl::string& url) {
@@ -660,22 +663,30 @@
bool Plugin::SetManifestObject(const nacl::string& manifest_json) {
PLUGIN_PRINTF(("Plugin::SetManifestObject(): manifest_json='%s'.\n",
manifest_json.c_str()));
+ ErrorInfo error_info;
+
// Determine whether lookups should use portable (i.e., pnacl versions)
// rather than platform-specific files.
bool is_pnacl = nacl_interface_->IsPNaCl(pp_instance());
+ bool nonsfi_mode_enabled =
+ PP_ToBool(nacl_interface_->IsNonSFIModeEnabled());
pp::Var manifest_base_url =
pp::Var(pp::PASS_REF, nacl_interface_->GetManifestBaseURL(pp_instance()));
std::string manifest_base_url_str = manifest_base_url.AsString();
+ bool pnacl_debug = GetNaClInterface()->NaClDebugEnabledForURL(
+ manifest_base_url_str.c_str());
const char* sandbox_isa = nacl_interface_->GetSandboxArch();
-
- int32_t manifest_id = nacl_interface_->CreateJsonManifest(
- pp_instance(),
- manifest_base_url_str.c_str(),
- is_pnacl ? kPortableArch : sandbox_isa,
- manifest_json.c_str());
- if (manifest_id == -1)
+ nacl::scoped_ptr<JsonManifest> json_manifest(
+ new JsonManifest(pp::URLUtil_Dev::Get(),
+ manifest_base_url_str,
+ (is_pnacl ? kPortableArch : sandbox_isa),
+ nonsfi_mode_enabled,
+ pnacl_debug));
+ if (!json_manifest->Init(manifest_json, &error_info)) {
+ ReportLoadError(error_info);
return false;
- manifest_id_ = manifest_id;
+ }
+ manifest_.reset(json_manifest.release());
return true;
}

Powered by Google App Engine
This is Rietveld 408576698