Bug 416942. Give user and ua sheets the system principal. r+sr=sicking

git-svn-id: svn://10.0.0.236/trunk@256566 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bzbarsky%mit.edu 2009-03-17 22:17:51 +00:00
parent d1e4653cda
commit 93c4cc49f1
16 changed files with 184 additions and 60 deletions

View File

@ -882,7 +882,8 @@ static void FlushSkinBindingsForWindow(nsIDOMWindowInternal* aWindow)
// XXXbsmedberg: move this to nsIWindowMediator
NS_IMETHODIMP nsChromeRegistry::RefreshSkins()
{
nsCOMPtr<nsICSSLoader> cssLoader(do_CreateInstance(kCSSLoaderCID));
nsCOMPtr<nsICSSLoader_1_9_0_BRANCH> cssLoader =
do_CreateInstance(kCSSLoaderCID);
if (!cssLoader)
return NS_OK;
@ -945,7 +946,7 @@ static PRBool IsChromeURI(nsIURI* aURI)
// XXXbsmedberg: move this to windowmediator
nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow,
nsICSSLoader* aCSSLoader)
nsICSSLoader_1_9_0_BRANCH* aCSSLoader)
{
// Deal with our subframes first.
nsCOMPtr<nsIDOMWindowCollection> frames;
@ -991,7 +992,8 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow,
if (IsChromeURI(uri)) {
// Reload the sheet.
nsCOMPtr<nsICSSStyleSheet> newSheet;
rv = aCSSLoader->LoadSheetSync(uri, PR_TRUE, getter_AddRefs(newSheet));
rv = aCSSLoader->LoadSheetSync(uri, PR_TRUE, PR_TRUE,
getter_AddRefs(newSheet));
if (NS_FAILED(rv)) return rv;
if (newSheet) {
rv = newAgentSheets.AppendObject(newSheet) ? NS_OK : NS_ERROR_FAILURE;

View File

@ -57,7 +57,7 @@
struct PRFileDesc;
class nsIAtom;
class nsICSSLoader;
class nsICSSLoader_1_9_0_BRANCH;
class nsICSSStyleSheet;
class nsIDOMWindowInternal;
class nsILocalFile;
@ -116,7 +116,7 @@ protected:
private:
static nsresult RefreshWindow(nsIDOMWindowInternal* aWindow,
nsICSSLoader* aCSSLoader);
nsICSSLoader_1_9_0_BRANCH* aCSSLoader);
static nsresult GetProviderAndPath(nsIURL* aChromeURL,
nsACString& aProvider, nsACString& aPath);

View File

@ -2528,7 +2528,8 @@ nsDocument::AddCatalogStyleSheet(nsIStyleSheet* aSheet)
void
nsDocument::EnsureCatalogStyleSheet(const char *aStyleSheetURI)
{
nsICSSLoader* cssLoader = CSSLoader();
nsCOMPtr<nsICSSLoader_1_9_0_BRANCH> cssLoader =
do_QueryInterface(CSSLoader());
PRBool enabled;
if (NS_SUCCEEDED(cssLoader->GetEnabled(&enabled)) && enabled) {
PRInt32 sheetCount = GetNumberOfCatalogStyleSheets();
@ -2549,7 +2550,7 @@ nsDocument::EnsureCatalogStyleSheet(const char *aStyleSheetURI)
NS_NewURI(getter_AddRefs(uri), aStyleSheetURI);
if (uri) {
nsCOMPtr<nsICSSStyleSheet> sheet;
cssLoader->LoadSheetSync(uri, PR_TRUE, getter_AddRefs(sheet));
cssLoader->LoadSheetSync(uri, PR_TRUE, PR_TRUE, getter_AddRefs(sheet));
if (sheet) {
BeginUpdate(UPDATE_STYLE);
AddCatalogStyleSheet(sheet);

View File

@ -58,6 +58,7 @@
#include "nsXBLPrototypeBinding.h"
#include "nsCSSRuleProcessor.h"
#include "nsContentUtils.h"
#include "nsIScriptSecurityManager.h"
NS_IMPL_CYCLE_COLLECTION_CLASS(nsXBLResourceLoader)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXBLResourceLoader)
@ -147,13 +148,18 @@ nsXBLResourceLoader::LoadResources(PRBool* aResult)
nsresult rv;
if (NS_SUCCEEDED(url->SchemeIs("chrome", &chrome)) && chrome)
{
nsCOMPtr<nsICSSStyleSheet> sheet;
rv = cssLoader->LoadSheetSync(url, getter_AddRefs(sheet));
NS_ASSERTION(NS_SUCCEEDED(rv), "Load failed!!!");
if (NS_SUCCEEDED(rv))
{
rv = StyleSheetLoaded(sheet, PR_FALSE, NS_OK);
NS_ASSERTION(NS_SUCCEEDED(rv), "Processing the style sheet failed!!!");
rv = nsContentUtils::GetSecurityManager()->
CheckLoadURIWithPrincipal(docPrincipal, url,
nsIScriptSecurityManager::ALLOW_CHROME);
if (NS_SUCCEEDED(rv)) {
nsCOMPtr<nsICSSStyleSheet> sheet;
rv = cssLoader->LoadSheetSync(url, getter_AddRefs(sheet));
NS_ASSERTION(NS_SUCCEEDED(rv), "Load failed!!!");
if (NS_SUCCEEDED(rv))
{
rv = StyleSheetLoaded(sheet, PR_FALSE, NS_OK);
NS_ASSERTION(NS_SUCCEEDED(rv), "Processing the style sheet failed!!!");
}
}
}
else

View File

@ -1004,6 +1004,15 @@ nsXBLService::GetBinding(nsIContent* aBoundElement, nsIURI* aURI,
return NS_OK;
}
static PRBool SchemeIs(nsIURI* aURI, const char* aScheme)
{
nsCOMPtr<nsIURI> baseURI = NS_GetInnermostURI(aURI);
NS_ENSURE_TRUE(baseURI, PR_FALSE);
PRBool isScheme = PR_FALSE;
return NS_SUCCEEDED(baseURI->SchemeIs(aScheme, &isScheme)) && isScheme;
}
NS_IMETHODIMP
nsXBLService::LoadBindingDocumentInfo(nsIContent* aBoundElement,
nsIDocument* aBoundDocument,
@ -1033,6 +1042,21 @@ nsXBLService::LoadBindingDocumentInfo(nsIContent* aBoundElement,
nsIContentPolicy::TYPE_XBL,
aBoundDocument);
NS_ENSURE_SUCCESS(rv, rv);
// Also make sure that we're same-origin with the bound document
// except if the stylesheet has the system principal.
PRBool isSystem;
rv = nsContentUtils::GetSecurityManager()->
IsSystemPrincipal(aOriginPrincipal, &isSystem);
NS_ENSURE_SUCCESS(rv, rv);
if (!isSystem &&
!(gAllowDataURIs && SchemeIs(aBindingURI, "data")) &&
!SchemeIs(aBindingURI, "chrome")) {
rv = aBoundDocument->NodePrincipal()->CheckMayLoad(aBindingURI,
PR_TRUE);
NS_ENSURE_SUCCESS(rv, rv);
}
}
*aResult = nsnull;

View File

@ -1288,7 +1288,9 @@ nsXMLContentSink::HandleDoctypeDecl(const nsAString & aSubset,
nsCOMPtr<nsIURI> uri(do_QueryInterface(aCatalogData));
if (uri) {
nsCOMPtr<nsICSSStyleSheet> sheet;
mCSSLoader->LoadSheetSync(uri, PR_TRUE, getter_AddRefs(sheet));
nsCOMPtr<nsICSSLoader_1_9_0_BRANCH> cssLoader =
do_QueryInterface(mCSSLoader);
cssLoader->LoadSheetSync(uri, PR_TRUE, PR_TRUE, getter_AddRefs(sheet));
#ifdef NS_DEBUG
nsCAutoString uriStr;

View File

@ -3599,6 +3599,8 @@ nsHTMLEditor::AddOverrideStyleSheet(const nsAString& aURL)
nsCOMPtr<nsICSSLoader> cssLoader;
nsresult rv = GetCSSLoader(aURL, getter_AddRefs(cssLoader));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsICSSLoader_1_9_0_BRANCH> cssLoaderBranch =
do_QueryInterface(cssLoader);
nsCOMPtr<nsIURI> uaURI;
rv = NS_NewURI(getter_AddRefs(uaURI), aURL);
@ -3609,7 +3611,8 @@ nsHTMLEditor::AddOverrideStyleSheet(const nsAString& aURL)
// synchronously, of course..
nsCOMPtr<nsICSSStyleSheet> sheet;
// Editor override style sheets may want to style Gecko anonymous boxes
rv = cssLoader->LoadSheetSync(uaURI, PR_TRUE, getter_AddRefs(sheet));
rv = cssLoaderBranch->LoadSheetSync(uaURI, PR_TRUE, PR_TRUE,
getter_AddRefs(sheet));
// Synchronous loads should ALWAYS return completed
if (!sheet)

View File

@ -168,11 +168,11 @@ nsStyleSheetService::LoadAndRegisterSheetInternal(nsIURI *aSheetURI,
NS_ENSURE_ARG(aSheetType == AGENT_SHEET || aSheetType == USER_SHEET);
NS_ENSURE_ARG_POINTER(aSheetURI);
nsCOMPtr<nsICSSLoader> loader = do_CreateInstance(kCSSLoaderCID);
nsCOMPtr<nsICSSLoader_1_9_0_BRANCH> loader = do_CreateInstance(kCSSLoaderCID);
nsCOMPtr<nsICSSStyleSheet> sheet;
// Allow UA sheets, but not user sheets, to use unsafe rules
nsresult rv = loader->LoadSheetSync(aSheetURI, aSheetType == AGENT_SHEET,
getter_AddRefs(sheet));
PR_TRUE, getter_AddRefs(sheet));
NS_ENSURE_SUCCESS(rv, rv);
if (!mSheets[aSheetType].AppendObject(sheet)) {

View File

@ -623,11 +623,11 @@ nsContentDLF::EnsureUAStyleSheet()
#endif
return rv;
}
nsCOMPtr<nsICSSLoader> cssLoader;
nsCOMPtr<nsICSSLoader_1_9_0_BRANCH> cssLoader;
NS_NewCSSLoader(getter_AddRefs(cssLoader));
if (!cssLoader)
return NS_ERROR_OUT_OF_MEMORY;
rv = cssLoader->LoadSheetSync(uri, PR_TRUE, &gUAStyleSheet);
rv = cssLoader->LoadSheetSync(uri, PR_TRUE, PR_TRUE, &gUAStyleSheet);
#ifdef DEBUG
if (NS_FAILED(rv))
printf("*** open of %s failed: error=%x\n", UA_CSS_URL, rv);

View File

@ -164,11 +164,11 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader,
mMustNotify(PR_FALSE),
mWasAlternate(aIsAlternate),
mAllowUnsafeRules(PR_FALSE),
mUseSystemPrincipal(PR_FALSE),
mOwningElement(aOwningElement),
mObserver(aObserver),
mLoaderPrincipal(aLoaderPrincipal)
{
NS_PRECONDITION(mLoader, "Must have a loader!");
NS_ADDREF(mLoader);
}
@ -193,11 +193,11 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader,
mMustNotify(PR_FALSE),
mWasAlternate(PR_FALSE),
mAllowUnsafeRules(PR_FALSE),
mUseSystemPrincipal(PR_FALSE),
mOwningElement(nsnull),
mObserver(aObserver),
mLoaderPrincipal(aLoaderPrincipal)
{
NS_PRECONDITION(mLoader, "Must have a loader!");
NS_ADDREF(mLoader);
if (mParentData) {
@ -205,8 +205,12 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader,
mSyncLoad = mParentData->mSyncLoad;
mIsNonDocumentSheet = mParentData->mIsNonDocumentSheet;
mAllowUnsafeRules = mParentData->mAllowUnsafeRules;
mUseSystemPrincipal = mParentData->mUseSystemPrincipal;
++(mParentData->mPendingChildren);
}
NS_POSTCONDITION(!mUseSystemPrincipal || mSyncLoad,
"Shouldn't use system principal for async loads");
}
SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader,
@ -214,6 +218,7 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader,
nsICSSStyleSheet* aSheet,
PRBool aSyncLoad,
PRBool aAllowUnsafeRules,
PRBool aUseSystemPrincipal,
nsICSSLoaderObserver* aObserver,
nsIPrincipal* aLoaderPrincipal)
: mLoader(aLoader),
@ -230,13 +235,16 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader,
mMustNotify(PR_FALSE),
mWasAlternate(PR_FALSE),
mAllowUnsafeRules(aAllowUnsafeRules),
mUseSystemPrincipal(aUseSystemPrincipal),
mOwningElement(nsnull),
mObserver(aObserver),
mLoaderPrincipal(aLoaderPrincipal)
{
NS_PRECONDITION(mLoader, "Must have a loader!");
NS_ADDREF(mLoader);
NS_POSTCONDITION(!mUseSystemPrincipal || mSyncLoad,
"Shouldn't use system principal for async loads");
}
SheetLoadData::~SheetLoadData()
@ -280,7 +288,7 @@ CSSLoaderImpl::~CSSLoaderImpl(void)
// they're all done.
}
NS_IMPL_ISUPPORTS1(CSSLoaderImpl, nsICSSLoader)
NS_IMPL_ISUPPORTS2(CSSLoaderImpl, nsICSSLoader, nsICSSLoader_1_9_0_BRANCH)
void
CSSLoaderImpl::Shutdown()
@ -1275,6 +1283,8 @@ CSSLoaderImpl::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState)
NS_PRECONDITION(aLoadData->mURI, "Need a URI to load");
NS_PRECONDITION(aLoadData->mSheet, "Need a sheet to load into");
NS_PRECONDITION(aSheetState != eSheetComplete, "Why bother?");
NS_PRECONDITION(!aLoadData->mUseSystemPrincipal || aLoadData->mSyncLoad,
"Shouldn't use system principal for async loads");
NS_ASSERTION(mLoadingDatas.IsInitialized(), "mLoadingDatas should be initialized by now.");
LOG_URI(" Load from: '%s'", aLoadData->mURI);
@ -1308,10 +1318,16 @@ CSSLoaderImpl::LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState)
NS_ASSERTION(channel, "NS_OpenURI lied?");
// Get the principal for this channel
// Get the principal for this sheet
nsCOMPtr<nsIPrincipal> principal;
rv = nsContentUtils::GetSecurityManager()->
GetChannelPrincipal(channel, getter_AddRefs(principal));
if (aLoadData->mUseSystemPrincipal) {
rv = nsContentUtils::GetSecurityManager()->
GetSystemPrincipal(getter_AddRefs(principal));
} else {
rv = nsContentUtils::GetSecurityManager()->
GetChannelPrincipal(channel, getter_AddRefs(principal));
}
if (NS_FAILED(rv)) {
LOG_ERROR((" Failed to get a principal for the sheet"));
SheetComplete(aLoadData, rv);
@ -1961,9 +1977,18 @@ CSSLoaderImpl::LoadChildSheet(nsICSSStyleSheet* aParentSheet,
NS_IMETHODIMP
CSSLoaderImpl::LoadSheetSync(nsIURI* aURL, PRBool aAllowUnsafeRules,
nsICSSStyleSheet** aSheet)
{
return LoadSheetSync(aURL, aAllowUnsafeRules, PR_FALSE, aSheet);
}
NS_IMETHODIMP
CSSLoaderImpl::LoadSheetSync(nsIURI* aURL, PRBool aAllowUnsafeRules,
PRBool aUseSystemPrincipal,
nsICSSStyleSheet** aSheet)
{
LOG(("CSSLoaderImpl::LoadSheetSync"));
return InternalLoadNonDocumentSheet(aURL, aAllowUnsafeRules, nsnull,
return InternalLoadNonDocumentSheet(aURL, aAllowUnsafeRules,
aUseSystemPrincipal, nsnull,
aSheet, nsnull);
}
@ -1975,7 +2000,8 @@ CSSLoaderImpl::LoadSheet(nsIURI* aURL,
{
LOG(("CSSLoaderImpl::LoadSheet(aURL, aObserver, aSheet) api call"));
NS_PRECONDITION(aSheet, "aSheet is null");
return InternalLoadNonDocumentSheet(aURL, PR_FALSE, aOriginPrincipal,
return InternalLoadNonDocumentSheet(aURL, PR_FALSE, PR_FALSE,
aOriginPrincipal,
aSheet, aObserver);
}
@ -1985,19 +2011,23 @@ CSSLoaderImpl::LoadSheet(nsIURI* aURL,
nsICSSLoaderObserver* aObserver)
{
LOG(("CSSLoaderImpl::LoadSheet(aURL, aObserver) api call"));
return InternalLoadNonDocumentSheet(aURL, PR_FALSE, aOriginPrincipal,
return InternalLoadNonDocumentSheet(aURL, PR_FALSE, PR_FALSE,
aOriginPrincipal,
nsnull, aObserver);
}
nsresult
CSSLoaderImpl::InternalLoadNonDocumentSheet(nsIURI* aURL,
PRBool aAllowUnsafeRules,
PRBool aUseSystemPrincipal,
nsIPrincipal* aOriginPrincipal,
nsICSSStyleSheet** aSheet,
nsICSSLoaderObserver* aObserver)
{
NS_PRECONDITION(aURL, "Must have a URI to load");
NS_PRECONDITION(aSheet || aObserver, "Sheet and observer can't both be null");
NS_PRECONDITION(!aUseSystemPrincipal || !aObserver,
"Shouldn't load system-principal sheets async");
NS_ASSERTION(mParsingDatas.Count() == 0, "We're in the middle of a parse?");
LOG_URI(" Non-document sheet uri: '%s'", aURL);
@ -2041,7 +2071,7 @@ CSSLoaderImpl::InternalLoadNonDocumentSheet(nsIURI* aURL,
SheetLoadData* data =
new SheetLoadData(this, aURL, sheet, syncLoad, aAllowUnsafeRules,
aObserver, aOriginPrincipal);
aUseSystemPrincipal, aObserver, aOriginPrincipal);
if (!data) {
sheet->SetComplete();
@ -2143,6 +2173,15 @@ nsresult NS_NewCSSLoader(nsICSSLoader** aLoader)
return CallQueryInterface(it, aLoader);
}
nsresult NS_NewCSSLoader(nsICSSLoader_1_9_0_BRANCH** aLoader)
{
CSSLoaderImpl* it = new CSSLoaderImpl();
NS_ENSURE_TRUE(it, NS_ERROR_OUT_OF_MEMORY);
return CallQueryInterface(it, aLoader);
}
PR_STATIC_CALLBACK(PLDHashOperator)
StopLoadingSheetCallback(nsURIAndPrincipalHashKey* aKey,
SheetLoadData*& aData,

View File

@ -135,6 +135,7 @@ public:
nsICSSStyleSheet* aSheet,
PRBool aSyncLoad,
PRBool aAllowUnsafeRules,
PRBool aUseSystemPrincipal,
nsICSSLoaderObserver* aObserver,
nsIPrincipal* aLoaderPrincipal);
@ -207,6 +208,11 @@ public:
// mAllowUnsafeRules is true if we should allow unsafe rules to be parsed
// in the loaded sheet.
PRPackedBool mAllowUnsafeRules : 1;
// mUseSystemPrincipal is true if the system principal should be used for
// this sheet, no matter what the channel principal is. Only true for sync
// loads.
PRPackedBool mUseSystemPrincipal : 1;
// This is the element that imported the sheet. Needed to get the
// charset set on it.
@ -293,7 +299,7 @@ enum StyleSheetState {
* Loader Declaration *
**********************/
class CSSLoaderImpl : public nsICSSLoader
class CSSLoaderImpl : public nsICSSLoader_1_9_0_BRANCH
{
public:
CSSLoaderImpl(void);
@ -341,6 +347,10 @@ public:
NS_IMETHOD LoadSheetSync(nsIURI* aURL, PRBool aAllowUnsafeRules,
nsICSSStyleSheet** aSheet);
NS_IMETHOD LoadSheetSync(nsIURI* aURL, PRBool aAllowUnsafeRules,
PRBool aUseSystemPrincipal,
nsICSSStyleSheet** aSheet);
NS_IMETHOD LoadSheet(nsIURI* aURL,
nsIPrincipal* aOriginPrincipal,
nsICSSLoaderObserver* aObserver,
@ -415,6 +425,7 @@ private:
nsresult InternalLoadNonDocumentSheet(nsIURI* aURL,
PRBool aAllowUnsafeRules,
PRBool aUseSystemPrincipal,
nsIPrincipal* aOriginPrincipal,
nsICSSStyleSheet** aSheet,
nsICSSLoaderObserver* aObserver);

View File

@ -162,29 +162,8 @@ public:
nsICSSImportRule* aRule) = 0;
/**
* Synchronously load and return the stylesheet at aURL. Any child sheets
* will also be loaded synchronously. Note that synchronous loads over some
* protocols may involve spinning up a new event loop, so use of this method
* does NOT guarantee not receiving any events before the sheet loads. This
* method can be used to load sheets not associated with a document.
*
* @param aURL the URL of the sheet to load
* @param [out] aSheet the loaded, complete sheet.
* @param aEnableUnsafeRules whether unsafe rules are enabled for this
* sheet load
* Unsafe rules are rules that can violate key Gecko invariants if misused.
* In particular, most anonymous box pseudoelements must be very carefully
* styled or we will have severe problems. Therefore unsafe rules should
* never be enabled for stylesheets controlled by untrusted sites; preferably
* unsafe rules should only be enabled for agent sheets.
*
* NOTE: At the moment, this method assumes the sheet will be UTF-8, but
* ideally it would allow arbitrary encodings. Callers should NOT depend on
* non-UTF8 sheets being treated as UTF-8 by this method.
*
* NOTE: A successful return from this method doesn't indicate anything about
* whether the data could be parsed as CSS and doesn't indicate anything
* about the status of child sheets of the returned sheet.
* As the nsICSSLoader_1_9_0_BRANCH method, but assumes
* aUseSystemPrincipal false.
*/
NS_IMETHOD LoadSheetSync(nsIURI* aURL, PRBool aEnableUnsafeRules,
nsICSSStyleSheet** aSheet) = 0;
@ -277,10 +256,64 @@ public:
NS_DEFINE_STATIC_IID_ACCESSOR(nsICSSLoader, NS_ICSS_LOADER_IID)
#define NS_ICSS_LOADER_1_9_0_BRANCH_IID \
{ 0xdda6894b, 0x8129, 0x4bb1, \
{ 0xa5, 0x66, 0xdb, 0x90, 0x81, 0x8e, 0x6a, 0x27 } }
class nsICSSLoader_1_9_0_BRANCH : public nsICSSLoader {
public:
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICSS_LOADER_1_9_0_BRANCH_IID)
/**
* Synchronously load and return the stylesheet at aURL. Any child sheets
* will also be loaded synchronously. Note that synchronous loads over some
* protocols may involve spinning up a new event loop, so use of this method
* does NOT guarantee not receiving any events before the sheet loads. This
* method can be used to load sheets not associated with a document.
*
* @param aURL the URL of the sheet to load
* @param aEnableUnsafeRules whether unsafe rules are enabled for this
* sheet load
* Unsafe rules are rules that can violate key Gecko invariants if misused.
* In particular, most anonymous box pseudoelements must be very carefully
* styled or we will have severe problems. Therefore unsafe rules should
* never be enabled for stylesheets controlled by untrusted sites; preferably
* unsafe rules should only be enabled for agent sheets.
* @param aUseSystemPrincipal if true, give the resulting sheet the system
* principal no matter where it's being loaded from.
* @param [out] aSheet the loaded, complete sheet.
*
* NOTE: At the moment, this method assumes the sheet will be UTF-8, but
* ideally it would allow arbitrary encodings. Callers should NOT depend on
* non-UTF8 sheets being treated as UTF-8 by this method.
*
* NOTE: A successful return from this method doesn't indicate anything about
* whether the data could be parsed as CSS and doesn't indicate anything
* about the status of child sheets of the returned sheet.
*/
NS_IMETHOD LoadSheetSync(nsIURI* aURL, PRBool aEnableUnsafeRules,
PRBool aUseSystemPrincipal,
nsICSSStyleSheet** aSheet) = 0;
// Stupid C++ method hiding stuff
NS_IMETHOD LoadSheetSync(nsIURI* aURL, PRBool aEnableUnsafeRules,
nsICSSStyleSheet** aSheet) = 0;
nsresult LoadSheetSync(nsIURI* aURL, nsICSSStyleSheet** aSheet) {
return nsICSSLoader::LoadSheetSync(aURL, aSheet);
}
};
NS_DEFINE_STATIC_IID_ACCESSOR(nsICSSLoader_1_9_0_BRANCH,
NS_ICSS_LOADER_1_9_0_BRANCH_IID)
nsresult
NS_NewCSSLoader(nsIDocument* aDocument, nsICSSLoader** aLoader);
nsresult
NS_NewCSSLoader(nsICSSLoader** aLoader);
nsresult
NS_NewCSSLoader(nsICSSLoader_1_9_0_BRANCH** aLoader);
#endif /* nsICSSLoader_h___ */

View File

@ -223,12 +223,13 @@ nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr<nsICSSStyleSheet> &aSh
NS_NewCSSLoader(&gCSSLoader);
if (gCSSLoader) {
gCSSLoader->LoadSheetSync(aURI, aEnableUnsafeRules, getter_AddRefs(aSheet));
gCSSLoader->LoadSheetSync(aURI, aEnableUnsafeRules, PR_TRUE,
getter_AddRefs(aSheet));
}
}
nsLayoutStylesheetCache*
nsLayoutStylesheetCache::gStyleCache = nsnull;
nsICSSLoader*
nsICSSLoader_1_9_0_BRANCH*
nsLayoutStylesheetCache::gCSSLoader = nsnull;

View File

@ -44,6 +44,7 @@
class nsIFile;
class nsICSSLoader;
class nsICSSLoader_1_9_0_BRANCH;
class nsLayoutStylesheetCache
: public nsIObserver
@ -69,7 +70,7 @@ private:
PRBool aEnableUnsafeRules);
static nsLayoutStylesheetCache* gStyleCache;
static nsICSSLoader* gCSSLoader;
static nsICSSLoader_1_9_0_BRANCH* gCSSLoader;
nsCOMPtr<nsICSSStyleSheet> mScrollbarsSheet;
nsCOMPtr<nsICSSStyleSheet> mFormsSheet;
nsCOMPtr<nsICSSStyleSheet> mUserContentSheet;

View File

@ -3007,7 +3007,8 @@ nsresult nsChromeRegistry::LoadStyleSheetWithURL(nsIURI* aURL, PRBool aEnableUns
NS_ENSURE_SUCCESS(rv, rv);
}
return mCSSLoader->LoadSheetSync(aURL, aEnableUnsafeRules, aSheet);
return mCSSLoader->LoadSheetSync(aURL, aEnableUnsafeRules,
aEnableUnsafeRules, aSheet);
}
nsresult nsChromeRegistry::LoadInstallDataSource()

View File

@ -260,7 +260,7 @@ protected:
nsCOMPtr<nsIRDFResource> mDisabled;
nsCOMPtr<nsIRDFResource> mXPCNativeWrappers;
nsCOMPtr<nsICSSLoader> mCSSLoader;
nsCOMPtr<nsICSSLoader_1_9_0_BRANCH> mCSSLoader;
nsCOMPtr<nsIZipReader> mOverrideJAR;
nsCString mOverrideJARURL;