зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-central to autoland. a=merge CLOSED TREE
This commit is contained in:
Коммит
8115a1830e
|
@ -154,9 +154,16 @@ var TrackingProtection = {
|
|||
if (this.trackingTable == this.trackingAnnotationTable) {
|
||||
return true;
|
||||
}
|
||||
|
||||
let feature = classifierService.getFeatureByName("tracking-protection");
|
||||
if (!feature) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return new Promise(resolve => {
|
||||
classifierService.asyncClassifyLocalWithTables(uri, this.trackingTable, [], [],
|
||||
(code, list) => resolve(!!list));
|
||||
classifierService.asyncClassifyLocalWithFeatures(uri, [feature],
|
||||
Ci.nsIUrlClassifierFeature.blacklist,
|
||||
list => resolve(!!list.length));
|
||||
});
|
||||
},
|
||||
|
||||
|
|
|
@ -295,8 +295,6 @@ nsresult nsLayoutStatics::Initialize() {
|
|||
// Reporting API.
|
||||
ReportingHeader::Initialize();
|
||||
|
||||
mozilla::net::UrlClassifierFeatureFactory::Initialize();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,103 @@
|
|||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=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/. */
|
||||
|
||||
#include "UrlClassifierFeatureCustomTables.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(UrlClassifierFeatureCustomTables)
|
||||
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIUrlClassifierFeature)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIUrlClassifierFeature)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
NS_IMPL_ADDREF(UrlClassifierFeatureCustomTables)
|
||||
NS_IMPL_RELEASE(UrlClassifierFeatureCustomTables)
|
||||
|
||||
UrlClassifierFeatureCustomTables::UrlClassifierFeatureCustomTables(
|
||||
const nsACString& aName, const nsTArray<nsCString>& aBlacklistTables,
|
||||
const nsTArray<nsCString>& aWhitelistTables)
|
||||
: mName(aName),
|
||||
mBlacklistTables(aBlacklistTables),
|
||||
mWhitelistTables(aWhitelistTables) {}
|
||||
|
||||
UrlClassifierFeatureCustomTables::~UrlClassifierFeatureCustomTables() = default;
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureCustomTables::GetName(nsACString& aName) {
|
||||
aName = mName;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureCustomTables::GetTables(
|
||||
nsIUrlClassifierFeature::listType aListType, nsTArray<nsCString>& aTables) {
|
||||
if (aListType == nsIUrlClassifierFeature::blacklist) {
|
||||
aTables = mBlacklistTables;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (aListType == nsIUrlClassifierFeature::whitelist) {
|
||||
aTables = mWhitelistTables;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureCustomTables::HasTable(
|
||||
const nsACString& aTable, nsIUrlClassifierFeature::listType aListType,
|
||||
bool* aResult) {
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
|
||||
if (aListType == nsIUrlClassifierFeature::blacklist) {
|
||||
*aResult = mBlacklistTables.Contains(aTable);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
if (aListType == nsIUrlClassifierFeature::whitelist) {
|
||||
*aResult = mWhitelistTables.Contains(aTable);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureCustomTables::HasHostInPreferences(
|
||||
const nsACString& aHost, nsIUrlClassifierFeature::listType aListType,
|
||||
nsACString& aPrefTableName, bool* aResult) {
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
*aResult = false;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureCustomTables::GetSkipHostList(nsACString& aList) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureCustomTables::ProcessChannel(nsIChannel* aChannel,
|
||||
const nsACString& aList,
|
||||
bool* aShouldContinue) {
|
||||
NS_ENSURE_ARG_POINTER(aChannel);
|
||||
NS_ENSURE_ARG_POINTER(aShouldContinue);
|
||||
|
||||
// This is not a blocking feature.
|
||||
*aShouldContinue = true;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureCustomTables::GetURIByListType(
|
||||
nsIChannel* aChannel, nsIUrlClassifierFeature::listType aListType,
|
||||
nsIURI** aURI) {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
} // namespace mozilla
|
|
@ -0,0 +1,35 @@
|
|||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=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 mozilla_UrlClassifierFeatureCustomTables_h
|
||||
#define mozilla_UrlClassifierFeatureCustomTables_h
|
||||
|
||||
#include "nsIUrlClassifierFeature.h"
|
||||
#include "nsTArray.h"
|
||||
#include "nsString.h"
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
class UrlClassifierFeatureCustomTables : public nsIUrlClassifierFeature {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIURLCLASSIFIERFEATURE
|
||||
|
||||
explicit UrlClassifierFeatureCustomTables(
|
||||
const nsACString& aName, const nsTArray<nsCString>& aBlacklistTables,
|
||||
const nsTArray<nsCString>& aWhitelistTables);
|
||||
|
||||
private:
|
||||
virtual ~UrlClassifierFeatureCustomTables();
|
||||
|
||||
nsCString mName;
|
||||
nsTArray<nsCString> mBlacklistTables;
|
||||
nsTArray<nsCString> mWhitelistTables;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_UrlClassifierFeatureCustomTables_h
|
|
@ -11,33 +11,23 @@
|
|||
#include "UrlClassifierFeatureLoginReputation.h"
|
||||
#include "UrlClassifierFeatureTrackingProtection.h"
|
||||
#include "UrlClassifierFeatureTrackingAnnotation.h"
|
||||
#include "UrlClassifierFeatureCustomTables.h"
|
||||
|
||||
#include "nsAppRunner.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace net {
|
||||
|
||||
/* static */ void UrlClassifierFeatureFactory::Initialize() {
|
||||
// We want to expose Features only in the parent process.
|
||||
if (!XRE_IsParentProcess()) {
|
||||
return;
|
||||
}
|
||||
|
||||
UrlClassifierFeatureFlash::Initialize();
|
||||
UrlClassifierFeatureTrackingAnnotation::Initialize();
|
||||
UrlClassifierFeatureTrackingProtection::Initialize();
|
||||
}
|
||||
|
||||
/* static */ void UrlClassifierFeatureFactory::Shutdown() {
|
||||
// We want to expose Features only in the parent process.
|
||||
if (!XRE_IsParentProcess()) {
|
||||
return;
|
||||
}
|
||||
|
||||
UrlClassifierFeatureFlash::Shutdown();
|
||||
UrlClassifierFeatureFlash::MaybeShutdown();
|
||||
UrlClassifierFeatureLoginReputation::MaybeShutdown();
|
||||
UrlClassifierFeatureTrackingAnnotation::Shutdown();
|
||||
UrlClassifierFeatureTrackingProtection::Shutdown();
|
||||
UrlClassifierFeatureTrackingAnnotation::MaybeShutdown();
|
||||
UrlClassifierFeatureTrackingProtection::MaybeShutdown();
|
||||
}
|
||||
|
||||
/* static */ void UrlClassifierFeatureFactory::GetFeaturesFromChannel(
|
||||
|
@ -77,5 +67,50 @@ UrlClassifierFeatureFactory::GetFeatureLoginReputation() {
|
|||
return UrlClassifierFeatureLoginReputation::MaybeGetOrCreate();
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<nsIUrlClassifierFeature>
|
||||
UrlClassifierFeatureFactory::GetFeatureByName(const nsACString& aName) {
|
||||
if (!XRE_IsParentProcess()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIUrlClassifierFeature> feature;
|
||||
|
||||
// Tracking Protection
|
||||
feature = UrlClassifierFeatureTrackingProtection::GetIfNameMatches(aName);
|
||||
if (feature) {
|
||||
return feature.forget();
|
||||
}
|
||||
|
||||
// Tracking Annotation
|
||||
feature = UrlClassifierFeatureTrackingAnnotation::GetIfNameMatches(aName);
|
||||
if (feature) {
|
||||
return feature.forget();
|
||||
}
|
||||
|
||||
// Login reputation
|
||||
feature = UrlClassifierFeatureLoginReputation::GetIfNameMatches(aName);
|
||||
if (feature) {
|
||||
return feature.forget();
|
||||
}
|
||||
|
||||
// We use Flash feature just for document loading.
|
||||
feature = UrlClassifierFeatureFlash::GetIfNameMatches(aName);
|
||||
if (feature) {
|
||||
return feature.forget();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<nsIUrlClassifierFeature>
|
||||
UrlClassifierFeatureFactory::CreateFeatureWithTables(
|
||||
const nsACString& aName, const nsTArray<nsCString>& aBlacklistTables,
|
||||
const nsTArray<nsCString>& aWhitelistTables) {
|
||||
nsCOMPtr<nsIUrlClassifierFeature> feature =
|
||||
new UrlClassifierFeatureCustomTables(aName, aBlacklistTables,
|
||||
aWhitelistTables);
|
||||
return feature.forget();
|
||||
}
|
||||
|
||||
} // namespace net
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -18,8 +18,6 @@ namespace net {
|
|||
|
||||
class UrlClassifierFeatureFactory final {
|
||||
public:
|
||||
static void Initialize();
|
||||
|
||||
static void Shutdown();
|
||||
|
||||
static void GetFeaturesFromChannel(
|
||||
|
@ -27,6 +25,13 @@ class UrlClassifierFeatureFactory final {
|
|||
nsTArray<nsCOMPtr<nsIUrlClassifierFeature>>& aFeatures);
|
||||
|
||||
static nsIUrlClassifierFeature* GetFeatureLoginReputation();
|
||||
|
||||
static already_AddRefed<nsIUrlClassifierFeature> GetFeatureByName(
|
||||
const nsACString& aFeatureName);
|
||||
|
||||
static already_AddRefed<nsIUrlClassifierFeature> CreateFeatureWithTables(
|
||||
const nsACString& aName, const nsTArray<nsCString>& aBlacklistTables,
|
||||
const nsTArray<nsCString>& aWhitelistTables);
|
||||
};
|
||||
|
||||
} // namespace net
|
||||
|
|
|
@ -34,6 +34,8 @@ static FlashFeatures sFlashFeaturesMap[] = {
|
|||
nsIHttpChannel::FlashPluginDeniedInSubdocuments},
|
||||
};
|
||||
|
||||
bool IsInitialized() { return !!sFlashFeaturesMap[0].mFeature; }
|
||||
|
||||
} // namespace
|
||||
|
||||
UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
||||
|
@ -53,7 +55,13 @@ UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
|||
"nsIHttpChannel::FlashPluginLastValue is out-of-sync!");
|
||||
}
|
||||
|
||||
/* static */ void UrlClassifierFeatureFlash::Initialize() {
|
||||
/* static */ void UrlClassifierFeatureFlash::MaybeInitialize() {
|
||||
MOZ_ASSERT(XRE_IsParentProcess());
|
||||
|
||||
if (IsInitialized()) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t numFeatures =
|
||||
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
||||
for (uint32_t i = 0; i < numFeatures; ++i) {
|
||||
|
@ -63,7 +71,11 @@ UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
|||
}
|
||||
}
|
||||
|
||||
/* static */ void UrlClassifierFeatureFlash::Shutdown() {
|
||||
/* static */ void UrlClassifierFeatureFlash::MaybeShutdown() {
|
||||
if (!IsInitialized()) {
|
||||
return;
|
||||
}
|
||||
|
||||
uint32_t numFeatures =
|
||||
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
||||
for (uint32_t i = 0; i < numFeatures; ++i) {
|
||||
|
@ -100,6 +112,8 @@ UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
|||
}
|
||||
}
|
||||
|
||||
MaybeInitialize();
|
||||
|
||||
uint32_t numFeatures =
|
||||
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
||||
for (uint32_t i = 0; i < numFeatures; ++i) {
|
||||
|
@ -111,6 +125,24 @@ UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
|||
}
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<nsIUrlClassifierFeature>
|
||||
UrlClassifierFeatureFlash::GetIfNameMatches(const nsACString& aName) {
|
||||
MaybeInitialize();
|
||||
|
||||
uint32_t numFeatures =
|
||||
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
||||
for (uint32_t i = 0; i < numFeatures; ++i) {
|
||||
MOZ_ASSERT(sFlashFeaturesMap[i].mFeature);
|
||||
if (aName.Equals(sFlashFeaturesMap[i].mName)) {
|
||||
nsCOMPtr<nsIUrlClassifierFeature> self =
|
||||
sFlashFeaturesMap[i].mFeature.get();
|
||||
return self.forget();
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureFlash::ProcessChannel(nsIChannel* aChannel,
|
||||
const nsACString& aList,
|
||||
|
|
|
@ -14,13 +14,15 @@ namespace net {
|
|||
|
||||
class UrlClassifierFeatureFlash final : public UrlClassifierFeatureBase {
|
||||
public:
|
||||
static void Initialize();
|
||||
static void Shutdown();
|
||||
static void MaybeShutdown();
|
||||
|
||||
static void MaybeCreate(
|
||||
nsIChannel* aChannel,
|
||||
nsTArray<nsCOMPtr<nsIUrlClassifierFeature>>& aFeatures);
|
||||
|
||||
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||
const nsACString& aName);
|
||||
|
||||
NS_IMETHOD
|
||||
ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
||||
bool* aShouldContinue) override;
|
||||
|
@ -32,6 +34,8 @@ class UrlClassifierFeatureFlash final : public UrlClassifierFeatureBase {
|
|||
private:
|
||||
explicit UrlClassifierFeatureFlash(uint32_t aId);
|
||||
|
||||
static void MaybeInitialize();
|
||||
|
||||
nsIHttpChannel::FlashPluginState mFlashPluginState;
|
||||
};
|
||||
|
||||
|
|
|
@ -13,6 +13,8 @@ namespace net {
|
|||
|
||||
namespace {
|
||||
|
||||
#define LOGIN_REPUTATION_FEATURE_NAME "login-reputation"
|
||||
|
||||
#define PREF_PASSWORD_ALLOW_TABLE "urlclassifier.passwordAllowTable"
|
||||
|
||||
StaticRefPtr<UrlClassifierFeatureLoginReputation> gFeatureLoginReputation;
|
||||
|
@ -20,7 +22,8 @@ StaticRefPtr<UrlClassifierFeatureLoginReputation> gFeatureLoginReputation;
|
|||
} // namespace
|
||||
|
||||
UrlClassifierFeatureLoginReputation::UrlClassifierFeatureLoginReputation()
|
||||
: UrlClassifierFeatureBase(NS_LITERAL_CSTRING("login-reputation"),
|
||||
: UrlClassifierFeatureBase(
|
||||
NS_LITERAL_CSTRING(LOGIN_REPUTATION_FEATURE_NAME),
|
||||
EmptyCString(), // blacklist tables
|
||||
NS_LITERAL_CSTRING(PREF_PASSWORD_ALLOW_TABLE),
|
||||
EmptyCString(), // blacklist pref
|
||||
|
@ -53,6 +56,16 @@ UrlClassifierFeatureLoginReputation::MaybeGetOrCreate() {
|
|||
return gFeatureLoginReputation;
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<nsIUrlClassifierFeature>
|
||||
UrlClassifierFeatureLoginReputation::GetIfNameMatches(const nsACString& aName) {
|
||||
if (!aName.EqualsLiteral(LOGIN_REPUTATION_FEATURE_NAME)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIUrlClassifierFeature> self = MaybeGetOrCreate();
|
||||
return self.forget();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
UrlClassifierFeatureLoginReputation::ProcessChannel(nsIChannel* aChannel,
|
||||
const nsACString& aList,
|
||||
|
|
|
@ -21,6 +21,9 @@ class UrlClassifierFeatureLoginReputation final
|
|||
|
||||
static nsIUrlClassifierFeature* MaybeGetOrCreate();
|
||||
|
||||
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||
const nsACString& aName);
|
||||
|
||||
NS_IMETHOD
|
||||
GetTables(nsIUrlClassifierFeature::listType aListType,
|
||||
nsTArray<nsCString>& aResult) override;
|
||||
|
|
|
@ -21,6 +21,8 @@ namespace net {
|
|||
|
||||
namespace {
|
||||
|
||||
#define TRACKING_ANNOTATION_FEATURE_NAME "tracking-annotation"
|
||||
|
||||
#define URLCLASSIFIER_ANNOTATION_BLACKLIST \
|
||||
"urlclassifier.trackingAnnotationTable"
|
||||
#define URLCLASSIFIER_ANNOTATION_BLACKLIST_TEST_ENTRIES \
|
||||
|
@ -109,7 +111,7 @@ static void LowerPriorityHelper(nsIChannel* aChannel) {
|
|||
|
||||
UrlClassifierFeatureTrackingAnnotation::UrlClassifierFeatureTrackingAnnotation()
|
||||
: UrlClassifierFeatureBase(
|
||||
NS_LITERAL_CSTRING("tracking-annotation"),
|
||||
NS_LITERAL_CSTRING(TRACKING_ANNOTATION_FEATURE_NAME),
|
||||
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_BLACKLIST),
|
||||
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_WHITELIST),
|
||||
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_BLACKLIST_TEST_ENTRIES),
|
||||
|
@ -118,25 +120,27 @@ UrlClassifierFeatureTrackingAnnotation::UrlClassifierFeatureTrackingAnnotation()
|
|||
NS_LITERAL_CSTRING(TABLE_ANNOTATION_WHITELIST_PREF),
|
||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_ANNOTATION_SKIP_URLS)) {}
|
||||
|
||||
/* static */ void UrlClassifierFeatureTrackingAnnotation::Initialize() {
|
||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: Initializing"));
|
||||
MOZ_ASSERT(!gFeatureTrackingAnnotation);
|
||||
/* static */ void UrlClassifierFeatureTrackingAnnotation::MaybeInitialize() {
|
||||
MOZ_ASSERT(XRE_IsParentProcess());
|
||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: MaybeInitialize"));
|
||||
|
||||
if (!gFeatureTrackingAnnotation) {
|
||||
gFeatureTrackingAnnotation = new UrlClassifierFeatureTrackingAnnotation();
|
||||
gFeatureTrackingAnnotation->InitializePreferences();
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ void UrlClassifierFeatureTrackingAnnotation::Shutdown() {
|
||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: Shutdown"));
|
||||
MOZ_ASSERT(gFeatureTrackingAnnotation);
|
||||
/* static */ void UrlClassifierFeatureTrackingAnnotation::MaybeShutdown() {
|
||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: MaybeShutdown"));
|
||||
|
||||
if (gFeatureTrackingAnnotation) {
|
||||
gFeatureTrackingAnnotation->ShutdownPreferences();
|
||||
gFeatureTrackingAnnotation = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<UrlClassifierFeatureTrackingAnnotation>
|
||||
UrlClassifierFeatureTrackingAnnotation::MaybeCreate(nsIChannel* aChannel) {
|
||||
MOZ_ASSERT(gFeatureTrackingAnnotation);
|
||||
MOZ_ASSERT(aChannel);
|
||||
|
||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: MaybeCreate for channel %p",
|
||||
|
@ -151,6 +155,24 @@ UrlClassifierFeatureTrackingAnnotation::MaybeCreate(nsIChannel* aChannel) {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
MaybeInitialize();
|
||||
MOZ_ASSERT(gFeatureTrackingAnnotation);
|
||||
|
||||
RefPtr<UrlClassifierFeatureTrackingAnnotation> self =
|
||||
gFeatureTrackingAnnotation;
|
||||
return self.forget();
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<nsIUrlClassifierFeature>
|
||||
UrlClassifierFeatureTrackingAnnotation::GetIfNameMatches(
|
||||
const nsACString& aName) {
|
||||
if (!aName.EqualsLiteral(TRACKING_ANNOTATION_FEATURE_NAME)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MaybeInitialize();
|
||||
MOZ_ASSERT(gFeatureTrackingAnnotation);
|
||||
|
||||
RefPtr<UrlClassifierFeatureTrackingAnnotation> self =
|
||||
gFeatureTrackingAnnotation;
|
||||
return self.forget();
|
||||
|
|
|
@ -17,13 +17,14 @@ namespace net {
|
|||
class UrlClassifierFeatureTrackingAnnotation final
|
||||
: public UrlClassifierFeatureBase {
|
||||
public:
|
||||
static void Initialize();
|
||||
|
||||
static void Shutdown();
|
||||
static void MaybeShutdown();
|
||||
|
||||
static already_AddRefed<UrlClassifierFeatureTrackingAnnotation> MaybeCreate(
|
||||
nsIChannel* aChannel);
|
||||
|
||||
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||
const nsACString& aName);
|
||||
|
||||
NS_IMETHOD ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
||||
bool* aShouldContinue) override;
|
||||
|
||||
|
@ -33,6 +34,8 @@ class UrlClassifierFeatureTrackingAnnotation final
|
|||
|
||||
private:
|
||||
UrlClassifierFeatureTrackingAnnotation();
|
||||
|
||||
static void MaybeInitialize();
|
||||
};
|
||||
|
||||
} // namespace net
|
||||
|
|
|
@ -17,6 +17,8 @@ namespace net {
|
|||
|
||||
namespace {
|
||||
|
||||
#define TRACKING_PROTECTION_FEATURE_NAME "tracking-protection"
|
||||
|
||||
#define URLCLASSIFIER_TRACKING_BLACKLIST "urlclassifier.trackingTable"
|
||||
#define URLCLASSIFIER_TRACKING_BLACKLIST_TEST_ENTRIES \
|
||||
"urlclassifier.trackingTable.testEntries"
|
||||
|
@ -32,7 +34,7 @@ StaticRefPtr<UrlClassifierFeatureTrackingProtection> gFeatureTrackingProtection;
|
|||
|
||||
UrlClassifierFeatureTrackingProtection::UrlClassifierFeatureTrackingProtection()
|
||||
: UrlClassifierFeatureBase(
|
||||
NS_LITERAL_CSTRING("tracking-protection"),
|
||||
NS_LITERAL_CSTRING(TRACKING_PROTECTION_FEATURE_NAME),
|
||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_BLACKLIST),
|
||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_WHITELIST),
|
||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_BLACKLIST_TEST_ENTRIES),
|
||||
|
@ -40,25 +42,27 @@ UrlClassifierFeatureTrackingProtection::UrlClassifierFeatureTrackingProtection()
|
|||
NS_LITERAL_CSTRING(TABLE_TRACKING_BLACKLIST_PREF),
|
||||
NS_LITERAL_CSTRING(TABLE_TRACKING_WHITELIST_PREF), EmptyCString()) {}
|
||||
|
||||
/* static */ void UrlClassifierFeatureTrackingProtection::Initialize() {
|
||||
UC_LOG(("UrlClassifierFeatureTrackingProtection: Initializing"));
|
||||
MOZ_ASSERT(!gFeatureTrackingProtection);
|
||||
/* static */ void UrlClassifierFeatureTrackingProtection::MaybeInitialize() {
|
||||
MOZ_ASSERT(XRE_IsParentProcess());
|
||||
UC_LOG(("UrlClassifierFeatureTrackingProtection: MaybeInitialize"));
|
||||
|
||||
if (!gFeatureTrackingProtection) {
|
||||
gFeatureTrackingProtection = new UrlClassifierFeatureTrackingProtection();
|
||||
gFeatureTrackingProtection->InitializePreferences();
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ void UrlClassifierFeatureTrackingProtection::Shutdown() {
|
||||
/* static */ void UrlClassifierFeatureTrackingProtection::MaybeShutdown() {
|
||||
UC_LOG(("UrlClassifierFeatureTrackingProtection: Shutdown"));
|
||||
MOZ_ASSERT(gFeatureTrackingProtection);
|
||||
|
||||
if (gFeatureTrackingProtection) {
|
||||
gFeatureTrackingProtection->ShutdownPreferences();
|
||||
gFeatureTrackingProtection = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<UrlClassifierFeatureTrackingProtection>
|
||||
UrlClassifierFeatureTrackingProtection::MaybeCreate(nsIChannel* aChannel) {
|
||||
MOZ_ASSERT(gFeatureTrackingProtection);
|
||||
MOZ_ASSERT(aChannel);
|
||||
|
||||
UC_LOG(("UrlClassifierFeatureTrackingProtection: MaybeCreate for channel %p",
|
||||
|
@ -98,6 +102,24 @@ UrlClassifierFeatureTrackingProtection::MaybeCreate(nsIChannel* aChannel) {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
MaybeInitialize();
|
||||
MOZ_ASSERT(gFeatureTrackingProtection);
|
||||
|
||||
RefPtr<UrlClassifierFeatureTrackingProtection> self =
|
||||
gFeatureTrackingProtection;
|
||||
return self.forget();
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<nsIUrlClassifierFeature>
|
||||
UrlClassifierFeatureTrackingProtection::GetIfNameMatches(
|
||||
const nsACString& aName) {
|
||||
if (!aName.EqualsLiteral(TRACKING_PROTECTION_FEATURE_NAME)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MaybeInitialize();
|
||||
MOZ_ASSERT(gFeatureTrackingProtection);
|
||||
|
||||
RefPtr<UrlClassifierFeatureTrackingProtection> self =
|
||||
gFeatureTrackingProtection;
|
||||
return self.forget();
|
||||
|
|
|
@ -17,13 +17,14 @@ namespace net {
|
|||
class UrlClassifierFeatureTrackingProtection final
|
||||
: public UrlClassifierFeatureBase {
|
||||
public:
|
||||
static void Initialize();
|
||||
|
||||
static void Shutdown();
|
||||
static void MaybeShutdown();
|
||||
|
||||
static already_AddRefed<UrlClassifierFeatureTrackingProtection> MaybeCreate(
|
||||
nsIChannel* aChannel);
|
||||
|
||||
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||
const nsACString& aName);
|
||||
|
||||
NS_IMETHOD ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
||||
bool* aShouldContinue) override;
|
||||
|
||||
|
@ -33,6 +34,8 @@ class UrlClassifierFeatureTrackingProtection final
|
|||
|
||||
private:
|
||||
UrlClassifierFeatureTrackingProtection();
|
||||
|
||||
static void MaybeInitialize();
|
||||
};
|
||||
|
||||
} // namespace net
|
||||
|
|
|
@ -22,6 +22,7 @@ UNIFIED_SOURCES += [
|
|||
'nsChannelClassifier.cpp',
|
||||
'UrlClassifierCommon.cpp',
|
||||
'UrlClassifierFeatureBase.cpp',
|
||||
'UrlClassifierFeatureCustomTables.cpp',
|
||||
'UrlClassifierFeatureFactory.cpp',
|
||||
'UrlClassifierFeatureFlash.cpp',
|
||||
'UrlClassifierFeatureLoginReputation.cpp',
|
||||
|
|
|
@ -81,20 +81,6 @@ interface nsIURIClassifier : nsISupports
|
|||
in boolean aTrackingProtectionEnabled,
|
||||
in nsIURIClassifierCallback aCallback);
|
||||
|
||||
/**
|
||||
* Asynchronously classify a URI with a comma-separated string
|
||||
* containing the given tables. This does not make network requests.
|
||||
* The callback does NOT totally follow nsIURIClassifierCallback's
|
||||
* semantics described above. Only |aList| will be meaningful, which
|
||||
* is a comma separated list of table names. (same as what classifyLocal
|
||||
* returns.)
|
||||
*/
|
||||
void asyncClassifyLocalWithTables(in nsIURI aURI,
|
||||
in ACString aTables,
|
||||
in Array<ACString> aExtraTablesByPrefs,
|
||||
in Array<ACString> aExtraEntriesByPrefs,
|
||||
in nsIURIClassifierCallback aCallback);
|
||||
|
||||
/**
|
||||
* Asynchronously classify a URI with list of features. This does not make
|
||||
* network requests.
|
||||
|
@ -104,6 +90,19 @@ interface nsIURIClassifier : nsISupports
|
|||
in nsIUrlClassifierFeature_listType aListType,
|
||||
in nsIUrlClassifierFeatureCallback aCallback);
|
||||
|
||||
/**
|
||||
* Returns a feature named aFeatureName.
|
||||
*/
|
||||
nsIUrlClassifierFeature getFeatureByName(in ACString aFeatureName);
|
||||
|
||||
/**
|
||||
* Create a new feature with a list of tables. This method is just for
|
||||
* testing! Don't use it elsewhere.
|
||||
*/
|
||||
nsIUrlClassifierFeature createFeatureWithTables(in ACString aName,
|
||||
in Array<ACString> aBlacklistTables,
|
||||
in Array<ACString> aWhitelistTables);
|
||||
|
||||
/**
|
||||
* Report to the provider that a Safe Browsing warning was shown.
|
||||
*
|
||||
|
|
|
@ -2245,18 +2245,20 @@ SpecialPowersAPI.prototype = {
|
|||
let classifierService =
|
||||
Cc["@mozilla.org/url-classifier/dbservice;1"].getService(Ci.nsIURIClassifier);
|
||||
|
||||
let wrapCallback = (...args) => {
|
||||
let wrapCallback = results => {
|
||||
Services.tm.dispatchToMainThread(() => {
|
||||
if (typeof callback == "function") {
|
||||
callback(...args);
|
||||
callback(wrapIfUnwrapped(results));
|
||||
} else {
|
||||
callback.onClassifyComplete.call(undefined, ...args);
|
||||
callback.onClassifyComplete.call(undefined, wrapIfUnwrapped(results));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
return classifierService.asyncClassifyLocalWithTables(unwrapIfWrapped(uri),
|
||||
tables, [], [],
|
||||
let feature = classifierService.createFeatureWithTables("test", tables.split(","), []);
|
||||
return classifierService.asyncClassifyLocalWithFeatures(unwrapIfWrapped(uri),
|
||||
[feature],
|
||||
Ci.nsIUrlClassifierFeature.blacklist,
|
||||
wrapCallback);
|
||||
},
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#define UrlClassifierTelemetryUtils_h__
|
||||
|
||||
#include "mozilla/TypedEnumBits.h"
|
||||
#include "nsISupportsImpl.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace safebrowsing {
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "mozilla/dom/ContentChild.h"
|
||||
#include "mozilla/dom/PermissionMessageUtils.h"
|
||||
#include "mozilla/dom/URLClassifierChild.h"
|
||||
#include "mozilla/net/UrlClassifierFeatureFactory.h"
|
||||
#include "mozilla/net/UrlClassifierFeatureResult.h"
|
||||
#include "mozilla/ipc/URIUtils.h"
|
||||
#include "mozilla/SyncRunnable.h"
|
||||
|
@ -240,131 +241,6 @@ class FeatureHolder final {
|
|||
nsTArray<RefPtr<TableData>> mTableData;
|
||||
};
|
||||
|
||||
// Simple feature which wraps preferences and tables received by
|
||||
// AsyncClassifyLocalWithTables() as arguments.
|
||||
class DummyFeature final : public nsIUrlClassifierFeature {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
enum Type { ePreference, eTable };
|
||||
|
||||
explicit DummyFeature(const nsACString& aName)
|
||||
: mType(eTable), mName(aName) {}
|
||||
|
||||
explicit DummyFeature(const nsACString& aPreference,
|
||||
nsTArray<nsCString>& aHostsFromPreference)
|
||||
: mType(ePreference),
|
||||
mName(aPreference),
|
||||
mHostsFromPreference(aHostsFromPreference) {}
|
||||
|
||||
NS_IMETHOD
|
||||
GetName(nsACString& aName) override {
|
||||
aName = mName;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
GetTables(nsIUrlClassifierFeature::listType,
|
||||
nsTArray<nsCString>& aTables) override {
|
||||
if (mType == eTable) {
|
||||
aTables.AppendElement(mName);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
HasTable(const nsACString& aTable, nsIUrlClassifierFeature::listType,
|
||||
bool* aResult) override {
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
*aResult = mType == eTable && aTable == mName;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
HasHostInPreferences(const nsACString& aHost,
|
||||
nsIUrlClassifierFeature::listType,
|
||||
nsACString& aPrefTableName, bool* aResult) override {
|
||||
NS_ENSURE_ARG_POINTER(aResult);
|
||||
*aResult = mHostsFromPreference.Contains(aHost);
|
||||
aPrefTableName = mName;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
GetSkipHostList(nsACString& aList) override {
|
||||
// Nothing to do here.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
||||
bool* aShouldContinue) override {
|
||||
NS_ENSURE_ARG_POINTER(aShouldContinue);
|
||||
*aShouldContinue = true;
|
||||
|
||||
// Nothing to do here.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
GetURIByListType(nsIChannel* aChannel,
|
||||
nsIUrlClassifierFeature::listType aListType,
|
||||
nsIURI** aURI) override {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
private:
|
||||
~DummyFeature() = default;
|
||||
|
||||
Type mType;
|
||||
nsCString mName;
|
||||
nsTArray<nsCString> mHostsFromPreference;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(DummyFeature, nsIUrlClassifierFeature)
|
||||
|
||||
// This class is a proxy from nsIUrlClassifierFeatureCallback to
|
||||
// nsIUrlClassifierCallback.
|
||||
class CallbackWrapper final : public nsIUrlClassifierFeatureCallback {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
explicit CallbackWrapper(nsIURIClassifierCallback* aCallback)
|
||||
: mCallback(aCallback) {
|
||||
MOZ_ASSERT(aCallback);
|
||||
}
|
||||
|
||||
NS_IMETHOD
|
||||
OnClassifyComplete(const nsTArray<RefPtr<nsIUrlClassifierFeatureResult>>&
|
||||
aResults) override {
|
||||
nsAutoCString finalList;
|
||||
|
||||
for (nsIUrlClassifierFeatureResult* result : aResults) {
|
||||
const nsCString& list =
|
||||
static_cast<mozilla::net::UrlClassifierFeatureResult*>(result)
|
||||
->List();
|
||||
MOZ_ASSERT(!list.IsEmpty());
|
||||
|
||||
if (!finalList.IsEmpty()) {
|
||||
finalList.AppendLiteral(",");
|
||||
}
|
||||
|
||||
finalList.Append(list);
|
||||
}
|
||||
|
||||
mCallback->OnClassifyComplete(NS_OK, finalList, EmptyCString(),
|
||||
EmptyCString());
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
~CallbackWrapper() = default;
|
||||
|
||||
nsCOMPtr<nsIURIClassifierCallback> mCallback;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS(CallbackWrapper, nsIUrlClassifierFeatureCallback)
|
||||
|
||||
} // namespace
|
||||
|
||||
using namespace mozilla;
|
||||
|
@ -2003,50 +1879,6 @@ nsUrlClassifierDBService::Classify(nsIPrincipal* aPrincipal,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUrlClassifierDBService::AsyncClassifyLocalWithTables(
|
||||
nsIURI* aURI, const nsACString& aTables,
|
||||
const nsTArray<nsCString>& aExtraTablesByPrefs,
|
||||
const nsTArray<nsCString>& aExtraEntriesByPrefs,
|
||||
nsIURIClassifierCallback* aCallback) {
|
||||
MOZ_ASSERT(NS_IsMainThread(),
|
||||
"AsyncClassifyLocalWithTables must be called "
|
||||
"on main thread");
|
||||
|
||||
if (aExtraTablesByPrefs.Length() != aExtraEntriesByPrefs.Length()) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (gShuttingDownThread) {
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
// Let's convert the current params in a list of features.
|
||||
nsTArray<RefPtr<nsIUrlClassifierFeature>> features;
|
||||
|
||||
for (uint32_t i = 0; i < aExtraTablesByPrefs.Length(); ++i) {
|
||||
nsTArray<nsCString> hosts;
|
||||
Classifier::SplitTables(aExtraEntriesByPrefs[i], hosts);
|
||||
RefPtr<DummyFeature> feature =
|
||||
new DummyFeature(aExtraTablesByPrefs[i], hosts);
|
||||
features.AppendElement(feature);
|
||||
}
|
||||
|
||||
nsTArray<nsCString> tables;
|
||||
Classifier::SplitTables(aTables, tables);
|
||||
for (uint32_t i = 0; i < tables.Length(); ++i) {
|
||||
RefPtr<DummyFeature> feature = new DummyFeature(tables[i]);
|
||||
features.AppendElement(feature);
|
||||
}
|
||||
|
||||
RefPtr<CallbackWrapper> callback = new CallbackWrapper(aCallback);
|
||||
|
||||
// Doesn't really matter if we pass blacklist, whitelist or any other list
|
||||
// here because the DummyFeature returns always the same values.
|
||||
return AsyncClassifyLocalWithFeatures(
|
||||
aURI, features, nsIUrlClassifierFeature::blacklist, callback);
|
||||
}
|
||||
|
||||
class ThreatHitReportListener final : public nsIStreamListener {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
@ -2317,7 +2149,7 @@ nsresult nsUrlClassifierDBService::LookupURI(
|
|||
nsCString table = aExtraTablesByPrefs[i];
|
||||
nsCOMPtr<nsIUrlClassifierCallback> callback(c);
|
||||
nsCOMPtr<nsIRunnable> cbRunnable = NS_NewRunnableFunction(
|
||||
"nsUrlClassifierDBService::AsyncClassifyLocalWithTables",
|
||||
"nsUrlClassifierDBService::LookupURI",
|
||||
[callback, table]() -> void { callback->HandleEvent(table); });
|
||||
|
||||
NS_DispatchToMainThread(cbRunnable);
|
||||
|
@ -2852,3 +2684,34 @@ bool nsUrlClassifierDBService::AsyncClassifyLocalWithFeaturesUsingPreferences(
|
|||
NS_DispatchToMainThread(cbRunnable);
|
||||
return true;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUrlClassifierDBService::GetFeatureByName(const nsACString& aFeatureName,
|
||||
nsIUrlClassifierFeature** aFeature) {
|
||||
NS_ENSURE_ARG_POINTER(aFeature);
|
||||
nsCOMPtr<nsIUrlClassifierFeature> feature =
|
||||
mozilla::net::UrlClassifierFeatureFactory::GetFeatureByName(aFeatureName);
|
||||
if (NS_WARN_IF(!feature)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
feature.forget(aFeature);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsUrlClassifierDBService::CreateFeatureWithTables(
|
||||
const nsACString& aName, const nsTArray<nsCString>& aBlacklistTables,
|
||||
const nsTArray<nsCString>& aWhitelistTables,
|
||||
nsIUrlClassifierFeature** aFeature) {
|
||||
NS_ENSURE_ARG_POINTER(aFeature);
|
||||
nsCOMPtr<nsIUrlClassifierFeature> feature =
|
||||
mozilla::net::UrlClassifierFeatureFactory::CreateFeatureWithTables(
|
||||
aName, aBlacklistTables, aWhitelistTables);
|
||||
if (NS_WARN_IF(!feature)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
feature.forget(aFeature);
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -147,9 +147,15 @@ function testService() {
|
|||
SpecialPowers.doUrlClassify(prin, null, test.trackingProtection, function(errorCode) {
|
||||
is(errorCode, test.result,
|
||||
`Successful asynchronous classification of ${test.url} with TP=${test.trackingProtection}`);
|
||||
SpecialPowers.doUrlClassifyLocal(uri, tables, function(errorCode1, tables1) {
|
||||
is(tables1, test.table,
|
||||
SpecialPowers.doUrlClassifyLocal(uri, tables, function(results) {
|
||||
if (results.length == 0) {
|
||||
is(test.table, "",
|
||||
`Successful asynchronous local classification of ${test.url} with TP=${test.trackingProtection}`);
|
||||
} else {
|
||||
let result = results[0].QueryInterface(Ci.nsIUrlClassifierFeatureResult);
|
||||
is(result.list, test.table,
|
||||
`Successful asynchronous local classification of ${test.url} with TP=${test.trackingProtection}`);
|
||||
}
|
||||
runNextTest();
|
||||
});
|
||||
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
add_test(async _ => {
|
||||
Services.prefs.setBoolPref("browser.safebrowsing.passwords.enabled", true);
|
||||
|
||||
let classifier = Cc["@mozilla.org/url-classifier/dbservice;1"]
|
||||
.getService(Ci.nsIURIClassifier);
|
||||
ok(!!classifier, "We have the URI-Classifier");
|
||||
|
||||
var tests = [
|
||||
{ name: "a", expectedResult: false },
|
||||
{ name: "tracking-annotation", expectedResult: true },
|
||||
{ name: "tracking-protection", expectedResult: true },
|
||||
{ name: "login-reputation", expectedResult: true },
|
||||
];
|
||||
|
||||
tests.forEach(test => {
|
||||
let feature;
|
||||
try {
|
||||
feature = classifier.getFeatureByName(test.name);
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
equal(!!feature, test.expectedResult, "Exceptected result for: " + test.name);
|
||||
if (feature) {
|
||||
equal(feature.name, test.name, "Feature name matches");
|
||||
}
|
||||
});
|
||||
|
||||
let uri = Services.io.newURI("https://example.com");
|
||||
|
||||
let feature = classifier.getFeatureByName("tracking-protection");
|
||||
|
||||
let results = await new Promise(resolve => {
|
||||
classifier.asyncClassifyLocalWithFeatures(uri, [feature],
|
||||
Ci.nsIUrlClassifierFeature.blacklist,
|
||||
r => { resolve(r); });
|
||||
});
|
||||
equal(results.length, 0, "No tracker");
|
||||
|
||||
Services.prefs.setCharPref("urlclassifier.trackingTable.testEntries", "example.com");
|
||||
|
||||
feature = classifier.getFeatureByName("tracking-protection");
|
||||
|
||||
results = await new Promise(resolve => {
|
||||
classifier.asyncClassifyLocalWithFeatures(uri, [feature],
|
||||
Ci.nsIUrlClassifierFeature.blacklist,
|
||||
r => { resolve(r); });
|
||||
});
|
||||
equal(results.length, 1, "Tracker");
|
||||
let result = results[0];
|
||||
equal(result.feature.name, "tracking-protection", "Correct feature");
|
||||
equal(result.list, "tracking-blacklist-pref", "Correct list");
|
||||
|
||||
Services.prefs.clearUserPref("browser.safebrowsing.password.enabled");
|
||||
run_next_test();
|
||||
});
|
|
@ -24,3 +24,4 @@ support-files =
|
|||
[test_malwaretable_pref.js]
|
||||
[test_safebrowsing_protobuf.js]
|
||||
[test_platform_specific_threats.js]
|
||||
[test_features.js]
|
||||
|
|
Загрузка…
Ссылка в новой задаче