dom/icc/src/Icc.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 "Icc.h"
     7 #include "mozilla/dom/MozIccBinding.h"
     8 #include "mozilla/dom/MozStkCommandEvent.h"
     9 #include "nsIDOMDOMRequest.h"
    10 #include "nsIDOMIccInfo.h"
    11 #include "nsJSON.h"
    12 #include "nsRadioInterfaceLayer.h"
    13 #include "nsServiceManagerUtils.h"
    15 using namespace mozilla::dom;
    17 Icc::Icc(nsPIDOMWindow* aWindow, long aClientId, const nsAString& aIccId)
    18   : mLive(true)
    19   , mClientId(aClientId)
    20   , mIccId(aIccId)
    21 {
    22   SetIsDOMBinding();
    23   BindToOwner(aWindow);
    25   mProvider = do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
    27   // Not being able to acquire the provider isn't fatal since we check
    28   // for it explicitly below.
    29   if (!mProvider) {
    30     NS_WARNING("Could not acquire nsIIccProvider!");
    31   }
    32 }
    34 void
    35 Icc::Shutdown()
    36 {
    37   mProvider = nullptr;
    38   mLive = false;
    39 }
    41 nsresult
    42 Icc::NotifyEvent(const nsAString& aName)
    43 {
    44   return DispatchTrustedEvent(aName);
    45 }
    47 nsresult
    48 Icc::NotifyStkEvent(const nsAString& aName, const nsAString& aMessage)
    49 {
    50   nsresult rv;
    51   nsIScriptContext* sc = GetContextForEventHandlers(&rv);
    52   NS_ENSURE_SUCCESS(rv, rv);
    54   AutoPushJSContext cx(sc->GetNativeContext());
    55   JS::Rooted<JS::Value> value(cx);
    57   if (!aMessage.IsEmpty()) {
    58     nsCOMPtr<nsIJSON> json(new nsJSON());
    59     nsresult rv = json->DecodeToJSVal(aMessage, cx, &value);
    60     NS_ENSURE_SUCCESS(rv, rv);
    61   } else {
    62     value = JS::NullValue();
    63   }
    65   MozStkCommandEventInit init;
    66   init.mBubbles = false;
    67   init.mCancelable = false;
    68   init.mCommand = value;
    70   nsRefPtr<MozStkCommandEvent> event =
    71     MozStkCommandEvent::Constructor(this, aName, init);
    73   return DispatchTrustedEvent(event);
    74 }
    76 // WrapperCache
    78 JSObject*
    79 Icc::WrapObject(JSContext* aCx)
    80 {
    81   return MozIccBinding::Wrap(aCx, this);
    82 }
    84 // MozIcc WebIDL
    86 already_AddRefed<nsIDOMMozIccInfo>
    87 Icc::GetIccInfo() const
    88 {
    89   if (!mProvider) {
    90     return nullptr;
    91   }
    93   nsCOMPtr<nsIDOMMozIccInfo> iccInfo;
    94   nsresult rv = mProvider->GetIccInfo(mClientId, getter_AddRefs(iccInfo));
    95   if (NS_FAILED(rv)) {
    96     return nullptr;
    97   }
    99   return iccInfo.forget();
   100 }
   102 void
   103 Icc::GetCardState(nsString& aCardState) const
   104 {
   105   aCardState.SetIsVoid(true);
   107   if (!mProvider) {
   108     return;
   109   }
   111   nsresult rv = mProvider->GetCardState(mClientId, aCardState);
   112   if (NS_FAILED(rv)) {
   113     aCardState.SetIsVoid(true);
   114   }
   115 }
   117 void
   118 Icc::SendStkResponse(const JSContext* aCx, JS::Handle<JS::Value> aCommand,
   119                      JS::Handle<JS::Value> aResponse, ErrorResult& aRv)
   120 {
   121   if (!mProvider) {
   122     aRv.Throw(NS_ERROR_FAILURE);
   123     return;
   124   }
   126   nsresult rv = mProvider->SendStkResponse(mClientId, GetOwner(), aCommand,
   127                                            aResponse);
   128   if (NS_FAILED(rv)) {
   129     aRv.Throw(rv);
   130   }
   131 }
   133 void
   134 Icc::SendStkMenuSelection(uint16_t aItemIdentifier, bool aHelpRequested,
   135                           ErrorResult& aRv)
   136 {
   137   if (!mProvider) {
   138     aRv.Throw(NS_ERROR_FAILURE);
   139     return;
   140   }
   142   nsresult rv = mProvider->SendStkMenuSelection(mClientId,
   143                                                 GetOwner(),
   144                                                 aItemIdentifier,
   145                                                 aHelpRequested);
   146   if (NS_FAILED(rv)) {
   147     aRv.Throw(rv);
   148   }
   149 }
   151 void
   152 Icc::SendStkTimerExpiration(const JSContext* aCx, JS::Handle<JS::Value> aTimer,
   153                             ErrorResult& aRv)
   154 {
   155   if (!mProvider) {
   156     aRv.Throw(NS_ERROR_FAILURE);
   157     return;
   158   }
   160   nsresult rv = mProvider->SendStkTimerExpiration(mClientId, GetOwner(),
   161                                                   aTimer);
   162   if (NS_FAILED(rv)) {
   163     aRv.Throw(rv);
   164   }
   165 }
   167 void
   168 Icc::SendStkEventDownload(const JSContext* aCx, JS::Handle<JS::Value> aEvent,
   169                           ErrorResult& aRv)
   170 {
   171   if (!mProvider) {
   172     aRv.Throw(NS_ERROR_FAILURE);
   173     return;
   174   }
   176   nsresult rv = mProvider->SendStkEventDownload(mClientId, GetOwner(), aEvent);
   177   if (NS_FAILED(rv)) {
   178     aRv.Throw(rv);
   179   }
   180 }
   182 already_AddRefed<nsISupports>
   183 Icc::GetCardLock(const nsAString& aLockType, ErrorResult& aRv)
   184 {
   185   if (!mProvider) {
   186     aRv.Throw(NS_ERROR_FAILURE);
   187     return nullptr;
   188   }
   190   nsRefPtr<nsIDOMDOMRequest> request;
   191   nsresult rv = mProvider->GetCardLockState(mClientId, GetOwner(), aLockType,
   192                                             getter_AddRefs(request));
   193   if (NS_FAILED(rv)) {
   194     aRv.Throw(rv);
   195     return nullptr;
   196   }
   198   return request.forget();
   199 }
   201 already_AddRefed<nsISupports>
   202 Icc::UnlockCardLock(const JSContext* aCx, JS::Handle<JS::Value> aInfo,
   203                     ErrorResult& aRv)
   204 {
   205   if (!mProvider) {
   206     aRv.Throw(NS_ERROR_FAILURE);
   207     return nullptr;
   208   }
   210   nsRefPtr<nsIDOMDOMRequest> request;
   211   nsresult rv = mProvider->UnlockCardLock(mClientId, GetOwner(), aInfo,
   212                                           getter_AddRefs(request));
   213   if (NS_FAILED(rv)) {
   214     aRv.Throw(rv);
   215     return nullptr;
   216   }
   218   return request.forget();
   219 }
   221 already_AddRefed<nsISupports>
   222 Icc::SetCardLock(const JSContext* aCx, JS::Handle<JS::Value> aInfo,
   223                  ErrorResult& aRv)
   224 {
   225   if (!mProvider) {
   226     aRv.Throw(NS_ERROR_FAILURE);
   227     return nullptr;
   228   }
   230   nsRefPtr<nsIDOMDOMRequest> request;
   231   nsresult rv = mProvider->SetCardLock(mClientId, GetOwner(), aInfo,
   232                                        getter_AddRefs(request));
   233   if (NS_FAILED(rv)) {
   234     aRv.Throw(rv);
   235     return nullptr;
   236   }
   238   return request.forget();
   239 }
   241 already_AddRefed<nsISupports>
   242 Icc::GetCardLockRetryCount(const nsAString& aLockType, ErrorResult& aRv)
   243 {
   244   if (!mProvider) {
   245     aRv.Throw(NS_ERROR_FAILURE);
   246     return nullptr;
   247   }
   249   nsRefPtr<nsIDOMDOMRequest> request;
   250   nsresult rv = mProvider->GetCardLockRetryCount(mClientId,
   251                                                  GetOwner(),
   252                                                  aLockType,
   253                                                  getter_AddRefs(request));
   254   if (NS_FAILED(rv)) {
   255     aRv.Throw(rv);
   256     return nullptr;
   257   }
   259   return request.forget();
   260 }
   262 already_AddRefed<nsISupports>
   263 Icc::ReadContacts(const nsAString& aContactType, ErrorResult& aRv)
   264 {
   265   if (!mProvider) {
   266     aRv.Throw(NS_ERROR_FAILURE);
   267     return nullptr;
   268   }
   270   nsRefPtr<nsIDOMDOMRequest> request;
   271   nsresult rv = mProvider->ReadContacts(mClientId, GetOwner(), aContactType,
   272                                         getter_AddRefs(request));
   273   if (NS_FAILED(rv)) {
   274     aRv.Throw(rv);
   275     return nullptr;
   276   }
   278   return request.forget();
   279 }
   281 already_AddRefed<nsISupports>
   282 Icc::UpdateContact(const JSContext* aCx, const nsAString& aContactType,
   283                    JS::Handle<JS::Value> aContact, const nsAString& aPin2,
   284                    ErrorResult& aRv)
   285 {
   286   if (!mProvider) {
   287     aRv.Throw(NS_ERROR_FAILURE);
   288     return nullptr;
   289   }
   291   nsRefPtr<nsIDOMDOMRequest> request;
   292   nsresult rv = mProvider->UpdateContact(mClientId, GetOwner(), aContactType,
   293                                          aContact, aPin2,
   294                                          getter_AddRefs(request));
   295   if (NS_FAILED(rv)) {
   296     aRv.Throw(rv);
   297     return nullptr;
   298   }
   300   return request.forget();
   301 }
   303 already_AddRefed<nsISupports>
   304 Icc::IccOpenChannel(const nsAString& aAid, ErrorResult& aRv)
   305 {
   306   if (!mProvider) {
   307     aRv.Throw(NS_ERROR_FAILURE);
   308     return nullptr;
   309   }
   311   nsRefPtr<nsIDOMDOMRequest> request;
   312   nsresult rv = mProvider->IccOpenChannel(mClientId, GetOwner(), aAid,
   313                                           getter_AddRefs(request));
   314   if (NS_FAILED(rv)) {
   315     aRv.Throw(rv);
   316     return nullptr;
   317   }
   319   return request.forget();
   320 }
   322 already_AddRefed<nsISupports>
   323 Icc::IccExchangeAPDU(const JSContext* aCx, int32_t aChannel,
   324                      JS::Handle<JS::Value> aApdu, ErrorResult& aRv)
   325 {
   326   if (!mProvider) {
   327     aRv.Throw(NS_ERROR_FAILURE);
   328     return nullptr;
   329   }
   331   nsRefPtr<nsIDOMDOMRequest> request;
   332   nsresult rv = mProvider->IccExchangeAPDU(mClientId, GetOwner(), aChannel,
   333                                            aApdu, getter_AddRefs(request));
   334   if (NS_FAILED(rv)) {
   335     aRv.Throw(rv);
   336     return nullptr;
   337   }
   339   return request.forget();
   340 }
   342 already_AddRefed<nsISupports>
   343 Icc::IccCloseChannel(int32_t aChannel, ErrorResult& aRv)
   344 {
   345   if (!mProvider) {
   346     aRv.Throw(NS_ERROR_FAILURE);
   347     return nullptr;
   348   }
   350   nsRefPtr<nsIDOMDOMRequest> request;
   351   nsresult rv = mProvider->IccCloseChannel(mClientId, GetOwner(), aChannel,
   352                                            getter_AddRefs(request));
   353   if (NS_FAILED(rv)) {
   354     aRv.Throw(rv);
   355     return nullptr;
   356   }
   358   return request.forget();
   359 }
   361 already_AddRefed<nsISupports>
   362 Icc::MatchMvno(const nsAString& aMvnoType,
   363                const nsAString& aMvnoData,
   364                ErrorResult& aRv)
   365 {
   366   if (!mProvider) {
   367     aRv.Throw(NS_ERROR_FAILURE);
   368     return nullptr;
   369   }
   371   nsRefPtr<nsIDOMDOMRequest> request;
   372   nsresult rv = mProvider->MatchMvno(mClientId, GetOwner(),
   373                                      aMvnoType, aMvnoData,
   374                                      getter_AddRefs(request));
   375   if (NS_FAILED(rv)) {
   376     aRv.Throw(rv);
   377     return nullptr;
   378   }
   380   return request.forget();
   381 }

mercurial