summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/xpcshell/test_ext_extension_content_telemetry.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/xpcshell/test_ext_extension_content_telemetry.js')
-rw-r--r--toolkit/components/extensions/test/xpcshell/test_ext_extension_content_telemetry.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_extension_content_telemetry.js b/toolkit/components/extensions/test/xpcshell/test_ext_extension_content_telemetry.js
new file mode 100644
index 0000000000..ee5eb84907
--- /dev/null
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_extension_content_telemetry.js
@@ -0,0 +1,146 @@
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set sts=2 sw=2 et tw=80: */
+"use strict";
+
+const HISTOGRAM = "WEBEXT_CONTENT_SCRIPT_INJECTION_MS";
+const HISTOGRAM_KEYED = "WEBEXT_CONTENT_SCRIPT_INJECTION_MS_BY_ADDONID";
+
+const server = createHttpServer();
+server.registerDirectory("/data/", do_get_file("data"));
+
+const BASE_URL = `http://localhost:${server.identity.primaryPort}/data`;
+
+add_task(async function test_telemetry() {
+ function contentScript() {
+ browser.test.sendMessage("content-script-run");
+ }
+
+ let extension1 = ExtensionTestUtils.loadExtension({
+ manifest: {
+ content_scripts: [
+ {
+ matches: ["http://*/*/file_sample.html"],
+ js: ["content_script.js"],
+ run_at: "document_end",
+ },
+ ],
+ },
+
+ files: {
+ "content_script.js": contentScript,
+ },
+ });
+ let extension2 = ExtensionTestUtils.loadExtension({
+ manifest: {
+ content_scripts: [
+ {
+ matches: ["http://*/*/file_sample.html"],
+ js: ["content_script.js"],
+ run_at: "document_end",
+ },
+ ],
+ },
+
+ files: {
+ "content_script.js": contentScript,
+ },
+ });
+
+ clearHistograms();
+
+ let process = IS_OOP ? "content" : "parent";
+ ok(
+ !(HISTOGRAM in getSnapshots(process)),
+ `No data recorded for histogram: ${HISTOGRAM}.`
+ );
+ ok(
+ !(HISTOGRAM_KEYED in getKeyedSnapshots(process)),
+ `No data recorded for keyed histogram: ${HISTOGRAM_KEYED}.`
+ );
+
+ await extension1.startup();
+ let extensionId = extension1.extension.id;
+
+ info(`Started extension with id ${extensionId}`);
+
+ ok(
+ !(HISTOGRAM in getSnapshots(process)),
+ `No data recorded for histogram after startup: ${HISTOGRAM}.`
+ );
+ ok(
+ !(HISTOGRAM_KEYED in getKeyedSnapshots(process)),
+ `No data recorded for keyed histogram: ${HISTOGRAM_KEYED}.`
+ );
+
+ let contentPage = await ExtensionTestUtils.loadContentPage(
+ `${BASE_URL}/file_sample.html`
+ );
+ await extension1.awaitMessage("content-script-run");
+ await promiseTelemetryRecorded(HISTOGRAM, process, 1);
+ await promiseKeyedTelemetryRecorded(HISTOGRAM_KEYED, process, extensionId, 1);
+
+ equal(
+ valueSum(getSnapshots(process)[HISTOGRAM].values),
+ 1,
+ `Data recorded for histogram: ${HISTOGRAM}.`
+ );
+ equal(
+ valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId].values),
+ 1,
+ `Data recorded for histogram: ${HISTOGRAM_KEYED} with key ${extensionId}.`
+ );
+
+ await contentPage.close();
+ await extension1.unload();
+
+ await extension2.startup();
+ let extensionId2 = extension2.extension.id;
+
+ info(`Started extension with id ${extensionId2}`);
+
+ equal(
+ valueSum(getSnapshots(process)[HISTOGRAM].values),
+ 1,
+ `No new data recorded for histogram after extension2 startup: ${HISTOGRAM}.`
+ );
+ equal(
+ valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId].values),
+ 1,
+ `No new data recorded for histogram after extension2 startup: ${HISTOGRAM_KEYED} with key ${extensionId}.`
+ );
+ ok(
+ !(extensionId2 in getKeyedSnapshots(process)[HISTOGRAM_KEYED]),
+ `No data recorded for histogram after startup: ${HISTOGRAM_KEYED} with key ${extensionId2}.`
+ );
+
+ contentPage = await ExtensionTestUtils.loadContentPage(
+ `${BASE_URL}/file_sample.html`
+ );
+ await extension2.awaitMessage("content-script-run");
+ await promiseTelemetryRecorded(HISTOGRAM, process, 2);
+ await promiseKeyedTelemetryRecorded(
+ HISTOGRAM_KEYED,
+ process,
+ extensionId2,
+ 1
+ );
+
+ equal(
+ valueSum(getSnapshots(process)[HISTOGRAM].values),
+ 2,
+ `Data recorded for histogram: ${HISTOGRAM}.`
+ );
+ equal(
+ valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId].values),
+ 1,
+ `No new data recorded for histogram: ${HISTOGRAM_KEYED} with key ${extensionId}.`
+ );
+ equal(
+ valueSum(getKeyedSnapshots(process)[HISTOGRAM_KEYED][extensionId2].values),
+ 1,
+ `Data recorded for histogram: ${HISTOGRAM_KEYED} with key ${extensionId2}.`
+ );
+
+ await contentPage.close();
+ await extension2.unload();
+});