* Fix 12124 [DOGFOOD] Reading user's preferences
* Implement site-specific security policies (bug 858) r=mstoltz * Use Recycle rather than delete[] to clean up Purify logs r=law git-svn-id: svn://10.0.0.236/trunk@53631 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
@@ -68,6 +68,7 @@
|
||||
#include "nsIRefreshURI.h"
|
||||
#include "nsVoidArray.h"
|
||||
#include "nsIScriptContextOwner.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsHTMLIIDs.h"
|
||||
#include "nsTextFragment.h"
|
||||
@@ -3629,35 +3630,6 @@ HTMLContentSink::OnUnicharStreamComplete(nsIUnicharStreamLoader* aLoader,
|
||||
return rv;
|
||||
}
|
||||
|
||||
/*
|
||||
** The enum "SchemeOrder" defines an ordering of URI schemes used to
|
||||
** determine whether a page can load a script. Schemes are listed in
|
||||
** order of declining power: chrome can access everything, resource
|
||||
** can access everything but chrome, and so forth.
|
||||
*/
|
||||
|
||||
enum SchemeOrder { CHROME_SCHEME, RESOURCE_SCHEME, FILE_SCHEME, OTHER_SCHEME };
|
||||
|
||||
static SchemeOrder
|
||||
GetSchemeOrder(nsIURI *uri)
|
||||
{
|
||||
SchemeOrder result = OTHER_SCHEME;
|
||||
if (uri) {
|
||||
char *scheme;
|
||||
uri->GetScheme(&scheme);
|
||||
if (scheme) {
|
||||
if (PL_strcmp(scheme, "chrome") == 0)
|
||||
result = CHROME_SCHEME;
|
||||
else if (PL_strcmp(scheme, "resource") == 0)
|
||||
result = RESOURCE_SCHEME;
|
||||
else if (PL_strcmp(scheme, "file") == 0)
|
||||
result = FILE_SCHEME;
|
||||
nsCRT::free(scheme);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
nsresult
|
||||
HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode)
|
||||
{
|
||||
@@ -3786,13 +3758,14 @@ HTMLContentSink::ProcessSCRIPTTag(const nsIParserNode& aNode)
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Check access to file:, chrome:, and resource:.
|
||||
SchemeOrder order = GetSchemeOrder(url);
|
||||
SchemeOrder baseOrder = GetSchemeOrder(mDocumentBaseURL);
|
||||
if (baseOrder > order) {
|
||||
NS_RELEASE(url);
|
||||
return NS_ERROR_DOM_BAD_URI;
|
||||
}
|
||||
// Check that this page is allowed to load this URI.
|
||||
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
|
||||
NS_SCRIPTSECURITYMANAGER_PROGID, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
rv = securityManager->CheckLoadURI(mDocumentBaseURL, url);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsCOMPtr<nsILoadGroup> loadGroup;
|
||||
nsIUnicharStreamLoader* loader;
|
||||
|
||||
@@ -1387,13 +1387,13 @@ nsHTMLDocument::SetDomain(const nsString& aDomain)
|
||||
if (NS_FAILED(NS_NewURI(&newURI, newURIString)))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
// Create new codebase principal
|
||||
// Get codebase principal
|
||||
nsresult rv;
|
||||
NS_WITH_SERVICE(nsIScriptSecurityManager, securityManager,
|
||||
NS_SCRIPTSECURITYMANAGER_PROGID, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return NS_ERROR_FAILURE;
|
||||
return securityManager->CreateCodebasePrincipal(newURI, &mPrincipal);
|
||||
return securityManager->GetCodebasePrincipal(newURI, &mPrincipal);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
||||
Reference in New Issue
Block a user