From 2df47b0c6db9a9fadc3711cccea72ac09004adc0 Mon Sep 17 00:00:00 2001 From: "dp%netscape.com" Date: Tue, 11 Jan 2000 22:54:46 +0000 Subject: [PATCH] Implementing access to servicemanager from component manager via nsIInterfaceRequestor. r=scc --- xpcom/components/nsComponentManager.cpp | 22 +++++++++++++++++++++- xpcom/components/nsComponentManager.h | 6 +++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/xpcom/components/nsComponentManager.cpp b/xpcom/components/nsComponentManager.cpp index 59aaa02297e5..21b8f17c7d64 100644 --- a/xpcom/components/nsComponentManager.cpp +++ b/xpcom/components/nsComponentManager.cpp @@ -317,7 +317,8 @@ nsComponentManagerImpl::~nsComponentManagerImpl() PR_LOG(nsComponentManagerLog, PR_LOG_ALWAYS, ("nsComponentManager: Destroyed.")); } -NS_IMPL_ISUPPORTS2(nsComponentManagerImpl, nsIComponentManager, nsISupportsWeakReference) +NS_IMPL_ISUPPORTS3(nsComponentManagerImpl, nsIComponentManager, + nsISupportsWeakReference, nsIInterfaceRequestor) //////////////////////////////////////////////////////////////////////////////// // nsComponentManagerImpl: Platform methods @@ -2241,6 +2242,25 @@ nsComponentManagerImpl::EnumerateProgIDs(nsIEnumerator** aEmumerator) this, aEmumerator); } + +nsresult +nsComponentManagerImpl::GetInterface(const nsIID & uuid, void **result) +{ + nsresult rv = NS_OK; + if (uuid.Equals(NS_GET_IID(nsIServiceManager))) + { + // Return the global service manager + rv = nsServiceManager::GetGlobalServiceManager((nsIServiceManager **)result); + } + else + { + // fall through to QI as anything QIable is a superset of what canbe + // got via the GetInterface() + rv = QueryInterface(uuid, result); + } + return rv; +} + //////////////////////////////////////////////////////////////////////////////// NS_COM nsresult diff --git a/xpcom/components/nsComponentManager.h b/xpcom/components/nsComponentManager.h index c87c64d78c72..697c98119b39 100644 --- a/xpcom/components/nsComponentManager.h +++ b/xpcom/components/nsComponentManager.h @@ -28,6 +28,7 @@ #include "nsIComponentManager.h" #include "nsIFactory.h" #include "nsIRegistry.h" +#include "nsIInterfaceRequestor.h" #include "nsHashtable.h" #include "prtime.h" #include "prmon.h" @@ -50,10 +51,13 @@ extern const char XPCOM_LIB_PREFIX[]; //////////////////////////////////////////////////////////////////////////////// -class nsComponentManagerImpl : public nsIComponentManager, public nsSupportsWeakReference { +class nsComponentManagerImpl + : public nsIComponentManager, public nsSupportsWeakReference, + public nsIInterfaceRequestor { public: NS_DECL_ISUPPORTS NS_DECL_NSICOMPONENTMANAGER + NS_DECL_NSIINTERFACEREQUESTOR // nsComponentManagerImpl methods: nsComponentManagerImpl();