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..bfad3f1c9d8d6d35294894de0782cdb6fcd0d4b0 100644 |
--- a/chrome/browser/extensions/extension_event_router.cc |
+++ b/chrome/browser/extensions/extension_event_router.cc |
@@ -436,11 +436,16 @@ void ExtensionEventRouter::DispatchEventToProcess( |
return; |
} |
+ // We need to call IncrementInFlightEvents() before DispatchEvent() because |
+ // the former may prevent this extension from getting suspended and so send |
+ // the onSuspendCanceled() to the extension, which needs to arrive before the |
+ // event that DispatchEvent() is dispatching. |
+ IncrementInFlightEvents(listener_profile, extension); |
+ |
DispatchEvent(process, extension_id, |
event->event_name, *event_args, |
event->event_url, event->user_gesture, |
event->info); |
- IncrementInFlightEvents(listener_profile, extension); |
} |
bool ExtensionEventRouter::CanDispatchEventToProfile( |
@@ -493,7 +498,7 @@ void ExtensionEventRouter::IncrementInFlightEvents( |
extensions::ExtensionSystem::Get(profile)->process_manager(); |
ExtensionHost* host = pm->GetBackgroundHostForExtension(extension->id()); |
if (host) |
- pm->IncrementLazyKeepaliveCount(extension); |
+ pm->IncrementLazyKeepaliveCount(extension, true); |
} |
} |