Bug 1379786, part 5 - Call GetIsSystemPrincipal() rather than keeping alive some refs to the sec man in XUL template code. r=mrbkap
MozReview-Commit-ID: C2sPzrhdsrT
--- a/dom/xul/templates/nsXULTemplateBuilder.cpp
+++ b/dom/xul/templates/nsXULTemplateBuilder.cpp
@@ -82,18 +82,16 @@ using namespace mozilla;
//----------------------------------------------------------------------
//
// nsXULTemplateBuilder
//
nsrefcnt nsXULTemplateBuilder::gRefCnt = 0;
nsIRDFService* nsXULTemplateBuilder::gRDFService;
nsIRDFContainerUtils* nsXULTemplateBuilder::gRDFContainerUtils;
-nsIScriptSecurityManager* nsXULTemplateBuilder::gScriptSecurityManager;
-nsIPrincipal* nsXULTemplateBuilder::gSystemPrincipal;
nsIObserverService* nsXULTemplateBuilder::gObserverService;
LazyLogModule gXULTemplateLog("nsXULTemplateBuilder");
#define NS_QUERY_PROCESSOR_CONTRACTID_PREFIX "@mozilla.org/xul/xul-query-processor;1?name="
//----------------------------------------------------------------------
//
@@ -127,18 +125,16 @@ nsXULTemplateBuilder::DestroyMatchMap()
nsXULTemplateBuilder::~nsXULTemplateBuilder(void)
{
Uninit(true);
if (--gRefCnt == 0) {
NS_IF_RELEASE(gRDFService);
NS_IF_RELEASE(gRDFContainerUtils);
- NS_IF_RELEASE(gSystemPrincipal);
- NS_IF_RELEASE(gScriptSecurityManager);
NS_IF_RELEASE(gObserverService);
}
}
nsresult
nsXULTemplateBuilder::InitGlobals()
{
@@ -152,25 +148,16 @@ nsXULTemplateBuilder::InitGlobals()
if (NS_FAILED(rv))
return rv;
NS_DEFINE_CID(kRDFContainerUtilsCID, NS_RDFCONTAINERUTILS_CID);
rv = CallGetService(kRDFContainerUtilsCID, &gRDFContainerUtils);
if (NS_FAILED(rv))
return rv;
- rv = CallGetService(NS_SCRIPTSECURITYMANAGER_CONTRACTID,
- &gScriptSecurityManager);
- if (NS_FAILED(rv))
- return rv;
-
- rv = gScriptSecurityManager->GetSystemPrincipal(&gSystemPrincipal);
- if (NS_FAILED(rv))
- return rv;
-
rv = CallGetService(NS_OBSERVERSERVICE_CONTRACTID, &gObserverService);
if (NS_FAILED(rv))
return rv;
}
return NS_OK;
}
@@ -1367,31 +1354,30 @@ nsXULTemplateBuilder::LoadDataSourceUrls
bool* aShouldDelayBuilding)
{
// Grab the doc's principal...
nsIPrincipal *docPrincipal = aDocument->NodePrincipal();
NS_ASSERTION(docPrincipal == mRoot->NodePrincipal(),
"Principal mismatch? Which one to use?");
- bool isTrusted = false;
- nsresult rv = IsSystemPrincipal(docPrincipal, &isTrusted);
- NS_ENSURE_SUCCESS(rv, rv);
+ bool isTrusted = docPrincipal->GetIsSystemPrincipal();
// Parse datasources: they are assumed to be a whitespace
// separated list of URIs; e.g.,
//
// rdf:bookmarks rdf:history http://foo.bar.com/blah.cgi?baz=9
//
nsIURI *docurl = aDocument->GetDocumentURI();
nsCOMPtr<nsIMutableArray> uriList = do_CreateInstance(NS_ARRAY_CONTRACTID);
if (!uriList)
return NS_ERROR_FAILURE;
+ nsresult rv;
nsAutoString datasources(aDataSources);
uint32_t first = 0;
while (1) {
while (first < datasources.Length() && nsCRT::IsAsciiSpace(datasources.CharAt(first)))
++first;
if (first >= datasources.Length())
break;
@@ -2541,27 +2527,16 @@ nsXULTemplateBuilder::AddBindingsFor(nsX
property.Assign(Substring(aVariable, uint32_t(4), aVariable.Length() - 4));
if (! rule->HasBinding(rule->GetMemberVariable(), property, var))
// In the simple syntax, the binding is always from the
// member variable, through the property, to the target.
rule->AddBinding(rule->GetMemberVariable(), property, var);
}
-
-nsresult
-nsXULTemplateBuilder::IsSystemPrincipal(nsIPrincipal *principal, bool *result)
-{
- if (!gSystemPrincipal)
- return NS_ERROR_UNEXPECTED;
-
- *result = (principal == gSystemPrincipal);
- return NS_OK;
-}
-
bool
nsXULTemplateBuilder::IsActivated(nsIRDFResource *aResource)
{
for (ActivationEntry *entry = mTop;
entry != nullptr;
entry = entry->mPrevious) {
if (entry->mResource == aResource)
return true;
--- a/dom/xul/templates/nsXULTemplateBuilder.h
+++ b/dom/xul/templates/nsXULTemplateBuilder.h
@@ -373,19 +373,16 @@ public:
nsAString& aResult);
static void
SubstituteTextAppendText(nsXULTemplateBuilder* aThis, const nsAString& aText, void* aClosure);
static void
SubstituteTextReplaceVariable(nsXULTemplateBuilder* aThis, const nsAString& aVariable, void* aClosure);
- nsresult
- IsSystemPrincipal(nsIPrincipal *principal, bool *result);
-
/**
* Convenience method which gets a resource for a result. If a result
* doesn't have a resource set, it will create one from the result's id.
*/
nsresult GetResultResource(nsIXULTemplateResult* aResult,
nsIRDFResource** aResource);
protected:
--- a/dom/xul/templates/nsXULTreeBuilder.cpp
+++ b/dom/xul/templates/nsXULTreeBuilder.cpp
@@ -692,21 +692,19 @@ nsXULTreeBuilder::SetTree(nsITreeBoxObje
// If this is teardown time, then we're done.
if (!mBoxObject) {
Uninit(false);
return NS_OK;
}
NS_ENSURE_TRUE(mRoot, NS_ERROR_NOT_INITIALIZED);
// Only use the XUL store if the root's principal is trusted.
- bool isTrusted = false;
- nsresult rv = IsSystemPrincipal(mRoot->NodePrincipal(), &isTrusted);
- if (NS_SUCCEEDED(rv) && isTrusted) {
+ if (mRoot->NodePrincipal()->GetIsSystemPrincipal()) {
mLocalStore = do_GetService("@mozilla.org/xul/xulstore;1");
- if(NS_WARN_IF(!mLocalStore)){
+ if (NS_WARN_IF(!mLocalStore)) {
return NS_ERROR_NOT_INITIALIZED;
}
}
Rebuild();
EnsureSortVariables();
if (mSortVariable)