зеркало из 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) {
|
if (this.trackingTable == this.trackingAnnotationTable) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let feature = classifierService.getFeatureByName("tracking-protection");
|
||||||
|
if (!feature) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
classifierService.asyncClassifyLocalWithTables(uri, this.trackingTable, [], [],
|
classifierService.asyncClassifyLocalWithFeatures(uri, [feature],
|
||||||
(code, list) => resolve(!!list));
|
Ci.nsIUrlClassifierFeature.blacklist,
|
||||||
|
list => resolve(!!list.length));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -295,8 +295,6 @@ nsresult nsLayoutStatics::Initialize() {
|
||||||
// Reporting API.
|
// Reporting API.
|
||||||
ReportingHeader::Initialize();
|
ReportingHeader::Initialize();
|
||||||
|
|
||||||
mozilla::net::UrlClassifierFeatureFactory::Initialize();
|
|
||||||
|
|
||||||
return NS_OK;
|
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 "UrlClassifierFeatureLoginReputation.h"
|
||||||
#include "UrlClassifierFeatureTrackingProtection.h"
|
#include "UrlClassifierFeatureTrackingProtection.h"
|
||||||
#include "UrlClassifierFeatureTrackingAnnotation.h"
|
#include "UrlClassifierFeatureTrackingAnnotation.h"
|
||||||
|
#include "UrlClassifierFeatureCustomTables.h"
|
||||||
|
|
||||||
#include "nsAppRunner.h"
|
#include "nsAppRunner.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace net {
|
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() {
|
/* static */ void UrlClassifierFeatureFactory::Shutdown() {
|
||||||
// We want to expose Features only in the parent process.
|
// We want to expose Features only in the parent process.
|
||||||
if (!XRE_IsParentProcess()) {
|
if (!XRE_IsParentProcess()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
UrlClassifierFeatureFlash::Shutdown();
|
UrlClassifierFeatureFlash::MaybeShutdown();
|
||||||
UrlClassifierFeatureLoginReputation::MaybeShutdown();
|
UrlClassifierFeatureLoginReputation::MaybeShutdown();
|
||||||
UrlClassifierFeatureTrackingAnnotation::Shutdown();
|
UrlClassifierFeatureTrackingAnnotation::MaybeShutdown();
|
||||||
UrlClassifierFeatureTrackingProtection::Shutdown();
|
UrlClassifierFeatureTrackingProtection::MaybeShutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ void UrlClassifierFeatureFactory::GetFeaturesFromChannel(
|
/* static */ void UrlClassifierFeatureFactory::GetFeaturesFromChannel(
|
||||||
|
@ -77,5 +67,50 @@ UrlClassifierFeatureFactory::GetFeatureLoginReputation() {
|
||||||
return UrlClassifierFeatureLoginReputation::MaybeGetOrCreate();
|
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 net
|
||||||
} // namespace mozilla
|
} // namespace mozilla
|
||||||
|
|
|
@ -18,8 +18,6 @@ namespace net {
|
||||||
|
|
||||||
class UrlClassifierFeatureFactory final {
|
class UrlClassifierFeatureFactory final {
|
||||||
public:
|
public:
|
||||||
static void Initialize();
|
|
||||||
|
|
||||||
static void Shutdown();
|
static void Shutdown();
|
||||||
|
|
||||||
static void GetFeaturesFromChannel(
|
static void GetFeaturesFromChannel(
|
||||||
|
@ -27,6 +25,13 @@ class UrlClassifierFeatureFactory final {
|
||||||
nsTArray<nsCOMPtr<nsIUrlClassifierFeature>>& aFeatures);
|
nsTArray<nsCOMPtr<nsIUrlClassifierFeature>>& aFeatures);
|
||||||
|
|
||||||
static nsIUrlClassifierFeature* GetFeatureLoginReputation();
|
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
|
} // namespace net
|
||||||
|
|
|
@ -34,6 +34,8 @@ static FlashFeatures sFlashFeaturesMap[] = {
|
||||||
nsIHttpChannel::FlashPluginDeniedInSubdocuments},
|
nsIHttpChannel::FlashPluginDeniedInSubdocuments},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
bool IsInitialized() { return !!sFlashFeaturesMap[0].mFeature; }
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
||||||
|
@ -53,7 +55,13 @@ UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
||||||
"nsIHttpChannel::FlashPluginLastValue is out-of-sync!");
|
"nsIHttpChannel::FlashPluginLastValue is out-of-sync!");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ void UrlClassifierFeatureFlash::Initialize() {
|
/* static */ void UrlClassifierFeatureFlash::MaybeInitialize() {
|
||||||
|
MOZ_ASSERT(XRE_IsParentProcess());
|
||||||
|
|
||||||
|
if (IsInitialized()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t numFeatures =
|
uint32_t numFeatures =
|
||||||
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
||||||
for (uint32_t i = 0; i < numFeatures; ++i) {
|
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 =
|
uint32_t numFeatures =
|
||||||
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
||||||
for (uint32_t i = 0; i < numFeatures; ++i) {
|
for (uint32_t i = 0; i < numFeatures; ++i) {
|
||||||
|
@ -100,6 +112,8 @@ UrlClassifierFeatureFlash::UrlClassifierFeatureFlash(uint32_t aId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MaybeInitialize();
|
||||||
|
|
||||||
uint32_t numFeatures =
|
uint32_t numFeatures =
|
||||||
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
(sizeof(sFlashFeaturesMap) / sizeof(sFlashFeaturesMap[0]));
|
||||||
for (uint32_t i = 0; i < numFeatures; ++i) {
|
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
|
NS_IMETHODIMP
|
||||||
UrlClassifierFeatureFlash::ProcessChannel(nsIChannel* aChannel,
|
UrlClassifierFeatureFlash::ProcessChannel(nsIChannel* aChannel,
|
||||||
const nsACString& aList,
|
const nsACString& aList,
|
||||||
|
|
|
@ -14,13 +14,15 @@ namespace net {
|
||||||
|
|
||||||
class UrlClassifierFeatureFlash final : public UrlClassifierFeatureBase {
|
class UrlClassifierFeatureFlash final : public UrlClassifierFeatureBase {
|
||||||
public:
|
public:
|
||||||
static void Initialize();
|
static void MaybeShutdown();
|
||||||
static void Shutdown();
|
|
||||||
|
|
||||||
static void MaybeCreate(
|
static void MaybeCreate(
|
||||||
nsIChannel* aChannel,
|
nsIChannel* aChannel,
|
||||||
nsTArray<nsCOMPtr<nsIUrlClassifierFeature>>& aFeatures);
|
nsTArray<nsCOMPtr<nsIUrlClassifierFeature>>& aFeatures);
|
||||||
|
|
||||||
|
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||||
|
const nsACString& aName);
|
||||||
|
|
||||||
NS_IMETHOD
|
NS_IMETHOD
|
||||||
ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
||||||
bool* aShouldContinue) override;
|
bool* aShouldContinue) override;
|
||||||
|
@ -32,6 +34,8 @@ class UrlClassifierFeatureFlash final : public UrlClassifierFeatureBase {
|
||||||
private:
|
private:
|
||||||
explicit UrlClassifierFeatureFlash(uint32_t aId);
|
explicit UrlClassifierFeatureFlash(uint32_t aId);
|
||||||
|
|
||||||
|
static void MaybeInitialize();
|
||||||
|
|
||||||
nsIHttpChannel::FlashPluginState mFlashPluginState;
|
nsIHttpChannel::FlashPluginState mFlashPluginState;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@ namespace net {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
#define LOGIN_REPUTATION_FEATURE_NAME "login-reputation"
|
||||||
|
|
||||||
#define PREF_PASSWORD_ALLOW_TABLE "urlclassifier.passwordAllowTable"
|
#define PREF_PASSWORD_ALLOW_TABLE "urlclassifier.passwordAllowTable"
|
||||||
|
|
||||||
StaticRefPtr<UrlClassifierFeatureLoginReputation> gFeatureLoginReputation;
|
StaticRefPtr<UrlClassifierFeatureLoginReputation> gFeatureLoginReputation;
|
||||||
|
@ -20,14 +22,15 @@ StaticRefPtr<UrlClassifierFeatureLoginReputation> gFeatureLoginReputation;
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
UrlClassifierFeatureLoginReputation::UrlClassifierFeatureLoginReputation()
|
UrlClassifierFeatureLoginReputation::UrlClassifierFeatureLoginReputation()
|
||||||
: UrlClassifierFeatureBase(NS_LITERAL_CSTRING("login-reputation"),
|
: UrlClassifierFeatureBase(
|
||||||
EmptyCString(), // blacklist tables
|
NS_LITERAL_CSTRING(LOGIN_REPUTATION_FEATURE_NAME),
|
||||||
NS_LITERAL_CSTRING(PREF_PASSWORD_ALLOW_TABLE),
|
EmptyCString(), // blacklist tables
|
||||||
EmptyCString(), // blacklist pref
|
NS_LITERAL_CSTRING(PREF_PASSWORD_ALLOW_TABLE),
|
||||||
EmptyCString(), // whitelist pref
|
EmptyCString(), // blacklist pref
|
||||||
EmptyCString(), // blacklist pref table name
|
EmptyCString(), // whitelist pref
|
||||||
EmptyCString(), // whitelist pref table name
|
EmptyCString(), // blacklist pref table name
|
||||||
EmptyCString()) // skip host pref
|
EmptyCString(), // whitelist pref table name
|
||||||
|
EmptyCString()) // skip host pref
|
||||||
{}
|
{}
|
||||||
|
|
||||||
/* static */ void UrlClassifierFeatureLoginReputation::MaybeShutdown() {
|
/* static */ void UrlClassifierFeatureLoginReputation::MaybeShutdown() {
|
||||||
|
@ -53,6 +56,16 @@ UrlClassifierFeatureLoginReputation::MaybeGetOrCreate() {
|
||||||
return gFeatureLoginReputation;
|
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
|
NS_IMETHODIMP
|
||||||
UrlClassifierFeatureLoginReputation::ProcessChannel(nsIChannel* aChannel,
|
UrlClassifierFeatureLoginReputation::ProcessChannel(nsIChannel* aChannel,
|
||||||
const nsACString& aList,
|
const nsACString& aList,
|
||||||
|
|
|
@ -21,6 +21,9 @@ class UrlClassifierFeatureLoginReputation final
|
||||||
|
|
||||||
static nsIUrlClassifierFeature* MaybeGetOrCreate();
|
static nsIUrlClassifierFeature* MaybeGetOrCreate();
|
||||||
|
|
||||||
|
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||||
|
const nsACString& aName);
|
||||||
|
|
||||||
NS_IMETHOD
|
NS_IMETHOD
|
||||||
GetTables(nsIUrlClassifierFeature::listType aListType,
|
GetTables(nsIUrlClassifierFeature::listType aListType,
|
||||||
nsTArray<nsCString>& aResult) override;
|
nsTArray<nsCString>& aResult) override;
|
||||||
|
|
|
@ -21,6 +21,8 @@ namespace net {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
#define TRACKING_ANNOTATION_FEATURE_NAME "tracking-annotation"
|
||||||
|
|
||||||
#define URLCLASSIFIER_ANNOTATION_BLACKLIST \
|
#define URLCLASSIFIER_ANNOTATION_BLACKLIST \
|
||||||
"urlclassifier.trackingAnnotationTable"
|
"urlclassifier.trackingAnnotationTable"
|
||||||
#define URLCLASSIFIER_ANNOTATION_BLACKLIST_TEST_ENTRIES \
|
#define URLCLASSIFIER_ANNOTATION_BLACKLIST_TEST_ENTRIES \
|
||||||
|
@ -109,7 +111,7 @@ static void LowerPriorityHelper(nsIChannel* aChannel) {
|
||||||
|
|
||||||
UrlClassifierFeatureTrackingAnnotation::UrlClassifierFeatureTrackingAnnotation()
|
UrlClassifierFeatureTrackingAnnotation::UrlClassifierFeatureTrackingAnnotation()
|
||||||
: UrlClassifierFeatureBase(
|
: UrlClassifierFeatureBase(
|
||||||
NS_LITERAL_CSTRING("tracking-annotation"),
|
NS_LITERAL_CSTRING(TRACKING_ANNOTATION_FEATURE_NAME),
|
||||||
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_BLACKLIST),
|
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_BLACKLIST),
|
||||||
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_WHITELIST),
|
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_WHITELIST),
|
||||||
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_BLACKLIST_TEST_ENTRIES),
|
NS_LITERAL_CSTRING(URLCLASSIFIER_ANNOTATION_BLACKLIST_TEST_ENTRIES),
|
||||||
|
@ -118,25 +120,27 @@ UrlClassifierFeatureTrackingAnnotation::UrlClassifierFeatureTrackingAnnotation()
|
||||||
NS_LITERAL_CSTRING(TABLE_ANNOTATION_WHITELIST_PREF),
|
NS_LITERAL_CSTRING(TABLE_ANNOTATION_WHITELIST_PREF),
|
||||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_ANNOTATION_SKIP_URLS)) {}
|
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_ANNOTATION_SKIP_URLS)) {}
|
||||||
|
|
||||||
/* static */ void UrlClassifierFeatureTrackingAnnotation::Initialize() {
|
/* static */ void UrlClassifierFeatureTrackingAnnotation::MaybeInitialize() {
|
||||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: Initializing"));
|
MOZ_ASSERT(XRE_IsParentProcess());
|
||||||
MOZ_ASSERT(!gFeatureTrackingAnnotation);
|
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: MaybeInitialize"));
|
||||||
|
|
||||||
gFeatureTrackingAnnotation = new UrlClassifierFeatureTrackingAnnotation();
|
if (!gFeatureTrackingAnnotation) {
|
||||||
gFeatureTrackingAnnotation->InitializePreferences();
|
gFeatureTrackingAnnotation = new UrlClassifierFeatureTrackingAnnotation();
|
||||||
|
gFeatureTrackingAnnotation->InitializePreferences();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ void UrlClassifierFeatureTrackingAnnotation::Shutdown() {
|
/* static */ void UrlClassifierFeatureTrackingAnnotation::MaybeShutdown() {
|
||||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: Shutdown"));
|
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: MaybeShutdown"));
|
||||||
MOZ_ASSERT(gFeatureTrackingAnnotation);
|
|
||||||
|
|
||||||
gFeatureTrackingAnnotation->ShutdownPreferences();
|
if (gFeatureTrackingAnnotation) {
|
||||||
gFeatureTrackingAnnotation = nullptr;
|
gFeatureTrackingAnnotation->ShutdownPreferences();
|
||||||
|
gFeatureTrackingAnnotation = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ already_AddRefed<UrlClassifierFeatureTrackingAnnotation>
|
/* static */ already_AddRefed<UrlClassifierFeatureTrackingAnnotation>
|
||||||
UrlClassifierFeatureTrackingAnnotation::MaybeCreate(nsIChannel* aChannel) {
|
UrlClassifierFeatureTrackingAnnotation::MaybeCreate(nsIChannel* aChannel) {
|
||||||
MOZ_ASSERT(gFeatureTrackingAnnotation);
|
|
||||||
MOZ_ASSERT(aChannel);
|
MOZ_ASSERT(aChannel);
|
||||||
|
|
||||||
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: MaybeCreate for channel %p",
|
UC_LOG(("UrlClassifierFeatureTrackingAnnotation: MaybeCreate for channel %p",
|
||||||
|
@ -151,6 +155,24 @@ UrlClassifierFeatureTrackingAnnotation::MaybeCreate(nsIChannel* aChannel) {
|
||||||
return nullptr;
|
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 =
|
RefPtr<UrlClassifierFeatureTrackingAnnotation> self =
|
||||||
gFeatureTrackingAnnotation;
|
gFeatureTrackingAnnotation;
|
||||||
return self.forget();
|
return self.forget();
|
||||||
|
|
|
@ -17,13 +17,14 @@ namespace net {
|
||||||
class UrlClassifierFeatureTrackingAnnotation final
|
class UrlClassifierFeatureTrackingAnnotation final
|
||||||
: public UrlClassifierFeatureBase {
|
: public UrlClassifierFeatureBase {
|
||||||
public:
|
public:
|
||||||
static void Initialize();
|
static void MaybeShutdown();
|
||||||
|
|
||||||
static void Shutdown();
|
|
||||||
|
|
||||||
static already_AddRefed<UrlClassifierFeatureTrackingAnnotation> MaybeCreate(
|
static already_AddRefed<UrlClassifierFeatureTrackingAnnotation> MaybeCreate(
|
||||||
nsIChannel* aChannel);
|
nsIChannel* aChannel);
|
||||||
|
|
||||||
|
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||||
|
const nsACString& aName);
|
||||||
|
|
||||||
NS_IMETHOD ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
NS_IMETHOD ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
||||||
bool* aShouldContinue) override;
|
bool* aShouldContinue) override;
|
||||||
|
|
||||||
|
@ -33,6 +34,8 @@ class UrlClassifierFeatureTrackingAnnotation final
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UrlClassifierFeatureTrackingAnnotation();
|
UrlClassifierFeatureTrackingAnnotation();
|
||||||
|
|
||||||
|
static void MaybeInitialize();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace net
|
} // namespace net
|
||||||
|
|
|
@ -17,6 +17,8 @@ namespace net {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
#define TRACKING_PROTECTION_FEATURE_NAME "tracking-protection"
|
||||||
|
|
||||||
#define URLCLASSIFIER_TRACKING_BLACKLIST "urlclassifier.trackingTable"
|
#define URLCLASSIFIER_TRACKING_BLACKLIST "urlclassifier.trackingTable"
|
||||||
#define URLCLASSIFIER_TRACKING_BLACKLIST_TEST_ENTRIES \
|
#define URLCLASSIFIER_TRACKING_BLACKLIST_TEST_ENTRIES \
|
||||||
"urlclassifier.trackingTable.testEntries"
|
"urlclassifier.trackingTable.testEntries"
|
||||||
|
@ -32,7 +34,7 @@ StaticRefPtr<UrlClassifierFeatureTrackingProtection> gFeatureTrackingProtection;
|
||||||
|
|
||||||
UrlClassifierFeatureTrackingProtection::UrlClassifierFeatureTrackingProtection()
|
UrlClassifierFeatureTrackingProtection::UrlClassifierFeatureTrackingProtection()
|
||||||
: UrlClassifierFeatureBase(
|
: UrlClassifierFeatureBase(
|
||||||
NS_LITERAL_CSTRING("tracking-protection"),
|
NS_LITERAL_CSTRING(TRACKING_PROTECTION_FEATURE_NAME),
|
||||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_BLACKLIST),
|
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_BLACKLIST),
|
||||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_WHITELIST),
|
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_WHITELIST),
|
||||||
NS_LITERAL_CSTRING(URLCLASSIFIER_TRACKING_BLACKLIST_TEST_ENTRIES),
|
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_BLACKLIST_PREF),
|
||||||
NS_LITERAL_CSTRING(TABLE_TRACKING_WHITELIST_PREF), EmptyCString()) {}
|
NS_LITERAL_CSTRING(TABLE_TRACKING_WHITELIST_PREF), EmptyCString()) {}
|
||||||
|
|
||||||
/* static */ void UrlClassifierFeatureTrackingProtection::Initialize() {
|
/* static */ void UrlClassifierFeatureTrackingProtection::MaybeInitialize() {
|
||||||
UC_LOG(("UrlClassifierFeatureTrackingProtection: Initializing"));
|
MOZ_ASSERT(XRE_IsParentProcess());
|
||||||
MOZ_ASSERT(!gFeatureTrackingProtection);
|
UC_LOG(("UrlClassifierFeatureTrackingProtection: MaybeInitialize"));
|
||||||
|
|
||||||
gFeatureTrackingProtection = new UrlClassifierFeatureTrackingProtection();
|
if (!gFeatureTrackingProtection) {
|
||||||
gFeatureTrackingProtection->InitializePreferences();
|
gFeatureTrackingProtection = new UrlClassifierFeatureTrackingProtection();
|
||||||
|
gFeatureTrackingProtection->InitializePreferences();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ void UrlClassifierFeatureTrackingProtection::Shutdown() {
|
/* static */ void UrlClassifierFeatureTrackingProtection::MaybeShutdown() {
|
||||||
UC_LOG(("UrlClassifierFeatureTrackingProtection: Shutdown"));
|
UC_LOG(("UrlClassifierFeatureTrackingProtection: Shutdown"));
|
||||||
MOZ_ASSERT(gFeatureTrackingProtection);
|
|
||||||
|
|
||||||
gFeatureTrackingProtection->ShutdownPreferences();
|
if (gFeatureTrackingProtection) {
|
||||||
gFeatureTrackingProtection = nullptr;
|
gFeatureTrackingProtection->ShutdownPreferences();
|
||||||
|
gFeatureTrackingProtection = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ already_AddRefed<UrlClassifierFeatureTrackingProtection>
|
/* static */ already_AddRefed<UrlClassifierFeatureTrackingProtection>
|
||||||
UrlClassifierFeatureTrackingProtection::MaybeCreate(nsIChannel* aChannel) {
|
UrlClassifierFeatureTrackingProtection::MaybeCreate(nsIChannel* aChannel) {
|
||||||
MOZ_ASSERT(gFeatureTrackingProtection);
|
|
||||||
MOZ_ASSERT(aChannel);
|
MOZ_ASSERT(aChannel);
|
||||||
|
|
||||||
UC_LOG(("UrlClassifierFeatureTrackingProtection: MaybeCreate for channel %p",
|
UC_LOG(("UrlClassifierFeatureTrackingProtection: MaybeCreate for channel %p",
|
||||||
|
@ -98,6 +102,24 @@ UrlClassifierFeatureTrackingProtection::MaybeCreate(nsIChannel* aChannel) {
|
||||||
return nullptr;
|
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 =
|
RefPtr<UrlClassifierFeatureTrackingProtection> self =
|
||||||
gFeatureTrackingProtection;
|
gFeatureTrackingProtection;
|
||||||
return self.forget();
|
return self.forget();
|
||||||
|
|
|
@ -17,13 +17,14 @@ namespace net {
|
||||||
class UrlClassifierFeatureTrackingProtection final
|
class UrlClassifierFeatureTrackingProtection final
|
||||||
: public UrlClassifierFeatureBase {
|
: public UrlClassifierFeatureBase {
|
||||||
public:
|
public:
|
||||||
static void Initialize();
|
static void MaybeShutdown();
|
||||||
|
|
||||||
static void Shutdown();
|
|
||||||
|
|
||||||
static already_AddRefed<UrlClassifierFeatureTrackingProtection> MaybeCreate(
|
static already_AddRefed<UrlClassifierFeatureTrackingProtection> MaybeCreate(
|
||||||
nsIChannel* aChannel);
|
nsIChannel* aChannel);
|
||||||
|
|
||||||
|
static already_AddRefed<nsIUrlClassifierFeature> GetIfNameMatches(
|
||||||
|
const nsACString& aName);
|
||||||
|
|
||||||
NS_IMETHOD ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
NS_IMETHOD ProcessChannel(nsIChannel* aChannel, const nsACString& aList,
|
||||||
bool* aShouldContinue) override;
|
bool* aShouldContinue) override;
|
||||||
|
|
||||||
|
@ -33,6 +34,8 @@ class UrlClassifierFeatureTrackingProtection final
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UrlClassifierFeatureTrackingProtection();
|
UrlClassifierFeatureTrackingProtection();
|
||||||
|
|
||||||
|
static void MaybeInitialize();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace net
|
} // namespace net
|
||||||
|
|
|
@ -22,6 +22,7 @@ UNIFIED_SOURCES += [
|
||||||
'nsChannelClassifier.cpp',
|
'nsChannelClassifier.cpp',
|
||||||
'UrlClassifierCommon.cpp',
|
'UrlClassifierCommon.cpp',
|
||||||
'UrlClassifierFeatureBase.cpp',
|
'UrlClassifierFeatureBase.cpp',
|
||||||
|
'UrlClassifierFeatureCustomTables.cpp',
|
||||||
'UrlClassifierFeatureFactory.cpp',
|
'UrlClassifierFeatureFactory.cpp',
|
||||||
'UrlClassifierFeatureFlash.cpp',
|
'UrlClassifierFeatureFlash.cpp',
|
||||||
'UrlClassifierFeatureLoginReputation.cpp',
|
'UrlClassifierFeatureLoginReputation.cpp',
|
||||||
|
|
|
@ -81,20 +81,6 @@ interface nsIURIClassifier : nsISupports
|
||||||
in boolean aTrackingProtectionEnabled,
|
in boolean aTrackingProtectionEnabled,
|
||||||
in nsIURIClassifierCallback aCallback);
|
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
|
* Asynchronously classify a URI with list of features. This does not make
|
||||||
* network requests.
|
* network requests.
|
||||||
|
@ -104,6 +90,19 @@ interface nsIURIClassifier : nsISupports
|
||||||
in nsIUrlClassifierFeature_listType aListType,
|
in nsIUrlClassifierFeature_listType aListType,
|
||||||
in nsIUrlClassifierFeatureCallback aCallback);
|
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.
|
* Report to the provider that a Safe Browsing warning was shown.
|
||||||
*
|
*
|
||||||
|
|
|
@ -2245,19 +2245,21 @@ SpecialPowersAPI.prototype = {
|
||||||
let classifierService =
|
let classifierService =
|
||||||
Cc["@mozilla.org/url-classifier/dbservice;1"].getService(Ci.nsIURIClassifier);
|
Cc["@mozilla.org/url-classifier/dbservice;1"].getService(Ci.nsIURIClassifier);
|
||||||
|
|
||||||
let wrapCallback = (...args) => {
|
let wrapCallback = results => {
|
||||||
Services.tm.dispatchToMainThread(() => {
|
Services.tm.dispatchToMainThread(() => {
|
||||||
if (typeof callback == "function") {
|
if (typeof callback == "function") {
|
||||||
callback(...args);
|
callback(wrapIfUnwrapped(results));
|
||||||
} else {
|
} else {
|
||||||
callback.onClassifyComplete.call(undefined, ...args);
|
callback.onClassifyComplete.call(undefined, wrapIfUnwrapped(results));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
return classifierService.asyncClassifyLocalWithTables(unwrapIfWrapped(uri),
|
let feature = classifierService.createFeatureWithTables("test", tables.split(","), []);
|
||||||
tables, [], [],
|
return classifierService.asyncClassifyLocalWithFeatures(unwrapIfWrapped(uri),
|
||||||
wrapCallback);
|
[feature],
|
||||||
|
Ci.nsIUrlClassifierFeature.blacklist,
|
||||||
|
wrapCallback);
|
||||||
},
|
},
|
||||||
|
|
||||||
EARLY_BETA_OR_EARLIER: AppConstants.EARLY_BETA_OR_EARLIER,
|
EARLY_BETA_OR_EARLIER: AppConstants.EARLY_BETA_OR_EARLIER,
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#define UrlClassifierTelemetryUtils_h__
|
#define UrlClassifierTelemetryUtils_h__
|
||||||
|
|
||||||
#include "mozilla/TypedEnumBits.h"
|
#include "mozilla/TypedEnumBits.h"
|
||||||
|
#include "nsISupportsImpl.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace safebrowsing {
|
namespace safebrowsing {
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include "mozilla/dom/ContentChild.h"
|
#include "mozilla/dom/ContentChild.h"
|
||||||
#include "mozilla/dom/PermissionMessageUtils.h"
|
#include "mozilla/dom/PermissionMessageUtils.h"
|
||||||
#include "mozilla/dom/URLClassifierChild.h"
|
#include "mozilla/dom/URLClassifierChild.h"
|
||||||
|
#include "mozilla/net/UrlClassifierFeatureFactory.h"
|
||||||
#include "mozilla/net/UrlClassifierFeatureResult.h"
|
#include "mozilla/net/UrlClassifierFeatureResult.h"
|
||||||
#include "mozilla/ipc/URIUtils.h"
|
#include "mozilla/ipc/URIUtils.h"
|
||||||
#include "mozilla/SyncRunnable.h"
|
#include "mozilla/SyncRunnable.h"
|
||||||
|
@ -240,131 +241,6 @@ class FeatureHolder final {
|
||||||
nsTArray<RefPtr<TableData>> mTableData;
|
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
|
} // namespace
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
|
@ -2003,50 +1879,6 @@ nsUrlClassifierDBService::Classify(nsIPrincipal* aPrincipal,
|
||||||
return NS_OK;
|
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 {
|
class ThreatHitReportListener final : public nsIStreamListener {
|
||||||
public:
|
public:
|
||||||
NS_DECL_ISUPPORTS
|
NS_DECL_ISUPPORTS
|
||||||
|
@ -2317,7 +2149,7 @@ nsresult nsUrlClassifierDBService::LookupURI(
|
||||||
nsCString table = aExtraTablesByPrefs[i];
|
nsCString table = aExtraTablesByPrefs[i];
|
||||||
nsCOMPtr<nsIUrlClassifierCallback> callback(c);
|
nsCOMPtr<nsIUrlClassifierCallback> callback(c);
|
||||||
nsCOMPtr<nsIRunnable> cbRunnable = NS_NewRunnableFunction(
|
nsCOMPtr<nsIRunnable> cbRunnable = NS_NewRunnableFunction(
|
||||||
"nsUrlClassifierDBService::AsyncClassifyLocalWithTables",
|
"nsUrlClassifierDBService::LookupURI",
|
||||||
[callback, table]() -> void { callback->HandleEvent(table); });
|
[callback, table]() -> void { callback->HandleEvent(table); });
|
||||||
|
|
||||||
NS_DispatchToMainThread(cbRunnable);
|
NS_DispatchToMainThread(cbRunnable);
|
||||||
|
@ -2852,3 +2684,34 @@ bool nsUrlClassifierDBService::AsyncClassifyLocalWithFeaturesUsingPreferences(
|
||||||
NS_DispatchToMainThread(cbRunnable);
|
NS_DispatchToMainThread(cbRunnable);
|
||||||
return true;
|
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) {
|
SpecialPowers.doUrlClassify(prin, null, test.trackingProtection, function(errorCode) {
|
||||||
is(errorCode, test.result,
|
is(errorCode, test.result,
|
||||||
`Successful asynchronous classification of ${test.url} with TP=${test.trackingProtection}`);
|
`Successful asynchronous classification of ${test.url} with TP=${test.trackingProtection}`);
|
||||||
SpecialPowers.doUrlClassifyLocal(uri, tables, function(errorCode1, tables1) {
|
SpecialPowers.doUrlClassifyLocal(uri, tables, function(results) {
|
||||||
is(tables1, test.table,
|
if (results.length == 0) {
|
||||||
`Successful asynchronous local classification of ${test.url} with TP=${test.trackingProtection}`);
|
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();
|
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();
|
||||||
|
});
|
|
@ -23,4 +23,5 @@ support-files =
|
||||||
[test_pref.js]
|
[test_pref.js]
|
||||||
[test_malwaretable_pref.js]
|
[test_malwaretable_pref.js]
|
||||||
[test_safebrowsing_protobuf.js]
|
[test_safebrowsing_protobuf.js]
|
||||||
[test_platform_specific_threats.js]
|
[test_platform_specific_threats.js]
|
||||||
|
[test_features.js]
|
||||||
|
|
Загрузка…
Ссылка в новой задаче