Bug 1473631: Part 10 - Replace pref observers with callbacks in ScriptSecurityManager. r?njn
MozReview-Commit-ID: COEgATfeEj
--- a/caps/nsScriptSecurityManager.cpp
+++ b/caps/nsScriptSecurityManager.cpp
@@ -41,17 +41,16 @@
#include "nsIFileURL.h"
#include "nsIZipReader.h"
#include "nsIScriptGlobalObject.h"
#include "nsPIDOMWindow.h"
#include "nsIDocShell.h"
#include "nsIPrompt.h"
#include "nsIWindowWatcher.h"
#include "nsIConsoleService.h"
-#include "nsIObserverService.h"
#include "nsIOService.h"
#include "nsIContent.h"
#include "nsDOMJSUtils.h"
#include "nsAboutProtocolUtils.h"
#include "nsIClassInfo.h"
#include "nsIURIFixup.h"
#include "nsCDefaultURIFixup.h"
#include "nsIChromeRegistry.h"
@@ -456,18 +455,17 @@ nsScriptSecurityManager::IsSystemPrincip
/////////////////////////////
// nsScriptSecurityManager //
/////////////////////////////
////////////////////////////////////
// Methods implementing ISupports //
////////////////////////////////////
NS_IMPL_ISUPPORTS(nsScriptSecurityManager,
- nsIScriptSecurityManager,
- nsIObserver)
+ nsIScriptSecurityManager)
///////////////////////////////////////////////////
// Methods implementing nsIScriptSecurityManager //
///////////////////////////////////////////////////
///////////////// Security Checks /////////////////
bool
@@ -1346,39 +1344,28 @@ nsScriptSecurityManager::CanGetService(J
nsAutoCString errorMsg("Permission denied to get service. CID=");
char cidStr[NSID_LENGTH];
aCID.ToProvidedString(cidStr);
errorMsg.Append(cidStr);
SetPendingExceptionASCII(cx, errorMsg.get());
return NS_ERROR_DOM_XPCONNECT_ACCESS_DENIED;
}
-/////////////////////////////////////
-// Method implementing nsIObserver //
-/////////////////////////////////////
const char sJSEnabledPrefName[] = "javascript.enabled";
const char sFileOriginPolicyPrefName[] =
"security.fileuri.strict_origin_policy";
static const char* kObservedPrefs[] = {
sJSEnabledPrefName,
sFileOriginPolicyPrefName,
"capability.policy.",
nullptr
};
-NS_IMETHODIMP
-nsScriptSecurityManager::Observe(nsISupports* aObject, const char* aTopic,
- const char16_t* aMessage)
-{
- ScriptSecurityPrefChanged();
- return NS_OK;
-}
-
/////////////////////////////////////////////
// Constructor, Destructor, Initialization //
/////////////////////////////////////////////
nsScriptSecurityManager::nsScriptSecurityManager(void)
: mPrefInitialized(false)
, mIsJavaScriptEnabled(false)
{
static_assert(sizeof(intptr_t) == sizeof(void*),
@@ -1415,17 +1402,20 @@ nsresult nsScriptSecurityManager::Init()
return NS_OK;
}
static StaticRefPtr<nsScriptSecurityManager> gScriptSecMan;
nsScriptSecurityManager::~nsScriptSecurityManager(void)
{
- Preferences::RemoveObservers(this, kObservedPrefs);
+ Preferences::UnregisterPrefixCallbacks(
+ PREF_CHANGE_METHOD(nsScriptSecurityManager::ScriptSecurityPrefChanged),
+ kObservedPrefs,
+ this);
if (mDomainPolicy) {
mDomainPolicy->Deactivate();
}
// ContentChild might hold a reference to the domain policy,
// and it might release it only after the security manager is
// gone. But we can still assert this for the main process.
MOZ_ASSERT_IF(XRE_IsParentProcess(),
!mDomainPolicy);
@@ -1495,17 +1485,17 @@ uint32_t SkipUntil(const nsCString& str,
{
while (base < str.Length() && !Predicate::Test(str[base])) {
++base;
}
return base;
}
inline void
-nsScriptSecurityManager::ScriptSecurityPrefChanged()
+nsScriptSecurityManager::ScriptSecurityPrefChanged(const char* aPref)
{
MOZ_ASSERT(mPrefInitialized);
mIsJavaScriptEnabled =
Preferences::GetBool(sJSEnabledPrefName, mIsJavaScriptEnabled);
sStrictFileOriginPolicy =
Preferences::GetBool(sFileOriginPolicyPrefName, false);
mFileURIWhitelist.reset();
}
@@ -1552,17 +1542,20 @@ nsScriptSecurityManager::InitPrefs()
NS_ENSURE_TRUE(branch, NS_ERROR_FAILURE);
mPrefInitialized = true;
// Set the initial value of the "javascript.enabled" prefs
ScriptSecurityPrefChanged();
// set observer callbacks in case the value of the prefs change
- Preferences::AddStrongObservers(this, kObservedPrefs);
+ Preferences::RegisterPrefixCallbacks(
+ PREF_CHANGE_METHOD(nsScriptSecurityManager::ScriptSecurityPrefChanged),
+ kObservedPrefs,
+ this);
OriginAttributes::InitPrefs();
return NS_OK;
}
NS_IMETHODIMP
nsScriptSecurityManager::GetDomainPolicyActive(bool *aRv)
--- a/caps/nsScriptSecurityManager.h
+++ b/caps/nsScriptSecurityManager.h
@@ -7,17 +7,16 @@
#ifndef nsScriptSecurityManager_h__
#define nsScriptSecurityManager_h__
#include "nsIScriptSecurityManager.h"
#include "mozilla/Maybe.h"
#include "nsIPrincipal.h"
#include "nsCOMPtr.h"
-#include "nsIObserver.h"
#include "nsServiceManagerUtils.h"
#include "nsStringFwd.h"
#include "plstr.h"
#include "js/TypeDecls.h"
#include <stdint.h>
class nsIIOService;
@@ -30,27 +29,25 @@ class OriginAttributes;
/////////////////////////////
// nsScriptSecurityManager //
/////////////////////////////
#define NS_SCRIPTSECURITYMANAGER_CID \
{ 0x7ee2a4c0, 0x4b93, 0x17d3, \
{ 0xba, 0x18, 0x00, 0x60, 0xb0, 0xf1, 0x99, 0xa2 }}
-class nsScriptSecurityManager final : public nsIScriptSecurityManager,
- public nsIObserver
+class nsScriptSecurityManager final : public nsIScriptSecurityManager
{
public:
static void Shutdown();
NS_DEFINE_STATIC_CID_ACCESSOR(NS_SCRIPTSECURITYMANAGER_CID)
NS_DECL_ISUPPORTS
NS_DECL_NSISCRIPTSECURITYMANAGER
- NS_DECL_NSIOBSERVER
static nsScriptSecurityManager*
GetScriptSecurityManager();
// Invoked exactly once, by XPConnect.
static void InitStatics();
static already_AddRefed<SystemPrincipal>
@@ -94,18 +91,18 @@ private:
JSPrincipalsSubsume(JSPrincipals *first, JSPrincipals *second);
nsresult
Init();
nsresult
InitPrefs();
- inline void
- ScriptSecurityPrefChanged();
+ void
+ ScriptSecurityPrefChanged(const char* aPref = nullptr);
inline void
AddSitesToFileURIWhitelist(const nsCString& aSiteList);
nsresult GetChannelResultPrincipal(nsIChannel* aChannel,
nsIPrincipal** aPrincipal,
bool aIgnoreSandboxing);