diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /toolkit/components/url-classifier/VariableLengthPrefixSet.h | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | toolkit/components/url-classifier/VariableLengthPrefixSet.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/toolkit/components/url-classifier/VariableLengthPrefixSet.h b/toolkit/components/url-classifier/VariableLengthPrefixSet.h new file mode 100644 index 0000000000..2593267163 --- /dev/null +++ b/toolkit/components/url-classifier/VariableLengthPrefixSet.h @@ -0,0 +1,73 @@ +//* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=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 VariableLengthPrefixSet_h +#define VariableLengthPrefixSet_h + +#include "nsISupports.h" +#include "nsIMemoryReporter.h" +#include "Entries.h" +#include "nsTArray.h" +#include "mozilla/MemoryReporting.h" +#include "mozilla/Mutex.h" + +class nsUrlClassifierPrefixSet; + +namespace mozilla { +namespace safebrowsing { + +class VariableLengthPrefixSet final : public nsIMemoryReporter { + public: + VariableLengthPrefixSet(); + + nsresult Init(const nsACString& aName); + nsresult SetPrefixes(mozilla::safebrowsing::PrefixStringMap& aPrefixMap); + nsresult SetPrefixes(AddPrefixArray& aAddPrefixes, + AddCompleteArray& aAddCompletes); + nsresult GetPrefixes(mozilla::safebrowsing::PrefixStringMap& aPrefixMap); + nsresult GetFixedLengthPrefixes(FallibleTArray<uint32_t>* aPrefixes, + FallibleTArray<nsCString>* aCompletes); + nsresult GetFixedLengthPrefixByIndex(uint32_t aIndex, + uint32_t* aOutPrefix) const; + nsresult Matches(uint32_t aPrefix, const nsACString& aFullHash, + uint32_t* aLength) const; + nsresult IsEmpty(bool* aEmpty) const; + + nsresult WritePrefixes(nsCOMPtr<nsIOutputStream>& out) const; + nsresult LoadPrefixes(nsCOMPtr<nsIInputStream>& in); + uint32_t CalculatePreallocateSize() const; + uint32_t FixedLengthPrefixLength() const; + + size_t SizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const; + + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIMEMORYREPORTER + + private: + virtual ~VariableLengthPrefixSet(); + + static const uint32_t PREFIXSET_VERSION_MAGIC = 1; + + bool BinarySearch(const nsACString& aFullHash, const nsACString& aPrefixes, + uint32_t aPrefixSize) const; + + // Lock to prevent races between the url-classifier thread (which does most + // of the operations) and the main thread (which does memory reporting). + // It should be held for all operations between Init() and destruction that + // touch this class's data members. + mutable mozilla::Mutex mLock MOZ_UNANNOTATED; + + const RefPtr<nsUrlClassifierPrefixSet> mFixedPrefixSet; + mozilla::safebrowsing::PrefixStringMap mVLPrefixSet; + + nsCString mName; + nsCString mMemoryReportPath; +}; + +} // namespace safebrowsing +} // namespace mozilla + +#endif |