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/. */
4
5 #include "nsDocShellTelemetryUtils.h"
6
7 namespace {
8
9 using ErrorLabel = mozilla::Telemetry::LABELS_PAGE_LOAD_ERROR;
10
11 struct LoadErrorTelemetryResult {
12 nsresult mValue;
13 ErrorLabel mLabel;
14 };
15
16 static const LoadErrorTelemetryResult sResult[] = {
17 {
18 NS_ERROR_UNKNOWN_PROTOCOL,
19 ErrorLabel::UNKNOWN_PROTOCOL,
20 },
21 {
22 NS_ERROR_FILE_NOT_FOUND,
23 ErrorLabel::FILE_NOT_FOUND,
24 },
25 {
26 NS_ERROR_FILE_ACCESS_DENIED,
27 ErrorLabel::FILE_ACCESS_DENIED,
28 },
29 {
30 NS_ERROR_UNKNOWN_HOST,
31 ErrorLabel::UNKNOWN_HOST,
32 },
33 {
34 NS_ERROR_CONNECTION_REFUSED,
35 ErrorLabel::CONNECTION_REFUSED,
36 },
37 {
38 NS_ERROR_PROXY_BAD_GATEWAY,
39 ErrorLabel::PROXY_BAD_GATEWAY,
40 },
41 {
42 NS_ERROR_NET_INTERRUPT,
43 ErrorLabel::NET_INTERRUPT,
44 },
45 {
46 NS_ERROR_NET_TIMEOUT,
47 ErrorLabel::NET_TIMEOUT,
48 },
49 {
50 NS_ERROR_PROXY_GATEWAY_TIMEOUT,
51 ErrorLabel::P_GATEWAY_TIMEOUT,
52 },
53 {
54 NS_ERROR_CSP_FRAME_ANCESTOR_VIOLATION,
55 ErrorLabel::CSP_FRAME_ANCEST,
56 },
57 {
58 NS_ERROR_CSP_FORM_ACTION_VIOLATION,
59 ErrorLabel::CSP_FORM_ACTION,
60 },
61 {
62 NS_ERROR_CSP_NAVIGATE_TO_VIOLATION,
63 ErrorLabel::CSP_NAVIGATE_TO,
64 },
65 {
66 NS_ERROR_XFO_VIOLATION,
67 ErrorLabel::XFO_VIOLATION,
68 },
69 {
70 NS_ERROR_PHISHING_URI,
71 ErrorLabel::PHISHING_URI,
72 },
73 {
74 NS_ERROR_MALWARE_URI,
75 ErrorLabel::MALWARE_URI,
76 },
77 {
78 NS_ERROR_UNWANTED_URI,
79 ErrorLabel::UNWANTED_URI,
80 },
81 {
82 NS_ERROR_HARMFUL_URI,
83 ErrorLabel::HARMFUL_URI,
84 },
85 {
86 NS_ERROR_CONTENT_CRASHED,
87 ErrorLabel::CONTENT_CRASHED,
88 },
89 {
90 NS_ERROR_FRAME_CRASHED,
91 ErrorLabel::FRAME_CRASHED,
92 },
93 {
94 NS_ERROR_BUILDID_MISMATCH,
95 ErrorLabel::BUILDID_MISMATCH,
96 },
97 {
98 NS_ERROR_NET_RESET,
99 ErrorLabel::NET_RESET,
100 },
101 {
102 NS_ERROR_MALFORMED_URI,
103 ErrorLabel::MALFORMED_URI,
104 },
105 {
106 NS_ERROR_REDIRECT_LOOP,
107 ErrorLabel::REDIRECT_LOOP,
108 },
109 {
110 NS_ERROR_UNKNOWN_SOCKET_TYPE,
111 ErrorLabel::UNKNOWN_SOCKET,
112 },
113 {
114 NS_ERROR_DOCUMENT_NOT_CACHED,
115 ErrorLabel::DOCUMENT_N_CACHED,
116 },
117 {
118 NS_ERROR_OFFLINE,
119 ErrorLabel::OFFLINE,
120 },
121 {
122 NS_ERROR_DOCUMENT_IS_PRINTMODE,
123 ErrorLabel::DOC_PRINTMODE,
124 },
125 {
126 NS_ERROR_PORT_ACCESS_NOT_ALLOWED,
127 ErrorLabel::PORT_ACCESS,
128 },
129 {
130 NS_ERROR_UNKNOWN_PROXY_HOST,
131 ErrorLabel::UNKNOWN_PROXY_HOST,
132 },
133 {
134 NS_ERROR_PROXY_CONNECTION_REFUSED,
135 ErrorLabel::PROXY_CONNECTION,
136 },
137 {
138 NS_ERROR_PROXY_FORBIDDEN,
139 ErrorLabel::PROXY_FORBIDDEN,
140 },
141 {
142 NS_ERROR_PROXY_NOT_IMPLEMENTED,
143 ErrorLabel::P_NOT_IMPLEMENTED,
144 },
145 {
146 NS_ERROR_PROXY_AUTHENTICATION_FAILED,
147 ErrorLabel::PROXY_AUTH,
148 },
149 {
150 NS_ERROR_PROXY_TOO_MANY_REQUESTS,
151 ErrorLabel::PROXY_TOO_MANY,
152 },
153 {
154 NS_ERROR_INVALID_CONTENT_ENCODING,
155 ErrorLabel::CONTENT_ENCODING,
156 },
157 {
158 NS_ERROR_REMOTE_XUL,
159 ErrorLabel::REMOTE_XUL,
160 },
161 {
162 NS_ERROR_UNSAFE_CONTENT_TYPE,
163 ErrorLabel::UNSAFE_CONTENT,
164 },
165 {
166 NS_ERROR_CORRUPTED_CONTENT,
167 ErrorLabel::CORRUPTED_CONTENT,
168 },
169 {
170 NS_ERROR_INTERCEPTION_FAILED,
171 ErrorLabel::INTERCEPTION_FAIL,
172 },
173 {
174 NS_ERROR_NET_INADEQUATE_SECURITY,
175 ErrorLabel::INADEQUATE_SEC,
176 },
177 {
178 NS_ERROR_BLOCKED_BY_POLICY,
179 ErrorLabel::BLOCKED_BY_POLICY,
180 },
181 {
182 NS_ERROR_NET_HTTP2_SENT_GOAWAY,
183 ErrorLabel::HTTP2_SENT_GOAWAY,
184 },
185 {
186 NS_ERROR_NET_HTTP3_PROTOCOL_ERROR,
187 ErrorLabel::HTTP3_PROTOCOL,
188 },
189 {
190 NS_BINDING_FAILED,
191 ErrorLabel::BINDING_FAILED,
192 },
193 };
194 } // anonymous namespace
195
196 namespace mozilla {
197 namespace dom {
LoadErrorToTelemetryLabel(nsresult aRv)198 mozilla::Telemetry::LABELS_PAGE_LOAD_ERROR LoadErrorToTelemetryLabel(
199 nsresult aRv) {
200 MOZ_ASSERT(aRv != NS_OK);
201
202 for (const auto& p : sResult) {
203 if (p.mValue == aRv) {
204 return p.mLabel;
205 }
206 }
207 return ErrorLabel::otherError;
208 }
209 } // namespace dom
210 } // namespace mozilla
211