1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #include
"nsISupports.idl"
7 [scriptable
, uuid(e61b5d39
-f6d6
-4ed3
-aead
-1213b24c6f27
)]
8 interface nsITRRSkipReason
: nsISupports
10 // IMPORTANT: when adding new values, always add them to the end, otherwise
11 // it will mess up telemetry.
12 // When adding a reason here, make sure it is documented in
13 // netwerk/docs/dns/trr-skip-reasons.md
16 TRR_OK
= 1, // Only set when we actually got a positive TRR result
17 TRR_NO_GSERVICE
= 2, // no gService
18 TRR_PARENTAL_CONTROL
= 3, // parental control is on
19 TRR_OFF_EXPLICIT
= 4, // user has set mode5
20 TRR_REQ_MODE_DISABLED
= 5, // request has disabled flags set
21 TRR_MODE_NOT_ENABLED
= 6, // mode0
22 TRR_FAILED
= 7, // unknown failure
23 TRR_MODE_UNHANDLED_DEFAULT
= 8, // Unhandled case in ComputeEffectiveMode
24 TRR_MODE_UNHANDLED_DISABLED
= 9, // Unhandled case in ComputeEffectiveMode
25 TRR_DISABLED_FLAG
= 10, // the DISABLE_TRR flag was set
26 TRR_TIMEOUT
= 11, // the TRR channel timed out
27 TRR_CHANNEL_DNS_FAIL
= 12, // DoH server name failed to resolve
28 TRR_IS_OFFLINE
= 13, // The browser is offline/no interfaces up
29 TRR_NOT_CONFIRMED
= 14, // TRR confirmation is not done yet
30 TRR_DID_NOT_MAKE_QUERY
= 15, // TrrLookup exited without doing a TRR query
31 TRR_UNKNOWN_CHANNEL_FAILURE
= 16, // unknown channel failure reason
32 TRR_HOST_BLOCKED_TEMPORARY
= 17, // host blocklisted
33 TRR_SEND_FAILED
= 18, // The call to TRR::SendHTTPRequest failed
34 TRR_NET_RESET
= 19, // NS_ERROR_NET_RESET
35 TRR_NET_TIMEOUT
= 20, // NS_ERROR_NET_TIMEOUT
36 TRR_NET_REFUSED
= 21, // NS_ERROR_CONNECTION_REFUSED
37 TRR_NET_INTERRUPT
= 22, // NS_ERROR_NET_INTERRUPT
38 TRR_NET_INADEQ_SEQURITY
= 23, // NS_ERROR_NET_INADEQUATE_SECURITY
39 TRR_NO_ANSWERS
= 24, // TRR returned no answers
40 TRR_DECODE_FAILED
= 25, // DohDecode failed
41 TRR_EXCLUDED
= 26, // ExcludedFromTRR
42 TRR_SERVER_RESPONSE_ERR
= 27, // Server responded with non-200 code
43 TRR_RCODE_FAIL
= 28, // DNS response contains a non-NOERROR rcode
44 TRR_NO_CONNECTIVITY
= 29, // Not confirmed because of no connectivity
45 TRR_NXDOMAIN
= 30, // DNS response contains NXDOMAIN rcode (0x03)
46 TRR_REQ_CANCELLED
= 31, // The request has been cancelled
47 ODOH_KEY_NOT_USABLE
= 32, // We don't have a valid ODoHConfig to use.
48 ODOH_UPDATE_KEY_FAILED
= 33, // Failed to update the ODoHConfigs.
49 ODOH_KEY_NOT_AVAILABLE
= 34, // ODoH requests timeout because of no key.
50 ODOH_ENCRYPTION_FAILED
= 35, // Failed to encrypt DNS packets.
51 ODOH_DECRYPTION_FAILED
= 36, // Failed to decrypt DNS packets.
52 TRR_HEURISTIC_TRIPPED_GOOGLE_SAFESEARCH
= 37, // The google safesearch heuristic was tripped
53 TRR_HEURISTIC_TRIPPED_YOUTUBE_SAFESEARCH
= 38, // The youtube safesearch heuristic was tripped
54 TRR_HEURISTIC_TRIPPED_ZSCALER_CANARY
= 39, // The zscaler canary heuristic was tripped
55 TRR_HEURISTIC_TRIPPED_CANARY
= 40, // The global canary heuristic was tripped
56 TRR_HEURISTIC_TRIPPED_MODIFIED_ROOTS
= 41, // The modified roots (enterprise_roots cert pref) heuristic was tripped
57 TRR_HEURISTIC_TRIPPED_PARENTAL_CONTROLS
= 42, // The parental controls heuristic was tripped
58 TRR_HEURISTIC_TRIPPED_THIRD_PARTY_ROOTS
= 43, // The third party roots heuristic was tripped
59 TRR_HEURISTIC_TRIPPED_ENTERPRISE_POLICY
= 44, // The enterprise policy heuristic was tripped
60 TRR_HEURISTIC_TRIPPED_VPN
= 45, // The heuristic was tripped due to a vpn being detected
61 TRR_HEURISTIC_TRIPPED_PROXY
= 46, // The heuristic was tripped due to a proxy being detected
62 TRR_HEURISTIC_TRIPPED_NRPT
= 47, // The heuristic was tripped due to a NRPT being detected
70 using TRRSkippedReason
= nsITRRSkipReason
::value
;
72 inline bool IsRelevantTRRSkipReason
(TRRSkippedReason aReason
) {
73 // - TRR_REQ_MODE_DISABLED - these requests are intentionally skipping TRR.
74 // These include DNS queries used to bootstrap the TRR connection,
75 // captive portal checks, connectivity checks, etc.
76 // Since we don't want to use TRR for these connections, we don't need
77 // to include them with other relevant skip reasons.
78 // - TRR_DISABLED_FLAG - This reason is used when retrying failed connections,
79 // sync DNS resolves on the main thread, or requests coming from
80 // webextensions that choose to skip TRR
81 // - TRR_EXCLUDED - This reason is used when a certain domain is excluded
82 // from TRR because it is explicitly set by the user, or because it
83 // is part of the user's DNS suffix list, indicating a host that is likely
84 // to be on the local network.
85 if
(aReason
== TRRSkippedReason
::TRR_REQ_MODE_DISABLED ||
86 aReason
== TRRSkippedReason
::TRR_DISABLED_FLAG ||
87 aReason
== TRRSkippedReason
::TRR_EXCLUDED
) {
93 inline bool IsBlockedTRRRequest
(TRRSkippedReason aReason
) {
94 // See TRR::MaybeBlockRequest. These are the reasons that could block sending
96 return
(aReason
== TRRSkippedReason
::TRR_EXCLUDED ||
97 aReason
== TRRSkippedReason
::TRR_MODE_NOT_ENABLED ||
98 aReason
== TRRSkippedReason
::TRR_HOST_BLOCKED_TEMPORARY
);
101 inline bool IsNonRecoverableTRRSkipReason
(TRRSkippedReason aReason
) {
102 // These are non-recoverable reasons and we'll fallback to native without
104 return
(aReason
== TRRSkippedReason
::TRR_NXDOMAIN ||
105 aReason
== TRRSkippedReason
::TRR_NO_ANSWERS ||
106 aReason
== TRRSkippedReason
::TRR_DISABLED_FLAG ||
107 aReason
== TRRSkippedReason
::TRR_RCODE_FAIL
);
110 inline bool IsFailedConfirmationOrNoConnectivity
(TRRSkippedReason aReason
) {
111 // TRR is in non-confirmed state now, so we don't try to use TRR at all.
112 return
(aReason
== TRRSkippedReason
::TRR_NOT_CONFIRMED ||
113 aReason
== TRRSkippedReason
::TRR_NO_CONNECTIVITY
);
116 extern nsresult GetTRRSkipReasonName
(TRRSkippedReason aReason
, nsACString
& aName
);