1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "UrlClassifierFeatureLoginReputation.h"
9 #include "mozilla/StaticPrefs_browser.h"
10 #include "mozilla/StaticPtr.h"
11 #include "UrlClassifierCommon.h"
13 #include "nsIChannel.h"
20 #define LOGIN_REPUTATION_FEATURE_NAME "login-reputation"
22 #define PREF_PASSWORD_ALLOW_TABLE "urlclassifier.passwordAllowTable"
24 StaticRefPtr
<UrlClassifierFeatureLoginReputation
> gFeatureLoginReputation
;
28 UrlClassifierFeatureLoginReputation::UrlClassifierFeatureLoginReputation()
29 : UrlClassifierFeatureBase(nsLiteralCString(LOGIN_REPUTATION_FEATURE_NAME
),
30 ""_ns
, // blocklist tables
31 nsLiteralCString(PREF_PASSWORD_ALLOW_TABLE
),
32 ""_ns
, // blocklist pref
33 ""_ns
, // entitylist pref
34 ""_ns
, // blocklist pref table name
35 ""_ns
, // entitylist pref table name
36 ""_ns
) // exception host pref
39 /* static */ const char* UrlClassifierFeatureLoginReputation::Name() {
40 return StaticPrefs::browser_safebrowsing_passwords_enabled()
41 ? LOGIN_REPUTATION_FEATURE_NAME
46 void UrlClassifierFeatureLoginReputation::MaybeShutdown() {
47 UC_LOG_LEAK(("UrlClassifierFeatureLoginReputation::MaybeShutdown"));
49 if (gFeatureLoginReputation
) {
50 gFeatureLoginReputation
->ShutdownPreferences();
51 gFeatureLoginReputation
= nullptr;
56 nsIUrlClassifierFeature
*
57 UrlClassifierFeatureLoginReputation::MaybeGetOrCreate() {
58 if (!StaticPrefs::browser_safebrowsing_passwords_enabled()) {
62 if (!gFeatureLoginReputation
) {
63 gFeatureLoginReputation
= new UrlClassifierFeatureLoginReputation();
64 gFeatureLoginReputation
->InitializePreferences();
67 return gFeatureLoginReputation
;
71 already_AddRefed
<nsIUrlClassifierFeature
>
72 UrlClassifierFeatureLoginReputation::GetIfNameMatches(const nsACString
& aName
) {
73 if (!aName
.EqualsLiteral(LOGIN_REPUTATION_FEATURE_NAME
)) {
77 nsCOMPtr
<nsIUrlClassifierFeature
> self
= MaybeGetOrCreate();
82 UrlClassifierFeatureLoginReputation::ProcessChannel(
83 nsIChannel
* aChannel
, const nsTArray
<nsCString
>& aList
,
84 const nsTArray
<nsCString
>& aHashes
, bool* aShouldContinue
) {
86 "UrlClassifierFeatureLoginReputation::ProcessChannel should never be "
92 UrlClassifierFeatureLoginReputation::GetURIByListType(
93 nsIChannel
* aChannel
, nsIUrlClassifierFeature::listType aListType
,
94 nsIUrlClassifierFeature::URIType
* aURIType
, nsIURI
** aURI
) {
95 NS_ENSURE_ARG_POINTER(aChannel
);
96 NS_ENSURE_ARG_POINTER(aURIType
);
97 NS_ENSURE_ARG_POINTER(aURI
);
98 MOZ_ASSERT(aListType
== nsIUrlClassifierFeature::entitylist
,
99 "UrlClassifierFeatureLoginReputation is meant to be used just to "
101 *aURIType
= nsIUrlClassifierFeature::URIType::entitylistURI
;
102 return aChannel
->GetURI(aURI
);
106 } // namespace mozilla