Bug 717198 - Remove the tag observer code from the tree. r=mrbkap.
authorHenri Sivonen <hsivonen@iki.fi>
Wed, 11 Jan 2012 17:49:56 +0200
changeset 84289 418f713f7092d824aac7798069886318c1a92259
parent 84288 e41a37df38928a7ddb548466bd9747f7e1fbda89
child 84290 39e49fcaed223e445a19760bb3974a3958b56178
push id21839
push usermbrubeck@mozilla.com
push dateThu, 12 Jan 2012 16:24:29 +0000
treeherdermozilla-central@fb5bcf9ae739 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmrbkap
bugs717198
milestone12.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 717198 - Remove the tag observer code from the tree. r=mrbkap.
content/html/document/src/nsHTMLContentSink.cpp
parser/htmlparser/public/nsIHTMLContentSink.h
parser/htmlparser/public/nsIParserService.h
parser/htmlparser/src/CNavDTD.cpp
parser/htmlparser/src/nsDTDUtils.cpp
parser/htmlparser/src/nsDTDUtils.h
parser/htmlparser/src/nsParserService.cpp
parser/htmlparser/src/nsParserService.h
--- a/content/html/document/src/nsHTMLContentSink.cpp
+++ b/content/html/document/src/nsHTMLContentSink.cpp
@@ -203,17 +203,16 @@ public:
   NS_IMETHOD CloseMalformedContainer(const nsHTMLTag aTag);
   NS_IMETHOD AddLeaf(const nsIParserNode& aNode);
   NS_IMETHOD AddComment(const nsIParserNode& aNode);
   NS_IMETHOD AddProcessingInstruction(const nsIParserNode& aNode);
   NS_IMETHOD AddDocTypeDecl(const nsIParserNode& aNode);
   NS_IMETHOD DidProcessTokens(void);
   NS_IMETHOD WillProcessAToken(void);
   NS_IMETHOD DidProcessAToken(void);
-  NS_IMETHOD NotifyTagObservers(nsIParserNode* aNode);
   NS_IMETHOD BeginContext(PRInt32 aID);
   NS_IMETHOD EndContext(PRInt32 aID);
   NS_IMETHOD OpenHead();
   NS_IMETHOD IsEnabled(PRInt32 aTag, bool* aReturn);
   NS_IMETHOD_(bool) IsFormOnStack();
 
 #ifdef DEBUG
   // nsIDebugDumpContent
@@ -265,18 +264,16 @@ protected:
   // yet.  We want to make sure to only do this once.
   bool mNotifiedRootInsertion;
 
   PRUint8 mScriptEnabled : 1;
   PRUint8 mFramesEnabled : 1;
   PRUint8 mFormOnStack : 1;
   PRUint8 unused : 5;  // bits available if someone needs one
 
-  nsCOMPtr<nsIObserverEntry> mObservers;
-
   nsINodeInfo* mNodeInfoCache[NS_HTML_TAG_MAX + 1];
 
   nsresult FlushTags();
 
   void StartLayout(bool aIgnorePendingSheets);
 
   // Routines for tags that require special handling
   nsresult CloseHTML();
@@ -1569,25 +1566,16 @@ HTMLContentSink::Init(nsIDocument* aDoc,
   if (NS_FAILED(rv)) {
     return rv;
   }
 
   aDoc->AddObserver(this);
   mIsDocumentObserver = true;
   mHTMLDocument = do_QueryInterface(aDoc);
 
-  mObservers = nsnull;
-  nsIParserService* service = nsContentUtils::GetParserService();
-  if (!service) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  service->GetTopicObservers(NS_LITERAL_STRING("text/html"),
-                             getter_AddRefs(mObservers));
-
   NS_ASSERTION(mDocShell, "oops no docshell!");
 
   // Find out if subframes are enabled
   if (mDocShell) {
     bool subFramesEnabled = true;
     mDocShell->GetAllowSubframes(&subFramesEnabled);
     if (subFramesEnabled) {
       mFramesEnabled = true;
@@ -2501,37 +2489,16 @@ HTMLContentSink::WillInterrupt()
 }
 
 NS_IMETHODIMP
 HTMLContentSink::WillResume()
 {
   return WillResumeImpl();
 }
 
-NS_IMETHODIMP
-HTMLContentSink::NotifyTagObservers(nsIParserNode* aNode)
-{
-  // Bug 125317
-  // Inform observers that we're handling a document.write().
-  // This information is necessary for the charset observer, atleast,
-  // to make a decision whether a new charset loading is required or not.
-
-  if (!mObservers) {
-    return NS_OK;
-  }
-
-  PRUint32 flag = 0;
-
-  if (mHTMLDocument && mHTMLDocument->IsWriting()) {
-    flag = nsIElementObserver::IS_DOCUMENT_WRITE;
-  }
-
-  return mObservers->Notify(aNode, mParser, mDocShell, flag);
-}
-
 void
 HTMLContentSink::StartLayout(bool aIgnorePendingSheets)
 {
   if (mLayoutStarted) {
     return;
   }
 
   mHTMLDocument->SetIsFrameset(mFrameset != nsnull);
--- a/parser/htmlparser/public/nsIHTMLContentSink.h
+++ b/parser/htmlparser/public/nsIHTMLContentSink.h
@@ -77,20 +77,19 @@
  *
  * NOTE: I haven't figured out how sub-documents (non-frames)
  *       are going to be handled. Stay tuned.
  */
 #include "nsIParserNode.h"
 #include "nsIContentSink.h"
 #include "nsHTMLTags.h"
 
-// d19e6730-5e2f-4131-89db-8a918515097d
 #define NS_IHTML_CONTENT_SINK_IID \
-{ 0xd19e6730, 0x5e2f, 0x4131, \
-  { 0x89, 0xdb, 0x8a, 0x91, 0x85, 0x15, 0x09, 0x7d } }
+{ 0x44b5a4f4, 0x01f7, 0x4116, \
+  { 0xb5, 0xa5, 0x56, 0x4d, 0x64, 0x0b, 0x68, 0x1f } }
 
 #define MAX_REFLOW_DEPTH  200
 
 class nsIHTMLContentSink : public nsIContentSink 
 {
 public:
 
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_IHTML_CONTENT_SINK_IID)
@@ -212,24 +211,16 @@ public:
    *
    * XXX Should the parser also parse the internal subset?
    *
    * @param  nsIParserNode reference to parser node interface
    */
   NS_IMETHOD AddDocTypeDecl(const nsIParserNode& aNode) = 0;
 
   /**
-   * This gets called by the parser to notify observers of
-   * the tag
-   *
-   * @param aErrorResult the error code
-   */
-  NS_IMETHOD NotifyTagObservers(nsIParserNode* aNode) = 0;
-
-  /**
    * Call this method to determnine if a FORM is on the sink's stack
    *
    * @return true if found else false
    */
   NS_IMETHOD_(bool) IsFormOnStack() = 0;
 
 };
 
--- a/parser/htmlparser/public/nsIParserService.h
+++ b/parser/htmlparser/public/nsIParserService.h
@@ -47,35 +47,16 @@ class nsIParser;
 class nsIParserNode;
 
 #define NS_PARSERSERVICE_CONTRACTID "@mozilla.org/parser/parser-service;1"
 
 // {90a92e37-abd6-441b-9b39-4064d98e1ede}
 #define NS_IPARSERSERVICE_IID \
 { 0x90a92e37, 0xabd6, 0x441b, { 0x9b, 0x39, 0x40, 0x64, 0xd9, 0x8e, 0x1e, 0xde } }
 
-// {78081E70-AD53-11d5-8498-0010A4E0C706}
-#define NS_IOBSERVERENTRY_IID \
-{ 0x78081e70, 0xad53, 0x11d5, { 0x84, 0x98, 0x00, 0x10, 0xa4, 0xe0, 0xc7, 0x06 } }
-
-
-class nsIObserverEntry : public nsISupports {
- public:
-  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IOBSERVERENTRY_IID)
-
-  NS_IMETHOD Notify(nsIParserNode* aNode,
-                    nsIParser* aParser,
-                    nsISupports* aDocShell,
-                    const PRUint32 aFlags) = 0;
-
-};
-
-
-NS_DEFINE_STATIC_IID_ACCESSOR(nsIObserverEntry, NS_IOBSERVERENTRY_IID)
-
 class nsIParserService : public nsISupports {
  public:
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_IPARSERSERVICE_IID)
 
   /**
    * Looks up the nsHTMLTag enum value corresponding to the tag in aAtom. The
    * lookup happens case insensitively.
    *
@@ -140,26 +121,16 @@ class nsIParserService : public nsISuppo
                                         PRInt32* aUnicode) const = 0;
 
   NS_IMETHOD HTMLConvertUnicodeToEntity(PRInt32 aUnicode,
                                         nsCString& aEntity) const = 0;
 
   NS_IMETHOD IsContainer(PRInt32 aId, bool& aIsContainer) const = 0;
   NS_IMETHOD IsBlock(PRInt32 aId, bool& aIsBlock) const = 0;
 
-  // Observer mechanism
-  NS_IMETHOD RegisterObserver(nsIElementObserver* aObserver,
-                              const nsAString& aTopic,
-                              const eHTMLTags* aTags = nsnull) = 0;
-
-  NS_IMETHOD UnregisterObserver(nsIElementObserver* aObserver,
-                                const nsAString& aTopic) = 0;
-  NS_IMETHOD GetTopicObservers(const nsAString& aTopic,
-                               nsIObserverEntry** aEntry) = 0;
-
   virtual nsresult CheckQName(const nsAString& aQName,
                               bool aNamespaceAware,
                               const PRUnichar** aColon) = 0;
   virtual bool IsXMLLetter(PRUnichar aChar) = 0;
   virtual bool IsXMLNCNameChar(PRUnichar aChar) = 0;
 
   /**
    * Decodes an entity into a UTF-16 character. If a ; is found between aStart
--- a/parser/htmlparser/src/CNavDTD.cpp
+++ b/parser/htmlparser/src/CNavDTD.cpp
@@ -1081,20 +1081,16 @@ CNavDTD::WillHandleStartTag(CToken* aTok
       // the correct node.
       while (stackDepth != MAX_REFLOW_DEPTH && NS_SUCCEEDED(result)) {
         result = CloseContainersTo(mBodyContext->Last(), false);
         --stackDepth;
       }
     }
   }
 
-  if (aTag <= NS_HTML_TAG_MAX) {
-    result = mSink->NotifyTagObservers(&aNode);
-  }
-
   return result;
 }
 
 static void
 PushMisplacedAttributes(nsIParserNode& aNode, nsDeque& aDeque)
 {
   nsCParserNode& theAttrNode = static_cast<nsCParserNode &>(aNode);
 
--- a/parser/htmlparser/src/nsDTDUtils.cpp
+++ b/parser/htmlparser/src/nsDTDUtils.cpp
@@ -1021,132 +1021,8 @@ nsCParserNode* nsNodeAllocator::CreateNo
 #endif
   return result;
 }
 
 #ifdef DEBUG
 void DebugDumpContainmentRules(nsIDTD& theDTD,const char* aFilename,const char* aTitle) {
 }
 #endif
-
-/**************************************************************
-  This defines the topic object used by the observer service.
-  The observerService uses a list of these, 1 per topic when
-  registering tags.
- **************************************************************/
-NS_IMPL_ISUPPORTS1(nsObserverEntry, nsIObserverEntry)
-
-nsObserverEntry::nsObserverEntry(const nsAString& aTopic) : mTopic(aTopic) 
-{
-  memset(mObservers, 0, sizeof(mObservers));
-}
-
-nsObserverEntry::~nsObserverEntry() {
-  for (PRInt32 i = 0; i <= NS_HTML_TAG_MAX; ++i){
-    delete mObservers[i];
-  }
-}
-
-NS_IMETHODIMP
-nsObserverEntry::Notify(nsIParserNode* aNode,
-                        nsIParser* aParser,
-                        nsISupports* aDocShell,
-                        const PRUint32 aFlags) 
-{
-  NS_ENSURE_ARG_POINTER(aNode);
-  NS_ENSURE_ARG_POINTER(aParser);
-
-  nsresult result = NS_OK;
-  eHTMLTags theTag = (eHTMLTags)aNode->GetNodeType();
- 
-  if (theTag <= NS_HTML_TAG_MAX) {
-    nsCOMArray<nsIElementObserver>* theObservers = mObservers[theTag];
-    if (theObservers) {
-      PRInt32   theCharsetSource;
-      nsCAutoString      charset;
-      aParser->GetDocumentCharset(charset,theCharsetSource);
-      NS_ConvertASCIItoUTF16 theCharsetValue(charset);
-
-      PRInt32 theAttrCount = aNode->GetAttributeCount(); 
-      PRInt32 theObserversCount = theObservers->Count();
-      if (0 < theObserversCount){
-        nsTArray<nsString> keys(theAttrCount + 4), values(theAttrCount + 4);
-
-        // XXX this and the following code may be a performance issue.
-        // Every key and value is copied and added to an voidarray (causing at
-        // least 2 allocations for mImpl, usually more, plus at least 1 per
-        // string (total = 2*(keys+3) + 2(or more) array allocations )).
-        PRInt32 index;
-        for (index = 0; index < theAttrCount; ++index) {
-          keys.AppendElement(aNode->GetKeyAt(index));
-          values.AppendElement(aNode->GetValueAt(index));
-        } 
-
-        nsAutoString intValue;
-
-        keys.AppendElement(NS_LITERAL_STRING("charset")); 
-        values.AppendElement(theCharsetValue);       
-      
-        keys.AppendElement(NS_LITERAL_STRING("charsetSource")); 
-        intValue.AppendInt(PRInt32(theCharsetSource),10);
-        values.AppendElement(intValue); 
-
-        keys.AppendElement(NS_LITERAL_STRING("X_COMMAND"));
-        values.AppendElement(NS_LITERAL_STRING("text/html")); 
-
-        nsCOMPtr<nsIChannel> channel;
-        aParser->GetChannel(getter_AddRefs(channel));
-
-        for (index=0;index<theObserversCount;++index) {
-          nsIElementObserver* observer = theObservers->ObjectAt(index);
-          if (observer) {
-            result = observer->Notify(aDocShell, channel,
-                                      nsHTMLTags::GetStringValue(theTag),
-                                      &keys, &values, aFlags);
-            if (NS_FAILED(result)) {
-              break;
-            }
-
-            if (result == NS_HTMLPARSER_VALID_META_CHARSET) {
-              // Inform the parser that this meta tag contained a valid
-              // charset. See bug 272815
-              aParser->SetDocumentCharset(charset, kCharsetFromMetaTag);
-              result = NS_OK;
-            }
-          }
-        } 
-      } 
-    }
-  }
-  return result;
-}
-
-bool 
-nsObserverEntry::Matches(const nsAString& aString) {
-  bool result = aString.Equals(mTopic);
-  return result;
-}
-
-nsresult
-nsObserverEntry::AddObserver(nsIElementObserver *aObserver,
-                             eHTMLTags aTag) 
-{
-  if (aObserver) {
-    if (!mObservers[aTag]) {
-      mObservers[aTag] = new nsCOMArray<nsIElementObserver>();
-      if (!mObservers[aTag]) {
-        return NS_ERROR_OUT_OF_MEMORY;
-      }
-    }
-    mObservers[aTag]->AppendObject(aObserver);
-  }
-  return NS_OK;
-}
-
-void 
-nsObserverEntry::RemoveObserver(nsIElementObserver *aObserver)
-{
-  for (PRInt32 i=0; i <= NS_HTML_TAG_MAX; ++i){
-    if (mObservers[i]) {
-      mObservers[i]->RemoveObject(aObserver);
-    }
-  }
-}
--- a/parser/htmlparser/src/nsDTDUtils.h
+++ b/parser/htmlparser/src/nsDTDUtils.h
@@ -416,46 +416,18 @@ inline PRInt32 IndexOfTagInSet(PRInt32 a
  * @param   aTag -- tag to be search for in set
  * @param   aTagSet -- set of tags to be searched
  * @return
  */
 inline bool FindTagInSet(PRInt32 aTag,const eHTMLTags *aTagSet,PRInt32 aCount)  {
   return bool(-1<IndexOfTagInSet(aTag,aTagSet,aCount));
 }
 
-/**************************************************************
-  This defines the topic object used by the observer service.
-  The observerService uses a list of these, 1 per topic when
-  registering tags.
- **************************************************************/
-
-class nsObserverEntry : public nsIObserverEntry {
-public:
-  NS_DECL_ISUPPORTS
-            nsObserverEntry(const nsAString& aString);
-  virtual   ~nsObserverEntry();
-
-  NS_IMETHOD Notify(nsIParserNode* aNode,
-                    nsIParser* aParser,
-                    nsISupports* aDocShell,
-                    const PRUint32 aFlags);
-
-  nsresult   AddObserver(nsIElementObserver* aObserver,eHTMLTags aTag);
-  void       RemoveObserver(nsIElementObserver* aObserver);
-  bool       Matches(const nsAString& aTopic);
-
-protected:
-  nsString mTopic;
-  nsCOMArray<nsIElementObserver>* mObservers[NS_HTML_TAG_MAX + 1];
-  friend class nsMatchesTopic;
-};
-
 /*********************************************************************************************/
 
-
 struct TagList {
   size_t mCount;
   const eHTMLTags *mTags;
 };
 
 /**
  * Find the last member of given taglist on the given context
  * @update	gess 12/14/99
--- a/parser/htmlparser/src/nsParserService.cpp
+++ b/parser/htmlparser/src/nsParserService.cpp
@@ -42,27 +42,22 @@
 #include "nsHTMLEntities.h"
 #include "nsElementTable.h"
 #include "nsICategoryManager.h"
 #include "nsCategoryManagerUtils.h"
 
 extern "C" int MOZ_XMLCheckQName(const char* ptr, const char* end,
                                  int ns_aware, const char** colon);
 
-nsParserService::nsParserService() : mEntries(0)
+nsParserService::nsParserService()
 {
-  mHaveNotifiedCategoryObservers = false;
 }
 
 nsParserService::~nsParserService()
 {
-  nsObserverEntry *entry = nsnull;
-  while( (entry = static_cast<nsObserverEntry*>(mEntries.Pop())) ) {
-    NS_RELEASE(entry);
-  }
 }
 
 NS_IMPL_ISUPPORTS1(nsParserService, nsIParserService)
 
 PRInt32
 nsParserService::HTMLAtomTagToId(nsIAtom* aAtom) const
 {
   return nsHTMLTags::LookupTag(nsDependentAtomString(aAtom));
@@ -133,70 +128,16 @@ nsParserService::IsBlock(PRInt32 aId, bo
   }
   else {
     aIsBlock = false;
   }
 
   return NS_OK;
 }
 
-NS_IMETHODIMP
-nsParserService::RegisterObserver(nsIElementObserver* aObserver,
-                                  const nsAString& aTopic,
-                                  const eHTMLTags* aTags)
-{
-  nsresult result = NS_OK;
-  nsObserverEntry* entry = GetEntry(aTopic);
-
-  if(!entry) {
-    result = CreateEntry(aTopic,&entry);
-    NS_ENSURE_SUCCESS(result,result);
-  }
-
-  while (*aTags) {
-    if (*aTags <= NS_HTML_TAG_MAX) {
-      entry->AddObserver(aObserver,*aTags);
-    }
-    ++aTags;
-  }
-
-  return result;
-}
-
-NS_IMETHODIMP
-nsParserService::UnregisterObserver(nsIElementObserver* aObserver,
-                                    const nsAString& aTopic)
-{
-  PRInt32 count = mEntries.GetSize();
-
-  for (PRInt32 i=0; i < count; ++i) {
-    nsObserverEntry* entry = static_cast<nsObserverEntry*>(mEntries.ObjectAt(i));
-    if (entry && entry->Matches(aTopic)) {
-      entry->RemoveObserver(aObserver);
-    }
-  }
-
-  return NS_OK;
-}
-
-NS_IMETHODIMP
-nsParserService::GetTopicObservers(const nsAString& aTopic,
-                                   nsIObserverEntry** aEntry) {
-  nsresult result = NS_OK;
-  nsObserverEntry* entry = GetEntry(aTopic);
-
-  if (!entry) {
-    return NS_ERROR_NULL_POINTER;
-  }
-
-  NS_ADDREF(*aEntry = entry);
-
-  return result;
-}
-
 nsresult
 nsParserService::CheckQName(const nsAString& aQName,
                             bool aNamespaceAware,
                             const PRUnichar** aColon)
 {
   const char* colon;
   const PRUnichar *begin, *end;
   begin = aQName.BeginReading();
@@ -212,52 +153,8 @@ nsParserService::CheckQName(const nsAStr
 
   // MOZ_EXPAT_EMPTY_QNAME || MOZ_EXPAT_INVALID_CHARACTER
   if (result == (1 << 0) || result == (1 << 1)) {
     return NS_ERROR_DOM_INVALID_CHARACTER_ERR;
   }
 
   return NS_ERROR_DOM_NAMESPACE_ERR;
 }
-
-class nsMatchesTopic : public nsDequeFunctor{
-  const nsAString& mString;
-public:
-  bool matched;
-  nsObserverEntry* entry;
-  nsMatchesTopic(const nsAString& aString):mString(aString),matched(false){}
-  virtual void* operator()(void* anObject){
-    entry=static_cast<nsObserverEntry*>(anObject);
-    matched=mString.Equals(entry->mTopic);
-    return matched ? nsnull : anObject;
-  }
-};
-
-// XXX This may be more efficient as a HashTable instead of linear search
-nsObserverEntry*
-nsParserService::GetEntry(const nsAString& aTopic)
-{
-  if (!mHaveNotifiedCategoryObservers) {
-    mHaveNotifiedCategoryObservers = true;
-    NS_CreateServicesFromCategory("parser-service-category",
-                                  static_cast<nsISupports*>(static_cast<void*>(this)),
-                                  "parser-service-start"); 
-  }
-
-  nsMatchesTopic matchesTopic(aTopic);
-  mEntries.FirstThat(*&matchesTopic);
-  return matchesTopic.matched?matchesTopic.entry:nsnull;
-}
-
-nsresult
-nsParserService::CreateEntry(const nsAString& aTopic, nsObserverEntry** aEntry)
-{
-  *aEntry = new nsObserverEntry(aTopic);
-
-  if (!*aEntry) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  NS_ADDREF(*aEntry);
-  mEntries.Push(*aEntry);
-
-  return NS_OK;
-}
--- a/parser/htmlparser/src/nsParserService.h
+++ b/parser/htmlparser/src/nsParserService.h
@@ -65,26 +65,16 @@ public:
 
   NS_IMETHOD HTMLConvertEntityToUnicode(const nsAString& aEntity, 
                                         PRInt32* aUnicode) const;
   NS_IMETHOD HTMLConvertUnicodeToEntity(PRInt32 aUnicode,
                                         nsCString& aEntity) const;
   NS_IMETHOD IsContainer(PRInt32 aId, bool& aIsContainer) const;
   NS_IMETHOD IsBlock(PRInt32 aId, bool& aIsBlock) const;
 
-   // Observer mechanism
-  NS_IMETHOD RegisterObserver(nsIElementObserver* aObserver,
-                              const nsAString& aTopic,
-                              const eHTMLTags* aTags = nsnull);
-
-  NS_IMETHOD UnregisterObserver(nsIElementObserver* aObserver,
-                                const nsAString& aTopic);
-  NS_IMETHOD GetTopicObservers(const nsAString& aTopic,
-                               nsIObserverEntry** aEntry);
-
   nsresult CheckQName(const nsAString& aQName,
                       bool aNamespaceAware, const PRUnichar** aColon);
 
   bool IsXMLLetter(PRUnichar aChar)
   {
     return !!MOZ_XMLIsLetter(reinterpret_cast<const char*>(&aChar));
   }
   bool IsXMLNCNameChar(PRUnichar aChar)
@@ -95,19 +85,11 @@ public:
                         const PRUnichar** aNext, PRUnichar* aResult)
   {
     *aNext = nsnull;
     return MOZ_XMLTranslateEntity(reinterpret_cast<const char*>(aStart),
                                   reinterpret_cast<const char*>(aEnd),
                                   reinterpret_cast<const char**>(aNext),
                                   aResult);
   }
-
-protected:
-  nsObserverEntry* GetEntry(const nsAString& aTopic);
-  nsresult CreateEntry(const nsAString& aTopic,
-                       nsObserverEntry** aEntry);
-
-  nsDeque  mEntries;  //each topic holds a list of observers per tag.
-  bool     mHaveNotifiedCategoryObservers;
 };
 
 #endif