Bug 1682536 - Use references/NotNull in CacheWorkerRef. r=dom-workers-and-storage-reviewers,asuth

Differential Revision: https://phabricator.services.mozilla.com/D99774
This commit is contained in:
Simon Giesecke 2020-12-17 16:14:52 +00:00
Родитель 2cc4d91a28
Коммит 88142da40d
3 изменённых файлов: 15 добавлений и 18 удалений

4
dom/cache/ActorChild.cpp поставляемый
Просмотреть файл

@ -26,14 +26,14 @@ void ActorChild::SetWorkerRef(SafeRefPtr<CacheWorkerRef> aWorkerRef) {
mWorkerRef = std::move(aWorkerRef); mWorkerRef = std::move(aWorkerRef);
if (mWorkerRef) { if (mWorkerRef) {
mWorkerRef->AddActor(this); mWorkerRef->AddActor(*this);
} }
} }
void ActorChild::RemoveWorkerRef() { void ActorChild::RemoveWorkerRef() {
MOZ_ASSERT_IF(!NS_IsMainThread(), mWorkerRef); MOZ_ASSERT_IF(!NS_IsMainThread(), mWorkerRef);
if (mWorkerRef) { if (mWorkerRef) {
mWorkerRef->RemoveActor(this); mWorkerRef->RemoveActor(*this);
mWorkerRef = nullptr; mWorkerRef = nullptr;
} }
} }

23
dom/cache/CacheWorkerRef.cpp поставляемый
Просмотреть файл

@ -92,33 +92,31 @@ SafeRefPtr<CacheWorkerRef> CacheWorkerRef::PreferBehavior(
return static_cast<bool>(replace) ? std::move(replace) : std::move(orig); return static_cast<bool>(replace) ? std::move(replace) : std::move(orig);
} }
void CacheWorkerRef::AddActor(ActorChild* aActor) { void CacheWorkerRef::AddActor(ActorChild& aActor) {
NS_ASSERT_OWNINGTHREAD(CacheWorkerRef); NS_ASSERT_OWNINGTHREAD(CacheWorkerRef);
MOZ_DIAGNOSTIC_ASSERT(aActor); MOZ_ASSERT(!mActorList.Contains(&aActor));
MOZ_ASSERT(!mActorList.Contains(aActor));
mActorList.AppendElement(aActor); mActorList.AppendElement(WrapNotNullUnchecked(&aActor));
// Allow an actor to be added after we've entered the Notifying case. We // Allow an actor to be added after we've entered the Notifying case. We
// can't stop the actor creation from racing with out destruction of the // can't stop the actor creation from racing with out destruction of the
// other actors and we need to wait for this extra one to close as well. // other actors and we need to wait for this extra one to close as well.
// Signal it should destroy itself right away. // Signal it should destroy itself right away.
if (mNotified) { if (mNotified) {
aActor->StartDestroy(); aActor.StartDestroy();
} }
} }
void CacheWorkerRef::RemoveActor(ActorChild* aActor) { void CacheWorkerRef::RemoveActor(ActorChild& aActor) {
NS_ASSERT_OWNINGTHREAD(CacheWorkerRef); NS_ASSERT_OWNINGTHREAD(CacheWorkerRef);
MOZ_DIAGNOSTIC_ASSERT(aActor);
#if defined(RELEASE_OR_BETA) #if defined(RELEASE_OR_BETA)
mActorList.RemoveElement(aActor); mActorList.RemoveElement(&aActor);
#else #else
MOZ_DIAGNOSTIC_ASSERT(mActorList.RemoveElement(aActor)); MOZ_DIAGNOSTIC_ASSERT(mActorList.RemoveElement(&aActor));
#endif #endif
MOZ_ASSERT(!mActorList.Contains(aActor)); MOZ_ASSERT(!mActorList.Contains(&aActor));
if (mActorList.IsEmpty()) { if (mActorList.IsEmpty()) {
mStrongWorkerRef = nullptr; mStrongWorkerRef = nullptr;
@ -135,9 +133,8 @@ void CacheWorkerRef::Notify() {
// Start the asynchronous destruction of our actors. These will call back // Start the asynchronous destruction of our actors. These will call back
// into RemoveActor() once the actor is destroyed. // into RemoveActor() once the actor is destroyed.
for (uint32_t i = 0; i < mActorList.Length(); ++i) { for (const auto& actor : mActorList) {
MOZ_DIAGNOSTIC_ASSERT(mActorList[i]); actor->StartDestroy();
mActorList[i]->StartDestroy();
} }
} }

6
dom/cache/CacheWorkerRef.h поставляемый
Просмотреть файл

@ -35,8 +35,8 @@ class CacheWorkerRef final : public SafeRefCounted<CacheWorkerRef> {
static SafeRefPtr<CacheWorkerRef> PreferBehavior( static SafeRefPtr<CacheWorkerRef> PreferBehavior(
SafeRefPtr<CacheWorkerRef> aCurrentRef, Behavior aBehavior); SafeRefPtr<CacheWorkerRef> aCurrentRef, Behavior aBehavior);
void AddActor(ActorChild* aActor); void AddActor(ActorChild& aActor);
void RemoveActor(ActorChild* aActor); void RemoveActor(ActorChild& aActor);
bool Notified() const; bool Notified() const;
@ -45,7 +45,7 @@ class CacheWorkerRef final : public SafeRefCounted<CacheWorkerRef> {
void Notify(); void Notify();
nsTArray<ActorChild*> mActorList; nsTArray<NotNull<ActorChild*>> mActorList;
Behavior mBehavior; Behavior mBehavior;
bool mNotified; bool mNotified;