/* -*- 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_intl_l10n_Localization_h #define mozilla_intl_l10n_Localization_h #include "nsWeakReference.h" #include "nsIObserver.h" #include "mozILocalization.h" #include "mozilla/dom/Promise.h" #include "mozilla/dom/LocalizationBinding.h" #include "mozilla/dom/PromiseNativeHandler.h" class nsIGlobalObject; using namespace mozilla::dom; namespace mozilla { class ErrorResult; namespace intl { typedef Record> L10nArgs; class Localization : public nsIObserver, public nsSupportsWeakReference, public nsWrapperCache { NS_DECL_CYCLE_COLLECTING_ISUPPORTS NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(Localization, nsIObserver) NS_DECL_NSIOBSERVER static already_AddRefed Create( nsIGlobalObject* aGlobal, const bool aSync, const BundleGenerator& aBundleGenerator); void Activate(const bool aEager); void Destroy(); static already_AddRefed Constructor( const GlobalObject& aGlobal, const Sequence& aResourceIds, const bool aSync, const BundleGenerator& aBundleGenerator, ErrorResult& aRv); nsIGlobalObject* GetParentObject() const; virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; uint32_t AddResourceId(const nsAString& aResourceId); uint32_t RemoveResourceId(const nsAString& aResourceId); /** * Localization API * * Methods documentation in Localization.webidl */ uint32_t AddResourceIds(const nsTArray& aResourceIds); uint32_t RemoveResourceIds(const nsTArray& aResourceIds); already_AddRefed FormatValue(JSContext* aCx, const nsACString& aId, const Optional& aArgs, ErrorResult& aRv); already_AddRefed FormatValues( JSContext* aCx, const Sequence& aKeys, ErrorResult& aRv); already_AddRefed FormatMessages( JSContext* aCx, const Sequence& aKeys, ErrorResult& aRv); void SetIsSync(const bool aIsSync); void FormatValueSync(JSContext* aCx, const nsACString& aId, const Optional& aArgs, nsACString& aRetVal, ErrorResult& aRv); void FormatValuesSync(JSContext* aCx, const Sequence& aKeys, nsTArray& aRetVal, ErrorResult& aRv); void FormatMessagesSync(JSContext* aCx, const Sequence& aKeys, nsTArray>& aRetVal, ErrorResult& aRv); protected: Localization(nsIGlobalObject* aGlobal, const bool aSync, const BundleGenerator& aBundleGenerator); virtual bool Init(); virtual ~Localization(); void RegisterObservers(); virtual void OnChange(); already_AddRefed MaybeWrapPromise(Promise* aInnerPromise); void ConvertL10nArgsToJSValue(JSContext* aCx, const L10nArgs& aArgs, JS::MutableHandle aRetVal, ErrorResult& aRv); nsCOMPtr mGlobal; nsCOMPtr mLocalization; bool mIsSync; nsTArray mResourceIds; JS::Heap mBundles; JS::Heap mGenerateBundles; JS::Heap mGenerateBundlesSync; }; } // namespace intl } // namespace mozilla #endif