diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 4cdc38594241..7b716267fdfd 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -449,6 +449,8 @@ Parser::Parser(ExclusiveContext *cx, LifoAlloc *alloc, template Parser::~Parser() { + accumulateTelemetry(); + alloc.release(tempPoolMark); /* @@ -7567,6 +7569,29 @@ Parser::exprInParens() return pn; } +template +void +Parser::accumulateTelemetry() +{ + JSContext* cx = context->maybeJSContext(); + if (!cx) + return; + JSAccumulateTelemetryDataCallback cb = cx->runtime()->telemetryCallback; + if (!cb) + return; + const char* filename = getFilename(); + if (!filename) + return; + + bool isHTTP = strncmp(filename, "http://", 7) == 0 || strncmp(filename, "https://", 8) == 0; + + // Only report telemetry for web content, not add-ons or chrome JS. + if (!isHTTP) + return; + + // TODO: Call back into Firefox's Telemetry reporter. +} + template class Parser; template class Parser; diff --git a/js/src/frontend/Parser.h b/js/src/frontend/Parser.h index fb1f759a14d4..ba4272741b44 100644 --- a/js/src/frontend/Parser.h +++ b/js/src/frontend/Parser.h @@ -658,6 +658,8 @@ class Parser : private JS::AutoGCRooter, public StrictModeGetter bool asmJS(Node list); + void accumulateTelemetry(); + friend class LegacyCompExprTransplanter; friend struct BindData; }; diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h index e175b33b403e..547dea6706c1 100644 --- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -119,7 +119,8 @@ enum { JS_TELEMETRY_GC_INCREMENTAL_DISABLED, JS_TELEMETRY_GC_NON_INCREMENTAL, JS_TELEMETRY_GC_SCC_SWEEP_TOTAL_MS, - JS_TELEMETRY_GC_SCC_SWEEP_MAX_PAUSE_MS + JS_TELEMETRY_GC_SCC_SWEEP_MAX_PAUSE_MS, + JS_TELEMETRY_DEPRECATED_LANGUAGE_EXTENSIONS_IN_CONTENT }; typedef void diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp index 3532c4c05a61..5514bf25f09a 100644 --- a/js/xpconnect/src/XPCJSRuntime.cpp +++ b/js/xpconnect/src/XPCJSRuntime.cpp @@ -2929,6 +2929,11 @@ AccumulateTelemetryCallback(int id, uint32_t sample) case JS_TELEMETRY_GC_SCC_SWEEP_MAX_PAUSE_MS: Telemetry::Accumulate(Telemetry::GC_SCC_SWEEP_MAX_PAUSE_MS, sample); break; + case JS_TELEMETRY_DEPRECATED_LANGUAGE_EXTENSIONS_IN_CONTENT: + Telemetry::Accumulate(Telemetry::JS_DEPRECATED_LANGUAGE_EXTENSIONS_IN_CONTENT, sample); + break; + default: + MOZ_ASSERT_UNREACHABLE("Unexpected JS_TELEMETRY id"); } } diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 7037df4e4522..a916830ace28 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -318,6 +318,12 @@ "kind": "flag", "description": "Has seen location error" }, + "JS_DEPRECATED_LANGUAGE_EXTENSIONS_IN_CONTENT": { + "expires_in_version": "never", + "kind": "enumerated", + "n_values": 10, + "description": "Use of SpiderMonkey's deprecated language extensions in web content" + }, "TELEMETRY_PING": { "expires_in_version": "never", "kind": "exponential",