mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 10:44:56 +00:00
Bug 546857 Part 1: Fix nsDOMParser to make it useful from xpcshell tests. r=bz a=blocker
This commit is contained in:
parent
53da21b989
commit
895596ab7b
@ -134,9 +134,9 @@ interface nsIDOMParserJS : nsISupports
|
||||
/**
|
||||
* Just like nsIDOMParser.init, but callable from JS.
|
||||
*/
|
||||
void init(in nsIPrincipal principal,
|
||||
in nsIURI documentURI,
|
||||
in nsIURI baseURI);
|
||||
void init([optional] in nsIPrincipal principal,
|
||||
[optional] in nsIURI documentURI,
|
||||
[optional] in nsIURI baseURI);
|
||||
};
|
||||
|
||||
%{ C++
|
||||
|
@ -335,34 +335,41 @@ nsDOMParser::Init(nsIPrincipal* principal, nsIURI* documentURI,
|
||||
NS_ENSURE_ARG(principal || documentURI);
|
||||
|
||||
mDocumentURI = documentURI;
|
||||
|
||||
if (!mDocumentURI) {
|
||||
principal->GetURI(getter_AddRefs(mDocumentURI));
|
||||
if (!mDocumentURI) {
|
||||
// If we have the system principal, then we'll just use the null principals
|
||||
// uri.
|
||||
if (!mDocumentURI && !nsContentUtils::IsSystemPrincipal(principal)) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
}
|
||||
|
||||
mScriptHandlingObject = do_GetWeakReference(aScriptObject);
|
||||
mPrincipal = principal;
|
||||
nsIScriptSecurityManager* secMan = nsContentUtils::GetSecurityManager();
|
||||
NS_ENSURE_TRUE(secMan, NS_ERROR_NOT_AVAILABLE);
|
||||
nsresult rv;
|
||||
if (!mPrincipal) {
|
||||
nsIScriptSecurityManager* secMan = nsContentUtils::GetSecurityManager();
|
||||
NS_ENSURE_TRUE(secMan, NS_ERROR_NOT_AVAILABLE);
|
||||
rv =
|
||||
secMan->GetCodebasePrincipal(mDocumentURI, getter_AddRefs(mPrincipal));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
mOriginalPrincipal = mPrincipal;
|
||||
} else {
|
||||
mOriginalPrincipal = principal;
|
||||
PRBool isSystem;
|
||||
rv = secMan->IsSystemPrincipal(mPrincipal, &isSystem);
|
||||
if (NS_FAILED(rv) || isSystem) {
|
||||
mOriginalPrincipal = mPrincipal;
|
||||
if (nsContentUtils::IsSystemPrincipal(mPrincipal)) {
|
||||
// Don't give DOMParsers the system principal. Use a null
|
||||
// principal instead.
|
||||
mPrincipal = do_CreateInstance("@mozilla.org/nullprincipal;1", &rv);
|
||||
}
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!mDocumentURI) {
|
||||
rv = mPrincipal->GetURI(getter_AddRefs(mDocumentURI));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mBaseURI = baseURI;
|
||||
// Note: if mBaseURI is null, fine. Leave it like that; that will use the
|
||||
// documentURI as the base. Otherwise for null principals we'll get
|
||||
@ -507,7 +514,8 @@ nsDOMParser::Initialize(nsISupports* aOwner, JSContext* cx, JSObject* obj,
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMParser::Init(nsIPrincipal *principal, nsIURI *documentURI, nsIURI *baseURI)
|
||||
nsDOMParser::Init(nsIPrincipal *aPrincipal, nsIURI *aDocumentURI,
|
||||
nsIURI *aBaseURI)
|
||||
{
|
||||
AttemptedInitMarker marker(&mAttemptedInit);
|
||||
|
||||
@ -515,6 +523,19 @@ nsDOMParser::Init(nsIPrincipal *principal, nsIURI *documentURI, nsIURI *baseURI)
|
||||
NS_ENSURE_TRUE(cx, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsIScriptContext* scriptContext = GetScriptContextFromJSContext(cx);
|
||||
return Init(principal, documentURI, baseURI,
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = aPrincipal;
|
||||
|
||||
if (!principal && !aDocumentURI) {
|
||||
nsIScriptSecurityManager* secMan = nsContentUtils::GetSecurityManager();
|
||||
NS_ENSURE_TRUE(secMan, NS_ERROR_UNEXPECTED);
|
||||
|
||||
secMan->GetSubjectPrincipal(getter_AddRefs(principal));
|
||||
|
||||
// We're called from JS; there better be a subject principal, really.
|
||||
NS_ENSURE_TRUE(principal, NS_ERROR_UNEXPECTED);
|
||||
}
|
||||
|
||||
return Init(principal, aDocumentURI, aBaseURI,
|
||||
scriptContext ? scriptContext->GetGlobalObject() : nsnull);
|
||||
}
|
||||
|
@ -58,7 +58,9 @@ const nsIDOMXULElement = I.nsIDOMXULElement;
|
||||
const nsIDOMProcessingInstruction = I.nsIDOMProcessingInstruction;
|
||||
|
||||
function DOMParser() {
|
||||
return C["@mozilla.org/xmlextras/domparser;1"].createInstance(nsIDOMParser);
|
||||
var parser = C["@mozilla.org/xmlextras/domparser;1"].createInstance(nsIDOMParser);
|
||||
parser.init();
|
||||
return parser;
|
||||
}
|
||||
|
||||
var __testsDirectory = null;
|
||||
|
Loading…
Reference in New Issue
Block a user