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