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

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

Issue 484303002: Pepper: Move NexeLoadManager map inside that class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 4 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.h ('k') | components/nacl/renderer/ppb_nacl_private_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/nacl/renderer/nexe_load_manager.cc
diff --git a/components/nacl/renderer/nexe_load_manager.cc b/components/nacl/renderer/nexe_load_manager.cc
index c4d611952001b244c459dd167fdf860b99ca7304..512700a749053cf72302af0fed7e27b4b4a61fa8 100644
--- a/components/nacl/renderer/nexe_load_manager.cc
+++ b/components/nacl/renderer/nexe_load_manager.cc
@@ -5,6 +5,8 @@
#include "components/nacl/renderer/nexe_load_manager.h"
#include "base/command_line.h"
+#include "base/containers/scoped_ptr_hash_map.h"
+#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/metrics/histogram.h"
#include "base/strings/string_tokenizer.h"
@@ -39,6 +41,8 @@
#include "third_party/WebKit/public/web/WebView.h"
#include "v8/include/v8.h"
+namespace nacl {
+
namespace {
const char* const kTypeAttribute = "type";
@@ -76,9 +80,11 @@ std::string LookupAttribute(const std::map<std::string, std::string>& args,
return std::string();
}
-} // namespace
+typedef base::ScopedPtrHashMap<PP_Instance, NexeLoadManager> NexeLoadManagerMap;
+base::LazyInstance<NexeLoadManagerMap> g_load_manager_map =
+ LAZY_INSTANCE_INITIALIZER;
-namespace nacl {
+} // namespace
NexeLoadManager::NexeLoadManager(
PP_Instance pp_instance)
@@ -108,6 +114,32 @@ NexeLoadManager::~NexeLoadManager() {
base::SharedMemory::CloseHandle(crash_info_shmem_handle_);
}
+void NexeLoadManager::Create(PP_Instance instance) {
+ scoped_ptr<NexeLoadManager> new_load_manager(new NexeLoadManager(instance));
+ NexeLoadManagerMap& map = g_load_manager_map.Get();
+ DLOG_IF(ERROR, map.count(instance) != 0) << "Instance count should be 0";
+ map.add(instance, new_load_manager.Pass());
+}
+
+NexeLoadManager* NexeLoadManager::Get(PP_Instance instance) {
+ NexeLoadManagerMap& map = g_load_manager_map.Get();
+ NexeLoadManagerMap::iterator iter = map.find(instance);
+ if (iter != map.end())
+ return iter->second;
+ return NULL;
+}
+
+void NexeLoadManager::Delete(PP_Instance instance) {
+ NexeLoadManagerMap& map = g_load_manager_map.Get();
+ // 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<NexeLoadManager> temp(map.take(instance));
+ map.erase(instance);
+}
+
void NexeLoadManager::NexeFileDidOpen(int32_t pp_error,
const base::File& file,
int32_t http_status,
« no previous file with comments | « components/nacl/renderer/nexe_load_manager.h ('k') | components/nacl/renderer/ppb_nacl_private_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698