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

Unified Diff: components/nacl/renderer/ppb_nacl_private_impl.cc

Issue 231243002: PPAPI: Move some of NexeFileDidOpen to NexeLoadManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix crash Created 6 years, 8 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
« no previous file with comments | « components/nacl/renderer/nexe_load_manager.cc ('k') | ppapi/api/private/ppb_nacl_private.idl » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1a3f204deef7ca3338154bcc57ce0c135977ebf9..17e99385ecd5b41dcdd975c703baa304c828b016 100644
--- a/components/nacl/renderer/ppb_nacl_private_impl.cc
+++ b/components/nacl/renderer/ppb_nacl_private_impl.cc
@@ -476,6 +476,22 @@ void DispatchEventOnMainThread(PP_Instance instance,
}
}
+void NexeFileDidOpen(PP_Instance instance,
+ int32_t pp_error,
+ int32_t fd,
+ int32_t http_status,
+ int64_t nexe_bytes_read,
+ const char* url) {
+ nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
+ if (load_manager) {
+ load_manager->NexeFileDidOpen(pp_error,
+ fd,
+ http_status,
+ nexe_bytes_read,
+ url);
+ }
+}
+
void ReportLoadSuccess(PP_Instance instance,
const char* url,
uint64_t loaded_bytes,
@@ -517,6 +533,12 @@ void InstanceCreated(PP_Instance instance) {
void InstanceDestroyed(PP_Instance instance) {
NexeLoadManagerMap& map = g_load_manager_map.Get();
DLOG_IF(ERROR, map.count(instance) == 0) << "Could not find instance ID";
+ // The erase may call NexeLoadManager's destructor prior to removing it from
+ // the map. In that case, it is possible for the trusted Plugin to re-enter
+ // the NexeLoadManager (e.g., by calling ReportLoadError). Passing out the
+ // NexeLoadManager to a local scoped_ptr just ensures that its entry is gone
+ // from the map prior to the destructor being invoked.
+ scoped_ptr<nacl::NexeLoadManager> temp(map.take(instance));
map.erase(instance);
}
@@ -629,13 +651,6 @@ int64_t GetNexeSize(PP_Instance instance) {
return 0;
}
-void SetNexeSize(PP_Instance instance, int64_t nexe_size) {
- nacl::NexeLoadManager* load_manager = GetNexeLoadManager(instance);
- DCHECK(load_manager);
- if (load_manager)
- return load_manager->set_nexe_size(nexe_size);
-}
-
const PPB_NaCl_Private nacl_interface = {
&LaunchSelLdr,
&StartPpapiProxy,
@@ -650,6 +665,7 @@ const PPB_NaCl_Private nacl_interface = {
&ReportTranslationFinished,
&OpenNaClExecutable,
&DispatchEvent,
+ &NexeFileDidOpen,
&ReportLoadSuccess,
&ReportLoadError,
&ReportLoadAbort,
@@ -669,8 +685,7 @@ const PPB_NaCl_Private nacl_interface = {
&SetExitStatus,
&Vlog,
&SetInitTime,
- &GetNexeSize,
- &SetNexeSize
+ &GetNexeSize
};
} // namespace
« no previous file with comments | « components/nacl/renderer/nexe_load_manager.cc ('k') | ppapi/api/private/ppb_nacl_private.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698