dom/icc/src/IccManager.cpp

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:aad844b7647e
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/. */
4
5 #include "IccManager.h"
6 #include "mozilla/dom/MozIccManagerBinding.h"
7 #include "GeneratedEvents.h"
8 #include "Icc.h"
9 #include "IccListener.h"
10 #include "mozilla/dom/IccChangeEvent.h"
11 #include "mozilla/Preferences.h"
12 #include "nsIDOMIccInfo.h"
13
14 using namespace mozilla::dom;
15
16 NS_IMPL_CYCLE_COLLECTION_CLASS(IccManager)
17
18 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(IccManager,
19 DOMEventTargetHelper)
20 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
21
22 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(IccManager,
23 DOMEventTargetHelper)
24 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
25
26 // QueryInterface implementation for IccManager
27 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IccManager)
28 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
29
30 NS_IMPL_ADDREF_INHERITED(IccManager, DOMEventTargetHelper)
31 NS_IMPL_RELEASE_INHERITED(IccManager, DOMEventTargetHelper)
32
33 IccManager::IccManager(nsPIDOMWindow* aWindow)
34 : DOMEventTargetHelper(aWindow)
35 {
36 uint32_t numberOfServices =
37 mozilla::Preferences::GetUint("ril.numRadioInterfaces", 1);
38
39 for (uint32_t i = 0; i < numberOfServices; i++) {
40 nsRefPtr<IccListener> iccListener = new IccListener(this, i);
41 mIccListeners.AppendElement(iccListener);
42 }
43 }
44
45 IccManager::~IccManager()
46 {
47 Shutdown();
48 }
49
50 JSObject*
51 IccManager::WrapObject(JSContext* aCx)
52 {
53 return MozIccManagerBinding::Wrap(aCx, this);
54 }
55
56 void
57 IccManager::Shutdown()
58 {
59 for (uint32_t i = 0; i < mIccListeners.Length(); i++) {
60 mIccListeners[i]->Shutdown();
61 mIccListeners[i] = nullptr;
62 }
63 mIccListeners.Clear();
64 }
65
66 nsresult
67 IccManager::NotifyIccAdd(const nsAString& aIccId)
68 {
69 MozIccManagerBinding::ClearCachedIccIdsValue(this);
70
71 IccChangeEventInit init;
72 init.mBubbles = false;
73 init.mCancelable = false;
74 init.mIccId = aIccId;
75
76 nsRefPtr<IccChangeEvent> event =
77 IccChangeEvent::Constructor(this, NS_LITERAL_STRING("iccdetected"), init);
78
79 return DispatchTrustedEvent(event);
80 }
81
82 nsresult
83 IccManager::NotifyIccRemove(const nsAString& aIccId)
84 {
85 MozIccManagerBinding::ClearCachedIccIdsValue(this);
86
87 IccChangeEventInit init;
88 init.mBubbles = false;
89 init.mCancelable = false;
90 init.mIccId = aIccId;
91
92 nsRefPtr<IccChangeEvent> event =
93 IccChangeEvent::Constructor(this, NS_LITERAL_STRING("iccundetected"), init);
94
95 return DispatchTrustedEvent(event);
96 }
97
98 // MozIccManager
99
100 void
101 IccManager::GetIccIds(nsTArray<nsString>& aIccIds)
102 {
103 nsTArray<nsRefPtr<IccListener>>::size_type i;
104 for (i = 0; i < mIccListeners.Length(); ++i) {
105 nsRefPtr<Icc> icc = mIccListeners[i]->GetIcc();
106 if (icc) {
107 aIccIds.AppendElement(icc->GetIccId());
108 }
109 }
110 }
111
112 already_AddRefed<nsISupports>
113 IccManager::GetIccById(const nsAString& aIccId) const
114 {
115 nsTArray<nsRefPtr<IccListener>>::size_type i;
116 for (i = 0; i < mIccListeners.Length(); ++i) {
117 nsRefPtr<Icc> icc = mIccListeners[i]->GetIcc();
118 if (icc && aIccId == icc->GetIccId()) {
119 return icc.forget();
120 }
121 }
122 return nullptr;
123 }

mercurial