diff options
Diffstat (limited to '')
-rw-r--r-- | intl/strres/nsStringBundleService.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/intl/strres/nsStringBundleService.h b/intl/strres/nsStringBundleService.h new file mode 100644 index 0000000000..7c13ee6215 --- /dev/null +++ b/intl/strres/nsStringBundleService.h @@ -0,0 +1,82 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* 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 nsStringBundleService_h__ +#define nsStringBundleService_h__ + +#include "nsCOMPtr.h" +#include "nsDataHashtable.h" +#include "nsHashKeys.h" +#include "nsIStringBundle.h" +#include "nsIObserver.h" +#include "nsWeakReference.h" +#include "nsIErrorService.h" +#include "nsIMemoryReporter.h" + +#include "mozilla/LinkedList.h" +#include "mozilla/UniquePtr.h" + +struct bundleCacheEntry_t; + +class nsStringBundleService : public nsIStringBundleService, + public nsIObserver, + public nsSupportsWeakReference, + public nsIMemoryReporter { + MOZ_DEFINE_MALLOC_SIZE_OF(MallocSizeOf); + + public: + nsStringBundleService(); + + nsresult Init(); + + NS_DECL_ISUPPORTS + NS_DECL_NSISTRINGBUNDLESERVICE + NS_DECL_NSIOBSERVER + + NS_IMETHOD CollectReports(nsIHandleReportCallback* aHandleReport, + nsISupports* aData, bool anonymize) override { + size_t amt = SizeOfIncludingThis(MallocSizeOf); + + MOZ_COLLECT_REPORT("explicit/string-bundles/service", KIND_HEAP, + UNITS_BYTES, amt, + "Memory used for StringBundleService overhead"); + return NS_OK; + }; + + size_t SizeOfIncludingThis( + mozilla::MallocSizeOf aMallocSizeOf) const override; + + void SendContentBundles( + mozilla::dom::ContentParent* aContentParent) const override; + + void RegisterContentBundle(const nsCString& aBundleURL, + const mozilla::ipc::FileDescriptor& aMapFile, + size_t aMapSize) override; + + private: + virtual ~nsStringBundleService(); + + void getStringBundle(const char* aUrl, nsIStringBundle** aResult); + nsresult FormatWithBundle(nsIStringBundle* bundle, nsresult aStatus, + const nsTArray<nsString>& argArray, + nsAString& result); + + void flushBundleCache(bool ignoreShared = true); + + mozilla::UniquePtr<bundleCacheEntry_t> evictOneEntry(); + + bundleCacheEntry_t* insertIntoCache(already_AddRefed<nsIStringBundle> aBundle, + const nsACString& aHashKey); + + nsDataHashtable<nsCStringHashKey, bundleCacheEntry_t*> mBundleMap; + // LRU list of cached entries, with the least-recently-used entry first. + mozilla::LinkedList<bundleCacheEntry_t> mBundleCache; + // List of cached shared-memory string bundles, in arbitrary order. + mozilla::AutoCleanLinkedList<bundleCacheEntry_t> mSharedBundles; + + nsCOMPtr<nsIErrorService> mErrorService; +}; + +#endif |