forked from mirrors/gecko-dev
When calling a Recv/Alloc/Dealloc method on most types, cast `this` to the derived class. There is a heuristic to figure out what the correct derived type is. There is a blacklist of types which we can't do direct calls on for the moment, as well as an override for types that do work with direct calls but which don't match the heuristic. Differential Revision: https://phabricator.services.mozilla.com/D16492 --HG-- extra : moz-landing-system : lando
76 lines
2.2 KiB
C++
76 lines
2.2 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_CacheOpChild_h
|
|
#define mozilla_dom_cache_CacheOpChild_h
|
|
|
|
#include "mozilla/dom/cache/ActorChild.h"
|
|
#include "mozilla/dom/cache/PCacheOpChild.h"
|
|
#include "mozilla/dom/cache/TypeUtils.h"
|
|
#include "mozilla/RefPtr.h"
|
|
|
|
class nsIGlobalObject;
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
class Promise;
|
|
|
|
namespace cache {
|
|
|
|
class CacheOpChild final : public PCacheOpChild,
|
|
public ActorChild,
|
|
public TypeUtils {
|
|
friend class CacheChild;
|
|
friend class CacheStorageChild;
|
|
friend class PCacheOpChild;
|
|
|
|
private:
|
|
// This class must be constructed by CacheChild or CacheStorageChild using
|
|
// their ExecuteOp() factory method.
|
|
CacheOpChild(CacheWorkerHolder* aWorkerHolder, nsIGlobalObject* aGlobal,
|
|
nsISupports* aParent, Promise* aPromise);
|
|
~CacheOpChild();
|
|
|
|
// PCacheOpChild methods
|
|
virtual void ActorDestroy(ActorDestroyReason aReason) override;
|
|
|
|
virtual mozilla::ipc::IPCResult Recv__delete__(
|
|
const ErrorResult& aRv, const CacheOpResult& aResult) override;
|
|
|
|
// ActorChild methods
|
|
virtual void StartDestroy() override;
|
|
|
|
// TypeUtils methods
|
|
virtual nsIGlobalObject* GetGlobalObject() const override;
|
|
|
|
#ifdef DEBUG
|
|
virtual void AssertOwningThread() const override;
|
|
#endif
|
|
|
|
virtual mozilla::ipc::PBackgroundChild* GetIPCManager() override;
|
|
|
|
// Utility methods
|
|
void HandleResponse(const CacheResponseOrVoid& aResponseOrVoid);
|
|
|
|
void HandleResponseList(const nsTArray<CacheResponse>& aResponseList);
|
|
|
|
void HandleRequestList(const nsTArray<CacheRequest>& aRequestList);
|
|
|
|
nsCOMPtr<nsIGlobalObject> mGlobal;
|
|
// Hold the parent Cache or CacheStorage object alive until this async
|
|
// operation completes.
|
|
nsCOMPtr<nsISupports> mParent;
|
|
RefPtr<Promise> mPromise;
|
|
|
|
NS_DECL_OWNINGTHREAD
|
|
};
|
|
|
|
} // namespace cache
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_cache_CacheOpChild_h
|