mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 02:14:43 +00:00
Bug 544112 part 2: DeCOMtaminate and devirtualize nsCSSLoader. r=bzbarsky sr=dbaron
--HG-- rename : layout/style/nsICSSLoader.h => layout/style/nsCSSLoader.h
This commit is contained in:
parent
a5be3ffde2
commit
6ce13b76a5
@ -119,7 +119,6 @@
|
||||
#define SELECTED_LOCALE_PREF "general.useragent.locale"
|
||||
#define SELECTED_SKIN_PREF "general.skins.selectedSkin"
|
||||
|
||||
static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID);
|
||||
static NS_DEFINE_CID(kLookAndFeelCID, NS_LOOKANDFEEL_CID);
|
||||
|
||||
nsChromeRegistry* nsChromeRegistry::gChromeRegistry;
|
||||
|
@ -90,7 +90,6 @@ class nsIDOMDocumentType;
|
||||
class nsScriptLoader;
|
||||
class nsIContentSink;
|
||||
class nsIScriptEventManager;
|
||||
class nsICSSLoader;
|
||||
class nsHTMLStyleSheet;
|
||||
class nsHTMLCSSStyleSheet;
|
||||
class nsILayoutHistoryState;
|
||||
@ -106,6 +105,10 @@ class nsFrameLoader;
|
||||
class nsIBoxObject;
|
||||
|
||||
namespace mozilla {
|
||||
namespace css {
|
||||
class Loader;
|
||||
} // namespace css
|
||||
|
||||
namespace dom {
|
||||
class Link;
|
||||
} // namespace dom
|
||||
@ -568,7 +571,7 @@ public:
|
||||
/**
|
||||
* Get this document's CSSLoader. This is guaranteed to not return null.
|
||||
*/
|
||||
nsICSSLoader* CSSLoader() const {
|
||||
mozilla::css::Loader* CSSLoader() const {
|
||||
return mCSSLoader;
|
||||
}
|
||||
|
||||
@ -1333,7 +1336,7 @@ protected:
|
||||
// additional headers that we don't want to expose.
|
||||
// The cleanup is handled by the nsDocument destructor.
|
||||
nsNodeInfoManager* mNodeInfoManager; // [STRONG]
|
||||
nsICSSLoader* mCSSLoader; // [STRONG]
|
||||
mozilla::css::Loader* mCSSLoader; // [STRONG]
|
||||
|
||||
// The set of all object, embed, applet, video and audio elements for
|
||||
// which this is the owner document. (They might not be in the document.)
|
||||
|
@ -46,7 +46,7 @@
|
||||
#include "nsScriptLoader.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDOMDocument.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsStyleConsts.h"
|
||||
#include "nsStyleLinkElement.h"
|
||||
#include "nsINodeInfo.h"
|
||||
|
@ -69,7 +69,6 @@ class nsIDocument;
|
||||
class nsIURI;
|
||||
class nsIChannel;
|
||||
class nsIDocShell;
|
||||
class nsICSSLoader;
|
||||
class nsIParser;
|
||||
class nsIAtom;
|
||||
class nsIChannel;
|
||||
@ -79,6 +78,12 @@ class nsNodeInfoManager;
|
||||
class nsScriptLoader;
|
||||
class nsIApplicationCache;
|
||||
|
||||
namespace mozilla {
|
||||
namespace css {
|
||||
class Loader;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NS_DEBUG
|
||||
|
||||
extern PRLogModuleInfo* gContentSinkLogModuleInfo;
|
||||
@ -303,7 +308,7 @@ protected:
|
||||
nsCOMPtr<nsIURI> mDocumentURI;
|
||||
nsCOMPtr<nsIURI> mDocumentBaseURI;
|
||||
nsCOMPtr<nsIDocShell> mDocShell;
|
||||
nsCOMPtr<nsICSSLoader> mCSSLoader;
|
||||
nsRefPtr<mozilla::css::Loader> mCSSLoader;
|
||||
nsRefPtr<nsNodeInfoManager> mNodeInfoManager;
|
||||
nsRefPtr<nsScriptLoader> mScriptLoader;
|
||||
|
||||
|
@ -63,6 +63,7 @@
|
||||
#include "nsContentList.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsIBaseWindow.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIDocShell.h"
|
||||
#include "nsIDocShellTreeItem.h"
|
||||
#include "nsIScriptRuntime.h"
|
||||
@ -1750,9 +1751,10 @@ nsDocument::Init()
|
||||
|
||||
mOnloadBlocker = new nsOnloadBlocker();
|
||||
NS_ENSURE_TRUE(mOnloadBlocker, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
NS_NewCSSLoader(this, &mCSSLoader);
|
||||
|
||||
mCSSLoader = new mozilla::css::Loader(this);
|
||||
NS_ENSURE_TRUE(mCSSLoader, NS_ERROR_OUT_OF_MEMORY);
|
||||
NS_ADDREF(mCSSLoader);
|
||||
// Assume we're not quirky, until we know otherwise
|
||||
mCSSLoader->SetCompatibilityMode(eCompatibility_FullStandards);
|
||||
|
||||
@ -3493,9 +3495,8 @@ nsDocument::AddCatalogStyleSheet(nsIStyleSheet* aSheet)
|
||||
void
|
||||
nsDocument::EnsureCatalogStyleSheet(const char *aStyleSheetURI)
|
||||
{
|
||||
nsICSSLoader* cssLoader = CSSLoader();
|
||||
PRBool enabled;
|
||||
if (NS_SUCCEEDED(cssLoader->GetEnabled(&enabled)) && enabled) {
|
||||
mozilla::css::Loader* cssLoader = CSSLoader();
|
||||
if (cssLoader->GetEnabled()) {
|
||||
PRInt32 sheetCount = GetNumberOfCatalogStyleSheets();
|
||||
for (PRInt32 i = 0; i < sheetCount; i++) {
|
||||
nsIStyleSheet* sheet = GetCatalogStyleSheetAt(i);
|
||||
|
@ -82,7 +82,6 @@
|
||||
#include "nsIScriptObjectPrincipal.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsScriptLoader.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsIRadioGroupContainer.h"
|
||||
#include "nsIScriptEventManager.h"
|
||||
#include "nsILayoutHistoryState.h"
|
||||
|
@ -46,7 +46,7 @@
|
||||
#include "nsStyleLinkElement.h"
|
||||
|
||||
#include "nsIContent.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDOMComment.h"
|
||||
@ -240,18 +240,11 @@ nsStyleLinkElement::DoUpdateStyleSheet(nsIDocument *aOldDocument,
|
||||
|
||||
nsCOMPtr<nsIDocument> doc = thisContent->GetDocument();
|
||||
|
||||
if (!doc) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRBool enabled = PR_FALSE;
|
||||
doc->CSSLoader()->GetEnabled(&enabled);
|
||||
if (!enabled) {
|
||||
if (!doc || !doc->CSSLoader()->GetEnabled()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
PRBool isInline;
|
||||
|
||||
nsCOMPtr<nsIURI> uri = GetStyleSheetURL(&isInline);
|
||||
|
||||
if (!aForceUpdate && mStyleSheet && !isInline && uri) {
|
||||
|
@ -49,7 +49,7 @@
|
||||
#include "nsIDocument.h"
|
||||
#include "nsICSSStyleRule.h"
|
||||
#include "nsCSSParser.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIDOMMutationEvent.h"
|
||||
|
||||
#ifdef MOZ_SVG
|
||||
@ -242,7 +242,7 @@ nsStyledElement::ParseStyleAttribute(const nsAString& aValue,
|
||||
}
|
||||
|
||||
if (isCSS) {
|
||||
nsICSSLoader* cssLoader = doc->CSSLoader();
|
||||
mozilla::css::Loader* cssLoader = doc->CSSLoader();
|
||||
nsCSSParser cssParser(cssLoader);
|
||||
if (cssParser) {
|
||||
nsCOMPtr<nsIURI> baseURI = GetBaseURI();
|
||||
|
@ -41,7 +41,6 @@
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsIAtom.h"
|
||||
#include "nsIContentViewer.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsICSSStyleRule.h"
|
||||
#include "nsCSSStruct.h"
|
||||
#include "nsIDocument.h"
|
||||
|
@ -98,7 +98,7 @@
|
||||
#include "nsIDOMHTMLBodyElement.h"
|
||||
#include "nsINameSpaceManager.h"
|
||||
#include "nsGenericHTMLElement.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIHttpChannel.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsIEventListenerManager.h"
|
||||
|
@ -49,7 +49,6 @@ class nsIDOMHTMLFormElement;
|
||||
class nsIDOMHTMLMapElement;
|
||||
class nsHTMLStyleSheet;
|
||||
class nsIStyleSheet;
|
||||
class nsICSSLoader;
|
||||
class nsIContent;
|
||||
class nsIDOMHTMLBodyElement;
|
||||
class nsIScriptElement;
|
||||
|
@ -61,7 +61,6 @@
|
||||
#include "nsCSSDeclaration.h"
|
||||
#include "nsCSSProps.h"
|
||||
#include "nsCSSParser.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsGenericHTMLElement.h"
|
||||
#include "nsNodeInfoManager.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
|
@ -74,7 +74,6 @@
|
||||
|
||||
#include "nsIScriptContext.h"
|
||||
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsIStyleRuleProcessor.h"
|
||||
#include "nsXBLResourceLoader.h"
|
||||
|
||||
|
@ -45,15 +45,14 @@
|
||||
#include "nsIServiceManager.h"
|
||||
#include "nsXBLResourceLoader.h"
|
||||
#include "nsXBLPrototypeResources.h"
|
||||
#include "nsXBLPrototypeBinding.h"
|
||||
#include "nsIDocumentObserver.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsLayoutCID.h"
|
||||
#include "nsCSSRuleProcessor.h"
|
||||
#include "nsStyleSet.h"
|
||||
|
||||
static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID);
|
||||
|
||||
nsXBLPrototypeResources::nsXBLPrototypeResources(nsXBLPrototypeBinding* aBinding)
|
||||
{
|
||||
MOZ_COUNT_CTOR(nsXBLPrototypeResources);
|
||||
@ -108,11 +107,10 @@ nsXBLPrototypeResources::FlushSkinSheets()
|
||||
if (mStyleSheetList.Count() == 0)
|
||||
return NS_OK;
|
||||
|
||||
nsresult rv;
|
||||
// XXXbz should be getting loader off the document or something
|
||||
nsCOMPtr<nsICSSLoader> loader = do_CreateInstance(kCSSLoaderCID, &rv);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
mLoader->mBinding->XBLDocumentInfo()->GetDocument(getter_AddRefs(doc));
|
||||
mozilla::css::Loader* cssLoader = doc->CSSLoader();
|
||||
|
||||
// We have scoped stylesheets. Reload any chrome stylesheets we
|
||||
// encounter. (If they aren't skin sheets, it doesn't matter, since
|
||||
// they'll still be in the chrome cache.
|
||||
@ -120,28 +118,28 @@ nsXBLPrototypeResources::FlushSkinSheets()
|
||||
|
||||
nsCOMArray<nsICSSStyleSheet> oldSheets(mStyleSheetList);
|
||||
mStyleSheetList.Clear();
|
||||
|
||||
|
||||
PRInt32 i;
|
||||
PRInt32 count = oldSheets.Count();
|
||||
for (i = 0; i < count; i++) {
|
||||
nsICSSStyleSheet* oldSheet = oldSheets[i];
|
||||
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
oldSheet->GetSheetURI(getter_AddRefs(uri));
|
||||
|
||||
nsCOMPtr<nsICSSStyleSheet> newSheet;
|
||||
if (IsChromeURI(uri)) {
|
||||
if (NS_FAILED(loader->LoadSheetSync(uri, getter_AddRefs(newSheet))))
|
||||
if (NS_FAILED(cssLoader->LoadSheetSync(uri, getter_AddRefs(newSheet))))
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
newSheet = oldSheet;
|
||||
}
|
||||
|
||||
|
||||
mStyleSheetList.AppendObject(newSheet);
|
||||
}
|
||||
mRuleProcessor = new nsCSSRuleProcessor(mStyleSheetList,
|
||||
nsStyleSet::eDocSheet);
|
||||
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -48,7 +48,7 @@
|
||||
#include "nsIDocumentObserver.h"
|
||||
#include "imgILoader.h"
|
||||
#include "imgIRequest.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIXBLDocumentInfo.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsNetUtil.h"
|
||||
@ -112,7 +112,7 @@ nsXBLResourceLoader::LoadResources(PRBool* aResult)
|
||||
nsCOMPtr<nsIDocument> doc;
|
||||
mBinding->XBLDocumentInfo()->GetDocument(getter_AddRefs(doc));
|
||||
|
||||
nsICSSLoader* cssLoader = doc->CSSLoader();
|
||||
mozilla::css::Loader* cssLoader = doc->CSSLoader();
|
||||
nsIURI *docURL = doc->GetDocumentURI();
|
||||
nsIPrincipal* docPrincipal = doc->NodePrincipal();
|
||||
|
||||
|
@ -59,8 +59,8 @@
|
||||
#include "nsDOMDocumentType.h"
|
||||
#include "nsHTMLParts.h"
|
||||
#include "nsCRT.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsGkAtoms.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsIScriptContext.h"
|
||||
|
@ -63,7 +63,7 @@
|
||||
#include "nsIHTMLDocument.h"
|
||||
#include "nsIStyleSheetLinkingElement.h"
|
||||
#include "nsIDocumentTransformer.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsICharsetAlias.h"
|
||||
#include "nsIHTMLContentSink.h"
|
||||
#include "nsContentUtils.h"
|
||||
|
@ -83,7 +83,7 @@
|
||||
#include "nsCRT.h"
|
||||
|
||||
#include "nsXULPrototypeDocument.h" // XXXbe temporary
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
|
||||
#include "nsUnicharUtils.h"
|
||||
#include "nsGkAtoms.h"
|
||||
|
@ -113,6 +113,7 @@
|
||||
#include "nsIParser.h"
|
||||
#include "nsIParserService.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIScriptError.h"
|
||||
#include "nsIStyleSheetLinkingElement.h"
|
||||
#include "nsEventDispatcher.h"
|
||||
|
@ -64,7 +64,6 @@
|
||||
#include "nsISelectionController.h"
|
||||
#include "nsIFileChannel.h"
|
||||
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsIDocumentObserver.h"
|
||||
#include "nsIDocumentStateListener.h"
|
||||
|
@ -72,7 +72,7 @@
|
||||
#include "nsIDOMEventGroup.h"
|
||||
#include "nsILinkHandler.h"
|
||||
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsIDOMStyleSheet.h"
|
||||
#include "nsIDocumentObserver.h"
|
||||
@ -3372,29 +3372,22 @@ nsHTMLEditor::ReplaceStyleSheet(const nsAString& aURL)
|
||||
{
|
||||
// Disable last sheet if not the same as new one
|
||||
if (!mLastStyleSheetURL.IsEmpty() && !mLastStyleSheetURL.Equals(aURL))
|
||||
return EnableStyleSheet(mLastStyleSheetURL, PR_FALSE);
|
||||
return EnableStyleSheet(mLastStyleSheetURL, PR_FALSE);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsICSSLoader> cssLoader;
|
||||
nsresult rv = GetCSSLoader(aURL, getter_AddRefs(cssLoader));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Make sure the pres shell doesn't disappear during the load.
|
||||
if (!mPresShellWeak) return NS_ERROR_NOT_INITIALIZED;
|
||||
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
|
||||
if (!ps) return NS_ERROR_NOT_INITIALIZED;
|
||||
nsIDocument *document = ps->GetDocument();
|
||||
if (!document) return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsCOMPtr<nsIURI> uaURI;
|
||||
rv = NS_NewURI(getter_AddRefs(uaURI), aURL);
|
||||
nsresult rv = NS_NewURI(getter_AddRefs(uaURI), aURL);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = cssLoader->LoadSheet(uaURI, nsnull, EmptyCString(), this);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return NS_OK;
|
||||
return ps->GetDocument()->CSSLoader()->
|
||||
LoadSheet(uaURI, nsnull, EmptyCString(), this);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
@ -3423,19 +3416,20 @@ nsHTMLEditor::RemoveStyleSheet(const nsAString &aURL)
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP
|
||||
NS_IMETHODIMP
|
||||
nsHTMLEditor::AddOverrideStyleSheet(const nsAString& aURL)
|
||||
{
|
||||
// Enable existing sheet if already loaded.
|
||||
if (EnableExistingStyleSheet(aURL))
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsICSSLoader> cssLoader;
|
||||
nsresult rv = GetCSSLoader(aURL, getter_AddRefs(cssLoader));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
// Make sure the pres shell doesn't disappear during the load.
|
||||
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
|
||||
if (!ps)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCOMPtr<nsIURI> uaURI;
|
||||
rv = NS_NewURI(getter_AddRefs(uaURI), aURL);
|
||||
nsresult rv = NS_NewURI(getter_AddRefs(uaURI), aURL);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// We MUST ONLY load synchronous local files (no @import)
|
||||
@ -3443,16 +3437,13 @@ 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, PR_TRUE, getter_AddRefs(sheet));
|
||||
rv = ps->GetDocument()->CSSLoader()->
|
||||
LoadSheetSync(uaURI, PR_TRUE, PR_TRUE, getter_AddRefs(sheet));
|
||||
|
||||
// Synchronous loads should ALWAYS return completed
|
||||
if (!sheet)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
|
||||
if (!ps)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
// Add the override style sheet
|
||||
// (This checks if already exists)
|
||||
ps->AddOverrideStyleSheet(sheet);
|
||||
@ -3630,29 +3621,9 @@ nsHTMLEditor::GetURLForStyleSheet(nsICSSStyleSheet *aStyleSheet,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsHTMLEditor::GetCSSLoader(const nsAString& aURL, nsICSSLoader** aCSSLoader)
|
||||
{
|
||||
if (!aCSSLoader)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
*aCSSLoader = 0;
|
||||
|
||||
if (!mPresShellWeak) return NS_ERROR_NOT_INITIALIZED;
|
||||
nsCOMPtr<nsIPresShell> ps = do_QueryReferent(mPresShellWeak);
|
||||
if (!ps) return NS_ERROR_NOT_INITIALIZED;
|
||||
nsIDocument *document = ps->GetDocument();
|
||||
if (!document) return NS_ERROR_NULL_POINTER;
|
||||
|
||||
NS_ADDREF(*aCSSLoader = document->CSSLoader());
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
#ifdef XP_MAC
|
||||
#pragma mark -
|
||||
#pragma mark nsIEditorMailSupport methods
|
||||
#pragma mark -
|
||||
#endif
|
||||
/*
|
||||
* nsIEditorMailSupport methods
|
||||
*/
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHTMLEditor::GetEmbeddedObjects(nsISupportsArray** aNodeList)
|
||||
|
@ -53,7 +53,6 @@
|
||||
#include "nsEditor.h"
|
||||
#include "nsIDOMElement.h"
|
||||
#include "nsIDOMEventListener.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsICSSLoaderObserver.h"
|
||||
#include "nsITableLayout.h"
|
||||
|
||||
@ -410,9 +409,6 @@ public:
|
||||
PRBool aSafeToAskFrames,
|
||||
PRBool *aSeenBR);
|
||||
|
||||
// Stylesheet-related methods that aren't part of nsIEditorStyleSheets.
|
||||
nsresult GetCSSLoader(const nsAString& aURL, nsICSSLoader** aCSSLoader);
|
||||
|
||||
// Returns TRUE if sheet was loaded, false if it wasn't
|
||||
PRBool EnableExistingStyleSheet(const nsAString& aURL);
|
||||
|
||||
|
@ -50,7 +50,6 @@
|
||||
#include "nsISelectionPrivate.h"
|
||||
#include "nsIDOMHTMLImageElement.h"
|
||||
#include "nsISelectionController.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsIDocumentObserver.h"
|
||||
#include "TypeInState.h"
|
||||
|
@ -89,7 +89,7 @@
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsIContentViewerEdit.h"
|
||||
#include "nsIContentViewerFile.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIMarkupDocumentViewer.h"
|
||||
#include "nsIInterfaceRequestor.h"
|
||||
#include "nsIInterfaceRequestorUtils.h"
|
||||
@ -2144,8 +2144,7 @@ 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));
|
||||
nsRefPtr<mozilla::css::Loader> cssLoader = new mozilla::css::Loader();
|
||||
|
||||
char *str = ToNewCString(sheets);
|
||||
char *newStr = str;
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include "prlog.h"
|
||||
#include "nsStyleSheetService.h"
|
||||
#include "nsIStyleSheet.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsContentCID.h"
|
||||
@ -53,8 +53,6 @@
|
||||
#include "nsIObserverService.h"
|
||||
#include "nsLayoutStatics.h"
|
||||
|
||||
static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID);
|
||||
|
||||
nsStyleSheetService *nsStyleSheetService::gInstance = nsnull;
|
||||
|
||||
nsStyleSheetService::nsStyleSheetService()
|
||||
@ -171,7 +169,9 @@ nsStyleSheetService::LoadAndRegisterSheetInternal(nsIURI *aSheetURI,
|
||||
NS_ENSURE_ARG(aSheetType == AGENT_SHEET || aSheetType == USER_SHEET);
|
||||
NS_ENSURE_ARG_POINTER(aSheetURI);
|
||||
|
||||
nsCOMPtr<nsICSSLoader> loader = do_CreateInstance(kCSSLoaderCID);
|
||||
nsRefPtr<mozilla::css::Loader> loader = new mozilla::css::Loader();
|
||||
NS_ENSURE_TRUE(loader, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
nsCOMPtr<nsICSSStyleSheet> sheet;
|
||||
// Allow UA sheets, but not user sheets, to use unsafe rules
|
||||
nsresult rv = loader->LoadSheetSync(aSheetURI, aSheetType == AGENT_SHEET,
|
||||
|
@ -46,14 +46,12 @@
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDocumentViewer.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsNodeInfo.h"
|
||||
#include "nsNodeInfoManager.h"
|
||||
#include "nsString.h"
|
||||
#include "nsContentCID.h"
|
||||
#include "prprf.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCRT.h"
|
||||
#include "nsIViewSourceChannel.h"
|
||||
#ifdef MOZ_MEDIA
|
||||
|
@ -46,7 +46,6 @@
|
||||
#include "nsHTMLContentSerializer.h"
|
||||
#include "nsHTMLParts.h"
|
||||
#include "nsGenericHTMLElement.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsICategoryManager.h"
|
||||
#include "nsIComponentManager.h"
|
||||
#include "nsIContentIterator.h"
|
||||
@ -483,7 +482,6 @@ MAKE_CTOR(CreateXMLDocument, nsIDocument, NS_NewXML
|
||||
MAKE_CTOR(CreateSVGDocument, nsIDocument, NS_NewSVGDocument)
|
||||
#endif
|
||||
MAKE_CTOR(CreateImageDocument, nsIDocument, NS_NewImageDocument)
|
||||
MAKE_CTOR(CreateCSSLoader, nsICSSLoader, NS_NewCSSLoader)
|
||||
MAKE_CTOR(CreateDOMSelection, nsISelection, NS_NewDomSelection)
|
||||
MAKE_CTOR(CreateSelection, nsFrameSelection, NS_NewSelection)
|
||||
MAKE_CTOR(CreateRange, nsIDOMRange, NS_NewRange)
|
||||
@ -1046,11 +1044,6 @@ static const nsModuleComponentInfo gComponents[] = {
|
||||
nsnull,
|
||||
CreateImageDocument },
|
||||
|
||||
{ "CSS loader",
|
||||
NS_CSS_LOADER_CID,
|
||||
nsnull,
|
||||
CreateCSSLoader },
|
||||
|
||||
{ "Dom selection",
|
||||
NS_DOMSELECTION_CID,
|
||||
"@mozilla.org/content/dom-selection;1",
|
||||
|
@ -57,6 +57,7 @@ EXPORTS = \
|
||||
nsCSSAnonBoxes.h \
|
||||
nsCSSKeywordList.h \
|
||||
nsCSSKeywords.h \
|
||||
nsCSSLoader.h \
|
||||
nsCSSParser.h \
|
||||
nsCSSPropList.h \
|
||||
nsCSSProperty.h \
|
||||
@ -74,7 +75,6 @@ EXPORTS = \
|
||||
nsICSSDeclaration.h \
|
||||
nsICSSGroupRule.h \
|
||||
nsICSSImportRule.h \
|
||||
nsICSSLoader.h \
|
||||
nsICSSLoaderObserver.h \
|
||||
nsICSSNameSpaceRule.h \
|
||||
nsICSSPseudoComparator.h \
|
||||
|
File diff suppressed because it is too large
Load Diff
500
layout/style/nsCSSLoader.h
Normal file
500
layout/style/nsCSSLoader.h
Normal file
@ -0,0 +1,500 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/* loading of CSS style sheets using the network APIs */
|
||||
|
||||
#ifndef nsICSSLoader_h___
|
||||
#define nsICSSLoader_h___
|
||||
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsAString.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsCompatibility.h"
|
||||
#include "nsDataHashtable.h"
|
||||
#include "nsInterfaceHashtable.h"
|
||||
#include "nsTArray.h"
|
||||
#include "nsTObserverArray.h"
|
||||
#include "nsURIHashKey.h"
|
||||
|
||||
class nsIAtom;
|
||||
class nsICSSImportRule;
|
||||
class nsICSSLoaderObserver;
|
||||
class nsICSSStyleSheet;
|
||||
class nsIContent;
|
||||
class nsIDocument;
|
||||
class nsIUnicharInputStream;
|
||||
class nsCSSParser;
|
||||
class nsMediaList;
|
||||
class nsPresContext;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class URIAndPrincipalHashKey : public nsURIHashKey
|
||||
{
|
||||
public:
|
||||
typedef URIAndPrincipalHashKey* KeyType;
|
||||
typedef const URIAndPrincipalHashKey* KeyTypePointer;
|
||||
|
||||
URIAndPrincipalHashKey(const URIAndPrincipalHashKey* aKey)
|
||||
: nsURIHashKey(aKey->mKey), mPrincipal(aKey->mPrincipal)
|
||||
{
|
||||
MOZ_COUNT_CTOR(URIAndPrincipalHashKey);
|
||||
}
|
||||
URIAndPrincipalHashKey(nsIURI* aURI, nsIPrincipal* aPrincipal)
|
||||
: nsURIHashKey(aURI), mPrincipal(aPrincipal)
|
||||
{
|
||||
MOZ_COUNT_CTOR(URIAndPrincipalHashKey);
|
||||
}
|
||||
URIAndPrincipalHashKey(const URIAndPrincipalHashKey& toCopy)
|
||||
: nsURIHashKey(toCopy), mPrincipal(toCopy.mPrincipal)
|
||||
{
|
||||
MOZ_COUNT_CTOR(URIAndPrincipalHashKey);
|
||||
}
|
||||
~URIAndPrincipalHashKey()
|
||||
{
|
||||
MOZ_COUNT_DTOR(URIAndPrincipalHashKey);
|
||||
}
|
||||
|
||||
URIAndPrincipalHashKey* GetKey() const {
|
||||
return const_cast<URIAndPrincipalHashKey*>(this);
|
||||
}
|
||||
const URIAndPrincipalHashKey* GetKeyPointer() const { return this; }
|
||||
|
||||
PRBool KeyEquals(const URIAndPrincipalHashKey* aKey) const {
|
||||
if (!nsURIHashKey::KeyEquals(aKey->mKey)) {
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
if (!mPrincipal != !aKey->mPrincipal) {
|
||||
// One or the other has a principal, but not both... not equal
|
||||
return PR_FALSE;
|
||||
}
|
||||
|
||||
PRBool eq;
|
||||
return !mPrincipal ||
|
||||
(NS_SUCCEEDED(mPrincipal->Equals(aKey->mPrincipal, &eq)) && eq);
|
||||
}
|
||||
|
||||
static const URIAndPrincipalHashKey*
|
||||
KeyToPointer(URIAndPrincipalHashKey* aKey) { return aKey; }
|
||||
static PLDHashNumber HashKey(const URIAndPrincipalHashKey* aKey) {
|
||||
return nsURIHashKey::HashKey(aKey->mKey);
|
||||
}
|
||||
|
||||
enum { ALLOW_MEMMOVE = PR_TRUE };
|
||||
|
||||
protected:
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
};
|
||||
|
||||
|
||||
|
||||
namespace css {
|
||||
|
||||
class SheetLoadData;
|
||||
|
||||
/***********************************************************************
|
||||
* Enum that describes the state of the sheet returned by CreateSheet. *
|
||||
***********************************************************************/
|
||||
enum StyleSheetState {
|
||||
eSheetStateUnknown = 0,
|
||||
eSheetNeedsParser,
|
||||
eSheetPending,
|
||||
eSheetLoading,
|
||||
eSheetComplete
|
||||
};
|
||||
|
||||
class Loader {
|
||||
public:
|
||||
Loader();
|
||||
Loader(nsIDocument*);
|
||||
~Loader();
|
||||
|
||||
// This isn't a COM class but it's reference-counted like one.
|
||||
NS_IMETHOD_(nsrefcnt) AddRef();
|
||||
NS_IMETHOD_(nsrefcnt) Release();
|
||||
|
||||
void DropDocumentReference(); // notification that doc is going away
|
||||
|
||||
void SetCompatibilityMode(nsCompatibility aCompatMode)
|
||||
{ mCompatMode = aCompatMode; }
|
||||
nsCompatibility GetCompatibilityMode() { return mCompatMode; }
|
||||
nsresult SetPreferredSheet(const nsAString& aTitle);
|
||||
nsresult GetPreferredSheet(nsAString& aTitle);
|
||||
|
||||
// XXXbz sort out what the deal is with events! When should they fire?
|
||||
|
||||
/**
|
||||
* Load an inline style sheet. If a successful result is returned and
|
||||
* *aCompleted is false, then aObserver is guaranteed to be notified
|
||||
* asynchronously once the sheet is marked complete. If an error is
|
||||
* returned, or if *aCompleted is true, aObserver will not be notified. In
|
||||
* addition to parsing the sheet, this method will insert it into the
|
||||
* stylesheet list of this CSSLoader's document.
|
||||
*
|
||||
* @param aElement the element linking to the stylesheet. This must not be
|
||||
* null and must implement nsIStyleSheetLinkingElement.
|
||||
* @param aStream the character stream that holds the stylesheet data.
|
||||
* @param aLineNumber the line number at which the stylesheet data started.
|
||||
* @param aTitle the title of the sheet.
|
||||
* @param aMedia the media string for the sheet.
|
||||
* @param aObserver the observer to notify when the load completes.
|
||||
* May be null.
|
||||
* @param [out] aCompleted whether parsing of the sheet completed.
|
||||
* @param [out] aIsAlternate whether the stylesheet ended up being an
|
||||
* alternate sheet.
|
||||
*/
|
||||
nsresult LoadInlineStyle(nsIContent* aElement,
|
||||
nsIUnicharInputStream* aStream,
|
||||
PRUint32 aLineNumber,
|
||||
const nsAString& aTitle,
|
||||
const nsAString& aMedia,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
PRBool* aCompleted,
|
||||
PRBool* aIsAlternate);
|
||||
|
||||
/**
|
||||
* Load a linked (document) stylesheet. If a successful result is returned,
|
||||
* aObserver is guaranteed to be notified asynchronously once the sheet is
|
||||
* loaded and marked complete. If an error is returned, aObserver will not
|
||||
* be notified. In addition to loading the sheet, this method will insert it
|
||||
* into the stylesheet list of this CSSLoader's document.
|
||||
*
|
||||
* @param aElement the element linking to the the stylesheet. May be null.
|
||||
* @param aURL the URL of the sheet.
|
||||
* @param aTitle the title of the sheet.
|
||||
* @param aMedia the media string for the sheet.
|
||||
* @param aHasAlternateRel whether the rel for this link included
|
||||
* "alternate".
|
||||
* @param aObserver the observer to notify when the load completes.
|
||||
* May be null.
|
||||
* @param [out] aIsAlternate whether the stylesheet actually ended up beinga
|
||||
* an alternate sheet. Note that this need not match
|
||||
* aHasAlternateRel.
|
||||
*/
|
||||
nsresult LoadStyleLink(nsIContent* aElement,
|
||||
nsIURI* aURL,
|
||||
const nsAString& aTitle,
|
||||
const nsAString& aMedia,
|
||||
PRBool aHasAlternateRel,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
PRBool* aIsAlternate);
|
||||
|
||||
/**
|
||||
* Load a child (@import-ed) style sheet. In addition to loading the sheet,
|
||||
* this method will insert it into the child sheet list of aParentSheet. If
|
||||
* there is no sheet currently being parsed and the child sheet is not
|
||||
* complete when this method returns, then when the child sheet becomes
|
||||
* complete aParentSheet will be QIed to nsICSSLoaderObserver and
|
||||
* asynchronously notified, just like for LoadStyleLink. Note that if the
|
||||
* child sheet is already complete when this method returns, no
|
||||
* nsICSSLoaderObserver notification will be sent.
|
||||
*
|
||||
* @param aParentSheet the parent of this child sheet
|
||||
* @param aURL the URL of the child sheet
|
||||
* @param aMedia the already-parsed media list for the child sheet
|
||||
* @param aRule the @import rule importing this child. This is used to
|
||||
* properly order the child sheet list of aParentSheet.
|
||||
*/
|
||||
nsresult LoadChildSheet(nsICSSStyleSheet* aParentSheet,
|
||||
nsIURI* aURL,
|
||||
nsMediaList* aMedia,
|
||||
nsICSSImportRule* aRule);
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
nsresult LoadSheetSync(nsIURI* aURL, PRBool aEnableUnsafeRules,
|
||||
PRBool aUseSystemPrincipal,
|
||||
nsICSSStyleSheet** aSheet);
|
||||
|
||||
/**
|
||||
* As above, but aUseSystemPrincipal and aEnableUnsafeRules are assumed false.
|
||||
*/
|
||||
nsresult LoadSheetSync(nsIURI* aURL, nsICSSStyleSheet** aSheet) {
|
||||
return LoadSheetSync(aURL, PR_FALSE, PR_FALSE, aSheet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Asynchronously load the stylesheet at aURL. If a successful result is
|
||||
* returned, aObserver is guaranteed to be notified asynchronously once the
|
||||
* sheet is loaded and marked complete. This method can be used to load
|
||||
* sheets not associated with a document.
|
||||
*
|
||||
* @param aURL the URL of the sheet to load
|
||||
* @param aOriginPrincipal the principal to use for security checks. This
|
||||
* can be null to indicate that these checks should
|
||||
* be skipped.
|
||||
* @param aCharset the encoding to use for converting the sheet data
|
||||
* from bytes to Unicode. May be empty to indicate that the
|
||||
* charset of the CSSLoader's document should be used. This
|
||||
* is only used if neither the network transport nor the
|
||||
* sheet itself indicate an encoding.
|
||||
* @param aObserver the observer to notify when the load completes.
|
||||
* Must not be null.
|
||||
* @param [out] aSheet the sheet to load. Note that the sheet may well
|
||||
* not be loaded by the time this method returns.
|
||||
*/
|
||||
nsresult LoadSheet(nsIURI* aURL,
|
||||
nsIPrincipal* aOriginPrincipal,
|
||||
const nsCString& aCharset,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
nsICSSStyleSheet** aSheet);
|
||||
|
||||
/**
|
||||
* Same as above, to be used when the caller doesn't care about the
|
||||
* not-yet-loaded sheet.
|
||||
*/
|
||||
nsresult LoadSheet(nsIURI* aURL,
|
||||
nsIPrincipal* aOriginPrincipal,
|
||||
const nsCString& aCharset,
|
||||
nsICSSLoaderObserver* aObserver);
|
||||
|
||||
/**
|
||||
* Stop loading all sheets. All nsICSSLoaderObservers involved will be
|
||||
* notified with NS_BINDING_ABORTED as the status, possibly synchronously.
|
||||
*/
|
||||
nsresult Stop(void);
|
||||
|
||||
/**
|
||||
* Stop loading one sheet. The nsICSSLoaderObserver involved will be
|
||||
* notified with NS_BINDING_ABORTED as the status, possibly synchronously.
|
||||
*/
|
||||
nsresult StopLoadingSheet(nsIURI* aURL);
|
||||
|
||||
/**
|
||||
* Whether the loader is enabled or not.
|
||||
* When disabled, processing of new styles is disabled and an attempt
|
||||
* to do so will fail with a return code of
|
||||
* NS_ERROR_NOT_AVAILABLE. Note that this DOES NOT disable
|
||||
* currently loading styles or already processed styles.
|
||||
*/
|
||||
PRBool GetEnabled() { return mEnabled; }
|
||||
void SetEnabled(PRBool aEnabled) { mEnabled = aEnabled; }
|
||||
|
||||
/**
|
||||
* Return true if this loader has pending loads (ones that would send
|
||||
* notifications to an nsICSSLoaderObserver attached to this loader).
|
||||
* If called from inside nsICSSLoaderObserver::StyleSheetLoaded, this will
|
||||
* return PR_FALSE if and only if that is the last StyleSheetLoaded
|
||||
* notification the CSSLoader knows it's going to send. In other words, if
|
||||
* two sheets load at once (via load coalescing, e.g.), HasPendingLoads()
|
||||
* will return PR_TRUE during notification for the first one, and PR_FALSE
|
||||
* during notification for the second one.
|
||||
*/
|
||||
PRBool HasPendingLoads();
|
||||
|
||||
/**
|
||||
* Add an observer to this loader. The observer will be notified
|
||||
* for all loads that would have notified their own observers (even
|
||||
* if those loads don't have observers attached to them).
|
||||
* Load-specific observers will be notified before generic
|
||||
* observers. The loader holds a reference to the observer.
|
||||
*
|
||||
* aObserver must not be null.
|
||||
*/
|
||||
nsresult AddObserver(nsICSSLoaderObserver* aObserver);
|
||||
|
||||
/**
|
||||
* Remove an observer added via AddObserver.
|
||||
*/
|
||||
void RemoveObserver(nsICSSLoaderObserver* aObserver);
|
||||
|
||||
// These interfaces are public only for the benefit of static functions
|
||||
// within nsCSSLoader.cpp.
|
||||
|
||||
// IsAlternate can change our currently selected style set if none
|
||||
// is selected and aHasAlternateRel is false.
|
||||
PRBool IsAlternate(const nsAString& aTitle, PRBool aHasAlternateRel);
|
||||
|
||||
typedef nsTArray<nsRefPtr<SheetLoadData> > LoadDataArray;
|
||||
|
||||
private:
|
||||
friend class SheetLoadData;
|
||||
|
||||
// Note: null aSourcePrincipal indicates that the content policy and
|
||||
// CheckLoadURI checks should be skipped.
|
||||
nsresult CheckLoadAllowed(nsIPrincipal* aSourcePrincipal,
|
||||
nsIURI* aTargetURI,
|
||||
nsISupports* aContext);
|
||||
|
||||
|
||||
// For inline style, the aURI param is null, but the aLinkingContent
|
||||
// must be non-null then. The loader principal must never be null
|
||||
// if aURI is not null.
|
||||
nsresult CreateSheet(nsIURI* aURI,
|
||||
nsIContent* aLinkingContent,
|
||||
nsIPrincipal* aLoaderPrincipal,
|
||||
PRBool aSyncLoad,
|
||||
StyleSheetState& aSheetState,
|
||||
nsICSSStyleSheet** aSheet);
|
||||
|
||||
// Pass in either a media string or the nsMediaList from the
|
||||
// CSSParser. Don't pass both.
|
||||
// If aIsAlternate is non-null, this method will set *aIsAlternate to
|
||||
// correspond to the sheet's enabled state (which it will set no matter what)
|
||||
nsresult PrepareSheet(nsICSSStyleSheet* aSheet,
|
||||
const nsAString& aTitle,
|
||||
const nsAString& aMediaString,
|
||||
nsMediaList* aMediaList,
|
||||
PRBool aHasAlternateRel = PR_FALSE,
|
||||
PRBool *aIsAlternate = nsnull);
|
||||
|
||||
nsresult InsertSheetInDoc(nsICSSStyleSheet* aSheet,
|
||||
nsIContent* aLinkingContent,
|
||||
nsIDocument* aDocument);
|
||||
|
||||
nsresult InsertChildSheet(nsICSSStyleSheet* aSheet,
|
||||
nsICSSStyleSheet* aParentSheet,
|
||||
nsICSSImportRule* aParentRule);
|
||||
|
||||
nsresult InternalLoadNonDocumentSheet(nsIURI* aURL,
|
||||
PRBool aAllowUnsafeRules,
|
||||
PRBool aUseSystemPrincipal,
|
||||
nsIPrincipal* aOriginPrincipal,
|
||||
const nsCString& aCharset,
|
||||
nsICSSStyleSheet** aSheet,
|
||||
nsICSSLoaderObserver* aObserver);
|
||||
|
||||
// Post a load event for aObserver to be notified about aSheet. The
|
||||
// notification will be sent with status NS_OK unless the load event is
|
||||
// canceled at some point (in which case it will be sent with
|
||||
// NS_BINDING_ABORTED). aWasAlternate indicates the state when the load was
|
||||
// initiated, not the state at some later time. aURI should be the URI the
|
||||
// sheet was loaded from (may be null for inline sheets).
|
||||
nsresult PostLoadEvent(nsIURI* aURI,
|
||||
nsICSSStyleSheet* aSheet,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
PRBool aWasAlternate);
|
||||
|
||||
// Start the loads of all the sheets in mPendingDatas
|
||||
void StartAlternateLoads();
|
||||
|
||||
// Handle an event posted by PostLoadEvent
|
||||
void HandleLoadEvent(SheetLoadData* aEvent);
|
||||
|
||||
// Note: LoadSheet is responsible for releasing aLoadData and setting the
|
||||
// sheet to complete on failure.
|
||||
nsresult LoadSheet(SheetLoadData* aLoadData, StyleSheetState aSheetState);
|
||||
|
||||
// Parse the stylesheet in aLoadData. The sheet data comes from aStream.
|
||||
// Set aCompleted to true if the parse finished, false otherwise (e.g. if the
|
||||
// sheet had an @import). If aCompleted is true when this returns, then
|
||||
// ParseSheet also called SheetComplete on aLoadData
|
||||
nsresult ParseSheet(nsIUnicharInputStream* aStream,
|
||||
SheetLoadData* aLoadData,
|
||||
PRBool& aCompleted);
|
||||
|
||||
// The load of the sheet in aLoadData is done, one way or another. Do final
|
||||
// cleanup, including releasing aLoadData.
|
||||
void SheetComplete(SheetLoadData* aLoadData, nsresult aStatus);
|
||||
|
||||
// The guts of SheetComplete. This may be called recursively on parent datas
|
||||
// or datas that had glommed on to a single load. The array is there so load
|
||||
// datas whose observers need to be notified can be added to it.
|
||||
void DoSheetComplete(SheetLoadData* aLoadData, nsresult aStatus,
|
||||
LoadDataArray& aDatasToNotify);
|
||||
|
||||
nsInterfaceHashtable<URIAndPrincipalHashKey, nsICSSStyleSheet>
|
||||
mCompleteSheets;
|
||||
nsDataHashtable<URIAndPrincipalHashKey, SheetLoadData*>
|
||||
mLoadingDatas; // weak refs
|
||||
nsDataHashtable<URIAndPrincipalHashKey, SheetLoadData*>
|
||||
mPendingDatas; // weak refs
|
||||
|
||||
// We're not likely to have many levels of @import... But likely to have
|
||||
// some. Allocate some storage, what the hell.
|
||||
nsAutoTArray<SheetLoadData*, 8> mParsingDatas;
|
||||
|
||||
// The array of posted stylesheet loaded events (SheetLoadDatas) we have.
|
||||
// Note that these are rare.
|
||||
LoadDataArray mPostedEvents;
|
||||
|
||||
// Our array of "global" observers
|
||||
nsTObserverArray<nsCOMPtr<nsICSSLoaderObserver> > mObservers;
|
||||
|
||||
// the load data needs access to the document...
|
||||
nsIDocument* mDocument; // the document we live for
|
||||
|
||||
// Refcounting
|
||||
nsAutoRefCnt mRefCnt;
|
||||
NS_DECL_OWNINGTHREAD
|
||||
|
||||
// Number of datas still waiting to be notified on if we're notifying on a
|
||||
// whole bunch at once (e.g. in one of the stop methods). This is used to
|
||||
// make sure that HasPendingLoads() won't return false until we're notifying
|
||||
// on the last data we're working with.
|
||||
PRUint32 mDatasToNotifyOn;
|
||||
|
||||
nsCompatibility mCompatMode;
|
||||
nsString mPreferredSheet; // title of preferred sheet
|
||||
|
||||
PRPackedBool mEnabled; // is enabled to load new styles
|
||||
|
||||
#ifdef DEBUG
|
||||
PRPackedBool mSyncCallback;
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace css
|
||||
} // namespace mozilla
|
||||
|
||||
#endif /* nsICSSLoader_h___ */
|
@ -50,7 +50,7 @@
|
||||
#include "nsCSSProps.h"
|
||||
#include "nsCSSKeywords.h"
|
||||
#include "nsCSSScanner.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsICSSStyleRule.h"
|
||||
#include "nsICSSImportRule.h"
|
||||
#include "nsCSSRules.h"
|
||||
@ -176,7 +176,7 @@ public:
|
||||
nsresult SetSVGMode(PRBool aSVGMode);
|
||||
#endif
|
||||
|
||||
nsresult SetChildLoader(nsICSSLoader* aChildLoader);
|
||||
nsresult SetChildLoader(mozilla::css::Loader* aChildLoader);
|
||||
|
||||
// Clears everything set by the above Set*() functions.
|
||||
void Reset();
|
||||
@ -619,7 +619,7 @@ protected:
|
||||
nsCOMPtr<nsICSSStyleSheet> mSheet;
|
||||
|
||||
// Used for @import rules
|
||||
nsICSSLoader* mChildLoader; // not ref counted, it owns us
|
||||
mozilla::css::Loader* mChildLoader; // not ref counted, it owns us
|
||||
|
||||
// Sheet section we're in. This is used to enforce correct ordering of the
|
||||
// various rule types (eg the fact that a @charset rule must come before
|
||||
@ -793,7 +793,7 @@ CSSParserImpl::SetSVGMode(PRBool aSVGMode)
|
||||
#endif
|
||||
|
||||
nsresult
|
||||
CSSParserImpl::SetChildLoader(nsICSSLoader* aChildLoader)
|
||||
CSSParserImpl::SetChildLoader(mozilla::css::Loader* aChildLoader)
|
||||
{
|
||||
mChildLoader = aChildLoader; // not ref counted, it owns us
|
||||
return NS_OK;
|
||||
@ -9137,7 +9137,7 @@ CSSParserImpl::ParseMarker()
|
||||
|
||||
static CSSParserImpl* gFreeList = nsnull;
|
||||
|
||||
nsCSSParser::nsCSSParser(nsICSSLoader* aLoader,
|
||||
nsCSSParser::nsCSSParser(mozilla::css::Loader* aLoader,
|
||||
nsICSSStyleSheet* aSheet)
|
||||
{
|
||||
CSSParserImpl *impl = gFreeList;
|
||||
@ -9207,7 +9207,7 @@ nsCSSParser::SetSVGMode(PRBool aSVGMode)
|
||||
#endif
|
||||
|
||||
nsresult
|
||||
nsCSSParser::SetChildLoader(nsICSSLoader* aChildLoader)
|
||||
nsCSSParser::SetChildLoader(mozilla::css::Loader* aChildLoader)
|
||||
{
|
||||
return static_cast<CSSParserImpl*>(mImpl)->
|
||||
SetChildLoader(aChildLoader);
|
||||
|
@ -45,23 +45,27 @@
|
||||
#include "nsColor.h"
|
||||
#include "nsCOMArray.h"
|
||||
|
||||
class nsICSSStyleRule;
|
||||
class nsICSSLoader;
|
||||
class nsICSSStyleSheet;
|
||||
class nsIUnicharInputStream;
|
||||
class nsIURI;
|
||||
class nsCSSDeclaration;
|
||||
class nsICSSLoader;
|
||||
class nsICSSRule;
|
||||
class nsMediaList;
|
||||
class nsICSSStyleRule;
|
||||
class nsICSSStyleSheet;
|
||||
class nsIPrincipal;
|
||||
class nsIURI;
|
||||
class nsIUnicharInputStream;
|
||||
class nsCSSDeclaration;
|
||||
struct nsCSSSelectorList;
|
||||
class nsMediaList;
|
||||
|
||||
namespace mozilla {
|
||||
namespace css {
|
||||
class Loader;
|
||||
}
|
||||
}
|
||||
|
||||
// Interface to the css parser.
|
||||
|
||||
class NS_STACK_CLASS nsCSSParser {
|
||||
public:
|
||||
NS_HIDDEN nsCSSParser(nsICSSLoader* aLoader = nsnull,
|
||||
NS_HIDDEN nsCSSParser(mozilla::css::Loader* aLoader = nsnull,
|
||||
nsICSSStyleSheet* aSheet = nsnull);
|
||||
NS_HIDDEN ~nsCSSParser();
|
||||
|
||||
@ -92,7 +96,7 @@ public:
|
||||
#endif
|
||||
|
||||
// Set loader to use for child sheets
|
||||
NS_HIDDEN_(nsresult) SetChildLoader(nsICSSLoader* aChildLoader);
|
||||
NS_HIDDEN_(nsresult) SetChildLoader(mozilla::css::Loader* aChildLoader);
|
||||
|
||||
/**
|
||||
* Parse aInput into the stylesheet that was previously set by calling
|
||||
@ -108,7 +112,7 @@ public:
|
||||
* the principal of the sheet passed to SetStyleSheet.
|
||||
* @param aLineNumber the line number of the first line of the sheet.
|
||||
* @param aAllowUnsafeRules see aEnableUnsafeRules in
|
||||
* nsICSSLoader::LoadSheetSync
|
||||
* mozilla::css::Loader::LoadSheetSync
|
||||
*/
|
||||
NS_HIDDEN_(nsresult) Parse(nsIUnicharInputStream* aInput,
|
||||
nsIURI* aSheetURL,
|
||||
|
@ -50,7 +50,7 @@
|
||||
#include "nsICSSGroupRule.h"
|
||||
#include "nsCSSDeclaration.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsPresContext.h"
|
||||
#include "nsIDocument.h"
|
||||
@ -912,7 +912,7 @@ public:
|
||||
virtual nsresult GetCSSParsingEnvironment(nsIURI** aSheetURI,
|
||||
nsIURI** aBaseURI,
|
||||
nsIPrincipal** aSheetPrincipal,
|
||||
nsICSSLoader** aCSSLoader);
|
||||
mozilla::css::Loader** aCSSLoader);
|
||||
virtual nsresult DeclarationChanged();
|
||||
virtual nsIDocument* DocToUpdate();
|
||||
|
||||
@ -1019,7 +1019,7 @@ nsresult
|
||||
DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aSheetURI,
|
||||
nsIURI** aBaseURI,
|
||||
nsIPrincipal** aSheetPrincipal,
|
||||
nsICSSLoader** aCSSLoader)
|
||||
mozilla::css::Loader** aCSSLoader)
|
||||
{
|
||||
// null out the out params since some of them may not get initialized below
|
||||
*aSheetURI = nsnull;
|
||||
|
@ -66,7 +66,7 @@
|
||||
#include "nsIDOMNode.h"
|
||||
#include "nsDOMError.h"
|
||||
#include "nsCSSParser.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsICSSLoaderObserver.h"
|
||||
#include "nsINameSpaceManager.h"
|
||||
#include "nsXMLNameSpaceMap.h"
|
||||
@ -78,6 +78,8 @@
|
||||
#include "nsCSSDeclaration.h"
|
||||
#include "nsRuleNode.h"
|
||||
|
||||
namespace css = mozilla::css;
|
||||
|
||||
// -------------------------------
|
||||
// Style Rule List for the DOM
|
||||
//
|
||||
@ -1843,7 +1845,7 @@ nsCSSStyleSheet::InsertRuleInternal(const nsAString& aRule,
|
||||
|
||||
// Hold strong ref to the CSSLoader in case the document update
|
||||
// kills the document
|
||||
nsCOMPtr<nsICSSLoader> loader;
|
||||
nsRefPtr<css::Loader> loader;
|
||||
if (mDocument) {
|
||||
loader = mDocument->CSSLoader();
|
||||
NS_ASSERTION(loader, "Document with no CSS loader!");
|
||||
@ -2062,10 +2064,10 @@ nsCSSStyleSheet::InsertRuleIntoGroup(const nsAString & aRule,
|
||||
// Nothing to do here
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Hold strong ref to the CSSLoader in case the document update
|
||||
// kills the document
|
||||
nsCOMPtr<nsICSSLoader> loader;
|
||||
nsRefPtr<css::Loader> loader;
|
||||
if (mDocument) {
|
||||
loader = mDocument->CSSLoader();
|
||||
NS_ASSERTION(loader, "Document with no CSS loader!");
|
||||
|
@ -42,7 +42,7 @@
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIDOMMutationEvent.h"
|
||||
#include "nsICSSStyleRule.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsINameSpaceManager.h"
|
||||
#include "nsStyleConsts.h"
|
||||
@ -182,7 +182,7 @@ nsresult
|
||||
nsDOMCSSAttributeDeclaration::GetCSSParsingEnvironment(nsIURI** aSheetURI,
|
||||
nsIURI** aBaseURI,
|
||||
nsIPrincipal** aSheetPrincipal,
|
||||
nsICSSLoader** aCSSLoader)
|
||||
mozilla::css::Loader** aCSSLoader)
|
||||
{
|
||||
NS_ASSERTION(mContent, "Something is severely broken -- there should be an nsIContent here!");
|
||||
// null out the out params since some of them may not get initialized below
|
||||
|
@ -46,7 +46,11 @@
|
||||
#include "nsWrapperCache.h"
|
||||
#include "nsIContent.h"
|
||||
|
||||
class nsICSSLoader;
|
||||
namespace mozilla {
|
||||
namespace css {
|
||||
class Loader;
|
||||
}
|
||||
}
|
||||
|
||||
class nsDOMCSSAttributeDeclaration : public nsDOMCSSDeclaration,
|
||||
public nsWrapperCache
|
||||
@ -69,7 +73,7 @@ public:
|
||||
virtual nsresult GetCSSParsingEnvironment(nsIURI** aSheetURI,
|
||||
nsIURI** aBaseURI,
|
||||
nsIPrincipal** aSheetPrincipal,
|
||||
nsICSSLoader** aCSSLoader);
|
||||
mozilla::css::Loader** aCSSLoader);
|
||||
NS_IMETHOD GetParentRule(nsIDOMCSSRule **aParent);
|
||||
|
||||
virtual nsINode *GetParentObject()
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include "nsDOMCSSDeclaration.h"
|
||||
#include "nsIDOMCSSRule.h"
|
||||
#include "nsCSSParser.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIStyleRule.h"
|
||||
#include "nsCSSDeclaration.h"
|
||||
#include "nsCSSProps.h"
|
||||
@ -53,6 +53,7 @@
|
||||
#include "nsContentUtils.h"
|
||||
#include "mozAutoDocUpdate.h"
|
||||
|
||||
namespace css = mozilla::css;
|
||||
|
||||
nsDOMCSSDeclaration::~nsDOMCSSDeclaration()
|
||||
{
|
||||
@ -252,7 +253,7 @@ nsDOMCSSDeclaration::ParsePropertyValue(const nsCSSProperty aPropID,
|
||||
return result;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsICSSLoader> cssLoader;
|
||||
nsRefPtr<css::Loader> cssLoader;
|
||||
nsCOMPtr<nsIURI> baseURI, sheetURI;
|
||||
nsCOMPtr<nsIPrincipal> sheetPrincipal;
|
||||
|
||||
@ -293,7 +294,7 @@ nsDOMCSSDeclaration::ParseDeclaration(const nsAString& aDecl,
|
||||
return result;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsICSSLoader> cssLoader;
|
||||
nsRefPtr<css::Loader> cssLoader;
|
||||
nsCOMPtr<nsIURI> baseURI, sheetURI;
|
||||
nsCOMPtr<nsIPrincipal> sheetPrincipal;
|
||||
|
||||
|
@ -47,11 +47,16 @@
|
||||
|
||||
class nsCSSDeclaration;
|
||||
class nsCSSParser;
|
||||
class nsICSSLoader;
|
||||
class nsIURI;
|
||||
class nsIPrincipal;
|
||||
class nsIDocument;
|
||||
|
||||
namespace mozilla {
|
||||
namespace css {
|
||||
class Loader;
|
||||
}
|
||||
}
|
||||
|
||||
class CSS2PropertiesTearoff : public nsIDOMNSCSS2Properties
|
||||
{
|
||||
public:
|
||||
@ -114,7 +119,7 @@ protected:
|
||||
virtual nsresult GetCSSParsingEnvironment(nsIURI** aSheetURI,
|
||||
nsIURI** aBaseURI,
|
||||
nsIPrincipal** aSheetPrincipal,
|
||||
nsICSSLoader** aCSSLoader) = 0;
|
||||
mozilla::css::Loader** aCSSLoader) = 0;
|
||||
|
||||
nsresult ParsePropertyValue(const nsCSSProperty aPropID,
|
||||
const nsAString& aPropValue);
|
||||
|
@ -1,291 +0,0 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1999
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
||||
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/* loading of CSS style sheets using the network APIs */
|
||||
|
||||
#ifndef nsICSSLoader_h___
|
||||
#define nsICSSLoader_h___
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsSubstring.h"
|
||||
#include "nsCompatibility.h"
|
||||
|
||||
class nsIAtom;
|
||||
class nsIURI;
|
||||
class nsCSSParser;
|
||||
class nsICSSStyleSheet;
|
||||
class nsPresContext;
|
||||
class nsIContent;
|
||||
class nsIDocument;
|
||||
class nsIUnicharInputStream;
|
||||
class nsICSSLoaderObserver;
|
||||
class nsMediaList;
|
||||
class nsICSSImportRule;
|
||||
class nsIPrincipal;
|
||||
|
||||
// IID for the nsICSSLoader interface
|
||||
// 4e12812e-490c-4cec-b0f4-75c8b79779ba
|
||||
#define NS_ICSS_LOADER_IID \
|
||||
{ 0x4e12812e, 0x490c, 0x4cec, \
|
||||
{ 0xb0, 0xf4, 0x75, 0xc8, 0xb7, 0x97, 0x79, 0xba } }
|
||||
|
||||
typedef void (*nsCSSLoaderCallbackFunc)(nsICSSStyleSheet* aSheet, void *aData, PRBool aDidNotify);
|
||||
|
||||
class nsICSSLoader : public nsISupports {
|
||||
public:
|
||||
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICSS_LOADER_IID)
|
||||
|
||||
NS_IMETHOD Init(nsIDocument* aDocument) = 0;
|
||||
NS_IMETHOD DropDocumentReference(void) = 0; // notification that doc is going away
|
||||
|
||||
NS_IMETHOD SetCompatibilityMode(nsCompatibility aCompatMode) = 0;
|
||||
NS_IMETHOD_(nsCompatibility) GetCompatibilityMode() = 0;
|
||||
NS_IMETHOD SetPreferredSheet(const nsAString& aTitle) = 0;
|
||||
NS_IMETHOD GetPreferredSheet(nsAString& aTitle) = 0;
|
||||
|
||||
// XXXbz sort out what the deal is with events! When should they fire?
|
||||
|
||||
/**
|
||||
* Load an inline style sheet. If a successful result is returned and
|
||||
* *aCompleted is false, then aObserver is guaranteed to be notified
|
||||
* asynchronously once the sheet is marked complete. If an error is
|
||||
* returned, or if *aCompleted is true, aObserver will not be notified. In
|
||||
* addition to parsing the sheet, this method will insert it into the
|
||||
* stylesheet list of this CSSLoader's document.
|
||||
*
|
||||
* @param aElement the element linking to the stylesheet. This must not be
|
||||
* null and must implement nsIStyleSheetLinkingElement.
|
||||
* @param aStream the character stream that holds the stylesheet data.
|
||||
* @param aLineNumber the line number at which the stylesheet data started.
|
||||
* @param aTitle the title of the sheet.
|
||||
* @param aMedia the media string for the sheet.
|
||||
* @param aObserver the observer to notify when the load completes.
|
||||
* May be null.
|
||||
* @param [out] aCompleted whether parsing of the sheet completed.
|
||||
* @param [out] aIsAlternate whether the stylesheet ended up being an
|
||||
* alternate sheet.
|
||||
*/
|
||||
NS_IMETHOD LoadInlineStyle(nsIContent* aElement,
|
||||
nsIUnicharInputStream* aStream,
|
||||
PRUint32 aLineNumber,
|
||||
const nsSubstring& aTitle,
|
||||
const nsSubstring& aMedia,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
PRBool* aCompleted,
|
||||
PRBool* aIsAlternate) = 0;
|
||||
|
||||
/**
|
||||
* Load a linked (document) stylesheet. If a successful result is returned,
|
||||
* aObserver is guaranteed to be notified asynchronously once the sheet is
|
||||
* loaded and marked complete. If an error is returned, aObserver will not
|
||||
* be notified. In addition to loading the sheet, this method will insert it
|
||||
* into the stylesheet list of this CSSLoader's document.
|
||||
*
|
||||
* @param aElement the element linking to the the stylesheet. May be null.
|
||||
* @param aURL the URL of the sheet.
|
||||
* @param aTitle the title of the sheet.
|
||||
* @param aMedia the media string for the sheet.
|
||||
* @param aHasAlternateRel whether the rel for this link included
|
||||
* "alternate".
|
||||
* @param aObserver the observer to notify when the load completes.
|
||||
* May be null.
|
||||
* @param [out] aIsAlternate whether the stylesheet actually ended up beinga
|
||||
* an alternate sheet. Note that this need not match
|
||||
* aHasAlternateRel.
|
||||
*/
|
||||
NS_IMETHOD LoadStyleLink(nsIContent* aElement,
|
||||
nsIURI* aURL,
|
||||
const nsSubstring& aTitle,
|
||||
const nsSubstring& aMedia,
|
||||
PRBool aHasAlternateRel,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
PRBool* aIsAlternate) = 0;
|
||||
|
||||
/**
|
||||
* Load a child (@import-ed) style sheet. In addition to loading the sheet,
|
||||
* this method will insert it into the child sheet list of aParentSheet. If
|
||||
* there is no sheet currently being parsed and the child sheet is not
|
||||
* complete when this method returns, then when the child sheet becomes
|
||||
* complete aParentSheet will be QIed to nsICSSLoaderObserver and
|
||||
* asynchronously notified, just like for LoadStyleLink. Note that if the
|
||||
* child sheet is already complete when this method returns, no
|
||||
* nsICSSLoaderObserver notification will be sent.
|
||||
*
|
||||
* @param aParentSheet the parent of this child sheet
|
||||
* @param aURL the URL of the child sheet
|
||||
* @param aMedia the already-parsed media list for the child sheet
|
||||
* @param aRule the @import rule importing this child. This is used to
|
||||
* properly order the child sheet list of aParentSheet.
|
||||
*/
|
||||
NS_IMETHOD LoadChildSheet(nsICSSStyleSheet* aParentSheet,
|
||||
nsIURI* aURL,
|
||||
nsMediaList* aMedia,
|
||||
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 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;
|
||||
|
||||
/**
|
||||
* As above, but aUseSystemPrincipal and aEnableUnsafeRules are assumed false.
|
||||
*/
|
||||
nsresult LoadSheetSync(nsIURI* aURL, nsICSSStyleSheet** aSheet) {
|
||||
return LoadSheetSync(aURL, PR_FALSE, PR_FALSE, aSheet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Asynchronously load the stylesheet at aURL. If a successful result is
|
||||
* returned, aObserver is guaranteed to be notified asynchronously once the
|
||||
* sheet is loaded and marked complete. This method can be used to load
|
||||
* sheets not associated with a document.
|
||||
*
|
||||
* @param aURL the URL of the sheet to load
|
||||
* @param aOriginPrincipal the principal to use for security checks. This
|
||||
* can be null to indicate that these checks should
|
||||
* be skipped.
|
||||
* @param aCharset the encoding to use for converting the sheet data
|
||||
* from bytes to Unicode. May be empty to indicate that the
|
||||
* charset of the CSSLoader's document should be used. This
|
||||
* is only used if neither the network transport nor the
|
||||
* sheet itself indicate an encoding.
|
||||
* @param aObserver the observer to notify when the load completes.
|
||||
* Must not be null.
|
||||
* @param [out] aSheet the sheet to load. Note that the sheet may well
|
||||
* not be loaded by the time this method returns.
|
||||
*/
|
||||
NS_IMETHOD LoadSheet(nsIURI* aURL,
|
||||
nsIPrincipal* aOriginPrincipal,
|
||||
const nsCString& aCharset,
|
||||
nsICSSLoaderObserver* aObserver,
|
||||
nsICSSStyleSheet** aSheet) = 0;
|
||||
|
||||
/**
|
||||
* Same as above, to be used when the caller doesn't care about the
|
||||
* not-yet-loaded sheet.
|
||||
*/
|
||||
NS_IMETHOD LoadSheet(nsIURI* aURL,
|
||||
nsIPrincipal* aOriginPrincipal,
|
||||
const nsCString& aCharset,
|
||||
nsICSSLoaderObserver* aObserver) = 0;
|
||||
|
||||
/**
|
||||
* Stop loading all sheets. All nsICSSLoaderObservers involved will be
|
||||
* notified with NS_BINDING_ABORTED as the status, possibly synchronously.
|
||||
*/
|
||||
NS_IMETHOD Stop(void) = 0;
|
||||
|
||||
/**
|
||||
* Stop loading one sheet. The nsICSSLoaderObserver involved will be
|
||||
* notified with NS_BINDING_ABORTED as the status, possibly synchronously.
|
||||
*/
|
||||
NS_IMETHOD StopLoadingSheet(nsIURI* aURL) = 0;
|
||||
|
||||
/**
|
||||
* Whether the loader is enabled or not.
|
||||
* When disabled, processing of new styles is disabled and an attempt
|
||||
* to do so will fail with a return code of
|
||||
* NS_ERROR_NOT_AVAILABLE. Note that this DOES NOT disable
|
||||
* currently loading styles or already processed styles.
|
||||
*/
|
||||
NS_IMETHOD GetEnabled(PRBool *aEnabled) = 0;
|
||||
NS_IMETHOD SetEnabled(PRBool aEnabled) = 0;
|
||||
|
||||
/**
|
||||
* Return true if this nsICSSLoader has pending loads (ones that would send
|
||||
* notifications to an nsICSSLoaderObserver attached to this nsICSSLoader).
|
||||
* If called from inside nsICSSLoaderObserver::StyleSheetLoaded, this will
|
||||
* return PR_FALSE if and only if that is the last StyleSheetLoaded
|
||||
* notification the CSSLoader knows it's going to send. In other words, if
|
||||
* two sheets load at once (via load coalescing, e.g.), HasPendingLoads()
|
||||
* will return PR_TRUE during notification for the first one, and PR_FALSE
|
||||
* during notification for the second one.
|
||||
*/
|
||||
NS_IMETHOD_(PRBool) HasPendingLoads() = 0;
|
||||
|
||||
/**
|
||||
* Add an observer to this nsICSSLoader. The observer will be notified for
|
||||
* all loads that would have notified their own observers (even if those
|
||||
* loads don't have observers attached to them). Load-specific observers
|
||||
* will be notified before generic observers. The CSSLoader holds a
|
||||
* reference to the observer.
|
||||
*
|
||||
* aObserver must not be null.
|
||||
*/
|
||||
NS_IMETHOD AddObserver(nsICSSLoaderObserver* aObserver) = 0;
|
||||
|
||||
/**
|
||||
* Remove an observer added via AddObserver.
|
||||
*/
|
||||
NS_IMETHOD_(void) RemoveObserver(nsICSSLoaderObserver* aObserver) = 0;
|
||||
};
|
||||
|
||||
NS_DEFINE_STATIC_IID_ACCESSOR(nsICSSLoader, NS_ICSS_LOADER_IID)
|
||||
|
||||
nsresult
|
||||
NS_NewCSSLoader(nsIDocument* aDocument, nsICSSLoader** aLoader);
|
||||
|
||||
nsresult
|
||||
NS_NewCSSLoader(nsICSSLoader** aLoader);
|
||||
|
||||
#endif /* nsICSSLoader_h___ */
|
@ -38,7 +38,7 @@
|
||||
#include "nsLayoutStylesheetCache.h"
|
||||
|
||||
#include "nsAppDirectoryServiceDefs.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsLayoutCID.h"
|
||||
#include "nsNetUtil.h"
|
||||
@ -254,7 +254,8 @@ nsLayoutStylesheetCache::LoadSheetFile(nsIFile* aFile, nsCOMPtr<nsICSSStyleSheet
|
||||
}
|
||||
|
||||
void
|
||||
nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr<nsICSSStyleSheet> &aSheet,
|
||||
nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI,
|
||||
nsCOMPtr<nsICSSStyleSheet> &aSheet,
|
||||
PRBool aEnableUnsafeRules)
|
||||
{
|
||||
if (!aURI) {
|
||||
@ -262,17 +263,19 @@ nsLayoutStylesheetCache::LoadSheet(nsIURI* aURI, nsCOMPtr<nsICSSStyleSheet> &aSh
|
||||
return;
|
||||
}
|
||||
|
||||
if (!gCSSLoader)
|
||||
NS_NewCSSLoader(&gCSSLoader);
|
||||
if (!gCSSLoader) {
|
||||
gCSSLoader = new mozilla::css::Loader();
|
||||
NS_IF_ADDREF(gCSSLoader);
|
||||
}
|
||||
|
||||
if (gCSSLoader) {
|
||||
gCSSLoader->LoadSheetSync(aURI, aEnableUnsafeRules, PR_TRUE,
|
||||
getter_AddRefs(aSheet));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nsLayoutStylesheetCache*
|
||||
nsLayoutStylesheetCache::gStyleCache = nsnull;
|
||||
|
||||
nsICSSLoader*
|
||||
mozilla::css::Loader*
|
||||
nsLayoutStylesheetCache::gCSSLoader = nsnull;
|
||||
|
@ -43,7 +43,12 @@
|
||||
#include "nsIObserver.h"
|
||||
|
||||
class nsIFile;
|
||||
class nsICSSLoader;
|
||||
|
||||
namespace mozilla {
|
||||
namespace css {
|
||||
class Loader;
|
||||
}
|
||||
}
|
||||
|
||||
class nsLayoutStylesheetCache
|
||||
: public nsIObserver
|
||||
@ -71,7 +76,7 @@ private:
|
||||
PRBool aEnableUnsafeRules);
|
||||
|
||||
static nsLayoutStylesheetCache* gStyleCache;
|
||||
static nsICSSLoader* gCSSLoader;
|
||||
static mozilla::css::Loader* gCSSLoader;
|
||||
nsCOMPtr<nsICSSStyleSheet> mScrollbarsSheet;
|
||||
nsCOMPtr<nsICSSStyleSheet> mFormsSheet;
|
||||
nsCOMPtr<nsICSSStyleSheet> mUserContentSheet;
|
||||
|
@ -48,7 +48,6 @@
|
||||
#include "nsStyleSet.h"
|
||||
#include "nsComputedDOMStyle.h"
|
||||
#include "nsCSSParser.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSDataBlock.h"
|
||||
#include "nsCSSDeclaration.h"
|
||||
#include "nsCSSStruct.h"
|
||||
|
@ -51,11 +51,9 @@
|
||||
#include "nsNetUtil.h"
|
||||
|
||||
#include "nsContentCID.h"
|
||||
#include "nsICSSLoader.h"
|
||||
#include "nsCSSLoader.h"
|
||||
#include "nsICSSStyleSheet.h"
|
||||
|
||||
static NS_DEFINE_CID(kCSSLoaderCID, NS_CSS_LOADER_CID);
|
||||
|
||||
static already_AddRefed<nsIURI>
|
||||
FileToURI(const char *aFilename, nsresult *aRv = 0)
|
||||
{
|
||||
@ -74,7 +72,7 @@ FileToURI(const char *aFilename, nsresult *aRv = 0)
|
||||
static int
|
||||
ParseCSSFile(nsIURI *aSheetURI)
|
||||
{
|
||||
nsCOMPtr<nsICSSLoader> loader(do_CreateInstance(kCSSLoaderCID));
|
||||
nsRefPtr<mozilla::css::Loader> = new mozilla::css::Loader();
|
||||
nsCOMPtr<nsICSSStyleSheet> sheet;
|
||||
loader->LoadSheetSync(aSheetURI, getter_AddRefs(sheet));
|
||||
NS_ASSERTION(sheet, "sheet load failed");
|
||||
|
Loading…
Reference in New Issue
Block a user