| 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 860a67ebacd78d359e5433ea9f2d949c0d562184..9d7fa0d60de7cbed781201b3c475c5b2e8233785 100644
|
| --- a/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
|
| +++ b/ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc
|
| @@ -426,26 +426,55 @@ 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) {
|
| +void PnaclCoordinator::OpenBitcodeStream() {
|
| + // Now open the pexe stream.
|
| + streaming_downloader_.reset(new FileDownloader());
|
| + streaming_downloader_->Initialize(plugin_);
|
| + // Mark the request as requesting a PNaCl bitcode file,
|
| + // so that component updater can detect this user action.
|
| + streaming_downloader_->set_request_headers(
|
| + "Accept: application/x-pnacl, */*");
|
| +
|
| + // Even though we haven't started downloading, create the translation
|
| + // thread object immediately. This ensures that any pieces of the file
|
| + // that get downloaded before the compilation thread is accepting
|
| + // SRPCs won't get dropped.
|
| + translate_thread_.reset(new PnaclTranslateThread());
|
| + if (translate_thread_ == NULL) {
|
| + ReportNonPpapiError(
|
| + ERROR_PNACL_THREAD_CREATE,
|
| + "PnaclCoordinator: could not allocate translation thread.");
|
| + return;
|
| + }
|
| +
|
| + pp::CompletionCallback cb =
|
| + callback_factory_.NewCallback(&PnaclCoordinator::BitcodeStreamDidOpen);
|
| + if (!streaming_downloader_->OpenStream(pexe_url_, cb, this)) {
|
| ReportNonPpapiError(
|
| - ERROR_PNACL_RESOURCE_FETCH,
|
| - nacl::string("The Portable Native Client (pnacl) component is not "
|
| - "installed. Please consult chrome://components for more "
|
| - "information."));
|
| + ERROR_PNACL_PEXE_FETCH_OTHER,
|
| + nacl::string("PnaclCoordinator: failed to open stream ") + pexe_url_);
|
| + return;
|
| + }
|
| +}
|
| +
|
| +void PnaclCoordinator::BitcodeStreamDidOpen(int32_t pp_error) {
|
| + if (pp_error != PP_OK) {
|
| + BitcodeStreamDidFinish(pp_error);
|
| + // We have not spun up the translation process yet, so we need to call
|
| + // TranslateFinished here.
|
| + TranslateFinished(pp_error);
|
| return;
|
| }
|
|
|
| - // Loading resources (e.g. llc and ld nexes) is done with PnaclResources.
|
| - resources_.reset(new PnaclResources(plugin_,
|
| - this,
|
| - this->manifest_.get()));
|
| + // The component updater's resource throttles + OnDemand update/install
|
| + // should block the URL request until the compiler is present. Now we
|
| + // can load the resources (e.g. llc and ld nexes).
|
| + 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);
|
| + callback_factory_.NewCallback(&PnaclCoordinator::ResourceInfoWasRead);
|
| resources_->ReadResourceInfo(PnaclUrls::GetResourceInfoUrl(),
|
| resource_info_read_cb);
|
| }
|
| @@ -453,7 +482,8 @@ void PnaclCoordinator::DidCheckPnaclInstalled(int32_t pp_error) {
|
| void PnaclCoordinator::ResourceInfoWasRead(int32_t pp_error) {
|
| PLUGIN_PRINTF(("PluginCoordinator::ResourceInfoWasRead (pp_error=%"
|
| NACL_PRId32 ")\n", pp_error));
|
| - // Second step of loading resources: call StartLoad.
|
| + // Second step of loading resources: call StartLoad to load pnacl-llc
|
| + // and pnacl-ld, based on the filenames found in the resource info file.
|
| pp::CompletionCallback resources_cb =
|
| callback_factory_.NewCallback(&PnaclCoordinator::ResourcesDidLoad);
|
| resources_->StartLoad(resources_cb);
|
| @@ -499,56 +529,6 @@ void PnaclCoordinator::ResourcesDidLoad(int32_t pp_error) {
|
| }
|
| }
|
|
|
| -void PnaclCoordinator::OpenBitcodeStream() {
|
| - // Now open the pexe stream.
|
| - streaming_downloader_.reset(new FileDownloader());
|
| - streaming_downloader_->Initialize(plugin_);
|
| - // Mark the request as requesting a PNaCl bitcode file,
|
| - // so that component updater can detect this user action.
|
| - streaming_downloader_->set_request_headers(
|
| - "Accept: application/x-pnacl, */*");
|
| -
|
| - // Even though we haven't started downloading, create the translation
|
| - // thread object immediately. This ensures that any pieces of the file
|
| - // that get downloaded before the compilation thread is accepting
|
| - // SRPCs won't get dropped.
|
| - translate_thread_.reset(new PnaclTranslateThread());
|
| - if (translate_thread_ == NULL) {
|
| - ReportNonPpapiError(
|
| - ERROR_PNACL_THREAD_CREATE,
|
| - "PnaclCoordinator: could not allocate translation thread.");
|
| - return;
|
| - }
|
| -
|
| - pp::CompletionCallback cb =
|
| - callback_factory_.NewCallback(&PnaclCoordinator::BitcodeStreamDidOpen);
|
| - if (!streaming_downloader_->OpenStream(pexe_url_, cb, this)) {
|
| - ReportNonPpapiError(
|
| - ERROR_PNACL_PEXE_FETCH_OTHER,
|
| - nacl::string("PnaclCoordinator: failed to open stream ") + pexe_url_);
|
| - return;
|
| - }
|
| -}
|
| -
|
| -void PnaclCoordinator::BitcodeStreamDidOpen(int32_t pp_error) {
|
| - if (pp_error != PP_OK) {
|
| - BitcodeStreamDidFinish(pp_error);
|
| - // We have not spun up the translation process yet, so we need to call
|
| - // TranslateFinished here.
|
| - TranslateFinished(pp_error);
|
| - return;
|
| - }
|
| -
|
| - // Now that we've started the url request for the response headers and
|
| - // for tickling the component updater's On-Demand API, check that the
|
| - // compiler is present, or block until it is present or an error is hit.
|
| - pp::CompletionCallback pnacl_installed_cb =
|
| - callback_factory_.NewCallback(&PnaclCoordinator::DidCheckPnaclInstalled);
|
| - plugin_->nacl_interface()->EnsurePnaclInstalled(
|
| - plugin_->pp_instance(),
|
| - pnacl_installed_cb.pp_completion_callback());
|
| -}
|
| -
|
| void PnaclCoordinator::NexeFdDidOpen(int32_t pp_error) {
|
| PLUGIN_PRINTF(("PnaclCoordinator::NexeFdDidOpen (pp_error=%"
|
| NACL_PRId32 ", hit=%d, handle=%d)\n", pp_error,
|
|
|