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, |