diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-16 01:25:23 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-16 01:25:23 +0000 |
commit | 0af12ab12a6888c29b631f58af5f9c28e99657b1 (patch) | |
tree | 4716ca924c281acc96a19bc86f01f6379a4aa141 | |
parent | 3e100d5abb3bcea7e823debff1d8606984baeb3b (diff) | |
download | chromium_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.cc | 22 |
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() { |