NS_IMETHODIMP nsXREDirProvider::DoStartup() { if (!mProfileNotified) { nsCOMPtr<nsIObserverService> obsSvc = mozilla::services::GetObserverService(); if (!obsSvc) return NS_ERROR_FAILURE; mProfileNotified = true; /* Setup prefs before profile-do-change to be able to use them to track crashes and because we want to begin crash tracking before other code run from this notification since they may cause crashes. */ nsresult rv = mozilla::Preferences::ResetAndReadUserPrefs(); if (NS_FAILED(rv)) NS_WARNING("Failed to setup pref service."); bool safeModeNecessary = false; nsCOMPtr<nsIAppStartup> appStartup (do_GetService(NS_APPSTARTUP_CONTRACTID)); if (appStartup) { rv = appStartup->TrackStartupCrashBegin(&safeModeNecessary); if (NS_FAILED(rv) && rv != NS_ERROR_NOT_AVAILABLE) NS_WARNING("Error while beginning startup crash tracking"); if (!gSafeMode && safeModeNecessary) { appStartup->RestartInSafeMode(nsIAppStartup::eForceQuit); return NS_OK; } } static const PRUnichar kStartup[] = {'s','t','a','r','t','u','p','\0'}; obsSvc->NotifyObservers(nsnull, "profile-do-change", kStartup); // Init the Extension Manager nsCOMPtr<nsIObserver> em = do_GetService("@mozilla.org/addons/integration;1"); if (em) { em->Observe(nsnull, "addons-startup", nsnull); } else { NS_WARNING("Failed to create Addons Manager."); } LoadExtensionBundleDirectories(); obsSvc->NotifyObservers(nsnull, "load-extension-defaults", nsnull); obsSvc->NotifyObservers(nsnull, "profile-after-change", kStartup); // Any component that has registered for the profile-after-change category // should also be created at this time. (void)NS_CreateServicesFromCategory("profile-after-change", nsnull, "profile-after-change"); if (gSafeMode && safeModeNecessary) { static const PRUnichar kCrashed[] = {'c','r','a','s','h','e','d','\0'}; obsSvc->NotifyObservers(nsnull, "safemode-forced", kCrashed); } obsSvc->NotifyObservers(nsnull, "profile-initial-state", nsnull); } return NS_OK; }
NS_IMETHODIMP nsXREDirProvider::DoStartup() { if (!mProfileNotified) { nsCOMPtr<nsIObserverService> obsSvc = mozilla::services::GetObserverService(); if (!obsSvc) return NS_ERROR_FAILURE; mProfileNotified = PR_TRUE; static const PRUnichar kStartup[] = {'s','t','a','r','t','u','p','\0'}; obsSvc->NotifyObservers(nsnull, "profile-do-change", kStartup); // Init the Extension Manager nsCOMPtr<nsIObserver> em = do_GetService("@mozilla.org/addons/integration;1"); if (em) { em->Observe(nsnull, "addons-startup", nsnull); } else { NS_WARNING("Failed to create Addons Manager."); } LoadExtensionBundleDirectories(); obsSvc->NotifyObservers(nsnull, "load-extension-defaults", nsnull); obsSvc->NotifyObservers(nsnull, "profile-after-change", kStartup); // Any component that has registered for the profile-after-change category // should also be created at this time. (void)NS_CreateServicesFromCategory("profile-after-change", nsnull, "profile-after-change"); obsSvc->NotifyObservers(nsnull, "profile-initial-state", nsnull); } return NS_OK; }