From b4b208fe70a3bea7c6e397a6cb15c8899e17210c Mon Sep 17 00:00:00 2001 From: Nicholas Nethercote Date: Thu, 16 Nov 2017 09:05:43 +1100 Subject: [PATCH] Bug 1419648 - Remove and inline PREF_{LockPref,UnlockPref,PrefIsLocked}(). r=glandium MozReview-Commit-ID: 7HatftTQwHr --HG-- extra : rebase_source : 686cec1ece58dafb2227819db308c17f6d30cacd --- modules/libpref/Preferences.cpp | 117 ++++++++++++++++++-------------- modules/libpref/Preferences.h | 6 ++ 2 files changed, 71 insertions(+), 52 deletions(-) diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp index 810f78c78d17..a4eabe216bc4 100644 --- a/modules/libpref/Preferences.cpp +++ b/modules/libpref/Preferences.cpp @@ -662,34 +662,6 @@ pref_savePrefs() return savedPrefs; } -// Function that sets whether or not the preference is locked and therefore -// cannot be changed. -static nsresult -PREF_LockPref(const char* aPrefName, bool aLockIt) -{ - if (!gHashTable) { - return NS_ERROR_NOT_INITIALIZED; - } - - PrefHashEntry* pref = pref_HashTableLookup(aPrefName); - if (!pref) { - return NS_ERROR_UNEXPECTED; - } - - if (aLockIt) { - if (!pref->IsLocked()) { - pref->SetIsLocked(true); - gIsAnyPrefLocked = true; - NotifyCallbacks(aPrefName); - } - } else if (pref->IsLocked()) { - pref->SetIsLocked(false); - NotifyCallbacks(aPrefName); - } - - return NS_OK; -} - // // Hash table functions // @@ -812,22 +784,6 @@ pref_SetPref(const char* aPrefName, return NS_OK; } -// Bool function that returns whether or not the preference is locked and -// therefore cannot be changed. -static bool -PREF_PrefIsLocked(const char* aPrefName) -{ - bool result = false; - if (gIsAnyPrefLocked && gHashTable) { - PrefHashEntry* pref = pref_HashTableLookup(aPrefName); - if (pref && pref->IsLocked()) { - result = true; - } - } - - return result; -} - // Adds a node to the callback list; the position depends on aIsPriority. The // callback function will be called if anything below that node is modified. static void @@ -2142,7 +2098,7 @@ nsPrefBranch::GetComplexValue(const char* aPrefName, } else { // if there is no user (or locked) value if (!Preferences::HasUserValue(pref.get()) && - !PREF_PrefIsLocked(pref.get())) { + !Preferences::IsLocked(pref.get())) { bNeedDefault = true; } } @@ -2407,33 +2363,30 @@ nsPrefBranch::PrefHasUserValue(const char* aPrefName, bool* aRetVal) NS_IMETHODIMP nsPrefBranch::LockPref(const char* aPrefName) { - ENSURE_PARENT_PROCESS("LockPref", aPrefName); NS_ENSURE_ARG(aPrefName); const PrefName& pref = GetPrefName(aPrefName); - return PREF_LockPref(pref.get(), true); + return Preferences::Lock(pref.get()); } NS_IMETHODIMP nsPrefBranch::PrefIsLocked(const char* aPrefName, bool* aRetVal) { - ENSURE_PARENT_PROCESS("PrefIsLocked", aPrefName); NS_ENSURE_ARG_POINTER(aRetVal); NS_ENSURE_ARG(aPrefName); const PrefName& pref = GetPrefName(aPrefName); - *aRetVal = PREF_PrefIsLocked(pref.get()); + *aRetVal = Preferences::IsLocked(pref.get()); return NS_OK; } NS_IMETHODIMP nsPrefBranch::UnlockPref(const char* aPrefName) { - ENSURE_PARENT_PROCESS("UnlockPref", aPrefName); NS_ENSURE_ARG(aPrefName); const PrefName& pref = GetPrefName(aPrefName); - return PREF_LockPref(pref.get(), false); + return Preferences::Unlock(pref.get()); } NS_IMETHODIMP @@ -4369,7 +4322,7 @@ Preferences::InitInitialObjects() Preferences::SetBoolInAnyProcess( kTelemetryPref, false, PrefValueKind::Default); } - PREF_LockPref(kTelemetryPref, true); + Preferences::LockInAnyProcess(kTelemetryPref); #endif // MOZ_WIDGET_ANDROID NS_CreateServicesFromCategory(NS_PREFSERVICE_APPDEFAULTS_TOPIC_ID, @@ -4579,6 +4532,66 @@ Preferences::SetComplex(const char* aPrefName, return GetRootBranch(aKind)->SetComplexValue(aPrefName, aType, aValue); } +/* static */ nsresult +Preferences::LockInAnyProcess(const char* aPrefName) +{ + NS_ENSURE_TRUE(InitStaticMembers(), NS_ERROR_NOT_AVAILABLE); + + PrefHashEntry* pref = pref_HashTableLookup(aPrefName); + if (!pref) { + return NS_ERROR_UNEXPECTED; + } + + if (!pref->IsLocked()) { + pref->SetIsLocked(true); + gIsAnyPrefLocked = true; + NotifyCallbacks(aPrefName); + } + + return NS_OK; +} + +/* static */ nsresult +Preferences::Lock(const char* aPrefName) +{ + ENSURE_PARENT_PROCESS("Lock", aPrefName); + return Preferences::LockInAnyProcess(aPrefName); +} + +/* static */ nsresult +Preferences::Unlock(const char* aPrefName) +{ + ENSURE_PARENT_PROCESS("Unlock", aPrefName); + NS_ENSURE_TRUE(InitStaticMembers(), NS_ERROR_NOT_AVAILABLE); + + PrefHashEntry* pref = pref_HashTableLookup(aPrefName); + if (!pref) { + return NS_ERROR_UNEXPECTED; + } + + if (pref->IsLocked()) { + pref->SetIsLocked(false); + NotifyCallbacks(aPrefName); + } + + return NS_OK; +} + +/* static */ bool +Preferences::IsLocked(const char* aPrefName) +{ + NS_ENSURE_TRUE(InitStaticMembers(), false); + + if (gIsAnyPrefLocked) { + PrefHashEntry* pref = pref_HashTableLookup(aPrefName); + if (pref && pref->IsLocked()) { + return true; + } + } + + return false; +} + /* static */ nsresult Preferences::ClearUserInAnyProcess(const char* aPrefName) { diff --git a/modules/libpref/Preferences.h b/modules/libpref/Preferences.h index c202b8c86b55..3496187f250e 100644 --- a/modules/libpref/Preferences.h +++ b/modules/libpref/Preferences.h @@ -237,6 +237,10 @@ public: nsISupports* aValue, PrefValueKind aKind = PrefValueKind::User); + static nsresult Lock(const char* aPrefName); + static nsresult Unlock(const char* aPrefName); + static bool IsLocked(const char* aPrefName); + // Clears user set pref. Fails if run outside the parent process. static nsresult ClearUser(const char* aPrefName); @@ -429,6 +433,8 @@ private: static nsresult ClearUserInAnyProcess(const char* aPrefName); + static nsresult LockInAnyProcess(const char* aPrefName); + static nsresult RegisterCallback(PrefChangedFunc aCallback, const char* aPref, void* aClosure,