From d4204329ee2da4db12fc7e1a0c78c37fe0d0d846 Mon Sep 17 00:00:00 2001 From: "harishd%netscape.com" Date: Thu, 14 Feb 2002 23:18:28 +0000 Subject: [PATCH] ** Patch provided by dougt ** Create parser-service category.b=107087, r=harishd, sr=alecf git-svn-id: svn://10.0.0.236/trunk@114537 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/htmlparser/src/nsParserService.cpp | 10 +++++++ mozilla/htmlparser/src/nsParserService.h | 1 + mozilla/intl/chardet/src/nsCharDetModule.cpp | 28 +++++++++++++++---- .../chardet/src/nsMetaCharsetObserver.cpp | 3 +- .../parser/htmlparser/src/nsParserService.cpp | 10 +++++++ .../parser/htmlparser/src/nsParserService.h | 1 + 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/mozilla/htmlparser/src/nsParserService.cpp b/mozilla/htmlparser/src/nsParserService.cpp index 590442568cf..850963c5d81 100644 --- a/mozilla/htmlparser/src/nsParserService.cpp +++ b/mozilla/htmlparser/src/nsParserService.cpp @@ -22,10 +22,12 @@ #include "nsParserService.h" #include "nsHTMLEntities.h" #include "nsElementTable.h" +#include "nsICategoryManager.h" nsParserService::nsParserService() : mEntries(0) { NS_INIT_ISUPPORTS(); + mHaveNotifiedCategoryObservers = PR_FALSE; } nsParserService::~nsParserService() @@ -185,6 +187,14 @@ nsParserService::GetTopicObservers(const nsAString& aTopic, nsObserverEntry* nsParserService::GetEntry(const nsAString& aTopic) { + if(!mHaveNotifiedCategoryObservers) { + mHaveNotifiedCategoryObservers = PR_TRUE; + NS_CreateServicesFromCategory("parser-service-category", + NS_STATIC_CAST(nsISupports*,NS_STATIC_CAST(void*,this)), + "parser-service-start"); + } + + PRInt32 index = 0; nsObserverEntry* entry = nsnull; diff --git a/mozilla/htmlparser/src/nsParserService.h b/mozilla/htmlparser/src/nsParserService.h index fc8bbd2de83..3143cd979d2 100644 --- a/mozilla/htmlparser/src/nsParserService.h +++ b/mozilla/htmlparser/src/nsParserService.h @@ -63,6 +63,7 @@ protected: nsObserverEntry** aEntry); nsDeque mEntries; //each topic holds a list of observers per tag. + PRBool mHaveNotifiedCategoryObservers; }; #endif diff --git a/mozilla/intl/chardet/src/nsCharDetModule.cpp b/mozilla/intl/chardet/src/nsCharDetModule.cpp index eb0c1e3b881..27cb2e80155 100644 --- a/mozilla/intl/chardet/src/nsCharDetModule.cpp +++ b/mozilla/intl/chardet/src/nsCharDetModule.cpp @@ -134,10 +134,27 @@ static NS_METHOD nsMetaCharsetObserverRegistrationProc(nsIComponentManager *aCom nsCOMPtr categoryManager(do_GetService("@mozilla.org/categorymanager;1", &rv)); if (NS_SUCCEEDED(rv)) { - rv = categoryManager->AddCategoryEntry(APPSTARTUP_CATEGORY, "Meta Charset", - "service," NS_META_CHARSET_CONTRACTID, - PR_TRUE, PR_TRUE, - nsnull); + rv = categoryManager->AddCategoryEntry("parser-service-category", + "Meta Charset Service", + NS_META_CHARSET_CONTRACTID, + PR_TRUE, PR_TRUE, + nsnull); + } + return rv; +} + +static NS_METHOD nsMetaCharsetObserverUnegistrationProc(nsIComponentManager *aCompMgr, + nsIFile *aPath, + const char *registryLocation, + const nsModuleComponentInfo *info) +{ + nsresult rv; + nsCOMPtr + categoryManager(do_GetService("@mozilla.org/categorymanager;1", &rv)); + if (NS_SUCCEEDED(rv)) { + rv = categoryManager->DeleteCategoryEntry("parser-service-category", + NS_META_CHARSET_CONTRACTID, + PR_TRUE); } return rv; } @@ -409,7 +426,8 @@ static const nsModuleComponentInfo components[] = { { "Meta Charset", NS_META_CHARSET_CID, NS_META_CHARSET_CONTRACTID, nsMetaCharsetObserverConstructor, - nsMetaCharsetObserverRegistrationProc, NULL}, + nsMetaCharsetObserverRegistrationProc, nsMetaCharsetObserverUnegistrationProc, + NULL}, { "Document Charset Info", NS_DOCUMENTCHARSETINFO_CID, NS_DOCUMENTCHARSETINFO_CONTRACTID, nsDocumentCharsetInfoConstructor, NULL, NULL}, diff --git a/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp b/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp index cb2e5cbf006..ba6c697cc14 100644 --- a/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp +++ b/mozilla/intl/chardet/src/nsMetaCharsetObserver.cpp @@ -391,8 +391,9 @@ NS_IMETHODIMP nsMetaCharsetObserver::Observe(nsISupports *aSubject, const PRUnichar *aData) { nsresult rv = NS_OK; - if (!nsCRT::strcmp(aTopic, APPSTARTUP_CATEGORY)) + if (!nsCRT::strcmp(aTopic, "parser-service-start")) { rv = Start(); + } return rv; } diff --git a/mozilla/parser/htmlparser/src/nsParserService.cpp b/mozilla/parser/htmlparser/src/nsParserService.cpp index 590442568cf..850963c5d81 100644 --- a/mozilla/parser/htmlparser/src/nsParserService.cpp +++ b/mozilla/parser/htmlparser/src/nsParserService.cpp @@ -22,10 +22,12 @@ #include "nsParserService.h" #include "nsHTMLEntities.h" #include "nsElementTable.h" +#include "nsICategoryManager.h" nsParserService::nsParserService() : mEntries(0) { NS_INIT_ISUPPORTS(); + mHaveNotifiedCategoryObservers = PR_FALSE; } nsParserService::~nsParserService() @@ -185,6 +187,14 @@ nsParserService::GetTopicObservers(const nsAString& aTopic, nsObserverEntry* nsParserService::GetEntry(const nsAString& aTopic) { + if(!mHaveNotifiedCategoryObservers) { + mHaveNotifiedCategoryObservers = PR_TRUE; + NS_CreateServicesFromCategory("parser-service-category", + NS_STATIC_CAST(nsISupports*,NS_STATIC_CAST(void*,this)), + "parser-service-start"); + } + + PRInt32 index = 0; nsObserverEntry* entry = nsnull; diff --git a/mozilla/parser/htmlparser/src/nsParserService.h b/mozilla/parser/htmlparser/src/nsParserService.h index fc8bbd2de83..3143cd979d2 100644 --- a/mozilla/parser/htmlparser/src/nsParserService.h +++ b/mozilla/parser/htmlparser/src/nsParserService.h @@ -63,6 +63,7 @@ protected: nsObserverEntry** aEntry); nsDeque mEntries; //each topic holds a list of observers per tag. + PRBool mHaveNotifiedCategoryObservers; }; #endif