mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 17:25:36 +00:00
984f0333ea
For cases where the class has direct calls (that is, we cast `this` to the subclass before making the call) no longer declare Alloc/Dealloc methods on the base class at all. This should ensure that slots for them are not generated in vtables, and also allow the derived class to choose the method signature (e.g. whether it wants to take something by reference or by value). Differential Revision: https://phabricator.services.mozilla.com/D18131 --HG-- extra : moz-landing-system : lando
78 lines
2.3 KiB
C++
78 lines
2.3 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_dom_cache_CacheStorageChild_h
|
|
#define mozilla_dom_cache_CacheStorageChild_h
|
|
|
|
#include "mozilla/dom/cache/ActorChild.h"
|
|
#include "mozilla/dom/cache/Types.h"
|
|
#include "mozilla/dom/cache/PCacheStorageChild.h"
|
|
|
|
class nsIGlobalObject;
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class Promise;
|
|
|
|
namespace cache {
|
|
|
|
class CacheOpArgs;
|
|
class CacheStorage;
|
|
class CacheWorkerHolder;
|
|
class PCacheChild;
|
|
|
|
class CacheStorageChild final : public PCacheStorageChild, public ActorChild {
|
|
friend class PCacheStorageChild;
|
|
|
|
public:
|
|
CacheStorageChild(CacheStorage* aListener, CacheWorkerHolder* aWorkerHolder);
|
|
~CacheStorageChild();
|
|
|
|
// Must be called by the associated CacheStorage listener in its
|
|
// DestroyInternal() method. Also, CacheStorage must call
|
|
// SendDestroyFromListener() on the actor in its destructor to trigger
|
|
// ActorDestroy() if it has not been called yet.
|
|
void ClearListener();
|
|
|
|
void ExecuteOp(nsIGlobalObject* aGlobal, Promise* aPromise,
|
|
nsISupports* aParent, const CacheOpArgs& aArgs);
|
|
|
|
// Our parent Listener object has gone out of scope and is being destroyed.
|
|
void StartDestroyFromListener();
|
|
|
|
private:
|
|
// ActorChild methods
|
|
|
|
// CacheWorkerHolder is trying to destroy due to worker shutdown.
|
|
virtual void StartDestroy() override;
|
|
|
|
// PCacheStorageChild methods
|
|
virtual void ActorDestroy(ActorDestroyReason aReason) override;
|
|
|
|
PCacheOpChild* AllocPCacheOpChild(const CacheOpArgs& aOpArgs);
|
|
|
|
bool DeallocPCacheOpChild(PCacheOpChild* aActor);
|
|
|
|
// utility methods
|
|
void NoteDeletedActor();
|
|
|
|
// Use a weak ref so actor does not hold DOM object alive past content use.
|
|
// The CacheStorage object must call ClearListener() to null this before its
|
|
// destroyed.
|
|
CacheStorage* MOZ_NON_OWNING_REF mListener;
|
|
uint32_t mNumChildActors;
|
|
bool mDelayedDestroy;
|
|
|
|
NS_DECL_OWNINGTHREAD
|
|
};
|
|
|
|
} // namespace cache
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_cache_CacheStorageChild_h
|