123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* 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_idbfactory_h__
- #define mozilla_dom_idbfactory_h__
- #include "mozilla/Attributes.h"
- #include "mozilla/dom/StorageTypeBinding.h"
- #include "nsAutoPtr.h"
- #include "nsCOMPtr.h"
- #include "nsCycleCollectionParticipant.h"
- #include "nsISupports.h"
- #include "nsString.h"
- #include "nsTArray.h"
- #include "nsWrapperCache.h"
- class nsIPrincipal;
- class nsPIDOMWindowInner;
- struct PRThread;
- namespace mozilla {
- class ErrorResult;
- namespace ipc {
- class PBackgroundChild;
- class PrincipalInfo;
- } // namespace ipc
- namespace dom {
- struct IDBOpenDBOptions;
- class IDBOpenDBRequest;
- template <typename> class Optional;
- class TabChild;
- namespace indexedDB {
- class BackgroundFactoryChild;
- class FactoryRequestParams;
- class LoggingInfo;
- }
- class IDBFactory final
- : public nsISupports
- , public nsWrapperCache
- {
- typedef mozilla::dom::StorageType StorageType;
- typedef mozilla::ipc::PBackgroundChild PBackgroundChild;
- typedef mozilla::ipc::PrincipalInfo PrincipalInfo;
- class BackgroundCreateCallback;
- struct PendingRequestInfo;
- nsAutoPtr<PrincipalInfo> mPrincipalInfo;
- // If this factory lives on a window then mWindow must be non-null. Otherwise
- // mOwningObject must be non-null.
- nsCOMPtr<nsPIDOMWindowInner> mWindow;
- JS::Heap<JSObject*> mOwningObject;
- // This will only be set if the factory belongs to a window in a child
- // process.
- RefPtr<TabChild> mTabChild;
- nsTArray<nsAutoPtr<PendingRequestInfo>> mPendingRequests;
- indexedDB::BackgroundFactoryChild* mBackgroundActor;
- #ifdef DEBUG
- PRThread* mOwningThread;
- #endif
- uint64_t mInnerWindowID;
- bool mBackgroundActorFailed;
- bool mPrivateBrowsingMode;
- public:
- static nsresult
- CreateForWindow(nsPIDOMWindowInner* aWindow,
- IDBFactory** aFactory);
- static nsresult
- CreateForMainThreadJS(JSContext* aCx,
- JS::Handle<JSObject*> aOwningObject,
- IDBFactory** aFactory);
- static nsresult
- CreateForWorker(JSContext* aCx,
- JS::Handle<JSObject*> aOwningObject,
- const PrincipalInfo& aPrincipalInfo,
- uint64_t aInnerWindowID,
- IDBFactory** aFactory);
- static bool
- AllowedForWindow(nsPIDOMWindowInner* aWindow);
- static bool
- AllowedForPrincipal(nsIPrincipal* aPrincipal,
- bool* aIsSystemPrincipal = nullptr);
- #ifdef DEBUG
- void
- AssertIsOnOwningThread() const;
- PRThread*
- OwningThread() const;
- #else
- void
- AssertIsOnOwningThread() const
- { }
- #endif
- void
- ClearBackgroundActor()
- {
- AssertIsOnOwningThread();
- mBackgroundActor = nullptr;
- }
- void
- IncrementParentLoggingRequestSerialNumber();
- nsPIDOMWindowInner*
- GetParentObject() const
- {
- return mWindow;
- }
- TabChild*
- GetTabChild() const
- {
- return mTabChild;
- }
- PrincipalInfo*
- GetPrincipalInfo() const
- {
- AssertIsOnOwningThread();
- return mPrincipalInfo;
- }
- uint64_t
- InnerWindowID() const
- {
- AssertIsOnOwningThread();
- return mInnerWindowID;
- }
- bool
- IsChrome() const;
- already_AddRefed<IDBOpenDBRequest>
- Open(JSContext* aCx,
- const nsAString& aName,
- uint64_t aVersion,
- ErrorResult& aRv);
- already_AddRefed<IDBOpenDBRequest>
- Open(JSContext* aCx,
- const nsAString& aName,
- const IDBOpenDBOptions& aOptions,
- ErrorResult& aRv);
- already_AddRefed<IDBOpenDBRequest>
- DeleteDatabase(JSContext* aCx,
- const nsAString& aName,
- const IDBOpenDBOptions& aOptions,
- ErrorResult& aRv);
- int16_t
- Cmp(JSContext* aCx,
- JS::Handle<JS::Value> aFirst,
- JS::Handle<JS::Value> aSecond,
- ErrorResult& aRv);
- already_AddRefed<IDBOpenDBRequest>
- OpenForPrincipal(JSContext* aCx,
- nsIPrincipal* aPrincipal,
- const nsAString& aName,
- uint64_t aVersion,
- ErrorResult& aRv);
- already_AddRefed<IDBOpenDBRequest>
- OpenForPrincipal(JSContext* aCx,
- nsIPrincipal* aPrincipal,
- const nsAString& aName,
- const IDBOpenDBOptions& aOptions,
- ErrorResult& aRv);
- already_AddRefed<IDBOpenDBRequest>
- DeleteForPrincipal(JSContext* aCx,
- nsIPrincipal* aPrincipal,
- const nsAString& aName,
- const IDBOpenDBOptions& aOptions,
- ErrorResult& aRv);
- NS_DECL_CYCLE_COLLECTING_ISUPPORTS
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IDBFactory)
- // nsWrapperCache
- virtual JSObject*
- WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
- private:
- IDBFactory();
- ~IDBFactory();
- static nsresult
- CreateForMainThreadJSInternal(JSContext* aCx,
- JS::Handle<JSObject*> aOwningObject,
- nsAutoPtr<PrincipalInfo>& aPrincipalInfo,
- IDBFactory** aFactory);
- static nsresult
- CreateForJSInternal(JSContext* aCx,
- JS::Handle<JSObject*> aOwningObject,
- nsAutoPtr<PrincipalInfo>& aPrincipalInfo,
- uint64_t aInnerWindowID,
- IDBFactory** aFactory);
- static nsresult
- AllowedForWindowInternal(nsPIDOMWindowInner* aWindow,
- nsIPrincipal** aPrincipal);
- already_AddRefed<IDBOpenDBRequest>
- OpenInternal(JSContext* aCx,
- nsIPrincipal* aPrincipal,
- const nsAString& aName,
- const Optional<uint64_t>& aVersion,
- const Optional<StorageType>& aStorageType,
- bool aDeleting,
- ErrorResult& aRv);
- nsresult
- BackgroundActorCreated(PBackgroundChild* aBackgroundActor,
- const indexedDB::LoggingInfo& aLoggingInfo);
- void
- BackgroundActorFailed();
- nsresult
- InitiateRequest(IDBOpenDBRequest* aRequest,
- const indexedDB::FactoryRequestParams& aParams);
- };
- } // namespace dom
- } // namespace mozilla
- #endif // mozilla_dom_idbfactory_h__
|