File: | var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp |
Warning: | line 337, column 7 Value stored to 'rv' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
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 "BasicCardPayment.h" |
8 | #include "mozilla/ClearOnShutdown.h" |
9 | #include "mozilla/dom/BasicCardPaymentBinding.h" |
10 | #include "mozilla/dom/PaymentRequestParent.h" |
11 | #include "nsArrayUtils.h" |
12 | #include "nsComponentManagerUtils.h" |
13 | #include "nsCOMPtr.h" |
14 | #include "nsIMutableArray.h" |
15 | #include "nsServiceManagerUtils.h" |
16 | #include "nsSimpleEnumerator.h" |
17 | #include "PaymentRequestService.h" |
18 | |
19 | namespace mozilla::dom { |
20 | |
21 | StaticRefPtr<PaymentRequestService> gPaymentService; |
22 | |
23 | namespace { |
24 | |
25 | class PaymentRequestEnumerator final : public nsSimpleEnumerator { |
26 | public: |
27 | NS_DECL_NSISIMPLEENUMERATORvirtual nsresult HasMoreElements(bool *_retval) override; virtual nsresult GetNext(nsISupports **_retval) override; |
28 | |
29 | PaymentRequestEnumerator() : mIndex(0) {} |
30 | |
31 | const nsID& DefaultInterface() override { |
32 | return NS_GET_IID(nsIPaymentRequest)(nsIPaymentRequest::COMTypeInfo<nsIPaymentRequest, void> ::kIID); |
33 | } |
34 | |
35 | private: |
36 | ~PaymentRequestEnumerator() override = default; |
37 | uint32_t mIndex; |
38 | }; |
39 | |
40 | NS_IMETHODIMPnsresult |
41 | PaymentRequestEnumerator::HasMoreElements(bool* aReturn) { |
42 | NS_ENSURE_ARG_POINTER(aReturn)do { if ((__builtin_expect(!!(!(aReturn)), 0))) { NS_DebugBreak (NS_DEBUG_WARNING, "NS_ENSURE_TRUE(" "aReturn" ") failed", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 42); return NS_ERROR_INVALID_POINTER; } } while (false); |
43 | *aReturn = false; |
44 | if (NS_WARN_IF(!gPaymentService)NS_warn_if_impl(!gPaymentService, "!gPaymentService", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 44)) { |
45 | return NS_ERROR_FAILURE; |
46 | } |
47 | RefPtr<PaymentRequestService> service = gPaymentService; |
48 | *aReturn = mIndex < service->NumPayments(); |
49 | return NS_OK; |
50 | } |
51 | |
52 | NS_IMETHODIMPnsresult |
53 | PaymentRequestEnumerator::GetNext(nsISupports** aItem) { |
54 | NS_ENSURE_ARG_POINTER(aItem)do { if ((__builtin_expect(!!(!(aItem)), 0))) { NS_DebugBreak (NS_DEBUG_WARNING, "NS_ENSURE_TRUE(" "aItem" ") failed", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 54); return NS_ERROR_INVALID_POINTER; } } while (false); |
55 | if (NS_WARN_IF(!gPaymentService)NS_warn_if_impl(!gPaymentService, "!gPaymentService", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 55)) { |
56 | return NS_ERROR_FAILURE; |
57 | } |
58 | RefPtr<payments::PaymentRequest> rowRequest = |
59 | gPaymentService->GetPaymentRequestByIndex(mIndex); |
60 | if (!rowRequest) { |
61 | return NS_ERROR_FAILURE; |
62 | } |
63 | mIndex++; |
64 | rowRequest.forget(aItem); |
65 | return NS_OK; |
66 | } |
67 | |
68 | } // end of anonymous namespace |
69 | |
70 | /* PaymentRequestService */ |
71 | |
72 | NS_IMPL_ISUPPORTS(PaymentRequestService, nsIPaymentRequestService)MozExternalRefCountType PaymentRequestService::AddRef(void) { static_assert(!std::is_destructible_v<PaymentRequestService >, "Reference-counted class " "PaymentRequestService" " should not have a public destructor. " "Make this class's destructor non-public"); do { static_assert ( mozilla::detail::AssertionConditionType<decltype(int32_t (mRefCnt) >= 0)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(int32_t(mRefCnt) >= 0))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("int32_t(mRefCnt) >= 0" " (" "illegal refcnt" ")", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 72); AnnotateMozCrashReason("MOZ_ASSERT" "(" "int32_t(mRefCnt) >= 0" ") (" "illegal refcnt" ")"); do { *((volatile int*)__null) = 72; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); do { static_assert( mozilla::detail::AssertionConditionType <decltype("PaymentRequestService" != nullptr)>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!("PaymentRequestService" != nullptr))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("\"PaymentRequestService\" != nullptr" " (" "Must specify a name" ")", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 72); AnnotateMozCrashReason("MOZ_ASSERT" "(" "\"PaymentRequestService\" != nullptr" ") (" "Must specify a name" ")"); do { *((volatile int*)__null ) = 72; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); if (!mRefCnt.isThreadSafe) _mOwningThread.AssertOwnership ("PaymentRequestService" " not thread-safe"); nsrefcnt count = ++mRefCnt; NS_LogAddRef((this), (count), ("PaymentRequestService" ), (uint32_t)(sizeof(*this))); return count; } MozExternalRefCountType PaymentRequestService::Release(void) { do { static_assert( mozilla ::detail::AssertionConditionType<decltype(int32_t(mRefCnt) > 0)>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(int32_t(mRefCnt) > 0))), 0))) { do { } while (false ); MOZ_ReportAssertionFailure("int32_t(mRefCnt) > 0" " (" "dup release" ")", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 72); AnnotateMozCrashReason("MOZ_ASSERT" "(" "int32_t(mRefCnt) > 0" ") (" "dup release" ")"); do { *((volatile int*)__null) = 72 ; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); do { static_assert( mozilla::detail::AssertionConditionType <decltype("PaymentRequestService" != nullptr)>::isValid , "invalid assertion condition"); if ((__builtin_expect(!!(!( !!("PaymentRequestService" != nullptr))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("\"PaymentRequestService\" != nullptr" " (" "Must specify a name" ")", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 72); AnnotateMozCrashReason("MOZ_ASSERT" "(" "\"PaymentRequestService\" != nullptr" ") (" "Must specify a name" ")"); do { *((volatile int*)__null ) = 72; __attribute__((nomerge)) ::abort(); } while (false); } } while (false); if (!mRefCnt.isThreadSafe) _mOwningThread.AssertOwnership ("PaymentRequestService" " not thread-safe"); const char* const nametmp = "PaymentRequestService"; nsrefcnt count = --mRefCnt ; NS_LogRelease((this), (count), (nametmp)); if (count == 0) { mRefCnt = 1; delete (this); return 0; } return count; } nsresult PaymentRequestService::QueryInterface(const nsIID& aIID, void** aInstancePtr) { do { if (!(aInstancePtr)) { NS_DebugBreak (NS_DEBUG_ASSERTION, "QueryInterface requires a non-NULL destination!" , "aInstancePtr", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 72); MOZ_PretendNoReturn(); } } while (0); nsresult rv = NS_ERROR_FAILURE ; static_assert(1 > 0, "Need more arguments to NS_INTERFACE_TABLE" ); static const QITableEntry table[] = { {&mozilla::detail ::kImplementedIID<PaymentRequestService, nsIPaymentRequestService >, int32_t( reinterpret_cast<char*>(static_cast<nsIPaymentRequestService *>((PaymentRequestService*)0x1000)) - reinterpret_cast< char*>((PaymentRequestService*)0x1000))}, {&mozilla::detail ::kImplementedIID<PaymentRequestService, nsISupports>, int32_t (reinterpret_cast<char*>(static_cast<nsISupports*> ( static_cast<nsIPaymentRequestService*>((PaymentRequestService *)0x1000))) - reinterpret_cast<char*>((PaymentRequestService *)0x1000))}, { nullptr, 0 } } ; static_assert((sizeof(table) / sizeof(table[0])) > 1, "need at least 1 interface"); rv = NS_TableDrivenQI(static_cast<void*>(this), aIID, aInstancePtr , table); return rv; } |
73 | |
74 | already_AddRefed<PaymentRequestService> PaymentRequestService::GetSingleton() { |
75 | MOZ_ASSERT(NS_IsMainThread())do { static_assert( mozilla::detail::AssertionConditionType< decltype(NS_IsMainThread())>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(NS_IsMainThread()))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("NS_IsMainThread()" , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 75); AnnotateMozCrashReason("MOZ_ASSERT" "(" "NS_IsMainThread()" ")"); do { *((volatile int*)__null) = 75; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
76 | if (!gPaymentService) { |
77 | gPaymentService = new PaymentRequestService(); |
78 | ClearOnShutdown(&gPaymentService); |
79 | } |
80 | RefPtr<PaymentRequestService> service = gPaymentService; |
81 | return service.forget(); |
82 | } |
83 | |
84 | uint32_t PaymentRequestService::NumPayments() const { |
85 | return mRequestQueue.Length(); |
86 | } |
87 | |
88 | already_AddRefed<payments::PaymentRequest> |
89 | PaymentRequestService::GetPaymentRequestByIndex(const uint32_t aIndex) { |
90 | if (aIndex >= mRequestQueue.Length()) { |
91 | return nullptr; |
92 | } |
93 | RefPtr<payments::PaymentRequest> request = mRequestQueue[aIndex]; |
94 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 94); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")") ; do { *((volatile int*)__null) = 94; __attribute__((nomerge) ) ::abort(); } while (false); } } while (false); |
95 | return request.forget(); |
96 | } |
97 | |
98 | NS_IMETHODIMPnsresult |
99 | PaymentRequestService::GetPaymentRequestById(const nsAString& aRequestId, |
100 | nsIPaymentRequest** aRequest) { |
101 | NS_ENSURE_ARG_POINTER(aRequest)do { if ((__builtin_expect(!!(!(aRequest)), 0))) { NS_DebugBreak (NS_DEBUG_WARNING, "NS_ENSURE_TRUE(" "aRequest" ") failed", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 101); return NS_ERROR_INVALID_POINTER; } } while (false); |
102 | *aRequest = nullptr; |
103 | RefPtr<payments::PaymentRequest> rowRequest; |
104 | nsresult rv = GetPaymentRequestById(aRequestId, getter_AddRefs(rowRequest)); |
105 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 105)) { |
106 | return rv; |
107 | } |
108 | rowRequest.forget(aRequest); |
109 | return NS_OK; |
110 | } |
111 | |
112 | nsresult PaymentRequestService::GetPaymentRequestById( |
113 | const nsAString& aRequestId, payments::PaymentRequest** aRequest) { |
114 | NS_ENSURE_ARG_POINTER(aRequest)do { if ((__builtin_expect(!!(!(aRequest)), 0))) { NS_DebugBreak (NS_DEBUG_WARNING, "NS_ENSURE_TRUE(" "aRequest" ") failed", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 114); return NS_ERROR_INVALID_POINTER; } } while (false); |
115 | *aRequest = nullptr; |
116 | uint32_t numRequests = mRequestQueue.Length(); |
117 | for (uint32_t index = 0; index < numRequests; ++index) { |
118 | RefPtr<payments::PaymentRequest> request = mRequestQueue[index]; |
119 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 119); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")" ); do { *((volatile int*)__null) = 119; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
120 | nsAutoString requestId; |
121 | nsresult rv = request->GetRequestId(requestId); |
122 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 122); return rv; } } while (false); |
123 | if (requestId == aRequestId) { |
124 | request.forget(aRequest); |
125 | break; |
126 | } |
127 | } |
128 | return NS_OK; |
129 | } |
130 | |
131 | NS_IMETHODIMPnsresult |
132 | PaymentRequestService::Enumerate(nsISimpleEnumerator** aEnumerator) { |
133 | NS_ENSURE_ARG_POINTER(aEnumerator)do { if ((__builtin_expect(!!(!(aEnumerator)), 0))) { NS_DebugBreak (NS_DEBUG_WARNING, "NS_ENSURE_TRUE(" "aEnumerator" ") failed" , nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 133); return NS_ERROR_INVALID_POINTER; } } while (false); |
134 | nsCOMPtr<nsISimpleEnumerator> enumerator = new PaymentRequestEnumerator(); |
135 | enumerator.forget(aEnumerator); |
136 | return NS_OK; |
137 | } |
138 | |
139 | NS_IMETHODIMPnsresult |
140 | PaymentRequestService::Cleanup() { |
141 | mRequestQueue.Clear(); |
142 | return NS_OK; |
143 | } |
144 | |
145 | NS_IMETHODIMPnsresult |
146 | PaymentRequestService::SetTestingUIService(nsIPaymentUIService* aUIService) { |
147 | // aUIService can be nullptr |
148 | mTestingUIService = aUIService; |
149 | return NS_OK; |
150 | } |
151 | |
152 | nsresult PaymentRequestService::LaunchUIAction(const nsAString& aRequestId, |
153 | uint32_t aActionType) { |
154 | nsCOMPtr<nsIPaymentUIService> uiService; |
155 | nsresult rv; |
156 | if (mTestingUIService) { |
157 | uiService = mTestingUIService; |
158 | } else { |
159 | uiService = do_GetService(NS_PAYMENT_UI_SERVICE_CONTRACT_ID"@mozilla.org/dom/payments/payment-ui-service;1", &rv); |
160 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 160)) { |
161 | return rv; |
162 | } |
163 | } |
164 | switch (aActionType) { |
165 | case IPCPaymentActionRequest::TIPCPaymentShowActionRequest: { |
166 | rv = uiService->ShowPayment(aRequestId); |
167 | break; |
168 | } |
169 | case IPCPaymentActionRequest::TIPCPaymentAbortActionRequest: { |
170 | rv = uiService->AbortPayment(aRequestId); |
171 | break; |
172 | } |
173 | case IPCPaymentActionRequest::TIPCPaymentCompleteActionRequest: { |
174 | rv = uiService->CompletePayment(aRequestId); |
175 | break; |
176 | } |
177 | case IPCPaymentActionRequest::TIPCPaymentUpdateActionRequest: { |
178 | rv = uiService->UpdatePayment(aRequestId); |
179 | break; |
180 | } |
181 | case IPCPaymentActionRequest::TIPCPaymentCloseActionRequest: { |
182 | rv = uiService->ClosePayment(aRequestId); |
183 | break; |
184 | } |
185 | default: { |
186 | return NS_ERROR_FAILURE; |
187 | } |
188 | } |
189 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 189)) { |
190 | return rv; |
191 | } |
192 | return NS_OK; |
193 | } |
194 | |
195 | nsresult PaymentRequestService::RequestPayment( |
196 | const nsAString& aRequestId, const IPCPaymentActionRequest& aAction, |
197 | PaymentRequestParent* aIPC) { |
198 | NS_ENSURE_ARG_POINTER(aIPC)do { if ((__builtin_expect(!!(!(aIPC)), 0))) { NS_DebugBreak( NS_DEBUG_WARNING, "NS_ENSURE_TRUE(" "aIPC" ") failed", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 198); return NS_ERROR_INVALID_POINTER; } } while (false); |
199 | |
200 | nsresult rv = NS_OK; |
201 | uint32_t type = aAction.type(); |
202 | |
203 | RefPtr<payments::PaymentRequest> request; |
204 | if (type != IPCPaymentActionRequest::TIPCPaymentCreateActionRequest) { |
205 | rv = GetPaymentRequestById(aRequestId, getter_AddRefs(request)); |
206 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 206)) { |
207 | return rv; |
208 | } |
209 | if (!request && |
210 | type != IPCPaymentActionRequest::TIPCPaymentCloseActionRequest) { |
211 | return NS_ERROR_FAILURE; |
212 | } |
213 | if (request) { |
214 | request->SetIPC(aIPC); |
215 | } |
216 | } |
217 | |
218 | switch (type) { |
219 | case IPCPaymentActionRequest::TIPCPaymentCreateActionRequest: { |
220 | MOZ_ASSERT(!request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(!request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(!request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("!request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 220); AnnotateMozCrashReason("MOZ_ASSERT" "(" "!request" ")" ); do { *((volatile int*)__null) = 220; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
221 | const IPCPaymentCreateActionRequest& action = aAction; |
222 | nsCOMPtr<nsIMutableArray> methodData = |
223 | do_CreateInstance(NS_ARRAY_CONTRACTID"@mozilla.org/array;1"); |
224 | MOZ_ASSERT(methodData)do { static_assert( mozilla::detail::AssertionConditionType< decltype(methodData)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(methodData))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("methodData", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 224); AnnotateMozCrashReason("MOZ_ASSERT" "(" "methodData" ")" ); do { *((volatile int*)__null) = 224; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
225 | for (IPCPaymentMethodData data : action.methodData()) { |
226 | nsCOMPtr<nsIPaymentMethodData> method; |
227 | rv = payments::PaymentMethodData::Create(data, getter_AddRefs(method)); |
228 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 228); return rv; } } while (false); |
229 | rv = methodData->AppendElement(method); |
230 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 230); return rv; } } while (false); |
231 | } |
232 | nsCOMPtr<nsIPaymentDetails> details; |
233 | rv = payments::PaymentDetails::Create(action.details(), |
234 | getter_AddRefs(details)); |
235 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 235); return rv; } } while (false); |
236 | nsCOMPtr<nsIPaymentOptions> options; |
237 | rv = payments::PaymentOptions::Create(action.options(), |
238 | getter_AddRefs(options)); |
239 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 239); return rv; } } while (false); |
240 | RefPtr<payments::PaymentRequest> request = new payments::PaymentRequest( |
241 | action.topOuterWindowId(), aRequestId, action.topLevelPrincipal(), |
242 | methodData, details, options, action.shippingOption()); |
243 | |
244 | if (!mRequestQueue.AppendElement(request, mozilla::fallible)) { |
245 | return NS_ERROR_OUT_OF_MEMORY; |
246 | } |
247 | break; |
248 | } |
249 | case IPCPaymentActionRequest::TIPCPaymentCanMakeActionRequest: { |
250 | nsCOMPtr<nsIPaymentCanMakeActionResponse> canMakeResponse = |
251 | do_CreateInstance(NS_PAYMENT_CANMAKE_ACTION_RESPONSE_CONTRACT_ID"@mozilla.org/dom/payments/payment-canmake-action-response;1"); |
252 | MOZ_ASSERT(canMakeResponse)do { static_assert( mozilla::detail::AssertionConditionType< decltype(canMakeResponse)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(canMakeResponse))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("canMakeResponse" , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 252); AnnotateMozCrashReason("MOZ_ASSERT" "(" "canMakeResponse" ")"); do { *((volatile int*)__null) = 252; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
253 | rv = canMakeResponse->Init(aRequestId, CanMakePayment(aRequestId)); |
254 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 254)) { |
255 | return rv; |
256 | } |
257 | rv = RespondPayment(canMakeResponse.get()); |
258 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 258)) { |
259 | return rv; |
260 | } |
261 | break; |
262 | } |
263 | case IPCPaymentActionRequest::TIPCPaymentShowActionRequest: { |
264 | const IPCPaymentShowActionRequest& action = aAction; |
265 | rv = ShowPayment(aRequestId, action.isUpdating()); |
266 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 266)) { |
267 | return rv; |
268 | } |
269 | break; |
270 | } |
271 | case IPCPaymentActionRequest::TIPCPaymentAbortActionRequest: { |
272 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 272); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")" ); do { *((volatile int*)__null) = 272; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
273 | request->SetState(payments::PaymentRequest::eInteractive); |
274 | rv = LaunchUIAction(aRequestId, type); |
275 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 275)) { |
276 | return rv; |
277 | } |
278 | break; |
279 | } |
280 | case IPCPaymentActionRequest::TIPCPaymentCompleteActionRequest: { |
281 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 281); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")" ); do { *((volatile int*)__null) = 281; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
282 | const IPCPaymentCompleteActionRequest& action = aAction; |
283 | request->SetCompleteStatus(action.completeStatus()); |
284 | rv = LaunchUIAction(aRequestId, type); |
285 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 285)) { |
286 | return rv; |
287 | } |
288 | break; |
289 | } |
290 | case IPCPaymentActionRequest::TIPCPaymentUpdateActionRequest: { |
291 | const IPCPaymentUpdateActionRequest& action = aAction; |
292 | nsCOMPtr<nsIPaymentDetails> details; |
293 | rv = payments::PaymentDetails::Create(action.details(), |
294 | getter_AddRefs(details)); |
295 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 295)) { |
296 | return rv; |
297 | } |
298 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 298); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")" ); do { *((volatile int*)__null) = 298; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
299 | rv = request->UpdatePaymentDetails(details, action.shippingOption()); |
300 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 300)) { |
301 | return rv; |
302 | } |
303 | nsAutoString completeStatus; |
304 | rv = request->GetCompleteStatus(completeStatus); |
305 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 305)) { |
306 | return rv; |
307 | } |
308 | if (completeStatus.Equals(u"initial"_ns)) { |
309 | request->SetCompleteStatus(u""_ns); |
310 | } |
311 | MOZ_ASSERT(mShowingRequest && mShowingRequest == request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mShowingRequest && mShowingRequest == request )>::isValid, "invalid assertion condition"); if ((__builtin_expect (!!(!(!!(mShowingRequest && mShowingRequest == request ))), 0))) { do { } while (false); MOZ_ReportAssertionFailure( "mShowingRequest && mShowingRequest == request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 311); AnnotateMozCrashReason("MOZ_ASSERT" "(" "mShowingRequest && mShowingRequest == request" ")"); do { *((volatile int*)__null) = 311; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
312 | rv = LaunchUIAction(aRequestId, type); |
313 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 313)) { |
314 | return rv; |
315 | } |
316 | break; |
317 | } |
318 | case IPCPaymentActionRequest::TIPCPaymentCloseActionRequest: { |
319 | rv = LaunchUIAction(aRequestId, type); |
320 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 320)) { |
321 | return rv; |
322 | } |
323 | if (mShowingRequest == request) { |
324 | mShowingRequest = nullptr; |
325 | } |
326 | mRequestQueue.RemoveElement(request); |
327 | break; |
328 | } |
329 | case IPCPaymentActionRequest::TIPCPaymentRetryActionRequest: { |
330 | const IPCPaymentRetryActionRequest& action = aAction; |
331 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 331); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")" ); do { *((volatile int*)__null) = 331; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
332 | request->UpdateErrors(action.error(), action.payerErrors(), |
333 | action.paymentMethodErrors(), |
334 | action.shippingAddressErrors()); |
335 | request->SetState(payments::PaymentRequest::eInteractive); |
336 | MOZ_ASSERT(mShowingRequest == request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(mShowingRequest == request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(mShowingRequest == request)) ), 0))) { do { } while (false); MOZ_ReportAssertionFailure("mShowingRequest == request" , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 336); AnnotateMozCrashReason("MOZ_ASSERT" "(" "mShowingRequest == request" ")"); do { *((volatile int*)__null) = 336; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
337 | rv = LaunchUIAction( |
Value stored to 'rv' is never read | |
338 | aRequestId, IPCPaymentActionRequest::TIPCPaymentUpdateActionRequest); |
339 | break; |
340 | } |
341 | default: { |
342 | return NS_ERROR_FAILURE; |
343 | } |
344 | } |
345 | return NS_OK; |
346 | } |
347 | |
348 | NS_IMETHODIMPnsresult |
349 | PaymentRequestService::RespondPayment(nsIPaymentActionResponse* aResponse) { |
350 | NS_ENSURE_ARG_POINTER(aResponse)do { if ((__builtin_expect(!!(!(aResponse)), 0))) { NS_DebugBreak (NS_DEBUG_WARNING, "NS_ENSURE_TRUE(" "aResponse" ") failed", nullptr , "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 350); return NS_ERROR_INVALID_POINTER; } } while (false); |
351 | nsAutoString requestId; |
352 | nsresult rv = aResponse->GetRequestId(requestId); |
353 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 353); return rv; } } while (false); |
354 | |
355 | RefPtr<payments::PaymentRequest> request; |
356 | rv = GetPaymentRequestById(requestId, getter_AddRefs(request)); |
357 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 357)) { |
358 | return rv; |
359 | } |
360 | if (!request) { |
361 | return NS_ERROR_FAILURE; |
362 | } |
363 | uint32_t type; |
364 | rv = aResponse->GetType(&type); |
365 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 365); return rv; } } while (false); |
366 | |
367 | // PaymentRequest can only be responded when |
368 | // 1. the state is eInteractive |
369 | // 2. the state is eClosed and response type is COMPLETE_ACTION |
370 | // 3. the state is eCreated and response type is CANMAKE_ACTION |
371 | payments::PaymentRequest::eState state = request->GetState(); |
372 | bool canBeResponded = (state == payments::PaymentRequest::eInteractive) || |
373 | (state == payments::PaymentRequest::eClosed && |
374 | type == nsIPaymentActionResponse::COMPLETE_ACTION) || |
375 | (state == payments::PaymentRequest::eCreated && |
376 | type == nsIPaymentActionResponse::CANMAKE_ACTION); |
377 | if (!canBeResponded) { |
378 | return NS_ERROR_FAILURE; |
379 | } |
380 | |
381 | if (!request->GetIPC()) { |
382 | return NS_ERROR_FAILURE; |
383 | } |
384 | rv = request->GetIPC()->RespondPayment(aResponse); |
385 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 385)) { |
386 | return rv; |
387 | } |
388 | |
389 | // Remove PaymentRequest from mRequestQueue while receive succeeded abort |
390 | // response or complete response |
391 | switch (type) { |
392 | case nsIPaymentActionResponse::ABORT_ACTION: { |
393 | nsCOMPtr<nsIPaymentAbortActionResponse> response = |
394 | do_QueryInterface(aResponse); |
395 | MOZ_ASSERT(response)do { static_assert( mozilla::detail::AssertionConditionType< decltype(response)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(response))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("response", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 395); AnnotateMozCrashReason("MOZ_ASSERT" "(" "response" ")" ); do { *((volatile int*)__null) = 395; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
396 | bool isSucceeded; |
397 | rv = response->IsSucceeded(&isSucceeded); |
398 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 398); return rv; } } while (false); |
399 | mShowingRequest = nullptr; |
400 | if (isSucceeded) { |
401 | mRequestQueue.RemoveElement(request); |
402 | request->SetState(payments::PaymentRequest::eClosed); |
403 | } |
404 | break; |
405 | } |
406 | case nsIPaymentActionResponse::SHOW_ACTION: { |
407 | request->SetState(payments::PaymentRequest::eClosed); |
408 | nsCOMPtr<nsIPaymentShowActionResponse> response = |
409 | do_QueryInterface(aResponse); |
410 | MOZ_ASSERT(response)do { static_assert( mozilla::detail::AssertionConditionType< decltype(response)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(response))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("response", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 410); AnnotateMozCrashReason("MOZ_ASSERT" "(" "response" ")" ); do { *((volatile int*)__null) = 410; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
411 | uint32_t acceptStatus; |
412 | rv = response->GetAcceptStatus(&acceptStatus); |
413 | NS_ENSURE_SUCCESS(rv, rv)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "rv", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 413); return rv; } } while (false); |
414 | if (acceptStatus != nsIPaymentActionResponse::PAYMENT_ACCEPTED) { |
415 | // Check if rejecting the showing PaymentRequest. |
416 | // If yes, set mShowingRequest as nullptr. |
417 | if (mShowingRequest == request) { |
418 | mShowingRequest = nullptr; |
419 | } |
420 | mRequestQueue.RemoveElement(request); |
421 | } |
422 | break; |
423 | } |
424 | case nsIPaymentActionResponse::COMPLETE_ACTION: { |
425 | mShowingRequest = nullptr; |
426 | mRequestQueue.RemoveElement(request); |
427 | break; |
428 | } |
429 | default: { |
430 | break; |
431 | } |
432 | } |
433 | return NS_OK; |
434 | } |
435 | |
436 | NS_IMETHODIMPnsresult |
437 | PaymentRequestService::ChangeShippingAddress(const nsAString& aRequestId, |
438 | nsIPaymentAddress* aAddress) { |
439 | RefPtr<payments::PaymentRequest> request; |
440 | nsresult rv = GetPaymentRequestById(aRequestId, getter_AddRefs(request)); |
441 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 441)) { |
442 | return rv; |
443 | } |
444 | if (!request) { |
445 | return NS_ERROR_FAILURE; |
446 | } |
447 | if (request->GetState() != payments::PaymentRequest::eInteractive) { |
448 | return NS_ERROR_FAILURE; |
449 | } |
450 | if (!request->GetIPC()) { |
451 | return NS_ERROR_FAILURE; |
452 | } |
453 | rv = request->GetIPC()->ChangeShippingAddress(aRequestId, aAddress); |
454 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 454)) { |
455 | return rv; |
456 | } |
457 | return NS_OK; |
458 | } |
459 | |
460 | NS_IMETHODIMPnsresult |
461 | PaymentRequestService::ChangeShippingOption(const nsAString& aRequestId, |
462 | const nsAString& aOption) { |
463 | RefPtr<payments::PaymentRequest> request; |
464 | nsresult rv = GetPaymentRequestById(aRequestId, getter_AddRefs(request)); |
465 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 465)) { |
466 | return rv; |
467 | } |
468 | if (!request) { |
469 | return NS_ERROR_FAILURE; |
470 | } |
471 | if (request->GetState() != payments::PaymentRequest::eInteractive) { |
472 | return NS_ERROR_FAILURE; |
473 | } |
474 | if (!request->GetIPC()) { |
475 | return NS_ERROR_FAILURE; |
476 | } |
477 | rv = request->GetIPC()->ChangeShippingOption(aRequestId, aOption); |
478 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 478)) { |
479 | return rv; |
480 | } |
481 | return NS_OK; |
482 | } |
483 | |
484 | NS_IMETHODIMPnsresult |
485 | PaymentRequestService::ChangePayerDetail(const nsAString& aRequestId, |
486 | const nsAString& aPayerName, |
487 | const nsAString& aPayerEmail, |
488 | const nsAString& aPayerPhone) { |
489 | RefPtr<payments::PaymentRequest> request; |
490 | nsresult rv = GetPaymentRequestById(aRequestId, getter_AddRefs(request)); |
491 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 491)) { |
492 | return rv; |
493 | } |
494 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 494); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")" ); do { *((volatile int*)__null) = 494; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
495 | if (!request->GetIPC()) { |
496 | return NS_ERROR_FAILURE; |
497 | } |
498 | rv = request->GetIPC()->ChangePayerDetail(aRequestId, aPayerName, aPayerEmail, |
499 | aPayerPhone); |
500 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 500)) { |
501 | return rv; |
502 | } |
503 | return NS_OK; |
504 | } |
505 | |
506 | NS_IMETHODIMPnsresult |
507 | PaymentRequestService::ChangePaymentMethod( |
508 | const nsAString& aRequestId, const nsAString& aMethodName, |
509 | nsIMethodChangeDetails* aMethodDetails) { |
510 | RefPtr<payments::PaymentRequest> request; |
511 | nsresult rv = GetPaymentRequestById(aRequestId, getter_AddRefs(request)); |
512 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 512)) { |
513 | return rv; |
514 | } |
515 | if (!request) { |
516 | return NS_ERROR_FAILURE; |
517 | } |
518 | if (request->GetState() != payments::PaymentRequest::eInteractive) { |
519 | return NS_ERROR_FAILURE; |
520 | } |
521 | if (!request->GetIPC()) { |
522 | return NS_ERROR_FAILURE; |
523 | } |
524 | rv = request->GetIPC()->ChangePaymentMethod(aRequestId, aMethodName, |
525 | aMethodDetails); |
526 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 526)) { |
527 | return rv; |
528 | } |
529 | return NS_OK; |
530 | } |
531 | |
532 | bool PaymentRequestService::CanMakePayment(const nsAString& aRequestId) { |
533 | /* |
534 | * TODO: Check third party payment app support by traversing all |
535 | * registered third party payment apps. |
536 | */ |
537 | return IsBasicCardPayment(aRequestId); |
538 | } |
539 | |
540 | nsresult PaymentRequestService::ShowPayment(const nsAString& aRequestId, |
541 | bool aIsUpdating) { |
542 | nsresult rv; |
543 | RefPtr<payments::PaymentRequest> request; |
544 | rv = GetPaymentRequestById(aRequestId, getter_AddRefs(request)); |
545 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 545)) { |
546 | return rv; |
547 | } |
548 | MOZ_ASSERT(request)do { static_assert( mozilla::detail::AssertionConditionType< decltype(request)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(request))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("request", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 548); AnnotateMozCrashReason("MOZ_ASSERT" "(" "request" ")" ); do { *((volatile int*)__null) = 548; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
549 | request->SetState(payments::PaymentRequest::eInteractive); |
550 | if (aIsUpdating) { |
551 | request->SetCompleteStatus(u"initial"_ns); |
552 | } |
553 | |
554 | if (mShowingRequest || !CanMakePayment(aRequestId)) { |
555 | uint32_t responseStatus; |
556 | if (mShowingRequest) { |
557 | responseStatus = nsIPaymentActionResponse::PAYMENT_REJECTED; |
558 | } else { |
559 | responseStatus = nsIPaymentActionResponse::PAYMENT_NOTSUPPORTED; |
560 | } |
561 | nsCOMPtr<nsIPaymentShowActionResponse> showResponse = |
562 | do_CreateInstance(NS_PAYMENT_SHOW_ACTION_RESPONSE_CONTRACT_ID"@mozilla.org/dom/payments/payment-show-action-response;1"); |
563 | MOZ_ASSERT(showResponse)do { static_assert( mozilla::detail::AssertionConditionType< decltype(showResponse)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(showResponse))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("showResponse", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 563); AnnotateMozCrashReason("MOZ_ASSERT" "(" "showResponse" ")"); do { *((volatile int*)__null) = 563; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
564 | rv = showResponse->Init(aRequestId, responseStatus, u""_ns, nullptr, u""_ns, |
565 | u""_ns, u""_ns); |
566 | rv = RespondPayment(showResponse.get()); |
567 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 567)) { |
568 | return rv; |
569 | } |
570 | } else { |
571 | mShowingRequest = request; |
572 | rv = LaunchUIAction(aRequestId, |
573 | IPCPaymentActionRequest::TIPCPaymentShowActionRequest); |
574 | if (NS_WARN_IF(NS_FAILED(rv))NS_warn_if_impl(((bool)(__builtin_expect(!!(NS_FAILED_impl(rv )), 0))), "NS_FAILED(rv)", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 574)) { |
575 | return rv; |
576 | } |
577 | } |
578 | return NS_OK; |
579 | } |
580 | |
581 | bool PaymentRequestService::IsBasicCardPayment(const nsAString& aRequestId) { |
582 | RefPtr<payments::PaymentRequest> request; |
583 | nsresult rv = GetPaymentRequestById(aRequestId, getter_AddRefs(request)); |
584 | NS_ENSURE_SUCCESS(rv, false)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "false", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 584); return false; } } while (false); |
585 | nsCOMPtr<nsIArray> methods; |
586 | rv = request->GetPaymentMethods(getter_AddRefs(methods)); |
587 | NS_ENSURE_SUCCESS(rv, false)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "false", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 587); return false; } } while (false); |
588 | uint32_t length; |
589 | rv = methods->GetLength(&length); |
590 | NS_ENSURE_SUCCESS(rv, false)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "false", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 590); return false; } } while (false); |
591 | RefPtr<BasicCardService> service = BasicCardService::GetService(); |
592 | MOZ_ASSERT(service)do { static_assert( mozilla::detail::AssertionConditionType< decltype(service)>::isValid, "invalid assertion condition" ); if ((__builtin_expect(!!(!(!!(service))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("service", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 592); AnnotateMozCrashReason("MOZ_ASSERT" "(" "service" ")" ); do { *((volatile int*)__null) = 592; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
593 | for (uint32_t index = 0; index < length; ++index) { |
594 | nsCOMPtr<nsIPaymentMethodData> method = do_QueryElementAt(methods, index); |
595 | MOZ_ASSERT(method)do { static_assert( mozilla::detail::AssertionConditionType< decltype(method)>::isValid, "invalid assertion condition") ; if ((__builtin_expect(!!(!(!!(method))), 0))) { do { } while (false); MOZ_ReportAssertionFailure("method", "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 595); AnnotateMozCrashReason("MOZ_ASSERT" "(" "method" ")") ; do { *((volatile int*)__null) = 595; __attribute__((nomerge )) ::abort(); } while (false); } } while (false); |
596 | nsAutoString supportedMethods; |
597 | rv = method->GetSupportedMethods(supportedMethods); |
598 | NS_ENSURE_SUCCESS(rv, false)do { nsresult __rv = rv; if (((bool)(__builtin_expect(!!(NS_FAILED_impl (__rv)), 0)))) { const char* name = mozilla::GetStaticErrorName (__rv); mozilla::SmprintfPointer msg = mozilla::Smprintf( "NS_ENSURE_SUCCESS(%s, %s) failed with " "result 0x%" "X" "%s%s%s", "rv", "false", static_cast<uint32_t >(__rv), name ? " (" : "", name ? name : "", name ? ")" : "" ); NS_DebugBreak(NS_DEBUG_WARNING, msg.get(), nullptr, "/var/lib/jenkins/workspace/firefox-scan-build/dom/payments/PaymentRequestService.cpp" , 598); return false; } } while (false); |
599 | if (service->IsBasicCardPayment(supportedMethods)) { |
600 | return true; |
601 | } |
602 | } |
603 | return false; |
604 | } |
605 | |
606 | } // namespace mozilla::dom |