LCOV - code coverage report
Current view: top level - dom/base - ChromeUtils.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 89 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 10 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*-  Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
       2             : /* This Source Code Form is subject to the terms of the Mozilla Public
       3             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       4             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       5             : 
       6             : #include "ChromeUtils.h"
       7             : 
       8             : #include "mozilla/Base64.h"
       9             : #include "mozilla/BasePrincipal.h"
      10             : 
      11             : namespace mozilla {
      12             : namespace dom {
      13             : 
      14             : /* static */ void
      15           0 : ThreadSafeChromeUtils::NondeterministicGetWeakMapKeys(GlobalObject& aGlobal,
      16             :                                                       JS::Handle<JS::Value> aMap,
      17             :                                                       JS::MutableHandle<JS::Value> aRetval,
      18             :                                                       ErrorResult& aRv)
      19             : {
      20           0 :   if (!aMap.isObject()) {
      21           0 :     aRetval.setUndefined();
      22             :   } else {
      23           0 :     JSContext* cx = aGlobal.Context();
      24           0 :     JS::Rooted<JSObject*> objRet(cx);
      25           0 :     JS::Rooted<JSObject*> mapObj(cx, &aMap.toObject());
      26           0 :     if (!JS_NondeterministicGetWeakMapKeys(cx, mapObj, &objRet)) {
      27           0 :       aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
      28             :     } else {
      29           0 :       aRetval.set(objRet ? JS::ObjectValue(*objRet) : JS::UndefinedValue());
      30             :     }
      31             :   }
      32           0 : }
      33             : 
      34             : /* static */ void
      35           0 : ThreadSafeChromeUtils::NondeterministicGetWeakSetKeys(GlobalObject& aGlobal,
      36             :                                                       JS::Handle<JS::Value> aSet,
      37             :                                                       JS::MutableHandle<JS::Value> aRetval,
      38             :                                                       ErrorResult& aRv)
      39             : {
      40           0 :   if (!aSet.isObject()) {
      41           0 :     aRetval.setUndefined();
      42             :   } else {
      43           0 :     JSContext* cx = aGlobal.Context();
      44           0 :     JS::Rooted<JSObject*> objRet(cx);
      45           0 :     JS::Rooted<JSObject*> setObj(cx, &aSet.toObject());
      46           0 :     if (!JS_NondeterministicGetWeakSetKeys(cx, setObj, &objRet)) {
      47           0 :       aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
      48             :     } else {
      49           0 :       aRetval.set(objRet ? JS::ObjectValue(*objRet) : JS::UndefinedValue());
      50             :     }
      51             :   }
      52           0 : }
      53             : 
      54             : /* static */ void
      55           0 : ThreadSafeChromeUtils::Base64URLEncode(GlobalObject& aGlobal,
      56             :                                        const ArrayBufferViewOrArrayBuffer& aSource,
      57             :                                        const Base64URLEncodeOptions& aOptions,
      58             :                                        nsACString& aResult,
      59             :                                        ErrorResult& aRv)
      60             : {
      61           0 :   size_t length = 0;
      62           0 :   uint8_t* data = nullptr;
      63           0 :   if (aSource.IsArrayBuffer()) {
      64           0 :     const ArrayBuffer& buffer = aSource.GetAsArrayBuffer();
      65           0 :     buffer.ComputeLengthAndData();
      66           0 :     length = buffer.Length();
      67           0 :     data = buffer.Data();
      68           0 :   } else if (aSource.IsArrayBufferView()) {
      69           0 :     const ArrayBufferView& view = aSource.GetAsArrayBufferView();
      70           0 :     view.ComputeLengthAndData();
      71           0 :     length = view.Length();
      72           0 :     data = view.Data();
      73             :   } else {
      74           0 :     MOZ_CRASH("Uninitialized union: expected buffer or view");
      75             :   }
      76             : 
      77           0 :   auto paddingPolicy = aOptions.mPad ? Base64URLEncodePaddingPolicy::Include :
      78           0 :                                        Base64URLEncodePaddingPolicy::Omit;
      79           0 :   nsresult rv = mozilla::Base64URLEncode(length, data, paddingPolicy, aResult);
      80           0 :   if (NS_WARN_IF(NS_FAILED(rv))) {
      81           0 :     aResult.Truncate();
      82           0 :     aRv.Throw(rv);
      83             :   }
      84           0 : }
      85             : 
      86             : /* static */ void
      87           0 : ThreadSafeChromeUtils::Base64URLDecode(GlobalObject& aGlobal,
      88             :                                        const nsACString& aString,
      89             :                                        const Base64URLDecodeOptions& aOptions,
      90             :                                        JS::MutableHandle<JSObject*> aRetval,
      91             :                                        ErrorResult& aRv)
      92             : {
      93             :   Base64URLDecodePaddingPolicy paddingPolicy;
      94           0 :   switch (aOptions.mPadding) {
      95             :     case Base64URLDecodePadding::Require:
      96           0 :       paddingPolicy = Base64URLDecodePaddingPolicy::Require;
      97           0 :       break;
      98             : 
      99             :     case Base64URLDecodePadding::Ignore:
     100           0 :       paddingPolicy = Base64URLDecodePaddingPolicy::Ignore;
     101           0 :       break;
     102             : 
     103             :     case Base64URLDecodePadding::Reject:
     104           0 :       paddingPolicy = Base64URLDecodePaddingPolicy::Reject;
     105           0 :       break;
     106             : 
     107             :     default:
     108           0 :       aRv.Throw(NS_ERROR_INVALID_ARG);
     109           0 :       return;
     110             :   }
     111           0 :   FallibleTArray<uint8_t> data;
     112           0 :   nsresult rv = mozilla::Base64URLDecode(aString, paddingPolicy, data);
     113           0 :   if (NS_WARN_IF(NS_FAILED(rv))) {
     114           0 :     aRv.Throw(rv);
     115           0 :     return;
     116             :   }
     117             : 
     118           0 :   JS::Rooted<JSObject*> buffer(aGlobal.Context(),
     119           0 :                                ArrayBuffer::Create(aGlobal.Context(),
     120           0 :                                                    data.Length(),
     121           0 :                                                    data.Elements()));
     122           0 :   if (NS_WARN_IF(!buffer)) {
     123           0 :     aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
     124           0 :     return;
     125             :   }
     126           0 :   aRetval.set(buffer);
     127             : }
     128             : 
     129             : /* static */ void
     130           0 : ChromeUtils::OriginAttributesToSuffix(dom::GlobalObject& aGlobal,
     131             :                                       const dom::OriginAttributesDictionary& aAttrs,
     132             :                                       nsCString& aSuffix)
     133             : 
     134             : {
     135           0 :   OriginAttributes attrs(aAttrs);
     136           0 :   attrs.CreateSuffix(aSuffix);
     137           0 : }
     138             : 
     139             : /* static */ bool
     140           0 : ChromeUtils::OriginAttributesMatchPattern(dom::GlobalObject& aGlobal,
     141             :                                           const dom::OriginAttributesDictionary& aAttrs,
     142             :                                           const dom::OriginAttributesPatternDictionary& aPattern)
     143             : {
     144           0 :   OriginAttributes attrs(aAttrs);
     145           0 :   OriginAttributesPattern pattern(aPattern);
     146           0 :   return pattern.Matches(attrs);
     147             : }
     148             : 
     149             : /* static */ void
     150           0 : ChromeUtils::CreateOriginAttributesFromOrigin(dom::GlobalObject& aGlobal,
     151             :                                        const nsAString& aOrigin,
     152             :                                        dom::OriginAttributesDictionary& aAttrs,
     153             :                                        ErrorResult& aRv)
     154             : {
     155           0 :   OriginAttributes attrs;
     156           0 :   nsAutoCString suffix;
     157           0 :   if (!attrs.PopulateFromOrigin(NS_ConvertUTF16toUTF8(aOrigin), suffix)) {
     158           0 :     aRv.Throw(NS_ERROR_FAILURE);
     159           0 :     return;
     160             :   }
     161           0 :   aAttrs = attrs;
     162             : }
     163             : 
     164             : /* static */ void
     165           0 : ChromeUtils::FillNonDefaultOriginAttributes(dom::GlobalObject& aGlobal,
     166             :                                  const dom::OriginAttributesDictionary& aAttrs,
     167             :                                  dom::OriginAttributesDictionary& aNewAttrs)
     168             : {
     169           0 :   aNewAttrs = aAttrs;
     170           0 : }
     171             : 
     172             : 
     173             : /* static */ bool
     174           0 : ChromeUtils::IsOriginAttributesEqual(dom::GlobalObject& aGlobal,
     175             :                                      const dom::OriginAttributesDictionary& aA,
     176             :                                      const dom::OriginAttributesDictionary& aB)
     177             : {
     178           0 :   return IsOriginAttributesEqual(aA, aB);
     179             : }
     180             : 
     181             : /* static */ bool
     182           0 : ChromeUtils::IsOriginAttributesEqual(const dom::OriginAttributesDictionary& aA,
     183             :                                      const dom::OriginAttributesDictionary& aB)
     184             : {
     185           0 :   return aA.mAppId == aB.mAppId &&
     186           0 :          aA.mInIsolatedMozBrowser == aB.mInIsolatedMozBrowser &&
     187           0 :          aA.mUserContextId == aB.mUserContextId &&
     188           0 :          aA.mPrivateBrowsingId == aB.mPrivateBrowsingId;
     189             : }
     190             : 
     191             : } // namespace dom
     192             : } // namespace mozilla

Generated by: LCOV version 1.13