tor-browser

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

nsStringBundle.h (2498B)


      1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 #ifndef nsStringBundle_h__
      7 #define nsStringBundle_h__
      8 
      9 #include "mozilla/Mutex.h"
     10 #include "nsIStringBundle.h"
     11 #include "nsIMemoryReporter.h"
     12 #include "nsCOMPtr.h"
     13 #include "nsString.h"
     14 #include "nsCOMArray.h"
     15 
     16 class nsIPersistentProperties;
     17 
     18 class nsStringBundleBase : public nsIStringBundle, public nsIMemoryReporter {
     19 public:
     20  MOZ_DEFINE_MALLOC_SIZE_OF(MallocSizeOf)
     21 
     22  nsresult ParseProperties(nsIPersistentProperties**);
     23 
     24  NS_DECL_THREADSAFE_ISUPPORTS
     25  NS_DECL_NSISTRINGBUNDLE
     26  NS_DECL_NSIMEMORYREPORTER
     27 
     28  virtual nsresult LoadProperties() = 0;
     29 
     30  const nsCString& BundleURL() const { return mPropertiesURL; }
     31 
     32  // Returns true if this bundle has more than one reference. If it has only
     33  // a single reference, it is assumed to be held alive by the bundle cache.
     34  bool IsShared() const { return mRefCnt > 1; }
     35 
     36  static nsStringBundleBase* Cast(nsIStringBundle* aBundle) {
     37    return static_cast<nsStringBundleBase*>(aBundle);
     38  }
     39 
     40  template <typename T, typename... Args>
     41  static already_AddRefed<T> Create(Args... args);
     42 
     43 protected:
     44  nsStringBundleBase(const char* aURLSpec);
     45 
     46  virtual ~nsStringBundleBase();
     47 
     48  virtual nsresult GetStringImpl(const nsACString& aName,
     49                                 nsAString& aResult) = 0;
     50 
     51  virtual nsresult GetSimpleEnumerationImpl(nsISimpleEnumerator** elements) = 0;
     52 
     53  void RegisterMemoryReporter();
     54 
     55  nsCString mPropertiesURL;
     56  mozilla::Mutex mMutex MOZ_UNANNOTATED;
     57  bool mAttemptedLoad;
     58  bool mLoaded;
     59 
     60 public:
     61  static nsresult FormatString(const char16_t* formatStr,
     62                               const nsTArray<nsString>& aParams,
     63                               nsAString& aResult);
     64 };
     65 
     66 class nsStringBundle : public nsStringBundleBase {
     67 public:
     68  NS_DECL_ISUPPORTS_INHERITED
     69 
     70  nsCOMPtr<nsIPersistentProperties> mProps;
     71 
     72  nsresult LoadProperties() override;
     73 
     74  size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) override;
     75 
     76 protected:
     77  friend class nsStringBundleBase;
     78 
     79  explicit nsStringBundle(const char* aURLSpec);
     80 
     81  virtual ~nsStringBundle();
     82 
     83  nsresult GetStringImpl(const nsACString& aName, nsAString& aResult) override;
     84 
     85  nsresult GetSimpleEnumerationImpl(nsISimpleEnumerator** elements) override;
     86 };
     87 
     88 #endif