diff --git a/mozilla/chrome/src/nsChromeRegistry.cpp b/mozilla/chrome/src/nsChromeRegistry.cpp index 2ad40290e48..a1e3a918305 100644 --- a/mozilla/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/chrome/src/nsChromeRegistry.cpp @@ -935,7 +935,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) if (IsChromeURI(uri)) { // Reload the sheet. nsCOMPtr newSheet; - rv = LoadStyleSheetWithURL(uri, getter_AddRefs(newSheet)); + rv = LoadStyleSheetWithURL(uri, PR_TRUE, getter_AddRefs(newSheet)); if (NS_FAILED(rv)) return rv; if (newSheet) { rv = newAgentSheets.AppendObject(newSheet) ? NS_OK : NS_ERROR_FAILURE; @@ -987,7 +987,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) // XXX what about chrome sheets that have a title or are disabled? This // only works by sheer dumb luck. // XXXbz this should really use the document's CSSLoader! - LoadStyleSheetWithURL(uri, getter_AddRefs(newSheet)); + LoadStyleSheetWithURL(uri, PR_FALSE, getter_AddRefs(newSheet)); // Even if it's null, we put in in there. newSheets.AppendObject(newSheet); } @@ -1057,14 +1057,14 @@ nsChromeRegistry::ReloadChrome() } nsresult -nsChromeRegistry::LoadStyleSheetWithURL(nsIURI* aURL, nsICSSStyleSheet** aSheet) +nsChromeRegistry::LoadStyleSheetWithURL(nsIURI* aURL, PRBool aEnableUnsafeRules, nsICSSStyleSheet** aSheet) { *aSheet = nsnull; - nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); + nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); if (!cssLoader) return NS_ERROR_FAILURE; - return cssLoader->LoadAgentSheet(aURL, aSheet); + return cssLoader->LoadSheetSync(aURL, aEnableUnsafeRules, aSheet); } NS_IMETHODIMP diff --git a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp index 4f39f98b6d9..78908cf9b78 100644 --- a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp +++ b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp @@ -3551,8 +3551,10 @@ nsHTMLEditor::ReplaceStyleSheet(const nsAString& aURL) rv = NS_NewURI(getter_AddRefs(uaURI), aURL); NS_ENSURE_SUCCESS(rv, rv); + // Editor override style sheets may want to style Gecko anonymous boxes + nsCOMPtr loader = do_QueryInterface(cssLoader); nsCOMPtr sheet; - rv = cssLoader->LoadAgentSheet(uaURI, this); + rv = loader->LoadSheetSync(uaURI, PR_TRUE, this); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; diff --git a/mozilla/layout/base/nsStyleSheetService.cpp b/mozilla/layout/base/nsStyleSheetService.cpp index 57c6419b67f..f535d4ba2b3 100644 --- a/mozilla/layout/base/nsStyleSheetService.cpp +++ b/mozilla/layout/base/nsStyleSheetService.cpp @@ -144,9 +144,10 @@ nsStyleSheetService::LoadAndRegisterSheet(nsIURI *aSheetURI, NS_ENSURE_ARG(aSheetType == AGENT_SHEET || aSheetType == USER_SHEET); NS_ENSURE_ARG_POINTER(aSheetURI); - nsCOMPtr loader = do_CreateInstance(kCSSLoaderCID); + nsCOMPtr loader = do_CreateInstance(kCSSLoaderCID); nsCOMPtr sheet; - nsresult rv = loader->LoadAgentSheet(aSheetURI, getter_AddRefs(sheet)); + nsresult rv = loader->LoadSheetSync(aSheetURI, aSheetType == AGENT_SHEET, + getter_AddRefs(sheet)); NS_ENSURE_SUCCESS(rv, rv); mSheets[aSheetType].AppendObject(sheet); diff --git a/mozilla/layout/build/nsContentDLF.cpp b/mozilla/layout/build/nsContentDLF.cpp index 81c3d1683fb..9d2211163e6 100644 --- a/mozilla/layout/build/nsContentDLF.cpp +++ b/mozilla/layout/build/nsContentDLF.cpp @@ -642,7 +642,8 @@ nsContentDLF::EnsureUAStyleSheet() NS_NewCSSLoader(getter_AddRefs(cssLoader)); if (!cssLoader) return NS_ERROR_OUT_OF_MEMORY; - rv = cssLoader->LoadAgentSheet(uri, &gUAStyleSheet); + nsCOMPtr loader = do_QueryInterface(cssLoader); + rv = loader->LoadSheetSync(uri, PR_TRUE, &gUAStyleSheet); #ifdef DEBUG if (NS_FAILED(rv)) printf("*** open of %s failed: error=%x\n", UA_CSS_URL, rv); diff --git a/mozilla/layout/style/nsCSSLoader.cpp b/mozilla/layout/style/nsCSSLoader.cpp index 23921b13e06..2f768c3a659 100644 --- a/mozilla/layout/style/nsCSSLoader.cpp +++ b/mozilla/layout/style/nsCSSLoader.cpp @@ -157,6 +157,7 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, mIsAgent(PR_FALSE), mIsLoading(PR_FALSE), mIsCancelled(PR_FALSE), + mAllowUnsafeRules(PR_FALSE), mOwningElement(aOwningElement), mObserver(aObserver) { @@ -182,6 +183,7 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, mIsAgent(PR_FALSE), mIsLoading(PR_FALSE), mIsCancelled(PR_FALSE), + mAllowUnsafeRules(PR_FALSE), mOwningElement(nsnull), mObserver(aObserver) { @@ -192,6 +194,7 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, NS_ADDREF(mParentData); mSyncLoad = mParentData->mSyncLoad; mIsAgent = mParentData->mIsAgent; + mAllowUnsafeRules = mParentData->mAllowUnsafeRules; ++(mParentData->mPendingChildren); } } @@ -200,6 +203,7 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, nsIURI* aURI, nsICSSStyleSheet* aSheet, PRBool aSyncLoad, + PRBool aAllowUnsafeRules, nsICSSLoaderObserver* aObserver) : mLoader(aLoader), mParserToUnblock(nsnull), @@ -213,6 +217,7 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, mIsAgent(PR_TRUE), mIsLoading(PR_FALSE), mIsCancelled(PR_FALSE), + mAllowUnsafeRules(aAllowUnsafeRules), mOwningElement(nsnull), mObserver(aObserver) { @@ -251,7 +256,7 @@ CSSLoaderImpl::~CSSLoaderImpl(void) "How did we get destroyed when there are pending data?"); } -NS_IMPL_ISUPPORTS1(CSSLoaderImpl, nsICSSLoader) +NS_IMPL_ISUPPORTS2(CSSLoaderImpl, nsICSSLoader, nsICSSLoader_MOZILLA_1_8_BRANCH) void CSSLoaderImpl::Shutdown() @@ -1364,8 +1369,10 @@ CSSLoaderImpl::ParseSheet(nsIUnicharInputStream* aStream, nsCOMPtr sheetURI, baseURI; aLoadData->mSheet->GetSheetURI(getter_AddRefs(sheetURI)); aLoadData->mSheet->GetBaseURI(getter_AddRefs(baseURI)); - rv = parser->Parse(aStream, sheetURI, baseURI, aLoadData->mLineNumber, - *getter_AddRefs(dummySheet)); + nsCOMPtr parser18 = do_QueryInterface(parser); + rv = parser18->Parse(aStream, sheetURI, baseURI, aLoadData->mLineNumber, + aLoadData->mAllowUnsafeRules, + *getter_AddRefs(dummySheet)); mParsingDatas.RemoveElementAt(mParsingDatas.Count() - 1); RecycleParser(parser); @@ -1769,12 +1776,20 @@ CSSLoaderImpl::LoadChildSheet(nsICSSStyleSheet* aParentSheet, } +NS_IMETHODIMP +CSSLoaderImpl::LoadSheetSync(nsIURI* aURL, PRBool aAllowUnsafeRules, + nsICSSStyleSheet** aSheet) +{ + LOG(("CSSLoaderImpl::LoadAgentSheet synchronous")); + return InternalLoadAgentSheet(aURL, aSheet, aAllowUnsafeRules, nsnull); +} + NS_IMETHODIMP CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, nsICSSStyleSheet** aSheet) { LOG(("CSSLoaderImpl::LoadAgentSheet synchronous")); - return InternalLoadAgentSheet(aURL, aSheet, nsnull); + return InternalLoadAgentSheet(aURL, aSheet, PR_FALSE, nsnull); } NS_IMETHODIMP @@ -1782,12 +1797,13 @@ CSSLoaderImpl::LoadAgentSheet(nsIURI* aURL, nsICSSLoaderObserver* aObserver) { LOG(("CSSLoaderImpl::LoadAgentSheet asynchronous")); - return InternalLoadAgentSheet(aURL, nsnull, aObserver); + return InternalLoadAgentSheet(aURL, nsnull, PR_FALSE, aObserver); } nsresult CSSLoaderImpl::InternalLoadAgentSheet(nsIURI* aURL, nsICSSStyleSheet** aSheet, + PRBool aAllowUnsafeRules, nsICSSLoaderObserver* aObserver) { NS_PRECONDITION(aURL, "Must have a URI to load"); @@ -1829,7 +1845,8 @@ CSSLoaderImpl::InternalLoadAgentSheet(nsIURI* aURL, return NS_OK; } - SheetLoadData* data = new SheetLoadData(this, aURL, sheet, syncLoad, aObserver); + SheetLoadData* data = + new SheetLoadData(this, aURL, sheet, syncLoad, aAllowUnsafeRules, aObserver); if (!data) { sheet->SetComplete(); diff --git a/mozilla/layout/style/nsCSSLoader.h b/mozilla/layout/style/nsCSSLoader.h index 14fdb58f1e6..657b6cabe44 100644 --- a/mozilla/layout/style/nsCSSLoader.h +++ b/mozilla/layout/style/nsCSSLoader.h @@ -125,6 +125,7 @@ public: nsIURI* aURI, nsICSSStyleSheet* aSheet, PRBool aSyncLoad, + PRBool aAllowUnsafeRules, nsICSSLoaderObserver* aObserver); already_AddRefed GetReferrerURI(); @@ -186,6 +187,10 @@ public: // such. PRPackedBool mIsCancelled; + // mAllowUnsafeRules is true if we should allow unsafe rules to be parsed + // in the loaded sheet. + PRPackedBool mAllowUnsafeRules; + // This is the element that imported the sheet. Needed to get the // charset set on it. nsCOMPtr mOwningElement; @@ -211,7 +216,8 @@ enum StyleSheetState { * Loader Declaration * **********************/ -class CSSLoaderImpl : public nsICSSLoader +class CSSLoaderImpl : public nsICSSLoader, + public nsICSSLoader_MOZILLA_1_8_BRANCH { public: CSSLoaderImpl(void); @@ -256,6 +262,9 @@ public: nsMediaList* aMedia, nsICSSImportRule* aRule); + // nsICSSLoader_MOZILLA_1_8_BRANCH + NS_IMETHOD LoadSheetSync(nsIURI* aURL, PRBool aAllowUnsafeRules, nsICSSStyleSheet** aSheet); + NS_IMETHOD LoadAgentSheet(nsIURI* aURL, nsICSSStyleSheet** aSheet); NS_IMETHOD LoadAgentSheet(nsIURI* aURL, nsICSSLoaderObserver* aObserver); @@ -310,6 +319,7 @@ private: nsresult InternalLoadAgentSheet(nsIURI* aURL, nsICSSStyleSheet** aSheet, + PRBool aAllowUnsafeRules, nsICSSLoaderObserver* aObserver); public: diff --git a/mozilla/layout/style/nsCSSParser.cpp b/mozilla/layout/style/nsCSSParser.cpp index 30467d878a3..7c6a41783d5 100644 --- a/mozilla/layout/style/nsCSSParser.cpp +++ b/mozilla/layout/style/nsCSSParser.cpp @@ -83,7 +83,8 @@ //---------------------------------------------------------------------- // Your basic top-down recursive descent style parser -class CSSParserImpl : public nsICSSParser { +class CSSParserImpl : public nsICSSParser, + public nsICSSParser_MOZILLA_1_8_BRANCH { public: CSSParserImpl(); virtual ~CSSParserImpl(); @@ -102,6 +103,14 @@ public: NS_IMETHOD SetChildLoader(nsICSSLoader* aChildLoader); + // nsICSSParser_MOZILLA_1_8_BRANCH + NS_IMETHOD Parse(nsIUnicharInputStream* aInput, + nsIURI* aSheetURI, + nsIURI* aBaseURI, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules, + nsICSSStyleSheet*& aResult); + NS_IMETHOD Parse(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, nsIURI* aBaseURI, @@ -395,6 +404,9 @@ protected: // True if we are in quirks mode; false in standards or almost standards mode PRPackedBool mNavQuirkMode : 1; + + // True if unsafe rules should be allowed + PRPackedBool mUnsafeRulesEnabled : 1; #ifdef MOZ_SVG // True if we are in SVG mode; false in "normal" CSS @@ -503,6 +515,7 @@ CSSParserImpl::CSSParserImpl() mNameSpaceMap(nsnull), mHavePushBack(PR_FALSE), mNavQuirkMode(PR_FALSE), + mUnsafeRulesEnabled(PR_FALSE), #ifdef MOZ_SVG mSVGMode(PR_FALSE), #endif @@ -516,7 +529,7 @@ CSSParserImpl::CSSParserImpl() { } -NS_IMPL_ISUPPORTS1(CSSParserImpl, nsICSSParser) +NS_IMPL_ISUPPORTS2(CSSParserImpl, nsICSSParser, nsICSSParser_MOZILLA_1_8_BRANCH) CSSParserImpl::~CSSParserImpl() { @@ -628,6 +641,17 @@ CSSParserImpl::Parse(nsIUnicharInputStream* aInput, nsIURI* aBaseURI, PRUint32 aLineNumber, nsICSSStyleSheet*& aResult) +{ + return Parse(aInput, aSheetURI, aBaseURI, aLineNumber, PR_FALSE, aResult); +} + +NS_IMETHODIMP +CSSParserImpl::Parse(nsIUnicharInputStream* aInput, + nsIURI* aSheetURI, + nsIURI* aBaseURI, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules, + nsICSSStyleSheet*& aResult) { NS_ASSERTION(nsnull != aBaseURI, "need base URL"); NS_ASSERTION(nsnull != aSheetURI, "need sheet URL"); @@ -683,6 +707,8 @@ CSSParserImpl::Parse(nsIUnicharInputStream* aInput, mSection = eCSSSection_Charset; // sheet is empty, any rules are fair } + mUnsafeRulesEnabled = aAllowUnsafeRules; + nsCSSToken* tk = &mToken; for (;;) { // Get next non-whitespace token @@ -704,6 +730,8 @@ CSSParserImpl::Parse(nsIUnicharInputStream* aInput, } ReleaseScanner(); + mUnsafeRulesEnabled = PR_FALSE; + aResult = mSheet; NS_ADDREF(aResult); @@ -2399,7 +2427,9 @@ CSSParserImpl::ParsePseudoSelector(PRInt32& aDataMask, nsCOMPtr pseudo = do_GetAtom(buffer); // stash away some info about this pseudo so we only have to get it once. + PRBool isTreePseudo = PR_FALSE; #ifdef MOZ_XUL + isTreePseudo = IsTreePseudoElement(pseudo); // If a tree pseudo-element is using the function syntax, it will // get isTree set here and will pass the check below that only // allows functions if they are in our list of things allowed to be @@ -2411,7 +2441,10 @@ CSSParserImpl::ParsePseudoSelector(PRInt32& aDataMask, IsTreePseudoElement(pseudo); #endif PRBool isPseudoElement = nsCSSPseudoElements::IsPseudoElement(pseudo); - PRBool isAnonBox = nsCSSAnonBoxes::IsAnonBox(pseudo); + // anonymous boxes are only allowed if they're the tree boxes or we have + // enabled unsafe rules + PRBool isAnonBox = nsCSSAnonBoxes::IsAnonBox(pseudo) && + (mUnsafeRulesEnabled || isTreePseudo); // If it's a function token, it better be on our "ok" list, and if the name // is that of a function pseudo it better be a function token @@ -2478,7 +2511,7 @@ CSSParserImpl::ParsePseudoSelector(PRInt32& aDataMask, if (!parsingPseudoElement && !nsCSSPseudoElements::IsCSS2PseudoElement(pseudo) #ifdef MOZ_XUL - && !IsTreePseudoElement(pseudo) + && !isTreePseudo #endif ) { REPORT_UNEXPECTED_TOKEN(PEPseudoSelNewStyleOnly); diff --git a/mozilla/layout/style/nsICSSLoader.h b/mozilla/layout/style/nsICSSLoader.h index 43054d5362e..27649cffedf 100644 --- a/mozilla/layout/style/nsICSSLoader.h +++ b/mozilla/layout/style/nsICSSLoader.h @@ -138,6 +138,19 @@ public: NS_IMETHOD SetEnabled(PRBool aEnabled) = 0; }; +// IID for the nsICSSLoader_MOZILLA_1_8_BRANCH interface +// 8cee4512-b487-4573-8bcb-190d36fff66a +#define NS_ICSS_LOADER_MOZILLA_1_8_BRANCH_IID \ +{0x8cee4512, 0xb487, 0x4573, {0x8b, 0xcb, 0x19, 0x0d, 0x36, 0xff, 0xf6, 0x6a}} + +class nsICSSLoader_MOZILLA_1_8_BRANCH : public nsISupports { +public: + NS_DEFINE_STATIC_IID_ACCESSOR(NS_ICSS_LOADER_MOZILLA_1_8_BRANCH_IID) + + // Load a sheet, with optional enabling of unsafe rules + NS_IMETHOD LoadSheetSync(nsIURI* aURL, PRBool aEnableUnsafeRules, nsICSSStyleSheet** aSheet) = 0; +}; + nsresult NS_NewCSSLoader(nsIDocument* aDocument, nsICSSLoader** aLoader); diff --git a/mozilla/layout/style/nsICSSParser.h b/mozilla/layout/style/nsICSSParser.h index a761e18ef36..9499c22ec02 100644 --- a/mozilla/layout/style/nsICSSParser.h +++ b/mozilla/layout/style/nsICSSParser.h @@ -145,6 +145,27 @@ public: nscolor* aColor) = 0; }; +// IID for the nsICSSParser_MOZILLA_1_8_BRANCH interface +// fcef7cd9-9ac4-4283-91f6-8eea74c15892 +#define NS_ICSS_PARSER_MOZILLA_1_8_BRANCH_IID \ +{0xfcef7cd9, 0x9ac4, 0x4283, {0x91, 0xf6, 0x8e, 0xea, 0x74, 0xc1, 0x58, 0x92}} + +class nsICSSParser_MOZILLA_1_8_BRANCH : public nsISupports { +public: + NS_DEFINE_STATIC_IID_ACCESSOR(NS_ICSS_PARSER_MOZILLA_1_8_BRANCH_IID) + + /** + * @param aAllowUnsafeRules see aEnableUnsafeRules in + * nsICSSLoader::LoadSheetSync + */ + NS_IMETHOD Parse(nsIUnicharInputStream* aInput, + nsIURI* aSheetURL, + nsIURI* aBaseURI, + PRUint32 aLineNumber, + PRBool aAllowUnsafeRules, + nsICSSStyleSheet*& aResult) = 0; +}; + nsresult NS_NewCSSParser(nsICSSParser** aInstancePtrResult); diff --git a/mozilla/layout/style/nsLayoutStylesheetCache.cpp b/mozilla/layout/style/nsLayoutStylesheetCache.cpp index e7598824793..e9570c230f1 100644 --- a/mozilla/layout/style/nsLayoutStylesheetCache.cpp +++ b/mozilla/layout/style/nsLayoutStylesheetCache.cpp @@ -86,8 +86,9 @@ nsLayoutStylesheetCache::ScrollbarsSheet() NS_LITERAL_CSTRING("chrome://global/skin/xulscrollbars.css")); #endif + // Scrollbars don't need access to unsafe rules if (sheetURI) - LoadSheet(sheetURI, gStyleCache->mScrollbarsSheet); + LoadSheet(sheetURI, gStyleCache->mScrollbarsSheet, PR_FALSE); #ifdef XP_MACOSX NS_ASSERTION(gStyleCache->mScrollbarsSheet, "Could not load nativescrollbars.css."); #else @@ -110,8 +111,9 @@ nsLayoutStylesheetCache::FormsSheet() NS_NewURI(getter_AddRefs(sheetURI), NS_LITERAL_CSTRING("resource://gre/res/forms.css")); + // forms.css needs access to unsafe rules if (sheetURI) - LoadSheet(sheetURI, gStyleCache->mFormsSheet); + LoadSheet(sheetURI, gStyleCache->mFormsSheet, PR_TRUE); NS_ASSERTION(gStyleCache->mFormsSheet, "Could not load forms.css."); } @@ -211,13 +213,14 @@ nsLayoutStylesheetCache::LoadSheetFile(nsIFile* aFile, nsCOMPtr uri; NS_NewFileURI(getter_AddRefs(uri), aFile); - LoadSheet(uri, aSheet); + LoadSheet(uri, aSheet, PR_FALSE); } static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID); void -nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr &aSheet) +nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr &aSheet, + PRBool aEnableUnsafeRules) { if (!aURI) { NS_ERROR("Null URI. Out of memory?"); @@ -226,10 +229,10 @@ nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr &aSh // note: CSS Loader is treated as a service here... slightly unusual, // but within the rules. - nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); + nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); if (!cssLoader) return; - cssLoader->LoadAgentSheet(aURI, getter_AddRefs(aSheet)); + cssLoader->LoadSheetSync(aURI, aEnableUnsafeRules, getter_AddRefs(aSheet)); } nsLayoutStylesheetCache* diff --git a/mozilla/layout/style/nsLayoutStylesheetCache.h b/mozilla/layout/style/nsLayoutStylesheetCache.h index 3b22c7c5ae1..4669dff20eb 100644 --- a/mozilla/layout/style/nsLayoutStylesheetCache.h +++ b/mozilla/layout/style/nsLayoutStylesheetCache.h @@ -65,7 +65,8 @@ private: static void EnsureGlobal(); void InitFromProfile(); static void LoadSheetFile(nsIFile* aFile, nsCOMPtr &aSheet); - static void LoadSheet(nsIURI* aURI, nsCOMPtr &aSheet); + static void LoadSheet(nsIURI* aURI, nsCOMPtr &aSheet, + PRBool aEnableUnsafeRules); static nsLayoutStylesheetCache* gStyleCache; nsCOMPtr mScrollbarsSheet; diff --git a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp index 86b73b56b1a..a3bcc61b25b 100644 --- a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp @@ -1419,7 +1419,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) if (IsChromeURI(uri)) { // Reload the sheet. nsCOMPtr newSheet; - rv = LoadStyleSheetWithURL(uri, getter_AddRefs(newSheet)); + rv = LoadStyleSheetWithURL(uri, PR_TRUE, getter_AddRefs(newSheet)); if (NS_FAILED(rv)) return rv; if (newSheet) { rv = newAgentSheets.AppendObject(newSheet) ? NS_OK : NS_ERROR_FAILURE; @@ -1471,7 +1471,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) // XXX what about chrome sheets that have a title or are disabled? This // only works by sheer dumb luck. // XXXbz this should really use the document's CSSLoader! - LoadStyleSheetWithURL(uri, getter_AddRefs(newSheet)); + LoadStyleSheetWithURL(uri, PR_FALSE, getter_AddRefs(newSheet)); // Even if it's null, we put in in there. newSheets.AppendObject(newSheet); } @@ -2980,14 +2980,16 @@ nsChromeRegistry::AddToCompositeDataSource(PRBool aUseProfile) return NS_OK; } -nsresult nsChromeRegistry::LoadStyleSheetWithURL(nsIURI* aURL, nsICSSStyleSheet** aSheet) +nsresult nsChromeRegistry::LoadStyleSheetWithURL(nsIURI* aURL, + PRBool aAllowUnsafeRules, + nsICSSStyleSheet** aSheet) { *aSheet = nsnull; - nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); + nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); if (!cssLoader) return NS_ERROR_FAILURE; - return cssLoader->LoadAgentSheet(aURL, aSheet); + return cssLoader->LoadSheetSync(aURL, aAllowUnsafeRules, aSheet); } nsresult nsChromeRegistry::LoadInstallDataSource() diff --git a/mozilla/rdf/chrome/src/nsChromeRegistry.h b/mozilla/rdf/chrome/src/nsChromeRegistry.h index bce0fd5a7c2..23f32ad2622 100644 --- a/mozilla/rdf/chrome/src/nsChromeRegistry.h +++ b/mozilla/rdf/chrome/src/nsChromeRegistry.h @@ -120,7 +120,8 @@ protected: PRBool aIsOverlay, PRBool aUseProfile, PRBool aRemove); - nsresult LoadStyleSheetWithURL(nsIURI* aURL, nsICSSStyleSheet** aSheet); + nsresult LoadStyleSheetWithURL(nsIURI* aURL, PRBool aAllowUnsafeRules, + nsICSSStyleSheet** aSheet); nsresult LoadInstallDataSource(); nsresult LoadProfileDataSource();