summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-16 01:25:23 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-16 01:25:23 +0000
commit0af12ab12a6888c29b631f58af5f9c28e99657b1 (patch)
tree4716ca924c281acc96a19bc86f01f6379a4aa141
parent3e100d5abb3bcea7e823debff1d8606984baeb3b (diff)
downloadchromium_src-0af12ab12a6888c29b631f58af5f9c28e99657b1.zip
chromium_src-0af12ab12a6888c29b631f58af5f9c28e99657b1.tar.gz
chromium_src-0af12ab12a6888c29b631f58af5f9c28e99657b1.tar.bz2
Attempt to shush Purify about a memory leak.
Review URL: http://codereview.chromium.org/67184 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13821 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/extensions/extension_process_bindings.cc22
1 files changed, 14 insertions, 8 deletions
diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc
index 3f53898..5de1817 100644
--- a/chrome/renderer/extensions/extension_process_bindings.cc
+++ b/chrome/renderer/extensions/extension_process_bindings.cc
@@ -4,6 +4,7 @@
#include "chrome/renderer/extensions/extension_process_bindings.h"
+#include "base/singleton.h"
#include "chrome/common/render_messages.h"
#include "chrome/renderer/extensions/bindings_utils.h"
#include "chrome/renderer/extensions/renderer_extension_bindings.h"
@@ -33,24 +34,33 @@ class ExtensionImpl : public v8::Extension {
arraysize(kExtensionDeps), kExtensionDeps) {}
static void SetFunctionNames(const std::vector<std::string>& names) {
- function_names_ = new std::set<std::string>();
+ std::set<std::string>* name_set = GetFunctionNameSet();
for (size_t i = 0; i < names.size(); ++i) {
- function_names_->insert(names[i]);
+ name_set->insert(names[i]);
}
}
virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
v8::Handle<v8::String> name) {
+ std::set<std::string>* names = GetFunctionNameSet();
+
if (name->Equals(v8::String::New("GetNextCallbackId")))
return v8::FunctionTemplate::New(GetNextCallbackId);
- else if (function_names_->find(*v8::String::AsciiValue(name)) !=
- function_names_->end())
+ else if (names->find(*v8::String::AsciiValue(name)) != names->end())
return v8::FunctionTemplate::New(StartRequest, name);
return v8::Handle<v8::FunctionTemplate>();
}
private:
+ struct SingletonData {
+ std::set<std::string> function_names_;
+ };
+
+ static std::set<std::string>* GetFunctionNameSet() {
+ return &Singleton<SingletonData>()->function_names_;
+ }
+
static v8::Handle<v8::Value> GetNextCallbackId(const v8::Arguments& args) {
static int next_callback_id = 0;
return v8::Integer::New(next_callback_id++);
@@ -80,12 +90,8 @@ class ExtensionImpl : public v8::Extension {
return v8::Undefined();
}
-
- static std::set<std::string>* function_names_;
};
-std::set<std::string>* ExtensionImpl::function_names_;
-
} // namespace
v8::Extension* ExtensionProcessBindings::Get() {