From 523e4bc04026b2929b73ef32f6d5012dc0ff9556 Mon Sep 17 00:00:00 2001 From: "sdwilsh%shawnwilsher.com" Date: Mon, 30 Apr 2007 18:05:27 +0000 Subject: [PATCH] Bug 378785 - Crash on launch for nightly builds in Growl code. r=bsmedberg --- toolkit/components/alerts/Makefile.in | 10 +- toolkit/components/alerts/src/mac/Makefile.in | 21 ++-- .../alerts/src/mac/growl/Makefile.in | 12 +-- .../alerts/src/mac/mozGrowlDelegate.mm | 2 +- .../src/mac/nsAlertsImageLoadListener.h | 2 +- .../alerts/src/mac/nsAlertsService.h | 12 --- .../alerts/src/mac/nsAlertsService.mm | 44 +------- .../alerts/src/mac/nsAlertsServiceModule.cpp | 100 ++++++++++++++++++ toolkit/components/build/Makefile.in | 12 --- .../components/build/nsToolkitCompsModule.cpp | 11 +- 10 files changed, 127 insertions(+), 99 deletions(-) create mode 100644 toolkit/components/alerts/src/mac/nsAlertsServiceModule.cpp diff --git a/toolkit/components/alerts/Makefile.in b/toolkit/components/alerts/Makefile.in index ef1ac836127..b7d17d0f31c 100644 --- a/toolkit/components/alerts/Makefile.in +++ b/toolkit/components/alerts/Makefile.in @@ -49,9 +49,13 @@ ifneq (,$(filter $(MOZ_WIDGET_TOOLKIT),windows gtk gtk2)) DIRS += src endif -#ifneq (,$(filter mac cocoa, $(MOZ_WIDGET_TOOLKIT))) -#DIRS += src/mac -#endif +ifneq (,$(filter cocoa, $(MOZ_WIDGET_TOOLKIT))) +# src/mac/growl needs to be first for linking to work! +DIRS += \ + src/mac/growl \ + src/mac \ + $(NULL) +endif include $(topsrcdir)/config/rules.mk diff --git a/toolkit/components/alerts/src/mac/Makefile.in b/toolkit/components/alerts/src/mac/Makefile.in index 6ac6d268441..60e7691f5bc 100644 --- a/toolkit/components/alerts/src/mac/Makefile.in +++ b/toolkit/components/alerts/src/mac/Makefile.in @@ -43,10 +43,8 @@ include $(DEPTH)/config/autoconf.mk MODULE = alerts LIBRARY_NAME = alerts_s -FORCE_STATIC_LIB = 1 -LIBXUL_LIBRARY = 1 - -DIRS = growl +IS_COMPONENT = 1 +FORCE_SHARED_LIB = 1 REQUIRES = \ xpcom \ @@ -61,13 +59,24 @@ CMMSRCS = \ nsAlertsImageLoadListener.mm \ $(NULL) +CPPSRCS = \ + nsAlertsServiceModule.cpp \ + $(NULL) + LOCAL_INCLUDES += \ -I$(srcdir)/growl/ \ -I$(topsrcdir)/toolkit/components/build/ \ $(NULL) -include $(topsrcdir)/config/rules.mk +SHARED_LIBRARY_LIBS = \ + growl/$(LIB_PREFIX)growl_s.$(LIB_SUFFIX) \ + $(NULL) EXTRA_DSO_LDOPTS += \ - $(MOZ_COMPONENT_LIBS) \ + -framework Carbon \ + -framework Cocoa \ + $(XPCOM_GLUE_LDOPTS) \ + $(NSPR_LIBS) \ $(NULL) + +include $(topsrcdir)/config/rules.mk diff --git a/toolkit/components/alerts/src/mac/growl/Makefile.in b/toolkit/components/alerts/src/mac/growl/Makefile.in index ce69cb565ab..f8aef184fb0 100644 --- a/toolkit/components/alerts/src/mac/growl/Makefile.in +++ b/toolkit/components/alerts/src/mac/growl/Makefile.in @@ -44,7 +44,7 @@ include $(DEPTH)/config/autoconf.mk MODULE = alerts LIBRARY_NAME = growl_s FORCE_STATIC_LIB = 1 -LIBXUL_LIBRARY = 1 +FORCE_USE_PIC = 1 CMSRCS = \ GrowlApplicationBridge.m \ @@ -57,13 +57,3 @@ CSRCS = \ $(NULL) include $(topsrcdir)/config/rules.mk - -LDFLAGS += \ - -framework Carbon \ - -framework Foundation \ - -framework AppKit \ - $(NULL) - -EXTRA_DSO_LDOPTS += \ - $(MOZ_COMPONENT_LIBS) \ - $(NULL) diff --git a/toolkit/components/alerts/src/mac/mozGrowlDelegate.mm b/toolkit/components/alerts/src/mac/mozGrowlDelegate.mm index e96adff88ce..98f3402d640 100644 --- a/toolkit/components/alerts/src/mac/mozGrowlDelegate.mm +++ b/toolkit/components/alerts/src/mac/mozGrowlDelegate.mm @@ -37,7 +37,7 @@ #import "mozGrowlDelegate.h" #include "nsIObserver.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "nscore.h" #include "nsCOMPtr.h" #include "nsServiceManagerUtils.h" diff --git a/toolkit/components/alerts/src/mac/nsAlertsImageLoadListener.h b/toolkit/components/alerts/src/mac/nsAlertsImageLoadListener.h index 87a116763c3..ccc41b790c0 100644 --- a/toolkit/components/alerts/src/mac/nsAlertsImageLoadListener.h +++ b/toolkit/components/alerts/src/mac/nsAlertsImageLoadListener.h @@ -40,7 +40,7 @@ #import "mozGrowlDelegate.h" #include "nsIStreamLoader.h" -#include "nsString.h" +#include "nsStringAPI.h" class nsAlertsImageLoadListener : public nsIStreamLoaderObserver { diff --git a/toolkit/components/alerts/src/mac/nsAlertsService.h b/toolkit/components/alerts/src/mac/nsAlertsService.h index 11697fae29b..a52e9216924 100644 --- a/toolkit/components/alerts/src/mac/nsAlertsService.h +++ b/toolkit/components/alerts/src/mac/nsAlertsService.h @@ -39,7 +39,6 @@ #include "nsIAlertsService.h" #include "nsIObserver.h" -#include "nsToolkitCompsCID.h" struct GrowlDelegateWrapper; @@ -58,15 +57,4 @@ private: virtual ~nsAlertsService(); }; -class nsModuleComponentInfo; -NS_METHOD nsAlertsServiceRegister(nsIComponentManager* aCompMgr, - nsIFile *aPath, - const char* registryLocation, - const char* componentType, - const nsModuleComponentInfo* info); -NS_METHOD nsAlertsServiceUnregister(nsIComponentManager* aCompMgr, - nsIFile* aPath, - const char* registryLocation, - const nsModuleComponentInfo* info); - #endif // nsAlertsService_h_ diff --git a/toolkit/components/alerts/src/mac/nsAlertsService.mm b/toolkit/components/alerts/src/mac/nsAlertsService.mm index 1861333563d..714fb8f7da2 100644 --- a/toolkit/components/alerts/src/mac/nsAlertsService.mm +++ b/toolkit/components/alerts/src/mac/nsAlertsService.mm @@ -35,16 +35,13 @@ * ***** END LICENSE BLOCK ***** */ #include "nsAlertsService.h" -#include "nsString.h" +#include "nsStringAPI.h" #include "nsAlertsImageLoadListener.h" #include "nsIURI.h" #include "nsIStreamLoader.h" #include "nsNetUtil.h" #include "nsCRT.h" #include "nsCOMPtr.h" -#include "nsIServiceManager.h" -#include "nsICategoryManager.h" -#include "nsMemory.h" #import "mozGrowlDelegate.h" #import "GrowlApplicationBridge.h" @@ -142,42 +139,3 @@ nsAlertsService::Observe(nsISupports* aSubject, const char* aTopic, return NS_OK; } -NS_METHOD -nsAlertsServiceRegister(nsIComponentManager* aCompMgr, - nsIFile* aPath, - const char* registryLocation, - const char* componentType, - const nsModuleComponentInfo* info) -{ - nsresult rv; - - nsCOMPtr catman = - do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv); - NS_ENSURE_SUCCESS(rv, rv); - - char* prev = nsnull; - rv = catman->AddCategoryEntry("app-startup", "nsAlertsService", - NS_ALERTSERVICE_CONTRACTID, PR_TRUE, PR_TRUE, - &prev); - if (prev) - nsMemory::Free(prev); - - return rv; -} - -NS_METHOD -nsAlertsServiceUnregister(nsIComponentManager* aCompMgr, - nsIFile* aPath, - const char* registryLocation, - const nsModuleComponentInfo* info) -{ - nsresult rv; - - nsCOMPtr catman = - do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv); - if (NS_FAILED(rv)) return rv; - - rv = catman->DeleteCategoryEntry("app-startup", "nsAlertsService", PR_TRUE); - - return rv; -} diff --git a/toolkit/components/alerts/src/mac/nsAlertsServiceModule.cpp b/toolkit/components/alerts/src/mac/nsAlertsServiceModule.cpp new file mode 100644 index 00000000000..af397f44245 --- /dev/null +++ b/toolkit/components/alerts/src/mac/nsAlertsServiceModule.cpp @@ -0,0 +1,100 @@ +/* ***** 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 Growl implementation of nsIAlertsService. + * + * The Initial Developer of the Original Code is + * Shawn Wilsher . + * Portions created by the Initial Developer are Copyright (C) 2006-2007 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * Alternatively, the contents of this file may be used under the terms of + * either 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 ***** */ + +#include "nsAlertsService.h" +#include "nsToolkitCompsCID.h" +#include "nsIGenericFactory.h" +#include "nsCOMPtr.h" +#include "nsIServiceManager.h" +#include "nsServiceManagerUtils.h" +#include "nsICategoryManager.h" +#include "nsMemory.h" + +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsAlertsService, Init) + +static +NS_METHOD +nsAlertsServiceRegister(nsIComponentManager* aCompMgr, + nsIFile* aPath, + const char* registryLocation, + const char* componentType, + const nsModuleComponentInfo* info) +{ + nsresult rv; + + nsCOMPtr catman = + do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + + char* prev = nsnull; + rv = catman->AddCategoryEntry("app-startup", "nsAlertsService", + NS_ALERTSERVICE_CONTRACTID, PR_TRUE, PR_TRUE, + &prev); + if (prev) + nsMemory::Free(prev); + + return rv; +} + +static +NS_METHOD +nsAlertsServiceUnregister(nsIComponentManager* aCompMgr, + nsIFile* aPath, + const char* registryLocation, + const nsModuleComponentInfo* info) +{ + nsresult rv; + + nsCOMPtr catman = + do_GetService(NS_CATEGORYMANAGER_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + + rv = catman->DeleteCategoryEntry("app-startup", "nsAlertsService", PR_TRUE); + + return rv; +} + +static const nsModuleComponentInfo components[] = +{ + { "Alerts Service", + NS_ALERTSSERVICE_CID, + NS_ALERTSERVICE_CONTRACTID, + nsAlertsServiceConstructor, + nsAlertsServiceRegister, + nsAlertsServiceUnregister }, +}; + +NS_IMPL_NSGETMODULE(nsAlertsServiceModule, components) diff --git a/toolkit/components/build/Makefile.in b/toolkit/components/build/Makefile.in index c66dce36f72..a0962f05caf 100644 --- a/toolkit/components/build/Makefile.in +++ b/toolkit/components/build/Makefile.in @@ -54,10 +54,6 @@ ifneq (,$(filter $(MOZ_WIDGET_TOOLKIT),windows gtk gtk2)) ALERTS_SERVICE=1 DEFINES += -DALERTS_SERVICE endif -#ifneq (,$(filter cocoa, $(MOZ_WIDGET_TOOLKIT))) -#ALERTS_SERVICE_MAC=1 -#DEFINES += -DALERTS_SERVICE_MAC -#endif REQUIRES = \ xpcom \ @@ -110,14 +106,6 @@ LOCAL_INCLUDES += \ -I$(srcdir)/../alerts/src \ $(NULL) endif -ifdef ALERTS_SERVICE_MAC -LOCAL_INCLUDES += \ - -I$(srcdir)/../alerts/src/mac \ - $(NULL) -EXTRA_DSO_LDOPTS += \ - -framework Cocoa \ - $(NULL) -endif SHARED_LIBRARY_LIBS = \ ../startup/src/$(LIB_PREFIX)appstartup_s.$(LIB_SUFFIX) \ diff --git a/toolkit/components/build/nsToolkitCompsModule.cpp b/toolkit/components/build/nsToolkitCompsModule.cpp index df71f4398e0..80e473a1517 100644 --- a/toolkit/components/build/nsToolkitCompsModule.cpp +++ b/toolkit/components/build/nsToolkitCompsModule.cpp @@ -40,7 +40,7 @@ #include "nsUserInfo.h" #include "nsXPFEComponentsCID.h" #include "nsToolkitCompsCID.h" -#if defined(ALERTS_SERVICE) || defined(ALERTS_SERVICE_MAC) +#ifdef ALERTS_SERVICE #include "nsAlertsService.h" #endif @@ -73,8 +73,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsUserInfo) #ifdef ALERTS_SERVICE NS_GENERIC_FACTORY_CONSTRUCTOR(nsAlertsService) -#elif defined(ALERTS_SERVICE_MAC) -NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsAlertsService, Init) #endif #ifndef MOZ_SUITE @@ -118,13 +116,6 @@ static const nsModuleComponentInfo components[] = NS_ALERTSSERVICE_CID, NS_ALERTSERVICE_CONTRACTID, nsAlertsServiceConstructor }, -#elif defined(ALERTS_SERVICE_MAC) - { "Alerts Service", - NS_ALERTSSERVICE_CID, - NS_ALERTSERVICE_CONTRACTID, - nsAlertsServiceConstructor, - nsAlertsServiceRegister, - nsAlertsServiceUnregister }, #endif #ifndef MOZ_SUITE // XXX Suite isn't ready to include this just yet