LCOV - code coverage report
Current view: top level - dom/base - nsXMLNameSpaceMap.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 24 41 58.5 %
Date: 2017-07-14 16:53:18 Functions: 8 11 72.7 %
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             : /*
       8             :  * A class for keeping track of prefix-to-namespace-id mappings
       9             :  */
      10             : 
      11             : #include "nsXMLNameSpaceMap.h"
      12             : #include "nsContentUtils.h"
      13             : #include "nsGkAtoms.h"
      14             : #include "nsNameSpaceManager.h"
      15             : #include "mozilla/dom/NameSpaceConstants.h"
      16             : 
      17             : template <>
      18             : class nsDefaultComparator <nsNameSpaceEntry, nsIAtom*> {
      19             :   public:
      20        6715 :     bool Equals(const nsNameSpaceEntry& aEntry, nsIAtom* const& aPrefix) const {
      21        6715 :       return aEntry.prefix == aPrefix;
      22             :     }
      23             : };
      24             : 
      25             : template <>
      26             : class nsDefaultComparator <nsNameSpaceEntry, int32_t> {
      27             :   public:
      28           0 :     bool Equals(const nsNameSpaceEntry& aEntry, const int32_t& aNameSpace) const {
      29           0 :       return aEntry.nameSpaceID == aNameSpace;
      30             :     }
      31             : };
      32             : 
      33             : 
      34             : /* static */ nsXMLNameSpaceMap*
      35          39 : nsXMLNameSpaceMap::Create(bool aForXML)
      36             : {
      37          39 :   nsXMLNameSpaceMap *map = new nsXMLNameSpaceMap();
      38          39 :   NS_ENSURE_TRUE(map, nullptr);
      39             : 
      40          39 :   if (aForXML) {
      41           0 :     nsresult rv1 = map->AddPrefix(nsGkAtoms::xmlns,
      42           0 :                                   kNameSpaceID_XMLNS);
      43           0 :     nsresult rv2 = map->AddPrefix(nsGkAtoms::xml, kNameSpaceID_XML);
      44             : 
      45           0 :     if (NS_FAILED(rv1) || NS_FAILED(rv2)) {
      46           0 :       delete map;
      47           0 :       map = nullptr;
      48             :     }
      49             :   }
      50             : 
      51          39 :   return map;
      52             : }
      53             : 
      54          39 : nsXMLNameSpaceMap::nsXMLNameSpaceMap()
      55          39 :   : mNameSpaces(4)
      56             : {
      57          39 : }
      58             : 
      59             : nsresult
      60         103 : nsXMLNameSpaceMap::AddPrefix(nsIAtom *aPrefix, int32_t aNameSpaceID)
      61             : {
      62         103 :   if (!mNameSpaces.Contains(aPrefix) && !mNameSpaces.AppendElement(aPrefix)) {
      63           0 :     return NS_ERROR_OUT_OF_MEMORY;
      64             :   }
      65         103 :   mNameSpaces[mNameSpaces.IndexOf(aPrefix)].nameSpaceID = aNameSpaceID;
      66         103 :   return NS_OK;
      67             : }
      68             : 
      69             : nsresult
      70          64 : nsXMLNameSpaceMap::AddPrefix(nsIAtom *aPrefix, nsString &aURI)
      71             : {
      72             :   int32_t id;
      73          64 :   nsresult rv = nsContentUtils::NameSpaceManager()->RegisterNameSpace(aURI,
      74          64 :                                                                       id);
      75             : 
      76          64 :   NS_ENSURE_SUCCESS(rv, rv);
      77             : 
      78          64 :   return AddPrefix(aPrefix, id);
      79             : }
      80             : 
      81             : int32_t
      82        6431 : nsXMLNameSpaceMap::FindNameSpaceID(nsIAtom *aPrefix) const
      83             : {
      84        6431 :   size_t index = mNameSpaces.IndexOf(aPrefix);
      85        6431 :   if (index != mNameSpaces.NoIndex) {
      86        6431 :     return mNameSpaces[index].nameSpaceID;
      87             :   }
      88             : 
      89             :   // The default mapping for no prefix is no namespace.  If a non-null prefix
      90             :   // was specified and we didn't find it, we return an error.
      91             : 
      92           0 :   return aPrefix ? kNameSpaceID_Unknown : kNameSpaceID_None;
      93             : }
      94             : 
      95             : nsIAtom*
      96           0 : nsXMLNameSpaceMap::FindPrefix(int32_t aNameSpaceID) const
      97             : {
      98           0 :   size_t index = mNameSpaces.IndexOf(aNameSpaceID);
      99           0 :   if (index != mNameSpaces.NoIndex) {
     100           0 :     return mNameSpaces[index].prefix;
     101             :   }
     102             : 
     103           0 :   return nullptr;
     104             : }
     105             : 
     106             : void
     107           0 : nsXMLNameSpaceMap::Clear()
     108             : {
     109           0 :   mNameSpaces.Clear();
     110           9 : }

Generated by: LCOV version 1.13