summaryrefslogtreecommitdiffstats
path: root/docshell/base/nsDocShellTelemetryUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'docshell/base/nsDocShellTelemetryUtils.cpp')
-rw-r--r--docshell/base/nsDocShellTelemetryUtils.cpp206
1 files changed, 206 insertions, 0 deletions
diff --git a/docshell/base/nsDocShellTelemetryUtils.cpp b/docshell/base/nsDocShellTelemetryUtils.cpp
new file mode 100644
index 0000000000..cd78e3bce5
--- /dev/null
+++ b/docshell/base/nsDocShellTelemetryUtils.cpp
@@ -0,0 +1,206 @@
+/* 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 "nsDocShellTelemetryUtils.h"
+
+namespace {
+
+using ErrorLabel = mozilla::Telemetry::LABELS_PAGE_LOAD_ERROR;
+
+struct LoadErrorTelemetryResult {
+ nsresult mValue;
+ ErrorLabel mLabel;
+};
+
+static const LoadErrorTelemetryResult sResult[] = {
+ {
+ NS_ERROR_UNKNOWN_PROTOCOL,
+ ErrorLabel::UNKNOWN_PROTOCOL,
+ },
+ {
+ NS_ERROR_FILE_NOT_FOUND,
+ ErrorLabel::FILE_NOT_FOUND,
+ },
+ {
+ NS_ERROR_FILE_ACCESS_DENIED,
+ ErrorLabel::FILE_ACCESS_DENIED,
+ },
+ {
+ NS_ERROR_UNKNOWN_HOST,
+ ErrorLabel::UNKNOWN_HOST,
+ },
+ {
+ NS_ERROR_CONNECTION_REFUSED,
+ ErrorLabel::CONNECTION_REFUSED,
+ },
+ {
+ NS_ERROR_PROXY_BAD_GATEWAY,
+ ErrorLabel::PROXY_BAD_GATEWAY,
+ },
+ {
+ NS_ERROR_NET_INTERRUPT,
+ ErrorLabel::NET_INTERRUPT,
+ },
+ {
+ NS_ERROR_NET_TIMEOUT,
+ ErrorLabel::NET_TIMEOUT,
+ },
+ {
+ NS_ERROR_PROXY_GATEWAY_TIMEOUT,
+ ErrorLabel::P_GATEWAY_TIMEOUT,
+ },
+ {
+ NS_ERROR_CSP_FRAME_ANCESTOR_VIOLATION,
+ ErrorLabel::CSP_FRAME_ANCEST,
+ },
+ {
+ NS_ERROR_CSP_FORM_ACTION_VIOLATION,
+ ErrorLabel::CSP_FORM_ACTION,
+ },
+ {
+ NS_ERROR_CSP_NAVIGATE_TO_VIOLATION,
+ ErrorLabel::CSP_NAVIGATE_TO,
+ },
+ {
+ NS_ERROR_XFO_VIOLATION,
+ ErrorLabel::XFO_VIOLATION,
+ },
+ {
+ NS_ERROR_PHISHING_URI,
+ ErrorLabel::PHISHING_URI,
+ },
+ {
+ NS_ERROR_MALWARE_URI,
+ ErrorLabel::MALWARE_URI,
+ },
+ {
+ NS_ERROR_UNWANTED_URI,
+ ErrorLabel::UNWANTED_URI,
+ },
+ {
+ NS_ERROR_HARMFUL_URI,
+ ErrorLabel::HARMFUL_URI,
+ },
+ {
+ NS_ERROR_CONTENT_CRASHED,
+ ErrorLabel::CONTENT_CRASHED,
+ },
+ {
+ NS_ERROR_FRAME_CRASHED,
+ ErrorLabel::FRAME_CRASHED,
+ },
+ {
+ NS_ERROR_BUILDID_MISMATCH,
+ ErrorLabel::BUILDID_MISMATCH,
+ },
+ {
+ NS_ERROR_NET_RESET,
+ ErrorLabel::NET_RESET,
+ },
+ {
+ NS_ERROR_MALFORMED_URI,
+ ErrorLabel::MALFORMED_URI,
+ },
+ {
+ NS_ERROR_REDIRECT_LOOP,
+ ErrorLabel::REDIRECT_LOOP,
+ },
+ {
+ NS_ERROR_UNKNOWN_SOCKET_TYPE,
+ ErrorLabel::UNKNOWN_SOCKET,
+ },
+ {
+ NS_ERROR_DOCUMENT_NOT_CACHED,
+ ErrorLabel::DOCUMENT_N_CACHED,
+ },
+ {
+ NS_ERROR_OFFLINE,
+ ErrorLabel::OFFLINE,
+ },
+ {
+ NS_ERROR_DOCUMENT_IS_PRINTMODE,
+ ErrorLabel::DOC_PRINTMODE,
+ },
+ {
+ NS_ERROR_PORT_ACCESS_NOT_ALLOWED,
+ ErrorLabel::PORT_ACCESS,
+ },
+ {
+ NS_ERROR_UNKNOWN_PROXY_HOST,
+ ErrorLabel::UNKNOWN_PROXY_HOST,
+ },
+ {
+ NS_ERROR_PROXY_CONNECTION_REFUSED,
+ ErrorLabel::PROXY_CONNECTION,
+ },
+ {
+ NS_ERROR_PROXY_FORBIDDEN,
+ ErrorLabel::PROXY_FORBIDDEN,
+ },
+ {
+ NS_ERROR_PROXY_NOT_IMPLEMENTED,
+ ErrorLabel::P_NOT_IMPLEMENTED,
+ },
+ {
+ NS_ERROR_PROXY_AUTHENTICATION_FAILED,
+ ErrorLabel::PROXY_AUTH,
+ },
+ {
+ NS_ERROR_PROXY_TOO_MANY_REQUESTS,
+ ErrorLabel::PROXY_TOO_MANY,
+ },
+ {
+ NS_ERROR_INVALID_CONTENT_ENCODING,
+ ErrorLabel::CONTENT_ENCODING,
+ },
+ {
+ NS_ERROR_UNSAFE_CONTENT_TYPE,
+ ErrorLabel::UNSAFE_CONTENT,
+ },
+ {
+ NS_ERROR_CORRUPTED_CONTENT,
+ ErrorLabel::CORRUPTED_CONTENT,
+ },
+ {
+ NS_ERROR_INTERCEPTION_FAILED,
+ ErrorLabel::INTERCEPTION_FAIL,
+ },
+ {
+ NS_ERROR_NET_INADEQUATE_SECURITY,
+ ErrorLabel::INADEQUATE_SEC,
+ },
+ {
+ NS_ERROR_BLOCKED_BY_POLICY,
+ ErrorLabel::BLOCKED_BY_POLICY,
+ },
+ {
+ NS_ERROR_NET_HTTP2_SENT_GOAWAY,
+ ErrorLabel::HTTP2_SENT_GOAWAY,
+ },
+ {
+ NS_ERROR_NET_HTTP3_PROTOCOL_ERROR,
+ ErrorLabel::HTTP3_PROTOCOL,
+ },
+ {
+ NS_BINDING_FAILED,
+ ErrorLabel::BINDING_FAILED,
+ },
+};
+} // anonymous namespace
+
+namespace mozilla {
+namespace dom {
+mozilla::Telemetry::LABELS_PAGE_LOAD_ERROR LoadErrorToTelemetryLabel(
+ nsresult aRv) {
+ MOZ_ASSERT(aRv != NS_OK);
+
+ for (const auto& p : sResult) {
+ if (p.mValue == aRv) {
+ return p.mLabel;
+ }
+ }
+ return ErrorLabel::otherError;
+}
+} // namespace dom
+} // namespace mozilla