| Index: ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
|
| diff --git a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
|
| index f22cfa437c6d33f6d5eb4351b95a01a1ba9ff59d..e5649f3dd8a89a388edbce54738e31b5271374f4 100644
|
| --- a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
|
| +++ b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
|
| @@ -241,19 +241,13 @@ PnaclCoordinator* PnaclCoordinator::BitcodeToNative(
|
| reinterpret_cast<const void*>(coordinator->manifest_.get()),
|
| coordinator->off_the_record_));
|
|
|
| - // Loading resources (e.g. llc and ld nexes) is done with PnaclResources.
|
| - coordinator->resources_.reset(
|
| - new PnaclResources(plugin,
|
| - coordinator,
|
| - coordinator->manifest_.get()));
|
| - CHECK(coordinator->resources_ != NULL);
|
| -
|
| - // The first step of loading resources: read the resource info file.
|
| - pp::CompletionCallback resource_info_read_cb =
|
| + // First check that PNaCl is installed.
|
| + pp::CompletionCallback pnacl_installed_cb =
|
| coordinator->callback_factory_.NewCallback(
|
| - &PnaclCoordinator::ResourceInfoWasRead);
|
| - coordinator->resources_->ReadResourceInfo(PnaclUrls::GetResourceInfoUrl(),
|
| - resource_info_read_cb);
|
| + &PnaclCoordinator::DidCheckPnaclInstalled);
|
| + plugin->nacl_interface()->EnsurePnaclInstalled(
|
| + plugin->pp_instance(),
|
| + pnacl_installed_cb.pp_completion_callback());
|
| return coordinator;
|
| }
|
|
|
| @@ -664,6 +658,29 @@ void PnaclCoordinator::NexeReadDidOpen(int32_t pp_error) {
|
| translate_notify_callback_.Run(pp_error);
|
| }
|
|
|
| +void PnaclCoordinator::DidCheckPnaclInstalled(int32_t pp_error) {
|
| + if (pp_error != PP_OK) {
|
| + ReportNonPpapiError(
|
| + ERROR_PNACL_RESOURCE_FETCH,
|
| + nacl::string("The Portable Native Client component is not installed"
|
| + " or has been disabled."));
|
| + return;
|
| + }
|
| +
|
| + // Loading resources (e.g. llc and ld nexes) is done with PnaclResources.
|
| + resources_.reset(new PnaclResources(plugin_,
|
| + this,
|
| + this->manifest_.get()));
|
| + CHECK(resources_ != NULL);
|
| +
|
| + // The first step of loading resources: read the resource info file.
|
| + pp::CompletionCallback resource_info_read_cb =
|
| + callback_factory_.NewCallback(
|
| + &PnaclCoordinator::ResourceInfoWasRead);
|
| + resources_->ReadResourceInfo(PnaclUrls::GetResourceInfoUrl(),
|
| + resource_info_read_cb);
|
| +}
|
| +
|
| void PnaclCoordinator::ResourceInfoWasRead(int32_t pp_error) {
|
| PLUGIN_PRINTF(("PluginCoordinator::ResourceInfoWasRead (pp_error=%"
|
| NACL_PRId32 ")\n", pp_error));
|
|
|