Fix for bug 533637 (Speed up unwrapping a node in quickstubs that use nsINode (dromaeo)). Pair every DOMCI to a specific C++ class. r=jst.
authorPeter Van der Beken <peterv@propagandism.org>
Tue, 12 Jan 2010 14:08:43 +0100
changeset 40490 8e6cbbc07c71d3b003d33e326601e168a42c6c47
parent 40489 c19b69a502ea175e344e4e5c7af76b8b77d5bfb9
child 40491 88f469d18c97296654ba94caa303e702ae20672b
push idunknown
push userunknown
push dateunknown
reviewersjst
bugs533637
milestone1.9.3a4pre
Fix for bug 533637 (Speed up unwrapping a node in quickstubs that use nsINode (dromaeo)). Pair every DOMCI to a specific C++ class. r=jst.
content/base/src/nsCommentNode.cpp
content/base/src/nsContentList.cpp
content/base/src/nsDOMAttribute.cpp
content/base/src/nsDOMAttributeMap.cpp
content/base/src/nsDOMDocumentType.cpp
content/base/src/nsDOMFile.cpp
content/base/src/nsDOMFileReader.cpp
content/base/src/nsDOMLists.cpp
content/base/src/nsDOMParser.cpp
content/base/src/nsDOMSerializer.cpp
content/base/src/nsDOMTokenList.cpp
content/base/src/nsDocument.cpp
content/base/src/nsDocumentFragment.cpp
content/base/src/nsFormData.cpp
content/base/src/nsNodeIterator.cpp
content/base/src/nsRange.cpp
content/base/src/nsTextNode.cpp
content/base/src/nsTreeWalker.cpp
content/base/src/nsXMLHttpRequest.cpp
content/canvas/src/WebGLContext.cpp
content/canvas/src/nsCanvasRenderingContext2D.cpp
content/events/src/nsDOMBeforeUnloadEvent.cpp
content/events/src/nsDOMCommandEvent.cpp
content/events/src/nsDOMDataContainerEvent.cpp
content/events/src/nsDOMDataTransfer.cpp
content/events/src/nsDOMDragEvent.cpp
content/events/src/nsDOMEvent.cpp
content/events/src/nsDOMKeyboardEvent.cpp
content/events/src/nsDOMMessageEvent.cpp
content/events/src/nsDOMMouseEvent.cpp
content/events/src/nsDOMMouseScrollEvent.cpp
content/events/src/nsDOMMutationEvent.cpp
content/events/src/nsDOMNotifyPaintEvent.cpp
content/events/src/nsDOMOrientationEvent.cpp
content/events/src/nsDOMPageTransitionEvent.cpp
content/events/src/nsDOMPopStateEvent.cpp
content/events/src/nsDOMPopupBlockedEvent.cpp
content/events/src/nsDOMProgressEvent.cpp
content/events/src/nsDOMScrollAreaEvent.cpp
content/events/src/nsDOMSimpleGestureEvent.cpp
content/events/src/nsDOMTransitionEvent.cpp
content/events/src/nsDOMUIEvent.cpp
content/events/src/nsDOMXULCommandEvent.cpp
content/events/src/nsEventListenerService.cpp
content/events/src/nsPaintRequest.cpp
content/html/content/src/nsClientRect.cpp
content/html/content/src/nsHTMLAnchorElement.cpp
content/html/content/src/nsHTMLAreaElement.cpp
content/html/content/src/nsHTMLAudioElement.cpp
content/html/content/src/nsHTMLBRElement.cpp
content/html/content/src/nsHTMLBodyElement.cpp
content/html/content/src/nsHTMLButtonElement.cpp
content/html/content/src/nsHTMLCanvasElement.cpp
content/html/content/src/nsHTMLDelElement.cpp
content/html/content/src/nsHTMLDivElement.cpp
content/html/content/src/nsHTMLFieldSetElement.cpp
content/html/content/src/nsHTMLFontElement.cpp
content/html/content/src/nsHTMLFormElement.cpp
content/html/content/src/nsHTMLFrameElement.cpp
content/html/content/src/nsHTMLFrameSetElement.cpp
content/html/content/src/nsHTMLHRElement.cpp
content/html/content/src/nsHTMLHeadElement.cpp
content/html/content/src/nsHTMLHeadingElement.cpp
content/html/content/src/nsHTMLHtmlElement.cpp
content/html/content/src/nsHTMLIFrameElement.cpp
content/html/content/src/nsHTMLImageElement.cpp
content/html/content/src/nsHTMLInputElement.cpp
content/html/content/src/nsHTMLLIElement.cpp
content/html/content/src/nsHTMLLabelElement.cpp
content/html/content/src/nsHTMLLegendElement.cpp
content/html/content/src/nsHTMLLinkElement.cpp
content/html/content/src/nsHTMLMapElement.cpp
content/html/content/src/nsHTMLMediaError.cpp
content/html/content/src/nsHTMLMetaElement.cpp
content/html/content/src/nsHTMLOListElement.cpp
content/html/content/src/nsHTMLObjectElement.cpp
content/html/content/src/nsHTMLOptGroupElement.cpp
content/html/content/src/nsHTMLOptionElement.cpp
content/html/content/src/nsHTMLParagraphElement.cpp
content/html/content/src/nsHTMLPreElement.cpp
content/html/content/src/nsHTMLScriptElement.cpp
content/html/content/src/nsHTMLSelectElement.cpp
content/html/content/src/nsHTMLSharedElement.cpp
content/html/content/src/nsHTMLSharedObjectElement.cpp
content/html/content/src/nsHTMLSourceElement.cpp
content/html/content/src/nsHTMLSpanElement.cpp
content/html/content/src/nsHTMLStyleElement.cpp
content/html/content/src/nsHTMLTableCaptionElement.cpp
content/html/content/src/nsHTMLTableCellElement.cpp
content/html/content/src/nsHTMLTableColElement.cpp
content/html/content/src/nsHTMLTableElement.cpp
content/html/content/src/nsHTMLTableRowElement.cpp
content/html/content/src/nsHTMLTableSectionElement.cpp
content/html/content/src/nsHTMLTextAreaElement.cpp
content/html/content/src/nsHTMLTitleElement.cpp
content/html/content/src/nsHTMLVideoElement.cpp
content/html/document/src/nsHTMLDocument.cpp
content/html/document/src/nsImageDocument.cpp
content/mathml/content/src/nsMathMLElement.cpp
content/svg/content/src/nsDOMSVGEvent.cpp
content/svg/content/src/nsDOMSVGZoomEvent.cpp
content/svg/content/src/nsSVGAElement.cpp
content/svg/content/src/nsSVGAngle.cpp
content/svg/content/src/nsSVGAngle.h
content/svg/content/src/nsSVGAnimateElement.cpp
content/svg/content/src/nsSVGAnimateTransformElement.cpp
content/svg/content/src/nsSVGAnimatedLengthList.cpp
content/svg/content/src/nsSVGAnimatedNumberList.cpp
content/svg/content/src/nsSVGAnimatedTransformList.cpp
content/svg/content/src/nsSVGBoolean.cpp
content/svg/content/src/nsSVGBoolean.h
content/svg/content/src/nsSVGCircleElement.cpp
content/svg/content/src/nsSVGClipPathElement.cpp
content/svg/content/src/nsSVGDefsElement.cpp
content/svg/content/src/nsSVGDescElement.cpp
content/svg/content/src/nsSVGEllipseElement.cpp
content/svg/content/src/nsSVGEnum.cpp
content/svg/content/src/nsSVGEnum.h
content/svg/content/src/nsSVGFilterElement.cpp
content/svg/content/src/nsSVGFilters.cpp
content/svg/content/src/nsSVGForeignObjectElement.cpp
content/svg/content/src/nsSVGGElement.cpp
content/svg/content/src/nsSVGGradientElement.cpp
content/svg/content/src/nsSVGImageElement.cpp
content/svg/content/src/nsSVGInteger.cpp
content/svg/content/src/nsSVGInteger.h
content/svg/content/src/nsSVGLength.cpp
content/svg/content/src/nsSVGLength2.cpp
content/svg/content/src/nsSVGLength2.h
content/svg/content/src/nsSVGLengthList.cpp
content/svg/content/src/nsSVGLineElement.cpp
content/svg/content/src/nsSVGMarkerElement.cpp
content/svg/content/src/nsSVGMaskElement.cpp
content/svg/content/src/nsSVGMatrix.cpp
content/svg/content/src/nsSVGMetadataElement.cpp
content/svg/content/src/nsSVGNumber.cpp
content/svg/content/src/nsSVGNumber2.cpp
content/svg/content/src/nsSVGNumber2.h
content/svg/content/src/nsSVGNumberList.cpp
content/svg/content/src/nsSVGPathElement.cpp
content/svg/content/src/nsSVGPathSeg.cpp
content/svg/content/src/nsSVGPathSegList.cpp
content/svg/content/src/nsSVGPatternElement.cpp
content/svg/content/src/nsSVGPoint.cpp
content/svg/content/src/nsSVGPointList.cpp
content/svg/content/src/nsSVGPolygonElement.cpp
content/svg/content/src/nsSVGPolylineElement.cpp
content/svg/content/src/nsSVGPreserveAspectRatio.cpp
content/svg/content/src/nsSVGPreserveAspectRatio.h
content/svg/content/src/nsSVGRect.cpp
content/svg/content/src/nsSVGRectElement.cpp
content/svg/content/src/nsSVGSVGElement.cpp
content/svg/content/src/nsSVGScriptElement.cpp
content/svg/content/src/nsSVGSetElement.cpp
content/svg/content/src/nsSVGStopElement.cpp
content/svg/content/src/nsSVGString.cpp
content/svg/content/src/nsSVGString.h
content/svg/content/src/nsSVGStyleElement.cpp
content/svg/content/src/nsSVGSwitchElement.cpp
content/svg/content/src/nsSVGSymbolElement.cpp
content/svg/content/src/nsSVGTSpanElement.cpp
content/svg/content/src/nsSVGTextElement.cpp
content/svg/content/src/nsSVGTextPathElement.cpp
content/svg/content/src/nsSVGTitleElement.cpp
content/svg/content/src/nsSVGTransform.cpp
content/svg/content/src/nsSVGTransformList.cpp
content/svg/content/src/nsSVGUseElement.cpp
content/svg/content/src/nsSVGViewBox.cpp
content/svg/content/src/nsSVGViewBox.h
content/svg/document/src/nsSVGDocument.cpp
content/xml/content/src/nsXMLCDATASection.cpp
content/xml/content/src/nsXMLElement.cpp
content/xml/content/src/nsXMLProcessingInstruction.cpp
content/xml/content/src/nsXMLStylesheetPI.cpp
content/xml/document/src/nsXMLDocument.cpp
content/xslt/src/xpath/nsXPathEvaluator.cpp
content/xslt/src/xpath/nsXPathExpression.cpp
content/xslt/src/xpath/nsXPathNSResolver.cpp
content/xslt/src/xpath/nsXPathNamespace.cpp
content/xslt/src/xpath/nsXPathResult.cpp
content/xslt/src/xslt/txMozillaXSLTProcessor.cpp
content/xul/content/src/nsXULElement.cpp
content/xul/document/src/nsXULCommandDispatcher.cpp
content/xul/document/src/nsXULControllers.cpp
content/xul/document/src/nsXULDocument.cpp
content/xul/templates/src/nsXULTemplateBuilder.cpp
content/xul/templates/src/nsXULTreeBuilder.cpp
dom/base/Makefile.in
dom/base/nsBarProps.cpp
dom/base/nsDOMClassInfo.cpp
dom/base/nsDOMClassInfoClasses.h
dom/base/nsDOMClassInfoID.h
dom/base/nsDOMException.cpp
dom/base/nsDOMWindowUtils.cpp
dom/base/nsGlobalWindow.cpp
dom/base/nsHistory.cpp
dom/base/nsLocation.cpp
dom/base/nsMimeTypeArray.cpp
dom/base/nsPluginArray.cpp
dom/base/nsScreen.cpp
dom/src/geolocation/WinMobileLocationProvider.cpp
dom/src/geolocation/nsGeolocation.cpp
dom/src/offline/nsDOMOfflineResourceList.cpp
dom/src/storage/nsDOMStorage.cpp
layout/generic/nsSelection.cpp
layout/style/nsCSSRules.cpp
layout/style/nsCSSStyleRule.cpp
layout/style/nsCSSStyleSheet.cpp
layout/style/nsComputedDOMStyle.cpp
layout/style/nsDOMCSSDeclaration.cpp
layout/style/nsDOMCSSRGBColor.cpp
layout/style/nsDOMCSSRect.cpp
layout/style/nsDOMCSSValueList.cpp
layout/style/nsROCSSPrimitiveValue.cpp
layout/xul/base/src/nsBoxObject.cpp
layout/xul/base/src/tree/src/nsTreeColumns.cpp
layout/xul/base/src/tree/src/nsTreeContentView.cpp
layout/xul/base/src/tree/src/nsTreeSelection.cpp
--- a/content/base/src/nsCommentNode.cpp
+++ b/content/base/src/nsCommentNode.cpp
@@ -101,16 +101,17 @@ nsCommentNode::nsCommentNode(nsINodeInfo
   : nsGenericDOMDataNode(aNodeInfo)
 {
 }
 
 nsCommentNode::~nsCommentNode()
 {
 }
 
+DOMCI_DATA(Comment, nsCommentNode)
 
 // QueryInterface implementation for nsCommentNode
 NS_INTERFACE_TABLE_HEAD(nsCommentNode)
   NS_NODE_INTERFACE_TABLE3(nsCommentNode, nsIDOMNode, nsIDOMCharacterData,
                            nsIDOMComment)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Comment)
 NS_INTERFACE_MAP_END_INHERITING(nsGenericDOMDataNode)
 
--- a/content/base/src/nsContentList.cpp
+++ b/content/base/src/nsContentList.cpp
@@ -78,16 +78,17 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsBaseContentList)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMARRAY(mElements)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 #define NS_CONTENT_LIST_INTERFACES(_class)                                    \
     NS_INTERFACE_TABLE_ENTRY(_class, nsINodeList)                             \
     NS_INTERFACE_TABLE_ENTRY(_class, nsIDOMNodeList)
 
+DOMCI_DATA(NodeList, nsBaseContentList)
 
 // QueryInterface implementation for nsBaseContentList
 NS_INTERFACE_TABLE_HEAD(nsBaseContentList)
   NS_NODELIST_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsBaseContentList)
     NS_CONTENT_LIST_INTERFACES(nsBaseContentList)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsBaseContentList)
@@ -435,16 +436,17 @@ nsContentList::~nsContentList()
   }
 
   if (mDestroyFunc) {
     // Clean up mData
     (*mDestroyFunc)(mData);
   }
 }
 
+DOMCI_DATA(ContentList, nsContentList)
 
 // QueryInterface implementation for nsContentList
 NS_INTERFACE_TABLE_HEAD(nsContentList)
   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
   NS_NODELIST_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsContentList)
     NS_CONTENT_LIST_INTERFACES(nsContentList)
     NS_INTERFACE_TABLE_ENTRY(nsContentList, nsIHTMLCollection)
     NS_INTERFACE_TABLE_ENTRY(nsContentList, nsIDOMHTMLCollection)
--- a/content/base/src/nsDOMAttribute.cpp
+++ b/content/base/src/nsDOMAttribute.cpp
@@ -104,16 +104,19 @@ NS_IMPL_CYCLE_COLLECTION_TRACE_END
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDOMAttribute)
   if (tmp->mChild) {
     static_cast<nsTextNode*>(tmp->mChild)->UnbindFromAttribute();
     NS_RELEASE(tmp->mChild);
   }
   NS_IMPL_CYCLE_COLLECTION_UNLINK_LISTENERMANAGER
   NS_IMPL_CYCLE_COLLECTION_UNLINK_USERDATA
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
+
+DOMCI_DATA(Attr, nsDOMAttribute)
+
 // QueryInterface implementation for nsDOMAttribute
 NS_INTERFACE_TABLE_HEAD(nsDOMAttribute)
   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
   NS_NODE_INTERFACE_TABLE8(nsDOMAttribute, nsIDOMAttr, nsIAttribute, nsINode,
                            nsIDOMNode, nsIDOM3Node, nsIDOM3Attr,
                            nsPIDOMEventTarget, nsIDOMXPathNSResolver)
   NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsDOMAttribute)
   NS_INTERFACE_MAP_ENTRY_TEAROFF(nsISupportsWeakReference,
--- a/content/base/src/nsDOMAttributeMap.cpp
+++ b/content/base/src/nsDOMAttributeMap.cpp
@@ -110,16 +110,17 @@ TraverseMapEntry(nsAttrHashKey::KeyType 
 
   return PL_DHASH_NEXT;
 }
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsDOMAttributeMap)
   tmp->mAttributeCache.Enumerate(TraverseMapEntry, &cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(NamedNodeMap, nsDOMAttributeMap)
 
 // QueryInterface implementation for nsDOMAttributeMap
 NS_INTERFACE_TABLE_HEAD(nsDOMAttributeMap)
   NS_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsDOMAttributeMap)
     NS_INTERFACE_TABLE_ENTRY(nsDOMAttributeMap, nsIDOMNamedNodeMap)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsDOMAttributeMap)
--- a/content/base/src/nsDOMDocumentType.cpp
+++ b/content/base/src/nsDOMDocumentType.cpp
@@ -116,16 +116,17 @@ nsDOMDocumentType::nsDOMDocumentType(nsI
   mInternalSubset(aInternalSubset)
 {
 }
 
 nsDOMDocumentType::~nsDOMDocumentType()
 {
 }
 
+DOMCI_DATA(DocumentType, nsDOMDocumentType)
 
 // QueryInterface implementation for nsDOMDocumentType
 NS_INTERFACE_TABLE_HEAD(nsDOMDocumentType)
   NS_NODE_INTERFACE_TABLE2(nsDOMDocumentType, nsIDOMNode, nsIDOMDocumentType)
   NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsDOMDocumentType)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DocumentType)
 NS_INTERFACE_MAP_END_INHERITING(nsGenericDOMDataNode)
 
--- a/content/base/src/nsDOMFile.cpp
+++ b/content/base/src/nsDOMFile.cpp
@@ -62,16 +62,18 @@
 #include "nsIUUIDGenerator.h"
 #include "nsFileDataProtocolHandler.h"
 
 #include "plbase64.h"
 #include "prmem.h"
 
 // nsDOMFile implementation
 
+DOMCI_DATA(File, nsDOMFile)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMFile)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMFile)
   NS_INTERFACE_MAP_ENTRY(nsIDOMFile)
   NS_INTERFACE_MAP_ENTRY(nsIDOMFileInternal)
   NS_INTERFACE_MAP_ENTRY(nsICharsetDetectionObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(File)
 NS_INTERFACE_MAP_END
 
@@ -458,16 +460,18 @@ nsDOMFile::ConvertStream(nsIInputStream 
     rv = unicharStream->ReadString(8192, result, &numChars);
   }
 
   return rv;
 }
 
 // nsDOMFileList implementation
 
+DOMCI_DATA(FileList, nsDOMFileList)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMFileList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMFileList)
   NS_INTERFACE_MAP_ENTRY(nsIDOMFileList)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(FileList)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsDOMFileList)
 NS_IMPL_RELEASE(nsDOMFileList)
@@ -485,16 +489,18 @@ nsDOMFileList::Item(PRUint32 aIndex, nsI
 {
   NS_IF_ADDREF(*aFile = GetItemAt(aIndex));
 
   return NS_OK;
 }
 
 // nsDOMFileError implementation
 
+DOMCI_DATA(FileError, nsDOMFileError)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMFileError)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMFileError)
   NS_INTERFACE_MAP_ENTRY(nsIDOMFileError)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(FileError)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsDOMFileError)
 NS_IMPL_RELEASE(nsDOMFileError)
--- a/content/base/src/nsDOMFileReader.cpp
+++ b/content/base/src/nsDOMFileReader.cpp
@@ -104,16 +104,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_IN
                                                 nsXHREventTarget)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mOnLoadEndListener)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mFile)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mProgressNotifier)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mPrincipal)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mChannel)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
+DOMCI_DATA(FileReader, nsDOMFileReader)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMFileReader)
   NS_INTERFACE_MAP_ENTRY(nsIDOMFileReader)
   NS_INTERFACE_MAP_ENTRY(nsIStreamListener)
   NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsIJSNativeInitializer)
   NS_INTERFACE_MAP_ENTRY(nsITimerCallback)
   NS_INTERFACE_MAP_ENTRY(nsICharsetDetectionObserver)
--- a/content/base/src/nsDOMLists.cpp
+++ b/content/base/src/nsDOMLists.cpp
@@ -51,16 +51,18 @@
 nsDOMStringList::nsDOMStringList()
 {
 }
 
 nsDOMStringList::~nsDOMStringList()
 {
 }
 
+DOMCI_DATA(DOMStringList, nsDOMStringList)
+
 NS_IMPL_ADDREF(nsDOMStringList)
 NS_IMPL_RELEASE(nsDOMStringList)
 NS_INTERFACE_TABLE_HEAD(nsDOMStringList)
   NS_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsDOMStringList)
     NS_INTERFACE_TABLE_ENTRY(nsDOMStringList, nsIDOMDOMStringList)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DOMStringList)
@@ -97,16 +99,17 @@ nsDOMStringList::Contains(const nsAStrin
 
 nsNameList::nsNameList()
 {
 }
 
 nsNameList::~nsNameList()
 {
 }
+DOMCI_DATA(NameList, nsNameList)
 
 NS_IMPL_ADDREF(nsNameList)
 NS_IMPL_RELEASE(nsNameList)
 NS_INTERFACE_TABLE_HEAD(nsNameList)
   NS_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsNameList)
     NS_INTERFACE_TABLE_ENTRY(nsNameList, nsIDOMNameList)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
--- a/content/base/src/nsDOMParser.cpp
+++ b/content/base/src/nsDOMParser.cpp
@@ -111,16 +111,17 @@ nsDOMParser::nsDOMParser()
 }
 
 nsDOMParser::~nsDOMParser()
 {
   NS_ABORT_IF_FALSE(!mLoopingForSyncLoad, "we rather crash than hang");
   mLoopingForSyncLoad = PR_FALSE;
 }
 
+DOMCI_DATA(DOMParser, nsDOMParser)
 
 // QueryInterface implementation for nsDOMParser
 NS_INTERFACE_MAP_BEGIN(nsDOMParser)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMParser)
   NS_INTERFACE_MAP_ENTRY(nsIDOMParser)
   NS_INTERFACE_MAP_ENTRY(nsIDOMParserJS)
   NS_INTERFACE_MAP_ENTRY(nsIDOMLoadListener)
   NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
--- a/content/base/src/nsDOMSerializer.cpp
+++ b/content/base/src/nsDOMSerializer.cpp
@@ -53,16 +53,17 @@
 nsDOMSerializer::nsDOMSerializer()
 {
 }
 
 nsDOMSerializer::~nsDOMSerializer()
 {
 }
 
+DOMCI_DATA(XMLSerializer, nsDOMSerializer)
 
 // QueryInterface implementation for nsDOMSerializer
 NS_INTERFACE_MAP_BEGIN(nsDOMSerializer)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSerializer)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XMLSerializer)
 NS_INTERFACE_MAP_END
 
--- a/content/base/src/nsDOMTokenList.cpp
+++ b/content/base/src/nsDOMTokenList.cpp
@@ -52,16 +52,18 @@ nsDOMTokenList::nsDOMTokenList(nsGeneric
     mAttrAtom(aAttrAtom)
 {
   // We don't add a reference to our element. If it goes away,
   // we'll be told to drop our reference
 }
 
 nsDOMTokenList::~nsDOMTokenList() { }
 
+DOMCI_DATA(DOMTokenList, nsDOMTokenList)
+
 NS_INTERFACE_TABLE_HEAD(nsDOMTokenList)
   NS_INTERFACE_TABLE1(nsDOMTokenList,
                       nsIDOMDOMTokenList)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DOMTokenList)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsDOMTokenList)
--- a/content/base/src/nsDocument.cpp
+++ b/content/base/src/nsDocument.cpp
@@ -472,16 +472,18 @@ nsDOMStyleSheetList::nsDOMStyleSheetList
 
 nsDOMStyleSheetList::~nsDOMStyleSheetList()
 {
   if (mDocument) {
     mDocument->RemoveObserver(this);
   }
 }
 
+DOMCI_DATA(StyleSheetList, nsDOMStyleSheetList)
+
 // XXX couldn't we use the GetIIDs method from CSSStyleSheetList here?
 // QueryInterface implementation for nsDOMStyleSheetList
 NS_INTERFACE_TABLE_HEAD(nsDOMStyleSheetList)
   NS_INTERFACE_TABLE3(nsDOMStyleSheetList,
                       nsIDOMStyleSheetList,
                       nsIDocumentObserver,
                       nsIMutationObserver)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
@@ -1264,16 +1266,18 @@ nsDOMImplementation::nsDOMImplementation
     mPrincipal(aPrincipal)
 {
 }
 
 nsDOMImplementation::~nsDOMImplementation()
 {
 }
 
+DOMCI_DATA(DOMImplementation, nsDOMImplementation)
+
 // QueryInterface implementation for nsDOMImplementation
 NS_INTERFACE_MAP_BEGIN(nsDOMImplementation)
   NS_INTERFACE_MAP_ENTRY(nsIDOMDOMImplementation)
   NS_INTERFACE_MAP_ENTRY(nsIPrivateDOMImplementation)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMDOMImplementation)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DOMImplementation)
 NS_INTERFACE_MAP_END
 
--- a/content/base/src/nsDocumentFragment.cpp
+++ b/content/base/src/nsDocumentFragment.cpp
@@ -189,16 +189,18 @@ nsDocumentFragment::~nsDocumentFragment(
 }
 
 PRBool
 nsDocumentFragment::IsNodeOfType(PRUint32 aFlags) const
 {
   return !(aFlags & ~(eCONTENT | eDOCUMENT_FRAGMENT));
 }
 
+DOMCI_DATA(DocumentFragment, nsDocumentFragment)
+
 // QueryInterface implementation for nsDocumentFragment
 NS_INTERFACE_TABLE_HEAD(nsDocumentFragment)
   NS_NODE_INTERFACE_TABLE2(nsDocumentFragment, nsIDOMNode,
                            nsIDOMDocumentFragment)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DocumentFragment)
 NS_INTERFACE_MAP_END_INHERITING(nsGenericElement)
 
 
--- a/content/base/src/nsFormData.cpp
+++ b/content/base/src/nsFormData.cpp
@@ -44,16 +44,18 @@
 nsFormData::nsFormData()
   : nsFormSubmission(NS_LITERAL_CSTRING("UTF-8"))
 {
 }
 
 // -------------------------------------------------------------------------
 // nsISupports
 
+DOMCI_DATA(FormData, nsFormData)
+
 NS_IMPL_ADDREF(nsFormData)
 NS_IMPL_RELEASE(nsFormData)
 NS_INTERFACE_MAP_BEGIN(nsFormData)
   NS_INTERFACE_MAP_ENTRY(nsIDOMFormData)
   NS_INTERFACE_MAP_ENTRY(nsIXHRSendable)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(FormData)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMFormData)
 NS_INTERFACE_MAP_END
--- a/content/base/src/nsNodeIterator.cpp
+++ b/content/base/src/nsNodeIterator.cpp
@@ -226,16 +226,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ns
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mRoot)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mFilter)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsNodeIterator)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mRoot)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mFilter)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(NodeIterator, nsNodeIterator)
+
 // QueryInterface implementation for nsNodeIterator
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsNodeIterator)
     NS_INTERFACE_MAP_ENTRY(nsIDOMNodeIterator)
     NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
     NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNodeIterator)
     NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(NodeIterator)
 NS_INTERFACE_MAP_END
 
--- a/content/base/src/nsRange.cpp
+++ b/content/base/src/nsRange.cpp
@@ -233,16 +233,18 @@ nsRange::~nsRange()
  * nsISupports
  ******************************************************/
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsRange)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsRange)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsRange)
 
+DOMCI_DATA(Range, nsRange)
+
 // QueryInterface implementation for nsRange
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsRange)
   NS_INTERFACE_MAP_ENTRY(nsIDOMRange)
   NS_INTERFACE_MAP_ENTRY(nsIRange)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSRange)
   NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIRange)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Range)
--- a/content/base/src/nsTextNode.cpp
+++ b/content/base/src/nsTextNode.cpp
@@ -146,16 +146,17 @@ nsTextNode::nsTextNode(nsINodeInfo *aNod
 
 nsTextNode::~nsTextNode()
 {
 }
 
 NS_IMPL_ADDREF_INHERITED(nsTextNode, nsGenericDOMDataNode)
 NS_IMPL_RELEASE_INHERITED(nsTextNode, nsGenericDOMDataNode)
 
+DOMCI_DATA(Text, nsTextNode)
 
 // QueryInterface implementation for nsTextNode
 NS_INTERFACE_TABLE_HEAD(nsTextNode)
   NS_NODE_INTERFACE_TABLE3(nsTextNode, nsIDOMNode, nsIDOMText,
                            nsIDOMCharacterData)
   NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Text, new nsText3Tearoff(this))
   NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(nsTextNode)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Text)
--- a/content/base/src/nsTreeWalker.cpp
+++ b/content/base/src/nsTreeWalker.cpp
@@ -72,16 +72,18 @@ nsTreeWalker::~nsTreeWalker()
 }
 
 /*
  * nsISupports and cycle collection stuff
  */
 
 NS_IMPL_CYCLE_COLLECTION_3(nsTreeWalker, mFilter, mCurrentNode, mRoot)
 
+DOMCI_DATA(TreeWalker, nsTreeWalker)
+
 // QueryInterface implementation for nsTreeWalker
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsTreeWalker)
     NS_INTERFACE_MAP_ENTRY(nsIDOMTreeWalker)
     NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMTreeWalker)
     NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(TreeWalker)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsTreeWalker)
--- a/content/base/src/nsXMLHttpRequest.cpp
+++ b/content/base/src/nsXMLHttpRequest.cpp
@@ -612,16 +612,18 @@ nsXHREventTarget::SetOnprogress(nsIDOMEv
 
 nsXMLHttpRequestUpload::~nsXMLHttpRequestUpload()
 {
   if (mListenerManager) {
     mListenerManager->Disconnect();
   }
 }
 
+DOMCI_DATA(XMLHttpRequestUpload, nsXMLHttpRequestUpload)
+
 NS_INTERFACE_MAP_BEGIN(nsXMLHttpRequestUpload)
   NS_INTERFACE_MAP_ENTRY(nsIXMLHttpRequestUpload)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XMLHttpRequestUpload)
 NS_INTERFACE_MAP_END_INHERITING(nsXHREventTarget)
 
 NS_IMPL_ADDREF_INHERITED(nsXMLHttpRequestUpload, nsXHREventTarget)
 NS_IMPL_RELEASE_INHERITED(nsXMLHttpRequestUpload, nsXHREventTarget)
 
@@ -1005,16 +1007,17 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_IN
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mXMLParserStreamListener)
 
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mChannelEventSink)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mProgressEventSink)
 
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mUpload)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
+DOMCI_DATA(XMLHttpRequest, nsXMLHttpRequest)
 
 // QueryInterface implementation for nsXMLHttpRequest
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsXMLHttpRequest)
   NS_INTERFACE_MAP_ENTRY(nsIXMLHttpRequest)
   NS_INTERFACE_MAP_ENTRY(nsIJSXMLHttpRequest)
   NS_INTERFACE_MAP_ENTRY(nsIDOMLoadListener)
   NS_INTERFACE_MAP_ENTRY(nsIDOMEventListener)
   NS_INTERFACE_MAP_ENTRY(nsIRequestObserver)
@@ -3265,16 +3268,18 @@ nsXMLHttpProgressEvent::nsXMLHttpProgres
   mMaxProgress = aMaxProgress;
 }
 
 nsXMLHttpProgressEvent::~nsXMLHttpProgressEvent()
 {}
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsXMLHttpProgressEvent)
 
+DOMCI_DATA(XMLHttpProgressEvent, nsXMLHttpProgressEvent)
+
 // QueryInterface implementation for nsXMLHttpProgressEvent
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXMLHttpProgressEvent)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMProgressEvent)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsIDOMEvent, nsIDOMProgressEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSEvent)
   NS_INTERFACE_MAP_ENTRY(nsIPrivateDOMEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMProgressEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMLSProgressEvent)
--- a/content/canvas/src/WebGLContext.cpp
+++ b/content/canvas/src/WebGLContext.cpp
@@ -362,72 +362,86 @@ WebGLContext::GetThebesSurface(gfxASurfa
 
 //
 // XPCOM goop
 //
 
 NS_IMPL_ADDREF(WebGLContext)
 NS_IMPL_RELEASE(WebGLContext)
 
+DOMCI_DATA(CanvasRenderingContextWebGL, WebGLContext)
+
 NS_INTERFACE_MAP_BEGIN(WebGLContext)
   NS_INTERFACE_MAP_ENTRY(nsICanvasRenderingContextWebGL)
   NS_INTERFACE_MAP_ENTRY(nsICanvasRenderingContextInternal)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICanvasRenderingContextWebGL)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CanvasRenderingContextWebGL)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(WebGLBuffer)
 NS_IMPL_RELEASE(WebGLBuffer)
 
+DOMCI_DATA(WebGLBuffer, WebGLBuffer)
+
 NS_INTERFACE_MAP_BEGIN(WebGLBuffer)
   NS_INTERFACE_MAP_ENTRY(nsIWebGLBuffer)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WebGLBuffer)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(WebGLTexture)
 NS_IMPL_RELEASE(WebGLTexture)
 
+DOMCI_DATA(WebGLTexture, WebGLTexture)
+
 NS_INTERFACE_MAP_BEGIN(WebGLTexture)
   NS_INTERFACE_MAP_ENTRY(nsIWebGLTexture)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WebGLTexture)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(WebGLProgram)
 NS_IMPL_RELEASE(WebGLProgram)
 
+DOMCI_DATA(WebGLProgram, WebGLProgram)
+
 NS_INTERFACE_MAP_BEGIN(WebGLProgram)
   NS_INTERFACE_MAP_ENTRY(nsIWebGLProgram)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WebGLProgram)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(WebGLShader)
 NS_IMPL_RELEASE(WebGLShader)
 
+DOMCI_DATA(WebGLShader, WebGLShader)
+
 NS_INTERFACE_MAP_BEGIN(WebGLShader)
   NS_INTERFACE_MAP_ENTRY(nsIWebGLShader)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WebGLShader)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(WebGLFramebuffer)
 NS_IMPL_RELEASE(WebGLFramebuffer)
 
+DOMCI_DATA(WebGLFramebuffer, WebGLFramebuffer)
+
 NS_INTERFACE_MAP_BEGIN(WebGLFramebuffer)
   NS_INTERFACE_MAP_ENTRY(nsIWebGLFramebuffer)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WebGLFramebuffer)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(WebGLRenderbuffer)
 NS_IMPL_RELEASE(WebGLRenderbuffer)
 
+DOMCI_DATA(WebGLRenderbuffer, WebGLRenderbuffer)
+
 NS_INTERFACE_MAP_BEGIN(WebGLRenderbuffer)
   NS_INTERFACE_MAP_ENTRY(nsIWebGLRenderbuffer)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WebGLRenderbuffer)
 NS_INTERFACE_MAP_END
 
 /* [noscript] attribute GLuint name; */
 NS_IMETHODIMP WebGLTexture::GetName(GLuint *aName)
--- a/content/canvas/src/nsCanvasRenderingContext2D.cpp
+++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp
@@ -215,16 +215,18 @@ protected:
     nsRefPtr<gfxPattern> mPattern;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsCanvasGradient, NS_CANVASGRADIENT_PRIVATE_IID)
 
 NS_IMPL_ADDREF(nsCanvasGradient)
 NS_IMPL_RELEASE(nsCanvasGradient)
 
+DOMCI_DATA(CanvasGradient, nsCanvasGradient)
+
 NS_INTERFACE_MAP_BEGIN(nsCanvasGradient)
   NS_INTERFACE_MAP_ENTRY(nsCanvasGradient)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCanvasGradient)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CanvasGradient)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 /**
@@ -261,16 +263,18 @@ protected:
     PRPackedBool mForceWriteOnly;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsCanvasPattern, NS_CANVASPATTERN_PRIVATE_IID)
 
 NS_IMPL_ADDREF(nsCanvasPattern)
 NS_IMPL_RELEASE(nsCanvasPattern)
 
+DOMCI_DATA(CanvasPattern, nsCanvasPattern)
+
 NS_INTERFACE_MAP_BEGIN(nsCanvasPattern)
   NS_INTERFACE_MAP_ENTRY(nsCanvasPattern)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCanvasPattern)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CanvasPattern)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 /**
@@ -298,16 +302,18 @@ private:
     float width;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsTextMetrics, NS_TEXTMETRICS_PRIVATE_IID)
 
 NS_IMPL_ADDREF(nsTextMetrics)
 NS_IMPL_RELEASE(nsTextMetrics)
 
+DOMCI_DATA(TextMetrics, nsTextMetrics)
+
 NS_INTERFACE_MAP_BEGIN(nsTextMetrics)
   NS_INTERFACE_MAP_ENTRY(nsTextMetrics)
   NS_INTERFACE_MAP_ENTRY(nsIDOMTextMetrics)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(TextMetrics)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 struct nsCanvasBidiProcessor;
@@ -659,16 +665,18 @@ protected:
     }
 
     friend struct nsCanvasBidiProcessor;
 };
 
 NS_IMPL_ADDREF(nsCanvasRenderingContext2D)
 NS_IMPL_RELEASE(nsCanvasRenderingContext2D)
 
+DOMCI_DATA(CanvasRenderingContext2D, nsCanvasRenderingContext2D)
+
 NS_INTERFACE_MAP_BEGIN(nsCanvasRenderingContext2D)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCanvasRenderingContext2D)
   NS_INTERFACE_MAP_ENTRY(nsICanvasRenderingContextInternal)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMCanvasRenderingContext2D)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CanvasRenderingContext2D)
 NS_INTERFACE_MAP_END
 
 /**
--- a/content/events/src/nsDOMBeforeUnloadEvent.cpp
+++ b/content/events/src/nsDOMBeforeUnloadEvent.cpp
@@ -37,16 +37,18 @@
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsDOMBeforeUnloadEvent.h"
 #include "nsContentUtils.h"
 
 NS_IMPL_ADDREF_INHERITED(nsDOMBeforeUnloadEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMBeforeUnloadEvent, nsDOMEvent)
 
+DOMCI_DATA(BeforeUnloadEvent, nsDOMBeforeUnloadEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMBeforeUnloadEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMBeforeUnloadEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(BeforeUnloadEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMETHODIMP
 nsDOMBeforeUnloadEvent::SetReturnValue(const nsAString& aReturnValue)
 {
--- a/content/events/src/nsDOMCommandEvent.cpp
+++ b/content/events/src/nsDOMCommandEvent.cpp
@@ -54,16 +54,18 @@ nsDOMCommandEvent::nsDOMCommandEvent(nsP
 nsDOMCommandEvent::~nsDOMCommandEvent()
 {
   if (mEventIsInternal && mEvent->eventStructType == NS_COMMAND_EVENT) {
     delete static_cast<nsCommandEvent*>(mEvent);
     mEvent = nsnull;
   }
 }
 
+DOMCI_DATA(CommandEvent, nsDOMCommandEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMCommandEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCommandEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CommandEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMCommandEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMCommandEvent, nsDOMEvent)
 
--- a/content/events/src/nsDOMDataContainerEvent.cpp
+++ b/content/events/src/nsDOMDataContainerEvent.cpp
@@ -58,16 +58,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsDOMDataContainerEvent,
                                                   nsDOMEvent)
   tmp->mData.EnumerateRead(TraverseEntry, &cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsDOMDataContainerEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMDataContainerEvent, nsDOMEvent)
 
+DOMCI_DATA(DataContainerEvent, nsDOMDataContainerEvent)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMDataContainerEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMDataContainerEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DataContainerEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMETHODIMP
 nsDOMDataContainerEvent::GetData(const nsAString& aKey, nsIVariant **aData)
 {
--- a/content/events/src/nsDOMDataTransfer.cpp
+++ b/content/events/src/nsDOMDataTransfer.cpp
@@ -51,16 +51,18 @@
 #include "nsContentUtils.h"
 #include "nsIContent.h"
 
 NS_IMPL_CYCLE_COLLECTION_2(nsDOMDataTransfer, mDragTarget, mDragImage)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsDOMDataTransfer)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsDOMDataTransfer)
 
+DOMCI_DATA(DataTransfer, nsDOMDataTransfer)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMDataTransfer)
   NS_INTERFACE_MAP_ENTRY(nsIDOMDataTransfer)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSDataTransfer)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMDataTransfer)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DataTransfer)
 NS_INTERFACE_MAP_END
 
 // the size of the array
--- a/content/events/src/nsDOMDragEvent.cpp
+++ b/content/events/src/nsDOMDragEvent.cpp
@@ -66,16 +66,18 @@ nsDOMDragEvent::~nsDOMDragEvent()
       delete static_cast<nsDragEvent*>(mEvent);
     mEvent = nsnull;
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsDOMDragEvent, nsDOMMouseEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMDragEvent, nsDOMMouseEvent)
 
+DOMCI_DATA(DragEvent, nsDOMDragEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMDragEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMDragEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DragEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMMouseEvent)
 
 NS_IMETHODIMP
 nsDOMDragEvent::InitDragEvent(const nsAString & aType,
                               PRBool aCanBubble, PRBool aCancelable,
--- a/content/events/src/nsDOMEvent.cpp
+++ b/content/events/src/nsDOMEvent.cpp
@@ -158,16 +158,18 @@ nsDOMEvent::~nsDOMEvent()
 
   if (mEventIsInternal && mEvent) {
     delete mEvent;
   }
 }
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsDOMEvent)
 
+DOMCI_DATA(Event, nsDOMEvent)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMEvent)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSEvent)
   NS_INTERFACE_MAP_ENTRY(nsIPrivateDOMEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Event)
 NS_INTERFACE_MAP_END
 
--- a/content/events/src/nsDOMKeyboardEvent.cpp
+++ b/content/events/src/nsDOMKeyboardEvent.cpp
@@ -62,16 +62,18 @@ nsDOMKeyboardEvent::~nsDOMKeyboardEvent(
     delete static_cast<nsKeyEvent*>(mEvent);
     mEvent = nsnull;
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsDOMKeyboardEvent, nsDOMUIEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMKeyboardEvent, nsDOMUIEvent)
 
+DOMCI_DATA(KeyboardEvent, nsDOMKeyboardEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMKeyboardEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMKeyEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(KeyboardEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMUIEvent)
 
 NS_IMETHODIMP
 nsDOMKeyboardEvent::GetAltKey(PRBool* aIsDown)
 {
--- a/content/events/src/nsDOMMessageEvent.cpp
+++ b/content/events/src/nsDOMMessageEvent.cpp
@@ -44,16 +44,18 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(nsDOMMess
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsDOMMessageEvent, nsDOMEvent)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mSource)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsDOMMessageEvent, nsDOMEvent)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSource)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(MessageEvent, nsDOMMessageEvent)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMMessageEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMMessageEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MessageEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMMessageEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMMessageEvent, nsDOMEvent)
 
--- a/content/events/src/nsDOMMouseEvent.cpp
+++ b/content/events/src/nsDOMMouseEvent.cpp
@@ -90,16 +90,18 @@ nsDOMMouseEvent::~nsDOMMouseEvent()
     }
     mEvent = nsnull;
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsDOMMouseEvent, nsDOMUIEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMMouseEvent, nsDOMUIEvent)
 
+DOMCI_DATA(MouseEvent, nsDOMMouseEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMMouseEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMMouseEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSMouseEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MouseEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMUIEvent)
 
 NS_IMETHODIMP
 nsDOMMouseEvent::InitMouseEvent(const nsAString & aType, PRBool aCanBubble, PRBool aCancelable,
--- a/content/events/src/nsDOMMouseScrollEvent.cpp
+++ b/content/events/src/nsDOMMouseScrollEvent.cpp
@@ -75,16 +75,18 @@ nsDOMMouseScrollEvent::~nsDOMMouseScroll
     }
     mEvent = nsnull;
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsDOMMouseScrollEvent, nsDOMMouseEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMMouseScrollEvent, nsDOMMouseEvent)
 
+DOMCI_DATA(MouseScrollEvent, nsDOMMouseScrollEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMMouseScrollEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMMouseScrollEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MouseScrollEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMMouseEvent)
 
 NS_IMETHODIMP
 nsDOMMouseScrollEvent::InitMouseScrollEvent(const nsAString & aType, PRBool aCanBubble, PRBool aCancelable,
                                 nsIDOMAbstractView *aView, PRInt32 aDetail, PRInt32 aScreenX, 
--- a/content/events/src/nsDOMMutationEvent.cpp
+++ b/content/events/src/nsDOMMutationEvent.cpp
@@ -54,16 +54,18 @@ nsDOMMutationEvent::~nsDOMMutationEvent(
 {
   if (mEventIsInternal) {
     nsMutationEvent* mutation = static_cast<nsMutationEvent*>(mEvent);
     delete mutation;
     mEvent = nsnull;
   }
 }
 
+DOMCI_DATA(MutationEvent, nsDOMMutationEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMMutationEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMMutationEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MutationEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMMutationEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMMutationEvent, nsDOMEvent)
 
--- a/content/events/src/nsDOMNotifyPaintEvent.cpp
+++ b/content/events/src/nsDOMNotifyPaintEvent.cpp
@@ -51,16 +51,18 @@ nsDOMNotifyPaintEvent::nsDOMNotifyPaintE
   if (mEvent) {
     mEvent->message = aEventType;
   }
   if (aInvalidateRequests) {
     mInvalidateRequests.SwapElements(aInvalidateRequests->mRequests);
   }
 }
 
+DOMCI_DATA(NotifyPaintEvent, nsDOMNotifyPaintEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMNotifyPaintEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNotifyPaintEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(NotifyPaintEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMNotifyPaintEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMNotifyPaintEvent, nsDOMEvent)
 
--- a/content/events/src/nsDOMOrientationEvent.cpp
+++ b/content/events/src/nsDOMOrientationEvent.cpp
@@ -35,16 +35,18 @@
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsDOMOrientationEvent.h"
 #include "nsContentUtils.h"
 
 NS_IMPL_ADDREF_INHERITED(nsDOMOrientationEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMOrientationEvent, nsDOMEvent)
 
+DOMCI_DATA(OrientationEvent, nsDOMOrientationEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMOrientationEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMOrientationEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(OrientationEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMETHODIMP nsDOMOrientationEvent::InitOrientationEvent(const nsAString & eventTypeArg,
                                                           PRBool canBubbleArg,
                                                           PRBool cancelableArg,
--- a/content/events/src/nsDOMPageTransitionEvent.cpp
+++ b/content/events/src/nsDOMPageTransitionEvent.cpp
@@ -34,16 +34,18 @@
  * 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 ***** */
 
 #include "nsDOMPageTransitionEvent.h"
 #include "nsContentUtils.h"
 
+DOMCI_DATA(PageTransitionEvent, nsDOMPageTransitionEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMPageTransitionEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMPageTransitionEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PageTransitionEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMPageTransitionEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMPageTransitionEvent, nsDOMEvent)
 
--- a/content/events/src/nsDOMPopStateEvent.cpp
+++ b/content/events/src/nsDOMPopStateEvent.cpp
@@ -43,16 +43,18 @@ NS_IMPL_RELEASE_INHERITED(nsDOMPopStateE
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsDOMPopStateEvent, nsDOMEvent)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mState)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsDOMPopStateEvent, nsDOMEvent)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mState)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(PopStateEvent, nsDOMPopStateEvent)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMPopStateEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMPopStateEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PopStateEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 nsDOMPopStateEvent::~nsDOMPopStateEvent()
 {
 }
--- a/content/events/src/nsDOMPopupBlockedEvent.cpp
+++ b/content/events/src/nsDOMPopupBlockedEvent.cpp
@@ -39,16 +39,18 @@
 
 #include "nsDOMPopupBlockedEvent.h"
 #include "nsIURI.h"
 #include "nsContentUtils.h"
 
 NS_IMPL_ADDREF_INHERITED(nsDOMPopupBlockedEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMPopupBlockedEvent, nsDOMEvent)
 
+DOMCI_DATA(PopupBlockedEvent, nsDOMPopupBlockedEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMPopupBlockedEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMPopupBlockedEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PopupBlockedEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMETHODIMP
 nsDOMPopupBlockedEvent::InitPopupBlockedEvent(const nsAString & aTypeArg,
                             PRBool aCanBubbleArg, PRBool aCancelableArg,
--- a/content/events/src/nsDOMProgressEvent.cpp
+++ b/content/events/src/nsDOMProgressEvent.cpp
@@ -35,16 +35,18 @@
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsDOMProgressEvent.h"
 #include "nsContentUtils.h"
 
 
+DOMCI_DATA(ProgressEvent, nsDOMProgressEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMProgressEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMProgressEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ProgressEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMProgressEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMProgressEvent, nsDOMEvent)
 
--- a/content/events/src/nsDOMScrollAreaEvent.cpp
+++ b/content/events/src/nsDOMScrollAreaEvent.cpp
@@ -54,16 +54,18 @@ nsDOMScrollAreaEvent::~nsDOMScrollAreaEv
       mEvent = nsnull;
     }
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsDOMScrollAreaEvent, nsDOMUIEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMScrollAreaEvent, nsDOMUIEvent)
 
+DOMCI_DATA(ScrollAreaEvent, nsDOMScrollAreaEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMScrollAreaEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMScrollAreaEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ScrollAreaEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMUIEvent)
 
 
 NS_IMETHODIMP
 nsDOMScrollAreaEvent::GetX(float *aX)
--- a/content/events/src/nsDOMSimpleGestureEvent.cpp
+++ b/content/events/src/nsDOMSimpleGestureEvent.cpp
@@ -61,16 +61,18 @@ nsDOMSimpleGestureEvent::~nsDOMSimpleGes
     delete static_cast<nsSimpleGestureEvent*>(mEvent);
     mEvent = nsnull;
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsDOMSimpleGestureEvent, nsDOMUIEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMSimpleGestureEvent, nsDOMUIEvent)
 
+DOMCI_DATA(SimpleGestureEvent, nsDOMSimpleGestureEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMSimpleGestureEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSimpleGestureEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SimpleGestureEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMMouseEvent)
 
 /* readonly attribute unsigned long direction; */
 NS_IMETHODIMP
 nsDOMSimpleGestureEvent::GetDirection(PRUint32 *aDirection)
--- a/content/events/src/nsDOMTransitionEvent.cpp
+++ b/content/events/src/nsDOMTransitionEvent.cpp
@@ -57,16 +57,18 @@ nsDOMTransitionEvent::nsDOMTransitionEve
 nsDOMTransitionEvent::~nsDOMTransitionEvent()
 {
   if (mEventIsInternal) {
     delete TransitionEvent();
     mEvent = nsnull;
   }
 }
 
+DOMCI_DATA(TransitionEvent, nsDOMTransitionEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMTransitionEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMTransitionEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(TransitionEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMTransitionEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMTransitionEvent, nsDOMEvent)
 
--- a/content/events/src/nsDOMUIEvent.cpp
+++ b/content/events/src/nsDOMUIEvent.cpp
@@ -109,16 +109,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsDOMUIEvent, nsDOMEvent)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mView)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsDOMUIEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMUIEvent, nsDOMEvent)
 
+DOMCI_DATA(UIEvent, nsDOMUIEvent)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMUIEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMUIEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSUIEvent)
   NS_INTERFACE_MAP_ENTRY(nsIPrivateCompositionEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(UIEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 nsIntPoint
--- a/content/events/src/nsDOMXULCommandEvent.cpp
+++ b/content/events/src/nsDOMXULCommandEvent.cpp
@@ -63,16 +63,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_IN
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mSourceEvent)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsDOMXULCommandEvent,
                                                   nsDOMUIEvent)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSourceEvent)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(XULCommandEvent, nsDOMXULCommandEvent)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMXULCommandEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMXULCommandEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XULCommandEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMUIEvent)
 
 NS_IMETHODIMP
 nsDOMXULCommandEvent::GetAltKey(PRBool* aIsDown)
 {
--- a/content/events/src/nsEventListenerService.cpp
+++ b/content/events/src/nsEventListenerService.cpp
@@ -52,16 +52,18 @@
 #include "nsEventDispatcher.h"
 #include "nsIJSEventListener.h"
 #ifdef MOZ_JSDEBUGGER
 #include "jsdIDebuggerService.h"
 #endif
 
 NS_IMPL_CYCLE_COLLECTION_1(nsEventListenerInfo, mListener)
 
+DOMCI_DATA(EventListenerInfo, nsEventListenerInfo)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsEventListenerInfo)
   NS_INTERFACE_MAP_ENTRY(nsIEventListenerInfo)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(EventListenerInfo)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsEventListenerInfo)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsEventListenerInfo)
--- a/content/events/src/nsPaintRequest.cpp
+++ b/content/events/src/nsPaintRequest.cpp
@@ -37,16 +37,18 @@
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsPaintRequest.h"
 
 #include "nsDOMClassInfoID.h"
 #include "nsClientRect.h"
 #include "nsIFrame.h"
 
+DOMCI_DATA(PaintRequest, nsPaintRequest)
+
 NS_INTERFACE_TABLE_HEAD(nsPaintRequest)
   NS_INTERFACE_TABLE1(nsPaintRequest, nsIDOMPaintRequest)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PaintRequest)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsPaintRequest)
 NS_IMPL_RELEASE(nsPaintRequest)
@@ -74,16 +76,18 @@ nsPaintRequest::GetReason(nsAString& aRe
     break;
   default:
     aResult.Truncate();
     break;
   }
   return NS_OK;
 }
 
+DOMCI_DATA(PaintRequestList, nsPaintRequestList)
+
 NS_INTERFACE_TABLE_HEAD(nsPaintRequestList)
   NS_INTERFACE_TABLE1(nsPaintRequestList, nsIDOMPaintRequestList)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PaintRequestList)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsPaintRequestList)
 NS_IMPL_RELEASE(nsPaintRequestList)
--- a/content/html/content/src/nsClientRect.cpp
+++ b/content/html/content/src/nsClientRect.cpp
@@ -37,16 +37,18 @@
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsClientRect.h"
 #include "nsContentUtils.h"
 #include "nsDOMClassInfoID.h"
 
 #include "nsPresContext.h"
 
+DOMCI_DATA(ClientRect, nsClientRect)
+
 NS_INTERFACE_TABLE_HEAD(nsClientRect)
   NS_INTERFACE_TABLE1(nsClientRect, nsIDOMClientRect)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ClientRect)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsClientRect)
 NS_IMPL_RELEASE(nsClientRect)
@@ -93,16 +95,18 @@ nsClientRect::GetWidth(float* aResult)
 
 NS_IMETHODIMP
 nsClientRect::GetHeight(float* aResult)
 {
   *aResult = mHeight;
   return NS_OK;
 }
 
+DOMCI_DATA(ClientRectList, nsClientRectList)
+
 NS_INTERFACE_TABLE_HEAD(nsClientRectList)
   NS_INTERFACE_TABLE1(nsClientRectList, nsIDOMClientRectList)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ClientRectList)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsClientRectList)
 NS_IMPL_RELEASE(nsClientRectList)
--- a/content/html/content/src/nsHTMLAnchorElement.cpp
+++ b/content/html/content/src/nsHTMLAnchorElement.cpp
@@ -145,16 +145,18 @@ nsHTMLAnchorElement::~nsHTMLAnchorElemen
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLAnchorElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLAnchorElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLAnchorElement, nsHTMLAnchorElement)
+
 // QueryInterface implementation for nsHTMLAnchorElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLAnchorElement)
   NS_HTML_CONTENT_INTERFACE_TABLE5(nsHTMLAnchorElement,
                                    nsIDOMHTMLAnchorElement,
                                    nsIDOMNSHTMLAnchorElement,
                                    nsIDOMNSHTMLAnchorElement2,
                                    nsILink,
                                    Link)
--- a/content/html/content/src/nsHTMLAreaElement.cpp
+++ b/content/html/content/src/nsHTMLAreaElement.cpp
@@ -130,16 +130,18 @@ nsHTMLAreaElement::nsHTMLAreaElement(nsI
 nsHTMLAreaElement::~nsHTMLAreaElement()
 {
 }
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLAreaElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLAreaElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLAreaElement, nsHTMLAreaElement)
+
 // QueryInterface implementation for nsHTMLAreaElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLAreaElement)
   NS_HTML_CONTENT_INTERFACE_TABLE5(nsHTMLAreaElement,
                                    nsIDOMHTMLAreaElement,
                                    nsIDOMNSHTMLAreaElement,
                                    nsIDOMNSHTMLAreaElement2,
                                    nsILink,
                                    Link)
--- a/content/html/content/src/nsHTMLAudioElement.cpp
+++ b/content/html/content/src/nsHTMLAudioElement.cpp
@@ -89,16 +89,18 @@ NS_NewHTMLAudioElement(nsINodeInfo *aNod
   }
 
   return new nsHTMLAudioElement(nodeInfo, aFromParser);
 }
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLAudioElement, nsHTMLMediaElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLAudioElement, nsHTMLMediaElement)
 
+DOMCI_DATA(HTMLAudioElement, nsHTMLAudioElement)
+
 NS_INTERFACE_TABLE_HEAD(nsHTMLAudioElement)
 NS_HTML_CONTENT_INTERFACE_TABLE3(nsHTMLAudioElement, nsIDOMHTMLMediaElement,
                                  nsIDOMHTMLAudioElement, nsIJSNativeInitializer)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLAudioElement,
                                                nsHTMLMediaElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLAudioElement)
 
 NS_IMPL_ELEMENT_CLONE(nsHTMLAudioElement)
--- a/content/html/content/src/nsHTMLBRElement.cpp
+++ b/content/html/content/src/nsHTMLBRElement.cpp
@@ -86,16 +86,18 @@ nsHTMLBRElement::nsHTMLBRElement(nsINode
 nsHTMLBRElement::~nsHTMLBRElement()
 {
 }
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLBRElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLBRElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLBRElement, nsHTMLBRElement)
+
 // QueryInterface implementation for nsHTMLBRElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLBRElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLBRElement, nsIDOMHTMLBRElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLBRElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLBRElement)
 
 
--- a/content/html/content/src/nsHTMLBodyElement.cpp
+++ b/content/html/content/src/nsHTMLBodyElement.cpp
@@ -291,16 +291,18 @@ nsHTMLBodyElement::~nsHTMLBodyElement()
     NS_RELEASE(mContentStyleRule);
   }
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLBodyElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLBodyElement, nsGenericElement) 
 
+DOMCI_DATA(HTMLBodyElement, nsHTMLBodyElement)
+
 // QueryInterface implementation for nsHTMLBodyElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLBodyElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLBodyElement, nsIDOMHTMLBodyElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLBodyElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLBodyElement)
 
 NS_IMPL_ELEMENT_CLONE(nsHTMLBodyElement)
--- a/content/html/content/src/nsHTMLButtonElement.cpp
+++ b/content/html/content/src/nsHTMLButtonElement.cpp
@@ -156,16 +156,18 @@ nsHTMLButtonElement::~nsHTMLButtonElemen
 }
 
 // nsISupports
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLButtonElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLButtonElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLButtonElement, nsHTMLButtonElement)
+
 // QueryInterface implementation for nsHTMLButtonElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLButtonElement)
   NS_HTML_CONTENT_INTERFACE_TABLE2(nsHTMLButtonElement,
                                    nsIDOMHTMLButtonElement,
                                    nsIDOMNSHTMLButtonElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLButtonElement,
                                                nsGenericHTMLFormElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLButtonElement)
--- a/content/html/content/src/nsHTMLCanvasElement.cpp
+++ b/content/html/content/src/nsHTMLCanvasElement.cpp
@@ -156,16 +156,18 @@ nsHTMLCanvasElement::~nsHTMLCanvasElemen
     internalctx->SetCanvasElement(nsnull);
     mCurrentContext = nsnull;
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLCanvasElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLCanvasElement, nsGenericElement)
 
+DOMCI_DATA(HTMLCanvasElement, nsHTMLCanvasElement)
+
 NS_INTERFACE_TABLE_HEAD(nsHTMLCanvasElement)
   NS_HTML_CONTENT_INTERFACE_TABLE2(nsHTMLCanvasElement,
                                    nsIDOMHTMLCanvasElement,
                                    nsICanvasElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLCanvasElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLCanvasElement)
 
--- a/content/html/content/src/nsHTMLDelElement.cpp
+++ b/content/html/content/src/nsHTMLDelElement.cpp
@@ -78,16 +78,18 @@ nsHTMLModElement::nsHTMLModElement(nsINo
 nsHTMLModElement::~nsHTMLModElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLModElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLModElement, nsGenericElement)
 
+DOMCI_DATA(HTMLDelElement, nsHTMLModElement)
+DOMCI_DATA(HTMLInsElement, nsHTMLModElement)
 
 // QueryInterface implementation for nsHTMLModElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLModElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLModElement, nsIDOMHTMLModElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLModElement,
                                                nsGenericHTMLElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO_IF_TAG(HTMLDelElement, del)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO_IF_TAG(HTMLInsElement, ins)
--- a/content/html/content/src/nsHTMLDivElement.cpp
+++ b/content/html/content/src/nsHTMLDivElement.cpp
@@ -87,16 +87,18 @@ nsHTMLDivElement::~nsHTMLDivElement()
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLDivElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLDivElement, nsGenericElement) 
 
 
 
+DOMCI_DATA(HTMLDivElement, nsHTMLDivElement)
+
 // QueryInterface implementation for nsHTMLDivElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLDivElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLDivElement, nsIDOMHTMLDivElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLDivElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLDivElement)
 
 NS_IMPL_ELEMENT_CLONE(nsHTMLDivElement)
--- a/content/html/content/src/nsHTMLFieldSetElement.cpp
+++ b/content/html/content/src/nsHTMLFieldSetElement.cpp
@@ -90,16 +90,18 @@ nsHTMLFieldSetElement::~nsHTMLFieldSetEl
 }
 
 // nsISupports
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLFieldSetElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLFieldSetElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLFieldSetElement, nsHTMLFieldSetElement)
+
 // QueryInterface implementation for nsHTMLFieldSetElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLFieldSetElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLFieldSetElement,
                                    nsIDOMHTMLFieldSetElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLFieldSetElement,
                                                nsGenericHTMLFormElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLFieldSetElement)
 
--- a/content/html/content/src/nsHTMLFontElement.cpp
+++ b/content/html/content/src/nsHTMLFontElement.cpp
@@ -90,16 +90,18 @@ nsHTMLFontElement::nsHTMLFontElement(nsI
 nsHTMLFontElement::~nsHTMLFontElement()
 {
 }
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLFontElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLFontElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLFontElement, nsHTMLFontElement)
+
 // QueryInterface implementation for nsHTMLFontElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLFontElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLFontElement, nsIDOMHTMLFontElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLFontElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLFontElement)
 
 
--- a/content/html/content/src/nsHTMLFormElement.cpp
+++ b/content/html/content/src/nsHTMLFormElement.cpp
@@ -296,16 +296,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
                                                        nsIDOMHTMLCollection)
   tmp->mSelectedRadioButtons.EnumerateRead(ElementTraverser, &cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLFormElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLFormElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLFormElement, nsHTMLFormElement)
+
 // QueryInterface implementation for nsHTMLFormElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLFormElement)
   NS_HTML_CONTENT_INTERFACE_TABLE5(nsHTMLFormElement,
                                    nsIDOMHTMLFormElement,
                                    nsIDOMNSHTMLFormElement,
                                    nsIForm,
                                    nsIWebProgressListener,
                                    nsIRadioGroupContainer)
@@ -1870,16 +1872,18 @@ ControlTraverser(const nsAString& key, n
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsFormControlList)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsFormControlList)
   tmp->Clear();
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsFormControlList)
   tmp->mNameLookupTable.EnumerateRead(ControlTraverser, &cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(HTMLCollection, nsFormControlList)
+
 // XPConnect interface list for nsFormControlList
 NS_INTERFACE_TABLE_HEAD(nsFormControlList)
   NS_INTERFACE_TABLE2(nsFormControlList,
                       nsIHTMLCollection,
                       nsIDOMHTMLCollection)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(nsFormControlList)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLCollection)
 NS_INTERFACE_MAP_END
--- a/content/html/content/src/nsHTMLFrameElement.cpp
+++ b/content/html/content/src/nsHTMLFrameElement.cpp
@@ -88,16 +88,18 @@ nsHTMLFrameElement::~nsHTMLFrameElement(
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLFrameElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLFrameElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLFrameElement, nsHTMLFrameElement)
+
 // QueryInterface implementation for nsHTMLFrameElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLFrameElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLFrameElement, nsIDOMHTMLFrameElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLFrameElement,
                                                nsGenericHTMLFrameElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLFrameElement)
 
 
--- a/content/html/content/src/nsHTMLFrameSetElement.cpp
+++ b/content/html/content/src/nsHTMLFrameSetElement.cpp
@@ -132,16 +132,18 @@ nsHTMLFrameSetElement::~nsHTMLFrameSetEl
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLFrameSetElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLFrameSetElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLFrameSetElement, nsHTMLFrameSetElement)
+
 // QueryInterface implementation for nsHTMLFrameSetElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLFrameSetElement)
   NS_HTML_CONTENT_INTERFACE_TABLE2(nsHTMLFrameSetElement,
                                    nsIDOMHTMLFrameSetElement,
                                    nsIFrameSetElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLFrameSetElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLFrameSetElement)
--- a/content/html/content/src/nsHTMLHRElement.cpp
+++ b/content/html/content/src/nsHTMLHRElement.cpp
@@ -92,16 +92,18 @@ nsHTMLHRElement::~nsHTMLHRElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLHRElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLHRElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLHRElement, nsHTMLHRElement)
+
 // QueryInterface implementation for nsHTMLHRElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLHRElement)
   NS_HTML_CONTENT_INTERFACE_TABLE2(nsHTMLHRElement,
                                    nsIDOMHTMLHRElement,
                                    nsIDOMNSHTMLHRElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLHRElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLHRElement)
--- a/content/html/content/src/nsHTMLHeadElement.cpp
+++ b/content/html/content/src/nsHTMLHeadElement.cpp
@@ -80,16 +80,18 @@ nsHTMLHeadElement::~nsHTMLHeadElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLHeadElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLHeadElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLHeadElement, nsHTMLHeadElement)
+
 // QueryInterface implementation for nsHTMLHeadElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLHeadElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLHeadElement, nsIDOMHTMLHeadElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLHeadElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLHeadElement)
 
 
--- a/content/html/content/src/nsHTMLHeadingElement.cpp
+++ b/content/html/content/src/nsHTMLHeadingElement.cpp
@@ -88,16 +88,18 @@ nsHTMLHeadingElement::~nsHTMLHeadingElem
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLHeadingElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLHeadingElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLHeadingElement, nsHTMLHeadingElement)
+
 // QueryInterface implementation for nsHTMLHeadingElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLHeadingElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLHeadingElement,
                                    nsIDOMHTMLHeadingElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLHeadingElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLHeadingElement)
 
--- a/content/html/content/src/nsHTMLHtmlElement.cpp
+++ b/content/html/content/src/nsHTMLHtmlElement.cpp
@@ -82,16 +82,18 @@ nsHTMLHtmlElement::~nsHTMLHtmlElement()
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLHtmlElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLHtmlElement, nsGenericElement) 
 
 
 
+DOMCI_DATA(HTMLHtmlElement, nsHTMLHtmlElement)
+
 // QueryInterface implementation for nsHTMLHtmlElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLHtmlElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLHtmlElement, nsIDOMHTMLHtmlElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLHtmlElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLHtmlElement)
 
 
--- a/content/html/content/src/nsHTMLIFrameElement.cpp
+++ b/content/html/content/src/nsHTMLIFrameElement.cpp
@@ -103,16 +103,18 @@ nsHTMLIFrameElement::nsHTMLIFrameElement
 nsHTMLIFrameElement::~nsHTMLIFrameElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLIFrameElement,nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLIFrameElement,nsGenericElement)
 
+DOMCI_DATA(HTMLIFrameElement, nsHTMLIFrameElement)
+
 // QueryInterface implementation for nsHTMLIFrameElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLIFrameElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_BEGIN(nsHTMLIFrameElement)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLIFrameElement, nsIDOMHTMLIFrameElement)
 #ifdef MOZ_SVG
     NS_INTERFACE_TABLE_ENTRY(nsHTMLIFrameElement, nsIDOMGetSVGDocument)
 #endif
   NS_OFFSET_AND_INTERFACE_TABLE_END
--- a/content/html/content/src/nsHTMLImageElement.cpp
+++ b/content/html/content/src/nsHTMLImageElement.cpp
@@ -188,16 +188,18 @@ nsHTMLImageElement::~nsHTMLImageElement(
   DestroyImageLoadingContent();
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLImageElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLImageElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLImageElement, nsHTMLImageElement)
+
 // QueryInterface implementation for nsHTMLImageElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLImageElement)
   NS_HTML_CONTENT_INTERFACE_TABLE6(nsHTMLImageElement,
                                    nsIDOMHTMLImageElement,
                                    nsIDOMNSHTMLImageElement,
                                    nsIJSNativeInitializer,
                                    imgIDecoderObserver,
                                    nsIImageLoadingContent,
--- a/content/html/content/src/nsHTMLInputElement.cpp
+++ b/content/html/content/src/nsHTMLInputElement.cpp
@@ -493,16 +493,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
                                                   nsGenericHTMLFormElement)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mControllers)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLInputElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLInputElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLInputElement, nsHTMLInputElement)
+
 // QueryInterface implementation for nsHTMLInputElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLInputElement)
   NS_HTML_CONTENT_INTERFACE_TABLE10(nsHTMLInputElement,
                                     nsIDOMHTMLInputElement,
                                     nsIDOMNSHTMLInputElement,
                                     nsITextControlElement,
                                     nsIFileControlElement,
                                     nsIRadioControlElement,
--- a/content/html/content/src/nsHTMLLIElement.cpp
+++ b/content/html/content/src/nsHTMLLIElement.cpp
@@ -87,16 +87,18 @@ nsHTMLLIElement::~nsHTMLLIElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLLIElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLLIElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLLIElement, nsHTMLLIElement)
+
 // QueryInterface implementation for nsHTMLLIElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLLIElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLLIElement, nsIDOMHTMLLIElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLLIElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLLIElement)
 
 
--- a/content/html/content/src/nsHTMLLabelElement.cpp
+++ b/content/html/content/src/nsHTMLLabelElement.cpp
@@ -132,16 +132,18 @@ nsHTMLLabelElement::~nsHTMLLabelElement(
 
 // nsISupports 
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLLabelElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLLabelElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLLabelElement, nsHTMLLabelElement)
+
 // QueryInterface implementation for nsHTMLLabelElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLLabelElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLLabelElement, nsIDOMHTMLLabelElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLLabelElement,
                                                nsGenericHTMLFormElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLLabelElement)
 
 
--- a/content/html/content/src/nsHTMLLegendElement.cpp
+++ b/content/html/content/src/nsHTMLLegendElement.cpp
@@ -122,16 +122,18 @@ nsHTMLLegendElement::~nsHTMLLegendElemen
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLLegendElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLLegendElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLLegendElement, nsHTMLLegendElement)
+
 // QueryInterface implementation for nsHTMLLegendElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLLegendElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLLegendElement, nsIDOMHTMLLegendElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLLegendElement,
                                                nsGenericHTMLFormElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLLegendElement)
 
 
--- a/content/html/content/src/nsHTMLLinkElement.cpp
+++ b/content/html/content/src/nsHTMLLinkElement.cpp
@@ -141,16 +141,18 @@ nsHTMLLinkElement::~nsHTMLLinkElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLLinkElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLLinkElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLLinkElement, nsHTMLLinkElement)
+
 // QueryInterface implementation for nsHTMLLinkElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLLinkElement)
   NS_HTML_CONTENT_INTERFACE_TABLE5(nsHTMLLinkElement,
                                    nsIDOMHTMLLinkElement,
                                    nsIDOMLinkStyle,
                                    nsILink,
                                    nsIStyleSheetLinkingElement,
                                    Link)
--- a/content/html/content/src/nsHTMLMapElement.cpp
+++ b/content/html/content/src/nsHTMLMapElement.cpp
@@ -96,16 +96,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mAreas,
                                                        nsIDOMNodeList)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLMapElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLMapElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLMapElement, nsHTMLMapElement)
+
 // QueryInterface implementation for nsHTMLMapElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLMapElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLMapElement, nsIDOMHTMLMapElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLMapElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLMapElement)
 
 
--- a/content/html/content/src/nsHTMLMediaError.cpp
+++ b/content/html/content/src/nsHTMLMediaError.cpp
@@ -36,16 +36,18 @@
  *
  * ***** END LICENSE BLOCK ***** */
 #include "nsHTMLMediaError.h"
 #include "nsContentUtils.h"
 
 NS_IMPL_ADDREF(nsHTMLMediaError)
 NS_IMPL_RELEASE(nsHTMLMediaError)
 
+DOMCI_DATA(HTMLMediaError, nsHTMLMediaError)
+
 NS_INTERFACE_MAP_BEGIN(nsHTMLMediaError)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_INTERFACE_MAP_ENTRY(nsIDOMHTMLMediaError)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLMediaError)
 NS_INTERFACE_MAP_END
 
 nsHTMLMediaError::nsHTMLMediaError(PRUint16 aCode) :
   mCode(aCode)
--- a/content/html/content/src/nsHTMLMetaElement.cpp
+++ b/content/html/content/src/nsHTMLMetaElement.cpp
@@ -80,16 +80,17 @@ nsHTMLMetaElement::~nsHTMLMetaElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLMetaElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLMetaElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLMetaElement, nsHTMLMetaElement)
 
 // QueryInterface implementation for nsHTMLMetaElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLMetaElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLMetaElement, nsIDOMHTMLMetaElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLMetaElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLMetaElement)
 
--- a/content/html/content/src/nsHTMLOListElement.cpp
+++ b/content/html/content/src/nsHTMLOListElement.cpp
@@ -97,16 +97,20 @@ nsHTMLSharedListElement::~nsHTMLSharedLi
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLSharedListElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLSharedListElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLOListElement, nsHTMLSharedListElement)
+DOMCI_DATA(HTMLDListElement, nsHTMLSharedListElement)
+DOMCI_DATA(HTMLUListElement, nsHTMLSharedListElement)
+
 // QueryInterface implementation for nsHTMLSharedListElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLSharedListElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_AMBIGUOUS_BEGIN(nsHTMLSharedListElement,
                                                   nsIDOMHTMLOListElement)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE_AMBIGUOUS(nsHTMLSharedListElement,
                                                          nsGenericHTMLElement,
                                                          nsIDOMHTMLOListElement)
--- a/content/html/content/src/nsHTMLObjectElement.cpp
+++ b/content/html/content/src/nsHTMLObjectElement.cpp
@@ -180,16 +180,18 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(nsHTMLObj
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsHTMLObjectElement,
                                                   nsGenericHTMLFormElement)
   tmp->Traverse(cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLObjectElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLObjectElement, nsGenericElement) 
 
+DOMCI_DATA(HTMLObjectElement, nsHTMLObjectElement)
+
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLObjectElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_BEGIN(nsHTMLObjectElement)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLObjectElement, nsIDOMHTMLObjectElement)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLObjectElement, imgIDecoderObserver)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLObjectElement, nsIRequestObserver)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLObjectElement, nsIStreamListener)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLObjectElement, nsIFrameLoaderOwner)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLObjectElement, nsIObjectLoadingContent)
--- a/content/html/content/src/nsHTMLOptGroupElement.cpp
+++ b/content/html/content/src/nsHTMLOptGroupElement.cpp
@@ -109,16 +109,18 @@ nsHTMLOptGroupElement::~nsHTMLOptGroupEl
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLOptGroupElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLOptGroupElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLOptGroupElement, nsHTMLOptGroupElement)
+
 // QueryInterface implementation for nsHTMLOptGroupElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLOptGroupElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLOptGroupElement,
                                    nsIDOMHTMLOptGroupElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLOptGroupElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLOptGroupElement)
 
--- a/content/html/content/src/nsHTMLOptionElement.cpp
+++ b/content/html/content/src/nsHTMLOptionElement.cpp
@@ -175,16 +175,18 @@ nsHTMLOptionElement::~nsHTMLOptionElemen
 
 // ISupports
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLOptionElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLOptionElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLOptionElement, nsHTMLOptionElement)
+
 // QueryInterface implementation for nsHTMLOptionElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLOptionElement)
   NS_HTML_CONTENT_INTERFACE_TABLE4(nsHTMLOptionElement,
                                    nsIDOMHTMLOptionElement,
                                    nsIDOMNSHTMLOptionElement,
                                    nsIJSNativeInitializer,
                                    nsIOptionElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLOptionElement,
--- a/content/html/content/src/nsHTMLParagraphElement.cpp
+++ b/content/html/content/src/nsHTMLParagraphElement.cpp
@@ -90,16 +90,17 @@ nsHTMLParagraphElement::nsHTMLParagraphE
 nsHTMLParagraphElement::~nsHTMLParagraphElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLParagraphElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLParagraphElement, nsGenericElement)
 
+DOMCI_DATA(HTMLParagraphElement, nsHTMLParagraphElement)
 
 // QueryInterface implementation for nsHTMLParagraphElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLParagraphElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLParagraphElement,
                                    nsIDOMHTMLParagraphElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLParagraphElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLParagraphElement)
--- a/content/html/content/src/nsHTMLPreElement.cpp
+++ b/content/html/content/src/nsHTMLPreElement.cpp
@@ -93,16 +93,18 @@ nsHTMLPreElement::~nsHTMLPreElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLPreElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLPreElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLPreElement, nsHTMLPreElement)
+
 // QueryInterface implementation for nsHTMLPreElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLPreElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLPreElement, nsIDOMHTMLPreElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLPreElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLPreElement)
 
 
--- a/content/html/content/src/nsHTMLScriptElement.cpp
+++ b/content/html/content/src/nsHTMLScriptElement.cpp
@@ -372,16 +372,18 @@ nsHTMLScriptElement::nsHTMLScriptElement
 nsHTMLScriptElement::~nsHTMLScriptElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLScriptElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLScriptElement, nsGenericElement)
 
+DOMCI_DATA(HTMLScriptElement, nsHTMLScriptElement)
+
 // QueryInterface implementation for nsHTMLScriptElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLScriptElement)
   NS_HTML_CONTENT_INTERFACE_TABLE5(nsHTMLScriptElement,
                                    nsIDOMHTMLScriptElement,
                                    nsIScriptLoaderObserver,
                                    nsIScriptElement,
                                    nsIDOMNSHTMLScriptElement,
                                    nsIMutationObserver)
--- a/content/html/content/src/nsHTMLSelectElement.cpp
+++ b/content/html/content/src/nsHTMLSelectElement.cpp
@@ -168,16 +168,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mOptions,
                                                        nsIDOMHTMLCollection)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLSelectElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLSelectElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLSelectElement, nsHTMLSelectElement)
+
 // QueryInterface implementation for nsHTMLSelectElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLSelectElement)
   NS_HTML_CONTENT_INTERFACE_TABLE3(nsHTMLSelectElement,
                                    nsIDOMHTMLSelectElement,
                                    nsIDOMNSHTMLSelectElement,
                                    nsISelectElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLSelectElement,
                                                nsGenericHTMLFormElement)
@@ -1803,16 +1805,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ns
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMARRAY(mElements)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsHTMLOptionCollection)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMARRAY(mElements)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 // nsISupports
 
+DOMCI_DATA(HTMLOptionsCollection, nsHTMLOptionCollection)
+
 // QueryInterface implementation for nsHTMLOptionCollection
 NS_INTERFACE_TABLE_HEAD(nsHTMLOptionCollection)
   NS_INTERFACE_TABLE4(nsHTMLOptionCollection,
                       nsIHTMLCollection,
                       nsIDOMNSHTMLOptionCollection,
                       nsIDOMHTMLOptionsCollection,
                       nsIDOMHTMLCollection)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(nsHTMLOptionCollection)
--- a/content/html/content/src/nsHTMLSharedElement.cpp
+++ b/content/html/content/src/nsHTMLSharedElement.cpp
@@ -141,16 +141,26 @@ nsHTMLSharedElement::~nsHTMLSharedElemen
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLSharedElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLSharedElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLParamElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLWBRElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLIsIndexElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLBaseElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLSpacerElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLDirectoryElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLMenuElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLQuoteElement, nsHTMLSharedElement)
+DOMCI_DATA(HTMLBaseFontElement, nsHTMLSharedElement)
+
 // QueryInterface implementation for nsHTMLSharedElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLSharedElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_AMBIGUOUS_BEGIN(nsHTMLSharedElement,
                                                   nsIDOMHTMLParamElement)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE_AMBIGUOUS(nsHTMLSharedElement,
                                                          nsGenericHTMLElement,
                                                          nsIDOMHTMLParamElement)
--- a/content/html/content/src/nsHTMLSharedObjectElement.cpp
+++ b/content/html/content/src/nsHTMLSharedObjectElement.cpp
@@ -212,16 +212,19 @@ NS_IMPL_CYCLE_COLLECTION_CLASS(nsHTMLSha
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsHTMLSharedObjectElement,
                                                   nsGenericHTMLElement)
   tmp->Traverse(cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLSharedObjectElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLSharedObjectElement, nsGenericElement) 
 
+DOMCI_DATA(HTMLAppletElement, nsHTMLSharedObjectElement)
+DOMCI_DATA(HTMLEmbedElement, nsHTMLSharedObjectElement)
+
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLSharedObjectElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_AMBIGUOUS_BEGIN(nsHTMLSharedObjectElement,
                                                   nsIDOMHTMLAppletElement)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLSharedObjectElement, nsIRequestObserver)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLSharedObjectElement, nsIStreamListener)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLSharedObjectElement, nsIFrameLoaderOwner)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLSharedObjectElement, imgIContainerObserver)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLSharedObjectElement, nsIObjectLoadingContent)
--- a/content/html/content/src/nsHTMLSourceElement.cpp
+++ b/content/html/content/src/nsHTMLSourceElement.cpp
@@ -95,16 +95,18 @@ nsHTMLSourceElement::~nsHTMLSourceElemen
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLSourceElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLSourceElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLSourceElement, nsHTMLSourceElement)
+
 // QueryInterface implementation for nsHTMLSourceElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLSourceElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLSourceElement, nsIDOMHTMLSourceElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLSourceElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLSourceElement)
 
 
--- a/content/html/content/src/nsHTMLSpanElement.cpp
+++ b/content/html/content/src/nsHTMLSpanElement.cpp
@@ -81,16 +81,18 @@ nsHTMLSpanElement::~nsHTMLSpanElement()
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLSpanElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLSpanElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLSpanElement, nsHTMLSpanElement)
+
 // QueryInterface implementation for nsHTMLSpanElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLSpanElement)
   NS_HTML_CONTENT_INTERFACE_TABLE0(nsHTMLSpanElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLSpanElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLSpanElement)
 
 
@@ -126,16 +128,18 @@ class nsHTMLUnknownElement : public nsHT
 {
 public:
   nsHTMLUnknownElement(nsINodeInfo *aNodeInfo);
 
   NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
   nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 };
 
+DOMCI_DATA(HTMLUnknownElement, nsHTMLUnknownElement)
+
 NS_INTERFACE_MAP_BEGIN(nsHTMLUnknownElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(HTMLUnknownElement)
 NS_INTERFACE_MAP_END_INHERITING(nsHTMLSpanElement)
 
 nsHTMLUnknownElement::nsHTMLUnknownElement(nsINodeInfo *aNodeInfo)
   : nsHTMLSpanElement(aNodeInfo)
 {
 }
--- a/content/html/content/src/nsHTMLStyleElement.cpp
+++ b/content/html/content/src/nsHTMLStyleElement.cpp
@@ -130,16 +130,18 @@ nsHTMLStyleElement::~nsHTMLStyleElement(
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLStyleElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLStyleElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLStyleElement, nsHTMLStyleElement)
+
 // QueryInterface implementation for nsHTMLStyleElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLStyleElement)
   NS_HTML_CONTENT_INTERFACE_TABLE4(nsHTMLStyleElement,
                                    nsIDOMHTMLStyleElement,
                                    nsIDOMLinkStyle,
                                    nsIStyleSheetLinkingElement,
                                    nsIMutationObserver)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLStyleElement,
--- a/content/html/content/src/nsHTMLTableCaptionElement.cpp
+++ b/content/html/content/src/nsHTMLTableCaptionElement.cpp
@@ -88,16 +88,18 @@ nsHTMLTableCaptionElement::~nsHTMLTableC
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTableCaptionElement, nsGenericElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLTableCaptionElement, nsGenericElement)
 
 
+DOMCI_DATA(HTMLTableCaptionElement, nsHTMLTableCaptionElement)
+
 // QueryInterface implementation for nsHTMLTableCaptionElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLTableCaptionElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLTableCaptionElement,
                                    nsIDOMHTMLTableCaptionElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLTableCaptionElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLTableCaptionElement)
 
--- a/content/html/content/src/nsHTMLTableCellElement.cpp
+++ b/content/html/content/src/nsHTMLTableCellElement.cpp
@@ -99,16 +99,18 @@ nsHTMLTableCellElement::~nsHTMLTableCell
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTableCellElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLTableCellElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLTableCellElement, nsHTMLTableCellElement)
+
 // QueryInterface implementation for nsHTMLTableCellElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLTableCellElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLTableCellElement,
                                    nsIDOMHTMLTableCellElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLTableCellElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLTableCellElement)
 
--- a/content/html/content/src/nsHTMLTableColElement.cpp
+++ b/content/html/content/src/nsHTMLTableColElement.cpp
@@ -92,16 +92,18 @@ nsHTMLTableColElement::~nsHTMLTableColEl
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTableColElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLTableColElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLTableColElement, nsHTMLTableColElement)
+
 // QueryInterface implementation for nsHTMLTableColElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLTableColElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLTableColElement,
                                    nsIDOMHTMLTableColElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLTableColElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLTableColElement)
 
--- a/content/html/content/src/nsHTMLTableElement.cpp
+++ b/content/html/content/src/nsHTMLTableElement.cpp
@@ -403,16 +403,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
                                                        nsIDOMNodeList)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mRows)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTableElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLTableElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLTableElement, nsHTMLTableElement)
+
 // QueryInterface implementation for nsHTMLTableElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLTableElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLTableElement, nsIDOMHTMLTableElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLTableElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLTableElement)
 
 
--- a/content/html/content/src/nsHTMLTableRowElement.cpp
+++ b/content/html/content/src/nsHTMLTableRowElement.cpp
@@ -103,16 +103,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mCells,
                                                        nsIDOMNodeList)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTableRowElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLTableRowElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLTableRowElement, nsHTMLTableRowElement)
+
 // QueryInterface implementation for nsHTMLTableRowElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLTableRowElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLTableRowElement,
                                    nsIDOMHTMLTableRowElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLTableRowElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLTableRowElement)
 
--- a/content/html/content/src/nsHTMLTableSectionElement.cpp
+++ b/content/html/content/src/nsHTMLTableSectionElement.cpp
@@ -101,16 +101,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mRows,
                                                        nsIDOMNodeList)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTableSectionElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLTableSectionElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLTableSectionElement, nsHTMLTableSectionElement)
+
 // QueryInterface implementation for nsHTMLTableSectionElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLTableSectionElement)
   NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLTableSectionElement,
                                    nsIDOMHTMLTableSectionElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLTableSectionElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLTableSectionElement)
 
--- a/content/html/content/src/nsHTMLTextAreaElement.cpp
+++ b/content/html/content/src/nsHTMLTextAreaElement.cpp
@@ -255,16 +255,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
                                                   nsGenericHTMLFormElement)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mControllers)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTextAreaElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLTextAreaElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLTextAreaElement, nsHTMLTextAreaElement)
+
 // QueryInterface implementation for nsHTMLTextAreaElement
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLTextAreaElement)
   NS_HTML_CONTENT_INTERFACE_TABLE5(nsHTMLTextAreaElement,
                                    nsIDOMHTMLTextAreaElement,
                                    nsIDOMNSHTMLTextAreaElement,
                                    nsITextControlElement,
                                    nsIDOMNSEditableElement,
                                    nsIMutationObserver)
--- a/content/html/content/src/nsHTMLTitleElement.cpp
+++ b/content/html/content/src/nsHTMLTitleElement.cpp
@@ -103,16 +103,18 @@ nsHTMLTitleElement::~nsHTMLTitleElement(
 {
 }
 
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLTitleElement, nsGenericElement) 
 NS_IMPL_RELEASE_INHERITED(nsHTMLTitleElement, nsGenericElement) 
 
 
+DOMCI_DATA(HTMLTitleElement, nsHTMLTitleElement)
+
 // QueryInterface implementation for nsHTMLTitleElement
 NS_INTERFACE_TABLE_HEAD(nsHTMLTitleElement)
   NS_HTML_CONTENT_INTERFACE_TABLE2(nsHTMLTitleElement,
                                    nsIDOMHTMLTitleElement,
                                    nsIMutationObserver)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLTitleElement,
                                                nsGenericHTMLElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLTitleElement)
--- a/content/html/content/src/nsHTMLVideoElement.cpp
+++ b/content/html/content/src/nsHTMLVideoElement.cpp
@@ -68,16 +68,18 @@
 #include "nsIDOMProgressEvent.h"
 #include "nsHTMLMediaError.h"
 
 NS_IMPL_NS_NEW_HTML_ELEMENT_CHECK_PARSER(Video)
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLVideoElement, nsHTMLMediaElement)
 NS_IMPL_RELEASE_INHERITED(nsHTMLVideoElement, nsHTMLMediaElement)
 
+DOMCI_DATA(HTMLVideoElement, nsHTMLVideoElement)
+
 NS_INTERFACE_TABLE_HEAD(nsHTMLVideoElement)
   NS_HTML_CONTENT_INTERFACE_TABLE2(nsHTMLVideoElement, nsIDOMHTMLMediaElement, nsIDOMHTMLVideoElement)
   NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLVideoElement,
                                                nsHTMLMediaElement)
 NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLVideoElement)
 
 NS_IMPL_ELEMENT_CLONE(nsHTMLVideoElement)
 
--- a/content/html/document/src/nsHTMLDocument.cpp
+++ b/content/html/document/src/nsHTMLDocument.cpp
@@ -267,16 +267,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_IN
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mMidasCommandManager)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mFragmentParser)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_ADDREF_INHERITED(nsHTMLDocument, nsDocument)
 NS_IMPL_RELEASE_INHERITED(nsHTMLDocument, nsDocument)
 
 
+DOMCI_DATA(HTMLDocument, nsHTMLDocument)
+
 // QueryInterface implementation for nsHTMLDocument
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsHTMLDocument)
   NS_DOCUMENT_INTERFACE_TABLE_BEGIN(nsHTMLDocument)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLDocument, nsIHTMLDocument)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLDocument, nsIDOMHTMLDocument)
     NS_INTERFACE_TABLE_ENTRY(nsHTMLDocument, nsIDOMNSHTMLDocument)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
--- a/content/html/document/src/nsImageDocument.cpp
+++ b/content/html/document/src/nsImageDocument.cpp
@@ -294,16 +294,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsImageDocument, nsMediaDocument)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mImageContent)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_ADDREF_INHERITED(nsImageDocument, nsMediaDocument)
 NS_IMPL_RELEASE_INHERITED(nsImageDocument, nsMediaDocument)
 
+DOMCI_DATA(ImageDocument, nsImageDocument)
+
 NS_INTERFACE_TABLE_HEAD(nsImageDocument)
   NS_HTML_DOCUMENT_INTERFACE_TABLE_BEGIN(nsImageDocument)
     NS_INTERFACE_TABLE_ENTRY(nsImageDocument, nsIImageDocument)
     NS_INTERFACE_TABLE_ENTRY(nsImageDocument, imgIDecoderObserver)
     NS_INTERFACE_TABLE_ENTRY(nsImageDocument, imgIContainerObserver)
     NS_INTERFACE_TABLE_ENTRY(nsImageDocument, nsIDOMEventListener)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
--- a/content/mathml/content/src/nsMathMLElement.cpp
+++ b/content/mathml/content/src/nsMathMLElement.cpp
@@ -50,16 +50,18 @@
 #include "nsIPresShell.h"
 #include "nsPresContext.h"
 #include "nsDOMClassInfoID.h"
 #include "mozAutoDocUpdate.h"
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
+DOMCI_DATA(MathMLElement, nsMathMLElement)
+
 NS_INTERFACE_TABLE_HEAD(nsMathMLElement)
   NS_NODE_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsMathMLElement)
     NS_INTERFACE_TABLE_ENTRY(nsMathMLElement, nsIDOMNode)
     NS_INTERFACE_TABLE_ENTRY(nsMathMLElement, nsIDOMElement)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_ELEMENT_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MathMLElement)
 NS_ELEMENT_INTERFACE_MAP_END
--- a/content/svg/content/src/nsDOMSVGEvent.cpp
+++ b/content/svg/content/src/nsDOMSVGEvent.cpp
@@ -62,16 +62,18 @@ nsDOMSVGEvent::nsDOMSVGEvent(nsPresConte
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF_INHERITED(nsDOMSVGEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMSVGEvent, nsDOMEvent)
 
+DOMCI_DATA(SVGEvent, nsDOMSVGEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMSVGEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 
 ////////////////////////////////////////////////////////////////////////
 // Exported creation functions:
--- a/content/svg/content/src/nsDOMSVGZoomEvent.cpp
+++ b/content/svg/content/src/nsDOMSVGZoomEvent.cpp
@@ -103,16 +103,18 @@ nsDOMSVGZoomEvent::nsDOMSVGZoomEvent(nsP
 
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF_INHERITED(nsDOMSVGZoomEvent, nsDOMUIEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMSVGZoomEvent, nsDOMUIEvent)
 
+DOMCI_DATA(SVGZoomEvent, nsDOMSVGZoomEvent)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMSVGZoomEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGZoomEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGZoomEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMUIEvent)
 
 
 //----------------------------------------------------------------------
 // nsIDOMSVGZoomEvent methods:
--- a/content/svg/content/src/nsSVGAElement.cpp
+++ b/content/svg/content/src/nsSVGAElement.cpp
@@ -55,16 +55,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(A)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGAElement, nsSVGAElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGAElement, nsSVGAElementBase)
 
+DOMCI_DATA(SVGAElement, nsSVGAElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGAElement)
   NS_NODE_INTERFACE_TABLE6(nsSVGAElement,
                            nsIDOMNode,
                            nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGAElement,
                            nsILink,
                            Link)
--- a/content/svg/content/src/nsSVGAngle.cpp
+++ b/content/svg/content/src/nsSVGAngle.cpp
@@ -114,16 +114,19 @@ NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGAng
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGAngle::DOMAnimVal)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGAngle::DOMAnimatedAngle)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGAngle::DOMAnimatedAngle)
 
 NS_IMPL_ADDREF(DOMSVGAngle)
 NS_IMPL_RELEASE(DOMSVGAngle)
 
+DOMCI_DATA(SVGAngle, nsSVGAngle::DOMBaseVal)
+DOMCI_DATA(SVGAnimatedAngle, nsSVGAngle::DOMAnimatedAngle)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGAngle::DOMBaseVal)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAngle)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAngle)
 NS_INTERFACE_MAP_END
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGAngle::DOMAnimVal)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAngle)
--- a/content/svg/content/src/nsSVGAngle.h
+++ b/content/svg/content/src/nsSVGAngle.h
@@ -98,16 +98,17 @@ private:
   
   void SetBaseValueInSpecifiedUnits(float aValue, nsSVGElement *aSVGElement);
   nsresult NewValueSpecifiedUnits(PRUint16 aUnitType, float aValue,
                                   nsSVGElement *aSVGElement);
   nsresult ConvertToSpecifiedUnits(PRUint16 aUnitType, nsSVGElement *aSVGElement);
   nsresult ToDOMBaseVal(nsIDOMSVGAngle **aResult, nsSVGElement* aSVGElement);
   nsresult ToDOMAnimVal(nsIDOMSVGAngle **aResult, nsSVGElement* aSVGElement);
 
+public:
   struct DOMBaseVal : public nsIDOMSVGAngle
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMBaseVal)
 
     DOMBaseVal(nsSVGAngle* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
     
--- a/content/svg/content/src/nsSVGAnimateElement.cpp
+++ b/content/svg/content/src/nsSVGAnimateElement.cpp
@@ -71,16 +71,18 @@ public:
 NS_IMPL_NS_NEW_SVG_ELEMENT(Animate)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGAnimateElement,nsSVGAnimateElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGAnimateElement,nsSVGAnimateElementBase)
 
+DOMCI_DATA(SVGAnimateElement, nsSVGAnimateElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGAnimateElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGAnimateElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGAnimationElement,
                            nsIDOMSVGAnimateElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimateElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGAnimateElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGAnimateTransformElement.cpp
+++ b/content/svg/content/src/nsSVGAnimateTransformElement.cpp
@@ -84,16 +84,18 @@ public:
 NS_IMPL_NS_NEW_SVG_ELEMENT(AnimateTransform)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGAnimateTransformElement,nsSVGAnimateTransformElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGAnimateTransformElement,nsSVGAnimateTransformElementBase)
 
+DOMCI_DATA(SVGAnimateTransformElement, nsSVGAnimateTransformElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGAnimateTransformElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGAnimateTransformElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGAnimationElement,
                            nsIDOMSVGAnimateTransformElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimateTransformElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGAnimateTransformElementBase)
 
--- a/content/svg/content/src/nsSVGAnimatedLengthList.cpp
+++ b/content/svg/content/src/nsSVGAnimatedLengthList.cpp
@@ -109,16 +109,18 @@ nsSVGAnimatedLengthList::Init(nsIDOMSVGL
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGAnimatedLengthList)
 NS_IMPL_RELEASE(nsSVGAnimatedLengthList)
 
+DOMCI_DATA(SVGAnimatedLengthList, nsSVGAnimatedLengthList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGAnimatedLengthList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedLengthList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedLengthList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGAnimatedNumberList.cpp
+++ b/content/svg/content/src/nsSVGAnimatedNumberList.cpp
@@ -109,16 +109,18 @@ nsSVGAnimatedNumberList::Init(nsIDOMSVGN
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGAnimatedNumberList)
 NS_IMPL_RELEASE(nsSVGAnimatedNumberList)
 
+DOMCI_DATA(SVGAnimatedNumberList, nsSVGAnimatedNumberList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGAnimatedNumberList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedNumberList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedNumberList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGAnimatedTransformList.cpp
+++ b/content/svg/content/src/nsSVGAnimatedTransformList.cpp
@@ -62,16 +62,18 @@ nsSVGAnimatedTransformList::Init(nsIDOMS
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGAnimatedTransformList)
 NS_IMPL_RELEASE(nsSVGAnimatedTransformList)
 
+DOMCI_DATA(SVGAnimatedTransformList, nsSVGAnimatedTransformList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGAnimatedTransformList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedTransformList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedTransformList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGBoolean.cpp
+++ b/content/svg/content/src/nsSVGBoolean.cpp
@@ -42,16 +42,18 @@
 
 using namespace mozilla;
 
 NS_SVG_VAL_IMPL_CYCLE_COLLECTION(nsSVGBoolean::DOMAnimatedBoolean, mSVGElement)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGBoolean::DOMAnimatedBoolean)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGBoolean::DOMAnimatedBoolean)
 
+DOMCI_DATA(SVGAnimatedBoolean, nsSVGBoolean::DOMAnimatedBoolean)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGBoolean::DOMAnimatedBoolean)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedBoolean)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedBoolean)
 NS_INTERFACE_MAP_END
 
 /* Implementation */
 
--- a/content/svg/content/src/nsSVGBoolean.h
+++ b/content/svg/content/src/nsSVGBoolean.h
@@ -73,16 +73,17 @@ public:
 
 private:
 
   PRPackedBool mAnimVal;
   PRPackedBool mBaseVal;
   PRPackedBool mIsAnimated;
   PRUint8 mAttrEnum; // element specified tracking for attribute
 
+public:
   struct DOMAnimatedBoolean : public nsIDOMSVGAnimatedBoolean
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedBoolean)
 
     DOMAnimatedBoolean(nsSVGBoolean* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
 
--- a/content/svg/content/src/nsSVGCircleElement.cpp
+++ b/content/svg/content/src/nsSVGCircleElement.cpp
@@ -87,16 +87,18 @@ nsSVGElement::LengthInfo nsSVGCircleElem
 NS_IMPL_NS_NEW_SVG_ELEMENT(Circle)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGCircleElement,nsSVGCircleElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGCircleElement,nsSVGCircleElementBase)
 
+DOMCI_DATA(SVGCircleElement, nsSVGCircleElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGCircleElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGCircleElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGCircleElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGCircleElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGCircleElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGClipPathElement.cpp
+++ b/content/svg/content/src/nsSVGClipPathElement.cpp
@@ -48,16 +48,18 @@ nsSVGElement::EnumInfo nsSVGClipPathElem
 NS_IMPL_NS_NEW_SVG_ELEMENT(ClipPath)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGClipPathElement,nsSVGClipPathElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGClipPathElement,nsSVGClipPathElementBase)
 
+DOMCI_DATA(SVGClipPathElement, nsSVGClipPathElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGClipPathElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGClipPathElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGClipPathElement,
                            nsIDOMSVGUnitTypes)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGClipPathElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGClipPathElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGDefsElement.cpp
+++ b/content/svg/content/src/nsSVGDefsElement.cpp
@@ -74,16 +74,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(Defs)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGDefsElement,nsSVGDefsElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGDefsElement,nsSVGDefsElementBase)
 
+DOMCI_DATA(SVGDefsElement, nsSVGDefsElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGDefsElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGDefsElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGDefsElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGDefsElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGDefsElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGDescElement.cpp
+++ b/content/svg/content/src/nsSVGDescElement.cpp
@@ -68,16 +68,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(Desc)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGDescElement, nsSVGDescElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGDescElement, nsSVGDescElementBase)
 
+DOMCI_DATA(SVGDescElement, nsSVGDescElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGDescElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGDescElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGDescElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGDescElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGDescElementBase)
 
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGEllipseElement.cpp
+++ b/content/svg/content/src/nsSVGEllipseElement.cpp
@@ -89,16 +89,18 @@ nsSVGElement::LengthInfo nsSVGEllipseEle
 NS_IMPL_NS_NEW_SVG_ELEMENT(Ellipse)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGEllipseElement,nsSVGEllipseElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGEllipseElement,nsSVGEllipseElementBase)
 
+DOMCI_DATA(SVGEllipseElement, nsSVGEllipseElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGEllipseElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGEllipseElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGEllipseElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGEllipseElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGEllipseElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGEnum.cpp
+++ b/content/svg/content/src/nsSVGEnum.cpp
@@ -44,16 +44,18 @@
 
 using namespace mozilla;
 
 NS_SVG_VAL_IMPL_CYCLE_COLLECTION(nsSVGEnum::DOMAnimatedEnum, mSVGElement)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGEnum::DOMAnimatedEnum)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGEnum::DOMAnimatedEnum)
 
+DOMCI_DATA(SVGAnimatedEnumeration, nsSVGEnum::DOMAnimatedEnum)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGEnum::DOMAnimatedEnum)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedEnumeration)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedEnumeration)
 NS_INTERFACE_MAP_END
 
 nsSVGEnumMapping *
 nsSVGEnum::GetMapping(nsSVGElement *aSVGElement)
--- a/content/svg/content/src/nsSVGEnum.h
+++ b/content/svg/content/src/nsSVGEnum.h
@@ -83,16 +83,17 @@ public:
 private:
   nsSVGEnumValue mAnimVal;
   nsSVGEnumValue mBaseVal;
   PRUint8 mAttrEnum; // element specified tracking for attribute
   PRPackedBool mIsAnimated;
 
   nsSVGEnumMapping *GetMapping(nsSVGElement *aSVGElement);
 
+public:
   struct DOMAnimatedEnum : public nsIDOMSVGAnimatedEnumeration
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedEnum)
 
     DOMAnimatedEnum(nsSVGEnum* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
 
--- a/content/svg/content/src/nsSVGFilterElement.cpp
+++ b/content/svg/content/src/nsSVGFilterElement.cpp
@@ -73,16 +73,18 @@ nsSVGElement::StringInfo nsSVGFilterElem
 NS_IMPL_NS_NEW_SVG_ELEMENT(Filter)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFilterElement,nsSVGFilterElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFilterElement,nsSVGFilterElementBase)
 
+DOMCI_DATA(SVGFilterElement, nsSVGFilterElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFilterElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFilterElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGFilterElement,
                            nsIDOMSVGURIReference)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFilterElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFilterElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGFilters.cpp
+++ b/content/svg/content/src/nsSVGFilters.cpp
@@ -425,16 +425,18 @@ nsSVGElement::StringInfo nsSVGFEGaussian
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEGaussianBlur)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEGaussianBlurElement,nsSVGFEGaussianBlurElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEGaussianBlurElement,nsSVGFEGaussianBlurElementBase)
 
+DOMCI_DATA(SVGFEGaussianBlurElement, nsSVGFEGaussianBlurElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEGaussianBlurElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEGaussianBlurElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEGaussianBlurElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEGaussianBlurElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEGaussianBlurElementBase)
 
@@ -899,16 +901,18 @@ nsSVGElement::StringInfo nsSVGFEBlendEle
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEBlend)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEBlendElement,nsSVGFEBlendElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEBlendElement,nsSVGFEBlendElementBase)
 
+DOMCI_DATA(SVGFEBlendElement, nsSVGFEBlendElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEBlendElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEBlendElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEBlendElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEBlendElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEBlendElementBase)
 
@@ -1100,16 +1104,18 @@ nsSVGElement::StringInfo nsSVGFEColorMat
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEColorMatrix)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEColorMatrixElement,nsSVGFEColorMatrixElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEColorMatrixElement,nsSVGFEColorMatrixElementBase)
 
+DOMCI_DATA(SVGFEColorMatrixElement, nsSVGFEColorMatrixElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEColorMatrixElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEColorMatrixElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEColorMatrixElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEColorMatrixElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEColorMatrixElementBase)
 
@@ -1438,16 +1444,18 @@ nsSVGElement::StringInfo nsSVGFEComposit
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEComposite)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFECompositeElement,nsSVGFECompositeElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFECompositeElement,nsSVGFECompositeElementBase)
 
+DOMCI_DATA(SVGFECompositeElement, nsSVGFECompositeElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFECompositeElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFECompositeElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFECompositeElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFECompositeElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFECompositeElementBase)
 
@@ -1697,16 +1705,18 @@ nsSVGElement::StringInfo nsSVGFEComponen
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEComponentTransfer)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEComponentTransferElement,nsSVGFEComponentTransferElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEComponentTransferElement,nsSVGFEComponentTransferElementBase)
 
+DOMCI_DATA(SVGFEComponentTransferElement, nsSVGFEComponentTransferElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEComponentTransferElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEComponentTransferElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEComponentTransferElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEComponentTransferElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEComponentTransferElementBase)
 
@@ -2082,16 +2092,18 @@ public:
   NS_FORWARD_NSIDOMELEMENT(nsSVGComponentTransferFunctionElement::)
 
   virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 };
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEFuncRElement,nsSVGComponentTransferFunctionElement)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEFuncRElement,nsSVGComponentTransferFunctionElement)
 
+DOMCI_DATA(SVGFEFuncRElement, nsSVGFEFuncRElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEFuncRElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEFuncRElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGComponentTransferFunctionElement,
                            nsIDOMSVGFEFuncRElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEFuncRElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGComponentTransferFunctionElement)
 
@@ -2123,16 +2135,18 @@ public:
   NS_FORWARD_NSIDOMELEMENT(nsSVGComponentTransferFunctionElement::)
 
   virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 };
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEFuncGElement,nsSVGComponentTransferFunctionElement)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEFuncGElement,nsSVGComponentTransferFunctionElement)
 
+DOMCI_DATA(SVGFEFuncGElement, nsSVGFEFuncGElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEFuncGElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEFuncGElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGComponentTransferFunctionElement,
                            nsIDOMSVGFEFuncGElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEFuncGElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGComponentTransferFunctionElement)
 
@@ -2164,16 +2178,18 @@ public:
   NS_FORWARD_NSIDOMELEMENT(nsSVGComponentTransferFunctionElement::)
 
   virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 };
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEFuncBElement,nsSVGComponentTransferFunctionElement)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEFuncBElement,nsSVGComponentTransferFunctionElement)
 
+DOMCI_DATA(SVGFEFuncBElement, nsSVGFEFuncBElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEFuncBElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEFuncBElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGComponentTransferFunctionElement,
                            nsIDOMSVGFEFuncBElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEFuncBElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGComponentTransferFunctionElement)
 
@@ -2205,16 +2221,18 @@ public:
   NS_FORWARD_NSIDOMELEMENT(nsSVGComponentTransferFunctionElement::)
 
   virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 };
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEFuncAElement,nsSVGComponentTransferFunctionElement)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEFuncAElement,nsSVGComponentTransferFunctionElement)
 
+DOMCI_DATA(SVGFEFuncAElement, nsSVGFEFuncAElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEFuncAElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEFuncAElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGComponentTransferFunctionElement,
                            nsIDOMSVGFEFuncAElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEFuncAElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGComponentTransferFunctionElement)
 
@@ -2317,16 +2335,18 @@ nsSVGElement::StringInfo nsSVGFEMergeEle
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEMerge)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEMergeElement,nsSVGFEMergeElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEMergeElement,nsSVGFEMergeElementBase)
 
+DOMCI_DATA(SVGFEMergeElement, nsSVGFEMergeElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEMergeElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEMergeElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEMergeElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEMergeElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEMergeElementBase)
 
@@ -2387,16 +2407,18 @@ nsSVGElement::StringInfo nsSVGFEMergeNod
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEMergeNode)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEMergeNodeElement,nsSVGFEMergeNodeElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEMergeNodeElement,nsSVGFEMergeNodeElementBase)
 
+DOMCI_DATA(SVGFEMergeNodeElement, nsSVGFEMergeNodeElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEMergeNodeElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGFEMergeNodeElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGFEMergeNodeElement)
    // nsISupports is an ambiguous base of nsSVGFE so we have to work
    // around that
    if ( aIID.Equals(NS_GET_IID(nsSVGFEMergeNodeElement)) )
      foundInterface = static_cast<nsISupports*>(static_cast<void*>(this));
    else
@@ -2500,16 +2522,18 @@ nsSVGElement::StringInfo nsSVGFEOffsetEl
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEOffset)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEOffsetElement,nsSVGFEOffsetElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEOffsetElement,nsSVGFEOffsetElementBase)
 
+DOMCI_DATA(SVGFEOffsetElement, nsSVGFEOffsetElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEOffsetElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEOffsetElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEOffsetElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEOffsetElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEOffsetElementBase)
 
@@ -2688,16 +2712,18 @@ nsSVGElement::StringInfo nsSVGFEFloodEle
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEFlood)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEFloodElement,nsSVGFEFloodElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEFloodElement,nsSVGFEFloodElementBase)
 
+DOMCI_DATA(SVGFEFloodElement, nsSVGFEFloodElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEFloodElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEFloodElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEFloodElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEFloodElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEFloodElementBase)
 
@@ -2827,16 +2853,18 @@ nsSVGElement::StringInfo nsSVGFETileElem
 NS_IMPL_NS_NEW_SVG_ELEMENT(FETile)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFETileElement,nsSVGFETileElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFETileElement,nsSVGFETileElementBase)
 
+DOMCI_DATA(SVGFETileElement, nsSVGFETileElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFETileElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFETileElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFETileElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFETileElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFETileElementBase)
 
@@ -3131,16 +3159,18 @@ nsSVGElement::StringInfo nsSVGFETurbulen
 NS_IMPL_NS_NEW_SVG_ELEMENT(FETurbulence)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFETurbulenceElement,nsSVGFETurbulenceElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFETurbulenceElement,nsSVGFETurbulenceElementBase)
 
+DOMCI_DATA(SVGFETurbulenceElement, nsSVGFETurbulenceElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFETurbulenceElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFETurbulenceElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFETurbulenceElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFETurbulenceElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFETurbulenceElementBase)
 
@@ -3567,16 +3597,18 @@ nsSVGElement::StringInfo nsSVGFEMorpholo
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEMorphology)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEMorphologyElement,nsSVGFEMorphologyElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEMorphologyElement,nsSVGFEMorphologyElementBase)
 
+DOMCI_DATA(SVGFEMorphologyElement, nsSVGFEMorphologyElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEMorphologyElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEMorphologyElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEMorphologyElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEMorphologyElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEMorphologyElementBase)
 
@@ -3921,16 +3953,18 @@ nsSVGElement::StringInfo nsSVGFEConvolve
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEConvolveMatrix)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEConvolveMatrixElement,nsSVGFEConvolveMatrixElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEConvolveMatrixElement,nsSVGFEConvolveMatrixElementBase)
 
+DOMCI_DATA(SVGFEConvolveMatrixElement, nsSVGFEConvolveMatrixElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEConvolveMatrixElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEConvolveMatrixElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEConvolveMatrixElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEConvolveMatrixElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEConvolveMatrixElementBase)
 
@@ -4314,16 +4348,18 @@ nsSVGElement::NumberInfo nsSVGFEDistantL
 };
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEDistantLightElement,nsSVGFEDistantLightElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEDistantLightElement,nsSVGFEDistantLightElementBase)
 
+DOMCI_DATA(SVGFEDistantLightElement, nsSVGFEDistantLightElementBase)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEDistantLightElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGFEDistantLightElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFEDistantLightElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEDistantLightElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEDistantLightElementBase)
 
 //----------------------------------------------------------------------
@@ -4400,16 +4436,18 @@ nsSVGElement::NumberInfo nsSVGFEPointLig
 };
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEPointLightElement,nsSVGFEPointLightElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEPointLightElement,nsSVGFEPointLightElementBase)
 
+DOMCI_DATA(SVGFEPointLightElement, nsSVGFEPointLightElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEPointLightElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGFEPointLightElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFEPointLightElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEPointLightElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEPointLightElementBase)
 
 //----------------------------------------------------------------------
@@ -4496,16 +4534,18 @@ nsSVGElement::NumberInfo nsSVGFESpotLigh
 };
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFESpotLightElement,nsSVGFESpotLightElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFESpotLightElement,nsSVGFESpotLightElementBase)
 
+DOMCI_DATA(SVGFESpotLightElement, nsSVGFESpotLightElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFESpotLightElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGFESpotLightElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFESpotLightElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFESpotLightElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFESpotLightElementBase)
 
 //----------------------------------------------------------------------
@@ -4969,16 +5009,18 @@ protected:
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEDiffuseLighting)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEDiffuseLightingElement,nsSVGFEDiffuseLightingElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEDiffuseLightingElement,nsSVGFEDiffuseLightingElementBase)
 
+DOMCI_DATA(SVGFEDiffuseLightingElement, nsSVGFEDiffuseLightingElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEDiffuseLightingElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEDiffuseLightingElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEDiffuseLightingElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEDiffuseLightingElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEDiffuseLightingElementBase)
 
@@ -5091,16 +5133,18 @@ protected:
 NS_IMPL_NS_NEW_SVG_ELEMENT(FESpecularLighting)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFESpecularLightingElement,nsSVGFESpecularLightingElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFESpecularLightingElement,nsSVGFESpecularLightingElementBase)
 
+DOMCI_DATA(SVGFESpecularLightingElement, nsSVGFESpecularLightingElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFESpecularLightingElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFESpecularLightingElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFESpecularLightingElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFESpecularLightingElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFESpecularLightingElementBase)
 
@@ -5299,16 +5343,18 @@ nsSVGElement::StringInfo nsSVGFEImageEle
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEImage)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEImageElement,nsSVGFEImageElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEImageElement,nsSVGFEImageElementBase)
 
+DOMCI_DATA(SVGFEImageElement, nsSVGFEImageElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEImageElement)
   NS_NODE_INTERFACE_TABLE8(nsSVGFEImageElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEImageElement, nsIDOMSVGURIReference,
                            imgIDecoderObserver, nsIImageLoadingContent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEImageElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEImageElementBase)
@@ -5672,16 +5718,18 @@ nsSVGElement::StringInfo nsSVGFEDisplace
 NS_IMPL_NS_NEW_SVG_ELEMENT(FEDisplacementMap)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGFEDisplacementMapElement,nsSVGFEDisplacementMapElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGFEDisplacementMapElement,nsSVGFEDisplacementMapElementBase)
 
+DOMCI_DATA(SVGFEDisplacementMapElement, nsSVGFEDisplacementMapElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGFEDisplacementMapElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGFEDisplacementMapElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGFilterPrimitiveStandardAttributes,
                            nsIDOMSVGFEDisplacementMapElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGFEDisplacementMapElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGFEDisplacementMapElementBase)
 
--- a/content/svg/content/src/nsSVGForeignObjectElement.cpp
+++ b/content/svg/content/src/nsSVGForeignObjectElement.cpp
@@ -51,16 +51,18 @@ nsSVGElement::LengthInfo nsSVGForeignObj
 NS_IMPL_NS_NEW_SVG_ELEMENT(ForeignObject)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGForeignObjectElement,nsSVGForeignObjectElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGForeignObjectElement,nsSVGForeignObjectElementBase)
 
+DOMCI_DATA(SVGForeignObjectElement, nsSVGForeignObjectElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGForeignObjectElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGForeignObjectElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGForeignObjectElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGForeignObjectElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGForeignObjectElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGGElement.cpp
+++ b/content/svg/content/src/nsSVGGElement.cpp
@@ -74,16 +74,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(G)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGGElement,nsSVGGElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGGElement,nsSVGGElementBase)
 
+DOMCI_DATA(SVGGElement, nsSVGGElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGGElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGGElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGGElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGGElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGGElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGGradientElement.cpp
+++ b/content/svg/content/src/nsSVGGradientElement.cpp
@@ -192,16 +192,18 @@ nsSVGElement::LengthInfo nsSVGLinearGrad
 NS_IMPL_NS_NEW_SVG_ELEMENT(LinearGradient)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGLinearGradientElement,nsSVGLinearGradientElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGLinearGradientElement,nsSVGLinearGradientElementBase)
 
+DOMCI_DATA(SVGLinearGradientElement, nsSVGLinearGradientElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGLinearGradientElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGLinearGradientElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGGradientElement,
                            nsIDOMSVGLinearGradientElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGLinearGradientElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGLinearGradientElementBase)
 
@@ -270,16 +272,18 @@ nsSVGElement::LengthInfo nsSVGRadialGrad
 NS_IMPL_NS_NEW_SVG_ELEMENT(RadialGradient)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGRadialGradientElement,nsSVGRadialGradientElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGRadialGradientElement,nsSVGRadialGradientElementBase)
 
+DOMCI_DATA(SVGRadialGradientElement, nsSVGRadialGradientElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGRadialGradientElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGRadialGradientElement, nsIDOMNode,
                            nsIDOMElement, nsIDOMSVGElement,
                            nsIDOMSVGGradientElement,
                            nsIDOMSVGRadialGradientElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGRadialGradientElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGRadialGradientElementBase)
 
--- a/content/svg/content/src/nsSVGImageElement.cpp
+++ b/content/svg/content/src/nsSVGImageElement.cpp
@@ -60,16 +60,18 @@ nsSVGElement::StringInfo nsSVGImageEleme
 NS_IMPL_NS_NEW_SVG_ELEMENT(Image)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGImageElement,nsSVGImageElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGImageElement,nsSVGImageElementBase)
 
+DOMCI_DATA(SVGImageElement, nsSVGImageElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGImageElement)
   NS_NODE_INTERFACE_TABLE7(nsSVGImageElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGImageElement,
                            nsIDOMSVGURIReference, imgIDecoderObserver,
                            nsIImageLoadingContent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGImageElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGImageElementBase)
 
--- a/content/svg/content/src/nsSVGInteger.cpp
+++ b/content/svg/content/src/nsSVGInteger.cpp
@@ -42,16 +42,18 @@
 
 using namespace mozilla;
 
 NS_SVG_VAL_IMPL_CYCLE_COLLECTION(nsSVGInteger::DOMAnimatedInteger, mSVGElement)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGInteger::DOMAnimatedInteger)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGInteger::DOMAnimatedInteger)
 
+DOMCI_DATA(SVGAnimatedInteger, nsSVGInteger::DOMAnimatedInteger)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGInteger::DOMAnimatedInteger)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedInteger)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedInteger)
 NS_INTERFACE_MAP_END
 
 /* Implementation */
 
--- a/content/svg/content/src/nsSVGInteger.h
+++ b/content/svg/content/src/nsSVGInteger.h
@@ -73,16 +73,17 @@ public:
   
 private:
 
   PRInt32 mAnimVal;
   PRInt32 mBaseVal;
   PRUint8 mAttrEnum; // element specified tracking for attribute
   PRPackedBool mIsAnimated;
 
+public:
   struct DOMAnimatedInteger : public nsIDOMSVGAnimatedInteger
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedInteger)
 
     DOMAnimatedInteger(nsSVGInteger* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
 
--- a/content/svg/content/src/nsSVGLength.cpp
+++ b/content/svg/content/src/nsSVGLength.cpp
@@ -146,16 +146,18 @@ nsSVGLength::nsSVGLength()
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGLength)
 NS_IMPL_RELEASE(nsSVGLength)
 
+DOMCI_DATA(SVGLength, nsSVGLength)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGLength)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsISVGLength)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGLength)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGLength)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
 
--- a/content/svg/content/src/nsSVGLength2.cpp
+++ b/content/svg/content/src/nsSVGLength2.cpp
@@ -71,16 +71,18 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(
 NS_INTERFACE_MAP_END
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGLength2::DOMAnimVal)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGLength)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGLength)
 NS_INTERFACE_MAP_END
 
+DOMCI_DATA(SVGAnimatedLength, nsSVGLength2::DOMAnimatedLength)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGLength2::DOMAnimatedLength)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedLength)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedLength)
 NS_INTERFACE_MAP_END
 
 static nsIAtom** const unitMap[] =
 {
--- a/content/svg/content/src/nsSVGLength2.h
+++ b/content/svg/content/src/nsSVGLength2.h
@@ -240,16 +240,17 @@ private:
     NS_IMETHOD NewValueSpecifiedUnits(PRUint16 unitType,
                                       float valueInSpecifiedUnits)
       { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; }
 
     NS_IMETHOD ConvertToSpecifiedUnits(PRUint16 unitType)
       { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; }
   };
 
+public:
   struct DOMAnimatedLength : public nsIDOMSVGAnimatedLength
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedLength)
 
     DOMAnimatedLength(nsSVGLength2* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
     virtual ~DOMAnimatedLength();
--- a/content/svg/content/src/nsSVGLengthList.cpp
+++ b/content/svg/content/src/nsSVGLengthList.cpp
@@ -114,16 +114,18 @@ nsSVGLengthList::~nsSVGLengthList()
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGLengthList)
 NS_IMPL_RELEASE(nsSVGLengthList)
 
+DOMCI_DATA(SVGLengthList, nsSVGLengthList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGLengthList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGLengthList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGLengthList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGLineElement.cpp
+++ b/content/svg/content/src/nsSVGLineElement.cpp
@@ -93,16 +93,18 @@ nsSVGElement::LengthInfo nsSVGLineElemen
 NS_IMPL_NS_NEW_SVG_ELEMENT(Line)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGLineElement,nsSVGLineElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGLineElement,nsSVGLineElementBase)
 
+DOMCI_DATA(SVGLineElement, nsSVGLineElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGLineElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGLineElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGLineElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGLineElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGLineElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGMarkerElement.cpp
+++ b/content/svg/content/src/nsSVGMarkerElement.cpp
@@ -85,16 +85,18 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedEnumeration)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedEnumeration)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF_INHERITED(nsSVGMarkerElement,nsSVGMarkerElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGMarkerElement,nsSVGMarkerElementBase)
 
+DOMCI_DATA(SVGMarkerElement, nsSVGMarkerElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGMarkerElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGMarkerElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGFitToViewBox,
                            nsIDOMSVGMarkerElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGMarkerElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGMarkerElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGMaskElement.cpp
+++ b/content/svg/content/src/nsSVGMaskElement.cpp
@@ -63,16 +63,18 @@ nsSVGElement::EnumInfo nsSVGMaskElement:
 NS_IMPL_NS_NEW_SVG_ELEMENT(Mask)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGMaskElement,nsSVGMaskElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGMaskElement,nsSVGMaskElementBase)
 
+DOMCI_DATA(SVGMaskElement, nsSVGMaskElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGMaskElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGMaskElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGMaskElement,
                            nsIDOMSVGUnitTypes)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGMaskElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGMaskElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGMatrix.cpp
+++ b/content/svg/content/src/nsSVGMatrix.cpp
@@ -99,16 +99,18 @@ nsSVGMatrix::nsSVGMatrix(float a, float 
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGMatrix)
 NS_IMPL_RELEASE(nsSVGMatrix)
 
+DOMCI_DATA(SVGMatrix, nsSVGMatrix)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGMatrix)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGMatrix)
 //  NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
 //  NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGMatrix)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGMetadataElement.cpp
+++ b/content/svg/content/src/nsSVGMetadataElement.cpp
@@ -68,16 +68,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(Metadata)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGMetadataElement, nsSVGMetadataElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGMetadataElement, nsSVGMetadataElementBase)
 
+DOMCI_DATA(SVGMetadataElement, nsSVGMetadataElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGMetadataElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGMetadataElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGMetadataElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGMetadataElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGMetadataElementBase)
 
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGNumber.cpp
+++ b/content/svg/content/src/nsSVGNumber.cpp
@@ -88,16 +88,18 @@ nsSVGNumber::nsSVGNumber(float val)
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGNumber)
 NS_IMPL_RELEASE(nsSVGNumber)
 
+DOMCI_DATA(SVGNumber, nsSVGNumber)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGNumber)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGNumber)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGNumber)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGNumber2.cpp
+++ b/content/svg/content/src/nsSVGNumber2.cpp
@@ -65,16 +65,18 @@ private:
 NS_SVG_VAL_IMPL_CYCLE_COLLECTION(nsSVGNumber2::DOMAnimatedNumber, mSVGElement)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGNumber2::DOMAnimatedNumber)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGNumber2::DOMAnimatedNumber)
 
 NS_IMPL_ADDREF(DOMSVGNumber)
 NS_IMPL_RELEASE(DOMSVGNumber)
 
+DOMCI_DATA(SVGAnimatedNumber, nsSVGNumber2::DOMAnimatedNumber)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGNumber2::DOMAnimatedNumber)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedNumber)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedNumber)
 NS_INTERFACE_MAP_END
 
 NS_INTERFACE_MAP_BEGIN(DOMSVGNumber)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGNumber)
--- a/content/svg/content/src/nsSVGNumber2.h
+++ b/content/svg/content/src/nsSVGNumber2.h
@@ -79,16 +79,17 @@ public:
 
 private:
 
   float mAnimVal;
   float mBaseVal;
   PRUint8 mAttrEnum; // element specified tracking for attribute
   PRPackedBool mIsAnimated;
 
+public:
   struct DOMAnimatedNumber : public nsIDOMSVGAnimatedNumber
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedNumber)
 
     DOMAnimatedNumber(nsSVGNumber2* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
 
--- a/content/svg/content/src/nsSVGNumberList.cpp
+++ b/content/svg/content/src/nsSVGNumberList.cpp
@@ -107,16 +107,18 @@ nsSVGNumberList::~nsSVGNumberList()
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGNumberList)
 NS_IMPL_RELEASE(nsSVGNumberList)
 
+DOMCI_DATA(SVGNumberList, nsSVGNumberList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGNumberList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGNumberList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGNumberList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGPathElement.cpp
+++ b/content/svg/content/src/nsSVGPathElement.cpp
@@ -55,16 +55,18 @@ nsSVGElement::NumberInfo nsSVGPathElemen
 NS_IMPL_NS_NEW_SVG_ELEMENT(Path)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGPathElement,nsSVGPathElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGPathElement,nsSVGPathElementBase)
 
+DOMCI_DATA(SVGPathElement, nsSVGPathElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGPathElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGPathElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGPathElement,
                            nsIDOMSVGAnimatedPathData)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPathElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGPathElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGPathSeg.cpp
+++ b/content/svg/content/src/nsSVGPathSeg.cpp
@@ -63,16 +63,18 @@ NS_IMETHODIMP                           
 GetPathSegTypeAsLetter(nsAString & aPathSegTypeAsLetter) {    \
   aPathSegTypeAsLetter.Assign(letter);                        \
   return NS_OK; }
 
 #define NS_IMPL_NSISUPPORTS_SVGPATHSEG(basename)              \
 NS_IMPL_ADDREF(ns##basename)                                  \
 NS_IMPL_RELEASE(ns##basename)                                 \
                                                               \
+DOMCI_DATA(basename, ns##basename)                            \
+                                                              \
 NS_INTERFACE_MAP_BEGIN(ns##basename)                          \
   NS_INTERFACE_MAP_ENTRY(nsIDOM##basename)                    \
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(basename)          \
 NS_INTERFACE_MAP_END_INHERITING(nsSVGPathSeg)
 
 //----------------------------------------------------------------------
 // GetLength Helper Functions
 
--- a/content/svg/content/src/nsSVGPathSegList.cpp
+++ b/content/svg/content/src/nsSVGPathSegList.cpp
@@ -110,16 +110,18 @@ nsSVGPathSegList::~nsSVGPathSegList()
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGPathSegList)
 NS_IMPL_RELEASE(nsSVGPathSegList)
 
+DOMCI_DATA(SVGPathSegList, nsSVGPathSegList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGPathSegList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGPathSegList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPathSegList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGPatternElement.cpp
+++ b/content/svg/content/src/nsSVGPatternElement.cpp
@@ -73,16 +73,18 @@ nsSVGElement::StringInfo nsSVGPatternEle
 NS_IMPL_NS_NEW_SVG_ELEMENT(Pattern)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGPatternElement,nsSVGPatternElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGPatternElement,nsSVGPatternElementBase)
 
+DOMCI_DATA(SVGPatternElement, nsSVGPatternElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGPatternElement)
   NS_NODE_INTERFACE_TABLE7(nsSVGPatternElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGFitToViewBox,
                            nsIDOMSVGURIReference, nsIDOMSVGPatternElement,
                            nsIDOMSVGUnitTypes)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPatternElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGPatternElementBase)
 
--- a/content/svg/content/src/nsSVGPoint.cpp
+++ b/content/svg/content/src/nsSVGPoint.cpp
@@ -90,16 +90,18 @@ nsSVGPoint::nsSVGPoint(float x, float y)
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGPoint)
 NS_IMPL_RELEASE(nsSVGPoint)
 
+DOMCI_DATA(SVGPoint, nsSVGPoint)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGPoint)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGPoint)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPoint)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGPointList.cpp
+++ b/content/svg/content/src/nsSVGPointList.cpp
@@ -140,16 +140,18 @@ nsSVGPointList::InsertElementAt(nsIDOMSV
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGPointList)
 NS_IMPL_RELEASE(nsSVGPointList)
 
+DOMCI_DATA(SVGPointList, nsSVGPointList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGPointList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGPointList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPointList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGPolygonElement.cpp
+++ b/content/svg/content/src/nsSVGPolygonElement.cpp
@@ -71,16 +71,18 @@ public:
 NS_IMPL_NS_NEW_SVG_ELEMENT(Polygon)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGPolygonElement,nsSVGPolygonElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGPolygonElement,nsSVGPolygonElementBase)
 
+DOMCI_DATA(SVGPolygonElement, nsSVGPolygonElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGPolygonElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGPolygonElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGPolygonElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPolygonElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGPolygonElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGPolylineElement.cpp
+++ b/content/svg/content/src/nsSVGPolylineElement.cpp
@@ -67,16 +67,18 @@ public:
 NS_IMPL_NS_NEW_SVG_ELEMENT(Polyline)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGPolylineElement,nsSVGPolylineElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGPolylineElement,nsSVGPolylineElementBase)
 
+DOMCI_DATA(SVGPolylineElement, nsSVGPolylineElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGPolylineElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGPolylineElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGPolylineElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPolylineElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGPolylineElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGPreserveAspectRatio.cpp
+++ b/content/svg/content/src/nsSVGPreserveAspectRatio.cpp
@@ -59,16 +59,20 @@ NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGPre
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGPreserveAspectRatio::DOMBaseVal)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGPreserveAspectRatio::DOMAnimVal)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGPreserveAspectRatio::DOMAnimVal)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGPreserveAspectRatio::DOMAnimPAspectRatio)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGPreserveAspectRatio::DOMAnimPAspectRatio)
 
+DOMCI_DATA(SVGPreserveAspectRatio, nsSVGPreserveAspectRatio::DOMBaseVal)
+DOMCI_DATA(SVGAnimatedPreserveAspectRatio,
+           nsSVGPreserveAspectRatio::DOMAnimPAspectRatio)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGPreserveAspectRatio::DOMBaseVal)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGPreserveAspectRatio)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGPreserveAspectRatio)
 NS_INTERFACE_MAP_END
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGPreserveAspectRatio::DOMAnimVal)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGPreserveAspectRatio)
--- a/content/svg/content/src/nsSVGPreserveAspectRatio.h
+++ b/content/svg/content/src/nsSVGPreserveAspectRatio.h
@@ -126,16 +126,17 @@ private:
   PreserveAspectRatio mBaseVal;
   PRPackedBool mIsAnimated;
 
   nsresult ToDOMBaseVal(nsIDOMSVGPreserveAspectRatio **aResult,
                         nsSVGElement* aSVGElement);
   nsresult ToDOMAnimVal(nsIDOMSVGPreserveAspectRatio **aResult,
                         nsSVGElement* aSVGElement);
 
+public:
   struct DOMBaseVal : public nsIDOMSVGPreserveAspectRatio
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMBaseVal)
 
     DOMBaseVal(nsSVGPreserveAspectRatio* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
     
--- a/content/svg/content/src/nsSVGRect.cpp
+++ b/content/svg/content/src/nsSVGRect.cpp
@@ -57,16 +57,18 @@ nsSVGRect::nsSVGRect(float x, float y, f
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGRect)
 NS_IMPL_RELEASE(nsSVGRect)
 
+DOMCI_DATA(SVGRect, nsSVGRect)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGRect)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGRect)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGRect)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 //----------------------------------------------------------------------
 // nsIDOMSVGRect methods:
--- a/content/svg/content/src/nsSVGRectElement.cpp
+++ b/content/svg/content/src/nsSVGRectElement.cpp
@@ -90,16 +90,18 @@ nsSVGElement::LengthInfo nsSVGRectElemen
 NS_IMPL_NS_NEW_SVG_ELEMENT(Rect)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGRectElement,nsSVGRectElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGRectElement,nsSVGRectElementBase)
 
+DOMCI_DATA(SVGRectElement, nsSVGRectElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGRectElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGRectElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGRectElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGRectElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGRectElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGSVGElement.cpp
+++ b/content/svg/content/src/nsSVGSVGElement.cpp
@@ -171,16 +171,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
     tmp->mTimedDocumentRoot->Traverse(&cb);
   }
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 #endif // MOZ_SMIL
 
 NS_IMPL_ADDREF_INHERITED(nsSVGSVGElement,nsSVGSVGElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGSVGElement,nsSVGSVGElementBase)
 
+DOMCI_DATA(SVGSVGElement, nsSVGSVGElement)
+
 #ifdef MOZ_SMIL
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsSVGSVGElement)
 #else
 NS_INTERFACE_TABLE_HEAD(nsSVGSVGElement)
 #endif
   NS_NODE_INTERFACE_TABLE7(nsSVGSVGElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGSVGElement,
                            nsIDOMSVGFitToViewBox, nsIDOMSVGLocatable,
--- a/content/svg/content/src/nsSVGScriptElement.cpp
+++ b/content/svg/content/src/nsSVGScriptElement.cpp
@@ -112,16 +112,18 @@ nsSVGElement::StringInfo nsSVGScriptElem
 NS_IMPL_NS_NEW_SVG_ELEMENT_CHECK_PARSER(Script)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGScriptElement,nsSVGScriptElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGScriptElement,nsSVGScriptElementBase)
 
+DOMCI_DATA(SVGScriptElement, nsSVGScriptElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGScriptElement)
   NS_NODE_INTERFACE_TABLE8(nsSVGScriptElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGScriptElement,
                            nsIDOMSVGURIReference, nsIScriptLoaderObserver,
                            nsIScriptElement, nsIMutationObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGScriptElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGScriptElementBase)
 
--- a/content/svg/content/src/nsSVGSetElement.cpp
+++ b/content/svg/content/src/nsSVGSetElement.cpp
@@ -72,16 +72,18 @@ public:
 NS_IMPL_NS_NEW_SVG_ELEMENT(Set)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGSetElement,nsSVGSetElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGSetElement,nsSVGSetElementBase)
 
+DOMCI_DATA(SVGSetElement, nsSVGSetElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGSetElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGSetElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGAnimationElement,
                            nsIDOMSVGSetElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGSetElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGSetElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGStopElement.cpp
+++ b/content/svg/content/src/nsSVGStopElement.cpp
@@ -85,16 +85,18 @@ nsSVGElement::NumberInfo nsSVGStopElemen
 NS_IMPL_NS_NEW_SVG_ELEMENT(Stop)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGStopElement,nsSVGStopElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGStopElement,nsSVGStopElementBase)
 
+DOMCI_DATA(SVGStopElement, nsSVGStopElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGStopElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGStopElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGStopElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGStopElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGStopElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGString.cpp
+++ b/content/svg/content/src/nsSVGString.cpp
@@ -36,16 +36,18 @@
 
 #include "nsSVGString.h"
 
 NS_SVG_VAL_IMPL_CYCLE_COLLECTION(nsSVGString::DOMAnimatedString, mSVGElement)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGString::DOMAnimatedString)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGString::DOMAnimatedString)
 
+DOMCI_DATA(SVGAnimatedString, nsSVGString::DOMAnimatedString)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGString::DOMAnimatedString)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedString)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedString)
 NS_INTERFACE_MAP_END
 
 /* Implementation */
 
--- a/content/svg/content/src/nsSVGString.h
+++ b/content/svg/content/src/nsSVGString.h
@@ -61,16 +61,17 @@ public:
   nsresult ToDOMAnimatedString(nsIDOMSVGAnimatedString **aResult,
                                nsSVGElement* aSVGElement);
 
 private:
 
   nsAutoPtr<nsString> mAnimVal;
   PRUint8 mAttrEnum; // element specified tracking for attribute
 
+public:
   struct DOMAnimatedString : public nsIDOMSVGAnimatedString
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedString)
 
     DOMAnimatedString(nsSVGString* aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
 
--- a/content/svg/content/src/nsSVGStyleElement.cpp
+++ b/content/svg/content/src/nsSVGStyleElement.cpp
@@ -118,16 +118,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(Style)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGStyleElement,nsSVGStyleElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGStyleElement,nsSVGStyleElementBase)
 
+DOMCI_DATA(SVGStyleElement, nsSVGStyleElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGStyleElement)
   NS_NODE_INTERFACE_TABLE7(nsSVGStyleElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGStyleElement,
                            nsIDOMLinkStyle, nsIStyleSheetLinkingElement,
                            nsIMutationObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGStyleElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGStyleElementBase)
 
--- a/content/svg/content/src/nsSVGSwitchElement.cpp
+++ b/content/svg/content/src/nsSVGSwitchElement.cpp
@@ -58,16 +58,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsSVGSwitchElement,
                                                 nsSVGSwitchElementBase)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mActiveChild)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_ADDREF_INHERITED(nsSVGSwitchElement,nsSVGSwitchElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGSwitchElement,nsSVGSwitchElementBase)
 
+DOMCI_DATA(SVGSwitchElement, nsSVGSwitchElement)
+
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsSVGSwitchElement)
   NS_NODE_INTERFACE_TABLE4(nsSVGSwitchElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGSwitchElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGSwitchElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGSwitchElementBase)
 
 //----------------------------------------------------------------------
 // Implementation
--- a/content/svg/content/src/nsSVGSymbolElement.cpp
+++ b/content/svg/content/src/nsSVGSymbolElement.cpp
@@ -80,16 +80,18 @@ protected:
 NS_IMPL_NS_NEW_SVG_ELEMENT(Symbol)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGSymbolElement,nsSVGSymbolElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGSymbolElement,nsSVGSymbolElementBase)
 
+DOMCI_DATA(SVGSymbolElement, nsSVGSymbolElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGSymbolElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGSymbolElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGFitToViewBox,
                            nsIDOMSVGSymbolElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGSymbolElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGSymbolElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGTSpanElement.cpp
+++ b/content/svg/content/src/nsSVGTSpanElement.cpp
@@ -102,16 +102,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(TSpan)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGTSpanElement,nsSVGTSpanElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGTSpanElement,nsSVGTSpanElementBase)
 
+DOMCI_DATA(SVGTSpanElement, nsSVGTSpanElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGTSpanElement)
   NS_NODE_INTERFACE_TABLE6(nsSVGTSpanElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGTSpanElement,
                            nsIDOMSVGTextPositioningElement,
                            nsIDOMSVGTextContentElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGTSpanElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGTSpanElementBase)
 
--- a/content/svg/content/src/nsSVGTextElement.cpp
+++ b/content/svg/content/src/nsSVGTextElement.cpp
@@ -99,16 +99,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(Text)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGTextElement,nsSVGTextElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGTextElement,nsSVGTextElementBase)
 
+DOMCI_DATA(SVGTextElement, nsSVGTextElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGTextElement)
   NS_NODE_INTERFACE_TABLE6(nsSVGTextElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGTextElement,
                            nsIDOMSVGTextPositioningElement,
                            nsIDOMSVGTextContentElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGTextElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGTextElementBase)
 
--- a/content/svg/content/src/nsSVGTextPathElement.cpp
+++ b/content/svg/content/src/nsSVGTextPathElement.cpp
@@ -80,16 +80,18 @@ nsSVGElement::StringInfo nsSVGTextPathEl
 NS_IMPL_NS_NEW_SVG_ELEMENT(TextPath)
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGTextPathElement,nsSVGTextPathElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGTextPathElement,nsSVGTextPathElementBase)
 
+DOMCI_DATA(SVGTextPathElement, nsSVGTextPathElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGTextPathElement)
   NS_NODE_INTERFACE_TABLE6(nsSVGTextPathElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGTextPathElement,
                            nsIDOMSVGTextContentElement, nsIDOMSVGURIReference)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGTextPathElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGTextPathElementBase)
 
 //----------------------------------------------------------------------
--- a/content/svg/content/src/nsSVGTitleElement.cpp
+++ b/content/svg/content/src/nsSVGTitleElement.cpp
@@ -87,16 +87,18 @@ NS_IMPL_NS_NEW_SVG_ELEMENT(Title)
 
 
 //----------------------------------------------------------------------
 // nsISupports methods
 
 NS_IMPL_ADDREF_INHERITED(nsSVGTitleElement, nsSVGTitleElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGTitleElement, nsSVGTitleElementBase)
 
+DOMCI_DATA(SVGTitleElement, nsSVGTitleElement)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGTitleElement)
   NS_NODE_INTERFACE_TABLE5(nsSVGTitleElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGTitleElement,
                            nsIMutationObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGTitleElement)
 NS_INTERFACE_MAP_END_INHERITING(nsSVGTitleElementBase)
 
 
--- a/content/svg/content/src/nsSVGTransform.cpp
+++ b/content/svg/content/src/nsSVGTransform.cpp
@@ -88,16 +88,18 @@ nsresult nsSVGTransform::Init()
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGTransform)
 NS_IMPL_RELEASE(nsSVGTransform)
 
+DOMCI_DATA(SVGTransform, nsSVGTransform)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGTransform)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGTransform)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGTransform)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGTransformList.cpp
+++ b/content/svg/content/src/nsSVGTransformList.cpp
@@ -147,16 +147,18 @@ nsSVGTransformList::GetConsolidationMatr
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
 NS_IMPL_ADDREF(nsSVGTransformList)
 NS_IMPL_RELEASE(nsSVGTransformList)
 
+DOMCI_DATA(SVGTransformList, nsSVGTransformList)
+
 NS_INTERFACE_MAP_BEGIN(nsSVGTransformList)
   NS_INTERFACE_MAP_ENTRY(nsISVGValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGTransformList)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsISVGValueObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGTransformList)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISVGValue)
 NS_INTERFACE_MAP_END
--- a/content/svg/content/src/nsSVGUseElement.cpp
+++ b/content/svg/content/src/nsSVGUseElement.cpp
@@ -77,16 +77,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mOriginal)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mClone)
   tmp->mSource.Traverse(&cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsSVGUseElement,nsSVGUseElementBase)
 NS_IMPL_RELEASE_INHERITED(nsSVGUseElement,nsSVGUseElementBase)
 
+DOMCI_DATA(SVGUseElement, nsSVGUseElement)
+
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsSVGUseElement)
   NS_NODE_INTERFACE_TABLE6(nsSVGUseElement, nsIDOMNode, nsIDOMElement,
                            nsIDOMSVGElement, nsIDOMSVGURIReference,
                            nsIDOMSVGUseElement, nsIMutationObserver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGUseElement)
   if (aIID.Equals(NS_GET_IID(nsSVGUseElement)))
     foundInterface = reinterpret_cast<nsISupports*>(this);
   else
--- a/content/svg/content/src/nsSVGViewBox.cpp
+++ b/content/svg/content/src/nsSVGViewBox.cpp
@@ -83,16 +83,18 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(
 NS_INTERFACE_MAP_END
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGViewBox::DOMAnimVal)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGRect)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGRect)
 NS_INTERFACE_MAP_END
 
+DOMCI_DATA(SVGAnimatedRect, nsSVGViewBox::DOMAnimatedRect)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGViewBox::DOMAnimatedRect)
   NS_INTERFACE_MAP_ENTRY(nsIDOMSVGAnimatedRect)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGAnimatedRect)
 NS_INTERFACE_MAP_END
 
 /* Implementation of nsSVGViewBox methods */
 
--- a/content/svg/content/src/nsSVGViewBox.h
+++ b/content/svg/content/src/nsSVGViewBox.h
@@ -173,16 +173,17 @@ private:
     NS_IMETHOD SetY(float aY)
       { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; }
     NS_IMETHOD SetWidth(float aWidth)
       { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; }
     NS_IMETHOD SetHeight(float aHeight)
       { return NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR; }
   };
 
+public:
   struct DOMAnimatedRect : public nsIDOMSVGAnimatedRect
   {
     NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     NS_DECL_CYCLE_COLLECTION_CLASS(DOMAnimatedRect)
 
     DOMAnimatedRect(nsSVGViewBox *aVal, nsSVGElement *aSVGElement)
       : mVal(aVal), mSVGElement(aSVGElement) {}
 
--- a/content/svg/document/src/nsSVGDocument.cpp
+++ b/content/svg/document/src/nsSVGDocument.cpp
@@ -52,16 +52,18 @@ nsSVGDocument::nsSVGDocument()
 
 nsSVGDocument::~nsSVGDocument()
 {
 }
 
 //----------------------------------------------------------------------
 // nsISupports methods:
 
+DOMCI_DATA(SVGDocument, nsSVGDocument)
+
 NS_INTERFACE_TABLE_HEAD(nsSVGDocument)
   NS_INTERFACE_TABLE_INHERITED2(nsSVGDocument,
                                 nsIDOMSVGDocument,
                                 nsIDOMDocumentEvent)
   NS_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(SVGDocument)
 NS_INTERFACE_MAP_END_INHERITING(nsXMLDocument)
 
--- a/content/xml/content/src/nsXMLCDATASection.cpp
+++ b/content/xml/content/src/nsXMLCDATASection.cpp
@@ -101,16 +101,18 @@ nsXMLCDATASection::nsXMLCDATASection(nsI
 {
 }
 
 nsXMLCDATASection::~nsXMLCDATASection()
 {
 }
 
 
+DOMCI_DATA(CDATASection, nsXMLCDATASection)
+
 // QueryInterface implementation for nsXMLCDATASection
 NS_INTERFACE_TABLE_HEAD(nsXMLCDATASection)
   NS_NODE_INTERFACE_TABLE4(nsXMLCDATASection, nsIDOMNode, nsIDOMCharacterData,
                            nsIDOMText, nsIDOMCDATASection)
   NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIDOM3Text, new nsText3Tearoff(this))
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CDATASection)
 NS_INTERFACE_MAP_END_INHERITING(nsGenericDOMDataNode)
 
--- a/content/xml/content/src/nsXMLElement.cpp
+++ b/content/xml/content/src/nsXMLElement.cpp
@@ -46,16 +46,18 @@ NS_NewXMLElement(nsIContent** aInstanceP
     return NS_ERROR_OUT_OF_MEMORY;
   }
 
   NS_ADDREF(*aInstancePtrResult = it);
 
   return NS_OK;
 }
 
+DOMCI_DATA(Element, nsXMLElement)
+
 // QueryInterface implementation for nsXMLElement
 NS_INTERFACE_TABLE_HEAD(nsXMLElement)
   NS_NODE_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsXMLElement)
     NS_INTERFACE_TABLE_ENTRY(nsXMLElement, nsIDOMNode)
     NS_INTERFACE_TABLE_ENTRY(nsXMLElement, nsIDOMElement)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_ELEMENT_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Element)
--- a/content/xml/content/src/nsXMLProcessingInstruction.cpp
+++ b/content/xml/content/src/nsXMLProcessingInstruction.cpp
@@ -84,16 +84,18 @@ nsXMLProcessingInstruction::nsXMLProcess
                   PR_FALSE);  // Don't notify (bug 420429).
 }
 
 nsXMLProcessingInstruction::~nsXMLProcessingInstruction()
 {
 }
 
 
+DOMCI_DATA(ProcessingInstruction, nsXMLProcessingInstruction)
+
 // QueryInterface implementation for nsXMLProcessingInstruction
 NS_INTERFACE_TABLE_HEAD(nsXMLProcessingInstruction)
   NS_NODE_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsXMLProcessingInstruction)
     NS_INTERFACE_TABLE_ENTRY(nsXMLProcessingInstruction, nsIDOMNode)
     NS_INTERFACE_TABLE_ENTRY(nsXMLProcessingInstruction,
                              nsIDOMProcessingInstruction)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
--- a/content/xml/content/src/nsXMLStylesheetPI.cpp
+++ b/content/xml/content/src/nsXMLStylesheetPI.cpp
@@ -84,16 +84,18 @@ protected:
                          nsAString& aMedia,
                          PRBool* aIsAlternate);
   virtual nsGenericDOMDataNode* CloneDataNode(nsINodeInfo *aNodeInfo,
                                               PRBool aCloneText) const;
 };
 
 // nsISupports implementation
 
+DOMCI_DATA(XMLStylesheetProcessingInstruction, nsXMLStylesheetPI)
+
 NS_INTERFACE_TABLE_HEAD(nsXMLStylesheetPI)
   NS_NODE_INTERFACE_TABLE4(nsXMLStylesheetPI, nsIDOMNode,
                            nsIDOMProcessingInstruction, nsIDOMLinkStyle,
                            nsIStyleSheetLinkingElement)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XMLStylesheetProcessingInstruction)
 NS_INTERFACE_MAP_END_INHERITING(nsXMLProcessingInstruction)
 
 NS_IMPL_ADDREF_INHERITED(nsXMLStylesheetPI, nsXMLProcessingInstruction)
--- a/content/xml/document/src/nsXMLDocument.cpp
+++ b/content/xml/document/src/nsXMLDocument.cpp
@@ -228,16 +228,18 @@ nsXMLDocument::nsXMLDocument(const char*
 }
 
 nsXMLDocument::~nsXMLDocument()
 {
   // XXX We rather crash than hang
   mLoopingForSyncLoad = PR_FALSE;
 }
 
+DOMCI_DATA(XMLDocument, nsXMLDocument)
+
 // QueryInterface implementation for nsXMLDocument
 NS_INTERFACE_TABLE_HEAD(nsXMLDocument)
   NS_DOCUMENT_INTERFACE_TABLE_BEGIN(nsXMLDocument)
     NS_INTERFACE_TABLE_ENTRY(nsXMLDocument, nsIDOMXMLDocument)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XMLDocument)
 NS_INTERFACE_MAP_END_INHERITING(nsDocument)
--- a/content/xslt/src/xpath/nsXPathEvaluator.cpp
+++ b/content/xslt/src/xpath/nsXPathEvaluator.cpp
@@ -94,16 +94,18 @@ private:
     nsIDOMXPathNSResolver* mResolver;
     nsTArray<PRInt32> *mNamespaceIDs;
     nsTArray<nsCString> *mContractIDs;
     nsCOMArray<nsISupports> *mState;
     nsresult mLastError;
     PRBool mIsCaseSensitive;
 };
 
+DOMCI_DATA(XPathEvaluator, nsXPathEvaluator)
+
 NS_IMPL_AGGREGATED(nsXPathEvaluator)
 NS_INTERFACE_MAP_BEGIN_AGGREGATED(nsXPathEvaluator)
     NS_INTERFACE_MAP_ENTRY(nsIDOMXPathEvaluator)
     NS_INTERFACE_MAP_ENTRY(nsIXPathEvaluatorInternal)
     NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XPathEvaluator)
 NS_INTERFACE_MAP_END
 
 nsXPathEvaluator::nsXPathEvaluator(nsISupports *aOuter)
--- a/content/xslt/src/xpath/nsXPathExpression.cpp
+++ b/content/xslt/src/xpath/nsXPathExpression.cpp
@@ -50,16 +50,19 @@
 #include "txXPathTreeWalker.h"
 
 NS_IMPL_CYCLE_COLLECTION_1(nsXPathExpression, mDocument)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsXPathExpression,
                                           nsIDOMXPathExpression)
 NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsXPathExpression,
                                            nsIDOMXPathExpression)
+
+DOMCI_DATA(XPathExpression, nsXPathExpression)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXPathExpression)
   NS_INTERFACE_MAP_ENTRY(nsIDOMXPathExpression)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSXPathExpression)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMXPathExpression)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XPathExpression)
 NS_INTERFACE_MAP_END
 
 nsXPathExpression::nsXPathExpression(nsAutoPtr<Expr>& aExpression,
--- a/content/xslt/src/xpath/nsXPathNSResolver.cpp
+++ b/content/xslt/src/xpath/nsXPathNSResolver.cpp
@@ -40,16 +40,19 @@
 #include "nsIDOMClassInfo.h"
 #include "nsDOMString.h"
 #include "nsContentUtils.h"
 
 NS_IMPL_CYCLE_COLLECTION_1(nsXPathNSResolver, mNode)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsXPathNSResolver)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsXPathNSResolver)
+
+DOMCI_DATA(XPathNSResolver, nsXPathNSResolver)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXPathNSResolver)
   NS_INTERFACE_MAP_ENTRY(nsIDOMXPathNSResolver)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMXPathNSResolver)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XPathNSResolver)
 NS_INTERFACE_MAP_END
 
 nsXPathNSResolver::nsXPathNSResolver(nsIDOMNode* aNode)
 {
--- a/content/xslt/src/xpath/nsXPathNamespace.cpp
+++ b/content/xslt/src/xpath/nsXPathNamespace.cpp
@@ -36,16 +36,19 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsXPathNamespace.h"
 #include "nsIDOMClassInfo.h"
 
 NS_IMPL_ADDREF(nsXPathNamespace)
 NS_IMPL_RELEASE(nsXPathNamespace)
+
+DOMCI_DATA(XPathNamespace, nsXPathNamespace)
+
 NS_INTERFACE_MAP_BEGIN(nsXPathNamespace)
   NS_INTERFACE_MAP_ENTRY(nsIDOMXPathNamespace)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNode)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMXPathNamespace)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XPathNamespace)
 NS_INTERFACE_MAP_END
 
 /* readonly attribute DOMString nodeName; */
--- a/content/xslt/src/xpath/nsXPathResult.cpp
+++ b/content/xslt/src/xpath/nsXPathResult.cpp
@@ -86,16 +86,19 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ns
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXPathResult)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mDocument)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMARRAY(mResultNodes)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsXPathResult, nsIDOMXPathResult)
 NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsXPathResult, nsIDOMXPathResult)
+
+DOMCI_DATA(XPathResult, nsXPathResult)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXPathResult)
     NS_INTERFACE_MAP_ENTRY(nsIDOMXPathResult)
     NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
     NS_INTERFACE_MAP_ENTRY(nsIXPathResult)
     NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMXPathResult)
     NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XPathResult)
 NS_INTERFACE_MAP_END
 
--- a/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp
+++ b/content/xslt/src/xslt/txMozillaXSLTProcessor.cpp
@@ -306,16 +306,19 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(
     txOwningExpandedNameMap<txIGlobalParameter>::iterator iter(tmp->mVariables);
     while (iter.next()) {
         cb.NoteXPCOMChild(static_cast<txVariable*>(iter.value())->getValue());
     }
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(txMozillaXSLTProcessor)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(txMozillaXSLTProcessor)
+
+DOMCI_DATA(XSLTProcessor, txMozillaXSLTProcessor)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(txMozillaXSLTProcessor)
     NS_INTERFACE_MAP_ENTRY(nsIXSLTProcessor)
     NS_INTERFACE_MAP_ENTRY(nsIXSLTProcessorObsolete)
     NS_INTERFACE_MAP_ENTRY(nsIXSLTProcessorPrivate)
     NS_INTERFACE_MAP_ENTRY(nsIDocumentTransformer)
     NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
     NS_INTERFACE_MAP_ENTRY(nsIJSNativeInitializer)
     NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXSLTProcessor)
--- a/content/xul/content/src/nsXULElement.cpp
+++ b/content/xul/content/src/nsXULElement.cpp
@@ -361,16 +361,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
                                                   nsStyledElement)
     NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(mPrototype,
                                                     nsXULPrototypeElement)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_ADDREF_INHERITED(nsXULElement, nsStyledElement)
 NS_IMPL_RELEASE_INHERITED(nsXULElement, nsStyledElement)
 
+DOMCI_DATA(XULElement, nsXULElement)
+
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsXULElement)
     NS_NODE_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsXULElement)
         NS_INTERFACE_TABLE_ENTRY(nsXULElement, nsIDOMNode)
         NS_INTERFACE_TABLE_ENTRY(nsXULElement, nsIDOMElement)
         NS_INTERFACE_TABLE_ENTRY(nsXULElement, nsIDOMXULElement)
     NS_OFFSET_AND_INTERFACE_TABLE_END
     NS_ELEMENT_INTERFACE_TABLE_TO_MAP_SEGUE
     NS_INTERFACE_MAP_ENTRY_TEAROFF(nsIScriptEventHandlerOwner,
--- a/content/xul/document/src/nsXULCommandDispatcher.cpp
+++ b/content/xul/document/src/nsXULCommandDispatcher.cpp
@@ -90,16 +90,19 @@ nsXULCommandDispatcher::nsXULCommandDisp
 nsXULCommandDispatcher::~nsXULCommandDispatcher()
 {
   Disconnect();
 }
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULCommandDispatcher)
 
 // QueryInterface implementation for nsXULCommandDispatcher
+
+DOMCI_DATA(XULCommandDispatcher, nsXULCommandDispatcher)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULCommandDispatcher)
     NS_INTERFACE_MAP_ENTRY(nsIDOMXULCommandDispatcher)
     NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
     NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMXULCommandDispatcher)
     NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XULCommandDispatcher)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsXULCommandDispatcher)
--- a/content/xul/document/src/nsXULControllers.cpp
+++ b/content/xul/document/src/nsXULControllers.cpp
@@ -108,16 +108,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(
       nsXULControllerData* controllerData = tmp->mControllers[i];
       if (controllerData) {
         cb.NoteXPCOMChild(controllerData->mController);
       }
     }
   }
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(XULControllers, nsXULControllers)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULControllers)
   NS_INTERFACE_MAP_ENTRY(nsIControllers)
   NS_INTERFACE_MAP_ENTRY(nsISecurityCheckedComponent)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIControllers)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XULControllers)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsXULControllers, nsIControllers)
--- a/content/xul/document/src/nsXULDocument.cpp
+++ b/content/xul/document/src/nsXULDocument.cpp
@@ -375,16 +375,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsXULDocument, nsXMLDocument)
     NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mTooltipNode)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_ADDREF_INHERITED(nsXULDocument, nsXMLDocument)
 NS_IMPL_RELEASE_INHERITED(nsXULDocument, nsXMLDocument)
 
 
+DOMCI_DATA(XULDocument, nsXULDocument)
+
 // QueryInterface implementation for nsXULDocument
 NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(nsXULDocument)
     NS_DOCUMENT_INTERFACE_TABLE_BEGIN(nsXULDocument)
       NS_INTERFACE_TABLE_ENTRY(nsXULDocument, nsIXULDocument)
       NS_INTERFACE_TABLE_ENTRY(nsXULDocument, nsIDOMXULDocument)
       NS_INTERFACE_TABLE_ENTRY(nsXULDocument, nsIStreamLoaderObserver)
       NS_INTERFACE_TABLE_ENTRY(nsXULDocument, nsICSSLoaderObserver)
     NS_OFFSET_AND_INTERFACE_TABLE_END
--- a/content/xul/templates/src/nsXULTemplateBuilder.cpp
+++ b/content/xul/templates/src/nsXULTemplateBuilder.cpp
@@ -294,16 +294,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(
     tmp->Traverse(cb);
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsXULTemplateBuilder,
                                           nsIXULTemplateBuilder)
 NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsXULTemplateBuilder,
                                            nsIXULTemplateBuilder)
 
+DOMCI_DATA(XULTemplateBuilder, nsXULTemplateBuilder)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULTemplateBuilder)
   NS_INTERFACE_MAP_ENTRY(nsIXULTemplateBuilder)
   NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver)
   NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
   NS_INTERFACE_MAP_ENTRY(nsIObserver)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIXULTemplateBuilder)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XULTemplateBuilder)
 NS_INTERFACE_MAP_END
--- a/content/xul/templates/src/nsXULTreeBuilder.cpp
+++ b/content/xul/templates/src/nsXULTreeBuilder.cpp
@@ -293,16 +293,18 @@ NS_NewXULTreeBuilder(nsISupports* aOuter
 
     NS_RELEASE(result);
     return rv;
 }
 
 NS_IMPL_ADDREF_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
 NS_IMPL_RELEASE_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
 
+DOMCI_DATA(XULTreeBuilder, nsXULTreeBuilder)
+
 NS_INTERFACE_MAP_BEGIN(nsXULTreeBuilder)
   NS_INTERFACE_MAP_ENTRY(nsIXULTreeBuilder)
   NS_INTERFACE_MAP_ENTRY(nsITreeView)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XULTreeBuilder)
 NS_INTERFACE_MAP_END_INHERITING(nsXULTemplateBuilder)
 
 
 nsXULTreeBuilder::nsXULTreeBuilder()
--- a/dom/base/Makefile.in
+++ b/dom/base/Makefile.in
@@ -49,16 +49,17 @@ FORCE_STATIC_LIB = 1
 
 XPIDLSRCS = \
   nsIEntropyCollector.idl \
   nsIScriptChannel.idl \
   $(NULL)
 
 EXPORTS = \
   nsDOMCID.h \
+  nsDOMClassInfoClasses.h \
   nsDOMClassInfoID.h \
   nsDOMError.h \
   nsDOMJSUtils.h \
   nsDOMScriptObjectHolder.h \
   nsDOMString.h \
   nsIBaseDOMException.h \
   nsIDOMClassInfo.h \
   nsIDOMScriptObjectFactory.h \
--- a/dom/base/nsBarProps.cpp
+++ b/dom/base/nsBarProps.cpp
@@ -55,16 +55,18 @@ nsBarProp::nsBarProp() : mBrowserChrome(
 {
 }
 
 nsBarProp::~nsBarProp()
 {
 }
 
 
+DOMCI_DATA(BarProp, nsBarProp)
+
 // QueryInterface implementation for BarProp
 NS_INTERFACE_MAP_BEGIN(nsBarProp)
   NS_INTERFACE_MAP_ENTRY(nsIDOMBarProp)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(BarProp)
 NS_INTERFACE_MAP_END
 
 
--- a/dom/base/nsDOMClassInfo.cpp
+++ b/dom/base/nsDOMClassInfo.cpp
@@ -535,16 +535,26 @@ static const char kDOMStringBundleURL[] 
 #ifdef NS_DEBUG
 #define NS_DEFINE_CLASSINFO_DATA_DEBUG(_class)                                \
     eDOMClassInfo_##_class##_id,
 #else
 #define NS_DEFINE_CLASSINFO_DATA_DEBUG(_class)                                \
   // nothing
 #endif
 
+DOMCI_DATA(Crypto, void)
+DOMCI_DATA(CRMFObject, void)
+DOMCI_DATA(SmartCardEvent, void)
+
+DOMCI_DATA(DOMPrototype, void)
+DOMCI_DATA(DOMConstructor, void)
+
+DOMCI_DATA(Worker, void)
+
+DOMCI_DATA(Notation, void)
 
 #define NS_DEFINE_CLASSINFO_DATA_WITH_NAME(_class, _name, _helper,            \
                                            _flags)                            \
   { #_name,                                                                   \
     nsnull,                                                                   \
     { _helper::doCreate },                                                    \
     nsnull,                                                                   \
     nsnull,                                                                   \
new file mode 100644
--- /dev/null
+++ b/dom/base/nsDOMClassInfoClasses.h
@@ -0,0 +1,472 @@
+/* -*- 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) 2000
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Johnny Stenback <jst@netscape.com> (original author)
+ *
+ * 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 ***** */
+
+DOMCI_CLASS(Window)
+DOMCI_CLASS(Location)
+DOMCI_CLASS(Navigator)
+DOMCI_CLASS(Plugin)
+DOMCI_CLASS(PluginArray)
+DOMCI_CLASS(MimeType)
+DOMCI_CLASS(MimeTypeArray)
+DOMCI_CLASS(BarProp)
+DOMCI_CLASS(History)
+DOMCI_CLASS(Screen)
+DOMCI_CLASS(DOMPrototype)
+DOMCI_CLASS(DOMConstructor)
+
+// Core classes
+DOMCI_CLASS(XMLDocument)
+DOMCI_CLASS(DocumentType)
+DOMCI_CLASS(DOMImplementation)
+DOMCI_CLASS(DOMException)
+DOMCI_CLASS(DOMTokenList)
+DOMCI_CLASS(DocumentFragment)
+DOMCI_CLASS(Element)
+DOMCI_CLASS(Attr)
+DOMCI_CLASS(Text)
+DOMCI_CLASS(Comment)
+DOMCI_CLASS(CDATASection)
+DOMCI_CLASS(ProcessingInstruction)
+DOMCI_CLASS(Notation)
+DOMCI_CLASS(NodeList)
+DOMCI_CLASS(NamedNodeMap)
+
+// Event classes
+DOMCI_CLASS(Event)
+DOMCI_CLASS(MutationEvent)
+DOMCI_CLASS(UIEvent)
+DOMCI_CLASS(MouseEvent)
+DOMCI_CLASS(MouseScrollEvent)
+DOMCI_CLASS(DragEvent)
+DOMCI_CLASS(KeyboardEvent)
+DOMCI_CLASS(PopupBlockedEvent)
+DOMCI_CLASS(OrientationEvent)
+
+// HTML classes
+DOMCI_CLASS(HTMLDocument)
+DOMCI_CLASS(HTMLOptionsCollection)
+DOMCI_CLASS(HTMLCollection)
+
+// HTML element classes
+DOMCI_CLASS(HTMLAnchorElement)
+DOMCI_CLASS(HTMLAppletElement)
+DOMCI_CLASS(HTMLAreaElement)
+DOMCI_CLASS(HTMLBRElement)
+DOMCI_CLASS(HTMLBaseElement)
+DOMCI_CLASS(HTMLBaseFontElement)
+DOMCI_CLASS(HTMLBodyElement)
+DOMCI_CLASS(HTMLButtonElement)
+DOMCI_CLASS(HTMLDListElement)
+DOMCI_CLASS(HTMLDelElement)
+DOMCI_CLASS(HTMLDirectoryElement)
+DOMCI_CLASS(HTMLDivElement)
+DOMCI_CLASS(HTMLEmbedElement)
+DOMCI_CLASS(HTMLFieldSetElement)
+DOMCI_CLASS(HTMLFontElement)
+DOMCI_CLASS(HTMLFormElement)
+DOMCI_CLASS(HTMLFrameElement)
+DOMCI_CLASS(HTMLFrameSetElement)
+DOMCI_CLASS(HTMLHRElement)
+DOMCI_CLASS(HTMLHeadElement)
+DOMCI_CLASS(HTMLHeadingElement)
+DOMCI_CLASS(HTMLHtmlElement)
+DOMCI_CLASS(HTMLIFrameElement)
+DOMCI_CLASS(HTMLImageElement)
+DOMCI_CLASS(HTMLInputElement)
+DOMCI_CLASS(HTMLInsElement)
+DOMCI_CLASS(HTMLIsIndexElement)
+DOMCI_CLASS(HTMLLIElement)
+DOMCI_CLASS(HTMLLabelElement)
+DOMCI_CLASS(HTMLLegendElement)
+DOMCI_CLASS(HTMLLinkElement)
+DOMCI_CLASS(HTMLMapElement)
+DOMCI_CLASS(HTMLMenuElement)
+DOMCI_CLASS(HTMLMetaElement)
+DOMCI_CLASS(HTMLOListElement)
+DOMCI_CLASS(HTMLObjectElement)
+DOMCI_CLASS(HTMLOptGroupElement)
+DOMCI_CLASS(HTMLOptionElement)
+DOMCI_CLASS(HTMLParagraphElement)
+DOMCI_CLASS(HTMLParamElement)
+DOMCI_CLASS(HTMLPreElement)
+DOMCI_CLASS(HTMLQuoteElement)
+DOMCI_CLASS(HTMLScriptElement)
+DOMCI_CLASS(HTMLSelectElement)
+DOMCI_CLASS(HTMLSpacerElement)
+DOMCI_CLASS(HTMLSpanElement)
+DOMCI_CLASS(HTMLStyleElement)
+DOMCI_CLASS(HTMLTableCaptionElement)
+DOMCI_CLASS(HTMLTableCellElement)
+DOMCI_CLASS(HTMLTableColElement)
+DOMCI_CLASS(HTMLTableElement)
+DOMCI_CLASS(HTMLTableRowElement)
+DOMCI_CLASS(HTMLTableSectionElement)
+DOMCI_CLASS(HTMLTextAreaElement)
+DOMCI_CLASS(HTMLTitleElement)
+DOMCI_CLASS(HTMLUListElement)
+DOMCI_CLASS(HTMLUnknownElement)
+DOMCI_CLASS(HTMLWBRElement)
+
+// CSS classes
+DOMCI_CLASS(CSSStyleRule)
+DOMCI_CLASS(CSSCharsetRule)
+DOMCI_CLASS(CSSImportRule)
+DOMCI_CLASS(CSSMediaRule)
+DOMCI_CLASS(CSSNameSpaceRule)
+DOMCI_CLASS(CSSRuleList)
+DOMCI_CLASS(CSSGroupRuleRuleList)
+DOMCI_CLASS(MediaList)
+DOMCI_CLASS(StyleSheetList)
+DOMCI_CLASS(CSSStyleSheet)
+DOMCI_CLASS(CSSStyleDeclaration)
+DOMCI_CLASS(ComputedCSSStyleDeclaration)
+DOMCI_CLASS(ROCSSPrimitiveValue)
+
+// Range classes
+DOMCI_CLASS(Range)
+DOMCI_CLASS(Selection)
+
+// XUL classes
+#ifdef MOZ_XUL
+DOMCI_CLASS(XULDocument)
+DOMCI_CLASS(XULElement)
+DOMCI_CLASS(XULCommandDispatcher)
+#endif
+DOMCI_CLASS(XULControllers)
+DOMCI_CLASS(BoxObject)
+#ifdef MOZ_XUL
+DOMCI_CLASS(TreeSelection)
+DOMCI_CLASS(TreeContentView)
+#endif
+
+// Crypto classes
+DOMCI_CLASS(Crypto)
+DOMCI_CLASS(CRMFObject)
+  
+// DOM Traversal classes
+DOMCI_CLASS(TreeWalker)
+
+// Rect object used by getComputedStyle
+DOMCI_CLASS(CSSRect)
+
+// DOM Chrome Window class, almost identical to Window
+DOMCI_CLASS(ChromeWindow)
+
+// RGBColor object used by getComputedStyle
+DOMCI_CLASS(CSSRGBColor)
+
+DOMCI_CLASS(RangeException)
+
+// CSSValueList object that represents an nsIDOMCSSValueList, used
+// by DOM CSS
+DOMCI_CLASS(CSSValueList)
+
+// ContentList object used for various live NodeLists
+DOMCI_CLASS(ContentList)
+  
+// Processing-instruction with target "xml-stylesheet"
+DOMCI_CLASS(XMLStylesheetProcessingInstruction)
+  
+DOMCI_CLASS(ImageDocument)
+
+#ifdef MOZ_XUL
+DOMCI_CLASS(XULTemplateBuilder)
+DOMCI_CLASS(XULTreeBuilder)
+#endif
+
+// DOMStringList object
+DOMCI_CLASS(DOMStringList)
+
+// NameList object used by the DOM
+DOMCI_CLASS(NameList)
+
+#ifdef MOZ_XUL
+DOMCI_CLASS(TreeColumn)
+DOMCI_CLASS(TreeColumns)
+#endif
+
+DOMCI_CLASS(CSSMozDocumentRule)
+
+DOMCI_CLASS(BeforeUnloadEvent)
+
+#ifdef MOZ_SVG
+// The SVG document
+DOMCI_CLASS(SVGDocument)
+
+// SVG element classes
+DOMCI_CLASS(SVGAElement)
+#ifdef MOZ_SMIL
+DOMCI_CLASS(SVGAnimateElement)
+DOMCI_CLASS(SVGAnimateTransformElement)
+DOMCI_CLASS(SVGSetElement)
+#endif // MOZ_SMIL
+DOMCI_CLASS(SVGCircleElement)
+DOMCI_CLASS(SVGClipPathElement)
+DOMCI_CLASS(SVGDefsElement)
+DOMCI_CLASS(SVGDescElement)
+DOMCI_CLASS(SVGEllipseElement)
+DOMCI_CLASS(SVGFEBlendElement)
+DOMCI_CLASS(SVGFEColorMatrixElement)
+DOMCI_CLASS(SVGFEComponentTransferElement)
+DOMCI_CLASS(SVGFECompositeElement)
+DOMCI_CLASS(SVGFEConvolveMatrixElement)
+DOMCI_CLASS(SVGFEDiffuseLightingElement)
+DOMCI_CLASS(SVGFEDisplacementMapElement)
+DOMCI_CLASS(SVGFEDistantLightElement)
+DOMCI_CLASS(SVGFEFloodElement)
+DOMCI_CLASS(SVGFEFuncAElement)
+DOMCI_CLASS(SVGFEFuncBElement)
+DOMCI_CLASS(SVGFEFuncGElement)
+DOMCI_CLASS(SVGFEFuncRElement)
+DOMCI_CLASS(SVGFEGaussianBlurElement)
+DOMCI_CLASS(SVGFEImageElement)
+DOMCI_CLASS(SVGFEMergeElement)
+DOMCI_CLASS(SVGFEMergeNodeElement)
+DOMCI_CLASS(SVGFEMorphologyElement)
+DOMCI_CLASS(SVGFEOffsetElement)
+DOMCI_CLASS(SVGFEPointLightElement)
+DOMCI_CLASS(SVGFESpecularLightingElement)
+DOMCI_CLASS(SVGFESpotLightElement)
+DOMCI_CLASS(SVGFETileElement)
+DOMCI_CLASS(SVGFETurbulenceElement)
+DOMCI_CLASS(SVGFilterElement)
+DOMCI_CLASS(SVGGElement)
+DOMCI_CLASS(SVGImageElement)
+DOMCI_CLASS(SVGLinearGradientElement)
+DOMCI_CLASS(SVGLineElement)
+DOMCI_CLASS(SVGMarkerElement)
+DOMCI_CLASS(SVGMaskElement)
+DOMCI_CLASS(SVGMetadataElement)
+DOMCI_CLASS(SVGPathElement)
+DOMCI_CLASS(SVGPatternElement)
+DOMCI_CLASS(SVGPolygonElement)
+DOMCI_CLASS(SVGPolylineElement)
+DOMCI_CLASS(SVGRadialGradientElement)
+DOMCI_CLASS(SVGRectElement)
+DOMCI_CLASS(SVGScriptElement)
+DOMCI_CLASS(SVGStopElement)
+DOMCI_CLASS(SVGStyleElement)
+DOMCI_CLASS(SVGSVGElement)
+DOMCI_CLASS(SVGSwitchElement)
+DOMCI_CLASS(SVGSymbolElement)
+DOMCI_CLASS(SVGTextElement)
+DOMCI_CLASS(SVGTextPathElement)
+DOMCI_CLASS(SVGTitleElement)
+DOMCI_CLASS(SVGTSpanElement)
+DOMCI_CLASS(SVGUseElement)
+
+// other SVG classes
+DOMCI_CLASS(SVGAngle)
+DOMCI_CLASS(SVGAnimatedAngle)
+DOMCI_CLASS(SVGAnimatedBoolean)
+DOMCI_CLASS(SVGAnimatedEnumeration)
+DOMCI_CLASS(SVGAnimatedInteger)
+DOMCI_CLASS(SVGAnimatedLength)
+DOMCI_CLASS(SVGAnimatedLengthList)
+DOMCI_CLASS(SVGAnimatedNumber)
+DOMCI_CLASS(SVGAnimatedNumberList)
+DOMCI_CLASS(SVGAnimatedPreserveAspectRatio)
+DOMCI_CLASS(SVGAnimatedRect)
+DOMCI_CLASS(SVGAnimatedString)
+DOMCI_CLASS(SVGAnimatedTransformList)
+DOMCI_CLASS(SVGEvent)
+DOMCI_CLASS(SVGException)
+DOMCI_CLASS(SVGLength)
+DOMCI_CLASS(SVGLengthList)
+DOMCI_CLASS(SVGMatrix)
+DOMCI_CLASS(SVGNumber)
+DOMCI_CLASS(SVGNumberList)
+DOMCI_CLASS(SVGPathSegArcAbs)
+DOMCI_CLASS(SVGPathSegArcRel)
+DOMCI_CLASS(SVGPathSegClosePath)
+DOMCI_CLASS(SVGPathSegCurvetoCubicAbs)
+DOMCI_CLASS(SVGPathSegCurvetoCubicRel)
+DOMCI_CLASS(SVGPathSegCurvetoCubicSmoothAbs)
+DOMCI_CLASS(SVGPathSegCurvetoCubicSmoothRel)
+DOMCI_CLASS(SVGPathSegCurvetoQuadraticAbs)
+DOMCI_CLASS(SVGPathSegCurvetoQuadraticRel)
+DOMCI_CLASS(SVGPathSegCurvetoQuadraticSmoothAbs)
+DOMCI_CLASS(SVGPathSegCurvetoQuadraticSmoothRel)
+DOMCI_CLASS(SVGPathSegLinetoAbs)
+DOMCI_CLASS(SVGPathSegLinetoHorizontalAbs)
+DOMCI_CLASS(SVGPathSegLinetoHorizontalRel)
+DOMCI_CLASS(SVGPathSegLinetoRel)
+DOMCI_CLASS(SVGPathSegLinetoVerticalAbs)
+DOMCI_CLASS(SVGPathSegLinetoVerticalRel)
+DOMCI_CLASS(SVGPathSegList)
+DOMCI_CLASS(SVGPathSegMovetoAbs)
+DOMCI_CLASS(SVGPathSegMovetoRel)
+DOMCI_CLASS(SVGPoint)
+DOMCI_CLASS(SVGPointList)
+DOMCI_CLASS(SVGPreserveAspectRatio)
+DOMCI_CLASS(SVGRect)
+DOMCI_CLASS(SVGTransform)
+DOMCI_CLASS(SVGTransformList)
+DOMCI_CLASS(SVGZoomEvent)
+#endif // MOZ_SVG
+
+// Canvas
+DOMCI_CLASS(HTMLCanvasElement)
+DOMCI_CLASS(CanvasRenderingContext2D)
+DOMCI_CLASS(CanvasGradient)
+DOMCI_CLASS(CanvasPattern)
+DOMCI_CLASS(TextMetrics)
+
+// SmartCard Events
+DOMCI_CLASS(SmartCardEvent)
+  
+// PageTransition Events
+DOMCI_CLASS(PageTransitionEvent)
+
+// WindowUtils
+DOMCI_CLASS(WindowUtils)
+
+// XSLTProcessor
+DOMCI_CLASS(XSLTProcessor)
+
+// DOM Level 3 XPath objects
+DOMCI_CLASS(XPathEvaluator)
+DOMCI_CLASS(XPathException)
+DOMCI_CLASS(XPathExpression)
+DOMCI_CLASS(XPathNSResolver)
+DOMCI_CLASS(XPathResult)
+
+// WhatWG WebApps Objects
+DOMCI_CLASS(StorageObsolete)
+DOMCI_CLASS(Storage)
+DOMCI_CLASS(StorageList)
+DOMCI_CLASS(StorageItem)
+DOMCI_CLASS(StorageEvent)
+DOMCI_CLASS(StorageEventObsolete)
+
+// DOMParser, XMLSerializer
+DOMCI_CLASS(DOMParser)
+DOMCI_CLASS(XMLSerializer)
+
+// XMLHttpRequest
+DOMCI_CLASS(XMLHttpProgressEvent)
+DOMCI_CLASS(XMLHttpRequest)
+
+DOMCI_CLASS(ClientRect)
+DOMCI_CLASS(ClientRectList)
+
+// We are now trying to preserve binary compat in classinfo.  No more
+// putting things in those categories up there.  New entries are to be
+// added here, which is the end of the things that are currently on by
+// default.
+
+#ifdef MOZ_SVG
+DOMCI_CLASS(SVGForeignObjectElement)
+#endif
+
+DOMCI_CLASS(XULCommandEvent)
+DOMCI_CLASS(CommandEvent)
+DOMCI_CLASS(OfflineResourceList)
+
+DOMCI_CLASS(FileList)
+DOMCI_CLASS(File)
+DOMCI_CLASS(FileException)
+DOMCI_CLASS(FileError)
+DOMCI_CLASS(FileReader)
+
+// DOM modal content window class, almost identical to Window
+DOMCI_CLASS(ModalContentWindow)
+
+// Data Events
+DOMCI_CLASS(DataContainerEvent)
+
+// event used for cross-domain message-passing and for server-sent events in
+// HTML5
+DOMCI_CLASS(MessageEvent)
+
+// Geolocation
+DOMCI_CLASS(GeoGeolocation)
+DOMCI_CLASS(GeoPosition)
+DOMCI_CLASS(GeoPositionCoords)
+DOMCI_CLASS(GeoPositionError)
+
+// @font-face in CSS
+DOMCI_CLASS(CSSFontFaceRule)
+DOMCI_CLASS(CSSFontFaceStyleDecl)
+
+// WhatWG Video Element
+DOMCI_CLASS(HTMLVideoElement)
+DOMCI_CLASS(HTMLSourceElement)
+DOMCI_CLASS(HTMLMediaError)
+DOMCI_CLASS(HTMLAudioElement)
+
+DOMCI_CLASS(ProgressEvent)
+
+DOMCI_CLASS(XMLHttpRequestUpload)
+
+// DOM Traversal NodeIterator class
+DOMCI_CLASS(NodeIterator)
+
+DOMCI_CLASS(DataTransfer)
+
+DOMCI_CLASS(NotifyPaintEvent)
+
+DOMCI_CLASS(SimpleGestureEvent)
+
+#ifdef MOZ_MATHML
+DOMCI_CLASS(MathMLElement)
+#endif
+
+DOMCI_CLASS(Worker)
+
+// WebGL
+DOMCI_CLASS(CanvasRenderingContextWebGL)
+DOMCI_CLASS(WebGLBuffer)
+DOMCI_CLASS(WebGLTexture)
+DOMCI_CLASS(WebGLProgram)
+DOMCI_CLASS(WebGLShader)
+DOMCI_CLASS(WebGLFramebuffer)
+DOMCI_CLASS(WebGLRenderbuffer)
+
+// WebGL Buffers
+DOMCI_CLASS(PaintRequest)
+DOMCI_CLASS(PaintRequestList)
+
+DOMCI_CLASS(ScrollAreaEvent)
+DOMCI_CLASS(PopStateEvent)
+
+DOMCI_CLASS(EventListenerInfo)
+
+DOMCI_CLASS(TransitionEvent)
+
+DOMCI_CLASS(FormData)
--- a/dom/base/nsDOMClassInfoID.h
+++ b/dom/base/nsDOMClassInfoID.h
@@ -39,462 +39,37 @@
 /**
  * This file defines enum values for all of the DOM objects which have
  * an entry in nsDOMClassInfo.
  */
 
 #ifndef nsDOMClassInfoID_h__
 #define nsDOMClassInfoID_h__
 
-enum nsDOMClassInfoID {
-  // Base classes
-  eDOMClassInfo_Window_id,
-  eDOMClassInfo_Location_id,
-  eDOMClassInfo_Navigator_id,
-  eDOMClassInfo_Plugin_id,
-  eDOMClassInfo_PluginArray_id,
-  eDOMClassInfo_MimeType_id,
-  eDOMClassInfo_MimeTypeArray_id,
-  eDOMClassInfo_BarProp_id,
-  eDOMClassInfo_History_id,
-  eDOMClassInfo_Screen_id,
-  eDOMClassInfo_DOMPrototype_id,
-  eDOMClassInfo_DOMConstructor_id,
-
-  // Core classes
-  eDOMClassInfo_XMLDocument_id,
-  eDOMClassInfo_DocumentType_id,
-  eDOMClassInfo_DOMImplementation_id,
-  eDOMClassInfo_DOMException_id,
-  eDOMClassInfo_DOMTokenList_id,
-  eDOMClassInfo_DocumentFragment_id,
-  eDOMClassInfo_Element_id,
-  eDOMClassInfo_Attr_id,
-  eDOMClassInfo_Text_id,
-  eDOMClassInfo_Comment_id,
-  eDOMClassInfo_CDATASection_id,
-  eDOMClassInfo_ProcessingInstruction_id,
-  eDOMClassInfo_Notation_id,
-  eDOMClassInfo_NodeList_id,
-  eDOMClassInfo_NamedNodeMap_id,
-
-  // Event classes
-  eDOMClassInfo_Event_id,
-  eDOMClassInfo_MutationEvent_id,
-  eDOMClassInfo_UIEvent_id,
-  eDOMClassInfo_MouseEvent_id,
-  eDOMClassInfo_MouseScrollEvent_id,
-  eDOMClassInfo_DragEvent_id,
-  eDOMClassInfo_KeyboardEvent_id,
-  eDOMClassInfo_PopupBlockedEvent_id,
-  eDOMClassInfo_OrientationEvent_id,
-
-  // HTML classes
-  eDOMClassInfo_HTMLDocument_id,
-  eDOMClassInfo_HTMLOptionsCollection_id,
-  eDOMClassInfo_HTMLCollection_id,
-
-  // HTML element classes
-  eDOMClassInfo_HTMLAnchorElement_id,
-  eDOMClassInfo_HTMLAppletElement_id,
-  eDOMClassInfo_HTMLAreaElement_id,
-  eDOMClassInfo_HTMLBRElement_id,
-  eDOMClassInfo_HTMLBaseElement_id,
-  eDOMClassInfo_HTMLBaseFontElement_id,
-  eDOMClassInfo_HTMLBodyElement_id,
-  eDOMClassInfo_HTMLButtonElement_id,
-  eDOMClassInfo_HTMLDListElement_id,
-  eDOMClassInfo_HTMLDelElement_id,
-  eDOMClassInfo_HTMLDirectoryElement_id,
-  eDOMClassInfo_HTMLDivElement_id,
-  eDOMClassInfo_HTMLEmbedElement_id,
-  eDOMClassInfo_HTMLFieldSetElement_id,
-  eDOMClassInfo_HTMLFontElement_id,
-  eDOMClassInfo_HTMLFormElement_id,
-  eDOMClassInfo_HTMLFrameElement_id,
-  eDOMClassInfo_HTMLFrameSetElement_id,
-  eDOMClassInfo_HTMLHRElement_id,
-  eDOMClassInfo_HTMLHeadElement_id,
-  eDOMClassInfo_HTMLHeadingElement_id,
-  eDOMClassInfo_HTMLHtmlElement_id,
-  eDOMClassInfo_HTMLIFrameElement_id,
-  eDOMClassInfo_HTMLImageElement_id,
-  eDOMClassInfo_HTMLInputElement_id,
-  eDOMClassInfo_HTMLInsElement_id,
-  eDOMClassInfo_HTMLIsIndexElement_id,
-  eDOMClassInfo_HTMLLIElement_id,
-  eDOMClassInfo_HTMLLabelElement_id,
-  eDOMClassInfo_HTMLLegendElement_id,
-  eDOMClassInfo_HTMLLinkElement_id,
-  eDOMClassInfo_HTMLMapElement_id,
-  eDOMClassInfo_HTMLMenuElement_id,
-  eDOMClassInfo_HTMLMetaElement_id,
-  eDOMClassInfo_HTMLOListElement_id,
-  eDOMClassInfo_HTMLObjectElement_id,
-  eDOMClassInfo_HTMLOptGroupElement_id,
-  eDOMClassInfo_HTMLOptionElement_id,
-  eDOMClassInfo_HTMLParagraphElement_id,
-  eDOMClassInfo_HTMLParamElement_id,
-  eDOMClassInfo_HTMLPreElement_id,
-  eDOMClassInfo_HTMLQuoteElement_id,
-  eDOMClassInfo_HTMLScriptElement_id,
-  eDOMClassInfo_HTMLSelectElement_id,
-  eDOMClassInfo_HTMLSpacerElement_id,
-  eDOMClassInfo_HTMLSpanElement_id,
-  eDOMClassInfo_HTMLStyleElement_id,
-  eDOMClassInfo_HTMLTableCaptionElement_id,
-  eDOMClassInfo_HTMLTableCellElement_id,
-  eDOMClassInfo_HTMLTableColElement_id,
-  eDOMClassInfo_HTMLTableElement_id,
-  eDOMClassInfo_HTMLTableRowElement_id,
-  eDOMClassInfo_HTMLTableSectionElement_id,
-  eDOMClassInfo_HTMLTextAreaElement_id,
-  eDOMClassInfo_HTMLTitleElement_id,
-  eDOMClassInfo_HTMLUListElement_id,
-  eDOMClassInfo_HTMLUnknownElement_id,
-  eDOMClassInfo_HTMLWBRElement_id,
-
-  // CSS classes
-  eDOMClassInfo_CSSStyleRule_id,
-  eDOMClassInfo_CSSCharsetRule_id,
-  eDOMClassInfo_CSSImportRule_id,
-  eDOMClassInfo_CSSMediaRule_id,
-  eDOMClassInfo_CSSNameSpaceRule_id,
-  eDOMClassInfo_CSSRuleList_id,
-  eDOMClassInfo_CSSGroupRuleRuleList_id,
-  eDOMClassInfo_MediaList_id,
-  eDOMClassInfo_StyleSheetList_id,
-  eDOMClassInfo_CSSStyleSheet_id,
-  eDOMClassInfo_CSSStyleDeclaration_id,
-  eDOMClassInfo_ComputedCSSStyleDeclaration_id,
-  eDOMClassInfo_ROCSSPrimitiveValue_id,
-
-  // Range classes
-  eDOMClassInfo_Range_id,
-  eDOMClassInfo_Selection_id,
-
-  // XUL classes
-#ifdef MOZ_XUL
-  eDOMClassInfo_XULDocument_id,
-  eDOMClassInfo_XULElement_id,
-  eDOMClassInfo_XULCommandDispatcher_id,
-#endif
-  eDOMClassInfo_XULControllers_id,
-  eDOMClassInfo_BoxObject_id,
-#ifdef MOZ_XUL
-  eDOMClassInfo_TreeSelection_id,
-  eDOMClassInfo_TreeContentView_id,
-#endif
-
-  // Crypto classes
-  eDOMClassInfo_Crypto_id,
-  eDOMClassInfo_CRMFObject_id,
-  
-  // DOM Traversal classes
-  eDOMClassInfo_TreeWalker_id,
-
-  // Rect object used by getComputedStyle
-  eDOMClassInfo_CSSRect_id,
-
-  // DOM Chrome Window class, almost identical to Window
-  eDOMClassInfo_ChromeWindow_id,
-
-  // RGBColor object used by getComputedStyle
-  eDOMClassInfo_CSSRGBColor_id,
-
-  eDOMClassInfo_RangeException_id,
-
-  // CSSValueList object that represents an nsIDOMCSSValueList, used
-  // by DOM CSS
-  eDOMClassInfo_CSSValueList_id,
-
-  // ContentList object used for various live NodeLists
-  eDOMClassInfo_ContentList_id,
-  
-  // Processing-instruction with target "xml-stylesheet"
-  eDOMClassInfo_XMLStylesheetProcessingInstruction_id,
-  
-  eDOMClassInfo_ImageDocument_id,
-
-#ifdef MOZ_XUL
-  eDOMClassInfo_XULTemplateBuilder_id,
-  eDOMClassInfo_XULTreeBuilder_id,
-#endif
-
-  // DOMStringList object
-  eDOMClassInfo_DOMStringList_id,
-
-  // NameList object used by the DOM
-  eDOMClassInfo_NameList_id,
-
-#ifdef MOZ_XUL
-  eDOMClassInfo_TreeColumn_id,
-  eDOMClassInfo_TreeColumns_id,
-#endif
-
-  eDOMClassInfo_CSSMozDocumentRule_id,
-
-  eDOMClassInfo_BeforeUnloadEvent_id,
-
-#ifdef MOZ_SVG
-  // The SVG document
-  eDOMClassInfo_SVGDocument_id,
+#define DOMCI_CLASS(_dom_class) \
+  eDOMClassInfo_##_dom_class##_id,
 
-  // SVG element classes
-  eDOMClassInfo_SVGAElement_id,
-#ifdef MOZ_SMIL
-  eDOMClassInfo_SVGAnimateElement_id,
-  eDOMClassInfo_SVGAnimateTransformElement_id,
-  eDOMClassInfo_SVGSetElement_id,
-#endif // MOZ_SMIL
-  eDOMClassInfo_SVGCircleElement_id,
-  eDOMClassInfo_SVGClipPathElement_id,
-  eDOMClassInfo_SVGDefsElement_id,
-  eDOMClassInfo_SVGDescElement_id,
-  eDOMClassInfo_SVGEllipseElement_id,
-  eDOMClassInfo_SVGFEBlendElement_id,
-  eDOMClassInfo_SVGFEColorMatrixElement_id,
-  eDOMClassInfo_SVGFEComponentTransferElement_id,
-  eDOMClassInfo_SVGFECompositeElement_id,
-  eDOMClassInfo_SVGFEConvolveMatrixElement_id,
-  eDOMClassInfo_SVGFEDiffuseLightingElement_id,
-  eDOMClassInfo_SVGFEDisplacementMapElement_id,
-  eDOMClassInfo_SVGFEDistantLightElement_id,
-  eDOMClassInfo_SVGFEFloodElement_id,
-  eDOMClassInfo_SVGFEFuncAElement_id,
-  eDOMClassInfo_SVGFEFuncBElement_id,
-  eDOMClassInfo_SVGFEFuncGElement_id,
-  eDOMClassInfo_SVGFEFuncRElement_id,
-  eDOMClassInfo_SVGFEGaussianBlurElement_id,
-  eDOMClassInfo_SVGFEImageElement_id,
-  eDOMClassInfo_SVGFEMergeElement_id,
-  eDOMClassInfo_SVGFEMergeNodeElement_id,
-  eDOMClassInfo_SVGFEMorphologyElement_id,
-  eDOMClassInfo_SVGFEOffsetElement_id,
-  eDOMClassInfo_SVGFEPointLightElement_id,
-  eDOMClassInfo_SVGFESpecularLightingElement_id,
-  eDOMClassInfo_SVGFESpotLightElement_id,
-  eDOMClassInfo_SVGFETileElement_id,
-  eDOMClassInfo_SVGFETurbulenceElement_id,
-  eDOMClassInfo_SVGFilterElement_id,
-  eDOMClassInfo_SVGGElement_id,
-  eDOMClassInfo_SVGImageElement_id,
-  eDOMClassInfo_SVGLinearGradientElement_id,
-  eDOMClassInfo_SVGLineElement_id,
-  eDOMClassInfo_SVGMarkerElement_id,
-  eDOMClassInfo_SVGMaskElement_id,
-  eDOMClassInfo_SVGMetadataElement_id,
-  eDOMClassInfo_SVGPathElement_id,
-  eDOMClassInfo_SVGPatternElement_id,
-  eDOMClassInfo_SVGPolygonElement_id,
-  eDOMClassInfo_SVGPolylineElement_id,
-  eDOMClassInfo_SVGRadialGradientElement_id,
-  eDOMClassInfo_SVGRectElement_id,
-  eDOMClassInfo_SVGScriptElement_id,
-  eDOMClassInfo_SVGStopElement_id,
-  eDOMClassInfo_SVGStyleElement_id,
-  eDOMClassInfo_SVGSVGElement_id,
-  eDOMClassInfo_SVGSwitchElement_id,
-  eDOMClassInfo_SVGSymbolElement_id,
-  eDOMClassInfo_SVGTextElement_id,
-  eDOMClassInfo_SVGTextPathElement_id,
-  eDOMClassInfo_SVGTitleElement_id,
-  eDOMClassInfo_SVGTSpanElement_id,
-  eDOMClassInfo_SVGUseElement_id,
-
-  // other SVG classes
-  eDOMClassInfo_SVGAngle_id,
-  eDOMClassInfo_SVGAnimatedAngle_id,
-  eDOMClassInfo_SVGAnimatedBoolean_id,
-  eDOMClassInfo_SVGAnimatedEnumeration_id,
-  eDOMClassInfo_SVGAnimatedInteger_id,
-  eDOMClassInfo_SVGAnimatedLength_id,
-  eDOMClassInfo_SVGAnimatedLengthList_id,
-  eDOMClassInfo_SVGAnimatedNumber_id,
-  eDOMClassInfo_SVGAnimatedNumberList_id,
-  eDOMClassInfo_SVGAnimatedPreserveAspectRatio_id,
-  eDOMClassInfo_SVGAnimatedRect_id,
-  eDOMClassInfo_SVGAnimatedString_id,
-  eDOMClassInfo_SVGAnimatedTransformList_id,
-  eDOMClassInfo_SVGEvent_id,
-  eDOMClassInfo_SVGException_id,
-  eDOMClassInfo_SVGLength_id,
-  eDOMClassInfo_SVGLengthList_id,
-  eDOMClassInfo_SVGMatrix_id,
-  eDOMClassInfo_SVGNumber_id,
-  eDOMClassInfo_SVGNumberList_id,
-  eDOMClassInfo_SVGPathSegArcAbs_id,
-  eDOMClassInfo_SVGPathSegArcRel_id,
-  eDOMClassInfo_SVGPathSegClosePath_id,
-  eDOMClassInfo_SVGPathSegCurvetoCubicAbs_id,
-  eDOMClassInfo_SVGPathSegCurvetoCubicRel_id,
-  eDOMClassInfo_SVGPathSegCurvetoCubicSmoothAbs_id,
-  eDOMClassInfo_SVGPathSegCurvetoCubicSmoothRel_id,
-  eDOMClassInfo_SVGPathSegCurvetoQuadraticAbs_id,
-  eDOMClassInfo_SVGPathSegCurvetoQuadraticRel_id,
-  eDOMClassInfo_SVGPathSegCurvetoQuadraticSmoothAbs_id,
-  eDOMClassInfo_SVGPathSegCurvetoQuadraticSmoothRel_id,
-  eDOMClassInfo_SVGPathSegLinetoAbs_id,
-  eDOMClassInfo_SVGPathSegLinetoHorizontalAbs_id,
-  eDOMClassInfo_SVGPathSegLinetoHorizontalRel_id,
-  eDOMClassInfo_SVGPathSegLinetoRel_id,
-  eDOMClassInfo_SVGPathSegLinetoVerticalAbs_id,
-  eDOMClassInfo_SVGPathSegLinetoVerticalRel_id,
-  eDOMClassInfo_SVGPathSegList_id,
-  eDOMClassInfo_SVGPathSegMovetoAbs_id,
-  eDOMClassInfo_SVGPathSegMovetoRel_id,
-  eDOMClassInfo_SVGPoint_id,
-  eDOMClassInfo_SVGPointList_id,
-  eDOMClassInfo_SVGPreserveAspectRatio_id,
-  eDOMClassInfo_SVGRect_id,
-  eDOMClassInfo_SVGTransform_id,
-  eDOMClassInfo_SVGTransformList_id,
-  eDOMClassInfo_SVGZoomEvent_id,
-#endif // MOZ_SVG
-
-  // Canvas
-  eDOMClassInfo_HTMLCanvasElement_id,
-  eDOMClassInfo_CanvasRenderingContext2D_id,
-  eDOMClassInfo_CanvasGradient_id,
-  eDOMClassInfo_CanvasPattern_id,
-  eDOMClassInfo_TextMetrics_id,
+enum nsDOMClassInfoID {
 
-  // SmartCard Events
-  eDOMClassInfo_SmartCardEvent_id,
-  
-  // PageTransition Events
-  eDOMClassInfo_PageTransitionEvent_id,
-
-  // WindowUtils
-  eDOMClassInfo_WindowUtils_id,
-
-  // XSLTProcessor
-  eDOMClassInfo_XSLTProcessor_id,
-
-  // DOM Level 3 XPath objects
-  eDOMClassInfo_XPathEvaluator_id,
-  eDOMClassInfo_XPathException_id,
-  eDOMClassInfo_XPathExpression_id,
-  eDOMClassInfo_XPathNSResolver_id,
-  eDOMClassInfo_XPathResult_id,
-
-  // WhatWG WebApps Objects
-  eDOMClassInfo_StorageObsolete_id,
-  eDOMClassInfo_Storage_id,
-  eDOMClassInfo_StorageList_id,
-  eDOMClassInfo_StorageItem_id,
-  eDOMClassInfo_StorageEvent_id,
-  eDOMClassInfo_StorageEventObsolete_id,
-
-  // DOMParser, XMLSerializer
-  eDOMClassInfo_DOMParser_id,
-  eDOMClassInfo_XMLSerializer_id,
-
-  // XMLHttpRequest
-  eDOMClassInfo_XMLHttpProgressEvent_id,
-  eDOMClassInfo_XMLHttpRequest_id,
-
-  eDOMClassInfo_ClientRect_id,
-  eDOMClassInfo_ClientRectList_id,
-
-  // We are now trying to preserve binary compat in classinfo.  No more
-  // putting things in those categories up there.  New entries are to be
-  // added here, which is the end of the things that are currently on by
-  // default.
-
-#ifdef MOZ_SVG
-  eDOMClassInfo_SVGForeignObjectElement_id,
-#endif
-
-  eDOMClassInfo_XULCommandEvent_id,
-  eDOMClassInfo_CommandEvent_id,
-  eDOMClassInfo_OfflineResourceList_id,
-
-  eDOMClassInfo_FileList_id,
-  eDOMClassInfo_File_id,
-  eDOMClassInfo_FileException_id,
-  eDOMClassInfo_FileError_id,
-  eDOMClassInfo_FileReader_id,
-
-  // DOM modal content window class, almost identical to Window
-  eDOMClassInfo_ModalContentWindow_id,
-
-  // Data Events
-  eDOMClassInfo_DataContainerEvent_id,
-
-  // event used for cross-domain message-passing and for server-sent events in
-  // HTML5
-  eDOMClassInfo_MessageEvent_id,
-
-  // Geolocation
-  eDOMClassInfo_GeoGeolocation_id,
-  eDOMClassInfo_GeoPosition_id,
-  eDOMClassInfo_GeoPositionCoords_id,
-  eDOMClassInfo_GeoPositionError_id,
-
-  // @font-face in CSS
-  eDOMClassInfo_CSSFontFaceRule_id,
-  eDOMClassInfo_CSSFontFaceStyleDecl_id,
-
-  // WhatWG Video Element
-  eDOMClassInfo_HTMLVideoElement_id,
-  eDOMClassInfo_HTMLSourceElement_id,
-  eDOMClassInfo_HTMLMediaError_id,
-  eDOMClassInfo_HTMLAudioElement_id,
-
-  eDOMClassInfo_ProgressEvent_id,
-
-  eDOMClassInfo_XMLHttpRequestUpload_id,
-
-  // DOM Traversal NodeIterator class
-  eDOMClassInfo_NodeIterator_id,
-
-  eDOMClassInfo_DataTransfer_id,
-
-  eDOMClassInfo_NotifyPaintEvent_id,
-
-  eDOMClassInfo_SimpleGestureEvent_id,
-
-#ifdef MOZ_MATHML
-  eDOMClassInfo_MathMLElement_id,
-#endif
-
-  eDOMClassInfo_Worker_id,
-
-  // WebGL
-  eDOMClassInfo_CanvasRenderingContextWebGL_id,
-  eDOMClassInfo_WebGLBuffer_id,
-  eDOMClassInfo_WebGLTexture_id,
-  eDOMClassInfo_WebGLProgram_id,
-  eDOMClassInfo_WebGLShader_id,
-  eDOMClassInfo_WebGLFramebuffer_id,
-  eDOMClassInfo_WebGLRenderbuffer_id,
-
-  eDOMClassInfo_PaintRequest_id,
-  eDOMClassInfo_PaintRequestList_id,
-
-  eDOMClassInfo_ScrollAreaEvent_id,
-  eDOMClassInfo_PopStateEvent_id,
-
-  eDOMClassInfo_EventListenerInfo_id,
-
-  eDOMClassInfo_TransitionEvent_id,
-
-  eDOMClassInfo_FormData_id,
+#include "nsDOMClassInfoClasses.h"
 
   // This one better be the last one in this list
   eDOMClassInfoIDCount
 };
 
+#undef DOMCI_CLASS
+
 /**
  * nsIClassInfo helper macros
  */
 
 #ifdef _IMPL_NS_LAYOUT
 
+#define DOMCI_DATA(_dom_class, _class)
+
 class nsIClassInfo;
 class nsXPCClassInfo;
 
 extern nsIClassInfo*
 NS_GetDOMClassInfoInstance(nsDOMClassInfoID aID);
 
 #define NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(_class)                          \
   if (aIID.Equals(NS_GET_IID(nsIClassInfo)) ||                                \
--- a/dom/base/nsDOMException.cpp
+++ b/dom/base/nsDOMException.cpp
@@ -65,16 +65,18 @@ public:                                 
 
 #define IMPL_INTERNAL_DOM_EXCEPTION_TAIL(classname, ifname, domname, module, \
                                          mapping_function)                   \
 };                                                                           \
                                                                              \
 classname::classname() {}                                                    \
 classname::~classname() {}                                                   \
                                                                              \
+DOMCI_DATA(domname, classname)                                               \
+                                                                             \
 NS_IMPL_ADDREF_INHERITED(classname, nsBaseDOMException)                      \
 NS_IMPL_RELEASE_INHERITED(classname, nsBaseDOMException)                     \
 NS_INTERFACE_MAP_BEGIN(classname)                                            \
   NS_INTERFACE_MAP_ENTRY(ifname)                                             \
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(domname)                              \
 NS_INTERFACE_MAP_END_INHERITING(nsBaseDOMException)                          \
                                                                              \
 nsresult                                                                     \
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -77,16 +77,18 @@ static PRBool IsUniversalXPConnectCapabl
 {
   PRBool hasCap = PR_FALSE;
   nsresult rv = nsContentUtils::GetSecurityManager()->
                   IsCapabilityEnabled("UniversalXPConnect", &hasCap);
   NS_ENSURE_SUCCESS(rv, PR_FALSE);
   return hasCap;
 }
 
+DOMCI_DATA(WindowUtils, nsDOMWindowUtils)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMWindowUtils)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMWindowUtils)
   NS_INTERFACE_MAP_ENTRY(nsIDOMWindowUtils)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(WindowUtils)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsDOMWindowUtils)
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -1079,16 +1079,18 @@ nsGlobalWindow::FreeInnerObjects(PRBool 
 }
 
 //*****************************************************************************
 // nsGlobalWindow::nsISupports
 //*****************************************************************************
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsGlobalWindow)
 
+DOMCI_DATA(Window, nsGlobalWindow)
+
 // QueryInterface implementation for nsGlobalWindow
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsGlobalWindow)
   // Make sure this matches the cast in nsGlobalWindow::FromWrapper()
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIScriptGlobalObject)
   NS_INTERFACE_MAP_ENTRY(nsIDOMWindowInternal)
   NS_INTERFACE_MAP_ENTRY(nsIDOMWindow)
   NS_INTERFACE_MAP_ENTRY(nsIDOMWindow2)
   NS_INTERFACE_MAP_ENTRY(nsIDOMJSWindow)
@@ -9205,16 +9207,18 @@ nsGlobalWindow::SetHasOrientationEventLi
 // nsGlobalChromeWindow implementation
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsGlobalChromeWindow)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsGlobalChromeWindow,
                                                   nsGlobalWindow)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mBrowserDOMWindow)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(ChromeWindow, nsGlobalChromeWindow)
+
 // QueryInterface implementation for nsGlobalChromeWindow
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsGlobalChromeWindow)
   NS_INTERFACE_MAP_ENTRY(nsIDOMChromeWindow)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ChromeWindow)
 NS_INTERFACE_MAP_END_INHERITING(nsGlobalWindow)
 
 NS_IMPL_ADDREF_INHERITED(nsGlobalChromeWindow, nsGlobalWindow)
 NS_IMPL_RELEASE_INHERITED(nsGlobalChromeWindow, nsGlobalWindow)
@@ -9442,16 +9446,18 @@ nsGlobalChromeWindow::NotifyDefaultButto
 
 // QueryInterface implementation for nsGlobalModalWindow
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsGlobalModalWindow)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsGlobalModalWindow,
                                                   nsGlobalWindow)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mReturnValue)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(ModalContentWindow, nsGlobalModalWindow)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsGlobalModalWindow)
   NS_INTERFACE_MAP_ENTRY(nsIDOMModalContentWindow)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ModalContentWindow)
 NS_INTERFACE_MAP_END_INHERITING(nsGlobalWindow)
 
 NS_IMPL_ADDREF_INHERITED(nsGlobalModalWindow, nsGlobalWindow)
 NS_IMPL_RELEASE_INHERITED(nsGlobalModalWindow, nsGlobalWindow)
 
@@ -9554,16 +9560,18 @@ nsNavigator::~nsNavigator()
   sPrefInternal_id = JSVAL_VOID;
 }
 
 //*****************************************************************************
 //    nsNavigator::nsISupports
 //*****************************************************************************
 
 
+DOMCI_DATA(Navigator, nsNavigator)
+
 // QueryInterface implementation for nsNavigator
 NS_INTERFACE_MAP_BEGIN(nsNavigator)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMNavigator)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNavigator)
   NS_INTERFACE_MAP_ENTRY(nsIDOMJSNavigator)
   NS_INTERFACE_MAP_ENTRY(nsIDOMClientInformation)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNavigatorGeolocation)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Navigator)
--- a/dom/base/nsHistory.cpp
+++ b/dom/base/nsHistory.cpp
@@ -72,16 +72,18 @@ nsHistory::nsHistory(nsIDocShell* aDocSh
 {
 }
 
 nsHistory::~nsHistory()
 {
 }
 
 
+DOMCI_DATA(History, nsHistory)
+
 // QueryInterface implementation for nsHistory
 NS_INTERFACE_MAP_BEGIN(nsHistory)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMHistory)
   NS_INTERFACE_MAP_ENTRY(nsIDOMHistory)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(History)
 NS_INTERFACE_MAP_END
 
 
--- a/dom/base/nsLocation.cpp
+++ b/dom/base/nsLocation.cpp
@@ -140,16 +140,17 @@ nsLocation::nsLocation(nsIDocShell *aDoc
 {
   mDocShell = do_GetWeakReference(aDocShell);
 }
 
 nsLocation::~nsLocation()
 {
 }
 
+DOMCI_DATA(Location, nsLocation)
 
 // QueryInterface implementation for nsLocation
 NS_INTERFACE_MAP_BEGIN(nsLocation)
   NS_INTERFACE_MAP_ENTRY(nsIDOMLocation)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMLocation)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Location)
 NS_INTERFACE_MAP_END
 
--- a/dom/base/nsMimeTypeArray.cpp
+++ b/dom/base/nsMimeTypeArray.cpp
@@ -56,16 +56,18 @@ nsMimeTypeArray::nsMimeTypeArray(nsIDOMN
 }
 
 nsMimeTypeArray::~nsMimeTypeArray()
 {
   Clear();
 }
 
 
+DOMCI_DATA(MimeTypeArray, nsMimeTypeArray)
+
 // QueryInterface implementation for nsMimeTypeArray
 NS_INTERFACE_MAP_BEGIN(nsMimeTypeArray)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_INTERFACE_MAP_ENTRY(nsIDOMMimeTypeArray)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MimeTypeArray)
 NS_INTERFACE_MAP_END
 
 
@@ -278,16 +280,18 @@ nsMimeType::nsMimeType(nsIDOMPlugin* aPl
   mMimeType = aMimeType;
 }
 
 nsMimeType::~nsMimeType()
 {
 }
 
 
+DOMCI_DATA(MimeType, nsMimeType)
+
 // QueryInterface implementation for nsMimeType
 NS_INTERFACE_MAP_BEGIN(nsMimeType)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_INTERFACE_MAP_ENTRY(nsIDOMMimeType)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MimeType)
 NS_INTERFACE_MAP_END
 
 
--- a/dom/base/nsPluginArray.cpp
+++ b/dom/base/nsPluginArray.cpp
@@ -65,16 +65,18 @@ nsPluginArray::~nsPluginArray()
   if (mPluginArray != nsnull) {
     for (PRUint32 i = 0; i < mPluginCount; i++) {
       NS_IF_RELEASE(mPluginArray[i]);
     }
     delete[] mPluginArray;
   }
 }
 
+DOMCI_DATA(PluginArray, nsPluginArray)
+
 // QueryInterface implementation for nsPluginArray
 NS_INTERFACE_MAP_BEGIN(nsPluginArray)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMPluginArray)
   NS_INTERFACE_MAP_ENTRY(nsIDOMPluginArray)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(PluginArray)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsPluginArray)
@@ -292,16 +294,18 @@ nsPluginElement::~nsPluginElement()
         NS_RELEASE(mt);
       }
     }
     delete[] mMimeTypeArray;
   }
 }
 
 
+DOMCI_DATA(Plugin, nsPluginElement)
+
 // QueryInterface implementation for nsPluginElement
 NS_INTERFACE_MAP_BEGIN(nsPluginElement)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_INTERFACE_MAP_ENTRY(nsIDOMPlugin)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Plugin)
 NS_INTERFACE_MAP_END
 
 
--- a/dom/base/nsScreen.cpp
+++ b/dom/base/nsScreen.cpp
@@ -54,16 +54,18 @@ nsScreen::nsScreen(nsIDocShell* aDocShel
 {
 }
 
 nsScreen::~nsScreen()
 {
 }
 
 
+DOMCI_DATA(Screen, nsScreen)
+
 // QueryInterface implementation for nsScreen
 NS_INTERFACE_MAP_BEGIN(nsScreen)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_INTERFACE_MAP_ENTRY(nsIDOMScreen)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Screen)
 NS_INTERFACE_MAP_END
 
 
--- a/dom/src/geolocation/WinMobileLocationProvider.cpp
+++ b/dom/src/geolocation/WinMobileLocationProvider.cpp
@@ -65,16 +65,18 @@ public:
     mAlt(aAlt), mHError(aHError),
     mVError(aVError), mHeading(aHeading),
     mSpeed(aSpeed) {};
 private:
   ~nsGeoPositionCoords() {}
   double mLat, mLong, mAlt, mHError, mVError, mHeading, mSpeed;
 };
 
+DOMCI_DATA(GeoPositionCoords, nsGeoPositionCoords)
+
 NS_INTERFACE_MAP_BEGIN(nsGeoPositionCoords)
 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMGeoPositionCoords)
 NS_INTERFACE_MAP_ENTRY(nsIDOMGeoPositionCoords)
 NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(GeoPositionCoords)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_THREADSAFE_ADDREF(nsGeoPositionCoords)
 NS_IMPL_THREADSAFE_RELEASE(nsGeoPositionCoords)
@@ -151,16 +153,18 @@ public:
   };
   
 private:
   ~nsGeoPosition() {}
   long long mTimestamp;
   nsRefPtr<nsGeoPositionCoords> mCoords;
 };
 
+DOMCI_DATA(GeoPosition, nsGeoPosition)
+
 NS_INTERFACE_MAP_BEGIN(nsGeoPosition)
 NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMGeoPosition)
 NS_INTERFACE_MAP_ENTRY(nsIDOMGeoPosition)
 NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(GeoPosition)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_THREADSAFE_ADDREF(nsGeoPosition)
 NS_IMPL_THREADSAFE_RELEASE(nsGeoPosition)
--- a/dom/src/geolocation/nsGeolocation.cpp
+++ b/dom/src/geolocation/nsGeolocation.cpp
@@ -81,16 +81,18 @@ public:
   nsDOMGeoPositionError(PRInt16 aCode);
   void NotifyCallback(nsIDOMGeoPositionErrorCallback* callback);
 
 private:
   ~nsDOMGeoPositionError();
   PRInt16 mCode;
 };
 
+DOMCI_DATA(GeoPositionError, nsDOMGeoPositionError)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMGeoPositionError)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMGeoPositionError)
   NS_INTERFACE_MAP_ENTRY(nsIDOMGeoPositionError)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(GeoPositionError)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_THREADSAFE_ADDREF(nsDOMGeoPositionError)
 NS_IMPL_THREADSAFE_RELEASE(nsDOMGeoPositionError)
@@ -683,16 +685,18 @@ nsGeolocationService::RemoveLocator(nsGe
 {
   mGeolocators.RemoveElement(aLocator);
 }
 
 ////////////////////////////////////////////////////
 // nsGeolocation
 ////////////////////////////////////////////////////
 
+DOMCI_DATA(GeoGeolocation, nsGeolocation)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsGeolocation)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMGeoGeolocation)
   NS_INTERFACE_MAP_ENTRY(nsIDOMGeoGeolocation)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(GeoGeolocation)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsGeolocation)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsGeolocation)
@@ -951,8 +955,13 @@ nsGeolocation::WindowOwnerStillExists()
 
     nsPIDOMWindow* outer = window->GetOuterWindow();
     if (!outer || outer->GetCurrentInnerWindow() != window)
       return PR_FALSE;
   }
 
   return PR_TRUE;
 }
+
+#ifndef WINCE_WINDOWS_MOBILE
+DOMCI_DATA(GeoPositionCoords, void)
+DOMCI_DATA(GeoPosition, void)
+#endif
--- a/dom/src/offline/nsDOMOfflineResourceList.cpp
+++ b/dom/src/offline/nsDOMOfflineResourceList.cpp
@@ -110,16 +110,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_IN
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mOnCachedListener)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mOnUpdateReadyListener)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mOnObsoleteListener)
 
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMARRAY(mPendingEvents)
 
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
+DOMCI_DATA(OfflineResourceList, nsDOMOfflineResourceList)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMOfflineResourceList)
   NS_INTERFACE_MAP_ENTRY(nsIDOMOfflineResourceList)
   NS_INTERFACE_MAP_ENTRY(nsIOfflineCacheUpdateObserver)
   NS_INTERFACE_MAP_ENTRY(nsIObserver)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(OfflineResourceList)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEventTargetHelper)
 
--- a/dom/src/storage/nsDOMStorage.cpp
+++ b/dom/src/storage/nsDOMStorage.cpp
@@ -513,16 +513,18 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_0(nsDOMS
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsDOMStorage)
   {
     if (tmp->mItems.IsInitialized()) {
       tmp->mItems.EnumerateEntries(SessionStorageTraverser, &cb);
     }
   }
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(StorageObsolete, nsDOMStorage)
+
 NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsDOMStorage, nsIDOMStorageObsolete)
 NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsDOMStorage, nsIDOMStorageObsolete)
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMStorage)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMStorageObsolete)
   NS_INTERFACE_MAP_ENTRY(nsIDOMStorageObsolete)
   NS_INTERFACE_MAP_ENTRY(nsPIDOMStorage)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(StorageObsolete)
 NS_INTERFACE_MAP_END
@@ -1443,16 +1445,18 @@ nsDOMStorage::BroadcastChangeNotificatio
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsDOMStorage2)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDOMStorage2)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mStorage)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsDOMStorage2)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(mStorage, nsIDOMStorageObsolete)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(Storage, nsDOMStorage2)
+
 NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsDOMStorage2, nsIDOMStorage)
 NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsDOMStorage2, nsIDOMStorage)
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMStorage2)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMStorage)
   NS_INTERFACE_MAP_ENTRY(nsIDOMStorage)
   NS_INTERFACE_MAP_ENTRY(nsPIDOMStorage)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Storage)
 NS_INTERFACE_MAP_END
@@ -1671,16 +1675,18 @@ nsDOMStorage2::Clear()
   mStorage->mEventBroadcaster = this;
   return mStorage->Clear();
 }
 
 //
 // nsDOMStorageList
 //
 
+DOMCI_DATA(StorageList, nsDOMStorageList)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMStorageList)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_INTERFACE_MAP_ENTRY(nsIDOMStorageList)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(StorageList)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsDOMStorageList)
 NS_IMPL_RELEASE(nsDOMStorageList)
@@ -1858,16 +1864,19 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsDOMStorageItem)
   {
     cb.NoteXPCOMChild((nsIDOMStorageObsolete*) tmp->mStorage);
   }
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsDOMStorageItem, nsIDOMStorageItem)
 NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsDOMStorageItem, nsIDOMStorageItem)
+
+DOMCI_DATA(StorageItem, nsDOMStorageItem)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsDOMStorageItem)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMStorageItem)
   NS_INTERFACE_MAP_ENTRY(nsIDOMStorageItem)
   NS_INTERFACE_MAP_ENTRY(nsIDOMToString)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(StorageItem)
 NS_INTERFACE_MAP_END
 
 nsDOMStorageItem::nsDOMStorageItem(nsDOMStorage* aStorage,
@@ -1966,16 +1975,18 @@ nsDOMStorageItem::SetValue(const nsAStri
 }
 
 NS_IMETHODIMP
 nsDOMStorageItem::ToString(nsAString& aStr)
 {
   return GetValue(aStr);
 }
 
+DOMCI_DATA(StorageEvent, nsDOMStorageEvent)
+
 // QueryInterface implementation for nsDOMStorageEvent
 NS_INTERFACE_MAP_BEGIN(nsDOMStorageEvent)
   NS_INTERFACE_MAP_ENTRY(nsIDOMStorageEvent)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(StorageEvent)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMStorageEvent, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMStorageEvent, nsDOMEvent)
@@ -2039,16 +2050,18 @@ NS_IMETHODIMP nsDOMStorageEvent::InitSto
   mUrl = urlArg;
   mStorageArea = storageAreaArg;
 
   return NS_OK;
 }
 
 // Obsolete globalStorage event
 
+DOMCI_DATA(StorageEventObsolete, nsDOMStorageEventObsolete)
+
 // QueryInterface implementation for nsDOMStorageEventObsolete
 NS_INTERFACE_MAP_BEGIN(nsDOMStorageEventObsolete)
   NS_INTERFACE_MAP_ENTRY(nsIDOMStorageEventObsolete)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(StorageEventObsolete)
 NS_INTERFACE_MAP_END_INHERITING(nsDOMEvent)
 
 NS_IMPL_ADDREF_INHERITED(nsDOMStorageEventObsolete, nsDOMEvent)
 NS_IMPL_RELEASE_INHERITED(nsDOMStorageEventObsolete, nsDOMEvent)
--- a/layout/generic/nsSelection.cpp
+++ b/layout/generic/nsSelection.cpp
@@ -3392,16 +3392,18 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(
       NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mRanges[i].mRange)
     }
   }
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mAnchorFocusRange)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mFrameSelection)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMARRAY(mSelectionListeners)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
+DOMCI_DATA(Selection, nsTypedSelection)
+
 // QueryInterface implementation for nsTypedSelection
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsTypedSelection)
   NS_INTERFACE_MAP_ENTRY(nsISelection)
   NS_INTERFACE_MAP_ENTRY(nsISelection2)
   NS_INTERFACE_MAP_ENTRY(nsISelectionPrivate)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsISelection)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(Selection)
--- a/layout/style/nsCSSRules.cpp
+++ b/layout/style/nsCSSRules.cpp
@@ -114,16 +114,18 @@ CSSGroupRuleRuleListImpl::CSSGroupRuleRu
   // The rule will tell us when its going away.
   mGroupRule = aGroupRule;
 }
 
 CSSGroupRuleRuleListImpl::~CSSGroupRuleRuleListImpl()
 {
 }
 
+DOMCI_DATA(CSSGroupRuleRuleList, CSSGroupRuleRuleListImpl)
+
 // QueryInterface implementation for CSSGroupRuleRuleList
 NS_INTERFACE_MAP_BEGIN(CSSGroupRuleRuleListImpl)
   NS_INTERFACE_MAP_ENTRY(nsICSSRuleList)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRuleList)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSGroupRuleRuleList)
 NS_INTERFACE_MAP_END
 
@@ -230,16 +232,18 @@ CSSCharsetRuleImpl::CSSCharsetRuleImpl(c
 
 CSSCharsetRuleImpl::~CSSCharsetRuleImpl(void)
 {
 }
 
 NS_IMPL_ADDREF_INHERITED(CSSCharsetRuleImpl, nsCSSRule)
 NS_IMPL_RELEASE_INHERITED(CSSCharsetRuleImpl, nsCSSRule)
 
+DOMCI_DATA(CSSCharsetRule, CSSCharsetRuleImpl)
+
 // QueryInterface implementation for CSSCharsetRuleImpl
 NS_INTERFACE_MAP_BEGIN(CSSCharsetRuleImpl)
   NS_INTERFACE_MAP_ENTRY(nsICSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIStyleRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSCharsetRule)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICSSRule)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSCharsetRule)
@@ -431,16 +435,18 @@ CSSImportRuleImpl::~CSSImportRuleImpl(vo
   if (mChildSheet) {
     mChildSheet->SetOwnerRule(nsnull);
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(CSSImportRuleImpl, nsCSSRule)
 NS_IMPL_RELEASE_INHERITED(CSSImportRuleImpl, nsCSSRule)
 
+DOMCI_DATA(CSSImportRule, CSSImportRuleImpl)
+
 // QueryInterface implementation for CSSImportRuleImpl
 NS_INTERFACE_MAP_BEGIN(CSSImportRuleImpl)
   NS_INTERFACE_MAP_ENTRY(nsICSSImportRule)
   NS_INTERFACE_MAP_ENTRY(nsICSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIStyleRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSImportRule)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICSSImportRule)
@@ -911,16 +917,18 @@ nsCSSMediaRule::~nsCSSMediaRule()
   if (mMedia) {
     mMedia->SetStyleSheet(nsnull);
   }
 }
 
 NS_IMPL_ADDREF_INHERITED(nsCSSMediaRule, nsCSSRule)
 NS_IMPL_RELEASE_INHERITED(nsCSSMediaRule, nsCSSRule)
 
+DOMCI_DATA(CSSMediaRule, nsCSSMediaRule)
+
 // QueryInterface implementation for nsCSSMediaRule
 NS_INTERFACE_MAP_BEGIN(nsCSSMediaRule)
   NS_INTERFACE_MAP_ENTRY(nsICSSGroupRule)
   NS_INTERFACE_MAP_ENTRY(nsICSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIStyleRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSMediaRule)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsCSSGroupRule)
@@ -1081,16 +1089,18 @@ nsCSSDocumentRule::nsCSSDocumentRule(con
 
 nsCSSDocumentRule::~nsCSSDocumentRule(void)
 {
 }
 
 NS_IMPL_ADDREF_INHERITED(nsCSSDocumentRule, nsCSSRule)
 NS_IMPL_RELEASE_INHERITED(nsCSSDocumentRule, nsCSSRule)
 
+DOMCI_DATA(CSSMozDocumentRule, nsCSSDocumentRule)
+
 // QueryInterface implementation for nsCSSDocumentRule
 NS_INTERFACE_MAP_BEGIN(nsCSSDocumentRule)
   NS_INTERFACE_MAP_ENTRY(nsICSSGroupRule)
   NS_INTERFACE_MAP_ENTRY(nsICSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIStyleRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSMozDocumentRule)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsCSSGroupRule)
@@ -1320,16 +1330,18 @@ CSSNameSpaceRuleImpl::CSSNameSpaceRuleIm
 CSSNameSpaceRuleImpl::~CSSNameSpaceRuleImpl(void)
 {
   NS_IF_RELEASE(mPrefix);
 }
 
 NS_IMPL_ADDREF_INHERITED(CSSNameSpaceRuleImpl, nsCSSRule)
 NS_IMPL_RELEASE_INHERITED(CSSNameSpaceRuleImpl, nsCSSRule)
 
+DOMCI_DATA(CSSNameSpaceRule, CSSNameSpaceRuleImpl)
+
 // QueryInterface implementation for CSSNameSpaceRuleImpl
 NS_INTERFACE_MAP_BEGIN(CSSNameSpaceRuleImpl)
   NS_INTERFACE_MAP_ENTRY(nsICSSNameSpaceRule)
   NS_INTERFACE_MAP_ENTRY(nsICSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIStyleRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICSSNameSpaceRule)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSNameSpaceRule)
@@ -1585,16 +1597,18 @@ nsCSSFontFaceStyleDecl::Fields[] = {
     &nsCSSFontFaceStyleDecl::mFamily,
     &nsCSSFontFaceStyleDecl::mStyle,
     &nsCSSFontFaceStyleDecl::mWeight,
     &nsCSSFontFaceStyleDecl::mStretch,
     &nsCSSFontFaceStyleDecl::mSrc,
     &nsCSSFontFaceStyleDecl::mUnicodeRange
 };
 
+DOMCI_DATA(CSSFontFaceStyleDecl, nsCSSFontFaceStyleDecl)
+
 // QueryInterface implementation for nsCSSFontFaceStyleDecl
 NS_INTERFACE_MAP_BEGIN(nsCSSFontFaceStyleDecl)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSStyleDeclaration)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSFontFaceStyleDecl)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF_USING_AGGREGATOR(nsCSSFontFaceStyleDecl, ContainingRule())
@@ -1808,16 +1822,18 @@ nsCSSFontFaceRule::Clone(nsICSSRule*& aC
   }
   aClone = nsnull;
   return NS_ERROR_OUT_OF_MEMORY;
 }
 
 NS_IMPL_ADDREF_INHERITED(nsCSSFontFaceRule, nsCSSRule)
 NS_IMPL_RELEASE_INHERITED(nsCSSFontFaceRule, nsCSSRule)
 
+DOMCI_DATA(CSSFontFaceRule, nsCSSFontFaceRule)
+
 // QueryInterface implementation for nsCSSFontFaceRule
 NS_INTERFACE_MAP_BEGIN(nsCSSFontFaceRule)
   NS_INTERFACE_MAP_ENTRY(nsICSSRule)
   NS_INTERFACE_MAP_ENTRY(nsIStyleRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSFontFaceRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICSSRule)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSFontFaceRule)
--- a/layout/style/nsCSSStyleRule.cpp
+++ b/layout/style/nsCSSStyleRule.cpp
@@ -1124,16 +1124,18 @@ DOMCSSStyleRuleImpl::DOMCSSStyleRuleImpl
   : mDOMDeclaration(aRule)
 {
 }
 
 DOMCSSStyleRuleImpl::~DOMCSSStyleRuleImpl()
 {
 }
 
+DOMCI_DATA(CSSStyleRule, DOMCSSStyleRuleImpl)
+
 NS_INTERFACE_MAP_BEGIN(DOMCSSStyleRuleImpl)
   NS_INTERFACE_MAP_ENTRY(nsICSSStyleRuleDOMWrapper)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSStyleRule)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRule)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSStyleRule)
 NS_INTERFACE_MAP_END
 
--- a/layout/style/nsCSSStyleSheet.cpp
+++ b/layout/style/nsCSSStyleSheet.cpp
@@ -113,16 +113,18 @@ CSSRuleListImpl::CSSRuleListImpl(nsCSSSt
   mStyleSheet = aStyleSheet;
   mRulesAccessed = PR_FALSE;
 }
 
 CSSRuleListImpl::~CSSRuleListImpl()
 {
 }
 
+DOMCI_DATA(CSSRuleList, CSSRuleListImpl)
+
 // QueryInterface implementation for CSSRuleList
 NS_INTERFACE_MAP_BEGIN(CSSRuleListImpl)
   NS_INTERFACE_MAP_ENTRY(nsICSSRuleList)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSRuleList)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSRuleList)
 NS_INTERFACE_MAP_END
 
@@ -501,16 +503,18 @@ nsMediaQuery::Matches(nsPresContext* aPr
 
     match = expr.Matches(aPresContext, actual);
     aKey.AddExpression(&expr, match);
   }
 
   return match == !mNegated;
 }
 
+DOMCI_DATA(MediaList, nsMediaList)
+
 NS_INTERFACE_MAP_BEGIN(nsMediaList)
   NS_INTERFACE_MAP_ENTRY(nsIDOMMediaList)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MediaList)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsMediaList)
 NS_IMPL_RELEASE(nsMediaList)
@@ -1053,16 +1057,18 @@ nsCSSStyleSheet::~nsCSSStyleSheet()
   // away.
   if (mRuleProcessors) {
     NS_ASSERTION(mRuleProcessors->Length() == 0, "destructing sheet with rule processor reference");
     delete mRuleProcessors; // weak refs, should be empty here anyway
   }
 }
 
 
+DOMCI_DATA(CSSStyleSheet, nsCSSStyleSheet)
+
 // QueryInterface implementation for nsCSSStyleSheet
 NS_INTERFACE_MAP_BEGIN(nsCSSStyleSheet)
   NS_INTERFACE_MAP_ENTRY(nsICSSStyleSheet)
   NS_INTERFACE_MAP_ENTRY(nsIStyleSheet)
   NS_INTERFACE_MAP_ENTRY(nsIDOMStyleSheet)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSStyleSheet)
   NS_INTERFACE_MAP_ENTRY(nsICSSLoaderObserver)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsICSSStyleSheet)
--- a/layout/style/nsComputedDOMStyle.cpp
+++ b/layout/style/nsComputedDOMStyle.cpp
@@ -151,16 +151,18 @@ nsComputedDOMStyle::Shutdown()
   // about our dtor.
   delete reinterpret_cast<char*>(sCachedComputedDOMStyle);
   sCachedComputedDOMStyle = nsnull;
 }
 
 
 NS_IMPL_CYCLE_COLLECTION_1(nsComputedDOMStyle, mContent)
 
+DOMCI_DATA(ComputedCSSStyleDeclaration, nsComputedDOMStyle)
+
 // QueryInterface implementation for nsComputedDOMStyle
 NS_INTERFACE_TABLE_HEAD(nsComputedDOMStyle)
   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
   NS_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsComputedDOMStyle)
     NS_INTERFACE_TABLE_ENTRY(nsComputedDOMStyle, nsICSSDeclaration)
     NS_INTERFACE_TABLE_ENTRY(nsComputedDOMStyle,
                              nsIDOMCSSStyleDeclaration)
     NS_INTERFACE_TABLE_ENTRY(nsComputedDOMStyle, nsISupports)
--- a/layout/style/nsDOMCSSDeclaration.cpp
+++ b/layout/style/nsDOMCSSDeclaration.cpp
@@ -54,16 +54,18 @@
 #include "mozAutoDocUpdate.h"
 
 namespace css = mozilla::css;
 
 nsDOMCSSDeclaration::~nsDOMCSSDeclaration()
 {
 }
 
+DOMCI_DATA(CSSStyleDeclaration, nsDOMCSSDeclaration)
+
 NS_INTERFACE_TABLE_HEAD(nsDOMCSSDeclaration)
   NS_OFFSET_AND_INTERFACE_TABLE_BEGIN(nsDOMCSSDeclaration)
     NS_INTERFACE_TABLE_ENTRY(nsDOMCSSDeclaration, nsICSSDeclaration)
     NS_INTERFACE_TABLE_ENTRY(nsDOMCSSDeclaration, nsIDOMCSSStyleDeclaration)
     NS_INTERFACE_TABLE_ENTRY(nsDOMCSSDeclaration, nsISupports)
   NS_OFFSET_AND_INTERFACE_TABLE_END
   NS_OFFSET_AND_INTERFACE_TABLE_TO_MAP_SEGUE
   NS_INTERFACE_MAP_ENTRY_AGGREGATED(nsIDOMCSS2Properties,
--- a/layout/style/nsDOMCSSRGBColor.cpp
+++ b/layout/style/nsDOMCSSRGBColor.cpp
@@ -53,16 +53,18 @@ nsDOMCSSRGBColor::nsDOMCSSRGBColor(nsIDO
   , mHasAlpha(aHasAlpha)
 {
 }
 
 nsDOMCSSRGBColor::~nsDOMCSSRGBColor(void)
 {
 }
 
+DOMCI_DATA(CSSRGBColor, nsDOMCSSRGBColor)
+
 NS_INTERFACE_MAP_BEGIN(nsDOMCSSRGBColor)
   NS_INTERFACE_MAP_ENTRY(nsIDOMRGBColor)
   NS_INTERFACE_MAP_ENTRY(nsIDOMNSRGBAColor)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSRGBColor)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsDOMCSSRGBColor)
--- a/layout/style/nsDOMCSSRect.cpp
+++ b/layout/style/nsDOMCSSRect.cpp
@@ -50,16 +50,18 @@ nsDOMCSSRect::nsDOMCSSRect(nsIDOMCSSPrim
   : mTop(aTop), mRight(aRight), mBottom(aBottom), mLeft(aLeft)
 {
 }
 
 nsDOMCSSRect::~nsDOMCSSRect(void)
 {
 }
 
+DOMCI_DATA(CSSRect, nsDOMCSSRect)
+
 // QueryInterface implementation for nsCSSRect
 NS_INTERFACE_MAP_BEGIN(nsDOMCSSRect)
   NS_INTERFACE_MAP_ENTRY(nsIDOMRect)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSRect)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_ADDREF(nsDOMCSSRect)
--- a/layout/style/nsDOMCSSValueList.cpp
+++ b/layout/style/nsDOMCSSValueList.cpp
@@ -50,16 +50,18 @@ nsDOMCSSValueList::nsDOMCSSValueList(PRB
 
 nsDOMCSSValueList::~nsDOMCSSValueList()
 {
 }
 
 NS_IMPL_ADDREF(nsDOMCSSValueList)
 NS_IMPL_RELEASE(nsDOMCSSValueList)
 
+DOMCI_DATA(CSSValueList, nsDOMCSSValueList)
+
 // QueryInterface implementation for nsDOMCSSValueList
 NS_INTERFACE_MAP_BEGIN(nsDOMCSSValueList)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSValueList)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSValue)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(CSSValueList)
 NS_INTERFACE_MAP_END
 
--- a/layout/style/nsROCSSPrimitiveValue.cpp
+++ b/layout/style/nsROCSSPrimitiveValue.cpp
@@ -59,16 +59,18 @@ nsROCSSPrimitiveValue::~nsROCSSPrimitive
 {
   Reset();
 }
 
 NS_IMPL_ADDREF(nsROCSSPrimitiveValue)
 NS_IMPL_RELEASE(nsROCSSPrimitiveValue)
 
 
+DOMCI_DATA(ROCSSPrimitiveValue, nsROCSSPrimitiveValue)
+
 // QueryInterface implementation for nsROCSSPrimitiveValue
 NS_INTERFACE_MAP_BEGIN(nsROCSSPrimitiveValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSPrimitiveValue)
   NS_INTERFACE_MAP_ENTRY(nsIDOMCSSValue)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIDOMCSSPrimitiveValue)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(ROCSSPrimitiveValue)
 NS_INTERFACE_MAP_END
 
--- a/layout/xul/base/src/nsBoxObject.cpp
+++ b/layout/xul/base/src/nsBoxObject.cpp
@@ -65,16 +65,18 @@
 
 // Implement our nsISupports methods
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsBoxObject)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsBoxObject)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsBoxObject)
 
+DOMCI_DATA(BoxObject, nsBoxObject)
+
 // QueryInterface implementation for nsBoxObject
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsBoxObject)
   NS_INTERFACE_MAP_ENTRY(nsIBoxObject)
   NS_INTERFACE_MAP_ENTRY(nsPIBoxObject)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(BoxObject)
 NS_INTERFACE_MAP_END
 
--- a/layout/xul/base/src/tree/src/nsTreeColumns.cpp
+++ b/layout/xul/base/src/tree/src/nsTreeColumns.cpp
@@ -74,16 +74,18 @@ nsTreeColumn::~nsTreeColumn()
   }
 }
 
 NS_IMPL_CYCLE_COLLECTION_1(nsTreeColumn, mContent)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsTreeColumn)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsTreeColumn)
 
+DOMCI_DATA(TreeColumn, nsTreeColumn)
+
 // QueryInterface implementation for nsTreeColumn
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsTreeColumn)
   NS_INTERFACE_MAP_ENTRY(nsITreeColumn)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(TreeColumn)
   if (aIID.Equals(NS_GET_IID(nsTreeColumn))) {
     AddRef();
     *aInstancePtr = this;
@@ -371,16 +373,18 @@ nsTreeColumns::nsTreeColumns(nsITreeBoxO
 {
 }
 
 nsTreeColumns::~nsTreeColumns()
 {
   nsTreeColumns::InvalidateColumns();
 }
 
+DOMCI_DATA(TreeColumns, nsTreeColumns)
+
 // QueryInterface implementation for nsTreeColumns
 NS_INTERFACE_MAP_BEGIN(nsTreeColumns)
   NS_INTERFACE_MAP_ENTRY(nsITreeColumns)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(TreeColumns)
 NS_INTERFACE_MAP_END
                                                                                 
 NS_IMPL_ADDREF(nsTreeColumns)
--- a/layout/xul/base/src/tree/src/nsTreeContentView.cpp
+++ b/layout/xul/base/src/tree/src/nsTreeContentView.cpp
@@ -162,16 +162,18 @@ NS_IMPL_CYCLE_COLLECTION_4(nsTreeContent
                            mBoxObject,
                            mSelection,
                            mRoot,
                            mBody)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsTreeContentView)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsTreeContentView)
 
+DOMCI_DATA(TreeContentView, nsTreeContentView)
+
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsTreeContentView)
   NS_INTERFACE_MAP_ENTRY(nsITreeView)
   NS_INTERFACE_MAP_ENTRY(nsITreeContentView)
   NS_INTERFACE_MAP_ENTRY(nsIDocumentObserver)
   NS_INTERFACE_MAP_ENTRY(nsIMutationObserver)
   NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsITreeContentView)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(TreeContentView)
 NS_INTERFACE_MAP_END
--- a/layout/xul/base/src/tree/src/nsTreeSelection.cpp
+++ b/layout/xul/base/src/tree/src/nsTreeSelection.cpp
@@ -272,16 +272,18 @@ nsTreeSelection::~nsTreeSelection()
     mSelectTimer->Cancel();
 }
 
 NS_IMPL_CYCLE_COLLECTION_2(nsTreeSelection, mTree, mCurrentColumn)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(nsTreeSelection)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(nsTreeSelection)
 
+DOMCI_DATA(TreeSelection, nsTreeSelection)
+
 // QueryInterface implementation for nsBoxObject
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsTreeSelection)
   NS_INTERFACE_MAP_ENTRY(nsITreeSelection)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
   NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(TreeSelection)
 NS_INTERFACE_MAP_END
 
 NS_IMETHODIMP nsTreeSelection::GetTree(nsITreeBoxObject * *aTree)