diff --git a/parser/htmlparser/metrics.yaml b/parser/htmlparser/metrics.yaml
new file mode 100644
index 000000000000..7ee44acfed23
--- /dev/null
+++ b/parser/htmlparser/metrics.yaml
@@ -0,0 +1,64 @@
+# 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/.
+
+# Adding a new metric? We have docs for that!
+# https://firefox-source-docs.mozilla.org/toolkit/components/glean/user/new_definitions_file.html
+
+---
+$schema: moz://mozilla.org/schemas/glean/metrics/2-0-0
+$tags:
+ - 'Core :: XML'
+
+ysod:
+ shown_ysod:
+ type: event
+ description: >
+ This event is recorded only for Firefox UI documents (chrome).
+ Recorded when a Yellow Screen of Death is shown. The `value` is a
+ url on which the error happened. Yellow Screen of Death happens when
+ XML or XHTML document encounters a parsing error. It is commonly a
+ result of the document being malformed or missing DTD entity.
+ This data should be reviewed periodically for urls that error frequently.
+ This event was generated to correspond to the Legacy Telemetry event
+ ysod.shown#ysod.
+ bugs: &ysod_shown_bugs
+ - https://bugzil.la/1657242
+ data_reviews: &ysod_shown_data_reviews
+ - https://bugzil.la/1657242
+ notification_emails:
+ - gtatum@mozilla.com
+ - nordzilla@mozilla.com
+ - earo@mozilla.com
+ - vchin@mozilla.com
+ expires: never
+ extra_keys:
+ value:
+ description: >
+ The url of the Firefox UI (chrome) document that showed the YSOD.
+ type: string
+ error_code:
+ description: >
+ Code of the XML Error (See `XML_Error` enum in expat.h for the list of errors where XML_ERROR_NONE is 0).
+ type: quantity
+ location:
+ description: >
+ Location as Row:Column of where the error happened.
+ type: string
+ last_line:
+ description: >
+ The content of the last line that led to the error.
+ type: string
+ last_line_len:
+ description: >
+ The length of the last line that led to the error.
+ type: quantity
+ hidden:
+ description: >
+ The document is hidden.
+ type: boolean
+ destroyed:
+ description: >
+ The container of this document is destroyed.
+ type: string
+ telemetry_mirror: Ysod_Shown_Ysod
diff --git a/parser/htmlparser/nsExpatDriver.cpp b/parser/htmlparser/nsExpatDriver.cpp
index 0719ea9c5893..f522ffad5262 100644
--- a/parser/htmlparser/nsExpatDriver.cpp
+++ b/parser/htmlparser/nsExpatDriver.cpp
@@ -35,7 +35,7 @@
#include "mozilla/IntegerTypeTraits.h"
#include "mozilla/NullPrincipal.h"
#include "mozilla/Telemetry.h"
-#include "mozilla/TelemetryComms.h"
+#include "mozilla/glean/GleanMetrics.h"
#include "nsThreadUtils.h"
#include "mozilla/ClearOnShutdown.h"
@@ -1108,30 +1108,19 @@ nsresult nsExpatDriver::HandleError() {
docShellDestroyed.Assign(destroyed ? "true"_ns : "false"_ns);
}
- mozilla::Maybe> extra =
- mozilla::Some>({
- mozilla::Telemetry::EventExtraEntry{"error_code"_ns,
- nsPrintfCString("%u", code)},
- mozilla::Telemetry::EventExtraEntry{
- "location"_ns,
- nsPrintfCString(
- "%lu:%lu",
- lineNumber.unverified_safe_because(RLBOX_SAFE_PRINT),
- colNumber.unverified_safe_because(RLBOX_SAFE_PRINT))},
- mozilla::Telemetry::EventExtraEntry{
- "last_line"_ns, NS_ConvertUTF16toUTF8(mLastLine)},
- mozilla::Telemetry::EventExtraEntry{
- "last_line_len"_ns, nsPrintfCString("%zu", mLastLine.Length())},
- mozilla::Telemetry::EventExtraEntry{
- "hidden"_ns, doc->Hidden() ? "true"_ns : "false"_ns},
- mozilla::Telemetry::EventExtraEntry{"destroyed"_ns,
- docShellDestroyed},
- });
-
mozilla::Telemetry::SetEventRecordingEnabled("ysod"_ns, true);
- mozilla::Telemetry::RecordEvent(
- mozilla::Telemetry::EventID::Ysod_Shown_Ysod, mozilla::Some(path),
- extra);
+ mozilla::glean::ysod::ShownYsodExtra extra = {
+ .destroyed = mozilla::Some(docShellDestroyed),
+ .errorCode = mozilla::Some(code),
+ .hidden = mozilla::Some(doc->Hidden()),
+ .lastLine = mozilla::Some(NS_ConvertUTF16toUTF8(mLastLine)),
+ .lastLineLen = mozilla::Some(mLastLine.Length()),
+ .location = mozilla::Some(nsPrintfCString(
+ "%lu:%lu", lineNumber.unverified_safe_because(RLBOX_SAFE_PRINT),
+ colNumber.unverified_safe_because(RLBOX_SAFE_PRINT))),
+ .value = mozilla::Some(path),
+ };
+ mozilla::glean::ysod::shown_ysod.Record(mozilla::Some(extra));
}
// Try to create and initialize the script error.
diff --git a/toolkit/components/glean/metrics_index.py b/toolkit/components/glean/metrics_index.py
index 82cc19b80dcd..7f79e282e791 100644
--- a/toolkit/components/glean/metrics_index.py
+++ b/toolkit/components/glean/metrics_index.py
@@ -40,6 +40,7 @@ gecko_metrics = [
"netwerk/metrics.yaml",
"netwerk/protocol/http/metrics.yaml",
"parser/html/metrics.yaml",
+ "parser/htmlparser/metrics.yaml",
"security/certverifier/metrics.yaml",
"security/manager/ssl/metrics.yaml",
"services/common/metrics.yaml",