зеркало из https://github.com/mozilla/pjs.git
Bug 754202 - Remove mContextPrincipal usage from within nsScriptSecurityManager. r=mrbkap
This commit is contained in:
Родитель
bdd3f52264
Коммит
5111388eb2
|
@ -553,17 +553,6 @@ private:
|
|||
PrintPolicyDB();
|
||||
#endif
|
||||
|
||||
struct ContextPrincipal {
|
||||
ContextPrincipal(ContextPrincipal *next, JSContext *cx,
|
||||
JSStackFrame *fp, nsIPrincipal *principal)
|
||||
: mNext(next), mCx(cx), mFp(fp), mPrincipal(principal) {}
|
||||
|
||||
ContextPrincipal *mNext;
|
||||
JSContext *mCx;
|
||||
JSStackFrame *mFp;
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
};
|
||||
|
||||
// JS strings we need to clean up on shutdown
|
||||
static jsid sEnabledID;
|
||||
|
||||
|
@ -576,7 +565,6 @@ private:
|
|||
|
||||
nsCOMPtr<nsIPrincipal> mSystemPrincipal;
|
||||
nsCOMPtr<nsIPrincipal> mSystemCertificate;
|
||||
ContextPrincipal *mContextPrincipals;
|
||||
nsInterfaceHashtable<PrincipalKey, nsIPrincipal> mPrincipals;
|
||||
bool mPrefInitialized;
|
||||
bool mIsJavaScriptEnabled;
|
||||
|
|
|
@ -2222,24 +2222,10 @@ nsScriptSecurityManager::GetPrincipalAndFrame(JSContext *cx,
|
|||
|
||||
if (cx)
|
||||
{
|
||||
JSStackFrame *target = nsnull;
|
||||
nsIPrincipal *targetPrincipal = nsnull;
|
||||
for (ContextPrincipal *cp = mContextPrincipals; cp; cp = cp->mNext)
|
||||
{
|
||||
if (cp->mCx == cx)
|
||||
{
|
||||
target = cp->mFp;
|
||||
targetPrincipal = cp->mPrincipal;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Get principals from innermost JavaScript frame.
|
||||
JSStackFrame *fp = nsnull; // tell JS_FrameIterator to start at innermost
|
||||
for (fp = JS_FrameIterator(cx, &fp); fp; fp = JS_FrameIterator(cx, &fp))
|
||||
{
|
||||
if (fp == target)
|
||||
break;
|
||||
nsIPrincipal* result = GetFramePrincipal(cx, fp, rv);
|
||||
if (result)
|
||||
{
|
||||
|
@ -2249,25 +2235,6 @@ nsScriptSecurityManager::GetPrincipalAndFrame(JSContext *cx,
|
|||
}
|
||||
}
|
||||
|
||||
// If targetPrincipal is non-null, then it means that someone wants to
|
||||
// clamp the principals on this context to this principal. Note that
|
||||
// fp might not equal target here (fp might be null) because someone
|
||||
// could have set aside the frame chain in the meantime.
|
||||
if (targetPrincipal)
|
||||
{
|
||||
if (fp && fp == target)
|
||||
{
|
||||
*frameResult = fp;
|
||||
}
|
||||
else
|
||||
{
|
||||
JSStackFrame *inner = nsnull;
|
||||
*frameResult = JS_FrameIterator(cx, &inner);
|
||||
}
|
||||
|
||||
return targetPrincipal;
|
||||
}
|
||||
|
||||
nsIScriptContextPrincipal* scp =
|
||||
GetScriptContextPrincipalFromJSContext(cx);
|
||||
if (scp)
|
||||
|
@ -2452,27 +2419,11 @@ nsScriptSecurityManager::IsCapabilityEnabled(const char *capability,
|
|||
JSContext *cx = GetCurrentJSContext();
|
||||
fp = cx ? JS_FrameIterator(cx, &fp) : nsnull;
|
||||
|
||||
JSStackFrame *target = nsnull;
|
||||
nsIPrincipal *targetPrincipal = nsnull;
|
||||
for (ContextPrincipal *cp = mContextPrincipals; cp; cp = cp->mNext)
|
||||
{
|
||||
if (cp->mCx == cx)
|
||||
{
|
||||
target = cp->mFp;
|
||||
targetPrincipal = cp->mPrincipal;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fp)
|
||||
{
|
||||
// No script code on stack. If we had a principal pushed for this
|
||||
// context and fp is null, then we use that principal. Otherwise, we
|
||||
// don't have enough information and have to allow execution.
|
||||
|
||||
*result = (targetPrincipal && !target)
|
||||
? (targetPrincipal == mSystemPrincipal)
|
||||
: true;
|
||||
// No script code on stack. We don't have enough information and have
|
||||
// to allow execution.
|
||||
*result = true;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -2516,7 +2467,7 @@ nsScriptSecurityManager::IsCapabilityEnabled(const char *capability,
|
|||
// the JS engine via JS_EvaluateScript or similar APIs.
|
||||
if (JS_IsGlobalFrame(cx, fp))
|
||||
break;
|
||||
} while (fp != target && (fp = JS_FrameIterator(cx, &fp)) != nsnull);
|
||||
} while ((fp = JS_FrameIterator(cx, &fp)) != nsnull);
|
||||
|
||||
if (!previousPrincipal)
|
||||
{
|
||||
|
@ -3000,7 +2951,6 @@ nsScriptSecurityManager::nsScriptSecurityManager(void)
|
|||
: mOriginToPolicyMap(nsnull),
|
||||
mDefaultPolicy(nsnull),
|
||||
mCapabilities(nsnull),
|
||||
mContextPrincipals(nsnull),
|
||||
mPrefInitialized(false),
|
||||
mIsJavaScriptEnabled(false),
|
||||
mIsWritingPrefs(false),
|
||||
|
@ -3080,7 +3030,6 @@ jsid nsScriptSecurityManager::sEnabledID = JSID_VOID;
|
|||
nsScriptSecurityManager::~nsScriptSecurityManager(void)
|
||||
{
|
||||
Preferences::RemoveObservers(this, kObservedPrefs);
|
||||
NS_ASSERTION(!mContextPrincipals, "Leaking mContextPrincipals");
|
||||
delete mOriginToPolicyMap;
|
||||
if(mDefaultPolicy)
|
||||
mDefaultPolicy->Drop();
|
||||
|
|
Загрузка…
Ссылка в новой задаче