LCOV - code coverage report
Current view: top level - ipc/glue - URIUtils.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 35 54 64.8 %
Date: 2017-07-14 16:53:18 Functions: 4 4 100.0 %
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
       5             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #include "URIUtils.h"
       8             : 
       9             : #include "nsIIPCSerializableURI.h"
      10             : 
      11             : #include "mozilla/ArrayUtils.h"
      12             : #include "mozilla/Assertions.h"
      13             : #include "nsComponentManagerUtils.h"
      14             : #include "nsDebug.h"
      15             : #include "nsID.h"
      16             : #include "nsJARURI.h"
      17             : #include "nsIIconURI.h"
      18             : #include "nsHostObjectURI.h"
      19             : #include "NullPrincipalURI.h"
      20             : #include "nsJSProtocolHandler.h"
      21             : #include "nsNetCID.h"
      22             : #include "nsSimpleNestedURI.h"
      23             : #include "nsThreadUtils.h"
      24             : 
      25             : using namespace mozilla::ipc;
      26             : using mozilla::ArrayLength;
      27             : 
      28             : namespace {
      29             : 
      30             : NS_DEFINE_CID(kSimpleURICID, NS_SIMPLEURI_CID);
      31             : NS_DEFINE_CID(kStandardURLCID, NS_STANDARDURL_CID);
      32             : NS_DEFINE_CID(kJARURICID, NS_JARURI_CID);
      33             : NS_DEFINE_CID(kIconURICID, NS_MOZICONURI_CID);
      34             : 
      35             : } // namespace
      36             : 
      37             : namespace mozilla {
      38             : namespace ipc {
      39             : 
      40             : void
      41          22 : SerializeURI(nsIURI* aURI,
      42             :              URIParams& aParams)
      43             : {
      44          22 :   MOZ_ASSERT(NS_IsMainThread());
      45          22 :   MOZ_ASSERT(aURI);
      46             : 
      47          44 :   nsCOMPtr<nsIIPCSerializableURI> serializable = do_QueryInterface(aURI);
      48          22 :   if (!serializable) {
      49           0 :     MOZ_CRASH("All IPDL URIs must be serializable!");
      50             :   }
      51             : 
      52          22 :   serializable->Serialize(aParams);
      53          22 :   if (aParams.type() == URIParams::T__None) {
      54           0 :     MOZ_CRASH("Serialize failed!");
      55             :   }
      56          22 : }
      57             : 
      58             : void
      59          23 : SerializeURI(nsIURI* aURI,
      60             :              OptionalURIParams& aParams)
      61             : {
      62          23 :   MOZ_ASSERT(NS_IsMainThread());
      63             : 
      64          23 :   if (aURI) {
      65          22 :     URIParams params;
      66          11 :     SerializeURI(aURI, params);
      67          11 :     aParams = params;
      68             :   }
      69             :   else {
      70          12 :     aParams = mozilla::void_t();
      71             :   }
      72          23 : }
      73             : 
      74             : already_AddRefed<nsIURI>
      75          22 : DeserializeURI(const URIParams& aParams)
      76             : {
      77          22 :   MOZ_ASSERT(NS_IsMainThread());
      78             : 
      79          44 :   nsCOMPtr<nsIIPCSerializableURI> serializable;
      80             : 
      81          22 :   switch (aParams.type()) {
      82             :     case URIParams::TSimpleURIParams:
      83           0 :       serializable = do_CreateInstance(kSimpleURICID);
      84           0 :       break;
      85             : 
      86             :     case URIParams::TStandardURLParams:
      87          22 :       serializable = do_CreateInstance(kStandardURLCID);
      88          22 :       break;
      89             : 
      90             :     case URIParams::TJARURIParams:
      91           0 :       serializable = do_CreateInstance(kJARURICID);
      92           0 :       break;
      93             : 
      94             :     case URIParams::TJSURIParams:
      95           0 :       serializable = new nsJSURI();
      96           0 :       break;
      97             : 
      98             :     case URIParams::TIconURIParams:
      99           0 :       serializable = do_CreateInstance(kIconURICID);
     100           0 :       break;
     101             : 
     102             :     case URIParams::TNullPrincipalURIParams:
     103           0 :       serializable = new NullPrincipalURI();
     104           0 :       break;
     105             : 
     106             :     case URIParams::TSimpleNestedURIParams:
     107           0 :       serializable = new nsSimpleNestedURI();
     108           0 :       break;
     109             : 
     110             :     case URIParams::THostObjectURIParams:
     111           0 :       serializable = new nsHostObjectURI();
     112           0 :       break;
     113             : 
     114             :     default:
     115           0 :       MOZ_CRASH("Unknown params!");
     116             :   }
     117             : 
     118          22 :   MOZ_ASSERT(serializable);
     119             : 
     120          22 :   if (!serializable->Deserialize(aParams)) {
     121           0 :     MOZ_ASSERT(false, "Deserialize failed!");
     122             :     return nullptr;
     123             :   }
     124             : 
     125          44 :   nsCOMPtr<nsIURI> uri = do_QueryInterface(serializable);
     126          22 :   MOZ_ASSERT(uri);
     127             : 
     128          22 :   return uri.forget();
     129             : }
     130             : 
     131             : already_AddRefed<nsIURI>
     132          23 : DeserializeURI(const OptionalURIParams& aParams)
     133             : {
     134          23 :   MOZ_ASSERT(NS_IsMainThread());
     135             : 
     136          46 :   nsCOMPtr<nsIURI> uri;
     137             : 
     138          23 :   switch (aParams.type()) {
     139             :     case OptionalURIParams::Tvoid_t:
     140          12 :       break;
     141             : 
     142             :     case OptionalURIParams::TURIParams:
     143          11 :       uri = DeserializeURI(aParams.get_URIParams());
     144          11 :       break;
     145             : 
     146             :     default:
     147           0 :       MOZ_CRASH("Unknown params!");
     148             :   }
     149             : 
     150          46 :   return uri.forget();
     151             : }
     152             : 
     153             : } // namespace ipc
     154             : } // namespace mozilla

Generated by: LCOV version 1.13