diff options
author | koz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-13 02:09:41 +0000 |
---|---|---|
committer | koz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-13 02:09:41 +0000 |
commit | 9fb990b32d4de5697fa848e03a6bf4d11fcd0417 (patch) | |
tree | c6dd811b2fd92bf95afe4107e3f78ae86e255319 /chrome/renderer/extensions/event_bindings.cc | |
parent | af885dd7caf0455a05f15aac48fa221191266706 (diff) | |
download | chromium_src-9fb990b32d4de5697fa848e03a6bf4d11fcd0417.zip chromium_src-9fb990b32d4de5697fa848e03a6bf4d11fcd0417.tar.gz chromium_src-9fb990b32d4de5697fa848e03a6bf4d11fcd0417.tar.bz2 |
Implement a module system for the extension bindings JS.
BUG=104100
TEST=existing browser tests
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=125132
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=125801
Review URL: http://codereview.chromium.org/9386001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126306 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer/extensions/event_bindings.cc')
-rw-r--r-- | chrome/renderer/extensions/event_bindings.cc | 43 |
1 files changed, 18 insertions, 25 deletions
diff --git a/chrome/renderer/extensions/event_bindings.cc b/chrome/renderer/extensions/event_bindings.cc index 9bab21a..f187f27 100644 --- a/chrome/renderer/extensions/event_bindings.cc +++ b/chrome/renderer/extensions/event_bindings.cc @@ -39,25 +39,26 @@ using content::RenderThread; namespace { +// A map of event names to the number of contexts listening to that event. +// We notify the browser about event listeners when we transition between 0 +// and 1. +typedef std::map<std::string, int> EventListenerCounts; + +// A map of extension IDs to listener counts for that extension. +base::LazyInstance<std::map<std::string, EventListenerCounts> > + g_listener_counts = LAZY_INSTANCE_INITIALIZER; + +// TODO(koz): Merge this into EventBindings. class ExtensionImpl : public ChromeV8Extension { public: + explicit ExtensionImpl(ExtensionDispatcher* dispatcher) - : ChromeV8Extension("extensions/event.js", - IDR_EVENT_BINDINGS_JS, - dispatcher) { + : ChromeV8Extension(dispatcher) { + RouteStaticFunction("AttachEvent", &AttachEvent); + RouteStaticFunction("DetachEvent", &DetachEvent); } ~ExtensionImpl() {} - virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( - v8::Handle<v8::String> name) { - if (name->Equals(v8::String::New("AttachEvent"))) { - return v8::FunctionTemplate::New(AttachEvent, v8::External::New(this)); - } else if (name->Equals(v8::String::New("DetachEvent"))) { - return v8::FunctionTemplate::New(DetachEvent, v8::External::New(this)); - } - return ChromeV8Extension::GetNativeFunction(name); - } - // Attach an event name to an object. static v8::Handle<v8::Value> AttachEvent(const v8::Arguments& args) { DCHECK(args.Length() == 1); @@ -76,7 +77,7 @@ class ExtensionImpl : public ChromeV8Extension { return v8::Undefined(); EventListenerCounts& listener_counts = - self->listener_counts_[context->extension_id()]; + g_listener_counts.Get()[context->extension_id()]; if (++listener_counts[event_name] == 1) { content::RenderThread::Get()->Send( new ExtensionHostMsg_AddListener(context->extension_id(), @@ -110,7 +111,7 @@ class ExtensionImpl : public ChromeV8Extension { return v8::Undefined(); EventListenerCounts& listener_counts = - self->listener_counts_[context->extension_id()]; + g_listener_counts.Get()[context->extension_id()]; std::string event_name(*v8::String::AsciiValue(args[0])); bool is_manual = args[1]->BooleanValue(); @@ -135,10 +136,6 @@ class ExtensionImpl : public ChromeV8Extension { } private: - // A map of event names to the number of contexts listening to that event. - // We notify the browser about event listeners when we transition between 0 - // and 1. - typedef std::map<std::string, int> EventListenerCounts; bool IsLazyBackgroundPage(const std::string& extension_id) { content::RenderView* render_view = GetCurrentRenderView(); @@ -151,14 +148,10 @@ class ExtensionImpl : public ChromeV8Extension { return (extension && !extension->background_page_persists() && helper->view_type() == chrome::VIEW_TYPE_EXTENSION_BACKGROUND_PAGE); } - - // A map of extension IDs to listener counts for that extension. - std::map<std::string, EventListenerCounts> listener_counts_; }; } // namespace -v8::Extension* EventBindings::Get(ExtensionDispatcher* dispatcher) { - static v8::Extension* extension = new ExtensionImpl(dispatcher); - return extension; +ChromeV8Extension* EventBindings::Get(ExtensionDispatcher* dispatcher) { + return new ExtensionImpl(dispatcher); } |