Bug 1379786, part 5 - Call GetIsSystemPrincipal() rather than keeping alive some refs to the sec man in XUL template code. r=mrbkap draft
authorAndrew McCreight <continuation@gmail.com>
Mon, 10 Jul 2017 15:12:51 -0700
changeset 609158 3d90a0f90ef9157c946bb26fcddc60c81abc3063
parent 609157 3feb90bcd8892709476aac6e342cc2975aac5a0f
child 637522 1123a7362a771bdc2bb5dfd90956649f7283270f
push id68525
push userbmo:continuation@gmail.com
push dateFri, 14 Jul 2017 22:48:28 +0000
reviewersmrbkap
bugs1379786
milestone56.0a1
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
dom/xul/templates/nsXULTemplateBuilder.cpp
dom/xul/templates/nsXULTemplateBuilder.h
dom/xul/templates/nsXULTreeBuilder.cpp
--- 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)