From 4351889525632f15d6ca22b853a650392ff450c3 Mon Sep 17 00:00:00 2001 From: "dougt%meer.net" Date: Tue, 6 Sep 2005 19:00:38 +0000 Subject: [PATCH] Making SSR using preferences instead of an explict api. --- minimo/components/ssr/Makefile.in | 1 - minimo/components/ssr/nsISSRSupport.idl | 46 -------- minimo/components/ssr/nsSSRSupport.cpp | 141 ++++++++++++++++++++---- 3 files changed, 119 insertions(+), 69 deletions(-) delete mode 100755 minimo/components/ssr/nsISSRSupport.idl diff --git a/minimo/components/ssr/Makefile.in b/minimo/components/ssr/Makefile.in index dcee56460bdf..72cabf118af2 100755 --- a/minimo/components/ssr/Makefile.in +++ b/minimo/components/ssr/Makefile.in @@ -63,7 +63,6 @@ REQUIRES = \ $(NULL) CPPSRCS = nsSSRSupport.cpp -XPIDLSRCS = nsISSRSupport.idl EXTRA_DSO_LDOPTS += $(MOZ_COMPONENT_LIBS) diff --git a/minimo/components/ssr/nsISSRSupport.idl b/minimo/components/ssr/nsISSRSupport.idl deleted file mode 100755 index c8b6f83bd397..000000000000 --- a/minimo/components/ssr/nsISSRSupport.idl +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- 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 SSR for Minimo - * - * The Initial Developer of the Original Code is - * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 2005 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Doug Turner - * - * 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 "nsISupports.idl" - -[scriptable, uuid(9627754d-f6d0-492a-99e6-d49bc22fed30)] -interface nsISSRSupport : nsISupports -{ - attribute boolean SSREnabled; - attribute boolean siteSSREnabled; -}; diff --git a/minimo/components/ssr/nsSSRSupport.cpp b/minimo/components/ssr/nsSSRSupport.cpp index 024a56a963c0..da4eb06c5494 100755 --- a/minimo/components/ssr/nsSSRSupport.cpp +++ b/minimo/components/ssr/nsSSRSupport.cpp @@ -40,25 +40,30 @@ #include "nsCOMPtr.h" #include "nsIServiceManager.h" #include "nsIGenericFactory.h" +#include "nsIObserver.h" +#include "nsIPrefService.h" +#include "nsIPrefBranch2.h" +#include "nsICategoryManager.h" #include "string.h" #include "nsNetUtil.h" -#include "nsISSRSupport.h" #include "nsIStyleSheetService.h" -// TODO make the SSR persistent. -// auto reload SSR in C. +// TODO auto reload SSR in C. -class nsSSRSupport : public nsISSRSupport +class nsSSRSupport : public nsIObserver { public: nsSSRSupport(); virtual ~nsSSRSupport(); NS_DECL_ISUPPORTS - NS_DECL_NSISSRSUPPORT + NS_DECL_NSIOBSERVER + + nsresult SetSSREnabled(PRBool aSsrEnabled); + nsresult SetSiteSSREnabled(PRBool aSiteSSREnabled); nsCOMPtr m_sss; @@ -76,16 +81,9 @@ nsSSRSupport::~nsSSRSupport() { } -NS_IMPL_ISUPPORTS1(nsSSRSupport, nsISSRSupport) +NS_IMPL_ISUPPORTS1(nsSSRSupport, nsIObserver) -NS_IMETHODIMP -nsSSRSupport::GetSSREnabled(PRBool *aSsrEnabled) -{ - *aSsrEnabled = mUsingSSR; - return NS_OK; -} - -NS_IMETHODIMP +nsresult nsSSRSupport::SetSSREnabled(PRBool aSsrEnabled) { if (!m_sss) @@ -102,14 +100,8 @@ nsSSRSupport::SetSSREnabled(PRBool aSsrEnabled) return m_sss->UnregisterSheet(uri, nsIStyleSheetService::AGENT_SHEET); } -NS_IMETHODIMP -nsSSRSupport::GetSiteSSREnabled(PRBool *aSiteSSREnabled) -{ - *aSiteSSREnabled = mUsingSiteSSR; - return NS_OK; -} - -NS_IMETHODIMP nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled) +nsresult +nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled) { if (!m_sss) return NS_ERROR_NOT_INITIALIZED; @@ -125,6 +117,49 @@ NS_IMETHODIMP nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled) return m_sss->UnregisterSheet(uri, nsIStyleSheetService::AGENT_SHEET); } +NS_IMETHODIMP +nsSSRSupport::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData) +{ + nsresult rv; + + if (!strcmp(aTopic,"xpcom-startup")) + { + nsCOMPtr prefBranch = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); + NS_ENSURE_SUCCESS(rv, rv); + + prefBranch->AddObserver("ssr.", this, PR_FALSE); + + return NS_OK; + } + + if (!strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) + { + nsCOMPtr prefBranch = do_QueryInterface(aSubject); + nsXPIDLCString cstr; + + const char* pref = NS_ConvertUCS2toUTF8(aData).get(); + + if (!strcmp(pref, "ssr.enabled")) + { + PRBool enabled; + prefBranch->GetIntPref(pref, &enabled); + + SetSSREnabled(enabled); + return NS_OK; + } + + if (!strcmp(pref, "ssr.site.enabled")) + { + PRBool enabled; + prefBranch->GetIntPref(pref, &enabled); + + SetSiteSSREnabled(enabled); + return NS_OK; + } + } + return NS_OK; +} + //------------------------------------------------------------------------------ // XPCOM REGISTRATION BELOW @@ -139,12 +174,74 @@ NS_IMETHODIMP nsSSRSupport::SetSiteSSREnabled(PRBool aSiteSSREnabled) NS_GENERIC_FACTORY_CONSTRUCTOR(nsSSRSupport) +static NS_METHOD SSRRegistration(nsIComponentManager *aCompMgr, + nsIFile *aPath, + const char *registryLocation, + const char *componentType, + const nsModuleComponentInfo *info) +{ + nsresult rv; + + nsCOMPtr servman = do_QueryInterface((nsISupports*)aCompMgr, &rv); + if (NS_FAILED(rv)) + return rv; + + + nsCOMPtr catman; + servman->GetServiceByContractID(NS_CATEGORYMANAGER_CONTRACTID, + NS_GET_IID(nsICategoryManager), + getter_AddRefs(catman)); + + if (NS_FAILED(rv)) + return rv; + + char* previous = nsnull; + rv = catman->AddCategoryEntry("xpcom-startup", + "SSR", + SSRSupport_ContractID, + PR_TRUE, + PR_TRUE, + &previous); + if (previous) + nsMemory::Free(previous); + + return rv; +} + +static NS_METHOD SSRUnregistration(nsIComponentManager *aCompMgr, + nsIFile *aPath, + const char *registryLocation, + const nsModuleComponentInfo *info) +{ + nsresult rv; + + nsCOMPtr servman = do_QueryInterface((nsISupports*)aCompMgr, &rv); + if (NS_FAILED(rv)) + return rv; + + nsCOMPtr catman; + servman->GetServiceByContractID(NS_CATEGORYMANAGER_CONTRACTID, + NS_GET_IID(nsICategoryManager), + getter_AddRefs(catman)); + + if (NS_FAILED(rv)) + return rv; + + rv = catman->DeleteCategoryEntry("xpcom-startup", + "SSR", + PR_TRUE); + + return rv; +} + static const nsModuleComponentInfo components[] = { { "SoftKeyBoardService", SSRSupport_CID, SSRSupport_ContractID, nsSSRSupportConstructor, + SSRRegistration, + SSRUnregistration } };