Bug 413161: Make nsIPrincipal::Origin ignore changes to document.domain. r/sr=dveditz
git-svn-id: svn://10.0.0.236/trunk@248160 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -1068,6 +1068,40 @@ nsScriptSecurityManager::CheckSameOriginDOMProp(nsIPrincipal* aSubject,
|
||||
return NS_ERROR_DOM_PROP_ACCESS_DENIED;
|
||||
}
|
||||
|
||||
static
|
||||
nsresult
|
||||
GetPrincipalDomainOrigin(nsIPrincipal* aPrincipal,
|
||||
nsACString& aOrigin)
|
||||
{
|
||||
aOrigin.Truncate();
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
aPrincipal->GetDomain(getter_AddRefs(uri));
|
||||
if (!uri) {
|
||||
aPrincipal->GetURI(getter_AddRefs(uri));
|
||||
}
|
||||
|
||||
NS_ENSURE_TRUE(uri, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsCAutoString hostPort;
|
||||
|
||||
nsresult rv = uri->GetHostPort(hostPort);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
nsCAutoString scheme;
|
||||
rv = uri->GetScheme(scheme);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
aOrigin = scheme + NS_LITERAL_CSTRING("://") + hostPort;
|
||||
}
|
||||
else {
|
||||
// Some URIs (e.g., nsSimpleURI) don't support host. Just
|
||||
// get the full spec.
|
||||
rv = uri->GetSpec(aOrigin);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsScriptSecurityManager::LookupPolicy(nsIPrincipal* aPrincipal,
|
||||
ClassInfoData& aClassData,
|
||||
@@ -1099,9 +1133,9 @@ nsScriptSecurityManager::LookupPolicy(nsIPrincipal* aPrincipal,
|
||||
printf("DomainLookup ");
|
||||
#endif
|
||||
|
||||
nsXPIDLCString origin;
|
||||
if (NS_FAILED(rv = aPrincipal->GetOrigin(getter_Copies(origin))))
|
||||
return rv;
|
||||
nsCAutoString origin;
|
||||
rv = GetPrincipalDomainOrigin(aPrincipal, origin);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
char *start = origin.BeginWriting();
|
||||
const char *nextToLastDot = nsnull;
|
||||
@@ -2670,13 +2704,13 @@ nsScriptSecurityManager::CheckConfirmDialog(JSContext* cx, nsIPrincipal* aPrinci
|
||||
if (NS_FAILED(rv))
|
||||
return PR_FALSE;
|
||||
|
||||
nsXPIDLCString val;
|
||||
nsCAutoString val;
|
||||
PRBool hasCert;
|
||||
aPrincipal->GetHasCertificate(&hasCert);
|
||||
if (hasCert)
|
||||
rv = aPrincipal->GetPrettyName(val);
|
||||
else
|
||||
rv = aPrincipal->GetOrigin(getter_Copies(val));
|
||||
rv = GetPrincipalDomainOrigin(aPrincipal, val);
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
return PR_FALSE;
|
||||
@@ -2791,14 +2825,14 @@ nsScriptSecurityManager::EnableCapability(const char *capability)
|
||||
|
||||
if (canEnable != nsIPrincipal::ENABLE_GRANTED)
|
||||
{
|
||||
nsXPIDLCString val;
|
||||
nsCAutoString val;
|
||||
PRBool hasCert;
|
||||
nsresult rv;
|
||||
principal->GetHasCertificate(&hasCert);
|
||||
if (hasCert)
|
||||
rv = principal->GetPrettyName(val);
|
||||
else
|
||||
rv = principal->GetOrigin(getter_Copies(val));
|
||||
rv = GetPrincipalDomainOrigin(principal, val);
|
||||
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
Reference in New Issue
Block a user