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 #include "nsCOMPtr.h"
8
operator ()(const nsIID & aIID,void ** aAnswer) const9 nsresult nsQueryInterfaceISupports::operator()(const nsIID& aIID,
10 void** aAnswer) const {
11 nsresult status;
12 if (mRawPtr) {
13 status = mRawPtr->QueryInterface(aIID, aAnswer);
14 } else {
15 status = NS_ERROR_NULL_POINTER;
16 }
17
18 return status;
19 }
20
operator ()(const nsIID & aIID,void ** aAnswer) const21 nsresult nsQueryInterfaceISupportsWithError::operator()(const nsIID& aIID,
22 void** aAnswer) const {
23 nsresult status;
24 if (mRawPtr) {
25 status = mRawPtr->QueryInterface(aIID, aAnswer);
26 } else {
27 status = NS_ERROR_NULL_POINTER;
28 }
29
30 if (mErrorPtr) {
31 *mErrorPtr = status;
32 }
33 return status;
34 }
35
assign_with_AddRef(nsISupports * aRawPtr)36 void nsCOMPtr_base::assign_with_AddRef(nsISupports* aRawPtr) {
37 if (aRawPtr) {
38 NSCAP_ADDREF(this, aRawPtr);
39 }
40 assign_assuming_AddRef(aRawPtr);
41 }
42
assign_from_qi(const nsQueryInterfaceISupports aQI,const nsIID & aIID)43 void nsCOMPtr_base::assign_from_qi(const nsQueryInterfaceISupports aQI,
44 const nsIID& aIID) {
45 void* newRawPtr;
46 if (NS_FAILED(aQI(aIID, &newRawPtr))) {
47 newRawPtr = nullptr;
48 }
49 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
50 }
51
assign_from_qi_with_error(const nsQueryInterfaceISupportsWithError & aQI,const nsIID & aIID)52 void nsCOMPtr_base::assign_from_qi_with_error(
53 const nsQueryInterfaceISupportsWithError& aQI, const nsIID& aIID) {
54 void* newRawPtr;
55 if (NS_FAILED(aQI(aIID, &newRawPtr))) {
56 newRawPtr = nullptr;
57 }
58 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
59 }
60
assign_from_gs_cid(const nsGetServiceByCID aGS,const nsIID & aIID)61 void nsCOMPtr_base::assign_from_gs_cid(const nsGetServiceByCID aGS,
62 const nsIID& aIID) {
63 void* newRawPtr;
64 if (NS_FAILED(aGS(aIID, &newRawPtr))) {
65 newRawPtr = nullptr;
66 }
67 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
68 }
69
assign_from_gs_cid_with_error(const nsGetServiceByCIDWithError & aGS,const nsIID & aIID)70 void nsCOMPtr_base::assign_from_gs_cid_with_error(
71 const nsGetServiceByCIDWithError& aGS, const nsIID& aIID) {
72 void* newRawPtr;
73 if (NS_FAILED(aGS(aIID, &newRawPtr))) {
74 newRawPtr = nullptr;
75 }
76 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
77 }
78
assign_from_gs_contractid(const nsGetServiceByContractID aGS,const nsIID & aIID)79 void nsCOMPtr_base::assign_from_gs_contractid(
80 const nsGetServiceByContractID aGS, const nsIID& aIID) {
81 void* newRawPtr;
82 if (NS_FAILED(aGS(aIID, &newRawPtr))) {
83 newRawPtr = nullptr;
84 }
85 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
86 }
87
assign_from_gs_contractid_with_error(const nsGetServiceByContractIDWithError & aGS,const nsIID & aIID)88 void nsCOMPtr_base::assign_from_gs_contractid_with_error(
89 const nsGetServiceByContractIDWithError& aGS, const nsIID& aIID) {
90 void* newRawPtr;
91 if (NS_FAILED(aGS(aIID, &newRawPtr))) {
92 newRawPtr = nullptr;
93 }
94 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
95 }
96
assign_from_query_referent(const nsQueryReferent & aQueryReferent,const nsIID & aIID)97 void nsCOMPtr_base::assign_from_query_referent(
98 const nsQueryReferent& aQueryReferent, const nsIID& aIID) {
99 void* newRawPtr;
100 if (NS_FAILED(aQueryReferent(aIID, &newRawPtr))) {
101 newRawPtr = nullptr;
102 }
103 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
104 }
105
assign_from_helper(const nsCOMPtr_helper & aHelper,const nsIID & aIID)106 void nsCOMPtr_base::assign_from_helper(const nsCOMPtr_helper& aHelper,
107 const nsIID& aIID) {
108 void* newRawPtr;
109 if (NS_FAILED(aHelper(aIID, &newRawPtr))) {
110 newRawPtr = nullptr;
111 }
112 assign_assuming_AddRef(static_cast<nsISupports*>(newRawPtr));
113 }
114