fune/toolkit/components/url-classifier/VariableLengthPrefixSet.h
Tim Huang 2f69c2de1a Bug 1777600 - Part 3: Get noise prefixes by index instead of the entire prefix set. r=dimi
In Classifier::ReadNoiseEntries(), we used to get the entire prefix set
in order to get noise prefixes. This patch improves it by getting noise
prefixes by index. So, we don't need the entire prefix set.

The patch introduces new functions in LookupCacheV2, V4 and
VariableLengthPrefixSet to allow getting target prefix by index. Also,
we need to inroduces new functions to get the length of the prefix set
to run the noise pick up algorithm.

Differential Revision: https://phabricator.services.mozilla.com/D161771
2022-11-15 14:37:00 +00:00

73 lines
2.5 KiB
C++

//* -*- 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