LCOV - code coverage report
Current view: top level - netwerk/base - LoadContextInfo.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 30 77 39.0 %
Date: 2017-07-14 16:53:18 Functions: 12 24 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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
       3             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       4             : 
       5             : #include "LoadContextInfo.h"
       6             : 
       7             : #include "mozilla/dom/ToJSValue.h"
       8             : #include "nsDocShell.h"
       9             : #include "nsIChannel.h"
      10             : #include "nsILoadContext.h"
      11             : #include "nsIWebNavigation.h"
      12             : #include "nsNetUtil.h"
      13             : 
      14             : using namespace mozilla::dom;
      15             : namespace mozilla {
      16             : namespace net {
      17             : 
      18             : // LoadContextInfo
      19             : 
      20          83 : NS_IMPL_ISUPPORTS(LoadContextInfo, nsILoadContextInfo)
      21             : 
      22          28 : LoadContextInfo::LoadContextInfo(bool aIsAnonymous,
      23          28 :                                  OriginAttributes aOriginAttributes)
      24             :   : mIsAnonymous(aIsAnonymous)
      25          28 :   , mOriginAttributes(aOriginAttributes)
      26             : {
      27          28 : }
      28             : 
      29          56 : LoadContextInfo::~LoadContextInfo()
      30             : {
      31          84 : }
      32             : 
      33          34 : NS_IMETHODIMP LoadContextInfo::GetIsPrivate(bool *aIsPrivate)
      34             : {
      35          34 :   *aIsPrivate = mOriginAttributes.mPrivateBrowsingId > 0;
      36          34 :   return NS_OK;
      37             : }
      38             : 
      39          35 : NS_IMETHODIMP LoadContextInfo::GetIsAnonymous(bool *aIsAnonymous)
      40             : {
      41          35 :   *aIsAnonymous = mIsAnonymous;
      42          35 :   return NS_OK;
      43             : }
      44             : 
      45          37 : OriginAttributes const* LoadContextInfo::OriginAttributesPtr()
      46             : {
      47          37 :   return &mOriginAttributes;
      48             : }
      49             : 
      50           0 : NS_IMETHODIMP LoadContextInfo::GetOriginAttributes(JSContext *aCx,
      51             :                                                    JS::MutableHandle<JS::Value> aVal)
      52             : {
      53           0 :   if (NS_WARN_IF(!ToJSValue(aCx, mOriginAttributes, aVal))) {
      54           0 :     return NS_ERROR_FAILURE;
      55             :   }
      56           0 :   return NS_OK;
      57             : }
      58             : 
      59             : // LoadContextInfoFactory
      60             : 
      61           0 : NS_IMPL_ISUPPORTS(LoadContextInfoFactory, nsILoadContextInfoFactory)
      62             : 
      63           0 : NS_IMETHODIMP LoadContextInfoFactory::GetDefault(nsILoadContextInfo * *aDefault)
      64             : {
      65             :   nsCOMPtr<nsILoadContextInfo> info =
      66           0 :     GetLoadContextInfo(false, OriginAttributes());
      67           0 :   info.forget(aDefault);
      68           0 :   return NS_OK;
      69             : }
      70             : 
      71           0 : NS_IMETHODIMP LoadContextInfoFactory::GetPrivate(nsILoadContextInfo * *aPrivate)
      72             : {
      73           0 :   OriginAttributes attrs;
      74           0 :   attrs.SyncAttributesWithPrivateBrowsing(true);
      75           0 :   nsCOMPtr<nsILoadContextInfo> info = GetLoadContextInfo(false, attrs);
      76           0 :   info.forget(aPrivate);
      77           0 :   return NS_OK;
      78             : }
      79             : 
      80           0 : NS_IMETHODIMP LoadContextInfoFactory::GetAnonymous(nsILoadContextInfo * *aAnonymous)
      81             : {
      82             :   nsCOMPtr<nsILoadContextInfo> info =
      83           0 :     GetLoadContextInfo(true, OriginAttributes());
      84           0 :   info.forget(aAnonymous);
      85           0 :   return NS_OK;
      86             : }
      87             : 
      88           0 : NS_IMETHODIMP LoadContextInfoFactory::Custom(bool aAnonymous,
      89             :                                              JS::HandleValue aOriginAttributes, JSContext *cx,
      90             :                                              nsILoadContextInfo * *_retval)
      91             : {
      92           0 :   OriginAttributes attrs;
      93           0 :   bool status = attrs.Init(cx, aOriginAttributes);
      94           0 :   NS_ENSURE_TRUE(status, NS_ERROR_FAILURE);
      95             : 
      96           0 :   nsCOMPtr<nsILoadContextInfo> info = GetLoadContextInfo(aAnonymous, attrs);
      97           0 :   info.forget(_retval);
      98           0 :   return NS_OK;
      99             : }
     100             : 
     101           0 : NS_IMETHODIMP LoadContextInfoFactory::FromLoadContext(nsILoadContext *aLoadContext, bool aAnonymous,
     102             :                                                       nsILoadContextInfo * *_retval)
     103             : {
     104           0 :   nsCOMPtr<nsILoadContextInfo> info = GetLoadContextInfo(aLoadContext, aAnonymous);
     105           0 :   info.forget(_retval);
     106           0 :   return NS_OK;
     107             : }
     108             : 
     109           0 : NS_IMETHODIMP LoadContextInfoFactory::FromWindow(nsIDOMWindow *aWindow, bool aAnonymous,
     110             :                                                  nsILoadContextInfo * *_retval)
     111             : {
     112           0 :   nsCOMPtr<nsILoadContextInfo> info = GetLoadContextInfo(aWindow, aAnonymous);
     113           0 :   info.forget(_retval);
     114           0 :   return NS_OK;
     115             : }
     116             : 
     117             : // Helper functions
     118             : 
     119             : LoadContextInfo *
     120           7 : GetLoadContextInfo(nsIChannel * aChannel)
     121             : {
     122             :   nsresult rv;
     123             : 
     124          14 :   DebugOnly<bool> pb = NS_UsePrivateBrowsing(aChannel);
     125             : 
     126           7 :   bool anon = false;
     127             :   nsLoadFlags loadFlags;
     128           7 :   rv = aChannel->GetLoadFlags(&loadFlags);
     129           7 :   if (NS_SUCCEEDED(rv)) {
     130           7 :     anon = !!(loadFlags & nsIChannel::LOAD_ANONYMOUS);
     131             :   }
     132             : 
     133          14 :   OriginAttributes oa;
     134           7 :   NS_GetOriginAttributes(aChannel, oa);
     135           7 :   MOZ_ASSERT(pb == (oa.mPrivateBrowsingId > 0));
     136             : 
     137          21 :   return new LoadContextInfo(anon, oa);
     138             : }
     139             : 
     140             : LoadContextInfo *
     141           0 : GetLoadContextInfo(nsILoadContext *aLoadContext, bool aIsAnonymous)
     142             : {
     143           0 :   if (!aLoadContext) {
     144           0 :     return new LoadContextInfo(aIsAnonymous, OriginAttributes());
     145             :   }
     146             : 
     147           0 :   OriginAttributes oa;
     148           0 :   aLoadContext->GetOriginAttributes(oa);
     149             : 
     150             : #ifdef DEBUG
     151           0 :   nsCOMPtr<nsIDocShellTreeItem> docShell = do_QueryInterface(aLoadContext);
     152           0 :   if (!docShell || docShell->ItemType() != nsIDocShellTreeItem::typeChrome) {
     153           0 :     MOZ_ASSERT(aLoadContext->UsePrivateBrowsing() == (oa.mPrivateBrowsingId > 0));
     154             :   }
     155             : #endif
     156             : 
     157           0 :   return new LoadContextInfo(aIsAnonymous, oa);
     158             : }
     159             : 
     160             : LoadContextInfo*
     161           0 : GetLoadContextInfo(nsIDOMWindow *aWindow,
     162             :                    bool aIsAnonymous)
     163             : {
     164           0 :   nsCOMPtr<nsIWebNavigation> webNav = do_GetInterface(aWindow);
     165           0 :   nsCOMPtr<nsILoadContext> loadContext = do_QueryInterface(webNav);
     166             : 
     167           0 :   return GetLoadContextInfo(loadContext, aIsAnonymous);
     168             : }
     169             : 
     170             : LoadContextInfo *
     171          10 : GetLoadContextInfo(nsILoadContextInfo *aInfo)
     172             : {
     173          10 :   return new LoadContextInfo(aInfo->IsAnonymous(),
     174          20 :                              *aInfo->OriginAttributesPtr());
     175             : }
     176             : 
     177             : LoadContextInfo *
     178           7 : GetLoadContextInfo(bool const aIsAnonymous,
     179             :                    OriginAttributes const &aOriginAttributes)
     180             : {
     181          14 :   return new LoadContextInfo(aIsAnonymous, aOriginAttributes);
     182             : }
     183             : 
     184             : } // namespace net
     185             : } // namespace mozilla

Generated by: LCOV version 1.13