| Index: components/nacl/renderer/ppb_nacl_private_impl.cc
|
| diff --git a/components/nacl/renderer/ppb_nacl_private_impl.cc b/components/nacl/renderer/ppb_nacl_private_impl.cc
|
| index 5c52e63701f14d877f324a3cdf73aa387da7d497..cb94ca2b79d1af199bf68446e9d240cf28a78421 100644
|
| --- a/components/nacl/renderer/ppb_nacl_private_impl.cc
|
| +++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
|
| @@ -165,31 +165,37 @@ void DownloadFile(PP_Instance instance,
|
| const std::string& url,
|
| const DownloadFileCallback& callback);
|
|
|
| +PP_Bool StartPpapiProxy(PP_Instance instance);
|
| +
|
| // Thin adapter from PPP_ManifestService to ManifestServiceChannel::Delegate.
|
| // Note that user_data is managed by the caller of LaunchSelLdr. Please see
|
| // also PP_ManifestService's comment for more details about resource
|
| // management.
|
| class ManifestServiceProxy : public ManifestServiceChannel::Delegate {
|
| public:
|
| - ManifestServiceProxy(PP_Instance pp_instance,
|
| - const PPP_ManifestService* manifest_service,
|
| - void* user_data)
|
| - : pp_instance_(pp_instance),
|
| - manifest_service_(*manifest_service),
|
| - user_data_(user_data) {
|
| + ManifestServiceProxy(PP_Instance pp_instance)
|
| + : pp_instance_(pp_instance) {
|
| }
|
|
|
| - virtual ~ManifestServiceProxy() {
|
| - Quit();
|
| - }
|
| + virtual ~ManifestServiceProxy() { }
|
|
|
| virtual void StartupInitializationComplete() OVERRIDE {
|
| - if (!user_data_)
|
| - return;
|
| -
|
| - if (!PP_ToBool(
|
| - manifest_service_.StartupInitializationComplete(user_data_))) {
|
| - user_data_ = NULL;
|
| + if (StartPpapiProxy(pp_instance_) == PP_TRUE) {
|
| + JsonManifest* manifest = GetJsonManifest(pp_instance_);
|
| + NexeLoadManager* load_manager = GetNexeLoadManager(pp_instance_);
|
| + if (load_manager && manifest) {
|
| + std::string full_url;
|
| + PP_PNaClOptions pnacl_options;
|
| + bool uses_nonsfi_mode;
|
| + JsonManifest::ErrorInfo error_info;
|
| + if (manifest->GetProgramURL(&full_url,
|
| + &pnacl_options,
|
| + &uses_nonsfi_mode,
|
| + &error_info)) {
|
| + int64_t nexe_size = load_manager->nexe_size();
|
| + load_manager->ReportLoadSuccess(full_url, nexe_size, nexe_size);
|
| + }
|
| + }
|
| }
|
| }
|
|
|
| @@ -199,9 +205,6 @@ class ManifestServiceProxy : public ManifestServiceChannel::Delegate {
|
| DCHECK(ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->
|
| BelongsToCurrentThread());
|
|
|
| - if (!user_data_)
|
| - return;
|
| -
|
| std::string url;
|
| // TODO(teravest): Clean up pnacl_options logic in JsonManifest so we don't
|
| // have to initialize it like this here.
|
| @@ -239,18 +242,7 @@ class ManifestServiceProxy : public ManifestServiceChannel::Delegate {
|
| callback.Run(base::File(file_info.handle));
|
| }
|
|
|
| - void Quit() {
|
| - if (!user_data_)
|
| - return;
|
| -
|
| - bool result = PP_ToBool(manifest_service_.Quit(user_data_));
|
| - DCHECK(!result);
|
| - user_data_ = NULL;
|
| - }
|
| -
|
| PP_Instance pp_instance_;
|
| - PPP_ManifestService manifest_service_;
|
| - void* user_data_;
|
| DISALLOW_COPY_AND_ASSIGN(ManifestServiceProxy);
|
| };
|
|
|
| @@ -305,21 +297,15 @@ void LaunchSelLdr(PP_Instance instance,
|
| PP_Bool enable_dyncode_syscalls,
|
| PP_Bool enable_exception_handling,
|
| PP_Bool enable_crash_throttling,
|
| - const PPP_ManifestService* manifest_service_interface,
|
| - void* manifest_service_user_data,
|
| void* imc_handle,
|
| PP_CompletionCallback callback) {
|
| CHECK(ppapi::PpapiGlobals::Get()->GetMainThreadMessageLoop()->
|
| BelongsToCurrentThread());
|
|
|
| // Create the manifest service proxy here, so on error case, it will be
|
| - // destructed (without passing it to ManifestServiceChannel), and QUIT
|
| - // will be called in its destructor so that the caller of this function
|
| - // can free manifest_service_user_data properly.
|
| + // destructed (without passing it to ManifestServiceChannel).
|
| scoped_ptr<ManifestServiceChannel::Delegate> manifest_service_proxy(
|
| - new ManifestServiceProxy(instance,
|
| - manifest_service_interface,
|
| - manifest_service_user_data));
|
| + new ManifestServiceProxy(instance));
|
|
|
| FileDescriptor result_socket;
|
| IPC::Sender* sender = content::RenderThread::Get();
|
|
|