diff --git a/mozilla/chrome/src/nsChromeRegistry.cpp b/mozilla/chrome/src/nsChromeRegistry.cpp index 28f4f2afcda..fb415090a22 100644 --- a/mozilla/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/chrome/src/nsChromeRegistry.cpp @@ -1401,7 +1401,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) nsIStyleSheet *sheet = agentSheets[l]; nsCOMPtr uri; - rv = sheet->GetURL(*getter_AddRefs(uri)); + rv = sheet->GetSheetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; if (IsChromeURI(uri)) { @@ -1446,7 +1446,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) for (i = 0; i < count; i++) { nsCOMPtr sheet = oldSheets[i]; nsCOMPtr uri; - rv = sheet->GetURL(*getter_AddRefs(uri)); + rv = sheet->GetSheetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; if (IsChromeURI(uri)) { diff --git a/mozilla/content/base/public/nsIStyleSheet.h b/mozilla/content/base/public/nsIStyleSheet.h index 2deca98e518..b90f5a00d57 100644 --- a/mozilla/content/base/public/nsIStyleSheet.h +++ b/mozilla/content/base/public/nsIStyleSheet.h @@ -68,7 +68,8 @@ public: NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISTYLE_SHEET_IID) // basic style sheet data - NS_IMETHOD GetURL(nsIURI*& aURL) const = 0; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURI) const = 0; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURI) const = 0; NS_IMETHOD GetTitle(nsString& aTitle) const = 0; NS_IMETHOD GetType(nsString& aType) const = 0; NS_IMETHOD GetMediumCount(PRInt32& aCount) const = 0; diff --git a/mozilla/content/base/src/nsStyleLinkElement.cpp b/mozilla/content/base/src/nsStyleLinkElement.cpp index 8f109ca35d9..51cfe0f795d 100644 --- a/mozilla/content/base/src/nsStyleLinkElement.cpp +++ b/mozilla/content/base/src/nsStyleLinkElement.cpp @@ -231,7 +231,7 @@ nsStyleLinkElement::UpdateStyleSheet(nsIDocument *aOldDocument, if (mStyleSheet && !isInline && uri) { nsCOMPtr oldURI; - mStyleSheet->GetURL(*getter_AddRefs(oldURI)); + mStyleSheet->GetBaseURI(getter_AddRefs(oldURI)); if (oldURI) { PRBool equal; nsresult rv = oldURI->Equals(uri, &equal); diff --git a/mozilla/content/html/style/public/nsICSSParser.h b/mozilla/content/html/style/public/nsICSSParser.h index 9c30e0aa5f4..ee76faaf732 100644 --- a/mozilla/content/html/style/public/nsICSSParser.h +++ b/mozilla/content/html/style/public/nsICSSParser.h @@ -81,7 +81,8 @@ public: NS_IMETHOD SetChildLoader(nsICSSLoader* aChildLoader) = 0; NS_IMETHOD Parse(nsIUnicharInputStream* aInput, - nsIURI* aInputURL, + nsIURI* aSheetURL, + nsIURI* aBaseURI, PRUint32 aLineNumber, nsICSSStyleSheet*& aResult) = 0; diff --git a/mozilla/content/html/style/public/nsICSSStyleSheet.h b/mozilla/content/html/style/public/nsICSSStyleSheet.h index 17e4d8b0a27..f39166a9a1f 100644 --- a/mozilla/content/html/style/public/nsICSSStyleSheet.h +++ b/mozilla/content/html/style/public/nsICSSStyleSheet.h @@ -78,11 +78,11 @@ public: NS_IMETHOD GetStyleSheetAt(PRInt32 aIndex, nsICSSStyleSheet*& aSheet) const = 0; /** - * SetURL must be called on all sheets before parsing into them. - * SetURL may only be called while the sheet is 1) incomplete and 2) + * SetURIs must be called on all sheets before parsing into them. + * SetURIs may only be called while the sheet is 1) incomplete and 2) * has no rules in it */ - NS_IMETHOD SetURL(nsIURI* aURL) = 0; + NS_IMETHOD SetURIs(nsIURI* aSheetURI, nsIURI* aBaseURI) = 0; NS_IMETHOD SetTitle(const nsAString& aTitle) = 0; NS_IMETHOD AppendMedium(nsIAtom* aMedium) = 0; NS_IMETHOD ClearMedia(void) = 0; @@ -107,10 +107,6 @@ public: NS_IMETHOD DropRuleProcessor(nsCSSRuleProcessor* aProcessor) = 0; }; -// XXX for backwards compatibility and convenience -nsresult -NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult, nsIURI* aURL); - nsresult NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult); diff --git a/mozilla/content/html/style/src/nsCSSLoader.cpp b/mozilla/content/html/style/src/nsCSSLoader.cpp index c6c36bc63b0..fdd02bee3dc 100644 --- a/mozilla/content/html/style/src/nsCSSLoader.cpp +++ b/mozilla/content/html/style/src/nsCSSLoader.cpp @@ -723,7 +723,7 @@ SheetLoadData::GetReferrerURI() { nsIURI* uri = nsnull; if (mParentData) - mParentData->mSheet->GetURL(uri); + mParentData->mSheet->GetSheetURI(&uri); if (!uri && mLoader->mDocument) NS_IF_ADDREF(uri = mLoader->mDocument->GetDocumentURI()); return uri; @@ -844,7 +844,7 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, if (channelURI) { // Enough to set the URI on mSheet, since any sibling datas we have share // the same mInner as mSheet and will thus get the same URI. - mSheet->SetURL(channelURI); + mSheet->SetURIs(channelURI, channelURI); } PRBool completed; @@ -1086,16 +1086,19 @@ CSSLoaderImpl::CreateSheet(nsIURI* aURI, if (!*aSheet) { aSheetState = eSheetNeedsParser; - nsCOMPtr sheetURI = aURI; - if (!sheetURI) { + nsIURI *sheetURI = aURI; + nsCOMPtr baseURI = aURI; + if (!aURI) { // Inline style. Use the document's base URL so that @import in // the inline sheet picks up the right base. NS_ASSERTION(aLinkingContent, "Inline stylesheet without linking content?"); - sheetURI = aLinkingContent->GetBaseURI(); + baseURI = aLinkingContent->GetBaseURI(); + sheetURI = aLinkingContent->GetDocument()->GetDocumentURI(); } - rv = NS_NewCSSStyleSheet(aSheet, sheetURI); + rv = NS_NewCSSStyleSheet(aSheet); NS_ENSURE_SUCCESS(rv, rv); + (*aSheet)->SetURIs(sheetURI, baseURI); } NS_ASSERTION(*aSheet, "We should have a sheet by now!"); @@ -1475,9 +1478,10 @@ CSSLoaderImpl::ParseSheet(nsIUnicharInputStream* aStream, nsCOMPtr dummySheet; // Push our load data on the stack so any kids can pick it up mParsingDatas.AppendElement(aLoadData); - nsCOMPtr uri; - aLoadData->mSheet->GetURL(*getter_AddRefs(uri)); - rv = parser->Parse(aStream, uri, aLoadData->mLineNumber, + 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)); mParsingDatas.RemoveElementAt(mParsingDatas.Count() - 1); RecycleParser(parser); @@ -1779,7 +1783,7 @@ CSSLoaderImpl::LoadChildSheet(nsICSSStyleSheet* aParentSheet, // Check whether we should even load nsCOMPtr sheetURI; - nsresult rv = aParentSheet->GetURL(*getter_AddRefs(sheetURI)); + nsresult rv = aParentSheet->GetSheetURI(getter_AddRefs(sheetURI)); if (NS_FAILED(rv) || !sheetURI) return NS_ERROR_FAILURE; nsCOMPtr owningNode; diff --git a/mozilla/content/html/style/src/nsCSSParser.cpp b/mozilla/content/html/style/src/nsCSSParser.cpp index fd4e766ee15..30e042f2194 100644 --- a/mozilla/content/html/style/src/nsCSSParser.cpp +++ b/mozilla/content/html/style/src/nsCSSParser.cpp @@ -106,7 +106,8 @@ public: NS_IMETHOD SetChildLoader(nsICSSLoader* aChildLoader); NS_IMETHOD Parse(nsIUnicharInputStream* aInput, - nsIURI* aInputURL, + nsIURI* aSheetURI, + nsIURI* aBaseURI, PRUint32 aLineNumber, nsICSSStyleSheet*& aResult); @@ -134,8 +135,8 @@ public: void AppendRule(nsICSSRule* aRule); protected: - nsresult InitScanner(nsIUnicharInputStream* aInput, nsIURI* aURI, - PRUint32 aLineNumber); + nsresult InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, + PRUint32 aLineNumber, nsIURI* aBaseURI); nsresult ReleaseScanner(void); PRBool GetToken(nsresult& aErrorCode, PRBool aSkipWS); @@ -317,7 +318,7 @@ protected: nsCSSScanner* mScanner; // The URI to be used as a base for relative URIs. - nsCOMPtr mURL; + nsCOMPtr mBaseURL; // The sheet we're parsing into nsCOMPtr mSheet; @@ -508,8 +509,8 @@ CSSParserImpl::SetChildLoader(nsICSSLoader* aChildLoader) } nsresult -CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aURI, - PRUint32 aLineNumber) +CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, + PRUint32 aLineNumber, nsIURI* aBaseURI) { NS_ASSERTION(! mScanner, "already have scanner"); @@ -517,8 +518,8 @@ CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aURI, if (! mScanner) { return NS_ERROR_OUT_OF_MEMORY; } - mScanner->Init(aInput, aURI, aLineNumber); - mURL = aURI; + mScanner->Init(aInput, aSheetURI, aLineNumber); + mBaseURL = aBaseURI; mHavePushBack = PR_FALSE; @@ -532,28 +533,30 @@ CSSParserImpl::ReleaseScanner(void) delete mScanner; mScanner = nsnull; } - mURL = nsnull; + mBaseURL = nsnull; return NS_OK; } NS_IMETHODIMP CSSParserImpl::Parse(nsIUnicharInputStream* aInput, - nsIURI* aInputURL, + nsIURI* aSheetURI, + nsIURI* aBaseURI, PRUint32 aLineNumber, nsICSSStyleSheet*& aResult) { - NS_ASSERTION(nsnull != aInputURL, "need base URL"); + NS_ASSERTION(nsnull != aBaseURL, "need base URL"); if (! mSheet) { - NS_NewCSSStyleSheet(getter_AddRefs(mSheet), aInputURL); + NS_NewCSSStyleSheet(getter_AddRefs(mSheet)); + mSheet->SetURIs(aSheetURI, aBaseURI); } #ifdef DEBUG else { nsCOMPtr uri; mSheet->GetURL(*getter_AddRefs(uri)); PRBool equal; - aInputURL->Equals(uri, &equal); + aBaseURI->Equals(uri, &equal); NS_ASSERTION(equal, "Sheet URI does not match passed URI"); } #endif @@ -564,7 +567,7 @@ CSSParserImpl::Parse(nsIUnicharInputStream* aInput, nsresult errorCode = NS_OK; - nsresult result = InitScanner(aInput, aInputURL, aLineNumber); + nsresult result = InitScanner(aInput, aSheetURI, aLineNumber, aBaseURI); if (! NS_SUCCEEDED(result)) { return result; } @@ -643,7 +646,7 @@ CSSParserImpl::ParseStyleAttribute(const nsAString& aAttributeValue, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs NS_RELEASE(input); if (! NS_SUCCEEDED(rv)) { return rv; @@ -708,7 +711,7 @@ CSSParserImpl::ParseAndAppendDeclaration(const nsAString& aBuffer, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs NS_RELEASE(input); if (! NS_SUCCEEDED(rv)) { return rv; @@ -766,7 +769,7 @@ CSSParserImpl::ParseRule(const nsAString& aRule, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs if (NS_FAILED(rv)) { return rv; } @@ -825,7 +828,7 @@ CSSParserImpl::ParseProperty(const nsCSSProperty aPropID, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs if (NS_FAILED(rv)) { return rv; } @@ -1190,7 +1193,7 @@ PRBool CSSParserImpl::ProcessImport(nsresult& aErrorCode, if (mChildLoader) { nsCOMPtr url; // XXX should pass a charset! - aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, nsnull, mURL); + aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, nsnull, mBaseURL); if (NS_FAILED(aErrorCode)) { // import url is bad @@ -3792,11 +3795,12 @@ PRBool CSSParserImpl::ParseURL(nsresult& aErrorCode, nsCSSValue& aValue) // Translate url into an absolute url if the url is relative to // the style sheet. nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), tk->mIdent, nsnull, mURL); + NS_NewURI(getter_AddRefs(uri), tk->mIdent, nsnull, mBaseURL); if (ExpectSymbol(aErrorCode, ')', PR_TRUE)) { // Set a null value on failure. Most failure cases should be // NS_ERROR_MALFORMED_URI. - nsCSSValue::URL *url = new nsCSSValue::URL(uri, tk->mIdent.get(), mURL); + nsCSSValue::URL *url = + new nsCSSValue::URL(uri, tk->mIdent.get(), mBaseURL); if (!url || !url->mString) { aErrorCode = NS_ERROR_OUT_OF_MEMORY; delete url; diff --git a/mozilla/content/html/style/src/nsCSSStyleRule.cpp b/mozilla/content/html/style/src/nsCSSStyleRule.cpp index d94047c0b23..7dfa4450f1c 100644 --- a/mozilla/content/html/style/src/nsCSSStyleRule.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleRule.cpp @@ -901,7 +901,7 @@ public: virtual void DropReference(void); virtual nsresult GetCSSDeclaration(nsCSSDeclaration **aDecl, PRBool aAllocate); - virtual nsresult GetCSSParsingEnvironment(nsIURI** aURI, + virtual nsresult GetCSSParsingEnvironment(nsIURI** aBaseURI, nsICSSLoader** aCSSLoader, nsICSSParser** aCSSParser); virtual nsresult DeclarationChanged(); @@ -1003,12 +1003,12 @@ DOMCSSDeclarationImpl::GetCSSDeclaration(nsCSSDeclaration **aDecl, * being initialized. */ nsresult -DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aURI, +DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aBaseURI, nsICSSLoader** aCSSLoader, nsICSSParser** aCSSParser) { // null out the out params since some of them may not get initialized below - *aURI = nsnull; + *aBaseURI = nsnull; *aCSSLoader = nsnull; *aCSSParser = nsnull; nsresult result; @@ -1016,7 +1016,7 @@ DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aURI, if (mRule) { mRule->GetStyleSheet(*getter_AddRefs(sheet)); if (sheet) { - sheet->GetURL(*aURI); + sheet->GetBaseURI(aBaseURI); nsCOMPtr document; sheet->GetOwningDocument(*getter_AddRefs(document)); if (document) { diff --git a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp index a174218bfea..73fea8a71b6 100644 --- a/mozilla/content/html/style/src/nsCSSStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsCSSStyleSheet.cpp @@ -1249,7 +1249,8 @@ CloneRuleInto(nsISupports* aRule, void* aArray) nsCSSStyleSheetInner::nsCSSStyleSheetInner(nsCSSStyleSheetInner& aCopy, nsICSSStyleSheet* aParentSheet) : mSheets(), - mURL(aCopy.mURL), + mSheetURI(aCopy.mSheetURI), + mBaseURI(aCopy.mBaseURI), mNameSpace(nsnull), mComplete(aCopy.mComplete) { @@ -1516,11 +1517,9 @@ nsCSSStyleSheet::DropRuleProcessor(nsCSSRuleProcessor* aProcessor) NS_IMETHODIMP -nsCSSStyleSheet::SetURL(nsIURI* aURL) +nsCSSStyleSheet::SetURIs(nsIURI* aSheetURI, nsIURI* aBaseURI) { - NS_PRECONDITION(aURL, "null ptr"); - if (! aURL) - return NS_ERROR_NULL_POINTER; + NS_PRECONDITION(aSheetURI && aBaseURI, "null ptr"); if (! mInner) { return NS_ERROR_OUT_OF_MEMORY; @@ -1529,14 +1528,22 @@ nsCSSStyleSheet::SetURL(nsIURI* aURL) NS_ASSERTION(!mInner->mOrderedRules && !mInner->mComplete, "Can't call SetURL on sheets that are complete or have rules"); - mInner->mURL = aURL; + mInner->mSheetURI = aSheetURI; + mInner->mBaseURI = aBaseURI; return NS_OK; } NS_IMETHODIMP -nsCSSStyleSheet::GetURL(nsIURI*& aURL) const +nsCSSStyleSheet::GetSheetURI(nsIURI** aSheetURI) const { - NS_IF_ADDREF(aURL = (mInner ? mInner->mURL.get() : nsnull)); + NS_IF_ADDREF(*aSheetURI = (mInner ? mInner->mSheetURI.get() : nsnull)); + return NS_OK; +} + +NS_IMETHODIMP +nsCSSStyleSheet::GetBaseURI(nsIURI** aBaseURI) const +{ + NS_IF_ADDREF(*aBaseURI = (mInner ? mInner->mBaseURI.get() : nsnull)); return NS_OK; } @@ -1724,7 +1731,7 @@ nsCSSStyleSheet::ContainsStyleSheet(nsIURI* aURL, PRBool& aContains, nsIStyleShe { NS_PRECONDITION(nsnull != aURL, "null arg"); - if (!mInner || !mInner->mURL) { + if (!mInner || !mInner->mSheetURI) { // We're not yet far enough along in our load to know what our URL is (we // may still get redirected and such). Assert (caller should really not be // calling this on us at this stage) and return. @@ -1734,7 +1741,7 @@ nsCSSStyleSheet::ContainsStyleSheet(nsIURI* aURL, PRBool& aContains, nsIStyleShe } // first check ourself out - nsresult rv = mInner->mURL->Equals(aURL, &aContains); + nsresult rv = mInner->mSheetURI->Equals(aURL, &aContains); if (NS_FAILED(rv)) aContains = PR_FALSE; if (aContains) { @@ -2099,7 +2106,7 @@ void nsCSSStyleSheet::List(FILE* out, PRInt32 aIndent) const fputs("CSS Style Sheet: ", out); nsCAutoString urlSpec; - nsresult rv = mInner->mURL->GetSpec(urlSpec); + nsresult rv = mInner->mSheetURI->GetSpec(urlSpec); if (NS_SUCCEEDED(rv) && !urlSpec.IsEmpty()) { fputs(urlSpec.get(), out); } @@ -2247,8 +2254,9 @@ nsCSSStyleSheet::GetHref(nsAString& aHref) { nsCAutoString str; - if (mInner && mInner->mURL) { - mInner->mURL->GetSpec(str); + // XXXldb The DOM spec says that this should be null for inline style sheets. + if (mInner && mInner->mSheetURI) { + mInner->mSheetURI->GetSpec(str); } CopyUTF8toUTF16(str, aHref); @@ -2330,7 +2338,7 @@ nsCSSStyleSheet::GetCssRules(nsIDOMCSSRuleList** aCssRules) // Get the security manager and do the same-origin check rv = nsContentUtils::GetSecurityManager()->CheckSameOrigin(cx, - mInner->mURL); + mInner->mSheetURI); if (NS_FAILED(rv)) { return rv; } @@ -2403,7 +2411,7 @@ nsCSSStyleSheet::InsertRule(const nsAString& aRule, mozAutoDocUpdate updateBatch(mDocument, UPDATE_STYLE, PR_TRUE); nsCOMPtr rules; - result = css->ParseRule(aRule, mInner->mURL, getter_AddRefs(rules)); + result = css->ParseRule(aRule, mInner->mBaseURI, getter_AddRefs(rules)); if (NS_FAILED(result)) return result; @@ -2647,7 +2655,7 @@ nsCSSStyleSheet::InsertRuleIntoGroup(const nsAString & aRule, nsICSSGroupRule* a NS_ENSURE_SUCCESS(result, result); nsCOMPtr rules; - result = css->ParseRule(aRule, mInner->mURL, getter_AddRefs(rules)); + result = css->ParseRule(aRule, mInner->mBaseURI, getter_AddRefs(rules)); NS_ENSURE_SUCCESS(result, result); PRUint32 rulecount = 0; @@ -2739,31 +2747,9 @@ nsCSSStyleSheet::StyleSheetLoaded(nsICSSStyleSheet*aSheet, PRBool aNotify) return NS_OK; } -// XXX for backwards compatibility and convenience -nsresult -NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult, nsIURI* aURL) -{ - nsICSSStyleSheet* sheet; - nsresult rv; - if (NS_FAILED(rv = NS_NewCSSStyleSheet(&sheet))) - return rv; - - if (NS_FAILED(rv = sheet->SetURL(aURL))) { - NS_RELEASE(sheet); - return rv; - } - - *aInstancePtrResult = sheet; - return NS_OK; -} - nsresult NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult) { - if (aInstancePtrResult == nsnull) { - return NS_ERROR_NULL_POINTER; - } - nsCSSStyleSheet *it = new nsCSSStyleSheet(); if (nsnull == it) { diff --git a/mozilla/content/html/style/src/nsCSSStyleSheet.h b/mozilla/content/html/style/src/nsCSSStyleSheet.h index 3c6a2924623..91095d9f6fd 100644 --- a/mozilla/content/html/style/src/nsCSSStyleSheet.h +++ b/mozilla/content/html/style/src/nsCSSStyleSheet.h @@ -70,7 +70,8 @@ public: virtual void RebuildNameSpaces(); nsAutoVoidArray mSheets; - nsCOMPtr mURL; + nsCOMPtr mSheetURI; // for error reports, etc. + nsCOMPtr mBaseURI; // for resolving relative URIs nsISupportsArray* mOrderedRules; nsCOMPtr mNameSpace; PRPackedBool mComplete; @@ -96,7 +97,8 @@ public: NS_DECL_ISUPPORTS // nsIStyleSheet interface - NS_IMETHOD GetURL(nsIURI*& aURL) const; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURI) const; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURI) const; NS_IMETHOD GetTitle(nsString& aTitle) const; NS_IMETHOD GetType(nsString& aType) const; NS_IMETHOD GetMediumCount(PRInt32& aCount) const; @@ -129,7 +131,7 @@ public: NS_IMETHOD ReplaceRuleInGroup(nsICSSGroupRule* aGroup, nsICSSRule* aOld, nsICSSRule* aNew); NS_IMETHOD StyleSheetCount(PRInt32& aCount) const; NS_IMETHOD GetStyleSheetAt(PRInt32 aIndex, nsICSSStyleSheet*& aSheet) const; - NS_IMETHOD SetURL(nsIURI* aURL); + NS_IMETHOD SetURIs(nsIURI* aSheetURI, nsIURI* aBaseURI); NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD AppendMedium(nsIAtom* aMedium); NS_IMETHOD ClearMedia(); diff --git a/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp b/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp index 0ade20aeea4..8205eb0ba12 100644 --- a/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsHTMLCSSStyleSheet.cpp @@ -348,7 +348,8 @@ public: // basic style sheet data NS_IMETHOD Init(nsIURI* aURL, nsIDocument* aDocument); NS_IMETHOD Reset(nsIURI* aURL); - NS_IMETHOD GetURL(nsIURI*& aURL) const; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURL) const; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURL) const; NS_IMETHOD GetTitle(nsString& aTitle) const; NS_IMETHOD GetType(nsString& aType) const; NS_IMETHOD GetMediumCount(PRInt32& aCount) const; @@ -530,10 +531,18 @@ HTMLCSSStyleSheetImpl::Reset(nsIURI* aURL) } NS_IMETHODIMP -HTMLCSSStyleSheetImpl::GetURL(nsIURI*& aURL) const +HTMLCSSStyleSheetImpl::GetSheetURI(nsIURI** aSheetURL) const { NS_IF_ADDREF(mURL); - aURL = mURL; + *aSheetURL = mURL; + return NS_OK; +} + +NS_IMETHODIMP +HTMLCSSStyleSheetImpl::GetBaseURI(nsIURI** aBaseURL) const +{ + NS_IF_ADDREF(mURL); + *aBaseURL = mURL; return NS_OK; } diff --git a/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp b/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp index 2ffa87386f4..6f3f9abba87 100644 --- a/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp +++ b/mozilla/content/html/style/src/nsHTMLStyleSheet.cpp @@ -658,10 +658,18 @@ nsHTMLStyleSheet::RulesMatching(PseudoRuleProcessorData* aData) // nsIStyleSheet api NS_IMETHODIMP -nsHTMLStyleSheet::GetURL(nsIURI*& aURL) const +nsHTMLStyleSheet::GetSheetURI(nsIURI** aSheetURI) const { - aURL = mURL; - NS_IF_ADDREF(aURL); + *aSheetURI = mURL; + NS_IF_ADDREF(*aSheetURI); + return NS_OK; +} + +NS_IMETHODIMP +nsHTMLStyleSheet::GetBaseURI(nsIURI** aBaseURI) const +{ + *aBaseURI = mURL; + NS_IF_ADDREF(*aBaseURI); return NS_OK; } diff --git a/mozilla/content/html/style/src/nsHTMLStyleSheet.h b/mozilla/content/html/style/src/nsHTMLStyleSheet.h index bb25a89484c..5b309902852 100644 --- a/mozilla/content/html/style/src/nsHTMLStyleSheet.h +++ b/mozilla/content/html/style/src/nsHTMLStyleSheet.h @@ -54,7 +54,8 @@ public: NS_DECL_ISUPPORTS // nsIStyleSheet api - NS_IMETHOD GetURL(nsIURI*& aURL) const; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURL) const; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURL) const; NS_IMETHOD GetTitle(nsString& aTitle) const; NS_IMETHOD GetType(nsString& aType) const; NS_IMETHOD GetMediumCount(PRInt32& aCount) const; diff --git a/mozilla/content/xbl/src/nsXBLPrototypeResources.cpp b/mozilla/content/xbl/src/nsXBLPrototypeResources.cpp index a739eabeaa0..4e5087368e8 100644 --- a/mozilla/content/xbl/src/nsXBLPrototypeResources.cpp +++ b/mozilla/content/xbl/src/nsXBLPrototypeResources.cpp @@ -128,7 +128,7 @@ nsXBLPrototypeResources::FlushSkinSheets() nsICSSStyleSheet* oldSheet = oldSheets[i]; nsCOMPtr uri; - oldSheet->GetURL(*getter_AddRefs(uri)); + oldSheet->GetSheetURI(getter_AddRefs(uri)); nsCOMPtr newSheet; if (IsChromeURI(uri)) { diff --git a/mozilla/content/xml/document/src/nsXMLContentSink.cpp b/mozilla/content/xml/document/src/nsXMLContentSink.cpp index 479438c9b23..2de11d54a65 100644 --- a/mozilla/content/xml/document/src/nsXMLContentSink.cpp +++ b/mozilla/content/xml/document/src/nsXMLContentSink.cpp @@ -873,7 +873,7 @@ NS_NewMathMLElement(nsIContent** aResult, nsINodeInfo* aNodeInfo) NS_ASSERTION(sheet, "unexpected null stylesheet in the document"); if (sheet) { nsCOMPtr uri; - sheet->GetURL(*getter_AddRefs(uri)); + sheet->GetSheetURI(getter_AddRefs(uri)); nsCAutoString uriStr; uri->GetSpec(uriStr); if (uriStr.Equals(kMathMLStyleSheetURI)) { diff --git a/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp b/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp index e84561280dc..fdef981bbe5 100644 --- a/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp +++ b/mozilla/content/xul/document/src/nsXULPrototypeCache.cpp @@ -334,7 +334,7 @@ nsXULPrototypeCache::PutStyleSheet(nsICSSStyleSheet* aStyleSheet) { nsresult rv; nsCOMPtr uri; - rv = aStyleSheet->GetURL(*getter_AddRefs(uri)); + rv = aStyleSheet->GetSheetURI(getter_AddRefs(uri)); if (NS_SUCCEEDED(rv)) mStyleSheetTable.Put(uri, aStyleSheet); @@ -435,7 +435,7 @@ PR_STATIC_CALLBACK(PLDHashOperator) FlushSkinSheets(nsIURI* aKey, nsCOMPtr& aSheet, void* aClosure) { nsCOMPtr uri; - aSheet->GetURL(*getter_AddRefs(uri)); + aSheet->GetSheetURI(getter_AddRefs(uri)); nsCAutoString str; uri->GetPath(str); diff --git a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp index 82e3f1d7120..887248e929f 100644 --- a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp +++ b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp @@ -4297,7 +4297,7 @@ nsHTMLEditor::StyleSheetLoaded(nsICSSStyleSheet* aSheet, PRBool aNotify) // Get the URI, then url spec from the sheet nsCOMPtr sheet = do_QueryInterface(aSheet); nsCOMPtr uri; - rv = sheet->GetURL(*getter_AddRefs(uri)); + rv = sheet->GetSheetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; diff --git a/mozilla/layout/base/nsPresShell.cpp b/mozilla/layout/base/nsPresShell.cpp index f64b1ec6b74..0632c52c450 100644 --- a/mozilla/layout/base/nsPresShell.cpp +++ b/mozilla/layout/base/nsPresShell.cpp @@ -2223,7 +2223,7 @@ nsresult PresShell::CreatePreferenceStyleSheet(void) result = NS_NewURI(getter_AddRefs(uri), "about:PreferenceStyleSheet", nsnull); if (NS_SUCCEEDED(result)) { NS_ASSERTION(uri, "null but no error"); - result = mPrefStyleSheet->SetURL(uri); + result = mPrefStyleSheet->SetURIs(uri, uri); if (NS_SUCCEEDED(result)) { mPrefStyleSheet->SetComplete(); nsCOMPtr sheet(do_QueryInterface(mPrefStyleSheet)); diff --git a/mozilla/layout/html/base/src/nsPresShell.cpp b/mozilla/layout/html/base/src/nsPresShell.cpp index f64b1ec6b74..0632c52c450 100644 --- a/mozilla/layout/html/base/src/nsPresShell.cpp +++ b/mozilla/layout/html/base/src/nsPresShell.cpp @@ -2223,7 +2223,7 @@ nsresult PresShell::CreatePreferenceStyleSheet(void) result = NS_NewURI(getter_AddRefs(uri), "about:PreferenceStyleSheet", nsnull); if (NS_SUCCEEDED(result)) { NS_ASSERTION(uri, "null but no error"); - result = mPrefStyleSheet->SetURL(uri); + result = mPrefStyleSheet->SetURIs(uri, uri); if (NS_SUCCEEDED(result)) { mPrefStyleSheet->SetComplete(); nsCOMPtr sheet(do_QueryInterface(mPrefStyleSheet)); diff --git a/mozilla/layout/mathml/base/src/nsMathMLFrame.cpp b/mozilla/layout/mathml/base/src/nsMathMLFrame.cpp index e78e9efcd1e..43b6ee212ed 100644 --- a/mozilla/layout/mathml/base/src/nsMathMLFrame.cpp +++ b/mozilla/layout/mathml/base/src/nsMathMLFrame.cpp @@ -548,7 +548,7 @@ GetMathMLAttributeStyleSheet(nsPresContext* aPresContext, nsCOMPtr cssSheet(do_CreateInstance(kCSSStyleSheetCID)); if (!cssSheet) return; - cssSheet->SetURL(uri); + cssSheet->SetURIs(uri, uri); nsCOMPtr domSheet(do_QueryInterface(cssSheet)); if (domSheet) { PRUint32 index; diff --git a/mozilla/layout/style/nsCSSLoader.cpp b/mozilla/layout/style/nsCSSLoader.cpp index c6c36bc63b0..fdd02bee3dc 100644 --- a/mozilla/layout/style/nsCSSLoader.cpp +++ b/mozilla/layout/style/nsCSSLoader.cpp @@ -723,7 +723,7 @@ SheetLoadData::GetReferrerURI() { nsIURI* uri = nsnull; if (mParentData) - mParentData->mSheet->GetURL(uri); + mParentData->mSheet->GetSheetURI(&uri); if (!uri && mLoader->mDocument) NS_IF_ADDREF(uri = mLoader->mDocument->GetDocumentURI()); return uri; @@ -844,7 +844,7 @@ SheetLoadData::OnStreamComplete(nsIUnicharStreamLoader* aLoader, if (channelURI) { // Enough to set the URI on mSheet, since any sibling datas we have share // the same mInner as mSheet and will thus get the same URI. - mSheet->SetURL(channelURI); + mSheet->SetURIs(channelURI, channelURI); } PRBool completed; @@ -1086,16 +1086,19 @@ CSSLoaderImpl::CreateSheet(nsIURI* aURI, if (!*aSheet) { aSheetState = eSheetNeedsParser; - nsCOMPtr sheetURI = aURI; - if (!sheetURI) { + nsIURI *sheetURI = aURI; + nsCOMPtr baseURI = aURI; + if (!aURI) { // Inline style. Use the document's base URL so that @import in // the inline sheet picks up the right base. NS_ASSERTION(aLinkingContent, "Inline stylesheet without linking content?"); - sheetURI = aLinkingContent->GetBaseURI(); + baseURI = aLinkingContent->GetBaseURI(); + sheetURI = aLinkingContent->GetDocument()->GetDocumentURI(); } - rv = NS_NewCSSStyleSheet(aSheet, sheetURI); + rv = NS_NewCSSStyleSheet(aSheet); NS_ENSURE_SUCCESS(rv, rv); + (*aSheet)->SetURIs(sheetURI, baseURI); } NS_ASSERTION(*aSheet, "We should have a sheet by now!"); @@ -1475,9 +1478,10 @@ CSSLoaderImpl::ParseSheet(nsIUnicharInputStream* aStream, nsCOMPtr dummySheet; // Push our load data on the stack so any kids can pick it up mParsingDatas.AppendElement(aLoadData); - nsCOMPtr uri; - aLoadData->mSheet->GetURL(*getter_AddRefs(uri)); - rv = parser->Parse(aStream, uri, aLoadData->mLineNumber, + 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)); mParsingDatas.RemoveElementAt(mParsingDatas.Count() - 1); RecycleParser(parser); @@ -1779,7 +1783,7 @@ CSSLoaderImpl::LoadChildSheet(nsICSSStyleSheet* aParentSheet, // Check whether we should even load nsCOMPtr sheetURI; - nsresult rv = aParentSheet->GetURL(*getter_AddRefs(sheetURI)); + nsresult rv = aParentSheet->GetSheetURI(getter_AddRefs(sheetURI)); if (NS_FAILED(rv) || !sheetURI) return NS_ERROR_FAILURE; nsCOMPtr owningNode; diff --git a/mozilla/layout/style/nsCSSParser.cpp b/mozilla/layout/style/nsCSSParser.cpp index fd4e766ee15..30e042f2194 100644 --- a/mozilla/layout/style/nsCSSParser.cpp +++ b/mozilla/layout/style/nsCSSParser.cpp @@ -106,7 +106,8 @@ public: NS_IMETHOD SetChildLoader(nsICSSLoader* aChildLoader); NS_IMETHOD Parse(nsIUnicharInputStream* aInput, - nsIURI* aInputURL, + nsIURI* aSheetURI, + nsIURI* aBaseURI, PRUint32 aLineNumber, nsICSSStyleSheet*& aResult); @@ -134,8 +135,8 @@ public: void AppendRule(nsICSSRule* aRule); protected: - nsresult InitScanner(nsIUnicharInputStream* aInput, nsIURI* aURI, - PRUint32 aLineNumber); + nsresult InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, + PRUint32 aLineNumber, nsIURI* aBaseURI); nsresult ReleaseScanner(void); PRBool GetToken(nsresult& aErrorCode, PRBool aSkipWS); @@ -317,7 +318,7 @@ protected: nsCSSScanner* mScanner; // The URI to be used as a base for relative URIs. - nsCOMPtr mURL; + nsCOMPtr mBaseURL; // The sheet we're parsing into nsCOMPtr mSheet; @@ -508,8 +509,8 @@ CSSParserImpl::SetChildLoader(nsICSSLoader* aChildLoader) } nsresult -CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aURI, - PRUint32 aLineNumber) +CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aSheetURI, + PRUint32 aLineNumber, nsIURI* aBaseURI) { NS_ASSERTION(! mScanner, "already have scanner"); @@ -517,8 +518,8 @@ CSSParserImpl::InitScanner(nsIUnicharInputStream* aInput, nsIURI* aURI, if (! mScanner) { return NS_ERROR_OUT_OF_MEMORY; } - mScanner->Init(aInput, aURI, aLineNumber); - mURL = aURI; + mScanner->Init(aInput, aSheetURI, aLineNumber); + mBaseURL = aBaseURI; mHavePushBack = PR_FALSE; @@ -532,28 +533,30 @@ CSSParserImpl::ReleaseScanner(void) delete mScanner; mScanner = nsnull; } - mURL = nsnull; + mBaseURL = nsnull; return NS_OK; } NS_IMETHODIMP CSSParserImpl::Parse(nsIUnicharInputStream* aInput, - nsIURI* aInputURL, + nsIURI* aSheetURI, + nsIURI* aBaseURI, PRUint32 aLineNumber, nsICSSStyleSheet*& aResult) { - NS_ASSERTION(nsnull != aInputURL, "need base URL"); + NS_ASSERTION(nsnull != aBaseURL, "need base URL"); if (! mSheet) { - NS_NewCSSStyleSheet(getter_AddRefs(mSheet), aInputURL); + NS_NewCSSStyleSheet(getter_AddRefs(mSheet)); + mSheet->SetURIs(aSheetURI, aBaseURI); } #ifdef DEBUG else { nsCOMPtr uri; mSheet->GetURL(*getter_AddRefs(uri)); PRBool equal; - aInputURL->Equals(uri, &equal); + aBaseURI->Equals(uri, &equal); NS_ASSERTION(equal, "Sheet URI does not match passed URI"); } #endif @@ -564,7 +567,7 @@ CSSParserImpl::Parse(nsIUnicharInputStream* aInput, nsresult errorCode = NS_OK; - nsresult result = InitScanner(aInput, aInputURL, aLineNumber); + nsresult result = InitScanner(aInput, aSheetURI, aLineNumber, aBaseURI); if (! NS_SUCCEEDED(result)) { return result; } @@ -643,7 +646,7 @@ CSSParserImpl::ParseStyleAttribute(const nsAString& aAttributeValue, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs NS_RELEASE(input); if (! NS_SUCCEEDED(rv)) { return rv; @@ -708,7 +711,7 @@ CSSParserImpl::ParseAndAppendDeclaration(const nsAString& aBuffer, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs NS_RELEASE(input); if (! NS_SUCCEEDED(rv)) { return rv; @@ -766,7 +769,7 @@ CSSParserImpl::ParseRule(const nsAString& aRule, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs if (NS_FAILED(rv)) { return rv; } @@ -825,7 +828,7 @@ CSSParserImpl::ParseProperty(const nsCSSProperty aPropID, return rv; } - rv = InitScanner(input, aBaseURL, 1); // XXX line number + rv = InitScanner(input, aBaseURL, 1, aBaseURL); // XXX line number & URLs if (NS_FAILED(rv)) { return rv; } @@ -1190,7 +1193,7 @@ PRBool CSSParserImpl::ProcessImport(nsresult& aErrorCode, if (mChildLoader) { nsCOMPtr url; // XXX should pass a charset! - aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, nsnull, mURL); + aErrorCode = NS_NewURI(getter_AddRefs(url), aURLSpec, nsnull, mBaseURL); if (NS_FAILED(aErrorCode)) { // import url is bad @@ -3792,11 +3795,12 @@ PRBool CSSParserImpl::ParseURL(nsresult& aErrorCode, nsCSSValue& aValue) // Translate url into an absolute url if the url is relative to // the style sheet. nsCOMPtr uri; - NS_NewURI(getter_AddRefs(uri), tk->mIdent, nsnull, mURL); + NS_NewURI(getter_AddRefs(uri), tk->mIdent, nsnull, mBaseURL); if (ExpectSymbol(aErrorCode, ')', PR_TRUE)) { // Set a null value on failure. Most failure cases should be // NS_ERROR_MALFORMED_URI. - nsCSSValue::URL *url = new nsCSSValue::URL(uri, tk->mIdent.get(), mURL); + nsCSSValue::URL *url = + new nsCSSValue::URL(uri, tk->mIdent.get(), mBaseURL); if (!url || !url->mString) { aErrorCode = NS_ERROR_OUT_OF_MEMORY; delete url; diff --git a/mozilla/layout/style/nsCSSStyleRule.cpp b/mozilla/layout/style/nsCSSStyleRule.cpp index d94047c0b23..7dfa4450f1c 100644 --- a/mozilla/layout/style/nsCSSStyleRule.cpp +++ b/mozilla/layout/style/nsCSSStyleRule.cpp @@ -901,7 +901,7 @@ public: virtual void DropReference(void); virtual nsresult GetCSSDeclaration(nsCSSDeclaration **aDecl, PRBool aAllocate); - virtual nsresult GetCSSParsingEnvironment(nsIURI** aURI, + virtual nsresult GetCSSParsingEnvironment(nsIURI** aBaseURI, nsICSSLoader** aCSSLoader, nsICSSParser** aCSSParser); virtual nsresult DeclarationChanged(); @@ -1003,12 +1003,12 @@ DOMCSSDeclarationImpl::GetCSSDeclaration(nsCSSDeclaration **aDecl, * being initialized. */ nsresult -DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aURI, +DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aBaseURI, nsICSSLoader** aCSSLoader, nsICSSParser** aCSSParser) { // null out the out params since some of them may not get initialized below - *aURI = nsnull; + *aBaseURI = nsnull; *aCSSLoader = nsnull; *aCSSParser = nsnull; nsresult result; @@ -1016,7 +1016,7 @@ DOMCSSDeclarationImpl::GetCSSParsingEnvironment(nsIURI** aURI, if (mRule) { mRule->GetStyleSheet(*getter_AddRefs(sheet)); if (sheet) { - sheet->GetURL(*aURI); + sheet->GetBaseURI(aBaseURI); nsCOMPtr document; sheet->GetOwningDocument(*getter_AddRefs(document)); if (document) { diff --git a/mozilla/layout/style/nsCSSStyleSheet.cpp b/mozilla/layout/style/nsCSSStyleSheet.cpp index a174218bfea..73fea8a71b6 100644 --- a/mozilla/layout/style/nsCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsCSSStyleSheet.cpp @@ -1249,7 +1249,8 @@ CloneRuleInto(nsISupports* aRule, void* aArray) nsCSSStyleSheetInner::nsCSSStyleSheetInner(nsCSSStyleSheetInner& aCopy, nsICSSStyleSheet* aParentSheet) : mSheets(), - mURL(aCopy.mURL), + mSheetURI(aCopy.mSheetURI), + mBaseURI(aCopy.mBaseURI), mNameSpace(nsnull), mComplete(aCopy.mComplete) { @@ -1516,11 +1517,9 @@ nsCSSStyleSheet::DropRuleProcessor(nsCSSRuleProcessor* aProcessor) NS_IMETHODIMP -nsCSSStyleSheet::SetURL(nsIURI* aURL) +nsCSSStyleSheet::SetURIs(nsIURI* aSheetURI, nsIURI* aBaseURI) { - NS_PRECONDITION(aURL, "null ptr"); - if (! aURL) - return NS_ERROR_NULL_POINTER; + NS_PRECONDITION(aSheetURI && aBaseURI, "null ptr"); if (! mInner) { return NS_ERROR_OUT_OF_MEMORY; @@ -1529,14 +1528,22 @@ nsCSSStyleSheet::SetURL(nsIURI* aURL) NS_ASSERTION(!mInner->mOrderedRules && !mInner->mComplete, "Can't call SetURL on sheets that are complete or have rules"); - mInner->mURL = aURL; + mInner->mSheetURI = aSheetURI; + mInner->mBaseURI = aBaseURI; return NS_OK; } NS_IMETHODIMP -nsCSSStyleSheet::GetURL(nsIURI*& aURL) const +nsCSSStyleSheet::GetSheetURI(nsIURI** aSheetURI) const { - NS_IF_ADDREF(aURL = (mInner ? mInner->mURL.get() : nsnull)); + NS_IF_ADDREF(*aSheetURI = (mInner ? mInner->mSheetURI.get() : nsnull)); + return NS_OK; +} + +NS_IMETHODIMP +nsCSSStyleSheet::GetBaseURI(nsIURI** aBaseURI) const +{ + NS_IF_ADDREF(*aBaseURI = (mInner ? mInner->mBaseURI.get() : nsnull)); return NS_OK; } @@ -1724,7 +1731,7 @@ nsCSSStyleSheet::ContainsStyleSheet(nsIURI* aURL, PRBool& aContains, nsIStyleShe { NS_PRECONDITION(nsnull != aURL, "null arg"); - if (!mInner || !mInner->mURL) { + if (!mInner || !mInner->mSheetURI) { // We're not yet far enough along in our load to know what our URL is (we // may still get redirected and such). Assert (caller should really not be // calling this on us at this stage) and return. @@ -1734,7 +1741,7 @@ nsCSSStyleSheet::ContainsStyleSheet(nsIURI* aURL, PRBool& aContains, nsIStyleShe } // first check ourself out - nsresult rv = mInner->mURL->Equals(aURL, &aContains); + nsresult rv = mInner->mSheetURI->Equals(aURL, &aContains); if (NS_FAILED(rv)) aContains = PR_FALSE; if (aContains) { @@ -2099,7 +2106,7 @@ void nsCSSStyleSheet::List(FILE* out, PRInt32 aIndent) const fputs("CSS Style Sheet: ", out); nsCAutoString urlSpec; - nsresult rv = mInner->mURL->GetSpec(urlSpec); + nsresult rv = mInner->mSheetURI->GetSpec(urlSpec); if (NS_SUCCEEDED(rv) && !urlSpec.IsEmpty()) { fputs(urlSpec.get(), out); } @@ -2247,8 +2254,9 @@ nsCSSStyleSheet::GetHref(nsAString& aHref) { nsCAutoString str; - if (mInner && mInner->mURL) { - mInner->mURL->GetSpec(str); + // XXXldb The DOM spec says that this should be null for inline style sheets. + if (mInner && mInner->mSheetURI) { + mInner->mSheetURI->GetSpec(str); } CopyUTF8toUTF16(str, aHref); @@ -2330,7 +2338,7 @@ nsCSSStyleSheet::GetCssRules(nsIDOMCSSRuleList** aCssRules) // Get the security manager and do the same-origin check rv = nsContentUtils::GetSecurityManager()->CheckSameOrigin(cx, - mInner->mURL); + mInner->mSheetURI); if (NS_FAILED(rv)) { return rv; } @@ -2403,7 +2411,7 @@ nsCSSStyleSheet::InsertRule(const nsAString& aRule, mozAutoDocUpdate updateBatch(mDocument, UPDATE_STYLE, PR_TRUE); nsCOMPtr rules; - result = css->ParseRule(aRule, mInner->mURL, getter_AddRefs(rules)); + result = css->ParseRule(aRule, mInner->mBaseURI, getter_AddRefs(rules)); if (NS_FAILED(result)) return result; @@ -2647,7 +2655,7 @@ nsCSSStyleSheet::InsertRuleIntoGroup(const nsAString & aRule, nsICSSGroupRule* a NS_ENSURE_SUCCESS(result, result); nsCOMPtr rules; - result = css->ParseRule(aRule, mInner->mURL, getter_AddRefs(rules)); + result = css->ParseRule(aRule, mInner->mBaseURI, getter_AddRefs(rules)); NS_ENSURE_SUCCESS(result, result); PRUint32 rulecount = 0; @@ -2739,31 +2747,9 @@ nsCSSStyleSheet::StyleSheetLoaded(nsICSSStyleSheet*aSheet, PRBool aNotify) return NS_OK; } -// XXX for backwards compatibility and convenience -nsresult -NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult, nsIURI* aURL) -{ - nsICSSStyleSheet* sheet; - nsresult rv; - if (NS_FAILED(rv = NS_NewCSSStyleSheet(&sheet))) - return rv; - - if (NS_FAILED(rv = sheet->SetURL(aURL))) { - NS_RELEASE(sheet); - return rv; - } - - *aInstancePtrResult = sheet; - return NS_OK; -} - nsresult NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult) { - if (aInstancePtrResult == nsnull) { - return NS_ERROR_NULL_POINTER; - } - nsCSSStyleSheet *it = new nsCSSStyleSheet(); if (nsnull == it) { diff --git a/mozilla/layout/style/nsCSSStyleSheet.h b/mozilla/layout/style/nsCSSStyleSheet.h index 3c6a2924623..91095d9f6fd 100644 --- a/mozilla/layout/style/nsCSSStyleSheet.h +++ b/mozilla/layout/style/nsCSSStyleSheet.h @@ -70,7 +70,8 @@ public: virtual void RebuildNameSpaces(); nsAutoVoidArray mSheets; - nsCOMPtr mURL; + nsCOMPtr mSheetURI; // for error reports, etc. + nsCOMPtr mBaseURI; // for resolving relative URIs nsISupportsArray* mOrderedRules; nsCOMPtr mNameSpace; PRPackedBool mComplete; @@ -96,7 +97,8 @@ public: NS_DECL_ISUPPORTS // nsIStyleSheet interface - NS_IMETHOD GetURL(nsIURI*& aURL) const; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURI) const; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURI) const; NS_IMETHOD GetTitle(nsString& aTitle) const; NS_IMETHOD GetType(nsString& aType) const; NS_IMETHOD GetMediumCount(PRInt32& aCount) const; @@ -129,7 +131,7 @@ public: NS_IMETHOD ReplaceRuleInGroup(nsICSSGroupRule* aGroup, nsICSSRule* aOld, nsICSSRule* aNew); NS_IMETHOD StyleSheetCount(PRInt32& aCount) const; NS_IMETHOD GetStyleSheetAt(PRInt32 aIndex, nsICSSStyleSheet*& aSheet) const; - NS_IMETHOD SetURL(nsIURI* aURL); + NS_IMETHOD SetURIs(nsIURI* aSheetURI, nsIURI* aBaseURI); NS_IMETHOD SetTitle(const nsAString& aTitle); NS_IMETHOD AppendMedium(nsIAtom* aMedium); NS_IMETHOD ClearMedia(); diff --git a/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp b/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp index 0ade20aeea4..8205eb0ba12 100644 --- a/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp +++ b/mozilla/layout/style/nsHTMLCSSStyleSheet.cpp @@ -348,7 +348,8 @@ public: // basic style sheet data NS_IMETHOD Init(nsIURI* aURL, nsIDocument* aDocument); NS_IMETHOD Reset(nsIURI* aURL); - NS_IMETHOD GetURL(nsIURI*& aURL) const; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURL) const; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURL) const; NS_IMETHOD GetTitle(nsString& aTitle) const; NS_IMETHOD GetType(nsString& aType) const; NS_IMETHOD GetMediumCount(PRInt32& aCount) const; @@ -530,10 +531,18 @@ HTMLCSSStyleSheetImpl::Reset(nsIURI* aURL) } NS_IMETHODIMP -HTMLCSSStyleSheetImpl::GetURL(nsIURI*& aURL) const +HTMLCSSStyleSheetImpl::GetSheetURI(nsIURI** aSheetURL) const { NS_IF_ADDREF(mURL); - aURL = mURL; + *aSheetURL = mURL; + return NS_OK; +} + +NS_IMETHODIMP +HTMLCSSStyleSheetImpl::GetBaseURI(nsIURI** aBaseURL) const +{ + NS_IF_ADDREF(mURL); + *aBaseURL = mURL; return NS_OK; } diff --git a/mozilla/layout/style/nsHTMLStyleSheet.cpp b/mozilla/layout/style/nsHTMLStyleSheet.cpp index 2ffa87386f4..6f3f9abba87 100644 --- a/mozilla/layout/style/nsHTMLStyleSheet.cpp +++ b/mozilla/layout/style/nsHTMLStyleSheet.cpp @@ -658,10 +658,18 @@ nsHTMLStyleSheet::RulesMatching(PseudoRuleProcessorData* aData) // nsIStyleSheet api NS_IMETHODIMP -nsHTMLStyleSheet::GetURL(nsIURI*& aURL) const +nsHTMLStyleSheet::GetSheetURI(nsIURI** aSheetURI) const { - aURL = mURL; - NS_IF_ADDREF(aURL); + *aSheetURI = mURL; + NS_IF_ADDREF(*aSheetURI); + return NS_OK; +} + +NS_IMETHODIMP +nsHTMLStyleSheet::GetBaseURI(nsIURI** aBaseURI) const +{ + *aBaseURI = mURL; + NS_IF_ADDREF(*aBaseURI); return NS_OK; } diff --git a/mozilla/layout/style/nsHTMLStyleSheet.h b/mozilla/layout/style/nsHTMLStyleSheet.h index bb25a89484c..5b309902852 100644 --- a/mozilla/layout/style/nsHTMLStyleSheet.h +++ b/mozilla/layout/style/nsHTMLStyleSheet.h @@ -54,7 +54,8 @@ public: NS_DECL_ISUPPORTS // nsIStyleSheet api - NS_IMETHOD GetURL(nsIURI*& aURL) const; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURL) const; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURL) const; NS_IMETHOD GetTitle(nsString& aTitle) const; NS_IMETHOD GetType(nsString& aType) const; NS_IMETHOD GetMediumCount(PRInt32& aCount) const; diff --git a/mozilla/layout/style/nsICSSParser.h b/mozilla/layout/style/nsICSSParser.h index 9c30e0aa5f4..ee76faaf732 100644 --- a/mozilla/layout/style/nsICSSParser.h +++ b/mozilla/layout/style/nsICSSParser.h @@ -81,7 +81,8 @@ public: NS_IMETHOD SetChildLoader(nsICSSLoader* aChildLoader) = 0; NS_IMETHOD Parse(nsIUnicharInputStream* aInput, - nsIURI* aInputURL, + nsIURI* aSheetURL, + nsIURI* aBaseURI, PRUint32 aLineNumber, nsICSSStyleSheet*& aResult) = 0; diff --git a/mozilla/layout/style/nsICSSStyleSheet.h b/mozilla/layout/style/nsICSSStyleSheet.h index 17e4d8b0a27..f39166a9a1f 100644 --- a/mozilla/layout/style/nsICSSStyleSheet.h +++ b/mozilla/layout/style/nsICSSStyleSheet.h @@ -78,11 +78,11 @@ public: NS_IMETHOD GetStyleSheetAt(PRInt32 aIndex, nsICSSStyleSheet*& aSheet) const = 0; /** - * SetURL must be called on all sheets before parsing into them. - * SetURL may only be called while the sheet is 1) incomplete and 2) + * SetURIs must be called on all sheets before parsing into them. + * SetURIs may only be called while the sheet is 1) incomplete and 2) * has no rules in it */ - NS_IMETHOD SetURL(nsIURI* aURL) = 0; + NS_IMETHOD SetURIs(nsIURI* aSheetURI, nsIURI* aBaseURI) = 0; NS_IMETHOD SetTitle(const nsAString& aTitle) = 0; NS_IMETHOD AppendMedium(nsIAtom* aMedium) = 0; NS_IMETHOD ClearMedia(void) = 0; @@ -107,10 +107,6 @@ public: NS_IMETHOD DropRuleProcessor(nsCSSRuleProcessor* aProcessor) = 0; }; -// XXX for backwards compatibility and convenience -nsresult -NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult, nsIURI* aURL); - nsresult NS_NewCSSStyleSheet(nsICSSStyleSheet** aInstancePtrResult); diff --git a/mozilla/layout/style/nsIStyleSheet.h b/mozilla/layout/style/nsIStyleSheet.h index 2deca98e518..b90f5a00d57 100644 --- a/mozilla/layout/style/nsIStyleSheet.h +++ b/mozilla/layout/style/nsIStyleSheet.h @@ -68,7 +68,8 @@ public: NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISTYLE_SHEET_IID) // basic style sheet data - NS_IMETHOD GetURL(nsIURI*& aURL) const = 0; + NS_IMETHOD GetSheetURI(nsIURI** aSheetURI) const = 0; + NS_IMETHOD GetBaseURI(nsIURI** aBaseURI) const = 0; NS_IMETHOD GetTitle(nsString& aTitle) const = 0; NS_IMETHOD GetType(nsString& aType) const = 0; NS_IMETHOD GetMediumCount(PRInt32& aCount) const = 0; diff --git a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp index 7c2576f05bc..856cb06e0a7 100644 --- a/mozilla/rdf/chrome/src/nsChromeRegistry.cpp +++ b/mozilla/rdf/chrome/src/nsChromeRegistry.cpp @@ -1422,7 +1422,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) nsIStyleSheet *sheet = agentSheets[l]; nsCOMPtr uri; - rv = sheet->GetURL(*getter_AddRefs(uri)); + rv = sheet->GetSheetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; if (IsChromeURI(uri)) { @@ -1467,7 +1467,7 @@ nsresult nsChromeRegistry::RefreshWindow(nsIDOMWindowInternal* aWindow) for (i = 0; i < count; i++) { nsCOMPtr sheet = oldSheets[i]; nsCOMPtr uri; - rv = sheet->GetURL(*getter_AddRefs(uri)); + rv = sheet->GetSheetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; if (IsChromeURI(uri)) {