--- a/toolkit/components/url-classifier/Classifier.cpp
+++ b/toolkit/components/url-classifier/Classifier.cpp
@@ -23,16 +23,17 @@
#include "mozilla/Unused.h"
#include "mozilla/SizePrintfMacros.h"
#include "nsIUrlClassifierUtils.h"
#include "nsUrlClassifierDBService.h"
// MOZ_LOG=UrlClassifierDbService:5
extern mozilla::LazyLogModule gUrlClassifierDbServiceLog;
#define LOG(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug, args)
+#define LOG_VERBOSE(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Verbose, args)
#define LOG_ENABLED() MOZ_LOG_TEST(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug)
#define STORE_DIRECTORY NS_LITERAL_CSTRING("safebrowsing")
#define TO_DELETE_DIR_SUFFIX NS_LITERAL_CSTRING("-to_delete")
#define BACKUP_DIR_SUFFIX NS_LITERAL_CSTRING("-backup")
#define UPDATING_DIR_SUFFIX NS_LITERAL_CSTRING("-updating")
#define METADATA_SUFFIX NS_LITERAL_CSTRING(".metadata")
@@ -121,17 +122,17 @@ Classifier::GetPrivateStoreDirectory(nsI
NS_ENSURE_SUCCESS(rv, rv);
// Ensure existence of the provider directory.
bool dirExists;
rv = providerDirectory->Exists(&dirExists);
NS_ENSURE_SUCCESS(rv, rv);
if (!dirExists) {
- LOG(("Creating private directory for %s", nsCString(aTableName).get()));
+ LOG_VERBOSE(("Creating private directory for %s", nsCString(aTableName).get()));
rv = providerDirectory->Create(nsIFile::DIRECTORY_TYPE, 0755);
NS_ENSURE_SUCCESS(rv, rv);
providerDirectory.forget(aPrivateStoreDirectory);
return rv;
}
// Store directory exists. Check if it's a directory.
bool isDir;
@@ -151,16 +152,17 @@ Classifier::Classifier()
, mUpdateInterrupted(true)
{
NS_NewNamedThread(NS_LITERAL_CSTRING("Classifier Update"),
getter_AddRefs(mUpdateThread));
}
Classifier::~Classifier()
{
+ LOG(("Classifier::~Classifier"));
Close();
}
nsresult
Classifier::SetupPathNames()
{
// Get the root directory where to store all the databases.
nsresult rv = mCacheDirectory->Clone(getter_AddRefs(mRootStoreDirectory));
@@ -449,17 +451,17 @@ Classifier::Check(const nsACString& aSpe
nsresult rv = LookupCache::GetLookupFragments(aSpec, &fragments);
NS_ENSURE_SUCCESS(rv, rv);
nsTArray<nsCString> activeTables;
SplitTables(aTables, activeTables);
nsTArray<LookupCache*> cacheArray;
for (uint32_t i = 0; i < activeTables.Length(); i++) {
- LOG(("Checking table %s", activeTables[i].get()));
+ LOG_VERBOSE(("Checking table %s", activeTables[i].get()));
LookupCache *cache = GetLookupCache(activeTables[i]);
if (cache) {
cacheArray.AppendElement(cache);
} else {
return NS_ERROR_FAILURE;
}
}
@@ -478,18 +480,18 @@ Classifier::Check(const nsACString& aSpe
// Now check each lookup fragment against the entries in the DB.
for (uint32_t i = 0; i < fragments.Length(); i++) {
Completion lookupHash;
lookupHash.FromPlaintext(fragments[i], mCryptoHash);
if (LOG_ENABLED()) {
nsAutoCString checking;
lookupHash.ToHexString(checking);
- LOG(("Checking fragment %s, hash %s (%X)", fragments[i].get(),
- checking.get(), lookupHash.ToUint32()));
+ LOG_VERBOSE(("Checking fragment %s, hash %s (%X)", fragments[i].get(),
+ checking.get(), lookupHash.ToUint32()));
}
for (uint32_t i = 0; i < cacheArray.Length(); i++) {
LookupCache *cache = cacheArray[i];
bool has, fromCache;
uint32_t matchLength;
rv = cache->Has(lookupHash, &has, &matchLength, &fromCache);
@@ -941,17 +943,17 @@ Classifier::RegenActiveTables()
continue;
const ChunkSet &adds = store.AddChunks();
const ChunkSet &subs = store.SubChunks();
if (adds.Length() == 0 && subs.Length() == 0)
continue;
- LOG(("Active table: %s", store.TableName().get()));
+ LOG_VERBOSE(("Active table: %s", store.TableName().get()));
mActiveTablesCache.AppendElement(store.TableName());
}
return NS_OK;
}
nsresult
Classifier::ScanStoreDir(nsTArray<nsCString>& aTables)
@@ -1231,42 +1233,42 @@ Classifier::UpdateHashStore(nsTArray<Tab
rv = store.ApplyUpdate(*update);
NS_ENSURE_SUCCESS(rv, rv);
applied++;
auto updateV2 = TableUpdate::Cast<TableUpdateV2>(update);
if (updateV2) {
- LOG(("Applied update to table %s:", store.TableName().get()));
- LOG((" %d add chunks", updateV2->AddChunks().Length()));
- LOG((" %" PRIuSIZE " add prefixes", updateV2->AddPrefixes().Length()));
- LOG((" %" PRIuSIZE " add completions", updateV2->AddCompletes().Length()));
- LOG((" %d sub chunks", updateV2->SubChunks().Length()));
- LOG((" %" PRIuSIZE " sub prefixes", updateV2->SubPrefixes().Length()));
- LOG((" %" PRIuSIZE " sub completions", updateV2->SubCompletes().Length()));
- LOG((" %d add expirations", updateV2->AddExpirations().Length()));
- LOG((" %d sub expirations", updateV2->SubExpirations().Length()));
+ LOG_VERBOSE(("Applied update to table %s:", store.TableName().get()));
+ LOG_VERBOSE((" %d add chunks", updateV2->AddChunks().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " add prefixes", updateV2->AddPrefixes().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " add completions", updateV2->AddCompletes().Length()));
+ LOG_VERBOSE((" %d sub chunks", updateV2->SubChunks().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " sub prefixes", updateV2->SubPrefixes().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " sub completions", updateV2->SubCompletes().Length()));
+ LOG_VERBOSE((" %d add expirations", updateV2->AddExpirations().Length()));
+ LOG_VERBOSE((" %d sub expirations", updateV2->SubExpirations().Length()));
}
aUpdates->ElementAt(i) = nullptr;
}
LOG(("Applied %d update(s) to %s.", applied, store.TableName().get()));
rv = store.Rebuild();
NS_ENSURE_SUCCESS(rv, rv);
- LOG(("Table %s now has:", store.TableName().get()));
- LOG((" %d add chunks", store.AddChunks().Length()));
- LOG((" %" PRIuSIZE " add prefixes", store.AddPrefixes().Length()));
- LOG((" %" PRIuSIZE " add completions", store.AddCompletes().Length()));
- LOG((" %d sub chunks", store.SubChunks().Length()));
- LOG((" %" PRIuSIZE " sub prefixes", store.SubPrefixes().Length()));
- LOG((" %" PRIuSIZE " sub completions", store.SubCompletes().Length()));
+ LOG_VERBOSE(("Table %s now has:", store.TableName().get()));
+ LOG_VERBOSE((" %d add chunks", store.AddChunks().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " add prefixes", store.AddPrefixes().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " add completions", store.AddCompletes().Length()));
+ LOG_VERBOSE((" %d sub chunks", store.SubChunks().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " sub prefixes", store.SubPrefixes().Length()));
+ LOG_VERBOSE((" %" PRIuSIZE " sub completions", store.SubCompletes().Length()));
rv = store.WriteFile();
NS_ENSURE_SUCCESS(rv, rv);
// At this point the store is updated and written out to disk, but
// the data is still in memory. Build our quick-lookup table here.
rv = lookupCache->Build(store.AddPrefixes(), store.AddCompletes());
NS_ENSURE_SUCCESS(rv, NS_ERROR_UC_UPDATE_BUILD_PREFIX_FAILURE);
--- a/toolkit/components/url-classifier/HashStore.cpp
+++ b/toolkit/components/url-classifier/HashStore.cpp
@@ -94,16 +94,17 @@
// 16-byte MD5 of all preceding data
// Name of the SafeBrowsing store
#define STORE_SUFFIX ".sbstore"
// MOZ_LOG=UrlClassifierDbService:5
extern mozilla::LazyLogModule gUrlClassifierDbServiceLog;
#define LOG(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug, args)
+#define LOG_VERBOSE(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Verbose, args)
#define LOG_ENABLED() MOZ_LOG_TEST(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug)
namespace mozilla {
namespace safebrowsing {
const uint32_t STORE_MAGIC = 0x1231af3b;
const uint32_t CURRENT_VERSION = 3;
@@ -682,17 +683,17 @@ nsresult DeflateWriteTArray(nsIOutputStr
int zerr = compress(reinterpret_cast<Bytef*>(outBuff.Elements()),
&outsize,
reinterpret_cast<const Bytef*>(aIn.Elements()),
insize);
if (zerr != Z_OK) {
return NS_ERROR_FAILURE;
}
- LOG(("DeflateWriteTArray: %lu in %lu out", insize, outsize));
+ LOG_VERBOSE(("DeflateWriteTArray: %lu in %lu out", insize, outsize));
outBuff.TruncateLength(outsize);
// Length of compressed data stream
uint32_t dataLen = outBuff.Length();
uint32_t written;
nsresult rv = aStream->Write(reinterpret_cast<char*>(&dataLen), sizeof(dataLen), &written);
NS_ENSURE_SUCCESS(rv, rv);
@@ -734,17 +735,17 @@ nsresult InflateReadTArray(nsIInputStrea
int zerr = uncompress(reinterpret_cast<Bytef*>(aOut->Elements()),
&outsize,
reinterpret_cast<const Bytef*>(inBuff.Elements()),
insize);
if (zerr != Z_OK) {
return NS_ERROR_FAILURE;
}
- LOG(("InflateReadTArray: %lu in %lu out", insize, outsize));
+ LOG_VERBOSE(("InflateReadTArray: %lu in %lu out", insize, outsize));
NS_ASSERTION(outsize == aExpectedSize * sizeof(T), "Decompression size mismatch");
return NS_OK;
}
static nsresult
ByteSliceWrite(nsIOutputStream* aOut, nsTArray<uint32_t>& aData)
--- a/toolkit/components/url-classifier/LookupCache.cpp
+++ b/toolkit/components/url-classifier/LookupCache.cpp
@@ -30,16 +30,17 @@
// only cached until the next update.
// Name of the persistent PrefixSet storage
#define PREFIXSET_SUFFIX ".pset"
// MOZ_LOG=UrlClassifierDbService:5
extern mozilla::LazyLogModule gUrlClassifierDbServiceLog;
#define LOG(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug, args)
+#define LOG_VERBOSE(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Verbose, args)
#define LOG_ENABLED() MOZ_LOG_TEST(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug)
namespace mozilla {
namespace safebrowsing {
const int LookupCacheV2::VER = 2;
LookupCache::LookupCache(const nsACString& aTableName,
@@ -81,18 +82,18 @@ LookupCache::UpdateRootDirHandle(nsIFile
if (NS_FAILED(rv)) {
LOG(("Failed to get private store directory for %s", mTableName.get()));
mStoreDirectory = mRootStoreDirectory;
}
if (LOG_ENABLED()) {
nsString path;
mStoreDirectory->GetPath(path);
- LOG(("Private store directory for %s is %s", mTableName.get(),
- NS_ConvertUTF16toUTF8(path).get()));
+ LOG_VERBOSE(("Private store directory for %s is %s", mTableName.get(),
+ NS_ConvertUTF16toUTF8(path).get()));
}
return rv;
}
nsresult
LookupCache::AddCompletionsToCache(AddCompleteArray& aAddCompletes)
{
@@ -260,17 +261,17 @@ LookupCache::GetLookupFragments(const ns
paths.AppendElement(EmptyCString());
for (uint32_t hostIndex = 0; hostIndex < hosts.Length(); hostIndex++) {
for (uint32_t pathIndex = 0; pathIndex < paths.Length(); pathIndex++) {
nsCString key;
key.Assign(hosts[hostIndex]);
key.Append('/');
key.Append(paths[pathIndex]);
- LOG(("Checking fragment %s", key.get()));
+ LOG_VERBOSE(("Checking fragment %s", key.get()));
aFragments->AppendElement(key);
}
}
return NS_OK;
}
@@ -405,17 +406,17 @@ LookupCacheV2::Has(const Completion& aCo
*aMatchLength = 0;
uint32_t prefix = aCompletion.ToUint32();
bool found;
nsresult rv = mPrefixSet->Contains(prefix, &found);
NS_ENSURE_SUCCESS(rv, rv);
- LOG(("Probe in %s: %X, found %d", mTableName.get(), prefix, found));
+ LOG_VERBOSE(("Probe in %s: %X, found %d", mTableName.get(), prefix, found));
if (found) {
*aHas = true;
*aMatchLength = PREFIX_SIZE;
}
if ((mGetHashCache.BinaryIndexOf(aCompletion) != nsTArray<Completion>::NoIndex) ||
(mUpdateCompletions.BinaryIndexOf(aCompletion) != nsTArray<Completion>::NoIndex)) {
--- a/toolkit/components/url-classifier/LookupCacheV4.cpp
+++ b/toolkit/components/url-classifier/LookupCacheV4.cpp
@@ -6,16 +6,17 @@
#include "LookupCacheV4.h"
#include "HashStore.h"
#include "mozilla/Unused.h"
#include <string>
// MOZ_LOG=UrlClassifierDbService:5
extern mozilla::LazyLogModule gUrlClassifierDbServiceLog;
#define LOG(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug, args)
+#define LOG_VERBOSE(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Verbose, args)
#define LOG_ENABLED() MOZ_LOG_TEST(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug)
#define METADATA_SUFFIX NS_LITERAL_CSTRING(".metadata")
namespace mozilla {
namespace safebrowsing {
const int LookupCacheV4::VER = 4;
@@ -93,18 +94,18 @@ LookupCacheV4::Has(const Completion& aCo
nsresult rv = mVLPrefixSet->Matches(fullhash, &length);
NS_ENSURE_SUCCESS(rv, rv);
*aHas = length >= PREFIX_SIZE;
*aMatchLength = length;
if (LOG_ENABLED()) {
uint32_t prefix = aCompletion.ToUint32();
- LOG(("Probe in V4 %s: %X, found %d, complete %d", mTableName.get(),
- prefix, *aHas, length == COMPLETE_SIZE));
+ LOG_VERBOSE(("Probe in V4 %s: %X, found %d, complete %d", mTableName.get(),
+ prefix, *aHas, length == COMPLETE_SIZE));
}
// TODO : Bug 1311935 - Implement v4 caching
return NS_OK;
}
void
--- a/toolkit/components/url-classifier/nsUrlClassifierDBService.cpp
+++ b/toolkit/components/url-classifier/nsUrlClassifierDBService.cpp
@@ -89,16 +89,17 @@ TablesToResponse(const nsACString& table
} // namespace mozilla
using namespace mozilla;
using namespace mozilla::safebrowsing;
// MOZ_LOG=UrlClassifierDbService:5
LazyLogModule gUrlClassifierDbServiceLog("UrlClassifierDbService");
#define LOG(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug, args)
+#define LOG_VERBOSE(args) MOZ_LOG(gUrlClassifierDbServiceLog, mozilla::LogLevel::Verbose, args)
#define LOG_ENABLED() MOZ_LOG_TEST(gUrlClassifierDbServiceLog, mozilla::LogLevel::Debug)
// Prefs for implementing nsIURIClassifier to block page loads
#define CHECK_MALWARE_PREF "browser.safebrowsing.malware.enabled"
#define CHECK_MALWARE_DEFAULT false
#define CHECK_PHISHING_PREF "browser.safebrowsing.phishing.enabled"
#define CHECK_PHISHING_DEFAULT false
@@ -207,17 +208,17 @@ nsUrlClassifierDBServiceWorker::DoLocalL
if (!mClassifier) {
return NS_ERROR_NOT_AVAILABLE;
}
// We ignore failures from Check because we'd rather return the
// results that were found than fail.
mClassifier->Check(spec, tables, gFreshnessGuarantee, *results);
- LOG(("Found %" PRIuSIZE " results.", results->Length()));
+ LOG_VERBOSE(("Found %" PRIuSIZE " results.", results->Length()));
return NS_OK;
}
static nsresult
ProcessLookupResults(LookupResultArray* results, nsTArray<nsCString>& tables)
{
// Build the result array.
for (uint32_t i = 0; i < results->Length(); i++) {
@@ -264,23 +265,23 @@ nsUrlClassifierDBServiceWorker::DoLookup
}
nsresult rv = DoLocalLookup(spec, tables, results);
if (NS_FAILED(rv)) {
c->LookupComplete(nullptr);
return rv;
}
- LOG(("Found %" PRIuSIZE " results.", results->Length()));
+ LOG_VERBOSE(("Found %" PRIuSIZE " results.", results->Length()));
if (LOG_ENABLED()) {
PRIntervalTime clockEnd = PR_IntervalNow();
- LOG(("query took %dms\n",
- PR_IntervalToMilliseconds(clockEnd - clockStart)));
+ LOG_VERBOSE(("query took %dms\n",
+ PR_IntervalToMilliseconds(clockEnd - clockStart)));
}
nsAutoPtr<LookupResultArray> completes(new LookupResultArray());
for (uint32_t i = 0; i < results->Length(); i++) {
const LookupResult& lookupResult = results->ElementAt(i);
// mMissCache should only be used in V2.
@@ -375,31 +376,33 @@ nsUrlClassifierDBServiceWorker::Lookup(n
}
return HandlePendingLookups();
}
NS_IMETHODIMP
nsUrlClassifierDBServiceWorker::GetTables(nsIUrlClassifierCallback* c)
{
+ LOG(("nsUrlClassifierDBServiceWorker::GetTables"));
+
if (gShuttingDownThread) {
return NS_ERROR_NOT_INITIALIZED;
}
nsresult rv = OpenDb();
if (NS_FAILED(rv)) {
NS_ERROR("Unable to open SafeBrowsing database");
return NS_ERROR_FAILURE;
}
NS_ENSURE_SUCCESS(rv, rv);
nsAutoCString response;
mClassifier->TableRequest(response);
- LOG(("GetTables: %s", response.get()));
+ LOG_VERBOSE(("GetTables: %s", response.get()));
c->HandleEvent(response);
return rv;
}
void
nsUrlClassifierDBServiceWorker::ResetStream()
{
@@ -814,16 +817,18 @@ nsUrlClassifierDBServiceWorker::FlushAnd
// Allows the main thread to delete the connection which may be in
// a background thread.
// XXX This could be turned into a single shutdown event so the logic
// is simpler in nsUrlClassifierDBService::Shutdown.
nsresult
nsUrlClassifierDBServiceWorker::CloseDb()
{
+ LOG(("nsUrlClassifierDBServiceWorker::CloseDb"));
+
if (mClassifier) {
mClassifier->Close();
mClassifier = nullptr;
}
mCryptoHash = nullptr;
LOG(("urlclassifier db closed\n"));
@@ -899,18 +904,18 @@ nsUrlClassifierDBServiceWorker::CacheCom
mClassifier->ApplyFullHashes(&updates);
mLastResults = *resultsPtr;
return NS_OK;
}
nsresult
nsUrlClassifierDBServiceWorker::CacheMisses(PrefixArray *results)
{
- LOG(("nsUrlClassifierDBServiceWorker::CacheMisses [%p] %" PRIuSIZE,
- this, results->Length()));
+ LOG_VERBOSE(("nsUrlClassifierDBServiceWorker::CacheMisses [%p] %" PRIuSIZE,
+ this, results->Length()));
// Ownership is transferred in to us
nsAutoPtr<PrefixArray> resultsPtr(results);
for (uint32_t i = 0; i < resultsPtr->Length(); i++) {
mMissCache.AppendElement(resultsPtr->ElementAt(i));
}
return NS_OK;
@@ -1075,18 +1080,18 @@ nsUrlClassifierLookupCallback::LookupCom
result.mTableName.get()));
} else {
NS_WARNING("Partial match in a table without a valid completer, ignoring partial match.");
}
}
}
}
- LOG(("nsUrlClassifierLookupCallback::LookupComplete [%p] "
- "%u pending completions", this, mPendingCompletions));
+ LOG_VERBOSE(("nsUrlClassifierLookupCallback::LookupComplete [%p] "
+ "%u pending completions", this, mPendingCompletions));
if (mPendingCompletions == 0) {
// All results were complete, we're ready!
HandleResults();
}
return NS_OK;
}
@@ -1176,18 +1181,18 @@ nsUrlClassifierLookupCallback::HandleRes
if (!mResults) {
// No results, this URI is clean.
LOG(("nsUrlClassifierLookupCallback::HandleResults [%p, no results]", this));
return mCallback->HandleEvent(NS_LITERAL_CSTRING(""));
}
MOZ_ASSERT(mPendingCompletions == 0, "HandleResults() should never be "
"called while there are pending completions");
- LOG(("nsUrlClassifierLookupCallback::HandleResults [%p, %" PRIuSIZE " results]",
- this, mResults->Length()));
+ LOG_VERBOSE(("nsUrlClassifierLookupCallback::HandleResults [%p, %" PRIuSIZE " results]",
+ this, mResults->Length()));
nsCOMPtr<nsIUrlClassifierClassifyCallback> classifyCallback =
do_QueryInterface(mCallback);
MatchResult matchResult = MatchResult::eTelemetryDisabled;
nsTArray<nsCString> tables;
// Build a stringified list of result tables.
@@ -1961,16 +1966,18 @@ nsUrlClassifierDBService::LookupURI(nsIP
// This seems to just call HandlePendingLookups.
nsAutoCString dummy;
return mWorkerProxy->Lookup(nullptr, dummy, nullptr);
}
NS_IMETHODIMP
nsUrlClassifierDBService::GetTables(nsIUrlClassifierCallback* c)
{
+ LOG(("nsUrlClassifierDBService::GetTables"));
+
NS_ENSURE_TRUE(gDbBackgroundThread, NS_ERROR_NOT_INITIALIZED);
// The proxy callback uses the current thread.
nsCOMPtr<nsIUrlClassifierCallback> proxyCallback =
new UrlClassifierCallbackProxy(c);
return mWorkerProxy->GetTables(proxyCallback);
}