Bug 1415799 - Inline and remove Preferences::Init(). r=glandium
It has a single call site.
MozReview-Commit-ID: A96MRRa3W5N
--- a/modules/libpref/Preferences.cpp
+++ b/modules/libpref/Preferences.cpp
@@ -3550,36 +3550,87 @@ public:
NS_IMETHOD Run() override
{
return RegisterStrongMemoryReporter(new PreferenceServiceReporter());
}
};
} // namespace
+static InfallibleTArray<Preferences::PrefSetting>* gInitPrefs;
+
/* static */ already_AddRefed<Preferences>
Preferences::GetInstanceForService()
{
if (sPreferences) {
return do_AddRef(sPreferences);
}
if (sShutdown) {
gCacheDataDesc = "shutting down in GetInstanceForService()";
return nullptr;
}
sPreferences = new Preferences();
- Result<Ok, const char*> res = sPreferences->Init();
+
+ MOZ_ASSERT(!gHashTable);
+ gHashTable = new PLDHashTable(
+ &pref_HashTableOps, sizeof(PrefHashEntry), PREF_HASHTABLE_INITIAL_LENGTH);
+
+ Result<Ok, const char*> res = pref_InitInitialObjects();
if (res.isErr()) {
sPreferences = nullptr;
gCacheDataDesc = res.unwrapErr();
return nullptr;
}
+ if (XRE_IsContentProcess()) {
+ MOZ_ASSERT(gInitPrefs);
+ for (unsigned int i = 0; i < gInitPrefs->Length(); i++) {
+ Preferences::SetPreference(gInitPrefs->ElementAt(i));
+ }
+ delete gInitPrefs;
+ gInitPrefs = nullptr;
+
+ } else {
+ // Check if there is a deployment configuration file. If so, set up the
+ // pref config machinery, which will actually read the file.
+ nsAutoCString lockFileName;
+ nsresult rv =
+ PREF_GetCStringPref("general.config.filename", lockFileName, false);
+ if (NS_SUCCEEDED(rv)) {
+ NS_CreateServicesFromCategory(
+ "pref-config-startup",
+ static_cast<nsISupports*>(static_cast<void*>(sPreferences)),
+ "pref-config-startup");
+ }
+
+ nsCOMPtr<nsIObserverService> observerService =
+ mozilla::services::GetObserverService();
+ if (!observerService) {
+ sPreferences = nullptr;
+ gCacheDataDesc = "GetObserverService() failed (1)";
+ return nullptr;
+ }
+
+ observerService->AddObserver(
+ sPreferences, "profile-before-change-telemetry", true);
+ rv =
+ observerService->AddObserver(sPreferences, "profile-before-change", true);
+
+ observerService->AddObserver(
+ sPreferences, "suspend_process_notification", true);
+
+ if (NS_FAILED(rv)) {
+ sPreferences = nullptr;
+ gCacheDataDesc = "AddObserver(\"profile-before-change\") failed";
+ return nullptr;
+ }
+ }
+
gCacheData = new nsTArray<nsAutoPtr<CacheData>>();
gCacheDataDesc = "set by GetInstanceForService()";
// Preferences::GetInstanceForService() can be called from GetService(), and
// RegisterStrongMemoryReporter calls GetService(nsIMemoryReporter). To
// avoid a potential recursive GetService() call, we can't register the
// memory reporter here; instead, do it off a runnable.
RefPtr<AddPreferencesMemoryReporterRunnable> runnable =
@@ -3668,78 +3719,22 @@ NS_INTERFACE_MAP_BEGIN(Preferences)
NS_INTERFACE_MAP_ENTRY(nsIPrefBranch)
NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
NS_INTERFACE_MAP_END
//
// nsIPrefService Implementation
//
-static InfallibleTArray<Preferences::PrefSetting>* gInitPrefs;
-
/* static */ void
Preferences::SetInitPreferences(nsTArray<PrefSetting>* aPrefs)
{
gInitPrefs = new InfallibleTArray<PrefSetting>(mozilla::Move(*aPrefs));
}
-Result<Ok, const char*>
-Preferences::Init()
-{
- MOZ_ASSERT(!gHashTable);
- gHashTable = new PLDHashTable(
- &pref_HashTableOps, sizeof(PrefHashEntry), PREF_HASHTABLE_INITIAL_LENGTH);
-
- MOZ_TRY(pref_InitInitialObjects());
-
- if (XRE_IsContentProcess()) {
- MOZ_ASSERT(gInitPrefs);
- for (unsigned int i = 0; i < gInitPrefs->Length(); i++) {
- Preferences::SetPreference(gInitPrefs->ElementAt(i));
- }
- delete gInitPrefs;
- gInitPrefs = nullptr;
- return Ok();
- }
-
- nsAutoCString lockFileName;
-
- // The following is a small hack which will allow us to only load the library
- // which supports the netscape.cfg file if the preference is defined. We
- // test for the existence of the pref, set in the all.js (mozilla) or
- // all-ns.js (netscape 6), and if it exists we startup the pref config
- // category which will do the rest.
-
- nsresult rv =
- PREF_GetCStringPref("general.config.filename", lockFileName, false);
- if (NS_SUCCEEDED(rv)) {
- NS_CreateServicesFromCategory(
- "pref-config-startup",
- static_cast<nsISupports*>(static_cast<void*>(this)),
- "pref-config-startup");
- }
-
- nsCOMPtr<nsIObserverService> observerService =
- mozilla::services::GetObserverService();
- if (!observerService) {
- return Err("GetObserverService() failed (1)");
- }
-
- observerService->AddObserver(this, "profile-before-change-telemetry", true);
- rv = observerService->AddObserver(this, "profile-before-change", true);
-
- observerService->AddObserver(this, "suspend_process_notification", true);
-
- if (NS_FAILED(rv)) {
- return Err("AddObserver(\"profile-before-change\") failed");
- }
-
- return Ok();
-}
-
/* static */ void
Preferences::InitializeUserPrefs()
{
MOZ_ASSERT(!sPreferences->mCurrentFile, "Should only initialize prefs once");
// Prefs which are set before we initialize the profile are silently
// discarded. This is stupid, but there are various tests which depend on
// this behavior.
--- a/modules/libpref/Preferences.h
+++ b/modules/libpref/Preferences.h
@@ -40,21 +40,16 @@ enum pref_initPhase
#else
#define SET_PREF_PHASE(p) \
do { \
} while (0)
#endif
namespace mozilla {
-struct Ok;
-
-template<typename V, typename E>
-class Result;
-
namespace dom {
class PrefSetting;
} // namespace dom
class Preferences final
: public nsIPrefService
, public nsIObserver
, public nsIPrefBranch
@@ -65,18 +60,16 @@ public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIPREFSERVICE
NS_FORWARD_NSIPREFBRANCH(mRootBranch->)
NS_DECL_NSIOBSERVER
Preferences();
- mozilla::Result<Ok, const char*> Init();
-
// Returns true if the Preferences service is available, false otherwise.
static bool IsServiceAvailable();
// Initialize user prefs from prefs.js/user.js
static void InitializeUserPrefs();
// Returns the singleton instance which is addreffed.
static already_AddRefed<Preferences> GetInstanceForService();