summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/extensions/event_bindings.cc
diff options
context:
space:
mode:
authorkoz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-13 02:09:41 +0000
committerkoz@chromium.org <koz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-13 02:09:41 +0000
commit9fb990b32d4de5697fa848e03a6bf4d11fcd0417 (patch)
treec6dd811b2fd92bf95afe4107e3f78ae86e255319 /chrome/renderer/extensions/event_bindings.cc
parentaf885dd7caf0455a05f15aac48fa221191266706 (diff)
downloadchromium_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.cc43
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);
}