#include "Common.h" #include "HashStore.h" #include "Classifier.h" #include "nsAppDirectoryServiceDefs.h" #include "nsTArray.h" #include "nsIThread.h" #include "nsThreadUtils.h" #include "nsUrlClassifierUtils.h" using namespace mozilla; using namespace mozilla::safebrowsing; template void RunTestInNewThread(Function&& aFunction) { nsCOMPtr r = NS_NewRunnableFunction(mozilla::Forward(aFunction)); nsCOMPtr testingThread; nsresult rv = NS_NewThread(getter_AddRefs(testingThread), r); ASSERT_EQ(rv, NS_OK); testingThread->Shutdown(); } already_AddRefed GetFile(const nsTArray& path) { nsCOMPtr file; nsresult rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, getter_AddRefs(file)); if (NS_WARN_IF(NS_FAILED(rv))) { return nullptr; } for (uint32_t i = 0; i < path.Length(); i++) { file->Append(path[i]); } return file.forget(); } void ApplyUpdate(nsTArray& updates) { nsCOMPtr file; NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, getter_AddRefs(file)); UniquePtr classifier(new Classifier()); classifier->Open(*file); { // Force nsIUrlClassifierUtils loading on main thread // because nsIUrlClassifierDBService will not run in advance // in gtest. nsresult rv; nsCOMPtr dummy = do_GetService(NS_URLCLASSIFIERUTILS_CONTRACTID, &rv); ASSERT_TRUE(NS_SUCCEEDED(rv)); } RunTestInNewThread([&] () -> void { classifier->ApplyUpdates(&updates); }); } void ApplyUpdate(TableUpdate* update) { nsTArray updates = { update }; ApplyUpdate(updates); } void PrefixArrayToPrefixStringMap(const nsTArray& prefixArray, PrefixStringMap& out) { out.Clear(); for (uint32_t i = 0; i < prefixArray.Length(); i++) { const nsCString& prefix = prefixArray[i]; nsCString* prefixString = out.LookupOrAdd(prefix.Length()); prefixString->Append(prefix.BeginReading(), prefix.Length()); } }