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

Unified Diff: chrome/browser/background/background_contents_service.cc

Issue 413563002: Remove DEPRECATED extension notification from background_contents_service.* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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/background/background_contents_service.cc
diff --git a/chrome/browser/background/background_contents_service.cc b/chrome/browser/background/background_contents_service.cc
index 687d87a3103434423a56b6021e37d3c9bd2bd2c5..1b22c25cda711b4d28d498a82a1bd101a7e71715 100644
--- a/chrome/browser/background/background_contents_service.cc
+++ b/chrome/browser/background/background_contents_service.cc
@@ -261,7 +261,7 @@ int BackgroundContentsService::restart_delay_in_ms_ = 3000; // 3 seconds.
BackgroundContentsService::BackgroundContentsService(
Profile* profile, const CommandLine* command_line)
- : prefs_(NULL) {
+ : prefs_(NULL), extension_registry_observer_(this) {
// Don't load/store preferences if the parent profile is incognito.
if (!profile->IsOffTheRecord())
prefs_ = profile->GetPrefs();
@@ -329,12 +329,6 @@ void BackgroundContentsService::StartObserving(Profile* profile) {
registrar_.Add(this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_NAVIGATED,
content::Source<Profile>(profile));
- // Listen for new extension installs so that we can load any associated
- // background page.
- registrar_.Add(this,
- chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED,
- content::Source<Profile>(profile));
-
// Track when the extensions crash so that the user can be notified
// about it, and the crashed contents can be restarted.
registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED,
@@ -342,18 +336,8 @@ void BackgroundContentsService::StartObserving(Profile* profile) {
registrar_.Add(this, chrome::NOTIFICATION_BACKGROUND_CONTENTS_TERMINATED,
content::Source<Profile>(profile));
- // Listen for extensions to be unloaded so we can shutdown associated
- // BackgroundContents.
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED,
- content::Source<Profile>(profile));
-
- // Make sure the extension-crash balloons are removed when the extension is
- // uninstalled/reloaded. We cannot do this from UNLOADED since a crashed
- // extension is unloaded immediately after the crash, not when user reloads or
- // uninstalls the extension.
- registrar_.Add(this,
- chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED,
- content::Source<Profile>(profile));
+ // Listen for extension uninstall, load, unloaded notification.
+ extension_registry_observer_.Add(extensions::ExtensionRegistry::Get(profile));
}
void BackgroundContentsService::Observe(
@@ -401,35 +385,6 @@ void BackgroundContentsService::Observe(
RegisterBackgroundContents(bgcontents);
break;
}
- case chrome::NOTIFICATION_EXTENSION_LOADED_DEPRECATED: {
- const Extension* extension =
- content::Details<const Extension>(details).ptr();
- Profile* profile = content::Source<Profile>(source).ptr();
- if (extension->is_hosted_app() &&
- BackgroundInfo::HasBackgroundPage(extension)) {
- // If there is a background page specified in the manifest for a hosted
- // app, then blow away registered urls in the pref.
- ShutdownAssociatedBackgroundContents(
- base::ASCIIToUTF16(extension->id()));
-
- ExtensionService* service =
- extensions::ExtensionSystem::Get(profile)->extension_service();
- if (service && service->is_ready()) {
- // Now load the manifest-specified background page. If service isn't
- // ready, then the background page will be loaded from the
- // EXTENSIONS_READY callback.
- LoadBackgroundContents(profile,
- BackgroundInfo::GetBackgroundURL(extension),
- base::ASCIIToUTF16("background"),
- base::UTF8ToUTF16(extension->id()));
- }
- }
-
- // Close the crash notification balloon for the app/extension, if any.
- ScheduleCloseBalloon(extension->id());
- SendChangeNotification(profile);
- break;
- }
case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED:
case chrome::NOTIFICATION_BACKGROUND_CONTENTS_TERMINATED: {
Profile* profile = content::Source<Profile>(source).ptr();
@@ -462,55 +417,85 @@ void BackgroundContentsService::Observe(
}
break;
}
- case chrome::NOTIFICATION_EXTENSION_UNLOADED_DEPRECATED:
- switch (content::Details<UnloadedExtensionInfo>(details)->reason) {
- case UnloadedExtensionInfo::REASON_DISABLE: // Fall through.
- case UnloadedExtensionInfo::REASON_TERMINATE: // Fall through.
- case UnloadedExtensionInfo::REASON_UNINSTALL: // Fall through.
- case UnloadedExtensionInfo::REASON_BLACKLIST: // Fall through.
- case UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN:
- ShutdownAssociatedBackgroundContents(base::ASCIIToUTF16(
- content::Details<UnloadedExtensionInfo>(details)->
- extension->id()));
- SendChangeNotification(content::Source<Profile>(source).ptr());
- break;
- case UnloadedExtensionInfo::REASON_UPDATE: {
- // If there is a manifest specified background page, then shut it down
- // here, since if the updated extension still has the background page,
- // then it will be loaded from LOADED callback. Otherwise, leave
- // BackgroundContents in place.
- // We don't call SendChangeNotification here - it will be generated
- // from the LOADED callback.
- const Extension* extension =
- content::Details<UnloadedExtensionInfo>(details)->extension;
- if (BackgroundInfo::HasBackgroundPage(extension)) {
- ShutdownAssociatedBackgroundContents(
- base::ASCIIToUTF16(extension->id()));
- }
- break;
- }
- default:
- NOTREACHED();
- ShutdownAssociatedBackgroundContents(base::ASCIIToUTF16(
- content::Details<UnloadedExtensionInfo>(details)->
- extension->id()));
- break;
- }
- break;
- case chrome::NOTIFICATION_EXTENSION_UNINSTALLED_DEPRECATED: {
- // Close the crash notification balloon for the app/extension, if any.
- ScheduleCloseBalloon(
- content::Details<const Extension>(details).ptr()->id());
+ default:
+ NOTREACHED();
break;
+ }
+}
+
+void BackgroundContentsService::OnExtensionLoaded(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension) {
+ Profile* profile = Profile::FromBrowserContext(browser_context);
+ if (extension->is_hosted_app() &&
+ BackgroundInfo::HasBackgroundPage(extension)) {
+ // If there is a background page specified in the manifest for a hosted
+ // app, then blow away registered urls in the pref.
+ ShutdownAssociatedBackgroundContents(base::ASCIIToUTF16(extension->id()));
+
+ ExtensionService* service =
+ extensions::ExtensionSystem::Get(browser_context)->extension_service();
+ if (service && service->is_ready()) {
+ // Now load the manifest-specified background page. If service isn't
+ // ready, then the background page will be loaded from the
+ // EXTENSIONS_READY callback.
+ LoadBackgroundContents(profile,
+ BackgroundInfo::GetBackgroundURL(extension),
+ base::ASCIIToUTF16("background"),
+ base::UTF8ToUTF16(extension->id()));
}
+ }
+
+ // Close the crash notification balloon for the app/extension, if any.
+ ScheduleCloseBalloon(extension->id());
+ SendChangeNotification(profile);
+}
+void BackgroundContentsService::OnExtensionUnloaded(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UnloadedExtensionInfo::Reason reason) {
+ switch (reason) {
+ case UnloadedExtensionInfo::REASON_DISABLE: // Fall through.
+ case UnloadedExtensionInfo::REASON_TERMINATE: // Fall through.
+ case UnloadedExtensionInfo::REASON_UNINSTALL: // Fall through.
+ case UnloadedExtensionInfo::REASON_BLACKLIST: // Fall through.
+ case UnloadedExtensionInfo::REASON_PROFILE_SHUTDOWN:
+ ShutdownAssociatedBackgroundContents(base::ASCIIToUTF16(extension->id()));
+ SendChangeNotification(Profile::FromBrowserContext(browser_context));
+ break;
+ case UnloadedExtensionInfo::REASON_UPDATE: {
+ // If there is a manifest specified background page, then shut it down
+ // here, since if the updated extension still has the background page,
+ // then it will be loaded from LOADED callback. Otherwise, leave
+ // BackgroundContents in place.
+ // We don't call SendChangeNotification here - it will be generated
+ // from the LOADED callback.
+ if (BackgroundInfo::HasBackgroundPage(extension)) {
+ ShutdownAssociatedBackgroundContents(
+ base::ASCIIToUTF16(extension->id()));
+ }
+ break;
+ }
default:
NOTREACHED();
+ ShutdownAssociatedBackgroundContents(base::ASCIIToUTF16(extension->id()));
break;
}
}
+void BackgroundContentsService::OnExtensionUninstalled(
+ content::BrowserContext* browser_context,
+ const extensions::Extension* extension,
+ extensions::UninstallReason reason) {
+ // Make sure the extension-crash balloons are removed when the extension is
+ // uninstalled/reloaded. We cannot do this from UNLOADED since a crashed
+ // extension is unloaded immediately after the crash, not when user reloads or
+ // uninstalls the extension.
+ ScheduleCloseBalloon(extension->id());
+}
+
void BackgroundContentsService::RestartForceInstalledExtensionOnCrash(
const Extension* extension,
Profile* profile) {

Powered by Google App Engine
This is Rietveld 408576698