From c7c0c92c4d53cc26080e3358b61f7ecea809ecaa Mon Sep 17 00:00:00 2001 From: "koz@chromium.org" Date: Thu, 9 Jan 2014 00:03:36 +0000 Subject: Revert 241162 "Make clicking the restart bubble for crashed apps..." This CL had the unintended side effect that Simulate Browser Restart no longer works. Also, experimentation suggests that the original bug it was intended to fix works without this change now. > Make clicking the restart bubble for crashed apps work. > > Previously AppLoadService listened for > NOTIFICATION_EXTENSION_HOST_DID_STOP_LOADING before dispatching the > onRestarted() event after a reload, but in the case of packaged apps, which use > non-persistent background pages, that notification will never get fired. This > is because reloading an app doesn't cause its background page to get loaded - > only a relevant event causes the page to be woken up. > > This patch fixes the issue by listening for NOTIFICATION_EXTENSION_LOADED > instead, which is always fired after a reload. It also determines whether an > extension is listening to an event by checking which events it has registered > for, not which ones it currently has a listener for, > NOTIFICATION_EXTENSION_LOADED is the notification that listeners get created > on, and so to avoid raciness we check registered events (ie: the persisted > list of events that an extension is interested in). > > BUG=327964 > > Review URL: https://codereview.chromium.org/93593003 TBR=koz@chromium.org Review URL: https://codereview.chromium.org/127843005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243703 0039d316-1c4b-4281-b951-d872f2087c98 --- apps/launcher.cc | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'apps/launcher.cc') diff --git a/apps/launcher.cc b/apps/launcher.cc index 4f79973..6b077dd 100644 --- a/apps/launcher.cc +++ b/apps/launcher.cc @@ -380,12 +380,9 @@ void RestartPlatformApp(Profile* profile, const Extension* extension) { #endif extensions::EventRouter* event_router = ExtensionSystem::Get(profile)->event_router(); - // We check for registered events, rather than listeners, because listeners - // may not be instantiated for the events yet. - std::set events = - event_router->GetRegisteredEvents(extension->id()); - bool listening_to_restart = - events.count(app_runtime::OnRestarted::kEventName) > 0; + bool listening_to_restart = event_router-> + ExtensionHasEventListener(extension->id(), + app_runtime::OnRestarted::kEventName); if (listening_to_restart) { extensions::AppEventRouter::DispatchOnRestartedEvent(profile, extension); @@ -396,8 +393,9 @@ void RestartPlatformApp(Profile* profile, const Extension* extension) { extension_service()->extension_prefs(); bool had_windows = extension_prefs->IsActive(extension->id()); extension_prefs->SetIsActive(extension->id(), false); - bool listening_to_launch = - events.count(app_runtime::OnLaunched::kEventName) > 0; + bool listening_to_launch = event_router-> + ExtensionHasEventListener(extension->id(), + app_runtime::OnLaunched::kEventName); if (listening_to_launch && had_windows) LaunchPlatformAppWithNoData(profile, extension); -- cgit v1.1