1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "mozilla/dom/MozIccBinding.h"
8 #include "mozilla/dom/MozStkCommandEvent.h"
9 #include "mozilla/dom/DOMRequest.h"
10 #include "mozilla/dom/ScriptSettings.h"
11 #include "nsIDOMIccInfo.h"
13 #include "nsRadioInterfaceLayer.h"
14 #include "nsServiceManagerUtils.h"
16 using namespace mozilla::dom
;
18 Icc::Icc(nsPIDOMWindow
* aWindow
, long aClientId
, const nsAString
& aIccId
)
20 , mClientId(aClientId
)
26 mProvider
= do_GetService(NS_RILCONTENTHELPER_CONTRACTID
);
28 // Not being able to acquire the provider isn't fatal since we check
29 // for it explicitly below.
31 NS_WARNING("Could not acquire nsIIccProvider!");
43 Icc::NotifyEvent(const nsAString
& aName
)
45 return DispatchTrustedEvent(aName
);
49 Icc::NotifyStkEvent(const nsAString
& aName
, const nsAString
& aMessage
)
52 if (NS_WARN_IF(!jsapi
.InitWithLegacyErrorReporting(GetOwner()))) {
53 return NS_ERROR_UNEXPECTED
;
55 JSContext
* cx
= jsapi
.cx();
56 JS::Rooted
<JS::Value
> value(cx
);
58 if (!aMessage
.IsEmpty()) {
59 nsCOMPtr
<nsIJSON
> json(new nsJSON());
60 nsresult rv
= json
->DecodeToJSVal(aMessage
, cx
, &value
);
61 NS_ENSURE_SUCCESS(rv
, rv
);
63 value
= JS::NullValue();
66 MozStkCommandEventInit init
;
67 init
.mBubbles
= false;
68 init
.mCancelable
= false;
69 init
.mCommand
= value
;
71 nsRefPtr
<MozStkCommandEvent
> event
=
72 MozStkCommandEvent::Constructor(this, aName
, init
);
74 return DispatchTrustedEvent(event
);
80 Icc::WrapObject(JSContext
* aCx
)
82 return MozIccBinding::Wrap(aCx
, this);
87 already_AddRefed
<nsIDOMMozIccInfo
>
88 Icc::GetIccInfo() const
94 nsCOMPtr
<nsIDOMMozIccInfo
> iccInfo
;
95 nsresult rv
= mProvider
->GetIccInfo(mClientId
, getter_AddRefs(iccInfo
));
100 return iccInfo
.forget();
104 Icc::GetCardState(nsString
& aCardState
) const
106 aCardState
.SetIsVoid(true);
112 nsresult rv
= mProvider
->GetCardState(mClientId
, aCardState
);
114 aCardState
.SetIsVoid(true);
119 Icc::SendStkResponse(const JSContext
* aCx
, JS::Handle
<JS::Value
> aCommand
,
120 JS::Handle
<JS::Value
> aResponse
, ErrorResult
& aRv
)
123 aRv
.Throw(NS_ERROR_FAILURE
);
127 nsresult rv
= mProvider
->SendStkResponse(mClientId
, GetOwner(), aCommand
,
135 Icc::SendStkMenuSelection(uint16_t aItemIdentifier
, bool aHelpRequested
,
139 aRv
.Throw(NS_ERROR_FAILURE
);
143 nsresult rv
= mProvider
->SendStkMenuSelection(mClientId
,
153 Icc::SendStkTimerExpiration(const JSContext
* aCx
, JS::Handle
<JS::Value
> aTimer
,
157 aRv
.Throw(NS_ERROR_FAILURE
);
161 nsresult rv
= mProvider
->SendStkTimerExpiration(mClientId
, GetOwner(),
169 Icc::SendStkEventDownload(const JSContext
* aCx
, JS::Handle
<JS::Value
> aEvent
,
173 aRv
.Throw(NS_ERROR_FAILURE
);
177 nsresult rv
= mProvider
->SendStkEventDownload(mClientId
, GetOwner(), aEvent
);
183 already_AddRefed
<DOMRequest
>
184 Icc::GetCardLock(const nsAString
& aLockType
, ErrorResult
& aRv
)
187 aRv
.Throw(NS_ERROR_FAILURE
);
191 nsRefPtr
<nsIDOMDOMRequest
> request
;
192 nsresult rv
= mProvider
->GetCardLockState(mClientId
, GetOwner(), aLockType
,
193 getter_AddRefs(request
));
199 return request
.forget().downcast
<DOMRequest
>();
202 already_AddRefed
<DOMRequest
>
203 Icc::UnlockCardLock(const JSContext
* aCx
, JS::Handle
<JS::Value
> aInfo
,
207 aRv
.Throw(NS_ERROR_FAILURE
);
211 nsRefPtr
<nsIDOMDOMRequest
> request
;
212 nsresult rv
= mProvider
->UnlockCardLock(mClientId
, GetOwner(), aInfo
,
213 getter_AddRefs(request
));
219 return request
.forget().downcast
<DOMRequest
>();
222 already_AddRefed
<DOMRequest
>
223 Icc::SetCardLock(const JSContext
* aCx
, JS::Handle
<JS::Value
> aInfo
,
227 aRv
.Throw(NS_ERROR_FAILURE
);
231 nsRefPtr
<nsIDOMDOMRequest
> request
;
232 nsresult rv
= mProvider
->SetCardLock(mClientId
, GetOwner(), aInfo
,
233 getter_AddRefs(request
));
239 return request
.forget().downcast
<DOMRequest
>();
242 already_AddRefed
<DOMRequest
>
243 Icc::GetCardLockRetryCount(const nsAString
& aLockType
, ErrorResult
& aRv
)
246 aRv
.Throw(NS_ERROR_FAILURE
);
250 nsRefPtr
<nsIDOMDOMRequest
> request
;
251 nsresult rv
= mProvider
->GetCardLockRetryCount(mClientId
,
254 getter_AddRefs(request
));
260 return request
.forget().downcast
<DOMRequest
>();
263 already_AddRefed
<DOMRequest
>
264 Icc::ReadContacts(const nsAString
& aContactType
, ErrorResult
& aRv
)
267 aRv
.Throw(NS_ERROR_FAILURE
);
271 nsRefPtr
<nsIDOMDOMRequest
> request
;
272 nsresult rv
= mProvider
->ReadContacts(mClientId
, GetOwner(), aContactType
,
273 getter_AddRefs(request
));
279 return request
.forget().downcast
<DOMRequest
>();
282 already_AddRefed
<DOMRequest
>
283 Icc::UpdateContact(const JSContext
* aCx
, const nsAString
& aContactType
,
284 JS::Handle
<JS::Value
> aContact
, const nsAString
& aPin2
,
288 aRv
.Throw(NS_ERROR_FAILURE
);
292 nsRefPtr
<nsIDOMDOMRequest
> request
;
293 nsresult rv
= mProvider
->UpdateContact(mClientId
, GetOwner(), aContactType
,
295 getter_AddRefs(request
));
301 return request
.forget().downcast
<DOMRequest
>();
304 already_AddRefed
<DOMRequest
>
305 Icc::IccOpenChannel(const nsAString
& aAid
, ErrorResult
& aRv
)
308 aRv
.Throw(NS_ERROR_FAILURE
);
312 nsRefPtr
<nsIDOMDOMRequest
> request
;
313 nsresult rv
= mProvider
->IccOpenChannel(mClientId
, GetOwner(), aAid
,
314 getter_AddRefs(request
));
320 return request
.forget().downcast
<DOMRequest
>();
323 already_AddRefed
<DOMRequest
>
324 Icc::IccExchangeAPDU(const JSContext
* aCx
, int32_t aChannel
,
325 JS::Handle
<JS::Value
> aApdu
, ErrorResult
& aRv
)
328 aRv
.Throw(NS_ERROR_FAILURE
);
332 nsRefPtr
<nsIDOMDOMRequest
> request
;
333 nsresult rv
= mProvider
->IccExchangeAPDU(mClientId
, GetOwner(), aChannel
,
334 aApdu
, getter_AddRefs(request
));
340 return request
.forget().downcast
<DOMRequest
>();
343 already_AddRefed
<DOMRequest
>
344 Icc::IccCloseChannel(int32_t aChannel
, ErrorResult
& aRv
)
347 aRv
.Throw(NS_ERROR_FAILURE
);
351 nsRefPtr
<nsIDOMDOMRequest
> request
;
352 nsresult rv
= mProvider
->IccCloseChannel(mClientId
, GetOwner(), aChannel
,
353 getter_AddRefs(request
));
359 return request
.forget().downcast
<DOMRequest
>();
362 already_AddRefed
<DOMRequest
>
363 Icc::MatchMvno(const nsAString
& aMvnoType
,
364 const nsAString
& aMvnoData
,
368 aRv
.Throw(NS_ERROR_FAILURE
);
372 nsRefPtr
<nsIDOMDOMRequest
> request
;
373 nsresult rv
= mProvider
->MatchMvno(mClientId
, GetOwner(),
374 aMvnoType
, aMvnoData
,
375 getter_AddRefs(request
));
381 return request
.forget().downcast
<DOMRequest
>();