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

Unified Diff: chrome/renderer/extensions/event_bindings.cc

Issue 9350024: Unrevert again r119770 - "Event pages: remember events that the page registered for,"" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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
Index: chrome/renderer/extensions/event_bindings.cc
diff --git a/chrome/renderer/extensions/event_bindings.cc b/chrome/renderer/extensions/event_bindings.cc
index dd4c3d6a66ef848b7aea245dec1e363669091ebf..9f069b0d41fb616e562c1afd458bdc58058d8605 100644
--- a/chrome/renderer/extensions/event_bindings.cc
+++ b/chrome/renderer/extensions/event_bindings.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -91,10 +91,20 @@ class ExtensionImpl : public ChromeV8Extension {
if (!v8_extension->CheckCurrentContextAccessToExtensionAPI(event_name))
return v8::Undefined();
+ const ::Extension* extension = v8_extension->extension_dispatcher()->
+ extensions()->GetByID(context->extension_id());
+
if (++listener_counts[event_name] == 1) {
content::RenderThread::Get()->Send(
new ExtensionHostMsg_AddListener(context->extension_id(),
event_name));
+ // TODO(mpcomplete): restrict this to the bg page only.
+ // TODO(mpcomplete): figure out proper time to call RemoveLazyListener.
+ if (extension && !extension->background_page_persists()) {
+ content::RenderThread::Get()->Send(
+ new ExtensionHostMsg_AddLazyListener(context->extension_id(),
+ event_name));
+ }
}
}
@@ -117,6 +127,7 @@ class ExtensionImpl : public ChromeV8Extension {
EventListenerCounts& listener_counts =
GetListenerCounts(context->extension_id());
std::string event_name(*v8::String::AsciiValue(args[0]));
+
if (--listener_counts[event_name] == 0) {
content::RenderThread::Get()->Send(
new ExtensionHostMsg_RemoveListener(context->extension_id(),

Powered by Google App Engine
This is Rietveld 408576698