diff --git a/mozilla/chrome/src/nsChromeRegistry.cpp b/mozilla/chrome/src/nsChromeRegistry.cpp index 4714ec6fa9e..98402330dbc 100644 --- a/mozilla/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/chrome/src/nsChromeRegistry.cpp @@ -823,6 +823,10 @@ static void FlushSkinBindingsForWindow(nsIDOMWindowInternal* aWindow) // XXXbsmedberg: move this to nsIWindowMediator NS_IMETHODIMP nsChromeRegistry::RefreshSkins() { + nsCOMPtr cssLoader(do_CreateInstance(kCSSLoaderCID)); + if (!cssLoader) + return NS_OK; + nsCOMPtr windowMediator (do_GetService(NS_WINDOWMEDIATOR_CONTRACTID)); if (!windowMediator) @@ -853,7 +857,7 @@ NS_IMETHODIMP nsChromeRegistry::RefreshSkins() if (protoWindow) { nsCOMPtr domWindow = do_QueryInterface(protoWindow); if (domWindow) - RefreshWindow(domWindow); + RefreshWindow(domWindow, cssLoader); } windowEnumerator->HasMoreElements(&more); } @@ -881,7 +885,8 @@ static PRBool IsChromeURI(nsIURI* aURI) } // XXXbsmedberg: move this to windowmediator -nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) +nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow, + nsICSSLoader* aCSSLoader) { // Deal with our subframes first. nsCOMPtr frames; @@ -893,7 +898,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) nsCOMPtr childWin; frames->Item(j, getter_AddRefs(childWin)); nsCOMPtr childInt(do_QueryInterface(childWin)); - RefreshWindow(childInt); + RefreshWindow(childInt, aCSSLoader); } nsresult rv; @@ -928,7 +933,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) if (IsChromeURI(uri)) { // Reload the sheet. nsCOMPtr newSheet; - rv = LoadStyleSheetWithURL(uri, getter_AddRefs(newSheet)); + rv = aCSSLoader->LoadSheetSync(uri, getter_AddRefs(newSheet)); if (NS_FAILED(rv)) return rv; if (newSheet) { rv = newAgentSheets.AppendObject(newSheet) ? NS_OK : NS_ERROR_FAILURE; @@ -980,7 +985,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)); + aCSSLoader->LoadSheetSync(uri, getter_AddRefs(newSheet)); // Even if it's null, we put in in there. newSheets.AppendObject(newSheet); } @@ -1049,17 +1054,6 @@ nsChromeRegistry::ReloadChrome() return rv; } -nsresult -nsChromeRegistry::LoadStyleSheetWithURL(nsIURI* aURL, nsICSSStyleSheet** aSheet) -{ - *aSheet = nsnull; - - nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); - if (!cssLoader) return NS_ERROR_FAILURE; - - return cssLoader->LoadSheetSync(aURL, aSheet); -} - NS_IMETHODIMP nsChromeRegistry::AllowScriptsForPackage(nsIURI* aChromeURI, PRBool *aResult) { diff --git a/mozilla/chrome/src/nsChromeRegistry.h b/mozilla/chrome/src/nsChromeRegistry.h index bac5c4b9731..07013b99702 100644 --- a/mozilla/chrome/src/nsChromeRegistry.h +++ b/mozilla/chrome/src/nsChromeRegistry.h @@ -54,6 +54,7 @@ struct PRFileDesc; class nsIAtom; +class nsICSSLoader; class nsICSSStyleSheet; class nsIDOMWindowInternal; class nsILocalFile; @@ -96,8 +97,6 @@ public: protected: nsresult GetDynamicInfo(nsIURI *aChromeURL, PRBool aIsOverlay, nsISimpleEnumerator **aResult); - static nsresult LoadStyleSheetWithURL(nsIURI* aURL, nsICSSStyleSheet** aSheet); - nsresult LoadInstallDataSource(); nsresult LoadProfileDataSource(); @@ -105,7 +104,8 @@ protected: void FlushAllCaches(); private: - static nsresult RefreshWindow(nsIDOMWindowInternal* aWindow); + static nsresult RefreshWindow(nsIDOMWindowInternal* aWindow, + nsICSSLoader* aCSSLoader); static nsresult GetProviderAndPath(nsIURL* aChromeURL, nsACString& aProvider, nsACString& aPath); diff --git a/mozilla/layout/base/nsDocumentViewer.cpp b/mozilla/layout/base/nsDocumentViewer.cpp index e24bd6e9e9c..dda3c5a2adc 100644 --- a/mozilla/layout/base/nsDocumentViewer.cpp +++ b/mozilla/layout/base/nsDocumentViewer.cpp @@ -2095,8 +2095,6 @@ DocumentViewerImpl::RequestWindowClose(PRBool* aCanClose) return NS_OK; } -NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID); - PR_STATIC_CALLBACK(PRBool) AppendAgentSheet(nsIStyleSheet *aSheet, void *aData) { @@ -2151,7 +2149,6 @@ DocumentViewerImpl::CreateStyleSet(nsIDocument* aDocument, PRBool shouldOverride = PR_FALSE; nsCOMPtr ds(do_QueryInterface(docShell)); nsCOMPtr chromeHandler; - nsCOMPtr cssLoader( do_GetService(kCSSLoaderCID) ); nsCOMPtr uri; nsCOMPtr csssheet; @@ -2165,6 +2162,9 @@ DocumentViewerImpl::CreateStyleSet(nsIDocument* aDocument, nsAutoString sheets; elt->GetAttribute(NS_LITERAL_STRING("usechromesheets"), sheets); if (!sheets.IsEmpty() && baseURI) { + nsCOMPtr cssLoader; + NS_NewCSSLoader(getter_AddRefs(cssLoader)); + char *str = ToNewCString(sheets); char *newStr = str; char *token; diff --git a/mozilla/layout/style/nsLayoutStylesheetCache.cpp b/mozilla/layout/style/nsLayoutStylesheetCache.cpp index 1975e2b4678..85e87cde310 100644 --- a/mozilla/layout/style/nsLayoutStylesheetCache.cpp +++ b/mozilla/layout/style/nsLayoutStylesheetCache.cpp @@ -142,6 +142,7 @@ nsLayoutStylesheetCache::UserChromeSheet() void nsLayoutStylesheetCache::Shutdown() { + NS_IF_RELEASE(gCSSLoader); NS_IF_RELEASE(gStyleCache); } @@ -163,6 +164,7 @@ nsLayoutStylesheetCache::nsLayoutStylesheetCache() nsLayoutStylesheetCache::~nsLayoutStylesheetCache() { + gCSSLoader = nsnull; gStyleCache = nsnull; } @@ -214,8 +216,6 @@ nsLayoutStylesheetCache::LoadSheetFile(nsIFile* aFile, nsCOMPtr &aSheet) { @@ -224,13 +224,15 @@ nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr &aSh return; } - // note: CSS Loader is treated as a service here... slightly unusual, - // but within the rules. - nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); - if (!cssLoader) return; + if (!gCSSLoader) + NS_NewCSSLoader(&gCSSLoader); - cssLoader->LoadSheetSync(aURI, getter_AddRefs(aSheet)); + if (gCSSLoader) + gCSSLoader->LoadSheetSync(aURI, getter_AddRefs(aSheet)); } nsLayoutStylesheetCache* nsLayoutStylesheetCache::gStyleCache = nsnull; + +nsICSSLoader* +nsLayoutStylesheetCache::gCSSLoader = nsnull; diff --git a/mozilla/layout/style/nsLayoutStylesheetCache.h b/mozilla/layout/style/nsLayoutStylesheetCache.h index 3b22c7c5ae1..fc9a00e5b49 100644 --- a/mozilla/layout/style/nsLayoutStylesheetCache.h +++ b/mozilla/layout/style/nsLayoutStylesheetCache.h @@ -43,7 +43,7 @@ #include "nsIObserver.h" class nsIFile; - +class nsICSSLoader; class nsLayoutStylesheetCache : public nsIObserver @@ -68,6 +68,7 @@ private: static void LoadSheet(nsIURI* aURI, nsCOMPtr &aSheet); static nsLayoutStylesheetCache* gStyleCache; + static nsICSSLoader* gCSSLoader; nsCOMPtr mScrollbarsSheet; nsCOMPtr mFormsSheet; nsCOMPtr mUserContentSheet; diff --git a/mozilla/rdf/chrome/build/Makefile.in b/mozilla/rdf/chrome/build/Makefile.in index 3f1ed508775..849b50c8b06 100644 --- a/mozilla/rdf/chrome/build/Makefile.in +++ b/mozilla/rdf/chrome/build/Makefile.in @@ -57,6 +57,7 @@ REQUIRES = xpcom \ rdf \ necko \ content \ + layout \ xuldoc \ jar \ $(NULL) diff --git a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp index 40983099bd6..f68a14fad58 100644 --- a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp @@ -71,7 +71,6 @@ #include "nsIDocument.h" #include "nsIDOMDocument.h" #include "nsIStyleSheet.h" -#include "nsICSSLoader.h" #include "nsICSSStyleSheet.h" #include "nsIPresShell.h" #include "nsIDocShell.h" @@ -2984,10 +2983,13 @@ nsresult nsChromeRegistry::LoadStyleSheetWithURL(nsIURI* aURL, nsICSSStyleSheet* { *aSheet = nsnull; - nsCOMPtr cssLoader = do_GetService(kCSSLoaderCID); - if (!cssLoader) return NS_ERROR_FAILURE; + if (!mCSSLoader) { + nsresult rv; + mCSSLoader = do_CreateInstance(kCSSLoaderCID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + } - return cssLoader->LoadSheetSync(aURL, aSheet); + return mCSSLoader->LoadSheetSync(aURL, aSheet); } nsresult nsChromeRegistry::LoadInstallDataSource() diff --git a/mozilla/rdf/chrome/src/nsChromeRegistry.h b/mozilla/rdf/chrome/src/nsChromeRegistry.h index bce0fd5a7c2..6e08a842a91 100644 --- a/mozilla/rdf/chrome/src/nsChromeRegistry.h +++ b/mozilla/rdf/chrome/src/nsChromeRegistry.h @@ -56,6 +56,7 @@ class nsIDocument; #include "nsIObserver.h" #include "nsWeakReference.h" #include "nsString.h" +#include "nsICSSLoader.h" #include "nsIZipReader.h" #include "nsCOMArray.h" @@ -257,6 +258,7 @@ protected: nsCOMPtr mDisabled; nsCOMPtr mXPCNativeWrappers; + nsCOMPtr mCSSLoader; nsCOMPtr mOverrideJAR; nsCString mOverrideJARURL;