Commit 59b28826 authored by Daniel Holbert's avatar Daniel Holbert Committed by Pier Angelo Vendrame
Browse files

Bug 1742738 part 1: Tighten up tearoff-table removal for DOMSVGPointList and...

Bug 1742738 part 1: Tighten up tearoff-table removal for DOMSVGPointList and DOMSVGStringList. r=firefox-svg-reviewers,longsonr

Differential Revision: https://phabricator.services.mozilla.com/D246062
parent 2e8d7412
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -88,9 +88,12 @@ void DOMSVGPointList::RemoveFromTearoffTable() {
  //
  // There are now no longer any references to us held by script or list items.
  // Note we must use GetAnimValKey/GetBaseValKey here, NOT InternalList()!
  if (mIsInTearoffTable) {
    void* key = mIsAnimValList ? InternalAList().GetAnimValKey()
                               : InternalAList().GetBaseValKey();
    SVGPointListTearoffTable().RemoveTearoff(key);
    mIsInTearoffTable = false;
  }
}

DOMSVGPointList::~DOMSVGPointList() { RemoveFromTearoffTable(); }
+6 −0
Original line number Diff line number Diff line
@@ -250,6 +250,12 @@ class DOMSVGPointList final : public nsISupports, public nsWrapperCache {
  RefPtr<dom::SVGElement> mElement;

  bool mIsAnimValList;

  // Tracks whether we're in the tearoff table. Initialized to true, since all
  // new instances are added to the table right after construction. Updated to
  // false when we're removed from the table (at which point we're being
  // destructed or soon-to-be destructed).
  bool mIsInTearoffTable = true;
};

NS_DEFINE_STATIC_IID_ACCESSOR(DOMSVGPointList, MOZILLA_DOMSVGPOINTLIST_IID)
+4 −1
Original line number Diff line number Diff line
@@ -91,7 +91,10 @@ already_AddRefed<DOMSVGStringList> DOMSVGStringList::GetDOMWrapper(

void DOMSVGStringList::RemoveFromTearoffTable() {
  // Script no longer has any references to us.
  if (mIsInTearoffTable) {
    SVGStringListTearoffTable().RemoveTearoff(&InternalList());
    mIsInTearoffTable = false;
  }
}

DOMSVGStringList::~DOMSVGStringList() { RemoveFromTearoffTable(); }
+6 −0
Original line number Diff line number Diff line
@@ -108,6 +108,12 @@ class DOMSVGStringList final : public nsISupports, public nsWrapperCache {
  uint8_t mAttrEnum;

  bool mIsConditionalProcessingAttribute;

  // Tracks whether we're in the tearoff table. Initialized to true, since all
  // new instances are added to the table right after construction. Updated to
  // false when we're removed from the table (at which point we're being
  // destructed or soon-to-be destructed).
  bool mIsInTearoffTable = true;
};

}  // namespace dom