Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
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/. */
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"
14 using namespace mozilla::dom;
16 NS_IMPL_CYCLE_COLLECTION_CLASS(IccManager)
18 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(IccManager,
19 DOMEventTargetHelper)
20 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
22 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(IccManager,
23 DOMEventTargetHelper)
24 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
26 // QueryInterface implementation for IccManager
27 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IccManager)
28 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
30 NS_IMPL_ADDREF_INHERITED(IccManager, DOMEventTargetHelper)
31 NS_IMPL_RELEASE_INHERITED(IccManager, DOMEventTargetHelper)
33 IccManager::IccManager(nsPIDOMWindow* aWindow)
34 : DOMEventTargetHelper(aWindow)
35 {
36 uint32_t numberOfServices =
37 mozilla::Preferences::GetUint("ril.numRadioInterfaces", 1);
39 for (uint32_t i = 0; i < numberOfServices; i++) {
40 nsRefPtr<IccListener> iccListener = new IccListener(this, i);
41 mIccListeners.AppendElement(iccListener);
42 }
43 }
45 IccManager::~IccManager()
46 {
47 Shutdown();
48 }
50 JSObject*
51 IccManager::WrapObject(JSContext* aCx)
52 {
53 return MozIccManagerBinding::Wrap(aCx, this);
54 }
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 }
66 nsresult
67 IccManager::NotifyIccAdd(const nsAString& aIccId)
68 {
69 MozIccManagerBinding::ClearCachedIccIdsValue(this);
71 IccChangeEventInit init;
72 init.mBubbles = false;
73 init.mCancelable = false;
74 init.mIccId = aIccId;
76 nsRefPtr<IccChangeEvent> event =
77 IccChangeEvent::Constructor(this, NS_LITERAL_STRING("iccdetected"), init);
79 return DispatchTrustedEvent(event);
80 }
82 nsresult
83 IccManager::NotifyIccRemove(const nsAString& aIccId)
84 {
85 MozIccManagerBinding::ClearCachedIccIdsValue(this);
87 IccChangeEventInit init;
88 init.mBubbles = false;
89 init.mCancelable = false;
90 init.mIccId = aIccId;
92 nsRefPtr<IccChangeEvent> event =
93 IccChangeEvent::Constructor(this, NS_LITERAL_STRING("iccundetected"), init);
95 return DispatchTrustedEvent(event);
96 }
98 // MozIccManager
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 }
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 }