tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

L10nRegistry.h (5774B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_intl_l10n_L10nRegistry_h
      8 #define mozilla_intl_l10n_L10nRegistry_h
      9 
     10 #include "nsIStreamLoader.h"
     11 #include "nsWrapperCache.h"
     12 #include "nsCycleCollectionParticipant.h"
     13 #include "mozilla/dom/L10nRegistryBinding.h"
     14 #include "mozilla/dom/BindingDeclarations.h"
     15 #include "mozilla/intl/FluentBindings.h"
     16 #include "mozilla/intl/RegistryBindings.h"
     17 
     18 class nsIGlobalObject;
     19 
     20 namespace mozilla::dom {
     21 class L10nFileSourceDescriptor;
     22 }
     23 
     24 namespace mozilla::intl {
     25 
     26 class FluentBundleAsyncIterator final : public nsWrapperCache {
     27 public:
     28  NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentBundleAsyncIterator)
     29  NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentBundleAsyncIterator)
     30 
     31  FluentBundleAsyncIterator(
     32      nsIGlobalObject* aGlobal,
     33      UniquePtr<ffi::GeckoFluentBundleAsyncIteratorWrapper> aRaw);
     34 
     35  virtual JSObject* WrapObject(JSContext* aCx,
     36                               JS::Handle<JSObject*> aGivenProto) override;
     37  nsIGlobalObject* GetParentObject() const { return mGlobal; }
     38 
     39  // WebIDL
     40  already_AddRefed<dom::Promise> Next(ErrorResult& aError);
     41  already_AddRefed<FluentBundleAsyncIterator> Values();
     42 
     43 protected:
     44  ~FluentBundleAsyncIterator() = default;
     45  nsCOMPtr<nsIGlobalObject> mGlobal;
     46  UniquePtr<ffi::GeckoFluentBundleAsyncIteratorWrapper> mRaw;
     47 };
     48 
     49 class FluentBundleIterator final : public nsWrapperCache {
     50 public:
     51  NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(FluentBundleIterator)
     52  NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(FluentBundleIterator)
     53 
     54  FluentBundleIterator(nsIGlobalObject* aGlobal,
     55                       UniquePtr<ffi::GeckoFluentBundleIterator> aRaw);
     56 
     57  virtual JSObject* WrapObject(JSContext* aCx,
     58                               JS::Handle<JSObject*> aGivenProto) override;
     59  nsIGlobalObject* GetParentObject() const { return mGlobal; }
     60 
     61  // WebIDL
     62  void Next(dom::FluentBundleIteratorResult& aResult);
     63  already_AddRefed<FluentBundleIterator> Values();
     64 
     65 protected:
     66  ~FluentBundleIterator() = default;
     67  nsCOMPtr<nsIGlobalObject> mGlobal;
     68  UniquePtr<ffi::GeckoFluentBundleIterator> mRaw;
     69 };
     70 
     71 class L10nRegistry final : public nsWrapperCache {
     72 public:
     73  NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(L10nRegistry)
     74  NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(L10nRegistry)
     75 
     76  L10nRegistry(nsIGlobalObject* aGlobal, bool aUseIsolating);
     77 
     78  L10nRegistry(nsIGlobalObject* aGlobal,
     79               RefPtr<const ffi::GeckoL10nRegistry> aRaw);
     80 
     81  static already_AddRefed<L10nRegistry> Constructor(
     82      const dom::GlobalObject& aGlobal,
     83      const dom::L10nRegistryOptions& aOptions);
     84 
     85  static already_AddRefed<L10nRegistry> GetInstance(
     86      const dom::GlobalObject& aGlobal);
     87 
     88  static void GetParentProcessFileSourceDescriptors(
     89      nsTArray<dom::L10nFileSourceDescriptor>& aRetVal);
     90  static void RegisterFileSourcesFromParentProcess(
     91      const nsTArray<dom::L10nFileSourceDescriptor>& aDescriptors);
     92 
     93  static nsresult Load(const nsACString& aPath,
     94                       nsIStreamLoaderObserver* aObserver);
     95  static nsresult LoadSync(const nsACString& aPath, void** aData,
     96                           uint64_t* aSize);
     97 
     98  static ffi::GeckoResourceId ResourceIdToFFI(const nsCString& aResourceId);
     99  static ffi::GeckoResourceId ResourceIdToFFI(
    100      const dom::OwningUTF8StringOrResourceId& aResourceId);
    101  static nsTArray<ffi::GeckoResourceId> ResourceIdsToFFI(
    102      const nsTArray<nsCString>& aResourceIds);
    103  static nsTArray<ffi::GeckoResourceId> ResourceIdsToFFI(
    104      const nsTArray<dom::OwningUTF8StringOrResourceId>& aResourceIds);
    105 
    106  void GetAvailableLocales(nsTArray<nsCString>& aRetVal);
    107 
    108  void RegisterSources(
    109      const dom::Sequence<OwningNonNull<L10nFileSource>>& aSources);
    110  void UpdateSources(
    111      const dom::Sequence<OwningNonNull<L10nFileSource>>& aSources);
    112  void RemoveSources(const dom::Sequence<nsCString>& aSources);
    113  bool HasSource(const nsACString& aName, ErrorResult& aRv);
    114  already_AddRefed<L10nFileSource> GetSource(const nsACString& aName,
    115                                             ErrorResult& aRv);
    116  void GetSourceNames(nsTArray<nsCString>& aRetVal);
    117  void ClearSources();
    118 
    119  already_AddRefed<FluentBundleIterator> GenerateBundlesSync(
    120      const nsTArray<nsCString>& aLocales,
    121      const nsTArray<ffi::GeckoResourceId>& aResourceIds, ErrorResult& aRv);
    122  already_AddRefed<FluentBundleIterator> GenerateBundlesSync(
    123      const dom::Sequence<nsCString>& aLocales,
    124      const dom::Sequence<dom::OwningUTF8StringOrResourceId>& aResourceIds,
    125      ErrorResult& aRv);
    126 
    127  already_AddRefed<FluentBundleAsyncIterator> GenerateBundles(
    128      const nsTArray<nsCString>& aLocales,
    129      const nsTArray<ffi::GeckoResourceId>& aResourceIds, ErrorResult& aRv);
    130  already_AddRefed<FluentBundleAsyncIterator> GenerateBundles(
    131      const dom::Sequence<nsCString>& aLocales,
    132      const dom::Sequence<dom::OwningUTF8StringOrResourceId>& aResourceIds,
    133      ErrorResult& aRv);
    134 
    135  nsIGlobalObject* GetParentObject() const { return mGlobal; }
    136 
    137  JSObject* WrapObject(JSContext* aCx,
    138                       JS::Handle<JSObject*> aGivenProto) override;
    139 
    140  const ffi::GeckoL10nRegistry* Raw() const { return mRaw; }
    141 
    142 protected:
    143  ~L10nRegistry() = default;
    144  nsCOMPtr<nsIGlobalObject> mGlobal;
    145  const RefPtr<const ffi::GeckoL10nRegistry> mRaw;
    146  static bool PopulateError(ErrorResult& aError,
    147                            ffi::L10nRegistryStatus& aStatus);
    148 };
    149 
    150 }  // namespace mozilla::intl
    151 
    152 #endif