DEV: Disable upload instrumentation if performance.measure returns undefined (#14427)

DEV: Disable upload instrumentation if performance.measure returns undefined (#14427)

Firefox does not return a PerformanceMeasure object when using performance.mark and performance.measure, even though MDN says it should performance.measure() - Web APIs | MDN

So for now, we disable the upload instrumentation with a test to see if a PerformanceMeasure (or anything really) is returned.

diff --git a/app/assets/javascripts/discourse/app/mixins/upload-debugging.js b/app/assets/javascripts/discourse/app/mixins/upload-debugging.js
index abc56df..0c7a935 100644
--- a/app/assets/javascripts/discourse/app/mixins/upload-debugging.js
+++ b/app/assets/javascripts/discourse/app/mixins/upload-debugging.js
@@ -1,4 +1,5 @@
 import Mixin from "@ember/object/mixin";
+import { warn } from "@ember/debug";
 
 export default Mixin.create({
   _consoleDebug(msg) {
@@ -17,7 +18,27 @@ export default Mixin.create({
     );
   },
 
+  _performanceApiSupport() {
+    performance.mark("testing support 1");
+    performance.mark("testing support 2");
+    const perfMeasure = performance.measure(
+      "performance api support",
+      "testing support 1",
+      "testing support 2"
+    );
+    return perfMeasure;
+  },
+
   _instrumentUploadTimings() {
+    if (!this._performanceApiSupport()) {
+      // TODO (martin) (2021-01-23) Check if FireFox fixed this yet.
+      warn(
+        "Some browsers do not return a PerformanceMeasure when calling performance.mark, disabling instrumentation. See https://developer.mozilla.org/en-US/docs/Web/API/Performance/measure#return_value and https://bugzilla.mozilla.org/show_bug.cgi?id=1724645",
+        { id: "discourse.upload-debugging" }
+      );
+      return;
+    }
+
     this._uppyInstance.on("upload", (data) => {
       data.fileIDs.forEach((fileId) =>
         performance.mark(`upload-${fileId}-start`)

GitHub sha: ec087027b3af375830a3337682536c01b85e4a91

This commit appears in #14427 which was approved by lis2. It was merged by martin.