diff --git a/mozilla/caps/src/nsPrincipal.cpp b/mozilla/caps/src/nsPrincipal.cpp index f04dcb7e713..60953fb6a40 100755 --- a/mozilla/caps/src/nsPrincipal.cpp +++ b/mozilla/caps/src/nsPrincipal.cpp @@ -140,8 +140,18 @@ nsPrincipal::GetOrigin(char **aOrigin) NS_ASSERTION(uri, "No Domain or Codebase"); nsCAutoString hostPort; - nsresult rv = uri->GetHostPort(hostPort); - if (NS_SUCCEEDED(rv)) { + + // chrome: URLs don't have a meaningful origin, so make + // sure we just get the full spec for them. + // XXX this should be removed in favor of the solution in + // bug 160042. + PRBool isChrome; + nsresult rv = uri->SchemeIs("chrome", &isChrome); + if (NS_SUCCEEDED(rv) && !isChrome) { + rv = uri->GetHostPort(hostPort); + } + + if (NS_SUCCEEDED(rv) && !isChrome) { nsCAutoString scheme; rv = uri->GetScheme(scheme); NS_ENSURE_SUCCESS(rv, rv); diff --git a/mozilla/caps/src/nsScriptSecurityManager.cpp b/mozilla/caps/src/nsScriptSecurityManager.cpp index 8b03ae45ed8..1fbaefc2e8f 100644 --- a/mozilla/caps/src/nsScriptSecurityManager.cpp +++ b/mozilla/caps/src/nsScriptSecurityManager.cpp @@ -1654,25 +1654,28 @@ nsScriptSecurityManager::GetCodebasePrincipal(nsIURI *aURI, rv = CreateCodebasePrincipal(aURI, getter_AddRefs(principal)); if (NS_FAILED(rv)) return rv; - //-- Check to see if we already have this principal. - nsCOMPtr fromTable; - mPrincipals.Get(principal, getter_AddRefs(fromTable)); - if (fromTable) - principal = fromTable; - else //-- Check to see if we have a more general principal + if (mPrincipals.Count() > 0) { - nsXPIDLCString originUrl; - rv = principal->GetOrigin(getter_Copies(originUrl)); - if (NS_FAILED(rv)) return rv; - nsCOMPtr newURI; - rv = NS_NewURI(getter_AddRefs(newURI), originUrl, nsnull, sIOService); - if (NS_FAILED(rv)) return rv; - nsCOMPtr principal2; - rv = CreateCodebasePrincipal(newURI, getter_AddRefs(principal2)); - if (NS_FAILED(rv)) return rv; - mPrincipals.Get(principal2, getter_AddRefs(fromTable)); + //-- Check to see if we already have this principal. + nsCOMPtr fromTable; + mPrincipals.Get(principal, getter_AddRefs(fromTable)); if (fromTable) principal = fromTable; + else //-- Check to see if we have a more general principal + { + nsXPIDLCString originUrl; + rv = principal->GetOrigin(getter_Copies(originUrl)); + if (NS_FAILED(rv)) return rv; + nsCOMPtr newURI; + rv = NS_NewURI(getter_AddRefs(newURI), originUrl, nsnull, sIOService); + if (NS_FAILED(rv)) return rv; + nsCOMPtr principal2; + rv = CreateCodebasePrincipal(newURI, getter_AddRefs(principal2)); + if (NS_FAILED(rv)) return rv; + mPrincipals.Get(principal2, getter_AddRefs(fromTable)); + if (fromTable) + principal = fromTable; + } } NS_IF_ADDREF(*result = principal);