dom/icc/src/IccManager.cpp

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

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 }

mercurial