Make sure to always have a principal for a document; fall back to a null

principal if all else fails.  Bug 327246, r+sr=jst
This commit is contained in:
bzbarsky%mit.edu 2006-04-03 21:20:02 +00:00
parent c4f9fa3841
commit 3cb291fd96
2 changed files with 18 additions and 3 deletions

View File

@ -51,6 +51,7 @@
#include "nsContentUtils.h"
#include "nsReadableUtils.h"
#include "nsLayoutAtoms.h"
#include "nsComponentManagerUtils.h"
PRUint32 nsNodeInfoManager::gNodeManagerCount;
@ -114,6 +115,7 @@ nsNodeInfoManager::~nsNodeInfoManager()
nsNodeInfo::ClearCache();
}
// Note: mPrincipal may be null here if we never got inited correctly
NS_IF_RELEASE(mPrincipal);
#ifdef DEBUG_jst
@ -153,6 +155,14 @@ nsNodeInfoManager::Init(nsIDocument *aDocument)
{
NS_ENSURE_TRUE(mNodeInfoHash, NS_ERROR_OUT_OF_MEMORY);
NS_PRECONDITION(!mPrincipal,
"Being inited when we already have a principal?");
nsresult rv = CallCreateInstance("@mozilla.org/nullprincipal;1",
&mPrincipal);
NS_ENSURE_TRUE(mPrincipal, rv);
mDefaultPrincipal = mPrincipal;
mDocument = aDocument;
return NS_OK;
@ -300,8 +310,11 @@ nsNodeInfoManager::GetDocumentNodeInfo()
void
nsNodeInfoManager::SetDocumentPrincipal(nsIPrincipal *aPrincipal)
{
NS_IF_RELEASE(mPrincipal);
NS_IF_ADDREF(mPrincipal = aPrincipal);
NS_RELEASE(mPrincipal);
if (!aPrincipal) {
aPrincipal = mDefaultPrincipal;
}
NS_ADDREF(mPrincipal = aPrincipal);
}
void

View File

@ -151,7 +151,9 @@ private:
PLHashTable *mNodeInfoHash;
nsIDocument *mDocument; // WEAK
nsIPrincipal *mPrincipal; // STRONG, but not nsCOMPtr to avoid include hell
// while inlining of GetPrincipal()
// while inlining of GetPrincipal(). Never null
// after Init() succeeds.
nsCOMPtr<nsIPrincipal> mDefaultPrincipal; // Never null after Init() succeeds
nsINodeInfo *mTextNodeInfo; // WEAK to avoid circular ownership
nsINodeInfo *mCommentNodeInfo; // WEAK to avoid circular ownership
nsINodeInfo *mDocumentNodeInfo; // WEAK to avoid circular ownership