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

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

Issue 10298002: No longer start BG mode until a BackgroundContents is loaded (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Prospective fix for cros test failures. Created 8 years, 8 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 150f8a94b01f44d0e8f8b7d2ff97a6d56ef280aa..4d9ebfe30c125b3e23800bd85eb01a071ab645f0 100644
--- a/chrome/browser/background/background_contents_service.cc
+++ b/chrome/browser/background/background_contents_service.cc
@@ -216,19 +216,24 @@ void BackgroundContentsService::Observe(
const content::NotificationSource& source,
const content::NotificationDetails& details) {
switch (type) {
- case chrome::NOTIFICATION_EXTENSIONS_READY:
- LoadBackgroundContentsFromManifests(
- content::Source<Profile>(source).ptr());
- LoadBackgroundContentsFromPrefs(content::Source<Profile>(source).ptr());
+ case chrome::NOTIFICATION_EXTENSIONS_READY: {
+ Profile* profile = content::Source<Profile>(source).ptr();
+ LoadBackgroundContentsFromManifests(profile);
+ LoadBackgroundContentsFromPrefs(profile);
+ SendChangeNotification(profile);
break;
+ }
case chrome::NOTIFICATION_BACKGROUND_CONTENTS_DELETED:
BackgroundContentsShutdown(
content::Details<BackgroundContents>(details).ptr());
+ SendChangeNotification(content::Source<Profile>(source).ptr());
break;
case chrome::NOTIFICATION_BACKGROUND_CONTENTS_CLOSED:
DCHECK(IsTracked(content::Details<BackgroundContents>(details).ptr()));
UnregisterBackgroundContents(
content::Details<BackgroundContents>(details).ptr());
+ // CLOSED is always followed by a DELETED notification so we'll send our
+ // change notification there.
break;
case chrome::NOTIFICATION_BACKGROUND_CONTENTS_NAVIGATED: {
DCHECK(IsTracked(content::Details<BackgroundContents>(details).ptr()));
@@ -272,6 +277,7 @@ void BackgroundContentsService::Observe(
// Remove any "This extension has crashed" balloons.
ScheduleCloseBalloon(extension->id());
+ SendChangeNotification(profile);
break;
}
case chrome::NOTIFICATION_EXTENSION_PROCESS_TERMINATED:
@@ -311,12 +317,15 @@ void BackgroundContentsService::Observe(
ShutdownAssociatedBackgroundContents(
ASCIIToUTF16(content::Details<UnloadedExtensionInfo>(details)->
extension->id()));
+ SendChangeNotification(content::Source<Profile>(source).ptr());
break;
case extension_misc::UNLOAD_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 (extension->has_background_page())
@@ -376,6 +385,13 @@ void BackgroundContentsService::LoadBackgroundContentsFromPrefs(
}
}
+void BackgroundContentsService::SendChangeNotification(Profile* profile) {
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_BACKGROUND_CONTENTS_SERVICE_CHANGED,
+ content::Source<Profile>(profile),
+ content::Details<BackgroundContentsService>(this));
+}
+
void BackgroundContentsService::LoadBackgroundContentsForExtension(
Profile* profile,
const std::string& extension_id) {
@@ -483,6 +499,9 @@ BackgroundContents* BackgroundContentsService::CreateBackgroundContents(
chrome::NOTIFICATION_BACKGROUND_CONTENTS_OPENED,
content::Source<Profile>(profile),
content::Details<BackgroundContentsOpenedDetails>(&details));
+
+ // A new background contents has been created - notify our listeners.
+ SendChangeNotification(profile);
return contents;
}
@@ -510,6 +529,16 @@ void BackgroundContentsService::RegisterBackgroundContents(
pref->SetWithoutPathExpansion(UTF16ToUTF8(appid), dict);
}
+bool BackgroundContentsService::HasRegisteredBackgroundContents(
+ const string16& app_id) {
+ if (!prefs_)
+ return false;
+ std::string app = UTF16ToUTF8(app_id);
+ const DictionaryValue* contents =
+ prefs_->GetDictionary(prefs::kRegisteredBackgroundContents);
+ return contents->HasKey(app);
+}
+
void BackgroundContentsService::UnregisterBackgroundContents(
BackgroundContents* background_contents) {
if (!prefs_)
« no previous file with comments | « chrome/browser/background/background_contents_service.h ('k') | chrome/browser/background/background_mode_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698