LCOV - code coverage report
Current view: top level - ipc/glue - BackgroundUtils.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 152 269 56.5 %
Date: 2017-07-14 16:53:18 Functions: 4 7 57.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
       2             : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
       3             : /* This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
       5             :  * You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #include "BackgroundUtils.h"
       8             : 
       9             : #include "MainThreadUtils.h"
      10             : #include "mozilla/Assertions.h"
      11             : #include "mozilla/BasePrincipal.h"
      12             : #include "mozilla/ipc/PBackgroundSharedTypes.h"
      13             : #include "mozilla/ipc/URIUtils.h"
      14             : #include "mozilla/net/NeckoChannelParams.h"
      15             : #include "ExpandedPrincipal.h"
      16             : #include "nsIScriptSecurityManager.h"
      17             : #include "nsIURI.h"
      18             : #include "nsNetUtil.h"
      19             : #include "mozilla/LoadInfo.h"
      20             : #include "ContentPrincipal.h"
      21             : #include "NullPrincipal.h"
      22             : #include "nsContentUtils.h"
      23             : #include "nsString.h"
      24             : #include "nsTArray.h"
      25             : #include "mozilla/nsRedirectHistoryEntry.h"
      26             : #include "URIUtils.h"
      27             : 
      28             : namespace mozilla {
      29             : namespace net {
      30             : class OptionalLoadInfoArgs;
      31             : }
      32             : 
      33             : using mozilla::BasePrincipal;
      34             : using namespace mozilla::net;
      35             : 
      36             : namespace ipc {
      37             : 
      38             : already_AddRefed<nsIPrincipal>
      39           8 : PrincipalInfoToPrincipal(const PrincipalInfo& aPrincipalInfo,
      40             :                          nsresult* aOptionalResult)
      41             : {
      42           8 :   MOZ_ASSERT(NS_IsMainThread());
      43           8 :   MOZ_ASSERT(aPrincipalInfo.type() != PrincipalInfo::T__None);
      44             : 
      45             :   nsresult stackResult;
      46           8 :   nsresult& rv = aOptionalResult ? *aOptionalResult : stackResult;
      47             : 
      48             :   nsCOMPtr<nsIScriptSecurityManager> secMan =
      49          16 :     nsContentUtils::GetSecurityManager();
      50           8 :   if (!secMan) {
      51           0 :     return nullptr;
      52             :   }
      53             : 
      54          16 :   nsCOMPtr<nsIPrincipal> principal;
      55             : 
      56           8 :   switch (aPrincipalInfo.type()) {
      57             :     case PrincipalInfo::TSystemPrincipalInfo: {
      58           1 :       rv = secMan->GetSystemPrincipal(getter_AddRefs(principal));
      59           1 :       if (NS_WARN_IF(NS_FAILED(rv))) {
      60           0 :         return nullptr;
      61             :       }
      62             : 
      63           1 :       return principal.forget();
      64             :     }
      65             : 
      66             :     case PrincipalInfo::TNullPrincipalInfo: {
      67             :       const NullPrincipalInfo& info =
      68           0 :         aPrincipalInfo.get_NullPrincipalInfo();
      69             : 
      70           0 :       nsCOMPtr<nsIURI> uri;
      71           0 :       rv = NS_NewURI(getter_AddRefs(uri), info.spec());
      72           0 :       if (NS_WARN_IF(NS_FAILED(rv))) {
      73           0 :         return nullptr;
      74             :       }
      75             : 
      76           0 :       principal = NullPrincipal::Create(info.attrs(), uri);
      77           0 :       return principal.forget();
      78             :     }
      79             : 
      80             :     case PrincipalInfo::TContentPrincipalInfo: {
      81             :       const ContentPrincipalInfo& info =
      82           7 :         aPrincipalInfo.get_ContentPrincipalInfo();
      83             : 
      84          14 :       nsCOMPtr<nsIURI> uri;
      85           7 :       rv = NS_NewURI(getter_AddRefs(uri), info.spec());
      86           7 :       if (NS_WARN_IF(NS_FAILED(rv))) {
      87           0 :         return nullptr;
      88             :       }
      89             : 
      90          14 :       OriginAttributes attrs;
      91           7 :       if (info.attrs().mAppId != nsIScriptSecurityManager::UNKNOWN_APP_ID) {
      92           7 :         attrs = info.attrs();
      93             :       }
      94           7 :       principal = BasePrincipal::CreateCodebasePrincipal(uri, attrs);
      95           7 :       if (NS_WARN_IF(!principal)) {
      96           0 :         return nullptr;
      97             :       }
      98             : 
      99             :       // When the principal is serialized, the origin is extract from it. This
     100             :       // can fail, and in case, here we will havea Tvoid_t. If we have a string,
     101             :       // it must match with what the_new_principal.getOrigin returns.
     102           7 :       if (info.originNoSuffix().type() == ContentPrincipalInfoOriginNoSuffix::TnsCString) {
     103          12 :         nsAutoCString originNoSuffix;
     104           6 :         rv = principal->GetOriginNoSuffix(originNoSuffix);
     105          12 :         if (NS_WARN_IF(NS_FAILED(rv)) ||
     106           6 :             !info.originNoSuffix().get_nsCString().Equals(originNoSuffix)) {
     107           0 :           MOZ_CRASH("If the origin was in the contentPrincipalInfo, it must be available when deserialized");
     108             :         }
     109             :       }
     110             : 
     111           7 :       return principal.forget();
     112             :     }
     113             : 
     114             :     case PrincipalInfo::TExpandedPrincipalInfo: {
     115           0 :       const ExpandedPrincipalInfo& info = aPrincipalInfo.get_ExpandedPrincipalInfo();
     116             : 
     117           0 :       nsTArray<nsCOMPtr<nsIPrincipal>> whitelist;
     118           0 :       nsCOMPtr<nsIPrincipal> wlPrincipal;
     119             : 
     120           0 :       for (uint32_t i = 0; i < info.whitelist().Length(); i++) {
     121           0 :         wlPrincipal = PrincipalInfoToPrincipal(info.whitelist()[i], &rv);
     122           0 :         if (NS_WARN_IF(NS_FAILED(rv))) {
     123           0 :           return nullptr;
     124             :         }
     125             :         // append that principal to the whitelist
     126           0 :         whitelist.AppendElement(wlPrincipal);
     127             :       }
     128             : 
     129             :       RefPtr<ExpandedPrincipal> expandedPrincipal =
     130           0 :         ExpandedPrincipal::Create(whitelist, info.attrs());
     131           0 :       if (!expandedPrincipal) {
     132           0 :         NS_WARNING("could not instantiate expanded principal");
     133           0 :         return nullptr;
     134             :       }
     135             : 
     136           0 :       principal = expandedPrincipal;
     137           0 :       return principal.forget();
     138             :     }
     139             : 
     140             :     default:
     141           0 :       MOZ_CRASH("Unknown PrincipalInfo type!");
     142             :   }
     143             : 
     144             :   MOZ_CRASH("Should never get here!");
     145             : }
     146             : 
     147             : nsresult
     148          23 : PrincipalToPrincipalInfo(nsIPrincipal* aPrincipal,
     149             :                          PrincipalInfo* aPrincipalInfo)
     150             : {
     151          23 :   MOZ_ASSERT(NS_IsMainThread());
     152          23 :   MOZ_ASSERT(aPrincipal);
     153          23 :   MOZ_ASSERT(aPrincipalInfo);
     154             : 
     155          23 :   if (aPrincipal->GetIsNullPrincipal()) {
     156           0 :     nsCOMPtr<nsIURI> uri;
     157           0 :     nsresult rv = aPrincipal->GetURI(getter_AddRefs(uri));
     158           0 :     if (NS_WARN_IF(NS_FAILED(rv))) {
     159           0 :       return rv;
     160             :     }
     161             : 
     162           0 :     if (NS_WARN_IF(!uri)) {
     163           0 :       return NS_ERROR_FAILURE;
     164             :     }
     165             : 
     166           0 :     nsAutoCString spec;
     167           0 :     rv = uri->GetSpec(spec);
     168           0 :     if (NS_WARN_IF(NS_FAILED(rv))) {
     169           0 :       return rv;
     170             :     }
     171             : 
     172             :     *aPrincipalInfo =
     173           0 :       NullPrincipalInfo(aPrincipal->OriginAttributesRef(), spec);
     174           0 :     return NS_OK;
     175             :   }
     176             : 
     177             :   nsCOMPtr<nsIScriptSecurityManager> secMan =
     178          46 :     nsContentUtils::GetSecurityManager();
     179          23 :   if (!secMan) {
     180           0 :     return NS_ERROR_FAILURE;
     181             :   }
     182             : 
     183             :   bool isSystemPrincipal;
     184          23 :   nsresult rv = secMan->IsSystemPrincipal(aPrincipal, &isSystemPrincipal);
     185          23 :   if (NS_WARN_IF(NS_FAILED(rv))) {
     186           0 :     return rv;
     187             :   }
     188             : 
     189          23 :   if (isSystemPrincipal) {
     190          18 :     *aPrincipalInfo = SystemPrincipalInfo();
     191          18 :     return NS_OK;
     192             :   }
     193             : 
     194             :   // might be an expanded principal
     195             :   nsCOMPtr<nsIExpandedPrincipal> expanded =
     196          10 :     do_QueryInterface(aPrincipal);
     197             : 
     198           5 :   if (expanded) {
     199           0 :     nsTArray<PrincipalInfo> whitelistInfo;
     200           0 :     PrincipalInfo info;
     201             : 
     202             :     nsTArray< nsCOMPtr<nsIPrincipal> >* whitelist;
     203           0 :     MOZ_ALWAYS_SUCCEEDS(expanded->GetWhiteList(&whitelist));
     204             : 
     205           0 :     for (uint32_t i = 0; i < whitelist->Length(); i++) {
     206           0 :       rv = PrincipalToPrincipalInfo((*whitelist)[i], &info);
     207           0 :       if (NS_WARN_IF(NS_FAILED(rv))) {
     208           0 :         return rv;
     209             :       }
     210             :       // append that spec to the whitelist
     211           0 :       whitelistInfo.AppendElement(info);
     212             :     }
     213             : 
     214             :     *aPrincipalInfo =
     215           0 :       ExpandedPrincipalInfo(aPrincipal->OriginAttributesRef(),
     216           0 :                             Move(whitelistInfo));
     217           0 :     return NS_OK;
     218             :   }
     219             : 
     220             :   // must be a content principal
     221             : 
     222          10 :   nsCOMPtr<nsIURI> uri;
     223           5 :   rv = aPrincipal->GetURI(getter_AddRefs(uri));
     224           5 :   if (NS_WARN_IF(NS_FAILED(rv))) {
     225           0 :     return rv;
     226             :   }
     227             : 
     228           5 :   if (NS_WARN_IF(!uri)) {
     229           0 :     return NS_ERROR_FAILURE;
     230             :   }
     231             : 
     232          10 :   nsAutoCString spec;
     233           5 :   rv = uri->GetSpec(spec);
     234           5 :   if (NS_WARN_IF(NS_FAILED(rv))) {
     235           0 :     return rv;
     236             :   }
     237             : 
     238          10 :   ContentPrincipalInfoOriginNoSuffix infoOriginNoSuffix;
     239             : 
     240          10 :   nsCString originNoSuffix;
     241           5 :   rv = aPrincipal->GetOriginNoSuffix(originNoSuffix);
     242           5 :   if (NS_WARN_IF(NS_FAILED(rv))) {
     243           0 :     infoOriginNoSuffix = void_t();
     244             :   } else {
     245           5 :     infoOriginNoSuffix = originNoSuffix;
     246             :   }
     247             : 
     248          10 :   *aPrincipalInfo = ContentPrincipalInfo(aPrincipal->OriginAttributesRef(),
     249           5 :                                          infoOriginNoSuffix, spec);
     250           5 :   return NS_OK;
     251             : }
     252             : 
     253             : bool
     254           0 : IsPincipalInfoPrivate(const PrincipalInfo& aPrincipalInfo)
     255             : {
     256           0 :   if (aPrincipalInfo.type() != ipc::PrincipalInfo::TContentPrincipalInfo) {
     257           0 :     return false;
     258             :   }
     259             : 
     260           0 :   const ContentPrincipalInfo& info = aPrincipalInfo.get_ContentPrincipalInfo();
     261           0 :   return !!info.attrs().mPrivateBrowsingId;
     262             : }
     263             : 
     264             : already_AddRefed<nsIRedirectHistoryEntry>
     265           0 : RHEntryInfoToRHEntry(const RedirectHistoryEntryInfo& aRHEntryInfo)
     266             : {
     267             :   nsresult rv;
     268             :   nsCOMPtr<nsIPrincipal> principal =
     269           0 :     PrincipalInfoToPrincipal(aRHEntryInfo.principalInfo(), &rv);
     270           0 :   if (NS_WARN_IF(NS_FAILED(rv))) {
     271           0 :     return nullptr;
     272             :   }
     273             : 
     274           0 :   nsCOMPtr<nsIURI> referrerUri = DeserializeURI(aRHEntryInfo.referrerUri());
     275             : 
     276             :   nsCOMPtr<nsIRedirectHistoryEntry> entry =
     277           0 :     new nsRedirectHistoryEntry(principal, referrerUri, aRHEntryInfo.remoteAddress());
     278             : 
     279           0 :   return entry.forget();
     280             : }
     281             : 
     282             : nsresult
     283           0 : RHEntryToRHEntryInfo(nsIRedirectHistoryEntry* aRHEntry,
     284             :                      RedirectHistoryEntryInfo* aRHEntryInfo)
     285             : {
     286           0 :   MOZ_ASSERT(aRHEntry);
     287           0 :   MOZ_ASSERT(aRHEntryInfo);
     288             : 
     289             :   nsresult rv;
     290           0 :   aRHEntry->GetRemoteAddress(aRHEntryInfo->remoteAddress());
     291             : 
     292           0 :   nsCOMPtr<nsIURI> referrerUri;
     293           0 :   rv = aRHEntry->GetReferrerURI(getter_AddRefs(referrerUri));
     294           0 :   NS_ENSURE_SUCCESS(rv, rv);
     295           0 :   SerializeURI(referrerUri, aRHEntryInfo->referrerUri());
     296             : 
     297           0 :   nsCOMPtr<nsIPrincipal> principal;
     298           0 :   rv = aRHEntry->GetPrincipal(getter_AddRefs(principal));
     299           0 :   NS_ENSURE_SUCCESS(rv, rv);
     300             : 
     301           0 :   return PrincipalToPrincipalInfo(principal, &aRHEntryInfo->principalInfo());
     302             : }
     303             : 
     304             : nsresult
     305           3 : LoadInfoToLoadInfoArgs(nsILoadInfo *aLoadInfo,
     306             :                        OptionalLoadInfoArgs* aOptionalLoadInfoArgs)
     307             : {
     308           3 :   if (!aLoadInfo) {
     309             :     // if there is no loadInfo, then there is nothing to serialize
     310           0 :     *aOptionalLoadInfoArgs = void_t();
     311           0 :     return NS_OK;
     312             :   }
     313             : 
     314           3 :   nsresult rv = NS_OK;
     315           6 :   OptionalPrincipalInfo loadingPrincipalInfo = mozilla::void_t();
     316           3 :   if (aLoadInfo->LoadingPrincipal()) {
     317           4 :     PrincipalInfo loadingPrincipalInfoTemp;
     318           2 :     rv = PrincipalToPrincipalInfo(aLoadInfo->LoadingPrincipal(),
     319           2 :                                   &loadingPrincipalInfoTemp);
     320           2 :     NS_ENSURE_SUCCESS(rv, rv);
     321           2 :     loadingPrincipalInfo = loadingPrincipalInfoTemp;
     322             :   }
     323             : 
     324           6 :   PrincipalInfo triggeringPrincipalInfo;
     325           3 :   rv = PrincipalToPrincipalInfo(aLoadInfo->TriggeringPrincipal(),
     326           3 :                                 &triggeringPrincipalInfo);
     327             : 
     328           6 :   OptionalPrincipalInfo principalToInheritInfo = mozilla::void_t();
     329           3 :   if (aLoadInfo->PrincipalToInherit()) {
     330           0 :     PrincipalInfo principalToInheritInfoTemp;
     331           0 :     rv = PrincipalToPrincipalInfo(aLoadInfo->PrincipalToInherit(),
     332           0 :                                   &principalToInheritInfoTemp);
     333           0 :     NS_ENSURE_SUCCESS(rv, rv);
     334           0 :     principalToInheritInfo = principalToInheritInfoTemp;
     335             :   }
     336             : 
     337           6 :   OptionalPrincipalInfo sandboxedLoadingPrincipalInfo = mozilla::void_t();
     338           3 :   if (aLoadInfo->GetLoadingSandboxed()) {
     339           0 :     PrincipalInfo sandboxedLoadingPrincipalInfoTemp;
     340           0 :     nsCOMPtr<nsIPrincipal> sandboxedLoadingPrincipal;
     341           0 :     rv = aLoadInfo->GetSandboxedLoadingPrincipal(
     342           0 :         getter_AddRefs(sandboxedLoadingPrincipal));
     343           0 :     NS_ENSURE_SUCCESS(rv, rv);
     344           0 :     rv = PrincipalToPrincipalInfo(sandboxedLoadingPrincipal,
     345           0 :                                   &sandboxedLoadingPrincipalInfoTemp);
     346           0 :     NS_ENSURE_SUCCESS(rv, rv);
     347           0 :     sandboxedLoadingPrincipalInfo = sandboxedLoadingPrincipalInfoTemp;
     348             :   }
     349             : 
     350           6 :   OptionalURIParams optionalResultPrincipalURI = mozilla::void_t();
     351           6 :   nsCOMPtr<nsIURI> resultPrincipalURI;
     352           3 :   Unused << aLoadInfo->GetResultPrincipalURI(getter_AddRefs(resultPrincipalURI));
     353           3 :   if (resultPrincipalURI) {
     354           0 :     SerializeURI(resultPrincipalURI, optionalResultPrincipalURI);
     355             :   }
     356             : 
     357           6 :   nsTArray<RedirectHistoryEntryInfo> redirectChainIncludingInternalRedirects;
     358           3 :   for (const nsCOMPtr<nsIRedirectHistoryEntry>& redirectEntry :
     359           3 :        aLoadInfo->RedirectChainIncludingInternalRedirects()) {
     360           0 :     RedirectHistoryEntryInfo* entry = redirectChainIncludingInternalRedirects.AppendElement();
     361           0 :     rv = RHEntryToRHEntryInfo(redirectEntry, entry);
     362           0 :     NS_ENSURE_SUCCESS(rv, rv);
     363             :   }
     364             : 
     365           6 :   nsTArray<RedirectHistoryEntryInfo> redirectChain;
     366           3 :   for (const nsCOMPtr<nsIRedirectHistoryEntry>& redirectEntry :
     367           3 :        aLoadInfo->RedirectChain()) {
     368           0 :     RedirectHistoryEntryInfo* entry = redirectChain.AppendElement();
     369           0 :     rv = RHEntryToRHEntryInfo(redirectEntry, entry);
     370           0 :     NS_ENSURE_SUCCESS(rv, rv);
     371             :   }
     372             : 
     373             :   *aOptionalLoadInfoArgs =
     374           9 :     LoadInfoArgs(
     375             :       loadingPrincipalInfo,
     376             :       triggeringPrincipalInfo,
     377             :       principalToInheritInfo,
     378             :       sandboxedLoadingPrincipalInfo,
     379             :       optionalResultPrincipalURI,
     380           6 :       aLoadInfo->GetSecurityFlags(),
     381           6 :       aLoadInfo->InternalContentPolicyType(),
     382           6 :       static_cast<uint32_t>(aLoadInfo->GetTainting()),
     383           6 :       aLoadInfo->GetUpgradeInsecureRequests(),
     384           6 :       aLoadInfo->GetVerifySignedContent(),
     385           6 :       aLoadInfo->GetEnforceSRI(),
     386           6 :       aLoadInfo->GetForceInheritPrincipalDropped(),
     387           6 :       aLoadInfo->GetInnerWindowID(),
     388           6 :       aLoadInfo->GetOuterWindowID(),
     389           6 :       aLoadInfo->GetParentOuterWindowID(),
     390           6 :       aLoadInfo->GetFrameOuterWindowID(),
     391           6 :       aLoadInfo->GetEnforceSecurity(),
     392           6 :       aLoadInfo->GetInitialSecurityCheckDone(),
     393           6 :       aLoadInfo->GetIsInThirdPartyContext(),
     394           6 :       aLoadInfo->GetOriginAttributes(),
     395             :       redirectChainIncludingInternalRedirects,
     396             :       redirectChain,
     397           3 :       aLoadInfo->CorsUnsafeHeaders(),
     398           6 :       aLoadInfo->GetForcePreflight(),
     399           6 :       aLoadInfo->GetIsPreflight(),
     400           6 :       aLoadInfo->GetForceHSTSPriming(),
     401           6 :       aLoadInfo->GetMixedContentWouldBlock(),
     402           6 :       aLoadInfo->GetIsHSTSPriming(),
     403           6 :       aLoadInfo->GetIsHSTSPrimingUpgrade()
     404           3 :       );
     405             : 
     406           3 :   return NS_OK;
     407             : }
     408             : 
     409             : nsresult
     410           3 : LoadInfoArgsToLoadInfo(const OptionalLoadInfoArgs& aOptionalLoadInfoArgs,
     411             :                        nsILoadInfo** outLoadInfo)
     412             : {
     413           3 :   if (aOptionalLoadInfoArgs.type() == OptionalLoadInfoArgs::Tvoid_t) {
     414           0 :     *outLoadInfo = nullptr;
     415           0 :     return NS_OK;
     416             :   }
     417             : 
     418             :   const LoadInfoArgs& loadInfoArgs =
     419           3 :     aOptionalLoadInfoArgs.get_LoadInfoArgs();
     420             : 
     421           3 :   nsresult rv = NS_OK;
     422           6 :   nsCOMPtr<nsIPrincipal> loadingPrincipal;
     423           3 :   if (loadInfoArgs.requestingPrincipalInfo().type() != OptionalPrincipalInfo::Tvoid_t) {
     424           2 :     loadingPrincipal = PrincipalInfoToPrincipal(loadInfoArgs.requestingPrincipalInfo(), &rv);
     425           2 :     NS_ENSURE_SUCCESS(rv, rv);
     426             :   }
     427             : 
     428           3 :   NS_ENSURE_SUCCESS(rv, rv);
     429             :   nsCOMPtr<nsIPrincipal> triggeringPrincipal =
     430           6 :     PrincipalInfoToPrincipal(loadInfoArgs.triggeringPrincipalInfo(), &rv);
     431           3 :   NS_ENSURE_SUCCESS(rv, rv);
     432             : 
     433           6 :   nsCOMPtr<nsIPrincipal> principalToInherit;
     434           3 :   if (loadInfoArgs.principalToInheritInfo().type() != OptionalPrincipalInfo::Tvoid_t) {
     435           0 :     principalToInherit = PrincipalInfoToPrincipal(loadInfoArgs.principalToInheritInfo(), &rv);
     436           0 :     NS_ENSURE_SUCCESS(rv, rv);
     437             :   }
     438             : 
     439           6 :   nsCOMPtr<nsIPrincipal> sandboxedLoadingPrincipal;
     440           3 :   if (loadInfoArgs.sandboxedLoadingPrincipalInfo().type() != OptionalPrincipalInfo::Tvoid_t) {
     441             :     sandboxedLoadingPrincipal =
     442           0 :       PrincipalInfoToPrincipal(loadInfoArgs.sandboxedLoadingPrincipalInfo(), &rv);
     443           0 :     NS_ENSURE_SUCCESS(rv, rv);
     444             :   }
     445             : 
     446           6 :   nsCOMPtr<nsIURI> resultPrincipalURI;
     447           3 :   if (loadInfoArgs.resultPrincipalURI().type() != OptionalURIParams::Tvoid_t) {
     448           0 :     resultPrincipalURI = DeserializeURI(loadInfoArgs.resultPrincipalURI());
     449           0 :     NS_ENSURE_TRUE(resultPrincipalURI, NS_ERROR_UNEXPECTED);
     450             :   }
     451             : 
     452           6 :   RedirectHistoryArray redirectChainIncludingInternalRedirects;
     453           3 :   for (const RedirectHistoryEntryInfo& entryInfo :
     454           3 :       loadInfoArgs.redirectChainIncludingInternalRedirects()) {
     455             :     nsCOMPtr<nsIRedirectHistoryEntry> redirectHistoryEntry =
     456           0 :       RHEntryInfoToRHEntry(entryInfo);
     457           0 :     NS_ENSURE_SUCCESS(rv, rv);
     458           0 :     redirectChainIncludingInternalRedirects.AppendElement(redirectHistoryEntry.forget());
     459             :   }
     460             : 
     461           6 :   RedirectHistoryArray redirectChain;
     462           3 :   for (const RedirectHistoryEntryInfo& entryInfo : loadInfoArgs.redirectChain()) {
     463             :     nsCOMPtr<nsIRedirectHistoryEntry> redirectHistoryEntry =
     464           0 :       RHEntryInfoToRHEntry(entryInfo);
     465           0 :     NS_ENSURE_SUCCESS(rv, rv);
     466           0 :     redirectChain.AppendElement(redirectHistoryEntry.forget());
     467             :   }
     468             : 
     469             :   nsCOMPtr<nsILoadInfo> loadInfo =
     470             :     new mozilla::LoadInfo(loadingPrincipal,
     471             :                           triggeringPrincipal,
     472             :                           principalToInherit,
     473             :                           sandboxedLoadingPrincipal,
     474             :                           resultPrincipalURI,
     475           3 :                           loadInfoArgs.securityFlags(),
     476           3 :                           loadInfoArgs.contentPolicyType(),
     477           3 :                           static_cast<LoadTainting>(loadInfoArgs.tainting()),
     478           3 :                           loadInfoArgs.upgradeInsecureRequests(),
     479           3 :                           loadInfoArgs.verifySignedContent(),
     480           3 :                           loadInfoArgs.enforceSRI(),
     481           3 :                           loadInfoArgs.forceInheritPrincipalDropped(),
     482           3 :                           loadInfoArgs.innerWindowID(),
     483           3 :                           loadInfoArgs.outerWindowID(),
     484           3 :                           loadInfoArgs.parentOuterWindowID(),
     485           3 :                           loadInfoArgs.frameOuterWindowID(),
     486           3 :                           loadInfoArgs.enforceSecurity(),
     487           3 :                           loadInfoArgs.initialSecurityCheckDone(),
     488           3 :                           loadInfoArgs.isInThirdPartyContext(),
     489             :                           loadInfoArgs.originAttributes(),
     490             :                           redirectChainIncludingInternalRedirects,
     491             :                           redirectChain,
     492             :                           loadInfoArgs.corsUnsafeHeaders(),
     493           3 :                           loadInfoArgs.forcePreflight(),
     494           3 :                           loadInfoArgs.isPreflight(),
     495           3 :                           loadInfoArgs.forceHSTSPriming(),
     496           3 :                           loadInfoArgs.mixedContentWouldBlock(),
     497           3 :                           loadInfoArgs.isHSTSPriming(),
     498           3 :                           loadInfoArgs.isHSTSPrimingUpgrade()
     499          12 :                           );
     500             : 
     501           3 :    loadInfo.forget(outLoadInfo);
     502           3 :    return NS_OK;
     503             : }
     504             : 
     505             : } // namespace ipc
     506             : } // namespace mozilla

Generated by: LCOV version 1.13