123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- /* -*- 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_idbrequest_h__
- #define mozilla_dom_idbrequest_h__
- #include "js/RootingAPI.h"
- #include "mozilla/Attributes.h"
- #include "mozilla/EventForwards.h"
- #include "mozilla/dom/IDBRequestBinding.h"
- #include "mozilla/dom/IDBWrapperCache.h"
- #include "nsAutoPtr.h"
- #include "nsCycleCollectionParticipant.h"
- #define PRIVATE_IDBREQUEST_IID \
- {0xe68901e5, 0x1d50, 0x4ee9, {0xaf, 0x49, 0x90, 0x99, 0x4a, 0xff, 0xc8, 0x39}}
- class nsPIDOMWindowInner;
- struct PRThread;
- namespace mozilla {
- class ErrorResult;
- namespace dom {
- class DOMError;
- class IDBCursor;
- class IDBDatabase;
- class IDBFactory;
- class IDBIndex;
- class IDBObjectStore;
- class IDBTransaction;
- template <typename> struct Nullable;
- class OwningIDBObjectStoreOrIDBIndexOrIDBCursor;
- class IDBRequest
- : public IDBWrapperCache
- {
- protected:
- // mSourceAsObjectStore and mSourceAsIndex are exclusive and one must always
- // be set. mSourceAsCursor is sometimes set also.
- RefPtr<IDBObjectStore> mSourceAsObjectStore;
- RefPtr<IDBIndex> mSourceAsIndex;
- RefPtr<IDBCursor> mSourceAsCursor;
- RefPtr<IDBTransaction> mTransaction;
- #ifdef DEBUG
- PRThread* mOwningThread;
- #endif
- JS::Heap<JS::Value> mResultVal;
- RefPtr<DOMError> mError;
- nsString mFilename;
- uint64_t mLoggingSerialNumber;
- nsresult mErrorCode;
- uint32_t mLineNo;
- uint32_t mColumn;
- bool mHaveResultOrErrorCode;
- public:
- class ResultCallback;
- static already_AddRefed<IDBRequest>
- Create(JSContext* aCx, IDBDatabase* aDatabase, IDBTransaction* aTransaction);
- static already_AddRefed<IDBRequest>
- Create(JSContext* aCx,
- IDBObjectStore* aSource,
- IDBDatabase* aDatabase,
- IDBTransaction* aTransaction);
- static already_AddRefed<IDBRequest>
- Create(JSContext* aCx,
- IDBIndex* aSource,
- IDBDatabase* aDatabase,
- IDBTransaction* aTransaction);
- static void
- CaptureCaller(JSContext* aCx, nsAString& aFilename, uint32_t* aLineNo,
- uint32_t* aColumn);
- static uint64_t
- NextSerialNumber();
- // nsIDOMEventTarget
- virtual nsresult
- GetEventTargetParent(EventChainPreVisitor& aVisitor) override;
- void
- GetSource(Nullable<OwningIDBObjectStoreOrIDBIndexOrIDBCursor>& aSource) const;
- void
- Reset();
- void
- DispatchNonTransactionError(nsresult aErrorCode);
- void
- SetResultCallback(ResultCallback* aCallback);
- void
- SetError(nsresult aRv);
- nsresult
- GetErrorCode() const
- #ifdef DEBUG
- ;
- #else
- {
- return mErrorCode;
- }
- #endif
- DOMError*
- GetErrorAfterResult() const
- #ifdef DEBUG
- ;
- #else
- {
- return mError;
- }
- #endif
- DOMError*
- GetError(ErrorResult& aRv);
- void
- GetCallerLocation(nsAString& aFilename, uint32_t* aLineNo,
- uint32_t* aColumn) const;
- bool
- IsPending() const
- {
- return !mHaveResultOrErrorCode;
- }
- uint64_t
- LoggingSerialNumber() const
- {
- AssertIsOnOwningThread();
- return mLoggingSerialNumber;
- }
- void
- SetLoggingSerialNumber(uint64_t aLoggingSerialNumber);
- nsPIDOMWindowInner*
- GetParentObject() const
- {
- return GetOwner();
- }
- void
- GetResult(JS::MutableHandle<JS::Value> aResult, ErrorResult& aRv) const;
- void
- GetResult(JSContext* aCx, JS::MutableHandle<JS::Value> aResult,
- ErrorResult& aRv) const
- {
- GetResult(aResult, aRv);
- }
- IDBTransaction*
- GetTransaction() const
- {
- AssertIsOnOwningThread();
- return mTransaction;
- }
- IDBRequestReadyState
- ReadyState() const;
- void
- SetSource(IDBCursor* aSource);
- IMPL_EVENT_HANDLER(success);
- IMPL_EVENT_HANDLER(error);
- void
- AssertIsOnOwningThread() const
- #ifdef DEBUG
- ;
- #else
- { }
- #endif
- NS_DECL_ISUPPORTS_INHERITED
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(IDBRequest,
- IDBWrapperCache)
- // nsWrapperCache
- virtual JSObject*
- WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
- protected:
- explicit IDBRequest(IDBDatabase* aDatabase);
- explicit IDBRequest(nsPIDOMWindowInner* aOwner);
- ~IDBRequest();
- void
- InitMembers();
- void
- ConstructResult();
- };
- class NS_NO_VTABLE IDBRequest::ResultCallback
- {
- public:
- virtual nsresult
- GetResult(JSContext* aCx, JS::MutableHandle<JS::Value> aResult) = 0;
- protected:
- ResultCallback()
- { }
- };
- class IDBOpenDBRequest final
- : public IDBRequest
- {
- class WorkerHolder;
- // Only touched on the owning thread.
- RefPtr<IDBFactory> mFactory;
- nsAutoPtr<WorkerHolder> mWorkerHolder;
- const bool mFileHandleDisabled;
- public:
- static already_AddRefed<IDBOpenDBRequest>
- CreateForWindow(JSContext* aCx,
- IDBFactory* aFactory,
- nsPIDOMWindowInner* aOwner,
- JS::Handle<JSObject*> aScriptOwner);
- static already_AddRefed<IDBOpenDBRequest>
- CreateForJS(JSContext* aCx,
- IDBFactory* aFactory,
- JS::Handle<JSObject*> aScriptOwner);
- bool
- IsFileHandleDisabled() const
- {
- return mFileHandleDisabled;
- }
- void
- SetTransaction(IDBTransaction* aTransaction);
- void
- NoteComplete();
- // nsIDOMEventTarget
- virtual nsresult
- PostHandleEvent(EventChainPostVisitor& aVisitor) override;
- IDBFactory*
- Factory() const
- {
- return mFactory;
- }
- IMPL_EVENT_HANDLER(blocked);
- IMPL_EVENT_HANDLER(upgradeneeded);
- NS_DECL_ISUPPORTS_INHERITED
- NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(IDBOpenDBRequest, IDBRequest)
- // nsWrapperCache
- virtual JSObject*
- WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
- private:
- IDBOpenDBRequest(IDBFactory* aFactory,
- nsPIDOMWindowInner* aOwner,
- bool aFileHandleDisabled);
- ~IDBOpenDBRequest();
- };
- } // namespace dom
- } // namespace mozilla
- #endif // mozilla_dom_idbrequest_h__
|