/* -*- 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_Cache_h #define mozilla_dom_cache_Cache_h #include "mozilla/dom/cache/Types.h" #include "mozilla/dom/cache/TypeUtils.h" #include "nsCOMPtr.h" #include "nsISupportsImpl.h" #include "nsString.h" #include "nsWrapperCache.h" class nsIGlobalObject; namespace mozilla { class ErrorResult; namespace dom { class OwningRequestOrUSVString; class Promise; struct CacheQueryOptions; class RequestOrUSVString; class Response; template class Optional; template class Sequence; enum class CallerType : uint32_t; namespace cache { class AutoChildOpArgs; class CacheChild; class Cache final : public nsISupports, public nsWrapperCache, public TypeUtils { public: Cache(nsIGlobalObject* aGlobal, CacheChild* aActor, Namespace aNamespace); // webidl interface methods already_AddRefed Match(JSContext* aCx, const RequestOrUSVString& aRequest, const CacheQueryOptions& aOptions, ErrorResult& aRv); already_AddRefed MatchAll( JSContext* aCx, const Optional& aRequest, const CacheQueryOptions& aOptions, ErrorResult& aRv); already_AddRefed Add(JSContext* aContext, const RequestOrUSVString& aRequest, CallerType aCallerType, ErrorResult& aRv); already_AddRefed AddAll( JSContext* aContext, const Sequence& aRequests, CallerType aCallerType, ErrorResult& aRv); already_AddRefed Put(JSContext* aCx, const RequestOrUSVString& aRequest, Response& aResponse, ErrorResult& aRv); already_AddRefed Delete(JSContext* aCx, const RequestOrUSVString& aRequest, const CacheQueryOptions& aOptions, ErrorResult& aRv); already_AddRefed Keys(JSContext* aCx, const Optional& aRequest, const CacheQueryOptions& aParams, ErrorResult& aRv); // binding methods nsISupports* GetParentObject() const; virtual JSObject* WrapObject(JSContext* aContext, JS::Handle aGivenProto) override; // Called when CacheChild actor is being destroyed void DestroyInternal(CacheChild* aActor); // TypeUtils methods virtual nsIGlobalObject* GetGlobalObject() const override; #ifdef DEBUG virtual void AssertOwningThread() const override; #endif virtual mozilla::ipc::PBackgroundChild* GetIPCManager() override; private: class FetchHandler; ~Cache(); // Called when we're destroyed or CCed. void DisconnectFromActor(); already_AddRefed ExecuteOp(AutoChildOpArgs& aOpArgs, ErrorResult& aRv); already_AddRefed AddAll(const GlobalObject& aGlobal, nsTArray>&& aRequestList, CallerType aCallerType, ErrorResult& aRv); already_AddRefed PutAll( JSContext* aCx, const nsTArray>& aRequestList, const nsTArray>& aResponseList, ErrorResult& aRv); OpenMode GetOpenMode() const; nsCOMPtr mGlobal; CacheChild* mActor; const Namespace mNamespace; public: NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_WRAPPERCACHE_CLASS(Cache) }; } // namespace cache } // namespace dom } // namespace mozilla #endif // mozilla_dom_Cache_h