/* -*- 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/ErrorResult.h" #include "mozilla/dom/Promise.h" #include "mozilla/dom/LocalizationBinding.h" #include "mozilla/dom/PromiseNativeHandler.h" class nsIGlobalObject; using namespace mozilla::dom; namespace mozilla { 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 explicit Localization(nsIGlobalObject* aGlobal); void Init(nsTArray& aResourceIds, ErrorResult& aRv); void Init(nsTArray& aResourceIds, JS::Handle aGenerateMessages, ErrorResult& aRv); static already_AddRefed Constructor( const GlobalObject& aGlobal, const Optional>& aResourceIds, const Optional>& aGenerateMessages, ErrorResult& aRv); nsIGlobalObject* GetParentObject() const; virtual JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; /** * Localization API * * Methods documentation in Localization.webidl */ uint32_t AddResourceIds(const nsTArray& aResourceIds, bool aEager); uint32_t RemoveResourceIds(const nsTArray& aResourceIds); already_AddRefed FormatValue(JSContext* aCx, const nsAString& 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); protected: virtual ~Localization(); void RegisterObservers(); 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; }; } // namespace intl } // namespace mozilla #endif