LCOV - code coverage report
Current view: top level - xpcom/components - nsComponentManagerUtils.h (source / functions) Hit Total Coverage
Test: output.info Lines: 28 37 75.7 %
Date: 2017-07-14 16:53:18 Functions: 10 17 58.8 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       5             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #ifndef nsComponentManagerUtils_h__
       8             : #define nsComponentManagerUtils_h__
       9             : 
      10             : #include "nscore.h"
      11             : #include "nsCOMPtr.h"
      12             : 
      13             : #include "nsIFactory.h"
      14             : 
      15             : 
      16             : nsresult CallCreateInstance(const nsCID& aClass, nsISupports* aDelegate,
      17             :                             const nsIID& aIID, void** aResult);
      18             : 
      19             : nsresult CallCreateInstance(const char* aContractID, nsISupports* aDelegate,
      20             :                             const nsIID& aIID, void** aResult);
      21             : 
      22             : nsresult CallGetClassObject(const nsCID& aClass, const nsIID& aIID,
      23             :                             void** aResult);
      24             : 
      25             : nsresult CallGetClassObject(const char* aContractID, const nsIID& aIID,
      26             :                             void** aResult);
      27             : 
      28             : 
      29             : class MOZ_STACK_CLASS nsCreateInstanceByCID final : public nsCOMPtr_helper
      30             : {
      31             : public:
      32         280 :   nsCreateInstanceByCID(const nsCID& aCID, nsresult* aErrorPtr)
      33         280 :     : mCID(aCID)
      34         280 :     , mErrorPtr(aErrorPtr)
      35             :   {
      36         280 :   }
      37             : 
      38             :   virtual nsresult NS_FASTCALL operator()(const nsIID&, void**) const
      39             :     override;
      40             : 
      41             : private:
      42             :   const nsCID&    mCID;
      43             :   nsresult*       mErrorPtr;
      44             : };
      45             : 
      46             : class MOZ_STACK_CLASS nsCreateInstanceByContractID final : public nsCOMPtr_helper
      47             : {
      48             : public:
      49        1080 :   nsCreateInstanceByContractID(const char* aContractID, nsresult* aErrorPtr)
      50        1080 :     : mContractID(aContractID)
      51        1080 :     , mErrorPtr(aErrorPtr)
      52             :   {
      53        1080 :   }
      54             : 
      55             :   virtual nsresult NS_FASTCALL operator()(const nsIID&, void**) const override;
      56             : 
      57             : private:
      58             :   const char*   mContractID;
      59             :   nsresult*     mErrorPtr;
      60             : };
      61             : 
      62             : class MOZ_STACK_CLASS nsCreateInstanceFromFactory final : public nsCOMPtr_helper
      63             : {
      64             : public:
      65           0 :   nsCreateInstanceFromFactory(nsIFactory* aFactory, nsresult* aErrorPtr)
      66           0 :     : mFactory(aFactory)
      67           0 :     , mErrorPtr(aErrorPtr)
      68             :   {
      69           0 :   }
      70             : 
      71             :   virtual nsresult NS_FASTCALL operator()(const nsIID&, void**) const override;
      72             : 
      73             : private:
      74             :   nsIFactory* MOZ_NON_OWNING_REF mFactory;
      75             :   nsresult*     mErrorPtr;
      76             : };
      77             : 
      78             : 
      79             : inline const nsCreateInstanceByCID
      80         280 : do_CreateInstance(const nsCID& aCID, nsresult* aError = 0)
      81             : {
      82         280 :   return nsCreateInstanceByCID(aCID, aError);
      83             : }
      84             : 
      85             : inline const nsCreateInstanceByContractID
      86        1080 : do_CreateInstance(const char* aContractID, nsresult* aError = 0)
      87             : {
      88        1080 :   return nsCreateInstanceByContractID(aContractID, aError);
      89             : }
      90             : 
      91             : inline const nsCreateInstanceFromFactory
      92           0 : do_CreateInstance(nsIFactory* aFactory, nsresult* aError = 0)
      93             : {
      94           0 :   return nsCreateInstanceFromFactory(aFactory, aError);
      95             : }
      96             : 
      97             : 
      98             : class MOZ_STACK_CLASS nsGetClassObjectByCID final : public nsCOMPtr_helper
      99             : {
     100             : public:
     101           3 :   nsGetClassObjectByCID(const nsCID& aCID, nsresult* aErrorPtr)
     102           3 :     : mCID(aCID)
     103           3 :     , mErrorPtr(aErrorPtr)
     104             :   {
     105           3 :   }
     106             : 
     107             :   virtual nsresult NS_FASTCALL operator()(const nsIID&, void**) const override;
     108             : 
     109             : private:
     110             :   const nsCID&    mCID;
     111             :   nsresult*       mErrorPtr;
     112             : };
     113             : 
     114             : class MOZ_STACK_CLASS nsGetClassObjectByContractID final : public nsCOMPtr_helper
     115             : {
     116             : public:
     117          12 :   nsGetClassObjectByContractID(const char* aContractID, nsresult* aErrorPtr)
     118          12 :     : mContractID(aContractID)
     119          12 :     , mErrorPtr(aErrorPtr)
     120             :   {
     121          12 :   }
     122             : 
     123             :   virtual nsresult NS_FASTCALL operator()(const nsIID&, void**) const override;
     124             : 
     125             : private:
     126             :   const char*   mContractID;
     127             :   nsresult*     mErrorPtr;
     128             : };
     129             : 
     130             : /**
     131             :  * do_GetClassObject can be used to improve performance of callers
     132             :  * that call |CreateInstance| many times.  They can cache the factory
     133             :  * and call do_CreateInstance or CallCreateInstance with the cached
     134             :  * factory rather than having the component manager retrieve it every
     135             :  * time.
     136             :  */
     137             : inline const nsGetClassObjectByCID
     138           3 : do_GetClassObject(const nsCID& aCID, nsresult* aError = 0)
     139             : {
     140           3 :   return nsGetClassObjectByCID(aCID, aError);
     141             : }
     142             : 
     143             : inline const nsGetClassObjectByContractID
     144          12 : do_GetClassObject(const char* aContractID, nsresult* aError = 0)
     145             : {
     146          12 :   return nsGetClassObjectByContractID(aContractID, aError);
     147             : }
     148             : 
     149             : // type-safe shortcuts for calling |CreateInstance|
     150             : template<class DestinationType>
     151             : inline nsresult
     152             : CallCreateInstance(const nsCID& aClass,
     153             :                    nsISupports* aDelegate,
     154             :                    DestinationType** aDestination)
     155             : {
     156             :   NS_PRECONDITION(aDestination, "null parameter");
     157             : 
     158             :   return CallCreateInstance(aClass, aDelegate,
     159             :                             NS_GET_TEMPLATE_IID(DestinationType),
     160             :                             reinterpret_cast<void**>(aDestination));
     161             : }
     162             : 
     163             : template<class DestinationType>
     164             : inline nsresult
     165           0 : CallCreateInstance(const nsCID& aClass, DestinationType** aDestination)
     166             : {
     167           0 :   NS_PRECONDITION(aDestination, "null parameter");
     168             : 
     169             :   return CallCreateInstance(aClass, nullptr,
     170             :                             NS_GET_TEMPLATE_IID(DestinationType),
     171           0 :                             reinterpret_cast<void**>(aDestination));
     172             : }
     173             : 
     174             : template<class DestinationType>
     175             : inline nsresult
     176             : CallCreateInstance(const char* aContractID,
     177             :                    nsISupports* aDelegate,
     178             :                    DestinationType** aDestination)
     179             : {
     180             :   NS_PRECONDITION(aContractID, "null parameter");
     181             :   NS_PRECONDITION(aDestination, "null parameter");
     182             : 
     183             :   return CallCreateInstance(aContractID,
     184             :                             aDelegate,
     185             :                             NS_GET_TEMPLATE_IID(DestinationType),
     186             :                             reinterpret_cast<void**>(aDestination));
     187             : }
     188             : 
     189             : template<class DestinationType>
     190             : inline nsresult
     191          12 : CallCreateInstance(const char* aContractID, DestinationType** aDestination)
     192             : {
     193          12 :   NS_PRECONDITION(aContractID, "null parameter");
     194          12 :   NS_PRECONDITION(aDestination, "null parameter");
     195             : 
     196             :   return CallCreateInstance(aContractID, nullptr,
     197             :                             NS_GET_TEMPLATE_IID(DestinationType),
     198          12 :                             reinterpret_cast<void**>(aDestination));
     199             : }
     200             : 
     201             : template<class DestinationType>
     202             : inline nsresult
     203             : CallCreateInstance(nsIFactory* aFactory,
     204             :                    nsISupports* aDelegate,
     205             :                    DestinationType** aDestination)
     206             : {
     207             :   NS_PRECONDITION(aFactory, "null parameter");
     208             :   NS_PRECONDITION(aDestination, "null parameter");
     209             : 
     210             :   return aFactory->CreateInstance(aDelegate,
     211             :                                   NS_GET_TEMPLATE_IID(DestinationType),
     212             :                                   reinterpret_cast<void**>(aDestination));
     213             : }
     214             : 
     215             : template<class DestinationType>
     216             : inline nsresult
     217             : CallCreateInstance(nsIFactory* aFactory, DestinationType** aDestination)
     218             : {
     219             :   NS_PRECONDITION(aFactory, "null parameter");
     220             :   NS_PRECONDITION(aDestination, "null parameter");
     221             : 
     222             :   return aFactory->CreateInstance(nullptr,
     223             :                                   NS_GET_TEMPLATE_IID(DestinationType),
     224             :                                   reinterpret_cast<void**>(aDestination));
     225             : }
     226             : 
     227             : template<class DestinationType>
     228             : inline nsresult
     229             : CallGetClassObject(const nsCID& aClass, DestinationType** aDestination)
     230             : {
     231             :   NS_PRECONDITION(aDestination, "null parameter");
     232             : 
     233             :   return CallGetClassObject(aClass, NS_GET_TEMPLATE_IID(DestinationType),
     234             :                             reinterpret_cast<void**>(aDestination));
     235             : }
     236             : 
     237             : template<class DestinationType>
     238             : inline nsresult
     239             : CallGetClassObject(const char* aContractID, DestinationType** aDestination)
     240             : {
     241             :   NS_PRECONDITION(aDestination, "null parameter");
     242             : 
     243             :   return CallGetClassObject(aContractID, NS_GET_TEMPLATE_IID(DestinationType),
     244             :                             reinterpret_cast<void**>(aDestination));
     245             : }
     246             : 
     247             : #endif /* nsComponentManagerUtils_h__ */

Generated by: LCOV version 1.13