Bug 795275 - Clean up isSystemOnlyAccessPermitted. r=mrbkap

A lot of this stuff can be simplified now, and we can stop using the deprecated APIs.
This commit is contained in:
Bobby Holley 2012-10-03 11:44:18 +02:00
parent d145d82982
commit 5d4e37827c

View File

@ -260,40 +260,18 @@ AccessCheck::isCrossOriginAccessPermitted(JSContext *cx, JSObject *wrapper, jsid
bool bool
AccessCheck::isSystemOnlyAccessPermitted(JSContext *cx) AccessCheck::isSystemOnlyAccessPermitted(JSContext *cx)
{ {
nsIScriptSecurityManager *ssm = XPCWrapper::GetSecurityManager(); MOZ_ASSERT(cx == nsContentUtils::GetCurrentJSContext());
if (!ssm) { if (callerIsChrome())
return true; return true;
}
JSStackFrame *fp;
nsIPrincipal *principal = ssm->GetCxSubjectPrincipalAndFrame(cx, &fp);
if (!principal) {
return false;
}
JSScript *script = nullptr;
if (fp) {
script = JS_GetFrameScript(cx, fp);
} else {
if (!JS_DescribeScriptedCaller(cx, &script, nullptr)) {
// No code at all is running. So we must be arriving here as the result
// of C++ code asking us to do something. Allow access.
return true;
}
}
bool privileged;
if (NS_SUCCEEDED(ssm->IsSystemPrincipal(principal, &privileged)) &&
privileged) {
return true;
}
// Allow any code loaded from chrome://global/ to touch us, even if it was // Allow any code loaded from chrome://global/ to touch us, even if it was
// cloned into a less privileged context. // cloned into a less privileged context.
JSScript *script;
if (!JS_DescribeScriptedCaller(cx, &script, nullptr) || !script)
return false;
static const char prefix[] = "chrome://global/"; static const char prefix[] = "chrome://global/";
const char *filename; const char *filename;
if (script && if ((filename = JS_GetScriptFilename(cx, script)) &&
(filename = JS_GetScriptFilename(cx, script)) &&
!strncmp(filename, prefix, ArrayLength(prefix) - 1)) { !strncmp(filename, prefix, ArrayLength(prefix) - 1)) {
return true; return true;
} }