/* -*- 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_DataStore_h #define mozilla_dom_DataStore_h #include "mozilla/DOMEventTargetHelper.h" namespace mozilla { class ErrorResult; namespace dom { class Promise; class DataStoreCursor; class DataStoreImpl; class StringOrUnsignedLong; class OwningStringOrUnsignedLong; class DataStore final : public DOMEventTargetHelper { public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(DataStore, DOMEventTargetHelper) explicit DataStore(nsPIDOMWindow* aWindow); // WebIDL (internal functions) static already_AddRefed Constructor(GlobalObject& aGlobal, ErrorResult& aRv); virtual JSObject* WrapObject(JSContext *aCx, JS::Handle aGivenProto) override; static bool EnabledForScope(JSContext* aCx, JS::Handle aObj); // WebIDL (public APIs) void GetName(nsAString& aName, ErrorResult& aRv); void GetOwner(nsAString& aOwner, ErrorResult& aRv); bool GetReadOnly(ErrorResult& aRv); already_AddRefed Get(const Sequence& aId, ErrorResult& aRv); already_AddRefed Put(JSContext* aCx, JS::Handle aObj, const StringOrUnsignedLong& aId, const nsAString& aRevisionId, ErrorResult& aRv); already_AddRefed Add(JSContext* aCx, JS::Handle aObj, const Optional& aId, const nsAString& aRevisionId, ErrorResult& aRv); already_AddRefed Remove(const StringOrUnsignedLong& aId, const nsAString& aRevisionId, ErrorResult& aRv); already_AddRefed Clear(const nsAString& aRevisionId, ErrorResult& aRv); void GetRevisionId(nsAString& aRevisionId, ErrorResult& aRv); already_AddRefed GetLength(ErrorResult& aRv); already_AddRefed Sync(const nsAString& aRevisionId, ErrorResult& aRv); IMPL_EVENT_HANDLER(change) // This internal function (ChromeOnly) is aimed to make the DataStore keep a // reference to the DataStoreImpl which really implements the API's logic in // JS. We also need to let the DataStoreImpl implementation keep the event // target of DataStore, so that it can know where to fire the events. void SetDataStoreImpl(DataStoreImpl& aStore, ErrorResult& aRv); private: ~DataStore(); RefPtr mStore; }; } //namespace dom } //namespace mozilla #endif