diff --git a/mozilla/browser/components/bookmarks/src/Makefile.in b/mozilla/browser/components/bookmarks/src/Makefile.in index 69fbb50fac5..57fced35a99 100644 --- a/mozilla/browser/components/bookmarks/src/Makefile.in +++ b/mozilla/browser/components/bookmarks/src/Makefile.in @@ -59,6 +59,7 @@ REQUIRES = xpcom \ dom \ docshell \ content \ + layout \ htmlparser \ intl \ windowwatcher \ diff --git a/mozilla/content/base/public/nsIDocument.h b/mozilla/content/base/public/nsIDocument.h index c00723b461b..07e401b2d3f 100644 --- a/mozilla/content/base/public/nsIDocument.h +++ b/mozilla/content/base/public/nsIDocument.h @@ -49,6 +49,7 @@ #include "nsCRT.h" #include "mozFlushType.h" #include "nsIAtom.h" +#include "nsCompatibility.h" class nsIContent; class nsPresContext; @@ -91,8 +92,8 @@ class nsIDocumentObserver; // IID for the nsIDocument interface #define NS_IDOCUMENT_IID \ -{ 0xb138a9aa, 0x3d0d, 0x4d0b, \ - { 0x98, 0x02, 0x72, 0x15, 0x54, 0x27, 0xe0, 0x2e } } +{ 0x0b8acf09, 0x7877, 0x4928, \ + { 0x8b, 0xfb, 0x6d, 0x7c, 0x6d, 0x53, 0xff, 0x32 } } // Flag for AddStyleSheet(). #define NS_STYLESHEET_FROM_CATALOG (1 << 0) @@ -112,6 +113,7 @@ public: : nsINode(nsnull), mCharacterSet(NS_LITERAL_CSTRING("ISO-8859-1")), mNodeInfoManager(nsnull), + mCompatMode(eCompatibility_FullStandards), mIsInitialDocumentInWindow(PR_FALSE), mPartID(0) { @@ -814,6 +816,13 @@ public: */ virtual void ClearBoxObjectFor(nsIContent *aContent) = 0; + /** + * Get the compatibility mode for this document + */ + nsCompatibility GetCompatibilityMode() const { + return mCompatMode; + } + protected: ~nsIDocument() { @@ -851,6 +860,9 @@ protected: // Table of element properties for this document. nsPropertyTable mPropertyTable; + // Compatibility mode + nsCompatibility mCompatMode; + // True if BIDI is enabled. PRPackedBool mBidiEnabled; diff --git a/mozilla/content/base/src/nsAttrValue.cpp b/mozilla/content/base/src/nsAttrValue.cpp index 6e62cb4e240..9e8be91fd5f 100644 --- a/mozilla/content/base/src/nsAttrValue.cpp +++ b/mozilla/content/base/src/nsAttrValue.cpp @@ -956,9 +956,7 @@ nsAttrValue::ParseColor(const nsAString& aString, nsIDocument* aDocument) } // Check if we are in compatibility mode - // XXX evil NS_HexToRGB and NS_LooseHexToRGB take nsString as argument! - nsCOMPtr doc(do_QueryInterface(aDocument)); - if (doc && doc->GetCompatibilityMode() == eCompatibility_NavQuirks) { + if (aDocument->GetCompatibilityMode() == eCompatibility_NavQuirks) { NS_LooseHexToRGB(colorStr, &color); } else { diff --git a/mozilla/content/base/src/nsContentUtils.cpp b/mozilla/content/base/src/nsContentUtils.cpp index 6c7813068a7..e46a2e31f00 100644 --- a/mozilla/content/base/src/nsContentUtils.cpp +++ b/mozilla/content/base/src/nsContentUtils.cpp @@ -3209,23 +3209,19 @@ nsContentUtils::CreateContextualFragment(nsIDOMNode* aContextNode, parser->SetContentSink(contentsink); nsDTDMode mode = eDTDMode_autodetect; - if (bHTML) { - switch (htmlDoc->GetCompatibilityMode()) { - case eCompatibility_NavQuirks: - mode = eDTDMode_quirks; - break; - case eCompatibility_AlmostStandards: - mode = eDTDMode_almost_standards; - break; - case eCompatibility_FullStandards: - mode = eDTDMode_full_standards; - break; - default: - NS_NOTREACHED("unknown mode"); - break; - } - } else { - mode = eDTDMode_full_standards; + switch (document->GetCompatibilityMode()) { + case eCompatibility_NavQuirks: + mode = eDTDMode_quirks; + break; + case eCompatibility_AlmostStandards: + mode = eDTDMode_almost_standards; + break; + case eCompatibility_FullStandards: + mode = eDTDMode_full_standards; + break; + default: + NS_NOTREACHED("unknown mode"); + break; } rv = parser->ParseFragment(aFragment, nsnull, tagStack, !bHTML, contentType, mode); diff --git a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp index f1c93637a88..a08ce65c5fd 100644 --- a/mozilla/content/html/content/src/nsGenericHTMLElement.cpp +++ b/mozilla/content/html/content/src/nsGenericHTMLElement.cpp @@ -1340,12 +1340,7 @@ nsGenericHTMLElement::SetSpellcheck(PRBool aSpellcheck) PRBool nsGenericHTMLElement::InNavQuirksMode(nsIDocument* aDoc) { - nsCOMPtr doc(do_QueryInterface(aDoc)); - if (!doc) { - return PR_FALSE; - } - - return doc->GetCompatibilityMode() == eCompatibility_NavQuirks; + return aDoc && aDoc->GetCompatibilityMode() == eCompatibility_NavQuirks; } nsresult diff --git a/mozilla/content/html/content/src/nsHTMLFrameSetElement.cpp b/mozilla/content/html/content/src/nsHTMLFrameSetElement.cpp index 5f4671e51f3..13948eed3aa 100644 --- a/mozilla/content/html/content/src/nsHTMLFrameSetElement.cpp +++ b/mozilla/content/html/content/src/nsHTMLFrameSetElement.cpp @@ -336,12 +336,7 @@ nsHTMLFrameSetElement::ParseRowCol(const nsAString & aValue, } // Pre-grab the compat mode; we may need it later in the loop. - nsCompatibility mode = eCompatibility_FullStandards; - nsCOMPtr htmlDocument = - do_QueryInterface(GetOwnerDoc()); - if (htmlDocument) { - mode = htmlDocument->GetCompatibilityMode(); - } + PRBool isInQuirks = InNavQuirksMode(GetOwnerDoc()); // Parse each comma separated token @@ -398,7 +393,7 @@ nsHTMLFrameSetElement::ParseRowCol(const nsAString & aValue, } // Treat 0* as 1* in quirks mode (bug 40383) - if (eCompatibility_NavQuirks == mode) { + if (isInQuirks) { if ((eFramesetUnit_Relative == specs[i].mUnit) && (0 == specs[i].mValue)) { specs[i].mValue = 1; @@ -409,7 +404,7 @@ nsHTMLFrameSetElement::ParseRowCol(const nsAString & aValue, // Nav resized absolute and relative frames to "1" and // percent frames to an even percentage of the width // - //if ((eCompatibility_NavQuirks == aMode) && (specs[i].mValue <= 0)) { + //if (isInQuirks && (specs[i].mValue <= 0)) { // if (eFramesetUnit_Percent == specs[i].mUnit) { // specs[i].mValue = 100 / count; // } else { diff --git a/mozilla/content/html/document/src/nsHTMLDocument.cpp b/mozilla/content/html/document/src/nsHTMLDocument.cpp index 1cf65aa3949..1f2389d876b 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.cpp +++ b/mozilla/content/html/document/src/nsHTMLDocument.cpp @@ -324,7 +324,6 @@ IdAndNameHashInitEntry(PLDHashTable *table, PLDHashEntryHdr *entry, nsHTMLDocument::nsHTMLDocument() : nsDocument("text/html"), - mCompatMode(eCompatibility_NavQuirks), mDefaultNamespaceID(kNameSpaceID_None) { @@ -332,6 +331,7 @@ nsHTMLDocument::nsHTMLDocument() // bother initializing members to 0. mDefaultElementType = kNameSpaceID_XHTML; + mCompatMode = eCompatibility_NavQuirks; } nsHTMLDocument::~nsHTMLDocument() @@ -1164,12 +1164,6 @@ nsHTMLDocument::GetImageMap(const nsAString& aMapName) return firstMatch; } -nsCompatibility -nsHTMLDocument::GetCompatibilityMode() -{ - return mCompatMode; -} - void nsHTMLDocument::SetCompatibilityMode(nsCompatibility aMode) { @@ -1182,7 +1176,7 @@ nsHTMLDocument::SetCompatibilityMode(nsCompatibility aMode) if (shell) { nsPresContext *pc = shell->GetPresContext(); if (pc) { - pc->SetCompatibilityMode(mCompatMode); + pc->CompatibilityModeChanged(); } } } diff --git a/mozilla/content/html/document/src/nsHTMLDocument.h b/mozilla/content/html/document/src/nsHTMLDocument.h index b0a216e2eaf..1c595802749 100644 --- a/mozilla/content/html/document/src/nsHTMLDocument.h +++ b/mozilla/content/html/document/src/nsHTMLDocument.h @@ -107,7 +107,6 @@ public: virtual nsIDOMHTMLMapElement *GetImageMap(const nsAString& aMapName); - virtual nsCompatibility GetCompatibilityMode(); virtual void SetCompatibilityMode(nsCompatibility aMode); virtual PRBool IsWriting() @@ -256,8 +255,6 @@ protected: return mDefaultNamespaceID; }; - nsCompatibility mCompatMode; - nsCOMArray mImageMaps; nsCOMPtr mImages; diff --git a/mozilla/content/html/document/src/nsIHTMLDocument.h b/mozilla/content/html/document/src/nsIHTMLDocument.h index 79148ee3185..6f01e2c3112 100644 --- a/mozilla/content/html/document/src/nsIHTMLDocument.h +++ b/mozilla/content/html/document/src/nsIHTMLDocument.h @@ -55,8 +55,8 @@ class nsIDOMHTMLBodyElement; class nsIScriptElement; #define NS_IHTMLDOCUMENT_IID \ -{ 0x43eec0b4, 0xd867, 0x4972, \ - { 0x8f, 0x64, 0x71, 0x9a, 0xc2, 0x45, 0x19, 0x3d } } +{ 0xcfe72003, 0xcc90, 0x4624, \ + { 0xb4, 0x1b, 0xc3, 0x14, 0x1d, 0x31, 0x7a, 0x71 } } /** @@ -74,9 +74,8 @@ public: virtual void RemoveImageMap(nsIDOMHTMLMapElement* aMap) = 0; /** - * Access compatibility mode for this document + * Set compatibility mode for this document */ - virtual nsCompatibility GetCompatibilityMode() = 0; virtual void SetCompatibilityMode(nsCompatibility aMode) = 0; virtual nsresult ResolveName(const nsAString& aName, diff --git a/mozilla/dom/src/base/nsDOMClassInfo.cpp b/mozilla/dom/src/base/nsDOMClassInfo.cpp index c4a2f052694..594b2ce7f5a 100644 --- a/mozilla/dom/src/base/nsDOMClassInfo.cpp +++ b/mozilla/dom/src/base/nsDOMClassInfo.cpp @@ -4096,8 +4096,10 @@ nsWindowSH::GlobalScopePolluterNewResolve(JSContext *cx, JSObject *obj, } nsIHTMLDocument *doc = (nsIHTMLDocument *)::JS_GetPrivate(cx, obj); + nsCOMPtr document(do_QueryInterface(doc)); - if (!doc || doc->GetCompatibilityMode() != eCompatibility_NavQuirks) { + if (!document || + document->GetCompatibilityMode() != eCompatibility_NavQuirks) { // If we don't have a document, or if the document is not in // quirks mode, return early. @@ -8591,7 +8593,7 @@ nsHTMLDocumentSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx, if (id == sAll_id && !sDisableDocumentAllSupport && !ObjectIsNativeWrapper(cx, obj)) { - nsCOMPtr doc(do_QueryWrappedNative(wrapper)); + nsCOMPtr doc(do_QueryWrappedNative(wrapper)); if (doc->GetCompatibilityMode() == eCompatibility_NavQuirks) { JSObject *helper = diff --git a/mozilla/extensions/webservices/soap/src/Makefile.in b/mozilla/extensions/webservices/soap/src/Makefile.in index 758bd81f95b..7156ef21cc2 100644 --- a/mozilla/extensions/webservices/soap/src/Makefile.in +++ b/mozilla/extensions/webservices/soap/src/Makefile.in @@ -54,6 +54,7 @@ REQUIRES = xpcom \ necko \ xmlextras \ content \ + layout \ widget \ $(NULL) diff --git a/mozilla/extensions/xmlextras/tests/Makefile.in b/mozilla/extensions/xmlextras/tests/Makefile.in index 9d5b6c41f6b..09b790bfb90 100644 --- a/mozilla/extensions/xmlextras/tests/Makefile.in +++ b/mozilla/extensions/xmlextras/tests/Makefile.in @@ -48,6 +48,7 @@ REQUIRES = xpcom \ necko \ dom \ content \ + layout \ widget \ $(NULL) diff --git a/mozilla/intl/chardet/src/Makefile.in b/mozilla/intl/chardet/src/Makefile.in index 3565ff4c867..f8cd8d91b6f 100644 --- a/mozilla/intl/chardet/src/Makefile.in +++ b/mozilla/intl/chardet/src/Makefile.in @@ -59,6 +59,7 @@ REQUIRES = xpcom \ necko \ widget \ content \ + layout \ dom \ $(NULL) diff --git a/mozilla/layout/base/nsPresContext.cpp b/mozilla/layout/base/nsPresContext.cpp index ce46c0cfc8a..0115c15afdb 100644 --- a/mozilla/layout/base/nsPresContext.cpp +++ b/mozilla/layout/base/nsPresContext.cpp @@ -162,7 +162,6 @@ nsPresContext::nsPresContext(nsIDocument* aDocument, nsPresContextType aType) : mType(aType), mDocument(aDocument), mTextZoom(1.0), mPageSize(-1, -1), mViewportStyleOverflow(NS_STYLE_OVERFLOW_AUTO, NS_STYLE_OVERFLOW_AUTO), - mCompatibilityMode(eCompatibility_FullStandards), mImageAnimationModePref(imgIContainer::kNormalAnimMode), mDefaultVariableFont("serif", NS_FONT_STYLE_NORMAL, NS_FONT_VARIANT_NORMAL, NS_FONT_WEIGHT_NORMAL, 0, NSIntPointsToTwips(12)), @@ -891,16 +890,14 @@ nsPresContext::RootPresContext() } void -nsPresContext::SetCompatibilityMode(nsCompatibility aMode) +nsPresContext::CompatibilityModeChanged() { - mCompatibilityMode = aMode; - if (!mShell) return; // enable/disable the QuirkSheet mShell->StyleSet()-> - EnableQuirkStyleSheet(mCompatibilityMode == eCompatibility_NavQuirks); + EnableQuirkStyleSheet(CompatibilityMode() == eCompatibility_NavQuirks); } // Helper function for setting Anim Mode on image diff --git a/mozilla/layout/base/nsPresContext.h b/mozilla/layout/base/nsPresContext.h index 9b05c3a593f..7f329902edf 100644 --- a/mozilla/layout/base/nsPresContext.h +++ b/mozilla/layout/base/nsPresContext.h @@ -44,7 +44,6 @@ #include "nsColor.h" #include "nsCoord.h" #include "nsAString.h" -#include "nsCompatibility.h" #include "nsCOMPtr.h" #include "nsIPresShell.h" #include "nsRect.h" @@ -199,13 +198,16 @@ public: #endif /** - * Access compatibility mode for this context - * - * All users must explicitly set the compatibility mode rather than - * relying on a default. + * Access compatibility mode for this context. This is the same as + * our document's compatibility mode. */ - nsCompatibility CompatibilityMode() const { return mCompatibilityMode; } - NS_HIDDEN_(void) SetCompatibilityMode(nsCompatibility aMode); + nsCompatibility CompatibilityMode() const { + return Document()->GetCompatibilityMode(); + } + /** + * Notify the context that the document's compatibility mode has changed + */ + NS_HIDDEN_(void) CompatibilityModeChanged(); /** * Access the image animation mode for this context @@ -759,7 +761,6 @@ protected: ScrollbarStyles mViewportStyleOverflow; PRUint8 mFocusRingWidth; - nsCompatibility mCompatibilityMode; PRUint16 mImageAnimationMode; PRUint16 mImageAnimationModePref; diff --git a/mozilla/layout/base/nsPresShell.cpp b/mozilla/layout/base/nsPresShell.cpp index ab0c3342fe7..dde9fd5cc22 100644 --- a/mozilla/layout/base/nsPresShell.cpp +++ b/mozilla/layout/base/nsPresShell.cpp @@ -1778,9 +1778,10 @@ PresShell::Init(nsIDocument* aDocument, // want to delete it in our destructor. mStyleSet = aStyleSet; - // Set the compatibility mode after attaching the pres context and - // style set, but before creating any frames. - mPresContext->SetCompatibilityMode(aCompatMode); + // Notify our prescontext that it now has a compatibility mode. Note that + // this MUST happen after we set up our style set but before we create any + // frames. + mPresContext->CompatibilityModeChanged(); // setup the preference style rules (no forced reflow), and do it // before creating any frames. diff --git a/mozilla/xpfe/components/directory/Makefile.in b/mozilla/xpfe/components/directory/Makefile.in index 708819e156b..9eb1ba8506b 100644 --- a/mozilla/xpfe/components/directory/Makefile.in +++ b/mozilla/xpfe/components/directory/Makefile.in @@ -53,6 +53,7 @@ REQUIRES = xpcom \ necko \ rdf \ content \ + layout \ js \ xpconnect \ docshell \ diff --git a/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp b/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp index 3b67f7cab32..9ee4a3e5b55 100644 --- a/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp +++ b/mozilla/xpfe/components/directory/nsDirectoryViewer.cpp @@ -91,6 +91,7 @@ #include "nsIStreamConverterService.h" #include "nsICategoryManager.h" #include "nsXPCOMCID.h" +#include "nsIDocument.h" static const int FORMAT_HTML = 2; static const int FORMAT_XUL = 3; diff --git a/mozilla/xpfe/components/directory/nsDirectoryViewer.h b/mozilla/xpfe/components/directory/nsDirectoryViewer.h index 3e179bf0350..ff8f11f3ac8 100644 --- a/mozilla/xpfe/components/directory/nsDirectoryViewer.h +++ b/mozilla/xpfe/components/directory/nsDirectoryViewer.h @@ -43,7 +43,6 @@ #include "nsNetUtil.h" #include "nsIStreamListener.h" #include "nsIContentViewer.h" -#include "nsIDocument.h" #ifdef MOZ_RDF #include "nsIHTTPIndex.h" #include "nsIRDFService.h"