summaryrefslogtreecommitdiffstats
path: root/xpcom/glue/nsServiceManagerUtils.h
diff options
context:
space:
mode:
Diffstat (limited to 'xpcom/glue/nsServiceManagerUtils.h')
-rw-r--r--xpcom/glue/nsServiceManagerUtils.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/xpcom/glue/nsServiceManagerUtils.h b/xpcom/glue/nsServiceManagerUtils.h
new file mode 100644
index 000000000..d1ea408a2
--- /dev/null
+++ b/xpcom/glue/nsServiceManagerUtils.h
@@ -0,0 +1,94 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef nsServiceManagerUtils_h__
+#define nsServiceManagerUtils_h__
+
+#include "nsIServiceManager.h"
+#include "nsCOMPtr.h"
+
+inline const nsGetServiceByCID
+do_GetService(const nsCID& aCID)
+{
+ return nsGetServiceByCID(aCID);
+}
+
+inline const nsGetServiceByCIDWithError
+do_GetService(const nsCID& aCID, nsresult* aError)
+{
+ return nsGetServiceByCIDWithError(aCID, aError);
+}
+
+inline const nsGetServiceByContractID
+do_GetService(const char* aContractID)
+{
+ return nsGetServiceByContractID(aContractID);
+}
+
+inline const nsGetServiceByContractIDWithError
+do_GetService(const char* aContractID, nsresult* aError)
+{
+ return nsGetServiceByContractIDWithError(aContractID, aError);
+}
+
+class MOZ_STACK_CLASS nsGetServiceFromCategory final : public nsCOMPtr_helper
+{
+public:
+ nsGetServiceFromCategory(const char* aCategory, const char* aEntry,
+ nsresult* aErrorPtr)
+ : mCategory(aCategory)
+ , mEntry(aEntry)
+ , mErrorPtr(aErrorPtr)
+ {
+ }
+
+ virtual nsresult NS_FASTCALL operator()(const nsIID&, void**) const
+ override;
+protected:
+ const char* mCategory;
+ const char* mEntry;
+ nsresult* mErrorPtr;
+};
+
+inline const nsGetServiceFromCategory
+do_GetServiceFromCategory(const char* aCategory, const char* aEntry,
+ nsresult* aError = 0)
+{
+ return nsGetServiceFromCategory(aCategory, aEntry, aError);
+}
+
+nsresult CallGetService(const nsCID& aClass, const nsIID& aIID, void** aResult);
+
+nsresult CallGetService(const char* aContractID, const nsIID& aIID,
+ void** aResult);
+
+// type-safe shortcuts for calling |GetService|
+template<class DestinationType>
+inline nsresult
+CallGetService(const nsCID& aClass,
+ DestinationType** aDestination)
+{
+ NS_PRECONDITION(aDestination, "null parameter");
+
+ return CallGetService(aClass,
+ NS_GET_TEMPLATE_IID(DestinationType),
+ reinterpret_cast<void**>(aDestination));
+}
+
+template<class DestinationType>
+inline nsresult
+CallGetService(const char* aContractID,
+ DestinationType** aDestination)
+{
+ NS_PRECONDITION(aContractID, "null parameter");
+ NS_PRECONDITION(aDestination, "null parameter");
+
+ return CallGetService(aContractID,
+ NS_GET_TEMPLATE_IID(DestinationType),
+ reinterpret_cast<void**>(aDestination));
+}
+
+#endif