LCOV - code coverage report
Current view: top level - dom/svg - nsSVGString.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 10 63 15.9 %
Date: 2017-07-14 16:53:18 Functions: 2 19 10.5 %
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 "nsSVGString.h"
       8             : 
       9             : #include "mozilla/Move.h"
      10             : #include "nsSVGAttrTearoffTable.h"
      11             : #include "nsSMILValue.h"
      12             : #include "SMILStringType.h"
      13             : 
      14             : using namespace mozilla;
      15             : using namespace mozilla::dom;
      16             : 
      17           0 : NS_SVG_VAL_IMPL_CYCLE_COLLECTION_WRAPPERCACHED(nsSVGString::DOMAnimatedString, mSVGElement)
      18             : 
      19           0 : NS_IMPL_CYCLE_COLLECTING_ADDREF(nsSVGString::DOMAnimatedString)
      20           0 : NS_IMPL_CYCLE_COLLECTING_RELEASE(nsSVGString::DOMAnimatedString)
      21             : 
      22           0 : NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsSVGString::DOMAnimatedString)
      23           0 :   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
      24           0 :   NS_INTERFACE_MAP_ENTRY(nsISupports)
      25           0 : NS_INTERFACE_MAP_END
      26             : 
      27             : static inline
      28             : nsSVGAttrTearoffTable<nsSVGString, nsSVGString::DOMAnimatedString>&
      29           0 : SVGAnimatedStringTearoffTable()
      30             : {
      31             :   static nsSVGAttrTearoffTable<nsSVGString, nsSVGString::DOMAnimatedString>
      32           0 :     sSVGAnimatedStringTearoffTable;
      33           0 :   return sSVGAnimatedStringTearoffTable;
      34             : }
      35             : 
      36             : /* Implementation */
      37             : 
      38             : void
      39          29 : nsSVGString::SetBaseValue(const nsAString& aValue,
      40             :                           nsSVGElement *aSVGElement,
      41             :                           bool aDoSetAttr)
      42             : {
      43          29 :   NS_ASSERTION(aSVGElement, "Null element passed to SetBaseValue");
      44             : 
      45          29 :   mIsBaseSet = true;
      46          29 :   if (aDoSetAttr) {
      47           0 :     aSVGElement->SetStringBaseValue(mAttrEnum, aValue);
      48             :   }
      49          29 :   if (mAnimVal) {
      50           0 :     aSVGElement->AnimationNeedsResample();
      51             :   }
      52             : 
      53          29 :   aSVGElement->DidChangeString(mAttrEnum);
      54          29 : }
      55             : 
      56             : void
      57          23 : nsSVGString::GetAnimValue(nsAString& aResult, const nsSVGElement *aSVGElement) const
      58             : {
      59          23 :   if (mAnimVal) {
      60           0 :     aResult = *mAnimVal;
      61           0 :     return;
      62             :   }
      63             : 
      64          23 :   aSVGElement->GetStringBaseValue(mAttrEnum, aResult);
      65             : }
      66             : 
      67             : void
      68           0 : nsSVGString::SetAnimValue(const nsAString& aValue, nsSVGElement *aSVGElement)
      69             : {
      70           0 :   if (aSVGElement->IsStringAnimatable(mAttrEnum)) {
      71           0 :     if (mAnimVal && mAnimVal->Equals(aValue)) {
      72           0 :       return;
      73             :     }
      74           0 :     if (!mAnimVal) {
      75           0 :       mAnimVal = new nsString();
      76             :     }
      77           0 :     *mAnimVal = aValue;
      78           0 :     aSVGElement->DidAnimateString(mAttrEnum);
      79             :   }
      80             : }
      81             : 
      82             : already_AddRefed<SVGAnimatedString>
      83           0 : nsSVGString::ToDOMAnimatedString(nsSVGElement* aSVGElement)
      84             : {
      85             :   RefPtr<DOMAnimatedString> domAnimatedString =
      86           0 :     SVGAnimatedStringTearoffTable().GetTearoff(this);
      87           0 :   if (!domAnimatedString) {
      88           0 :     domAnimatedString = new DOMAnimatedString(this, aSVGElement);
      89           0 :     SVGAnimatedStringTearoffTable().AddTearoff(this, domAnimatedString);
      90             :   }
      91             : 
      92           0 :   return domAnimatedString.forget();
      93             : }
      94             : 
      95           0 : nsSVGString::DOMAnimatedString::~DOMAnimatedString()
      96             : {
      97           0 :   SVGAnimatedStringTearoffTable().RemoveTearoff(mVal);
      98           0 : }
      99             : 
     100             : UniquePtr<nsISMILAttr>
     101           0 : nsSVGString::ToSMILAttr(nsSVGElement *aSVGElement)
     102             : {
     103           0 :   return MakeUnique<SMILString>(this, aSVGElement);
     104             : }
     105             : 
     106             : nsresult
     107           0 : nsSVGString::SMILString::ValueFromString(const nsAString& aStr,
     108             :                                          const dom::SVGAnimationElement* /*aSrcElement*/,
     109             :                                          nsSMILValue& aValue,
     110             :                                          bool& aPreventCachingOfSandwich) const
     111             : {
     112           0 :   nsSMILValue val(SMILStringType::Singleton());
     113             : 
     114           0 :   *static_cast<nsAString*>(val.mU.mPtr) = aStr;
     115           0 :   aValue = Move(val);
     116           0 :   aPreventCachingOfSandwich = false;
     117           0 :   return NS_OK;
     118             : }
     119             : 
     120             : nsSMILValue
     121           0 : nsSVGString::SMILString::GetBaseValue() const
     122             : {
     123           0 :   nsSMILValue val(SMILStringType::Singleton());
     124           0 :   mSVGElement->GetStringBaseValue(mVal->mAttrEnum, *static_cast<nsAString*>(val.mU.mPtr));
     125           0 :   return val;
     126             : }
     127             : 
     128             : void
     129           0 : nsSVGString::SMILString::ClearAnimValue()
     130             : {
     131           0 :   if (mVal->mAnimVal) {
     132           0 :     mVal->mAnimVal = nullptr;
     133           0 :     mSVGElement->DidAnimateString(mVal->mAttrEnum);
     134             :   }
     135           0 : }
     136             : 
     137             : nsresult
     138           0 : nsSVGString::SMILString::SetAnimValue(const nsSMILValue& aValue)
     139             : {
     140           0 :   NS_ASSERTION(aValue.mType == SMILStringType::Singleton(),
     141             :                "Unexpected type to assign animated value");
     142           0 :   if (aValue.mType == SMILStringType::Singleton()) {
     143           0 :     mVal->SetAnimValue(*static_cast<nsAString*>(aValue.mU.mPtr), mSVGElement);
     144             :   }
     145           0 :   return NS_OK;
     146             : }

Generated by: LCOV version 1.13