mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-23 10:54:33 +00:00
Bug 318128 Fix abuse of the CSS loader as a service r=bsmedberg sr=bz
This commit is contained in:
parent
93ef502cdc
commit
ed906ab7d1
@ -823,6 +823,10 @@ static void FlushSkinBindingsForWindow(nsIDOMWindowInternal* aWindow)
|
||||
// XXXbsmedberg: move this to nsIWindowMediator
|
||||
NS_IMETHODIMP nsChromeRegistry::RefreshSkins()
|
||||
{
|
||||
nsCOMPtr<nsICSSLoader> cssLoader(do_CreateInstance(kCSSLoaderCID));
|
||||
if (!cssLoader)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIWindowMediator> windowMediator
|
||||
(do_GetService(NS_WINDOWMEDIATOR_CONTRACTID));
|
||||
if (!windowMediator)
|
||||
@ -853,7 +857,7 @@ NS_IMETHODIMP nsChromeRegistry::RefreshSkins()
|
||||
if (protoWindow) {
|
||||
nsCOMPtr<nsIDOMWindowInternal> 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<nsIDOMWindowCollection> frames;
|
||||
@ -893,7 +898,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow)
|
||||
nsCOMPtr<nsIDOMWindow> childWin;
|
||||
frames->Item(j, getter_AddRefs(childWin));
|
||||
nsCOMPtr<nsIDOMWindowInternal> 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<nsICSSStyleSheet> 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<nsICSSLoader> cssLoader = do_GetService(kCSSLoaderCID);
|
||||
if (!cssLoader) return NS_ERROR_FAILURE;
|
||||
|
||||
return cssLoader->LoadSheetSync(aURL, aSheet);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsChromeRegistry::AllowScriptsForPackage(nsIURI* aChromeURI, PRBool *aResult)
|
||||
{
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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<nsIDocShell> ds(do_QueryInterface(docShell));
|
||||
nsCOMPtr<nsIChromeEventHandler> chromeHandler;
|
||||
nsCOMPtr<nsICSSLoader> cssLoader( do_GetService(kCSSLoaderCID) );
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsCOMPtr<nsICSSStyleSheet> csssheet;
|
||||
|
||||
@ -2165,6 +2162,9 @@ DocumentViewerImpl::CreateStyleSet(nsIDocument* aDocument,
|
||||
nsAutoString sheets;
|
||||
elt->GetAttribute(NS_LITERAL_STRING("usechromesheets"), sheets);
|
||||
if (!sheets.IsEmpty() && baseURI) {
|
||||
nsCOMPtr<nsICSSLoader> cssLoader;
|
||||
NS_NewCSSLoader(getter_AddRefs(cssLoader));
|
||||
|
||||
char *str = ToNewCString(sheets);
|
||||
char *newStr = str;
|
||||
char *token;
|
||||
|
@ -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<nsICSSStyleSheet
|
||||
LoadSheet(uri, aSheet);
|
||||
}
|
||||
|
||||
static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID);
|
||||
|
||||
void
|
||||
nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr<nsICSSStyleSheet> &aSheet)
|
||||
{
|
||||
@ -224,13 +224,15 @@ nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr<nsICSSStyleSheet> &aSh
|
||||
return;
|
||||
}
|
||||
|
||||
// note: CSS Loader is treated as a service here... slightly unusual,
|
||||
// but within the rules.
|
||||
nsCOMPtr<nsICSSLoader> 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;
|
||||
|
@ -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<nsICSSStyleSheet> &aSheet);
|
||||
|
||||
static nsLayoutStylesheetCache* gStyleCache;
|
||||
static nsICSSLoader* gCSSLoader;
|
||||
nsCOMPtr<nsICSSStyleSheet> mScrollbarsSheet;
|
||||
nsCOMPtr<nsICSSStyleSheet> mFormsSheet;
|
||||
nsCOMPtr<nsICSSStyleSheet> mUserContentSheet;
|
||||
|
@ -57,6 +57,7 @@ REQUIRES = xpcom \
|
||||
rdf \
|
||||
necko \
|
||||
content \
|
||||
layout \
|
||||
xuldoc \
|
||||
jar \
|
||||
$(NULL)
|
||||
|
@ -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<nsICSSLoader> 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()
|
||||
|
@ -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<nsIRDFResource> mDisabled;
|
||||
nsCOMPtr<nsIRDFResource> mXPCNativeWrappers;
|
||||
|
||||
nsCOMPtr<nsICSSLoader> mCSSLoader;
|
||||
nsCOMPtr<nsIZipReader> mOverrideJAR;
|
||||
nsCString mOverrideJARURL;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user