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

Unified Diff: chrome/browser/extensions/extension_event_router.cc

Issue 10804020: Introduce runtime.onSuspendCanceled() event. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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/browser/extensions/extension_event_router.cc
diff --git a/chrome/browser/extensions/extension_event_router.cc b/chrome/browser/extensions/extension_event_router.cc
index 89df410adebcb0fe29bad3c8df95d869da556085..67e0de16e11d3dbedd9058c8e0b6fc20d9a772e5 100644
--- a/chrome/browser/extensions/extension_event_router.cc
+++ b/chrome/browser/extensions/extension_event_router.cc
@@ -37,6 +37,7 @@ using extensions::ExtensionAPI;
namespace {
const char kDispatchEvent[] = "Event.dispatchJSON";
+const char kOnSuspendCanceledEvent[] = "runtime.onSuspendCanceled";
void NotifyEventListenerRemovedOnIOThread(
void* profile,
@@ -436,6 +437,11 @@ void ExtensionEventRouter::DispatchEventToProcess(
return;
}
+ if (IsClosing(listener_profile, extension)) {
+ DispatchOnSuspendCanceled(process, extension_id);
+ IncrementInFlightEvents(listener_profile, extension);
+ }
+
DispatchEvent(process, extension_id,
event->event_name, *event_args,
event->event_url, event->user_gesture,
@@ -443,6 +449,25 @@ void ExtensionEventRouter::DispatchEventToProcess(
IncrementInFlightEvents(listener_profile, extension);
}
+bool ExtensionEventRouter::IsClosing(
+ Profile* profile, const Extension* extension) {
+ // Only lazy background pages can be in the closing state.
+ if (extension->has_lazy_background_page()) {
+ ExtensionProcessManager* pm =
+ extensions::ExtensionSystem::Get(profile)->process_manager();
+ ExtensionHost* host = pm->GetBackgroundHostForExtension(extension->id());
+ return host && pm->IsBackgroundHostClosing(extension->id());
+ }
benwells 2012/07/19 04:01:21 Nit: blank line after early return.
koz (OOO until 15th September) 2012/07/19 06:52:11 Done.
+ return false;
+}
+
+void ExtensionEventRouter::DispatchOnSuspendCanceled(
+ content::RenderProcessHost* process, const std::string& extension_id) {
+ ListValue args;
+ DispatchEvent(process, extension_id, kOnSuspendCanceledEvent, args, GURL(),
+ USER_GESTURE_NOT_ENABLED, EventFilteringInfo());
+}
+
bool ExtensionEventRouter::CanDispatchEventToProfile(
Profile* profile,
const Extension* extension,

Powered by Google App Engine
This is Rietveld 408576698