diff --git a/xpcom/glue/nsRefPtrHashtable.h b/xpcom/glue/nsRefPtrHashtable.h index 7029a21171d..e13f7ad41eb 100644 --- a/xpcom/glue/nsRefPtrHashtable.h +++ b/xpcom/glue/nsRefPtrHashtable.h @@ -50,6 +50,13 @@ public: */ RefPtr* GetWeak(KeyType aKey, bool* aFound = nullptr) const; + // Overload Put, rather than overriding it. + using base_type::Put; + + void Put(KeyType aKey, already_AddRefed aData); + + bool Put(KeyType aKey, already_AddRefed aData, const mozilla::fallible_t&) MOZ_WARN_UNUSED_RESULT; + // Overload Remove, rather than overriding it. using base_type::Remove; @@ -136,6 +143,32 @@ nsRefPtrHashtable::GetWeak return nullptr; } +template +void +nsRefPtrHashtable::Put(KeyType aKey, already_AddRefed aData) +{ + if (!Put(aKey, mozilla::Move(aData), mozilla::fallible_t())) { + NS_ABORT_OOM(this->mTable.entrySize * this->mTable.entryCount); + } +} + +template +bool +nsRefPtrHashtable::Put(KeyType aKey, + already_AddRefed aData, + const mozilla::fallible_t&) +{ + typename base_type::EntryType* ent = this->PutEntry(aKey); + + if (!ent) { + return false; + } + + ent->mData = aData; + + return true; +} + template bool nsRefPtrHashtable::Remove(KeyType aKey,